UNPKG

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
"use strict"; 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