@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.
- package/bin/asapjs.js +3 -0
- package/dist/commands/build.d.ts +3 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +62 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/dev.d.ts +3 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +106 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/generate.d.ts +3 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +46 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/new.d.ts +3 -0
- package/dist/commands/new.d.ts.map +1 -0
- package/dist/commands/new.js +235 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/start.d.ts +3 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +64 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/generators/controller.d.ts +2 -0
- package/dist/generators/controller.d.ts.map +1 -0
- package/dist/generators/controller.js +73 -0
- package/dist/generators/controller.js.map +1 -0
- package/dist/generators/dto.d.ts +2 -0
- package/dist/generators/dto.d.ts.map +1 -0
- package/dist/generators/dto.js +65 -0
- package/dist/generators/dto.js.map +1 -0
- package/dist/generators/service.d.ts +2 -0
- package/dist/generators/service.d.ts.map +1 -0
- package/dist/generators/service.js +87 -0
- package/dist/generators/service.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/compiler.d.ts +8 -0
- package/dist/utils/compiler.d.ts.map +1 -0
- package/dist/utils/compiler.js +51 -0
- package/dist/utils/compiler.js.map +1 -0
- package/dist/utils/env-loader.d.ts +16 -0
- package/dist/utils/env-loader.d.ts.map +1 -0
- package/dist/utils/env-loader.js +51 -0
- package/dist/utils/env-loader.js.map +1 -0
- package/dist/utils/process-manager.d.ts +4 -0
- package/dist/utils/process-manager.d.ts.map +1 -0
- package/dist/utils/process-manager.js +35 -0
- package/dist/utils/process-manager.js.map +1 -0
- package/package.json +44 -0
package/bin/asapjs.js
ADDED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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 @@
|
|
|
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
|
+
}
|