| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- #!/usr/bin/env node
- import * as fs from 'fs';
- import * as path from 'path';
- import { ServerProperties } from '../lib';
- class Extress {
- private static Init: string = 'init';
- private static args: string[] = process.argv.slice(2);
- private static command: string | undefined = Extress.args[0];
- private static cwd: string = process.cwd();
- private static configPath: string = path.join(Extress.cwd, 'config.json');
- private static srcPath: string = path.join(Extress.cwd, 'src');
- private static middlewaresPath: string = path.join(Extress.srcPath, 'middlewares');
- private static routesPath: string = path.join(Extress.srcPath, 'routes');
- private static exitWithError(message: string): never {
- return console.error(message), process.exit(1);
- }
- private static loadConfig(): ServerProperties {
- if(!fs.existsSync(Extress.configPath))
- Extress.exitWithError('config.json not found in current directory');
- try {
- const content: string = fs.readFileSync(Extress.configPath, 'utf-8');
- return JSON.parse(content) as ServerProperties;
- } catch (error) {
- const message = error instanceof Error ? error.message : String(error);
- Extress.exitWithError(`Failed to read config.json: ${message}`);
- }
- }
- private static getDefaultConfig(): ServerProperties {
- return {
- port: 3000,
- middlewaresPath: './src/middlewares',
- routesPath: './src/routes',
- json: false,
- urlencoded: false,
- sessions: false
- };
- }
- private static init(): void {
- if(fs.existsSync(Extress.configPath))
- return console.log('config.json already exists');
- const serverCode =
- 'import { Server as ExtressServer } from \'extress\';\n\n' +
- 'class Server {\n' +
- '\tpublic static async start(): Promise<ExtressServer> {\n' +
- '\t\treturn new ExtressServer().init().then((server: Server) => {\n' +
- '\t\t\treturn server.start(), server;\n' +
- '\t\t});\n' +
- '\t}\n' +
- '}\n\n' +
- 'export default Server;';
-
- const indexCode =
- 'import Server from \'./Server\';\n\n' +
- 'Server.start();';
-
- const exampleMiddleware =
- 'import { Middleware, NextFunction, Request, Response } from \'extress\';\n\n' +
- 'class DefaultMiddleware extends Middleware {\n' +
- '\tprotected action = (req: Request, res: Response, next: NextFunction) => {\n' +
- '\t\tnext();\n' +
- '\t};\n' +
- '\tprotected order: number = 0;\n' +
- '\tprotected route: string | null = null;\n' +
- '}\n\n' +
- 'export default DefaultMiddleware;';
-
- const exampleRoute =
- 'import { Route, Request, Response, HttpMethod } from \'extress\';\n\n' +
- 'class GetIndex extends Route {\n' +
- '\tprotected action = (req: Request, res: Response) => {\n' +
- '\t\tres.status(200).send(\'Welcome to Extress!\');\n' +
- '\t};\n' +
- '\tprotected route: string | null = \'/\';\n' +
- '\tprotected method: HttpMethod = HttpMethod.GET;\n' +
- '}\n\n' +
- 'export default GetIndex;';
- fs.mkdirSync(Extress.srcPath);
- fs.mkdirSync(Extress.middlewaresPath);
- fs.mkdirSync(Extress.routesPath);
- fs.writeFileSync(path.join(Extress.middlewaresPath, 'DefaultMiddleware.ts'), exampleMiddleware);
- fs.writeFileSync(path.join(Extress.routesPath, 'GetIndex.ts'), exampleRoute);
- fs.writeFileSync(path.join(Extress.srcPath, 'Server.ts'), serverCode);
- fs.writeFileSync(path.join(Extress.srcPath, 'index.ts'), indexCode);
- fs.writeFileSync(Extress.configPath, JSON.stringify(Extress.getDefaultConfig(), null, 2), 'utf-8');
- console.log('Project initialized successfully.');
- }
- private static printUsage(): void {
- console.log('Usage:\nextress init');
- }
- public static run(): void {
- switch (Extress.command) {
- case Extress.Init: return Extress.init();
- default: return Extress.printUsage();
- }
- }
- }
- Extress.run();
|