ruch
Version:
Revolutionary React TypeScript CLI with hexagonal architecture & AI-powered development assistance. Create maintainable, scalable applications with domain-driven design and integrated AI tooling.
80 lines • 3.75 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createDomain = void 0;
const fs_extra_1 = __importDefault(require("fs-extra"));
const path_1 = __importDefault(require("path"));
const paths_1 = require("../utils/paths");
const domains_1 = require("../templates/domains");
const file_operations_1 = require("../utils/file-operations");
const logging_1 = require("../utils/logging");
// Pure function to get required domain folders
const getRequiredDomainFolders = (options) => {
const requiredFolders = [
'entities',
'ports',
'services',
'adapters',
'hooks'
];
if (options.withUi)
requiredFolders.push('ui');
return requiredFolders;
};
const createDomain = async (domainName, options, fileSystem = fs_extra_1.default, log = require('../utils/logger').logger) => {
// Validation du nom
if (!(0, paths_1.validateDomainName)(domainName)) {
(0, logging_1.logInvalidDomainName)(log, domainName);
return;
}
const domainPath = (0, paths_1.buildDomainDirectoryPath)(domainName);
const domainsSourcePath = (0, paths_1.getDomainsSourceDirectoryPath)();
// Vérification de l'existence du domaine
if (await (0, file_operations_1.validateFileExists)(fileSystem, domainPath)) {
(0, logging_1.logDomainAlreadyExists)(log, domainName, domainPath);
return;
}
try {
// Création du dossier src
await (0, file_operations_1.createDirectory)(fileSystem, path_1.default.join(process.cwd(), 'src'));
// Création du dossier src/domains si besoin
await (0, file_operations_1.createDirectory)(fileSystem, domainsSourcePath);
(0, logging_1.logInfo)(log, `Creating domain "${domainName}"...`);
// Création du dossier du domaine
await (0, file_operations_1.createDirectory)(fileSystem, domainPath);
// Création des dossiers
const requiredFolders = getRequiredDomainFolders(options);
for (const folder of requiredFolders) {
await (0, file_operations_1.createDirectory)(fileSystem, path_1.default.join(domainPath, folder));
}
// Génération des fichiers
const domainFiles = (0, domains_1.generateDomainFiles)(domainName, options);
for (const file of domainFiles) {
await (0, file_operations_1.writeFile)(fileSystem, path_1.default.join(domainPath, file.path), file.content);
}
// Affichage du résumé
(0, logging_1.logSuccess)(log, `Domain "${domainName}" created successfully!`);
(0, logging_1.logInfo)(log, `Location: ${domainPath}`);
(0, logging_1.logInfo)(log, 'Generated structure:');
log.log(`├── entities/`);
log.log(`├── ports/`);
log.log(`├── services/`);
log.log(`├── adapters/`);
log.log(`├── hooks/`);
if (options.withUi)
log.log(`├── ui/`);
(0, logging_1.logInfo)(log, `💡 You can now import the domain with: import { ... } from './src/domains/${domainName}'`);
}
catch (error) {
(0, logging_1.logError)(log, `Error creating domain: ${error instanceof Error ? error.message : 'Unknown error'}`);
// Nettoyage en cas d'erreur
if (await (0, file_operations_1.validateFileExists)(fileSystem, domainPath)) {
await (0, file_operations_1.removeFile)(fileSystem, domainPath);
(0, logging_1.logInfo)(log, 'Cleanup completed after error.');
}
}
};
exports.createDomain = createDomain;
//# sourceMappingURL=create.js.map