@morojs/cli 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 (47) hide show
  1. package/README.md +300 -0
  2. package/bin/cli.js +4 -0
  3. package/dist/cli.d.ts +4 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +426 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/config.d.ts +17 -0
  8. package/dist/commands/config.d.ts.map +1 -0
  9. package/dist/commands/config.js +334 -0
  10. package/dist/commands/config.js.map +1 -0
  11. package/dist/commands/database.d.ts +38 -0
  12. package/dist/commands/database.d.ts.map +1 -0
  13. package/dist/commands/database.js +523 -0
  14. package/dist/commands/database.js.map +1 -0
  15. package/dist/commands/deploy.d.ts +18 -0
  16. package/dist/commands/deploy.d.ts.map +1 -0
  17. package/dist/commands/deploy.js +166 -0
  18. package/dist/commands/deploy.js.map +1 -0
  19. package/dist/commands/dev.d.ts +27 -0
  20. package/dist/commands/dev.d.ts.map +1 -0
  21. package/dist/commands/dev.js +216 -0
  22. package/dist/commands/dev.js.map +1 -0
  23. package/dist/commands/init.d.ts +27 -0
  24. package/dist/commands/init.d.ts.map +1 -0
  25. package/dist/commands/init.js +1061 -0
  26. package/dist/commands/init.js.map +1 -0
  27. package/dist/commands/middleware.d.ts +11 -0
  28. package/dist/commands/middleware.d.ts.map +1 -0
  29. package/dist/commands/middleware.js +229 -0
  30. package/dist/commands/middleware.js.map +1 -0
  31. package/dist/index.d.ts +4 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +11 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/logger.d.ts +7 -0
  36. package/dist/logger.d.ts.map +1 -0
  37. package/dist/logger.js +23 -0
  38. package/dist/logger.js.map +1 -0
  39. package/dist/module-stub-generator.d.ts +16 -0
  40. package/dist/module-stub-generator.d.ts.map +1 -0
  41. package/dist/module-stub-generator.js +505 -0
  42. package/dist/module-stub-generator.js.map +1 -0
  43. package/dist/utils/terminal.d.ts +11 -0
  44. package/dist/utils/terminal.d.ts.map +1 -0
  45. package/dist/utils/terminal.js +43 -0
  46. package/dist/utils/terminal.js.map +1 -0
  47. package/package.json +97 -0
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeploymentManager = void 0;
4
+ // Deployment Management - Setup runtime-specific deployments
5
+ const promises_1 = require("fs/promises");
6
+ const path_1 = require("path");
7
+ const logger_1 = require("../logger");
8
+ class DeploymentManager {
9
+ constructor() {
10
+ this.logger = (0, logger_1.createFrameworkLogger)('DeploymentManager');
11
+ }
12
+ async setupVercel(options) {
13
+ this.logger.info('Setting up Vercel Edge deployment...', 'Deploy');
14
+ try {
15
+ // Generate vercel.json
16
+ const vercelConfig = {
17
+ version: 2,
18
+ builds: [
19
+ {
20
+ src: 'src/index.ts',
21
+ use: '@vercel/node',
22
+ },
23
+ ],
24
+ routes: [
25
+ {
26
+ src: '/(.*)',
27
+ dest: 'src/index.ts',
28
+ },
29
+ ],
30
+ env: {
31
+ NODE_ENV: 'production',
32
+ },
33
+ ...(options.domain && { alias: [options.domain] }),
34
+ };
35
+ await (0, promises_1.writeFile)((0, path_1.join)(process.cwd(), 'vercel.json'), JSON.stringify(vercelConfig, null, 2));
36
+ // Generate deployment script
37
+ const deployScript = `#!/bin/bash
38
+ # Vercel Deployment Script
39
+
40
+ echo "Deploying to Vercel Edge Runtime..."
41
+
42
+ # Build the project
43
+ npm run build
44
+
45
+ # Deploy with Vercel CLI
46
+ vercel --prod ${options.domain ? `--alias ${options.domain}` : ''}
47
+
48
+ echo "✅ Deployment complete!"`;
49
+ await (0, promises_1.writeFile)((0, path_1.join)(process.cwd(), 'deploy-vercel.sh'), deployScript);
50
+ this.logger.info('✅ Vercel deployment configuration created!', 'Deploy');
51
+ this.logger.info('Next steps:', 'Deploy');
52
+ this.logger.info(' 1. Install Vercel CLI: npm i -g vercel', 'Deploy');
53
+ this.logger.info(' 2. Login: vercel login', 'Deploy');
54
+ this.logger.info(' 3. Deploy: ./deploy-vercel.sh', 'Deploy');
55
+ }
56
+ catch (error) {
57
+ this.logger.error(`Vercel setup failed: ${error instanceof Error ? error.message : 'Unknown error'}`, 'Deploy');
58
+ throw error;
59
+ }
60
+ }
61
+ async setupLambda(options) {
62
+ this.logger.info('Setting up AWS Lambda deployment...', 'Deploy');
63
+ try {
64
+ // Generate serverless.yml
65
+ const serverlessConfig = `service: morojs-lambda-app
66
+
67
+ provider:
68
+ name: aws
69
+ runtime: nodejs18.x
70
+ region: ${options.region || 'us-east-1'}
71
+ memorySize: ${options.memory || '512'}
72
+ timeout: ${options.timeout || '30'}
73
+ environment:
74
+ NODE_ENV: production
75
+
76
+ functions:
77
+ api:
78
+ handler: dist/index.handler
79
+ events:
80
+ - http:
81
+ path: /{proxy+}
82
+ method: ANY
83
+ cors: true
84
+ - http:
85
+ path: /
86
+ method: ANY
87
+ cors: true
88
+
89
+ plugins:
90
+ - serverless-offline
91
+ - serverless-plugin-typescript
92
+
93
+ package:
94
+ exclude:
95
+ - src/**
96
+ - tests/**
97
+ - '*.md'
98
+ - .git/**`;
99
+ await (0, promises_1.writeFile)((0, path_1.join)(process.cwd(), 'serverless.yml'), serverlessConfig);
100
+ // Generate deployment script
101
+ const deployScript = `#!/bin/bash
102
+ # AWS Lambda Deployment Script
103
+
104
+ echo "Deploying to AWS Lambda..."
105
+
106
+ # Build the project
107
+ npm run build
108
+
109
+ # Deploy with Serverless Framework
110
+ serverless deploy --region ${options.region || 'us-east-1'}
111
+
112
+ echo "✅ Deployment complete!"`;
113
+ await (0, promises_1.writeFile)((0, path_1.join)(process.cwd(), 'deploy-lambda.sh'), deployScript);
114
+ this.logger.info('✅ AWS Lambda deployment configuration created!', 'Deploy');
115
+ this.logger.info('Next steps:', 'Deploy');
116
+ this.logger.info(' 1. Install Serverless CLI: npm i -g serverless', 'Deploy');
117
+ this.logger.info(' 2. Configure AWS credentials: aws configure', 'Deploy');
118
+ this.logger.info(' 3. Deploy: ./deploy-lambda.sh', 'Deploy');
119
+ }
120
+ catch (error) {
121
+ this.logger.error(`Lambda setup failed: ${error instanceof Error ? error.message : 'Unknown error'}`, 'Deploy');
122
+ throw error;
123
+ }
124
+ }
125
+ async setupCloudflareWorkers(options) {
126
+ this.logger.info('Setting up Cloudflare Workers deployment...', 'Deploy');
127
+ try {
128
+ // Generate wrangler.toml
129
+ const wranglerConfig = `name = "${options.name || 'morojs-worker'}"
130
+ main = "dist/index.js"
131
+ compatibility_date = "2023-12-01"
132
+
133
+ [env.production]
134
+ name = "${options.name || 'morojs-worker'}-production"
135
+
136
+ [env.staging]
137
+ name = "${options.name || 'morojs-worker'}-staging"`;
138
+ await (0, promises_1.writeFile)((0, path_1.join)(process.cwd(), 'wrangler.toml'), wranglerConfig);
139
+ // Generate deployment script
140
+ const deployScript = `#!/bin/bash
141
+ # Cloudflare Workers Deployment Script
142
+
143
+ echo "Deploying to Cloudflare Workers..."
144
+
145
+ # Build the project
146
+ npm run build
147
+
148
+ # Deploy with Wrangler
149
+ wrangler publish
150
+
151
+ echo "✅ Deployment complete!"`;
152
+ await (0, promises_1.writeFile)((0, path_1.join)(process.cwd(), 'deploy-workers.sh'), deployScript);
153
+ this.logger.info('✅ Cloudflare Workers deployment configuration created!', 'Deploy');
154
+ this.logger.info('Next steps:', 'Deploy');
155
+ this.logger.info(' 1. Install Wrangler CLI: npm i -g wrangler', 'Deploy');
156
+ this.logger.info(' 2. Login: wrangler login', 'Deploy');
157
+ this.logger.info(' 3. Deploy: ./deploy-workers.sh', 'Deploy');
158
+ }
159
+ catch (error) {
160
+ this.logger.error(`Workers setup failed: ${error instanceof Error ? error.message : 'Unknown error'}`, 'Deploy');
161
+ throw error;
162
+ }
163
+ }
164
+ }
165
+ exports.DeploymentManager = DeploymentManager;
166
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":";;;AAAA,6DAA6D;AAC7D,0CAAwC;AACxC,+BAA4B;AAC5B,sCAAkD;AAgBlD,MAAa,iBAAiB;IAA9B;QACU,WAAM,GAAG,IAAA,8BAAqB,EAAC,mBAAmB,CAAC,CAAC;IAiL9D,CAAC;IA/KC,KAAK,CAAC,WAAW,CAAC,OAAsB;QACtC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sCAAsC,EAAE,QAAQ,CAAC,CAAC;QAEnE,IAAI,CAAC;YACH,uBAAuB;YACvB,MAAM,YAAY,GAAG;gBACnB,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE;oBACN;wBACE,GAAG,EAAE,cAAc;wBACnB,GAAG,EAAE,cAAc;qBACpB;iBACF;gBACD,MAAM,EAAE;oBACN;wBACE,GAAG,EAAE,OAAO;wBACZ,IAAI,EAAE,cAAc;qBACrB;iBACF;gBACD,GAAG,EAAE;oBACH,QAAQ,EAAE,YAAY;iBACvB;gBACD,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;aACnD,CAAC;YAEF,MAAM,IAAA,oBAAS,EAAC,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAE3F,6BAA6B;YAC7B,MAAM,YAAY,GAAG;;;;;;;;;gBASX,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;;8BAEnC,CAAC;YAEzB,MAAM,IAAA,oBAAS,EAAC,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,kBAAkB,CAAC,EAAE,YAAY,CAAC,CAAC;YAEvE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4CAA4C,EAAE,QAAQ,CAAC,CAAC;YACzE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0CAA0C,EAAE,QAAQ,CAAC,CAAC;YACvE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,QAAQ,CAAC,CAAC;YACvD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE,QAAQ,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,EAClF,QAAQ,CACT,CAAC;YACF,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAsB;QACtC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qCAAqC,EAAE,QAAQ,CAAC,CAAC;QAElE,IAAI,CAAC;YACH,0BAA0B;YAC1B,MAAM,gBAAgB,GAAG;;;;;YAKnB,OAAO,CAAC,MAAM,IAAI,WAAW;gBACzB,OAAO,CAAC,MAAM,IAAI,KAAK;aAC1B,OAAO,CAAC,OAAO,IAAI,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;cA0BtB,CAAC;YAET,MAAM,IAAA,oBAAS,EAAC,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,CAAC;YAEzE,6BAA6B;YAC7B,MAAM,YAAY,GAAG;;;;;;;;;6BASE,OAAO,CAAC,MAAM,IAAI,WAAW;;8BAE5B,CAAC;YAEzB,MAAM,IAAA,oBAAS,EAAC,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,kBAAkB,CAAC,EAAE,YAAY,CAAC,CAAC;YAEvE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gDAAgD,EAAE,QAAQ,CAAC,CAAC;YAC7E,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kDAAkD,EAAE,QAAQ,CAAC,CAAC;YAC/E,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+CAA+C,EAAE,QAAQ,CAAC,CAAC;YAC5E,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE,QAAQ,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,EAClF,QAAQ,CACT,CAAC;YACF,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,OAAuB;QAClD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6CAA6C,EAAE,QAAQ,CAAC,CAAC;QAE1E,IAAI,CAAC;YACH,yBAAyB;YACzB,MAAM,cAAc,GAAG,WAAW,OAAO,CAAC,IAAI,IAAI,eAAe;;;;;UAK7D,OAAO,CAAC,IAAI,IAAI,eAAe;;;UAG/B,OAAO,CAAC,IAAI,IAAI,eAAe,WAAW,CAAC;YAE/C,MAAM,IAAA,oBAAS,EAAC,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC,EAAE,cAAc,CAAC,CAAC;YAEtE,6BAA6B;YAC7B,MAAM,YAAY,GAAG;;;;;;;;;;;8BAWG,CAAC;YAEzB,MAAM,IAAA,oBAAS,EAAC,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,mBAAmB,CAAC,EAAE,YAAY,CAAC,CAAC;YAExE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wDAAwD,EAAE,QAAQ,CAAC,CAAC;YACrF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8CAA8C,EAAE,QAAQ,CAAC,CAAC;YAC3E,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,QAAQ,CAAC,CAAC;YACzD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE,QAAQ,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,yBAAyB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,EACnF,QAAQ,CACT,CAAC;YACF,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF;AAlLD,8CAkLC"}
@@ -0,0 +1,27 @@
1
+ export interface DevServerOptions {
2
+ port?: string;
3
+ host?: string;
4
+ watch?: string;
5
+ }
6
+ export interface BuildOptions {
7
+ target?: 'node' | 'edge' | 'lambda' | 'workers';
8
+ output?: string;
9
+ minify?: boolean;
10
+ }
11
+ export interface LintOptions {
12
+ fix?: boolean;
13
+ }
14
+ export interface TestOptions {
15
+ watch?: boolean;
16
+ coverage?: boolean;
17
+ }
18
+ export declare class DevTools {
19
+ private logger;
20
+ startDevServer(options: DevServerOptions): Promise<void>;
21
+ buildProject(options: BuildOptions): Promise<void>;
22
+ lintProject(options: LintOptions): Promise<void>;
23
+ runTests(options: TestOptions): Promise<void>;
24
+ securityScan(): Promise<void>;
25
+ private generateRuntimeSpecificFiles;
26
+ }
27
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAqC;IAE7C,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA+CxD,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA6ClD,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAoChD,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAkC7C,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;YAkCrB,4BAA4B;CAuB3C"}
@@ -0,0 +1,216 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.DevTools = void 0;
37
+ // Development Tools - Dev server, build, lint, test commands
38
+ const logger_1 = require("../logger");
39
+ const terminal_1 = require("../utils/terminal");
40
+ const fs_1 = require("fs");
41
+ const path_1 = require("path");
42
+ class DevTools {
43
+ constructor() {
44
+ this.logger = (0, logger_1.createFrameworkLogger)('DevTools');
45
+ }
46
+ async startDevServer(options) {
47
+ this.logger.info('Starting development server with hot reload...', 'Dev');
48
+ try {
49
+ const port = options.port || '3000';
50
+ const host = options.host || 'localhost';
51
+ // Check if nodemon is available
52
+ const hasNodemon = (0, fs_1.existsSync)((0, path_1.join)(process.cwd(), 'node_modules', '.bin', 'nodemon'));
53
+ if (hasNodemon) {
54
+ const watchPaths = options.watch ? options.watch.split(',') : ['src'];
55
+ const nodemonArgs = [
56
+ '--exec',
57
+ 'npm run build && node dist/index.js',
58
+ '--watch',
59
+ watchPaths.join(','),
60
+ '--ext',
61
+ 'ts,js,json',
62
+ '--env',
63
+ `PORT=${port},HOST=${host}`,
64
+ ];
65
+ this.logger.info(`Server starting on http://${host}:${port}`, 'Dev');
66
+ await (0, terminal_1.spawnCommand)('npx', ['nodemon', ...nodemonArgs]);
67
+ }
68
+ else {
69
+ this.logger.warn('Nodemon not found. Install it for hot reload: npm install --save-dev nodemon', 'Dev');
70
+ this.logger.info('Starting basic development server...', 'Dev');
71
+ // Fallback to basic build and run
72
+ await (0, terminal_1.runTerminalCmd)('npm run build');
73
+ process.env.PORT = port;
74
+ process.env.HOST = host;
75
+ await (0, terminal_1.spawnCommand)('node', ['dist/index.js']);
76
+ }
77
+ }
78
+ catch (error) {
79
+ this.logger.error(`Dev server failed: ${error instanceof Error ? error.message : 'Unknown error'}`, 'Dev');
80
+ throw error;
81
+ }
82
+ }
83
+ async buildProject(options) {
84
+ this.logger.info(`Building project for ${options.target || 'node'} runtime...`, 'Build');
85
+ try {
86
+ const outputDir = options.output || 'dist';
87
+ // Check if esbuild is available for faster builds
88
+ const hasEsbuild = (0, fs_1.existsSync)((0, path_1.join)(process.cwd(), 'node_modules', '.bin', 'esbuild'));
89
+ if (hasEsbuild) {
90
+ const esbuildArgs = [
91
+ 'src/index.ts',
92
+ '--bundle',
93
+ '--platform=node',
94
+ '--target=node18',
95
+ '--format=esm',
96
+ '--outfile=' + (0, path_1.join)(outputDir, 'index.js'),
97
+ '--external:@morojs/moro',
98
+ ];
99
+ if (options.minify) {
100
+ esbuildArgs.push('--minify');
101
+ }
102
+ await (0, terminal_1.spawnCommand)('npx', ['esbuild', ...esbuildArgs]);
103
+ this.logger.info(`✅ Build completed! Output: ${outputDir}/`, 'Build');
104
+ }
105
+ else {
106
+ // Fallback to TypeScript compiler
107
+ await (0, terminal_1.runTerminalCmd)('npx tsc');
108
+ this.logger.info(`✅ Build completed using TypeScript compiler!`, 'Build');
109
+ }
110
+ // Generate runtime-specific files
111
+ if (options.target && options.target !== 'node') {
112
+ await this.generateRuntimeSpecificFiles(options.target, outputDir);
113
+ }
114
+ }
115
+ catch (error) {
116
+ this.logger.error(`Build failed: ${error instanceof Error ? error.message : 'Unknown error'}`, 'Build');
117
+ throw error;
118
+ }
119
+ }
120
+ async lintProject(options) {
121
+ this.logger.info('Linting project...', 'Lint');
122
+ try {
123
+ const hasEslint = (0, fs_1.existsSync)((0, path_1.join)(process.cwd(), 'node_modules', '.bin', 'eslint'));
124
+ if (hasEslint) {
125
+ const eslintArgs = ['src', '--ext', '.ts,.js'];
126
+ if (options.fix) {
127
+ eslintArgs.push('--fix');
128
+ }
129
+ await (0, terminal_1.spawnCommand)('npx', ['eslint', ...eslintArgs]);
130
+ this.logger.info('✅ Linting completed!', 'Lint');
131
+ // Also run prettier if available
132
+ const hasPrettier = (0, fs_1.existsSync)((0, path_1.join)(process.cwd(), 'node_modules', '.bin', 'prettier'));
133
+ if (hasPrettier) {
134
+ await (0, terminal_1.spawnCommand)('npx', ['prettier', '--write', 'src/**/*.ts']);
135
+ this.logger.info('✅ Code formatted with Prettier!', 'Lint');
136
+ }
137
+ }
138
+ else {
139
+ this.logger.warn('ESLint not found. Install it: npm install --save-dev eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin', 'Lint');
140
+ }
141
+ }
142
+ catch (error) {
143
+ this.logger.error(`Linting failed: ${error instanceof Error ? error.message : 'Unknown error'}`, 'Lint');
144
+ throw error;
145
+ }
146
+ }
147
+ async runTests(options) {
148
+ this.logger.info('Running tests...', 'Test');
149
+ try {
150
+ const hasJest = (0, fs_1.existsSync)((0, path_1.join)(process.cwd(), 'node_modules', '.bin', 'jest'));
151
+ if (hasJest) {
152
+ const jestArgs = [];
153
+ if (options.watch) {
154
+ jestArgs.push('--watch');
155
+ }
156
+ if (options.coverage) {
157
+ jestArgs.push('--coverage');
158
+ }
159
+ await (0, terminal_1.spawnCommand)('npx', ['jest', ...jestArgs]);
160
+ this.logger.info('✅ Tests completed!', 'Test');
161
+ }
162
+ else {
163
+ this.logger.warn('Jest not found. Install it: npm install --save-dev jest @types/jest ts-jest', 'Test');
164
+ }
165
+ }
166
+ catch (error) {
167
+ this.logger.error(`Tests failed: ${error instanceof Error ? error.message : 'Unknown error'}`, 'Test');
168
+ throw error;
169
+ }
170
+ }
171
+ async securityScan() {
172
+ this.logger.info('Running security scan...', 'Security');
173
+ try {
174
+ // Run npm audit
175
+ this.logger.info('Checking for vulnerable dependencies...', 'Security');
176
+ await (0, terminal_1.runTerminalCmd)('npm audit');
177
+ // Check for common security issues
178
+ this.logger.info('Scanning for common security issues...', 'Security');
179
+ const securityChecks = [
180
+ 'Checking for hardcoded secrets...',
181
+ 'Validating HTTPS usage...',
182
+ 'Checking security headers...',
183
+ 'Validating input sanitization...',
184
+ ];
185
+ securityChecks.forEach(check => this.logger.info(check, 'Security'));
186
+ this.logger.info('✅ Security scan completed!', 'Security');
187
+ this.logger.info('Consider using tools like Snyk or OWASP ZAP for comprehensive security testing', 'Security');
188
+ }
189
+ catch (error) {
190
+ this.logger.error(`Security scan failed: ${error instanceof Error ? error.message : 'Unknown error'}`, 'Security');
191
+ throw error;
192
+ }
193
+ }
194
+ async generateRuntimeSpecificFiles(target, outputDir) {
195
+ const runtimeFiles = {
196
+ 'vercel-edge': `// Vercel Edge Runtime Export
197
+ import { app } from './index.js';
198
+ export default app.getHandler();`,
199
+ 'aws-lambda': `// AWS Lambda Runtime Export
200
+ import { app } from './index.js';
201
+ export const handler = app.getHandler();`,
202
+ 'cloudflare-workers': `// Cloudflare Workers Runtime Export
203
+ import { app } from './index.js';
204
+ export default {
205
+ fetch: app.getHandler()
206
+ };`,
207
+ };
208
+ if (runtimeFiles[target]) {
209
+ const { writeFile } = await Promise.resolve().then(() => __importStar(require('fs/promises')));
210
+ await writeFile((0, path_1.join)(outputDir, 'runtime.js'), runtimeFiles[target]);
211
+ this.logger.info(`✅ Generated ${target} runtime file!`, 'Build');
212
+ }
213
+ }
214
+ }
215
+ exports.DevTools = DevTools;
216
+ //# sourceMappingURL=dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ export interface ProjectInitOptions {
2
+ runtime?: 'node' | 'vercel-edge' | 'aws-lambda' | 'cloudflare-workers';
3
+ database?: 'mysql' | 'postgresql' | 'sqlite' | 'mongodb' | 'redis' | 'drizzle';
4
+ features?: string;
5
+ template?: 'api' | 'fullstack' | 'microservice';
6
+ skipGit?: boolean;
7
+ skipInstall?: boolean;
8
+ }
9
+ export declare class ProjectInitializer {
10
+ private logger;
11
+ initializeProject(projectName: string, options: ProjectInitOptions): Promise<void>;
12
+ private gatherProjectConfig;
13
+ private generatePackageJson;
14
+ private generateTsConfig;
15
+ private generateMainApp;
16
+ private generateEnvFiles;
17
+ private generateMoroConfig;
18
+ private generateGitignore;
19
+ private generateReadme;
20
+ private generateDockerfile;
21
+ private generateProjectStructure;
22
+ private generateDatabaseSetup;
23
+ private generateAuthMiddleware;
24
+ private generateTestSetup;
25
+ private displaySuccessMessage;
26
+ }
27
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,YAAY,GAAG,oBAAoB,CAAC;IACvE,QAAQ,CAAC,EAAE,OAAO,GAAG,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,GAAG,WAAW,GAAG,cAAc,CAAC;IAChD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAA+C;IAEvD,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;YAyF1E,mBAAmB;YAmFnB,mBAAmB;YA0DnB,gBAAgB;YA4BhB,eAAe;YA6Ff,gBAAgB;YAyFhB,kBAAkB;YAiElB,iBAAiB;YA4GjB,cAAc;YA2Kd,kBAAkB;YA8IlB,wBAAwB;YAgCxB,qBAAqB;YAkDrB,sBAAsB;YAqDtB,iBAAiB;IAoD/B,OAAO,CAAC,qBAAqB;CAyC9B"}