@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.
- package/LICENSE +21 -0
- package/README.md +156 -0
- package/dist/commands/make/agent.d.ts +4 -0
- package/dist/commands/make/agent.d.ts.map +1 -0
- package/dist/commands/make/agent.js +41 -0
- package/dist/commands/make/agent.js.map +1 -0
- package/dist/commands/make/command.d.ts +4 -0
- package/dist/commands/make/command.d.ts.map +1 -0
- package/dist/commands/make/command.js +46 -0
- package/dist/commands/make/command.js.map +1 -0
- package/dist/commands/make/controller.d.ts +5 -0
- package/dist/commands/make/controller.d.ts.map +1 -0
- package/dist/commands/make/controller.js +46 -0
- package/dist/commands/make/controller.js.map +1 -0
- package/dist/commands/make/event.d.ts +4 -0
- package/dist/commands/make/event.d.ts.map +1 -0
- package/dist/commands/make/event.js +32 -0
- package/dist/commands/make/event.js.map +1 -0
- package/dist/commands/make/job.d.ts +4 -0
- package/dist/commands/make/job.d.ts.map +1 -0
- package/dist/commands/make/job.js +41 -0
- package/dist/commands/make/job.js.map +1 -0
- package/dist/commands/make/listener.d.ts +4 -0
- package/dist/commands/make/listener.d.ts.map +1 -0
- package/dist/commands/make/listener.js +34 -0
- package/dist/commands/make/listener.js.map +1 -0
- package/dist/commands/make/mail.d.ts +4 -0
- package/dist/commands/make/mail.d.ts.map +1 -0
- package/dist/commands/make/mail.js +41 -0
- package/dist/commands/make/mail.js.map +1 -0
- package/dist/commands/make/mcp-prompt.d.ts +4 -0
- package/dist/commands/make/mcp-prompt.d.ts.map +1 -0
- package/dist/commands/make/mcp-prompt.js +45 -0
- package/dist/commands/make/mcp-prompt.js.map +1 -0
- package/dist/commands/make/mcp-resource.d.ts +4 -0
- package/dist/commands/make/mcp-resource.d.ts.map +1 -0
- package/dist/commands/make/mcp-resource.js +44 -0
- package/dist/commands/make/mcp-resource.js.map +1 -0
- package/dist/commands/make/mcp-server.d.ts +4 -0
- package/dist/commands/make/mcp-server.d.ts.map +1 -0
- package/dist/commands/make/mcp-server.js +46 -0
- package/dist/commands/make/mcp-server.js.map +1 -0
- package/dist/commands/make/mcp-tool.d.ts +4 -0
- package/dist/commands/make/mcp-tool.d.ts.map +1 -0
- package/dist/commands/make/mcp-tool.js +43 -0
- package/dist/commands/make/mcp-tool.js.map +1 -0
- package/dist/commands/make/middleware.d.ts +4 -0
- package/dist/commands/make/middleware.d.ts.map +1 -0
- package/dist/commands/make/middleware.js +40 -0
- package/dist/commands/make/middleware.js.map +1 -0
- package/dist/commands/make/model.d.ts +5 -0
- package/dist/commands/make/model.d.ts.map +1 -0
- package/dist/commands/make/model.js +43 -0
- package/dist/commands/make/model.js.map +1 -0
- package/dist/commands/make/provider.d.ts +4 -0
- package/dist/commands/make/provider.d.ts.map +1 -0
- package/dist/commands/make/provider.js +39 -0
- package/dist/commands/make/provider.js.map +1 -0
- package/dist/commands/make/request.d.ts +4 -0
- package/dist/commands/make/request.d.ts.map +1 -0
- package/dist/commands/make/request.js +40 -0
- package/dist/commands/make/request.js.map +1 -0
- package/dist/commands/make.d.ts +3 -0
- package/dist/commands/make.d.ts.map +1 -0
- package/dist/commands/make.js +33 -0
- package/dist/commands/make.js.map +1 -0
- package/dist/commands/migrate.d.ts +11 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +152 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/module/make.d.ts +9 -0
- package/dist/commands/module/make.d.ts.map +1 -0
- package/dist/commands/module/make.js +190 -0
- package/dist/commands/module/make.js.map +1 -0
- package/dist/commands/module/publish.d.ts +14 -0
- package/dist/commands/module/publish.d.ts.map +1 -0
- package/dist/commands/module/publish.js +117 -0
- package/dist/commands/module/publish.js.map +1 -0
- package/dist/commands/module.d.ts +3 -0
- package/dist/commands/module.d.ts.map +1 -0
- package/dist/commands/module.js +7 -0
- package/dist/commands/module.js.map +1 -0
- package/dist/commands/vendor-publish.d.ts +5 -0
- package/dist/commands/vendor-publish.d.ts.map +1 -0
- package/dist/commands/vendor-publish.js +190 -0
- package/dist/commands/vendor-publish.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +253 -0
- package/dist/index.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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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"}
|