@rudderjs/cli 0.0.6 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/README.md +1 -1
  2. package/dist/commands/command-list.d.ts +3 -0
  3. package/dist/commands/command-list.d.ts.map +1 -0
  4. package/dist/commands/command-list.js +57 -0
  5. package/dist/commands/command-list.js.map +1 -0
  6. package/dist/commands/make/_shared.d.ts +19 -0
  7. package/dist/commands/make/_shared.d.ts.map +1 -0
  8. package/dist/commands/make/_shared.js +27 -0
  9. package/dist/commands/make/_shared.js.map +1 -0
  10. package/dist/commands/make/command.d.ts.map +1 -1
  11. package/dist/commands/make/command.js +11 -18
  12. package/dist/commands/make/command.js.map +1 -1
  13. package/dist/commands/make/controller.d.ts.map +1 -1
  14. package/dist/commands/make/controller.js +8 -21
  15. package/dist/commands/make/controller.js.map +1 -1
  16. package/dist/commands/make/event.d.ts.map +1 -1
  17. package/dist/commands/make/event.js +7 -20
  18. package/dist/commands/make/event.js.map +1 -1
  19. package/dist/commands/make/job.d.ts.map +1 -1
  20. package/dist/commands/make/job.js +7 -20
  21. package/dist/commands/make/job.js.map +1 -1
  22. package/dist/commands/make/listener.d.ts.map +1 -1
  23. package/dist/commands/make/listener.js +7 -20
  24. package/dist/commands/make/listener.js.map +1 -1
  25. package/dist/commands/make/mail.d.ts.map +1 -1
  26. package/dist/commands/make/mail.js +7 -20
  27. package/dist/commands/make/mail.js.map +1 -1
  28. package/dist/commands/make/middleware.d.ts.map +1 -1
  29. package/dist/commands/make/middleware.js +8 -20
  30. package/dist/commands/make/middleware.js.map +1 -1
  31. package/dist/commands/make/model.d.ts.map +1 -1
  32. package/dist/commands/make/model.js +7 -21
  33. package/dist/commands/make/model.js.map +1 -1
  34. package/dist/commands/make/provider.d.ts.map +1 -1
  35. package/dist/commands/make/provider.js +8 -20
  36. package/dist/commands/make/provider.js.map +1 -1
  37. package/dist/commands/make/request.d.ts.map +1 -1
  38. package/dist/commands/make/request.js +8 -20
  39. package/dist/commands/make/request.js.map +1 -1
  40. package/dist/commands/make.d.ts.map +1 -1
  41. package/dist/commands/make.js +19 -10
  42. package/dist/commands/make.js.map +1 -1
  43. package/dist/commands/providers-discover.d.ts +8 -0
  44. package/dist/commands/providers-discover.d.ts.map +1 -0
  45. package/dist/commands/providers-discover.js +77 -0
  46. package/dist/commands/providers-discover.js.map +1 -0
  47. package/dist/commands/vendor-publish.d.ts.map +1 -1
  48. package/dist/commands/vendor-publish.js +16 -2
  49. package/dist/commands/vendor-publish.js.map +1 -1
  50. package/dist/errors.d.ts +10 -0
  51. package/dist/errors.d.ts.map +1 -0
  52. package/dist/errors.js +14 -0
  53. package/dist/errors.js.map +1 -0
  54. package/dist/index.js +139 -85
  55. package/dist/index.js.map +1 -1
  56. package/package.json +12 -3
  57. package/dist/commands/make/agent.d.ts +0 -4
  58. package/dist/commands/make/agent.d.ts.map +0 -1
  59. package/dist/commands/make/agent.js +0 -41
  60. package/dist/commands/make/agent.js.map +0 -1
  61. package/dist/commands/make/mcp-prompt.d.ts +0 -4
  62. package/dist/commands/make/mcp-prompt.d.ts.map +0 -1
  63. package/dist/commands/make/mcp-prompt.js +0 -45
  64. package/dist/commands/make/mcp-prompt.js.map +0 -1
  65. package/dist/commands/make/mcp-resource.d.ts +0 -4
  66. package/dist/commands/make/mcp-resource.d.ts.map +0 -1
  67. package/dist/commands/make/mcp-resource.js +0 -44
  68. package/dist/commands/make/mcp-resource.js.map +0 -1
  69. package/dist/commands/make/mcp-server.d.ts +0 -4
  70. package/dist/commands/make/mcp-server.d.ts.map +0 -1
  71. package/dist/commands/make/mcp-server.js +0 -46
  72. package/dist/commands/make/mcp-server.js.map +0 -1
  73. package/dist/commands/make/mcp-tool.d.ts +0 -4
  74. package/dist/commands/make/mcp-tool.d.ts.map +0 -1
  75. package/dist/commands/make/mcp-tool.js +0 -43
  76. package/dist/commands/make/mcp-tool.js.map +0 -1
  77. package/dist/commands/migrate.d.ts +0 -11
  78. package/dist/commands/migrate.d.ts.map +0 -1
  79. package/dist/commands/migrate.js +0 -152
  80. package/dist/commands/migrate.js.map +0 -1
@@ -1,43 +0,0 @@
1
- import { writeFile, mkdir } from 'node:fs/promises';
2
- import { existsSync } from 'node:fs';
3
- import { resolve, dirname } from 'node:path';
4
- import chalk from 'chalk';
5
- export function stub(className) {
6
- return `import { McpTool, McpResponse, Description } from '@rudderjs/mcp'
7
- import { z } from 'zod'
8
-
9
- @Description('Describe what this tool does.')
10
- export class ${className} extends McpTool {
11
- schema() {
12
- return z.object({
13
- // Define your input parameters here
14
- })
15
- }
16
-
17
- async handle(input: Record<string, unknown>) {
18
- // Implement your tool logic here
19
- return McpResponse.text('Hello from ${className.replace(/Tool$/, '')}')
20
- }
21
- }
22
- `;
23
- }
24
- export function makeMcpTool(program) {
25
- program
26
- .command('make:mcp-tool <name>')
27
- .description('Create a new MCP tool class')
28
- .option('-f, --force', 'Overwrite if file already exists')
29
- .action(async (name, opts) => {
30
- const className = name.endsWith('Tool') ? name : `${name}Tool`;
31
- const relPath = `app/Mcp/Tools/${className}.ts`;
32
- const outPath = resolve(process.cwd(), relPath);
33
- if (existsSync(outPath) && !opts.force) {
34
- console.error(chalk.red(` ✗ Already exists: ${relPath}`));
35
- console.error(chalk.dim(' Use --force to overwrite.'));
36
- return;
37
- }
38
- await mkdir(dirname(outPath), { recursive: true });
39
- await writeFile(outPath, stub(className));
40
- console.log(chalk.green(' ✔ MCP tool created:'), chalk.cyan(relPath));
41
- });
42
- }
43
- //# sourceMappingURL=mcp-tool.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-tool.js","sourceRoot":"","sources":["../../../src/commands/make/mcp-tool.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;AAEzB,MAAM,UAAU,IAAI,CAAC,SAAiB;IACpC,OAAO;;;;eAIM,SAAS;;;;;;;;;0CASkB,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;;;CAGvE,CAAA;AACD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,OAAO;SACJ,OAAO,CAAC,sBAAsB,CAAC;SAC/B,WAAW,CAAC,6BAA6B,CAAC;SAC1C,MAAM,CAAC,aAAa,EAAE,kCAAkC,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAyB,EAAE,EAAE;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAA;QAC9D,MAAM,OAAO,GAAK,iBAAiB,SAAS,KAAK,CAAA;QACjD,MAAM,OAAO,GAAK,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAA;QAEjD,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC,CAAA;YAC1D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAA;YACzD,OAAM;QACR,CAAC;QAED,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAClD,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAA;QAEzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;IACxE,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -1,11 +0,0 @@
1
- import type { Command } from 'commander';
2
- export type ORM = 'prisma' | 'drizzle';
3
- /** Detect which ORM is installed by checking package.json dependencies. */
4
- export declare function detectORM(cwd?: string): ORM | null;
5
- /** Build the args array for a given ORM and command. Exported for testing. */
6
- export declare function buildArgs(orm: ORM, command: 'migrate' | 'migrate:fresh' | 'migrate:status' | 'make:migration' | 'db:push' | 'db:generate', options?: {
7
- name?: string;
8
- env?: string;
9
- }): string[];
10
- export declare function migrateCommands(program: Command): void;
11
- //# sourceMappingURL=migrate.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKxC,MAAM,MAAM,GAAG,GAAG,QAAQ,GAAG,SAAS,CAAA;AAItC,2EAA2E;AAC3E,wBAAgB,SAAS,CAAC,GAAG,GAAE,MAAsB,GAAG,GAAG,GAAG,IAAI,CAUjE;AAWD,8EAA8E;AAC9E,wBAAgB,SAAS,CACvB,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,SAAS,GAAG,eAAe,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,SAAS,GAAG,aAAa,EACtG,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5C,MAAM,EAAE,CAqCV;AAID,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2FtD"}
@@ -1,152 +0,0 @@
1
- import { readFileSync } from 'node:fs';
2
- import { join } from 'node:path';
3
- import { spawn } from 'node:child_process';
4
- import { intro, outro, log } from '@clack/prompts';
5
- // ─── Helpers ──────────────────────────────────────────────
6
- /** Detect which ORM is installed by checking package.json dependencies. */
7
- export function detectORM(cwd = process.cwd()) {
8
- try {
9
- const pkg = JSON.parse(readFileSync(join(cwd, 'package.json'), 'utf8'));
10
- const deps = { ...pkg.dependencies, ...pkg.devDependencies };
11
- if ('@rudderjs/orm-prisma' in deps)
12
- return 'prisma';
13
- if ('@rudderjs/orm-drizzle' in deps)
14
- return 'drizzle';
15
- return null;
16
- }
17
- catch {
18
- return null;
19
- }
20
- }
21
- /** Run a shell command with inherited stdio. Returns exit code. */
22
- function run(cmd, args, cwd) {
23
- return new Promise((resolve, reject) => {
24
- const proc = spawn(cmd, args, { cwd, stdio: 'inherit', shell: true });
25
- proc.on('close', code => resolve(code ?? 1));
26
- proc.on('error', reject);
27
- });
28
- }
29
- /** Build the args array for a given ORM and command. Exported for testing. */
30
- export function buildArgs(orm, command, options = {}) {
31
- const env = options.env ?? process.env['NODE_ENV'] ?? 'development';
32
- const isProd = env === 'production';
33
- if (orm === 'prisma') {
34
- switch (command) {
35
- case 'migrate':
36
- return ['exec', 'prisma', 'migrate', isProd ? 'deploy' : 'dev'];
37
- case 'migrate:fresh':
38
- return ['exec', 'prisma', 'migrate', 'reset', '--force'];
39
- case 'migrate:status':
40
- return ['exec', 'prisma', 'migrate', 'status'];
41
- case 'make:migration':
42
- return ['exec', 'prisma', 'migrate', 'dev', '--create-only', '--name', options.name ?? 'migration'];
43
- case 'db:push':
44
- return ['exec', 'prisma', 'db', 'push'];
45
- case 'db:generate':
46
- return ['exec', 'prisma', 'generate'];
47
- }
48
- }
49
- // Drizzle
50
- switch (command) {
51
- case 'migrate':
52
- return ['exec', 'drizzle-kit', 'migrate'];
53
- case 'migrate:fresh':
54
- return ['exec', 'drizzle-kit', 'migrate', '--force'];
55
- case 'migrate:status':
56
- return ['exec', 'drizzle-kit', 'check'];
57
- case 'make:migration':
58
- return ['exec', 'drizzle-kit', 'generate', '--name', options.name ?? 'migration'];
59
- case 'db:push':
60
- return ['exec', 'drizzle-kit', 'push'];
61
- case 'db:generate':
62
- // Drizzle schemas are TypeScript — no generation step needed
63
- return [];
64
- }
65
- }
66
- // ─── Commands ─────────────────────────────────────────────
67
- export function migrateCommands(program) {
68
- const cwd = process.cwd();
69
- function requireORM() {
70
- const orm = detectORM(cwd);
71
- if (!orm) {
72
- log.error('No ORM detected. Install @rudderjs/orm-prisma or @rudderjs/orm-drizzle.');
73
- process.exit(1);
74
- }
75
- return orm;
76
- }
77
- async function exec(orm, command, options) {
78
- const args = buildArgs(orm, command, { ...options, env: process.env['NODE_ENV'] ?? 'development' });
79
- if (args.length === 0) {
80
- log.info('Nothing to do (not needed for this ORM).');
81
- return;
82
- }
83
- const code = await run('pnpm', args, cwd);
84
- if (code !== 0)
85
- process.exit(code);
86
- }
87
- // ── migrate ───────────────────────────────────────────
88
- program
89
- .command('migrate')
90
- .description('Run pending database migrations')
91
- .action(async () => {
92
- intro('migrate');
93
- const orm = requireORM();
94
- log.info(`Detected ORM: ${orm}`);
95
- await exec(orm, 'migrate');
96
- outro('Migrations complete.');
97
- });
98
- // ── migrate:fresh ─────────────────────────────────────
99
- program
100
- .command('migrate:fresh')
101
- .description('Drop all tables and re-run all migrations')
102
- .action(async () => {
103
- intro('migrate:fresh');
104
- const orm = requireORM();
105
- log.info(`Detected ORM: ${orm}`);
106
- await exec(orm, 'migrate:fresh');
107
- outro('Database reset complete.');
108
- });
109
- // ── migrate:status ────────────────────────────────────
110
- program
111
- .command('migrate:status')
112
- .description('Show the status of each migration')
113
- .action(async () => {
114
- intro('migrate:status');
115
- const orm = requireORM();
116
- await exec(orm, 'migrate:status');
117
- outro('');
118
- });
119
- // ── make:migration ────────────────────────────────────
120
- program
121
- .command('make:migration <name>')
122
- .description('Create a new migration file')
123
- .action(async (name) => {
124
- intro('make:migration');
125
- const orm = requireORM();
126
- log.info(`Detected ORM: ${orm}`);
127
- await exec(orm, 'make:migration', { name });
128
- outro(`Migration "${name}" created.`);
129
- });
130
- // ── db:push ───────────────────────────────────────────
131
- program
132
- .command('db:push')
133
- .description('Push schema changes directly to the database (no migration file)')
134
- .action(async () => {
135
- intro('db:push');
136
- const orm = requireORM();
137
- log.info(`Detected ORM: ${orm}`);
138
- await exec(orm, 'db:push');
139
- outro('Database pushed.');
140
- });
141
- // ── db:generate ───────────────────────────────────────
142
- program
143
- .command('db:generate')
144
- .description('Regenerate the database client (Prisma only)')
145
- .action(async () => {
146
- intro('db:generate');
147
- const orm = requireORM();
148
- await exec(orm, 'db:generate');
149
- outro('Client generated.');
150
- });
151
- }
152
- //# sourceMappingURL=migrate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}