@tasolutions/express-core
Version:
All libs for express
197 lines (161 loc) • 5.49 kB
JavaScript
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!');