@rudderjs/cli 0.0.6

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 (91) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +156 -0
  3. package/dist/commands/make/agent.d.ts +4 -0
  4. package/dist/commands/make/agent.d.ts.map +1 -0
  5. package/dist/commands/make/agent.js +41 -0
  6. package/dist/commands/make/agent.js.map +1 -0
  7. package/dist/commands/make/command.d.ts +4 -0
  8. package/dist/commands/make/command.d.ts.map +1 -0
  9. package/dist/commands/make/command.js +46 -0
  10. package/dist/commands/make/command.js.map +1 -0
  11. package/dist/commands/make/controller.d.ts +5 -0
  12. package/dist/commands/make/controller.d.ts.map +1 -0
  13. package/dist/commands/make/controller.js +46 -0
  14. package/dist/commands/make/controller.js.map +1 -0
  15. package/dist/commands/make/event.d.ts +4 -0
  16. package/dist/commands/make/event.d.ts.map +1 -0
  17. package/dist/commands/make/event.js +32 -0
  18. package/dist/commands/make/event.js.map +1 -0
  19. package/dist/commands/make/job.d.ts +4 -0
  20. package/dist/commands/make/job.d.ts.map +1 -0
  21. package/dist/commands/make/job.js +41 -0
  22. package/dist/commands/make/job.js.map +1 -0
  23. package/dist/commands/make/listener.d.ts +4 -0
  24. package/dist/commands/make/listener.d.ts.map +1 -0
  25. package/dist/commands/make/listener.js +34 -0
  26. package/dist/commands/make/listener.js.map +1 -0
  27. package/dist/commands/make/mail.d.ts +4 -0
  28. package/dist/commands/make/mail.d.ts.map +1 -0
  29. package/dist/commands/make/mail.js +41 -0
  30. package/dist/commands/make/mail.js.map +1 -0
  31. package/dist/commands/make/mcp-prompt.d.ts +4 -0
  32. package/dist/commands/make/mcp-prompt.d.ts.map +1 -0
  33. package/dist/commands/make/mcp-prompt.js +45 -0
  34. package/dist/commands/make/mcp-prompt.js.map +1 -0
  35. package/dist/commands/make/mcp-resource.d.ts +4 -0
  36. package/dist/commands/make/mcp-resource.d.ts.map +1 -0
  37. package/dist/commands/make/mcp-resource.js +44 -0
  38. package/dist/commands/make/mcp-resource.js.map +1 -0
  39. package/dist/commands/make/mcp-server.d.ts +4 -0
  40. package/dist/commands/make/mcp-server.d.ts.map +1 -0
  41. package/dist/commands/make/mcp-server.js +46 -0
  42. package/dist/commands/make/mcp-server.js.map +1 -0
  43. package/dist/commands/make/mcp-tool.d.ts +4 -0
  44. package/dist/commands/make/mcp-tool.d.ts.map +1 -0
  45. package/dist/commands/make/mcp-tool.js +43 -0
  46. package/dist/commands/make/mcp-tool.js.map +1 -0
  47. package/dist/commands/make/middleware.d.ts +4 -0
  48. package/dist/commands/make/middleware.d.ts.map +1 -0
  49. package/dist/commands/make/middleware.js +40 -0
  50. package/dist/commands/make/middleware.js.map +1 -0
  51. package/dist/commands/make/model.d.ts +5 -0
  52. package/dist/commands/make/model.d.ts.map +1 -0
  53. package/dist/commands/make/model.js +43 -0
  54. package/dist/commands/make/model.js.map +1 -0
  55. package/dist/commands/make/provider.d.ts +4 -0
  56. package/dist/commands/make/provider.d.ts.map +1 -0
  57. package/dist/commands/make/provider.js +39 -0
  58. package/dist/commands/make/provider.js.map +1 -0
  59. package/dist/commands/make/request.d.ts +4 -0
  60. package/dist/commands/make/request.d.ts.map +1 -0
  61. package/dist/commands/make/request.js +40 -0
  62. package/dist/commands/make/request.js.map +1 -0
  63. package/dist/commands/make.d.ts +3 -0
  64. package/dist/commands/make.d.ts.map +1 -0
  65. package/dist/commands/make.js +33 -0
  66. package/dist/commands/make.js.map +1 -0
  67. package/dist/commands/migrate.d.ts +11 -0
  68. package/dist/commands/migrate.d.ts.map +1 -0
  69. package/dist/commands/migrate.js +152 -0
  70. package/dist/commands/migrate.js.map +1 -0
  71. package/dist/commands/module/make.d.ts +9 -0
  72. package/dist/commands/module/make.d.ts.map +1 -0
  73. package/dist/commands/module/make.js +190 -0
  74. package/dist/commands/module/make.js.map +1 -0
  75. package/dist/commands/module/publish.d.ts +14 -0
  76. package/dist/commands/module/publish.d.ts.map +1 -0
  77. package/dist/commands/module/publish.js +117 -0
  78. package/dist/commands/module/publish.js.map +1 -0
  79. package/dist/commands/module.d.ts +3 -0
  80. package/dist/commands/module.d.ts.map +1 -0
  81. package/dist/commands/module.js +7 -0
  82. package/dist/commands/module.js.map +1 -0
  83. package/dist/commands/vendor-publish.d.ts +5 -0
  84. package/dist/commands/vendor-publish.d.ts.map +1 -0
  85. package/dist/commands/vendor-publish.js +190 -0
  86. package/dist/commands/vendor-publish.js.map +1 -0
  87. package/dist/index.d.ts +3 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +253 -0
  90. package/dist/index.js.map +1 -0
  91. package/package.json +40 -0
@@ -0,0 +1,44 @@
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 { McpResource, Description } from '@rudderjs/mcp'
7
+
8
+ @Description('Describe what this resource provides.')
9
+ export class ${className} extends McpResource {
10
+ uri(): string {
11
+ return 'app://${className.replace(/Resource$/, '').toLowerCase()}'
12
+ }
13
+
14
+ mimeType(): string {
15
+ return 'text/plain'
16
+ }
17
+
18
+ async handle(): Promise<string> {
19
+ // Return resource content here
20
+ return 'Resource content'
21
+ }
22
+ }
23
+ `;
24
+ }
25
+ export function makeMcpResource(program) {
26
+ program
27
+ .command('make:mcp-resource <name>')
28
+ .description('Create a new MCP resource class')
29
+ .option('-f, --force', 'Overwrite if file already exists')
30
+ .action(async (name, opts) => {
31
+ const className = name.endsWith('Resource') ? name : `${name}Resource`;
32
+ const relPath = `app/Mcp/Resources/${className}.ts`;
33
+ const outPath = resolve(process.cwd(), relPath);
34
+ if (existsSync(outPath) && !opts.force) {
35
+ console.error(chalk.red(` ✗ Already exists: ${relPath}`));
36
+ console.error(chalk.dim(' Use --force to overwrite.'));
37
+ return;
38
+ }
39
+ await mkdir(dirname(outPath), { recursive: true });
40
+ await writeFile(outPath, stub(className));
41
+ console.log(chalk.green(' ✔ MCP resource created:'), chalk.cyan(relPath));
42
+ });
43
+ }
44
+ //# sourceMappingURL=mcp-resource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-resource.js","sourceRoot":"","sources":["../../../src/commands/make/mcp-resource.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;;;eAGM,SAAS;;oBAEJ,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE;;;;;;;;;;;;CAYnE,CAAA;AACD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,OAAO;SACJ,OAAO,CAAC,0BAA0B,CAAC;SACnC,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,aAAa,EAAE,kCAAkC,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAyB,EAAE,EAAE;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,UAAU,CAAA;QACtE,MAAM,OAAO,GAAK,qBAAqB,SAAS,KAAK,CAAA;QACrD,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,2BAA2B,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;IAC5E,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Command } from 'commander';
2
+ export declare function stub(className: string): string;
3
+ export declare function makeMcpServer(program: Command): void;
4
+ //# sourceMappingURL=mcp-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../../src/commands/make/mcp-server.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAqB9C;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqBpD"}
@@ -0,0 +1,46 @@
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 { McpServer } from '@rudderjs/mcp'
7
+ import { Name, Version, Instructions } from '@rudderjs/mcp'
8
+
9
+ @Name('${className.replace(/Server$/, '')} Server')
10
+ @Version('1.0.0')
11
+ @Instructions('Provide a description of this MCP server.')
12
+ export class ${className} extends McpServer {
13
+ protected tools = [
14
+ // Add your tool classes here
15
+ ]
16
+
17
+ protected resources = [
18
+ // Add your resource classes here
19
+ ]
20
+
21
+ protected prompts = [
22
+ // Add your prompt classes here
23
+ ]
24
+ }
25
+ `;
26
+ }
27
+ export function makeMcpServer(program) {
28
+ program
29
+ .command('make:mcp-server <name>')
30
+ .description('Create a new MCP server class')
31
+ .option('-f, --force', 'Overwrite if file already exists')
32
+ .action(async (name, opts) => {
33
+ const className = name.endsWith('Server') ? name : `${name}Server`;
34
+ const relPath = `app/Mcp/Servers/${className}.ts`;
35
+ const outPath = resolve(process.cwd(), relPath);
36
+ if (existsSync(outPath) && !opts.force) {
37
+ console.error(chalk.red(` ✗ Already exists: ${relPath}`));
38
+ console.error(chalk.dim(' Use --force to overwrite.'));
39
+ return;
40
+ }
41
+ await mkdir(dirname(outPath), { recursive: true });
42
+ await writeFile(outPath, stub(className));
43
+ console.log(chalk.green(' ✔ MCP server created:'), chalk.cyan(relPath));
44
+ });
45
+ }
46
+ //# sourceMappingURL=mcp-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../../src/commands/make/mcp-server.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;;;SAGA,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;;;eAG1B,SAAS;;;;;;;;;;;;;CAavB,CAAA;AACD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO;SACJ,OAAO,CAAC,wBAAwB,CAAC;SACjC,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,aAAa,EAAE,kCAAkC,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAyB,EAAE,EAAE;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,QAAQ,CAAA;QAClE,MAAM,OAAO,GAAK,mBAAmB,SAAS,KAAK,CAAA;QACnD,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,yBAAyB,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;IAC1E,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Command } from 'commander';
2
+ export declare function stub(className: string): string;
3
+ export declare function makeMcpTool(program: Command): void;
4
+ //# sourceMappingURL=mcp-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-tool.d.ts","sourceRoot":"","sources":["../../../src/commands/make/mcp-tool.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAkB9C;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqBlD"}
@@ -0,0 +1,43 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,4 @@
1
+ import type { Command } from 'commander';
2
+ export declare function stub(className: string): string;
3
+ export declare function makeMiddleware(program: Command): void;
4
+ //# sourceMappingURL=middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/commands/make/middleware.ts"],"names":[],"mappings":"AAGA,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,CAqBrD"}
@@ -0,0 +1,40 @@
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 { Middleware } from '@rudderjs/middleware'
7
+ import type { AppRequest, AppResponse } from '@rudderjs/contracts'
8
+
9
+ export class ${className} extends Middleware {
10
+ async handle(
11
+ req: AppRequest,
12
+ res: AppResponse,
13
+ next: () => Promise<void>
14
+ ): Promise<void> {
15
+ // TODO: implement middleware logic
16
+ await next()
17
+ }
18
+ }
19
+ `;
20
+ }
21
+ export function makeMiddleware(program) {
22
+ program
23
+ .command('make:middleware <name>')
24
+ .description('Create a new middleware class')
25
+ .option('-f, --force', 'Overwrite if file already exists')
26
+ .action(async (name, opts) => {
27
+ const className = name.endsWith('Middleware') ? name : `${name}Middleware`;
28
+ const relPath = `app/Http/Middleware/${className}.ts`;
29
+ const outPath = resolve(process.cwd(), relPath);
30
+ if (existsSync(outPath) && !opts.force) {
31
+ console.error(chalk.red(` ✗ Already exists: ${relPath}`));
32
+ console.error(chalk.dim(' Use --force to overwrite.'));
33
+ return;
34
+ }
35
+ await mkdir(dirname(outPath), { recursive: true });
36
+ await writeFile(outPath, stub(className));
37
+ console.log(chalk.green(' ✔ Middleware created:'), chalk.cyan(relPath));
38
+ });
39
+ }
40
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/commands/make/middleware.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;;;eAGM,SAAS;;;;;;;;;;CAUvB,CAAA;AACD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,OAAO;SACJ,OAAO,CAAC,wBAAwB,CAAC;SACjC,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,aAAa,EAAE,kCAAkC,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAyB,EAAE,EAAE;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,YAAY,CAAA;QAC1E,MAAM,OAAO,GAAK,uBAAuB,SAAS,KAAK,CAAA;QACvD,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,yBAAyB,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;IAC1E,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { Command } from 'commander';
2
+ export declare function stub(className: string, table: string): string;
3
+ export declare function deriveTable(className: string): string;
4
+ export declare function makeModel(program: Command): void;
5
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/commands/make/model.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,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,CAsBhD"}
@@ -0,0 +1,43 @@
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, table) {
6
+ return `import { Model } from '@rudderjs/orm'
7
+
8
+ export class ${className} extends Model {
9
+ static table = '${table}'
10
+
11
+ static fillable: string[] = []
12
+
13
+ static hidden: string[] = []
14
+ }
15
+ `;
16
+ }
17
+ export function deriveTable(className) {
18
+ // PascalCase → snake_case, then pluralise
19
+ return (className
20
+ .replace(/([A-Z])/g, (m, l, i) => (i === 0 ? l : `_${l}`))
21
+ .toLowerCase() + 's');
22
+ }
23
+ export function makeModel(program) {
24
+ program
25
+ .command('make:model <name>')
26
+ .description('Create a new ORM model class')
27
+ .option('-f, --force', 'Overwrite if file already exists')
28
+ .action(async (name, opts) => {
29
+ const className = name;
30
+ const table = deriveTable(className);
31
+ const relPath = `app/Models/${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, table));
40
+ console.log(chalk.green(' ✔ Model created:'), chalk.cyan(relPath));
41
+ });
42
+ }
43
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/commands/make/model.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,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,MAAM,UAAU,SAAS,CAAC,OAAgB;IACxC,OAAO;SACJ,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,aAAa,EAAE,kCAAkC,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAyB,EAAE,EAAE;QACxD,MAAM,SAAS,GAAG,IAAI,CAAA;QACtB,MAAM,KAAK,GAAO,WAAW,CAAC,SAAS,CAAC,CAAA;QACxC,MAAM,OAAO,GAAK,cAAc,SAAS,KAAK,CAAA;QAC9C,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,EAAE,KAAK,CAAC,CAAC,CAAA;QAEhD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;IACrE,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Command } from 'commander';
2
+ export declare function stub(className: string): string;
3
+ export declare function makeProvider(program: Command): void;
4
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/commands/make/provider.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAc9C;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqBnD"}
@@ -0,0 +1,39 @@
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 { ServiceProvider } from '@rudderjs/core'
7
+
8
+ export class ${className} extends ServiceProvider {
9
+ register(): void {
10
+ // TODO: bind services into the container
11
+ // this.app.singleton(MyService, () => new MyService())
12
+ }
13
+
14
+ async boot(): Promise<void> {
15
+ // TODO: run logic after all providers are registered
16
+ }
17
+ }
18
+ `;
19
+ }
20
+ export function makeProvider(program) {
21
+ program
22
+ .command('make:provider <name>')
23
+ .description('Create a new service provider class')
24
+ .option('-f, --force', 'Overwrite if file already exists')
25
+ .action(async (name, opts) => {
26
+ const className = name.endsWith('ServiceProvider') ? name : `${name}ServiceProvider`;
27
+ const relPath = `app/Providers/${className}.ts`;
28
+ const outPath = resolve(process.cwd(), relPath);
29
+ if (existsSync(outPath) && !opts.force) {
30
+ console.error(chalk.red(` ✗ Already exists: ${relPath}`));
31
+ console.error(chalk.dim(' Use --force to overwrite.'));
32
+ return;
33
+ }
34
+ await mkdir(dirname(outPath), { recursive: true });
35
+ await writeFile(outPath, stub(className));
36
+ console.log(chalk.green(' ✔ Provider created:'), chalk.cyan(relPath));
37
+ });
38
+ }
39
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/commands/make/provider.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;;eAEM,SAAS;;;;;;;;;;CAUvB,CAAA;AACD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,sBAAsB,CAAC;SAC/B,WAAW,CAAC,qCAAqC,CAAC;SAClD,MAAM,CAAC,aAAa,EAAE,kCAAkC,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAyB,EAAE,EAAE;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,iBAAiB,CAAA;QACpF,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"}
@@ -0,0 +1,4 @@
1
+ import type { Command } from 'commander';
2
+ export declare function stub(className: string): string;
3
+ export declare function makeRequest(program: Command): void;
4
+ //# sourceMappingURL=request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../../src/commands/make/request.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAe9C;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqBlD"}
@@ -0,0 +1,40 @@
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 { FormRequest, z } from '@rudderjs/core'
7
+
8
+ export class ${className} extends FormRequest {
9
+ authorize(): boolean {
10
+ return true
11
+ }
12
+
13
+ rules() {
14
+ return z.object({
15
+ // TODO: define validation rules
16
+ })
17
+ }
18
+ }
19
+ `;
20
+ }
21
+ export function makeRequest(program) {
22
+ program
23
+ .command('make:request <name>')
24
+ .description('Create a new form request class')
25
+ .option('-f, --force', 'Overwrite if file already exists')
26
+ .action(async (name, opts) => {
27
+ const className = name.endsWith('Request') ? name : `${name}Request`;
28
+ const relPath = `app/Http/Requests/${className}.ts`;
29
+ const outPath = resolve(process.cwd(), relPath);
30
+ if (existsSync(outPath) && !opts.force) {
31
+ console.error(chalk.red(` ✗ Already exists: ${relPath}`));
32
+ console.error(chalk.dim(' Use --force to overwrite.'));
33
+ return;
34
+ }
35
+ await mkdir(dirname(outPath), { recursive: true });
36
+ await writeFile(outPath, stub(className));
37
+ console.log(chalk.green(' ✔ Request created:'), chalk.cyan(relPath));
38
+ });
39
+ }
40
+ //# sourceMappingURL=request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/commands/make/request.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;;eAEM,SAAS;;;;;;;;;;;CAWvB,CAAA;AACD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,OAAO;SACJ,OAAO,CAAC,qBAAqB,CAAC;SAC9B,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,aAAa,EAAE,kCAAkC,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAyB,EAAE,EAAE;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,SAAS,CAAA;QACpE,MAAM,OAAO,GAAK,qBAAqB,SAAS,KAAK,CAAA;QACrD,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,sBAAsB,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;IACvE,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function makeCommand(program: Command): void;
3
+ //# sourceMappingURL=make.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make.d.ts","sourceRoot":"","sources":["../../src/commands/make.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAiBxC,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgBlD"}
@@ -0,0 +1,33 @@
1
+ import { makeController } from './make/controller.js';
2
+ import { makeModel } from './make/model.js';
3
+ import { makeJob } from './make/job.js';
4
+ import { makeMiddleware } from './make/middleware.js';
5
+ import { makeRequest } from './make/request.js';
6
+ import { makeProvider } from './make/provider.js';
7
+ import { makeCommandCmd } from './make/command.js';
8
+ import { makeEvent } from './make/event.js';
9
+ import { makeListener } from './make/listener.js';
10
+ import { makeMail } from './make/mail.js';
11
+ import { makeAgent } from './make/agent.js';
12
+ import { makeMcpServer } from './make/mcp-server.js';
13
+ import { makeMcpTool } from './make/mcp-tool.js';
14
+ import { makeMcpResource } from './make/mcp-resource.js';
15
+ import { makeMcpPrompt } from './make/mcp-prompt.js';
16
+ export function makeCommand(program) {
17
+ makeController(program);
18
+ makeModel(program);
19
+ makeJob(program);
20
+ makeMiddleware(program);
21
+ makeRequest(program);
22
+ makeProvider(program);
23
+ makeCommandCmd(program);
24
+ makeEvent(program);
25
+ makeListener(program);
26
+ makeMail(program);
27
+ makeAgent(program);
28
+ makeMcpServer(program);
29
+ makeMcpTool(program);
30
+ makeMcpResource(program);
31
+ makeMcpPrompt(program);
32
+ }
33
+ //# sourceMappingURL=make.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make.js","sourceRoot":"","sources":["../../src/commands/make.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,cAAc,CAAC,OAAO,CAAC,CAAA;IACvB,SAAS,CAAC,OAAO,CAAC,CAAA;IAClB,OAAO,CAAC,OAAO,CAAC,CAAA;IAChB,cAAc,CAAC,OAAO,CAAC,CAAA;IACvB,WAAW,CAAC,OAAO,CAAC,CAAA;IACpB,YAAY,CAAC,OAAO,CAAC,CAAA;IACrB,cAAc,CAAC,OAAO,CAAC,CAAA;IACvB,SAAS,CAAC,OAAO,CAAC,CAAA;IAClB,YAAY,CAAC,OAAO,CAAC,CAAA;IACrB,QAAQ,CAAC,OAAO,CAAC,CAAA;IACjB,SAAS,CAAC,OAAO,CAAC,CAAA;IAClB,aAAa,CAAC,OAAO,CAAC,CAAA;IACtB,WAAW,CAAC,OAAO,CAAC,CAAA;IACpB,eAAe,CAAC,OAAO,CAAC,CAAA;IACxB,aAAa,CAAC,OAAO,CAAC,CAAA;AACxB,CAAC"}
@@ -0,0 +1,11 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,152 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}