@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.
- package/dist/commands/fresh.d.ts +18 -0
- package/dist/commands/fresh.d.ts.map +1 -0
- package/dist/commands/fresh.js +75 -0
- package/dist/commands/fresh.js.map +1 -0
- package/dist/commands/maintenance.d.ts +22 -0
- package/dist/commands/maintenance.d.ts.map +1 -0
- package/dist/commands/maintenance.js +67 -0
- package/dist/commands/maintenance.js.map +1 -0
- package/dist/commands/make/_shared.d.ts +7 -0
- package/dist/commands/make/_shared.d.ts.map +1 -1
- package/dist/commands/make/_shared.js +36 -0
- package/dist/commands/make/_shared.js.map +1 -1
- package/dist/commands/make/cast.d.ts +4 -0
- package/dist/commands/make/cast.d.ts.map +1 -0
- package/dist/commands/make/cast.js +37 -0
- package/dist/commands/make/cast.js.map +1 -0
- package/dist/commands/make/command.d.ts.map +1 -1
- package/dist/commands/make/command.js +1 -0
- package/dist/commands/make/command.js.map +1 -1
- package/dist/commands/make/controller.d.ts.map +1 -1
- package/dist/commands/make/controller.js +1 -0
- package/dist/commands/make/controller.js.map +1 -1
- package/dist/commands/make/event.d.ts.map +1 -1
- package/dist/commands/make/event.js +1 -0
- package/dist/commands/make/event.js.map +1 -1
- package/dist/commands/make/exception.d.ts +6 -0
- package/dist/commands/make/exception.d.ts.map +1 -0
- package/dist/commands/make/exception.js +53 -0
- package/dist/commands/make/exception.js.map +1 -0
- package/dist/commands/make/job.d.ts.map +1 -1
- package/dist/commands/make/job.js +1 -0
- package/dist/commands/make/job.js.map +1 -1
- package/dist/commands/make/listener.d.ts.map +1 -1
- package/dist/commands/make/listener.js +1 -0
- package/dist/commands/make/listener.js.map +1 -1
- package/dist/commands/make/mail.d.ts.map +1 -1
- package/dist/commands/make/mail.js +1 -0
- package/dist/commands/make/mail.js.map +1 -1
- package/dist/commands/make/middleware.d.ts.map +1 -1
- package/dist/commands/make/middleware.js +1 -0
- package/dist/commands/make/middleware.js.map +1 -1
- package/dist/commands/make/model.d.ts.map +1 -1
- package/dist/commands/make/model.js +1 -0
- package/dist/commands/make/model.js.map +1 -1
- package/dist/commands/make/notification.d.ts +4 -0
- package/dist/commands/make/notification.d.ts.map +1 -0
- package/dist/commands/make/notification.js +39 -0
- package/dist/commands/make/notification.js.map +1 -0
- package/dist/commands/make/observer.d.ts +4 -0
- package/dist/commands/make/observer.d.ts.map +1 -0
- package/dist/commands/make/observer.js +45 -0
- package/dist/commands/make/observer.js.map +1 -0
- package/dist/commands/make/policy.d.ts +4 -0
- package/dist/commands/make/policy.d.ts.map +1 -0
- package/dist/commands/make/policy.js +56 -0
- package/dist/commands/make/policy.js.map +1 -0
- package/dist/commands/make/provider.d.ts.map +1 -1
- package/dist/commands/make/provider.js +1 -0
- package/dist/commands/make/provider.js.map +1 -1
- package/dist/commands/make/request.d.ts.map +1 -1
- package/dist/commands/make/request.js +1 -0
- package/dist/commands/make/request.js.map +1 -1
- package/dist/commands/make/test-stubs.d.ts +24 -0
- package/dist/commands/make/test-stubs.d.ts.map +1 -0
- package/dist/commands/make/test-stubs.js +50 -0
- package/dist/commands/make/test-stubs.js.map +1 -0
- package/dist/commands/make/test.d.ts +2 -14
- package/dist/commands/make/test.d.ts.map +1 -1
- package/dist/commands/make/test.js +2 -41
- package/dist/commands/make/test.js.map +1 -1
- package/dist/commands/make.d.ts.map +1 -1
- package/dist/commands/make.js +10 -0
- package/dist/commands/make.js.map +1 -1
- package/dist/commands/optimize-clear.d.ts +28 -0
- package/dist/commands/optimize-clear.d.ts.map +1 -0
- package/dist/commands/optimize-clear.js +50 -0
- package/dist/commands/optimize-clear.js.map +1 -0
- package/dist/index.js +30 -2
- package/dist/index.js.map +1 -1
- 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":"
|
|
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;
|
|
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,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAE5C,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAmCvD;;;;GAIG;AACH,KAAK,UAAU,kBAAkB,CAC/B,SAAiB,EACjB,SAAiB,EACjB,QAA4B,EAC5B,KAAc;IAEd,MAAM,OAAO,GAAG,SAAS,SAAS,UAAU,CAAA;IAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAA;IAC/C,MAAM,OAAO,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;IAE3G,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAClD,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IACjE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC,CAAA;YAC/D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAA;YACzD,OAAM;QACR,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;IAClE,oEAAoE;IACpE,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC;QAC1F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,uFAAuF,CAAC,CAAC,CAAA;IACpH,CAAC;AACH,CAAC;AAED,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,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,6BAA6B,CAAA;QAC/G,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,iBAAiB,EAAE,yCAAyC,KAAK,EAAE,CAAC,CAAA;IACvF,CAAC;IAED,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;QAEnE,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACtC,MAAM,kBAAkB,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QACrF,CAAC;QAED,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;AACN,CAAC"}
|
|
@@ -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,
|
|
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,
|
|
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,
|
|
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"}
|
|
@@ -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,
|
|
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"}
|
|
@@ -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,
|
|
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"}
|
|
@@ -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,
|
|
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"}
|
|
@@ -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,
|
|
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"}
|
|
@@ -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,
|
|
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"}
|