@asapjs/cli 1.0.0-alpha.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 (50) hide show
  1. package/bin/asapjs.js +3 -0
  2. package/dist/commands/build.d.ts +3 -0
  3. package/dist/commands/build.d.ts.map +1 -0
  4. package/dist/commands/build.js +62 -0
  5. package/dist/commands/build.js.map +1 -0
  6. package/dist/commands/dev.d.ts +3 -0
  7. package/dist/commands/dev.d.ts.map +1 -0
  8. package/dist/commands/dev.js +106 -0
  9. package/dist/commands/dev.js.map +1 -0
  10. package/dist/commands/generate.d.ts +3 -0
  11. package/dist/commands/generate.d.ts.map +1 -0
  12. package/dist/commands/generate.js +46 -0
  13. package/dist/commands/generate.js.map +1 -0
  14. package/dist/commands/new.d.ts +3 -0
  15. package/dist/commands/new.d.ts.map +1 -0
  16. package/dist/commands/new.js +235 -0
  17. package/dist/commands/new.js.map +1 -0
  18. package/dist/commands/start.d.ts +3 -0
  19. package/dist/commands/start.d.ts.map +1 -0
  20. package/dist/commands/start.js +64 -0
  21. package/dist/commands/start.js.map +1 -0
  22. package/dist/generators/controller.d.ts +2 -0
  23. package/dist/generators/controller.d.ts.map +1 -0
  24. package/dist/generators/controller.js +73 -0
  25. package/dist/generators/controller.js.map +1 -0
  26. package/dist/generators/dto.d.ts +2 -0
  27. package/dist/generators/dto.d.ts.map +1 -0
  28. package/dist/generators/dto.js +65 -0
  29. package/dist/generators/dto.js.map +1 -0
  30. package/dist/generators/service.d.ts +2 -0
  31. package/dist/generators/service.d.ts.map +1 -0
  32. package/dist/generators/service.js +87 -0
  33. package/dist/generators/service.js.map +1 -0
  34. package/dist/index.d.ts +2 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +31 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/utils/compiler.d.ts +8 -0
  39. package/dist/utils/compiler.d.ts.map +1 -0
  40. package/dist/utils/compiler.js +51 -0
  41. package/dist/utils/compiler.js.map +1 -0
  42. package/dist/utils/env-loader.d.ts +16 -0
  43. package/dist/utils/env-loader.d.ts.map +1 -0
  44. package/dist/utils/env-loader.js +51 -0
  45. package/dist/utils/env-loader.js.map +1 -0
  46. package/dist/utils/process-manager.d.ts +4 -0
  47. package/dist/utils/process-manager.d.ts.map +1 -0
  48. package/dist/utils/process-manager.js +35 -0
  49. package/dist/utils/process-manager.js.map +1 -0
  50. package/package.json +44 -0
package/bin/asapjs.js ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+
3
+ require('../dist/index.js');
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const buildCommand: Command;
3
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,YAAY,SA6DrB,CAAC"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.buildCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const fs_extra_1 = __importDefault(require("fs-extra"));
11
+ const env_loader_1 = require("../utils/env-loader");
12
+ const compiler_1 = require("../utils/compiler");
13
+ const ora_1 = __importDefault(require("ora"));
14
+ exports.buildCommand = new commander_1.Command('build')
15
+ .description('Build the application for production')
16
+ .option('-e, --env <env>', 'Environment name', 'production')
17
+ .option('-o, --output <dir>', 'Output directory', 'dist')
18
+ .action(async (options) => {
19
+ const cwd = process.cwd();
20
+ const spinner = (0, ora_1.default)('Building application...').start();
21
+ try {
22
+ // Load environment
23
+ await (0, env_loader_1.loadEnv)(options.env, cwd);
24
+ // Load config
25
+ const config = await (0, env_loader_1.loadConfig)(cwd);
26
+ // Ensure dist directory exists
27
+ await (0, compiler_1.ensureDistExists)(cwd);
28
+ // Copy env file to dist
29
+ const envFile = config.environments?.[options.env]?.envFile || `.env.${options.env}`;
30
+ const envPath = path_1.default.join(cwd, envFile);
31
+ const distEnvPath = path_1.default.join(cwd, options.output, '.env');
32
+ if (await fs_extra_1.default.pathExists(envPath)) {
33
+ await fs_extra_1.default.copy(envPath, distEnvPath);
34
+ spinner.text = 'Environment file copied';
35
+ }
36
+ // Compile TypeScript
37
+ spinner.text = 'Compiling TypeScript...';
38
+ await (0, compiler_1.compile)(cwd, {
39
+ sourceMap: config.build?.sourceMap ?? true,
40
+ outDir: options.output
41
+ });
42
+ // Copy package.json (excluding devDependencies)
43
+ const packageJsonPath = path_1.default.join(cwd, 'package.json');
44
+ if (await fs_extra_1.default.pathExists(packageJsonPath)) {
45
+ const packageJson = await fs_extra_1.default.readJson(packageJsonPath);
46
+ delete packageJson.devDependencies;
47
+ delete packageJson.scripts;
48
+ await fs_extra_1.default.writeJson(path_1.default.join(cwd, options.output, 'package.json'), packageJson, { spaces: 2 });
49
+ }
50
+ spinner.succeed(chalk_1.default.green('Build completed successfully!'));
51
+ console.log(chalk_1.default.blue('\nNext steps:'));
52
+ console.log(chalk_1.default.gray(' 1. cd ' + options.output));
53
+ console.log(chalk_1.default.gray(' 2. npm install --production'));
54
+ console.log(chalk_1.default.gray(' 3. asapjs start'));
55
+ }
56
+ catch (error) {
57
+ spinner.fail(chalk_1.default.red('Build failed'));
58
+ console.error(error);
59
+ process.exit(1);
60
+ }
61
+ });
62
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const devCommand: Command;
3
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,UAAU,SAiHnB,CAAC"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.devCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const chokidar_1 = __importDefault(require("chokidar"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const env_loader_1 = require("../utils/env-loader");
12
+ const process_manager_1 = require("../utils/process-manager");
13
+ exports.devCommand = new commander_1.Command('dev')
14
+ .description('Start development server with hot-reload')
15
+ .option('-e, --env <env>', 'Environment name', 'local')
16
+ .option('-p, --port <port>', 'Port number')
17
+ .action(async (options) => {
18
+ const cwd = process.cwd();
19
+ console.log(chalk_1.default.blue('Starting development server...'));
20
+ // Load environment
21
+ await (0, env_loader_1.loadEnv)(options.env, cwd);
22
+ // Load config
23
+ const config = await (0, env_loader_1.loadConfig)(cwd);
24
+ // Override port if specified
25
+ if (options.port) {
26
+ process.env.PORT = options.port;
27
+ }
28
+ else if (config.environments?.[options.env]?.port) {
29
+ process.env.PORT = String(config.environments[options.env].port);
30
+ }
31
+ let child;
32
+ const killProcess = async () => {
33
+ if (!child || !child.pid) {
34
+ return;
35
+ }
36
+ const pid = child.pid;
37
+ await (0, process_manager_1.killProcessTree)(pid);
38
+ child = null;
39
+ // Minimal delay to ensure port is released
40
+ await new Promise(resolve => setTimeout(resolve, 100));
41
+ };
42
+ const startServer = async () => {
43
+ // Kill previous process if exists
44
+ await killProcess();
45
+ // Small delay to ensure port is released
46
+ await new Promise(resolve => setTimeout(resolve, 100));
47
+ console.log(chalk_1.default.green(`\n✓ Starting server on port ${process.env.PORT || 3000}...`));
48
+ // Use ts-node to run TypeScript directly
49
+ child = (0, process_manager_1.spawnWithKillSupport)('npx', ['ts-node', 'src/index.ts'], {
50
+ cwd,
51
+ stdio: 'inherit',
52
+ env: {
53
+ ...process.env,
54
+ TS_NODE_PROJECT: path_1.default.join(cwd, 'tsconfig.json'),
55
+ TS_NODE_TRANSPILE_ONLY: 'true'
56
+ }
57
+ });
58
+ child.on('error', (error) => {
59
+ console.error(chalk_1.default.red('Failed to start server:'), error);
60
+ });
61
+ child.on('exit', (code, signal) => {
62
+ if (signal !== 'SIGTERM' && signal !== 'SIGKILL') {
63
+ console.log(chalk_1.default.yellow(`Process exited with code ${code} and signal ${signal}`));
64
+ }
65
+ child = null;
66
+ });
67
+ };
68
+ // Initial start
69
+ startServer();
70
+ // Watch for changes
71
+ const watcher = chokidar_1.default.watch(['src/**/*.ts', '.env*', 'env/**/*'], {
72
+ cwd,
73
+ ignored: /node_modules/,
74
+ persistent: true,
75
+ ignoreInitial: true
76
+ });
77
+ let isRestarting = false;
78
+ let restartTimer = null;
79
+ const restartServer = (event, filepath) => {
80
+ // Clear existing timer
81
+ if (restartTimer) {
82
+ clearTimeout(restartTimer);
83
+ }
84
+ // Set new timer with debounce
85
+ restartTimer = setTimeout(async () => {
86
+ if (isRestarting)
87
+ return;
88
+ isRestarting = true;
89
+ console.log(chalk_1.default.yellow(`\n⟳ Restarting...`));
90
+ await startServer();
91
+ isRestarting = false;
92
+ restartTimer = null;
93
+ }, 200); // 200ms debounce
94
+ };
95
+ watcher.on('change', (filepath) => restartServer('changed', filepath));
96
+ watcher.on('add', (filepath) => restartServer('added', filepath));
97
+ watcher.on('unlink', (filepath) => restartServer('deleted', filepath));
98
+ // Handle process termination
99
+ process.on('SIGINT', async () => {
100
+ console.log(chalk_1.default.red('\n\nShutting down...'));
101
+ watcher.close();
102
+ await killProcess();
103
+ process.exit(0);
104
+ });
105
+ });
106
+ //# 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,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const generateCommand: Command;
3
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,eAAO,MAAM,eAAe,SAqCxB,CAAC"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generateCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const controller_1 = require("../generators/controller");
11
+ const service_1 = require("../generators/service");
12
+ const dto_1 = require("../generators/dto");
13
+ exports.generateCommand = new commander_1.Command('generate')
14
+ .alias('g')
15
+ .description('Generate asapjs components')
16
+ .argument('<type>', 'Component type (controller, service, dto)')
17
+ .argument('<name>', 'Component name')
18
+ .option('-p, --path <path>', 'Target path', 'src')
19
+ .action(async (type, name, options) => {
20
+ const cwd = process.cwd();
21
+ const targetPath = path_1.default.join(cwd, options.path);
22
+ try {
23
+ switch (type.toLowerCase()) {
24
+ case 'controller':
25
+ await (0, controller_1.generateController)(name, targetPath);
26
+ break;
27
+ case 'service':
28
+ case 'application':
29
+ await (0, service_1.generateService)(name, targetPath);
30
+ break;
31
+ case 'dto':
32
+ await (0, dto_1.generateDto)(name, targetPath);
33
+ break;
34
+ default:
35
+ console.error(chalk_1.default.red(`Unknown component type: ${type}`));
36
+ console.log(chalk_1.default.gray('Available types: controller, service, dto'));
37
+ process.exit(1);
38
+ }
39
+ console.log(chalk_1.default.green(`✓ ${type} "${name}" generated successfully!`));
40
+ }
41
+ catch (error) {
42
+ console.error(chalk_1.default.red('Generation failed:'), error);
43
+ process.exit(1);
44
+ }
45
+ });
46
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AACpC,kDAA0B;AAE1B,gDAAwB;AAExB,yDAA8D;AAC9D,mDAAwD;AACxD,2CAAgD;AAEnC,QAAA,eAAe,GAAG,IAAI,mBAAO,CAAC,UAAU,CAAC;KACnD,KAAK,CAAC,GAAG,CAAC;KACV,WAAW,CAAC,4BAA4B,CAAC;KACzC,QAAQ,CAAC,QAAQ,EAAE,2CAA2C,CAAC;KAC/D,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KACpC,MAAM,CAAC,mBAAmB,EAAE,aAAa,EAAE,KAAK,CAAC;KACjD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IACpC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhD,IAAI,CAAC;QACH,QAAQ,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YAC3B,KAAK,YAAY;gBACf,MAAM,IAAA,+BAAkB,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAC3C,MAAM;YAER,KAAK,SAAS,CAAC;YACf,KAAK,aAAa;gBAChB,MAAM,IAAA,yBAAe,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBACxC,MAAM;YAER,KAAK,KAAK;gBACR,MAAM,IAAA,iBAAW,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBACpC,MAAM;YAER;gBACE,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC5D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;gBACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,IAAI,2BAA2B,CAAC,CAAC,CAAC;IAE1E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,KAAK,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const newCommand: Command;
3
+ //# sourceMappingURL=new.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,UAAU,SAsKnB,CAAC"}
@@ -0,0 +1,235 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.newCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const inquirer_1 = __importDefault(require("inquirer"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const fs_extra_1 = __importDefault(require("fs-extra"));
12
+ const ora_1 = __importDefault(require("ora"));
13
+ const cross_spawn_1 = require("cross-spawn");
14
+ exports.newCommand = new commander_1.Command('new')
15
+ .description('Create a new asapjs project')
16
+ .argument('<name>', 'Project name')
17
+ .option('-t, --template <template>', 'Project template', 'basic')
18
+ .action(async (name, options) => {
19
+ const cwd = process.cwd();
20
+ const projectPath = path_1.default.join(cwd, name);
21
+ // Check if directory already exists
22
+ if (await fs_extra_1.default.pathExists(projectPath)) {
23
+ console.error(chalk_1.default.red(`Directory ${name} already exists`));
24
+ process.exit(1);
25
+ }
26
+ const answers = await inquirer_1.default.prompt([
27
+ {
28
+ type: 'list',
29
+ name: 'packageManager',
30
+ message: 'Which package manager would you like to use?',
31
+ choices: ['yarn', 'npm', 'pnpm'],
32
+ default: 'yarn'
33
+ },
34
+ {
35
+ type: 'confirm',
36
+ name: 'useDatabase',
37
+ message: 'Will you use a database?',
38
+ default: true
39
+ },
40
+ {
41
+ type: 'list',
42
+ name: 'database',
43
+ message: 'Which database?',
44
+ choices: ['mysql', 'postgres', 'sqlite'],
45
+ default: 'mysql',
46
+ when: (answers) => answers.useDatabase
47
+ }
48
+ ]);
49
+ const spinner = (0, ora_1.default)('Creating project...').start();
50
+ try {
51
+ // Create project directory
52
+ await fs_extra_1.default.ensureDir(projectPath);
53
+ // Create package.json
54
+ const packageJson = {
55
+ name,
56
+ version: '1.0.0',
57
+ description: 'AsapJS application',
58
+ main: 'dist/index.js',
59
+ scripts: {
60
+ dev: 'asapjs dev',
61
+ build: 'asapjs build',
62
+ start: 'asapjs start',
63
+ 'build:dev': 'asapjs build --env=development',
64
+ 'build:prod': 'asapjs build --env=production'
65
+ },
66
+ dependencies: {
67
+ '@asapjs/core': '^0.10.0',
68
+ '@asapjs/router': '^0.10.0',
69
+ '@asapjs/common': '^0.10.0',
70
+ 'dotenv': '^16.0.3',
71
+ 'reflect-metadata': '^0.1.13'
72
+ },
73
+ devDependencies: {
74
+ '@asapjs/cli': '^0.1.0',
75
+ '@types/node': '^18.0.0',
76
+ 'typescript': '^5.0.0',
77
+ 'ts-node': '^10.9.1'
78
+ }
79
+ };
80
+ if (answers.useDatabase) {
81
+ packageJson.dependencies['@asapjs/sequelize'] = '^0.10.0';
82
+ packageJson.dependencies[answers.database === 'mysql' ? 'mysql2' : answers.database] = '*';
83
+ }
84
+ await fs_extra_1.default.writeJson(path_1.default.join(projectPath, 'package.json'), packageJson, { spaces: 2 });
85
+ // Create tsconfig.json
86
+ await fs_extra_1.default.writeJson(path_1.default.join(projectPath, 'tsconfig.json'), {
87
+ compilerOptions: {
88
+ target: 'ES2020',
89
+ module: 'commonjs',
90
+ lib: ['ES2020'],
91
+ outDir: './dist',
92
+ rootDir: './src',
93
+ strict: true,
94
+ esModuleInterop: true,
95
+ skipLibCheck: true,
96
+ forceConsistentCasingInFileNames: true,
97
+ resolveJsonModule: true,
98
+ moduleResolution: 'node',
99
+ allowSyntheticDefaultImports: true,
100
+ experimentalDecorators: true,
101
+ emitDecoratorMetadata: true,
102
+ strictPropertyInitialization: false
103
+ },
104
+ include: ['src/**/*'],
105
+ exclude: ['node_modules', 'dist']
106
+ }, { spaces: 2 });
107
+ // Create .asapjs.json
108
+ await fs_extra_1.default.writeJson(path_1.default.join(projectPath, '.asapjs.json'), {
109
+ environments: {
110
+ local: {
111
+ envFile: '.env.local',
112
+ port: 3000
113
+ },
114
+ development: {
115
+ envFile: '.env.dev',
116
+ port: 4000
117
+ },
118
+ production: {
119
+ envFile: '.env.prod',
120
+ port: 8080
121
+ }
122
+ },
123
+ build: {
124
+ outDir: 'dist',
125
+ sourceMap: true
126
+ }
127
+ }, { spaces: 2 });
128
+ // Create directories
129
+ await fs_extra_1.default.ensureDir(path_1.default.join(projectPath, 'src'));
130
+ await fs_extra_1.default.ensureDir(path_1.default.join(projectPath, 'env'));
131
+ // Create basic files
132
+ await createBasicFiles(projectPath, answers);
133
+ spinner.succeed('Project created successfully!');
134
+ // Install dependencies
135
+ console.log(chalk_1.default.blue('\nInstalling dependencies...'));
136
+ const installSpinner = (0, ora_1.default)('Installing packages...').start();
137
+ await new Promise((resolve, reject) => {
138
+ const child = (0, cross_spawn_1.spawn)(answers.packageManager, ['install'], {
139
+ cwd: projectPath,
140
+ stdio: 'ignore'
141
+ });
142
+ child.on('close', (code) => {
143
+ if (code === 0) {
144
+ resolve(undefined);
145
+ }
146
+ else {
147
+ reject(new Error(`Installation failed with code ${code}`));
148
+ }
149
+ });
150
+ });
151
+ installSpinner.succeed('Dependencies installed!');
152
+ console.log(chalk_1.default.green('\n✓ Project created successfully!'));
153
+ console.log(chalk_1.default.blue('\nNext steps:'));
154
+ console.log(chalk_1.default.gray(` cd ${name}`));
155
+ console.log(chalk_1.default.gray(' asapjs dev'));
156
+ }
157
+ catch (error) {
158
+ spinner.fail('Failed to create project');
159
+ console.error(error);
160
+ await fs_extra_1.default.remove(projectPath);
161
+ process.exit(1);
162
+ }
163
+ });
164
+ async function createBasicFiles(projectPath, options) {
165
+ // Create src/index.ts
166
+ await fs_extra_1.default.writeFile(path_1.default.join(projectPath, 'src/index.ts'), `import { Application } from '@asapjs/core';
167
+ import config from './config';
168
+
169
+ new Application(__dirname, config).run();
170
+ `);
171
+ // Create src/config.ts
172
+ const extensions = ['@asapjs/router'];
173
+ if (options.useDatabase) {
174
+ extensions.push('@asapjs/sequelize');
175
+ }
176
+ await fs_extra_1.default.writeFile(path_1.default.join(projectPath, 'src/config.ts'), `import { logger } from '@asapjs/core';
177
+
178
+ require('dotenv').config({ path: \`\${__dirname}/../.env\` });
179
+
180
+ const debug = process.env.NODE_ENV !== 'production';
181
+ const port = parseInt(process.env.PORT || '3000', 10);
182
+
183
+ export default {
184
+ dirname: __dirname,
185
+ debug,
186
+ name: '${path_1.default.basename(projectPath)}',
187
+ basePath: '',
188
+ extensions: ${JSON.stringify(extensions)},
189
+ port,
190
+ swagger: {
191
+ name: '${path_1.default.basename(projectPath)}',
192
+ version: '1.0.0',
193
+ scheme: (debug ? 'http' : 'https') as 'http' | 'https',
194
+ host: debug ? \`localhost:\${port}\` : 'api.example.com',
195
+ },
196
+ ${options.useDatabase ? `db: {
197
+ database: process.env.DB_NAME || '${path_1.default.basename(projectPath)}_db',
198
+ username: process.env.DB_USERNAME || 'root',
199
+ password: process.env.DB_PASSWORD || '',
200
+ host: process.env.DB_HOST || 'localhost',
201
+ port: parseInt(process.env.DB_PORT || '3306', 10),
202
+ dialect: '${options.database}',
203
+ logging: debug ? (query: string) => logger.debug(query) : false,
204
+ timezone: '+09:00',
205
+ },` : ''}
206
+ };
207
+ `);
208
+ // Create src/route.ts
209
+ await fs_extra_1.default.writeFile(path_1.default.join(projectPath, 'src/route.ts'), `export default [];
210
+ `);
211
+ // Create .env files
212
+ const envContent = `NODE_ENV=development
213
+ PORT=3000
214
+ ${options.useDatabase ? `
215
+ # Database
216
+ DB_NAME=${path_1.default.basename(projectPath)}_db
217
+ DB_USERNAME=root
218
+ DB_PASSWORD=
219
+ DB_HOST=localhost
220
+ DB_PORT=3306` : ''}
221
+ `;
222
+ await fs_extra_1.default.writeFile(path_1.default.join(projectPath, '.env'), envContent);
223
+ await fs_extra_1.default.writeFile(path_1.default.join(projectPath, '.env.local'), envContent);
224
+ await fs_extra_1.default.writeFile(path_1.default.join(projectPath, '.env.dev'), envContent.replace('PORT=3000', 'PORT=4000'));
225
+ await fs_extra_1.default.writeFile(path_1.default.join(projectPath, '.env.prod'), envContent.replace('NODE_ENV=development', 'NODE_ENV=production').replace('PORT=3000', 'PORT=8080'));
226
+ // Create .gitignore
227
+ await fs_extra_1.default.writeFile(path_1.default.join(projectPath, '.gitignore'), `node_modules
228
+ dist
229
+ .env
230
+ .env.local
231
+ *.log
232
+ .DS_Store
233
+ `);
234
+ }
235
+ //# sourceMappingURL=new.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const startCommand: Command;
3
+ //# sourceMappingURL=start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,YAAY,SA0DrB,CAAC"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.startCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const cross_spawn_1 = require("cross-spawn");
10
+ const path_1 = __importDefault(require("path"));
11
+ const fs_extra_1 = __importDefault(require("fs-extra"));
12
+ const env_loader_1 = require("../utils/env-loader");
13
+ exports.startCommand = new commander_1.Command('start')
14
+ .description('Start the application in production mode')
15
+ .option('-e, --env <env>', 'Environment name', 'production')
16
+ .option('-d, --dir <dir>', 'Application directory', 'dist')
17
+ .action(async (options) => {
18
+ const cwd = process.cwd();
19
+ const appDir = path_1.default.join(cwd, options.dir);
20
+ console.log(chalk_1.default.blue('Starting production server...'));
21
+ // Check if dist directory exists
22
+ if (!await fs_extra_1.default.pathExists(appDir)) {
23
+ console.error(chalk_1.default.red(`Error: ${options.dir} directory not found. Did you run 'asapjs build'?`));
24
+ process.exit(1);
25
+ }
26
+ // Check if index.js exists (try both with and without src folder)
27
+ let indexPath = path_1.default.join(appDir, 'index.js');
28
+ if (!await fs_extra_1.default.pathExists(indexPath)) {
29
+ indexPath = path_1.default.join(appDir, 'src/index.js');
30
+ if (!await fs_extra_1.default.pathExists(indexPath)) {
31
+ console.error(chalk_1.default.red(`Error: index.js not found in ${appDir}`));
32
+ process.exit(1);
33
+ }
34
+ }
35
+ // Load environment from dist directory
36
+ await (0, env_loader_1.loadEnv)(options.env, appDir);
37
+ // Start the server
38
+ const child = (0, cross_spawn_1.spawn)('node', [indexPath], {
39
+ cwd: appDir,
40
+ stdio: 'inherit',
41
+ env: {
42
+ ...process.env,
43
+ NODE_ENV: 'production',
44
+ TS_NODE_BASEURL: appDir
45
+ }
46
+ });
47
+ child.on('error', (error) => {
48
+ console.error(chalk_1.default.red('Failed to start server:'), error);
49
+ process.exit(1);
50
+ });
51
+ child.on('exit', (code) => {
52
+ if (code !== 0) {
53
+ console.error(chalk_1.default.red(`Server exited with code ${code}`));
54
+ process.exit(code || 1);
55
+ }
56
+ });
57
+ // Handle process termination
58
+ process.on('SIGINT', () => {
59
+ console.log(chalk_1.default.red('\n\nShutting down...'));
60
+ child.kill();
61
+ process.exit(0);
62
+ });
63
+ });
64
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function generateController(name: string, targetPath: string): Promise<void>;
2
+ //# sourceMappingURL=controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/generators/controller.ts"],"names":[],"mappings":"AAIA,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBAkExE"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generateController = generateController;
7
+ const fs_extra_1 = __importDefault(require("fs-extra"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ async function generateController(name, targetPath) {
11
+ const className = name.charAt(0).toUpperCase() + name.slice(1) + 'Controller';
12
+ const fileName = name.toLowerCase() + '.controller.ts';
13
+ const filePath = path_1.default.join(targetPath, fileName);
14
+ // Check if file already exists
15
+ if (await fs_extra_1.default.pathExists(filePath)) {
16
+ throw new Error(`Controller ${fileName} already exists`);
17
+ }
18
+ const template = `import { Get, Post, Put, Delete, RouterController, ExecuteArgs } from '@asapjs/router';
19
+
20
+ export default class ${className} extends RouterController {
21
+ public basePath = '/${name.toLowerCase()}s';
22
+ public tag = '${name.toLowerCase()}s';
23
+
24
+ constructor() {
25
+ super();
26
+ this.registerRoutes();
27
+ }
28
+
29
+ @Get('', {
30
+ title: 'Get all ${name}s',
31
+ })
32
+ public getAll = async ({ query }: ExecuteArgs<any, {}, {}>) => {
33
+ // TODO: Implement get all logic
34
+ return { result: [] };
35
+ };
36
+
37
+ @Get('/:id', {
38
+ title: 'Get ${name} by ID',
39
+ })
40
+ public getById = async ({ params }: ExecuteArgs<{}, { id: string }, {}>) => {
41
+ // TODO: Implement get by id logic
42
+ return { result: { id: params.id } };
43
+ };
44
+
45
+ @Post('', {
46
+ title: 'Create new ${name}',
47
+ })
48
+ public create = async ({ body }: ExecuteArgs<{}, {}, any>) => {
49
+ // TODO: Implement create logic
50
+ return { result: body };
51
+ };
52
+
53
+ @Put('/:id', {
54
+ title: 'Update ${name}',
55
+ })
56
+ public update = async ({ params, body }: ExecuteArgs<{}, { id: string }, any>) => {
57
+ // TODO: Implement update logic
58
+ return { result: { id: params.id, ...body } };
59
+ };
60
+
61
+ @Delete('/:id', {
62
+ title: 'Delete ${name}',
63
+ })
64
+ public delete = async ({ params }: ExecuteArgs<{}, { id: string }, {}>) => {
65
+ // TODO: Implement delete logic
66
+ return { result: 'success' };
67
+ };
68
+ }`;
69
+ await fs_extra_1.default.ensureDir(path_1.default.dirname(filePath));
70
+ await fs_extra_1.default.writeFile(filePath, template);
71
+ console.log(chalk_1.default.green(`✓ Created ${filePath}`));
72
+ }
73
+ //# sourceMappingURL=controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/generators/controller.ts"],"names":[],"mappings":";;;;;AAIA,gDAkEC;AAtED,wDAA0B;AAC1B,gDAAwB;AACxB,kDAA0B;AAEnB,KAAK,UAAU,kBAAkB,CAAC,IAAY,EAAE,UAAkB;IACvE,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC;IAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,gBAAgB,CAAC;IACvD,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAEjD,+BAA+B;IAC/B,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,cAAc,QAAQ,iBAAiB,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,QAAQ,GAAG;;uBAEI,SAAS;wBACR,IAAI,CAAC,WAAW,EAAE;kBACxB,IAAI,CAAC,WAAW,EAAE;;;;;;;;sBAQd,IAAI;;;;;;;;kBAQR,IAAI;;;;;;;;yBAQG,IAAI;;;;;;;;qBAQR,IAAI;;;;;;;;qBAQJ,IAAI;;;;;;EAMvB,CAAC;IAED,MAAM,kBAAE,CAAC,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3C,MAAM,kBAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAEvC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function generateDto(name: string, targetPath: string): Promise<void>;
2
+ //# sourceMappingURL=dto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dto.d.ts","sourceRoot":"","sources":["../../src/generators/dto.ts"],"names":[],"mappings":"AAIA,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBA0DjE"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generateDto = generateDto;
7
+ const fs_extra_1 = __importDefault(require("fs-extra"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ async function generateDto(name, targetPath) {
11
+ const className = name.charAt(0).toUpperCase() + name.slice(1) + 'Dto';
12
+ const fileName = name.toLowerCase() + '.dto.ts';
13
+ const filePath = path_1.default.join(targetPath, fileName);
14
+ // Check if file already exists
15
+ if (await fs_extra_1.default.pathExists(filePath)) {
16
+ throw new Error(`DTO ${fileName} already exists`);
17
+ }
18
+ const template = `import { Dto, ExtendableDto, TypeIs } from '@asapjs/sequelize';
19
+
20
+ @Dto({ name: '${name.toLowerCase()}_dto' })
21
+ export default class ${className} extends ExtendableDto {
22
+ @TypeIs.INT({ comment: 'ID' })
23
+ id: number;
24
+
25
+ @TypeIs.STRING({ comment: 'Name' })
26
+ name: string;
27
+
28
+ @TypeIs.STRING({ comment: 'Description', required: false })
29
+ description?: string;
30
+
31
+ @TypeIs.BOOLEAN({ comment: 'Active status', defaultValue: true })
32
+ is_active: boolean;
33
+
34
+ @TypeIs.DATETIME({ comment: 'Created date' })
35
+ created_at: Date;
36
+
37
+ @TypeIs.DATETIME({ comment: 'Updated date' })
38
+ updated_at: Date;
39
+ }
40
+
41
+ @Dto({ name: 'create_${name.toLowerCase()}_dto' })
42
+ export class Create${className} extends ExtendableDto {
43
+ @TypeIs.STRING({ comment: 'Name', required: true })
44
+ name: string;
45
+
46
+ @TypeIs.STRING({ comment: 'Description', required: false })
47
+ description?: string;
48
+ }
49
+
50
+ @Dto({ name: 'update_${name.toLowerCase()}_dto' })
51
+ export class Update${className} extends ExtendableDto {
52
+ @TypeIs.STRING({ comment: 'Name', required: false })
53
+ name?: string;
54
+
55
+ @TypeIs.STRING({ comment: 'Description', required: false })
56
+ description?: string;
57
+
58
+ @TypeIs.BOOLEAN({ comment: 'Active status', required: false })
59
+ is_active?: boolean;
60
+ }`;
61
+ await fs_extra_1.default.ensureDir(path_1.default.dirname(filePath));
62
+ await fs_extra_1.default.writeFile(filePath, template);
63
+ console.log(chalk_1.default.green(`✓ Created ${filePath}`));
64
+ }
65
+ //# sourceMappingURL=dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dto.js","sourceRoot":"","sources":["../../src/generators/dto.ts"],"names":[],"mappings":";;;;;AAIA,kCA0DC;AA9DD,wDAA0B;AAC1B,gDAAwB;AACxB,kDAA0B;AAEnB,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,UAAkB;IAChE,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC;IAChD,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAEjD,+BAA+B;IAC/B,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,OAAO,QAAQ,iBAAiB,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,QAAQ,GAAG;;gBAEH,IAAI,CAAC,WAAW,EAAE;uBACX,SAAS;;;;;;;;;;;;;;;;;;;;uBAoBT,IAAI,CAAC,WAAW,EAAE;qBACpB,SAAS;;;;;;;;uBAQP,IAAI,CAAC,WAAW,EAAE;qBACpB,SAAS;;;;;;;;;EAS5B,CAAC;IAED,MAAM,kBAAE,CAAC,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3C,MAAM,kBAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAEvC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function generateService(name: string, targetPath: string): Promise<void>;
2
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/generators/service.ts"],"names":[],"mappings":"AAIA,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBAgFrE"}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generateService = generateService;
7
+ const fs_extra_1 = __importDefault(require("fs-extra"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ async function generateService(name, targetPath) {
11
+ const className = name.charAt(0).toUpperCase() + name.slice(1) + 'Application';
12
+ const fileName = name.toLowerCase() + '.application.ts';
13
+ const filePath = path_1.default.join(targetPath, fileName);
14
+ // Check if file already exists
15
+ if (await fs_extra_1.default.pathExists(filePath)) {
16
+ throw new Error(`Service ${fileName} already exists`);
17
+ }
18
+ const template = `import { HttpException } from '@asapjs/router';
19
+
20
+ export class ${className} {
21
+ constructor() {
22
+ // Initialize dependencies
23
+ }
24
+
25
+ async findAll(query: any): Promise<any[]> {
26
+ try {
27
+ // TODO: Implement find all logic
28
+ return [];
29
+ } catch (error) {
30
+ throw new HttpException(500, 'Failed to fetch ${name}s');
31
+ }
32
+ }
33
+
34
+ async findById(id: number): Promise<any> {
35
+ try {
36
+ // TODO: Implement find by id logic
37
+ const item = null; // Fetch from database
38
+
39
+ if (!item) {
40
+ throw new HttpException(404, '${name} not found');
41
+ }
42
+
43
+ return item;
44
+ } catch (error) {
45
+ if (error instanceof HttpException) throw error;
46
+ throw new HttpException(500, 'Failed to fetch ${name}');
47
+ }
48
+ }
49
+
50
+ async create(data: any): Promise<any> {
51
+ try {
52
+ // TODO: Implement create logic
53
+ return data;
54
+ } catch (error) {
55
+ throw new HttpException(500, 'Failed to create ${name}');
56
+ }
57
+ }
58
+
59
+ async update(id: number, data: any): Promise<any> {
60
+ try {
61
+ const item = await this.findById(id);
62
+
63
+ // TODO: Implement update logic
64
+
65
+ return { ...item, ...data };
66
+ } catch (error) {
67
+ if (error instanceof HttpException) throw error;
68
+ throw new HttpException(500, 'Failed to update ${name}');
69
+ }
70
+ }
71
+
72
+ async delete(id: number): Promise<void> {
73
+ try {
74
+ await this.findById(id);
75
+
76
+ // TODO: Implement delete logic
77
+ } catch (error) {
78
+ if (error instanceof HttpException) throw error;
79
+ throw new HttpException(500, 'Failed to delete ${name}');
80
+ }
81
+ }
82
+ }`;
83
+ await fs_extra_1.default.ensureDir(path_1.default.dirname(filePath));
84
+ await fs_extra_1.default.writeFile(filePath, template);
85
+ console.log(chalk_1.default.green(`✓ Created ${filePath}`));
86
+ }
87
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/generators/service.ts"],"names":[],"mappings":";;;;;AAIA,0CAgFC;AApFD,wDAA0B;AAC1B,gDAAwB;AACxB,kDAA0B;AAEnB,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,UAAkB;IACpE,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC;IAC/E,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,iBAAiB,CAAC;IACxD,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAEjD,+BAA+B;IAC/B,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,WAAW,QAAQ,iBAAiB,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,QAAQ,GAAG;;eAEJ,SAAS;;;;;;;;;;sDAU8B,IAAI;;;;;;;;;;wCAUlB,IAAI;;;;;;sDAMU,IAAI;;;;;;;;;uDASH,IAAI;;;;;;;;;;;;;uDAaJ,IAAI;;;;;;;;;;;uDAWJ,IAAI;;;EAGzD,CAAC;IAED,MAAM,kBAAE,CAAC,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3C,MAAM,kBAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAEvC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const commander_1 = require("commander");
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const dev_1 = require("./commands/dev");
9
+ const build_1 = require("./commands/build");
10
+ const start_1 = require("./commands/start");
11
+ const generate_1 = require("./commands/generate");
12
+ const new_1 = require("./commands/new");
13
+ const program = new commander_1.Command();
14
+ console.log(chalk_1.default.blue(`
15
+ ___ _____ ___ ____ _ _____
16
+ / _ \\ / ___// | / __ \\ | / ___/
17
+ / /_\\ \\\\__ \\/ /| | / /_/ / | \\__ \\
18
+ / /_\\\\___/ / ___ |/ ____/ /| |___/ /
19
+ \\____/____/_/ |_/_/ /_/ |_/____/
20
+ `));
21
+ program
22
+ .name('asapjs')
23
+ .description('CLI tool for asapjs framework')
24
+ .version('0.1.0');
25
+ program.addCommand(dev_1.devCommand);
26
+ program.addCommand(build_1.buildCommand);
27
+ program.addCommand(start_1.startCommand);
28
+ program.addCommand(generate_1.generateCommand);
29
+ program.addCommand(new_1.newCommand);
30
+ program.parse(process.argv);
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,yCAAoC;AACpC,kDAA0B;AAC1B,wCAA4C;AAC5C,4CAAgD;AAChD,4CAAgD;AAChD,kDAAsD;AACtD,wCAA4C;AAE5C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC;;;;;;CAMtB,CAAC,CAAC,CAAC;AAEJ,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,+BAA+B,CAAC;KAC5C,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,UAAU,CAAC,gBAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,oBAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,oBAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,0BAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,gBAAU,CAAC,CAAC;AAE/B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface CompilerOptions {
2
+ watch?: boolean;
3
+ sourceMap?: boolean;
4
+ outDir?: string;
5
+ }
6
+ export declare function compile(cwd: string, options?: CompilerOptions): Promise<void>;
7
+ export declare function ensureDistExists(cwd: string): Promise<void>;
8
+ //# sourceMappingURL=compiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/utils/compiler.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCvF;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjE"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.compile = compile;
7
+ exports.ensureDistExists = ensureDistExists;
8
+ const cross_spawn_1 = require("cross-spawn");
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const fs_extra_1 = __importDefault(require("fs-extra"));
12
+ async function compile(cwd, options = {}) {
13
+ const tsconfigPath = path_1.default.join(cwd, 'tsconfig.json');
14
+ if (!await fs_extra_1.default.pathExists(tsconfigPath)) {
15
+ throw new Error('tsconfig.json not found');
16
+ }
17
+ const args = ['tsc'];
18
+ if (options.watch) {
19
+ args.push('--watch');
20
+ }
21
+ if (options.sourceMap !== undefined) {
22
+ args.push(options.sourceMap ? '--sourceMap' : '--sourceMap', 'false');
23
+ }
24
+ if (options.outDir) {
25
+ args.push('--outDir', options.outDir);
26
+ }
27
+ return new Promise((resolve, reject) => {
28
+ const child = (0, cross_spawn_1.spawn)('npx', args, {
29
+ cwd,
30
+ stdio: 'inherit'
31
+ });
32
+ child.on('error', (error) => {
33
+ console.error(chalk_1.default.red('Failed to compile:'), error);
34
+ reject(error);
35
+ });
36
+ child.on('exit', (code) => {
37
+ if (code === 0) {
38
+ console.log(chalk_1.default.green('✓ Compilation successful'));
39
+ resolve();
40
+ }
41
+ else {
42
+ reject(new Error(`Compilation failed with code ${code}`));
43
+ }
44
+ });
45
+ });
46
+ }
47
+ async function ensureDistExists(cwd) {
48
+ const distPath = path_1.default.join(cwd, 'dist');
49
+ await fs_extra_1.default.ensureDir(distPath);
50
+ }
51
+ //# sourceMappingURL=compiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/utils/compiler.ts"],"names":[],"mappings":";;;;;AAWA,0BAyCC;AAED,4CAGC;AAzDD,6CAAoC;AACpC,kDAA0B;AAC1B,gDAAwB;AACxB,wDAA0B;AAQnB,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,UAA2B,EAAE;IACtE,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAErD,IAAI,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAErB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,IAAA,mBAAK,EAAC,KAAK,EAAE,IAAI,EAAE;YAC/B,GAAG;YACH,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,KAAK,CAAC,CAAC;YACtD,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;gBACrD,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,KAAK,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,gBAAgB,CAAC,GAAW;IAChD,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACxC,MAAM,kBAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,16 @@
1
+ export interface AsapJSConfig {
2
+ environments?: {
3
+ [key: string]: {
4
+ envFile?: string;
5
+ port?: number;
6
+ [key: string]: any;
7
+ };
8
+ };
9
+ build?: {
10
+ outDir?: string;
11
+ sourceMap?: boolean;
12
+ };
13
+ }
14
+ export declare function loadConfig(cwd: string): Promise<AsapJSConfig>;
15
+ export declare function loadEnv(env: string, cwd: string): Promise<void>;
16
+ //# sourceMappingURL=env-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-loader.d.ts","sourceRoot":"","sources":["../../src/utils/env-loader.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,YAAY,CAAC,EAAE;QACb,CAAC,GAAG,EAAE,MAAM,GAAG;YACb,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;SACpB,CAAC;KACH,CAAC;IACF,KAAK,CAAC,EAAE;QACN,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACH;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAQnE;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmCrE"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.loadConfig = loadConfig;
7
+ exports.loadEnv = loadEnv;
8
+ const fs_extra_1 = __importDefault(require("fs-extra"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const dotenv_1 = __importDefault(require("dotenv"));
11
+ const chalk_1 = __importDefault(require("chalk"));
12
+ async function loadConfig(cwd) {
13
+ const configPath = path_1.default.join(cwd, '.asapjs.json');
14
+ if (await fs_extra_1.default.pathExists(configPath)) {
15
+ return await fs_extra_1.default.readJson(configPath);
16
+ }
17
+ return {};
18
+ }
19
+ async function loadEnv(env, cwd) {
20
+ const config = await loadConfig(cwd);
21
+ // Default env file paths
22
+ const defaultEnvPaths = {
23
+ local: './env/.env.local',
24
+ development: './env/.env.dev',
25
+ production: './env/.env.prod'
26
+ };
27
+ let envFile = defaultEnvPaths[env] || `.env.${env}`;
28
+ // Check config for custom env file path
29
+ if (config.environments?.[env]?.envFile) {
30
+ envFile = config.environments[env].envFile;
31
+ }
32
+ const envPath = path_1.default.join(cwd, envFile);
33
+ if (await fs_extra_1.default.pathExists(envPath)) {
34
+ dotenv_1.default.config({ path: envPath });
35
+ console.log(chalk_1.default.green(`✓ Loaded environment from ${envFile}`));
36
+ }
37
+ else {
38
+ // Try .env file as fallback
39
+ const defaultEnvPath = path_1.default.join(cwd, '.env');
40
+ if (await fs_extra_1.default.pathExists(defaultEnvPath)) {
41
+ dotenv_1.default.config({ path: defaultEnvPath });
42
+ console.log(chalk_1.default.yellow(`⚠ Using default .env file (${envFile} not found)`));
43
+ }
44
+ else {
45
+ console.log(chalk_1.default.yellow(`⚠ No environment file found`));
46
+ }
47
+ }
48
+ // Set NODE_ENV
49
+ process.env.NODE_ENV = env === 'production' ? 'production' : 'development';
50
+ }
51
+ //# sourceMappingURL=env-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-loader.js","sourceRoot":"","sources":["../../src/utils/env-loader.ts"],"names":[],"mappings":";;;;;AAmBA,gCAQC;AAED,0BAmCC;AAhED,wDAA0B;AAC1B,gDAAwB;AACxB,oDAA4B;AAC5B,kDAA0B;AAgBnB,KAAK,UAAU,UAAU,CAAC,GAAW;IAC1C,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAElD,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACpC,OAAO,MAAM,kBAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAEM,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,GAAW;IACpD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IAErC,yBAAyB;IACzB,MAAM,eAAe,GAA2B;QAC9C,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,gBAAgB;QAC7B,UAAU,EAAE,iBAAiB;KAC9B,CAAC;IAEF,IAAI,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,QAAQ,GAAG,EAAE,CAAC;IAEpD,wCAAwC;IACxC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC;QACxC,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,OAAQ,CAAC;IAC9C,CAAC;IAED,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAExC,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,gBAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,6BAA6B,OAAO,EAAE,CAAC,CAAC,CAAC;IACnE,CAAC;SAAM,CAAC;QACN,4BAA4B;QAC5B,MAAM,cAAc,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC9C,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YACxC,gBAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,8BAA8B,OAAO,aAAa,CAAC,CAAC,CAAC;QAChF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,eAAe;IACf,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;AAC7E,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { ChildProcess } from 'child_process';
2
+ export declare function killProcessTree(pid: number): Promise<void>;
3
+ export declare function spawnWithKillSupport(command: string, args: string[], options: any): ChildProcess;
4
+ //# sourceMappingURL=process-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-manager.d.ts","sourceRoot":"","sources":["../../src/utils/process-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB1D;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,GAAG,GACX,YAAY,CAOd"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.killProcessTree = killProcessTree;
4
+ exports.spawnWithKillSupport = spawnWithKillSupport;
5
+ const cross_spawn_1 = require("cross-spawn");
6
+ function killProcessTree(pid) {
7
+ return new Promise((resolve) => {
8
+ if (process.platform === 'win32') {
9
+ // Windows: kill process tree
10
+ (0, cross_spawn_1.spawn)('taskkill', ['/pid', pid.toString(), '/f', '/t'], { stdio: 'ignore' })
11
+ .on('exit', () => resolve());
12
+ }
13
+ else {
14
+ // Unix: kill process group
15
+ try {
16
+ // Send SIGKILL immediately for faster shutdown in development
17
+ process.kill(-pid, 'SIGKILL');
18
+ // Small delay to ensure process is dead
19
+ setTimeout(() => resolve(), 50);
20
+ }
21
+ catch (e) {
22
+ // Process already dead
23
+ resolve();
24
+ }
25
+ }
26
+ });
27
+ }
28
+ function spawnWithKillSupport(command, args, options) {
29
+ // On Unix, use process groups for better process management
30
+ if (process.platform !== 'win32') {
31
+ options.detached = true;
32
+ }
33
+ return (0, cross_spawn_1.spawn)(command, args, options);
34
+ }
35
+ //# sourceMappingURL=process-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-manager.js","sourceRoot":"","sources":["../../src/utils/process-manager.ts"],"names":[],"mappings":";;AAGA,0CAmBC;AAED,oDAWC;AAlCD,6CAAoC;AAEpC,SAAgB,eAAe,CAAC,GAAW;IACzC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,6BAA6B;YAC7B,IAAA,mBAAK,EAAC,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;iBACzE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,2BAA2B;YAC3B,IAAI,CAAC;gBACH,8DAA8D;gBAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBAC9B,wCAAwC;gBACxC,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YAClC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,uBAAuB;gBACvB,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,oBAAoB,CAClC,OAAe,EACf,IAAc,EACd,OAAY;IAEZ,4DAA4D;IAC5D,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,OAAO,IAAA,mBAAK,EAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACvC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@asapjs/cli",
3
+ "version": "1.0.0-alpha.0",
4
+ "description": "CLI tool for asapjs framework",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "asapjs": "./bin/asapjs.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "bin"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "dev": "ts-node src/index.ts",
16
+ "prepublishOnly": "yarn build"
17
+ },
18
+ "dependencies": {
19
+ "@asapjs/common": "1.0.0-alpha.0",
20
+ "@asapjs/core": "1.0.0-alpha.0",
21
+ "chalk": "^4.1.2",
22
+ "chokidar": "^3.5.3",
23
+ "commander": "^9.4.1",
24
+ "cross-spawn": "^7.0.3",
25
+ "dotenv": "^16.0.3",
26
+ "fs-extra": "^11.1.0",
27
+ "inquirer": "^8.2.5",
28
+ "ora": "^5.4.1"
29
+ },
30
+ "devDependencies": {
31
+ "@types/cross-spawn": "^6.0.2",
32
+ "@types/fs-extra": "^11.0.1",
33
+ "@types/inquirer": "^9.0.3",
34
+ "@types/node": "^18.0.0",
35
+ "ts-node": "^10.9.1",
36
+ "typescript": "^5.8.3"
37
+ },
38
+ "author": "",
39
+ "license": "ISC",
40
+ "publishConfig": {
41
+ "access": "public"
42
+ },
43
+ "gitHead": "79561e3604dc505813035558d1bfcc6cda0b088a"
44
+ }