estructura_automation
Version:
Paquete de estructura de automation de paguetodo
135 lines (119 loc) • 4.24 kB
JavaScript
const fs = require("fs-extra");
const path = require("path");
const { exec } = require("child_process");
// Lista de carpetas que deseas mover
const folders = [
"envs",
"constant",
"documentation",
"Locators",
"models",
"plugins",
"report",
"test",
"utils",
"assets",
];
// Lista de archivos individuales que deseas mover
const files = [
"custom-reporter.ts",
"index.ts",
"eslint.config.js",
"package.json",
"playwright.config.ts"
];
// Dependencias necesarias para el proyecto
const dependencies = [
"gherkin@^9.0.0",
"gherkin-parse@^1.0.12",
"@faker-js/faker@^9.6.0",
"@playwright/test@^1.51.1",
"@types/node@^22.13.13",
"eslint@^9.23.0",
"globals@^16.0.0",
"typescript-eslint@^8.28.0",
"dotenv@^16.4.5",
"cross-env@^7.0.3",
];
// Ruta base de origen (dentro de node_modules/estructura/template)
const baseSourceDir = path.join(__dirname, "template");
// Ruta de destino (en la raíz del proyecto)
const baseTargetDir = path.join(__dirname, "../../");
console.log("Iniciando la copia de carpetas y archivos...");
console.log("Directorio origen:", baseSourceDir);
console.log("Directorio destino:", baseTargetDir);
// Función para verificar si un archivo existe
const fileExists = async (filePath) => {
try {
await fs.access(filePath);
return true;
} catch {
return false;
}
};
// Copia las carpetas
Promise.allSettled(
folders.map(async (folder) => {
const sourceDir = path.join(baseSourceDir, folder);
const targetDir = path.join(baseTargetDir, folder);
console.log(`Verificando carpeta origen: ${sourceDir}`);
const exists = await fileExists(sourceDir);
if (!exists) {
throw new Error(`Carpeta no encontrada: ${sourceDir}`);
}
console.log(`Copiando carpeta desde: ${sourceDir} hacia: ${targetDir}`);
return fs.copy(sourceDir, targetDir, { overwrite: true });
})
).then((folderResults) => {
return Promise.allSettled(
files.map(async (file) => {
const sourceFile = path.join(baseSourceDir, file);
const targetFile = path.join(baseTargetDir, file);
console.log(`Verificando archivo origen: ${sourceFile}`);
const exists = await fileExists(sourceFile);
if (!exists) {
throw new Error(`Archivo no encontrado: ${sourceFile}`);
}
console.log(`Copiando archivo desde: ${sourceFile} hacia: ${targetFile}`);
return fs.copy(sourceFile, targetFile, { overwrite: true });
})
).then((fileResults) => {
console.log("\nResultados de la copia de carpetas:");
folderResults.forEach((result, index) => {
if (result.status === "fulfilled") {
console.log(`✔️ Carpeta '${folders[index]}' copiada exitosamente.`);
} else {
console.error(`❌ Error al copiar la carpeta '${folders[index]}':`, result.reason);
}
});
console.log("\nResultados de la copia de archivos:");
fileResults.forEach((result, index) => {
if (result.status === "fulfilled") {
console.log(`✔️ Archivo '${files[index]}' copiado exitosamente.`);
} else {
console.error(`❌ Error al copiar el archivo '${files[index]}':`, result.reason);
}
});
// Instalar dependencias automáticamente
console.log("\nInstalando dependencias necesarias...");
exec(`npm install ${dependencies.join(" ")}`, { cwd: baseTargetDir }, (err, stdout, stderr) => {
if (err) {
console.error("Error instalando dependencias:", err);
console.error(stderr);
} else {
console.log("Dependencias instaladas correctamente:");
console.log(stdout);
// Eliminar el archivo postinstall.js
const postinstallFile = path.join(__dirname, "postinstall.js");
console.log("\nEliminando el archivo postinstall.js...");
fs.remove(postinstallFile, (removeErr) => {
if (removeErr) {
console.error("Error eliminando el archivo postinstall.js:", removeErr);
} else {
console.log("Archivo postinstall.js eliminado correctamente.");
}
});
}
});
});
});