UNPKG

@tasolutions/express-core

Version:
197 lines (161 loc) 5.49 kB
const fs = require('fs'); const path = require('path'); // Lấy tên module từ tham số dòng lệnh const moduleName = process.argv[2]; if (!moduleName) { console.error('Vui lòng cung cấp tên module!'); process.exit(1); } const moduleDir = path.join('src', moduleName); // Đảm bảo thư mục tồn tại if (!fs.existsSync(moduleDir)) { fs.mkdirSync(moduleDir, { recursive: true }); } // Tạo file index.ts const createIndexFile = () => { const content = `/** * Module ${moduleName} * @module ${moduleName} */ export * from './types'; export * from './${moduleName}.service'; export * from './${moduleName}.utils'; `; fs.writeFileSync(path.join(moduleDir, 'index.ts'), content); console.log(`✓ Đã tạo file index.ts`); }; // Tạo file types.ts const createTypesFile = () => { const content = `/** * Types for ${moduleName} module */ export interface I${capitalizeFirstLetter(moduleName)}Config { // Cấu hình cho module enabled: boolean; // Thêm các thuộc tính cấu hình khác ở đây } export interface I${capitalizeFirstLetter(moduleName)}Options { // Các tùy chọn cho module // Thêm các thuộc tính tùy chọn ở đây } // Thêm các interface và type khác ở đây `; fs.writeFileSync(path.join(moduleDir, 'types.ts'), content); console.log(`✓ Đã tạo file types.ts`); }; // Tạo file service const createServiceFile = () => { const content = `import { I${capitalizeFirstLetter(moduleName)}Config, I${capitalizeFirstLetter(moduleName)}Options } from './types'; import { logger } from '../logging'; /** * Class ${capitalizeFirstLetter(moduleName)}Service * Cung cấp các chức năng chính của module ${moduleName} */ export class ${capitalizeFirstLetter(moduleName)}Service { private config: I${capitalizeFirstLetter(moduleName)}Config; private isInitialized: boolean = false; /** * Khởi tạo service */ constructor(config: I${capitalizeFirstLetter(moduleName)}Config) { this.config = config; } /** * Khởi tạo module */ async initialize(): Promise<void> { if (this.isInitialized) { logger.warn('${capitalizeFirstLetter(moduleName)}Service đã được khởi tạo'); return; } try { logger.info('Đang khởi tạo ${capitalizeFirstLetter(moduleName)}Service...'); // Thêm logic khởi tạo ở đây this.isInitialized = true; logger.info('${capitalizeFirstLetter(moduleName)}Service đã được khởi tạo thành công'); } catch (error) { logger.error('Lỗi khi khởi tạo ${capitalizeFirstLetter(moduleName)}Service:', error); throw error; } } /** * Phương thức ví dụ */ async exampleMethod(options: I${capitalizeFirstLetter(moduleName)}Options): Promise<any> { if (!this.isInitialized) { throw new Error('${capitalizeFirstLetter(moduleName)}Service chưa được khởi tạo'); } try { // Thêm logic xử lý ở đây return { success: true }; } catch (error) { logger.error('Lỗi trong exampleMethod:', error); throw error; } } } `; fs.writeFileSync(path.join(moduleDir, `${moduleName}.service.ts`), content); console.log(`✓ Đã tạo file ${moduleName}.service.ts`); }; // Tạo file utils const createUtilsFile = () => { const content = `/** * Các hàm tiện ích cho module ${moduleName} */ /** * Hàm tiện ích ví dụ */ export function exampleUtil(input: string): string { return \`Processed: \${input}\`; } // Thêm các hàm tiện ích khác ở đây `; fs.writeFileSync(path.join(moduleDir, `${moduleName}.utils.ts`), content); console.log(`✓ Đã tạo file ${moduleName}.utils.ts`); }; // Tạo file test const createTestFile = () => { const content = `import { ${capitalizeFirstLetter(moduleName)}Service } from '../src/${moduleName}/${moduleName}.service'; import { I${capitalizeFirstLetter(moduleName)}Config } from '../src/${moduleName}/types'; describe('${capitalizeFirstLetter(moduleName)}Service', () => { let service: ${capitalizeFirstLetter(moduleName)}Service; beforeEach(() => { const config: I${capitalizeFirstLetter(moduleName)}Config = { enabled: true, // Thêm các cấu hình test khác }; service = new ${capitalizeFirstLetter(moduleName)}Service(config); }); it('should initialize correctly', async () => { await service.initialize(); // Thêm các assertion ở đây expect(true).toBeTruthy(); }); it('should execute example method', async () => { await service.initialize(); const result = await service.exampleMethod({}); expect(result).toBeDefined(); expect(result.success).toBeTruthy(); }); }); `; // Đảm bảo thư mục tests tồn tại const testDir = path.join('tests', moduleName); if (!fs.existsSync(testDir)) { fs.mkdirSync(testDir, { recursive: true }); } fs.writeFileSync(path.join(testDir, `${moduleName}.test.ts`), content); console.log(`✓ Đã tạo file tests/${moduleName}/${moduleName}.test.ts`); }; // Hàm hỗ trợ để viết hoa chữ cái đầu tiên function capitalizeFirstLetter(string) { return string.charAt(0).toUpperCase() + string.slice(1); } // Thực thi tạo các file createIndexFile(); createTypesFile(); createServiceFile(); createUtilsFile(); createTestFile(); console.log('\n🎉 Đã tạo tất cả các file cho module thành công!');