giovandyyg
Version:
"Lee y analiza archivos en formato Markdown, para verificar los links que contengan y reportan algunas estadísticas."
160 lines (113 loc) • 5.24 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.optionValidate = exports.getLinks = exports.getFiles = exports.typeMarkdown = exports.getFilesAndDirectories = exports.pathIsFile = exports.pathIsDirectory = exports.transAbsolute = exports.pathAbsolute = exports.pathValid = void 0;
// const jsdom = require ('jsdom');
const path = require('path');
const fs = require('fs');
const marked = require('marked');
const renderer = new marked.Renderer();
const fetch = require('node-fetch'); //***********************************PRUEBAS**********************************
const ruta2 = 'E:/pruebas/hola mundo';
const ruta1 = './test/prueba/yesenia.md';
const ruta3 = 'C:\\Users\\HP\\MD-Links\\LIM013-fe-md-links\\test\\prueba'; //*****************************************************************************
const pathValid = route => fs.existsSync(route) ? true : false; // console.log(pathValid(ruta1));
exports.pathValid = pathValid;
const pathAbsolute = route => path.isAbsolute(route) ? true : false; // console.log(pathAbsolute(ruta1));
// const transAbsolute = (route) => transAbsolute(route) ? path.resolve(route):false;
// console.log(transAbsolute(ruta1));
// export const transAbsolute = (route) => {
// const absolutePath = path.resolve(route);
// return absolutePath;
// };
exports.pathAbsolute = pathAbsolute;
const transAbsolute = route => {
return path.resolve(route);
}; // console.log(transAbsolute('prueba1.md'));
exports.transAbsolute = transAbsolute;
const pathIsDirectory = route => {
const stats = fs.lstatSync(route);
const directory = stats.isDirectory(route) ? true : false;
return directory;
}; // console.log(pathIsDirectory(ruta3));
exports.pathIsDirectory = pathIsDirectory;
const pathIsFile = route => {
const file = fs.lstatSync(route);
const isFile = file.isFile(route) ? true : false;
return isFile;
}; // console.log(pathIsFile(ruta1));
// devuelve nuevo array de elementos con la ruta de cada archivo/directorio
exports.pathIsFile = pathIsFile;
const getFilesAndDirectories = route => {
const readingDirectories = route => fs.readdirSync(route);
return readingDirectories(route).map(element => path.join(route, element));
}; // console.log(getFilesAndDirectories(ruta3));
exports.getFilesAndDirectories = getFilesAndDirectories;
const typeMarkdown = route => path.extname(route);
exports.typeMarkdown = typeMarkdown;
const getFiles = route => {
let arrayOfMDFiles = []; // vamos a ir agregando elementos al array con push
const newPath = transAbsolute(route);
if (pathIsFile(newPath) === true) {
//condiciona si path es archivo
if (typeMarkdown(newPath) === '.md') {
// si es estrictamente .md
arrayOfMDFiles.push(newPath); //si cumple la ocndicion se agregara el archivo al arrayOfMdFiles
}
} else {
// si no pasara lo siguiente ...
getFilesAndDirectories(route).forEach(element => {
//llamar a getArrayFilesAndDirectories, para que entre dentro del nuevo directorio.
const filesOfNewRoute = element; // como la función for each siempre llama a un element donde guarda la lista, nosotros lo llamamos file, guardamos los files del nuevo directorio en const files of new route
const getMDFilesInNewRoute = getFiles(filesOfNewRoute); //le pasamos la funcion getMdFiles a los files de la nueva ruta, para que haga la busqueda de archivos MD of vuelva a entrar a un nuevo diretcorio.
arrayOfMDFiles = arrayOfMDFiles.concat(getMDFilesInNewRoute); //concatenamos los files md de la nueva ruta con el array de files total
}); //al pasar de getMDFiles dentro de getFiles hacemos uso de la recursionnnnn!!!
}
return arrayOfMDFiles;
}; // console.log(getFiles('./test/prueba/texto'))
exports.getFiles = getFiles;
const getLinks = route => {
let arrayMDLinks = [];
const readingFiles = route => fs.readFileSync(route, 'utf-8');
getFiles(route).forEach(file => {
// const prueba = file.href.match(hrefs);
// console.log(prueba);
// const hrefs = /\((http|https|ftp|ftps).+?\)/g;
renderer.link = (href, title, text) => {
const link = {
href: href,
text: href,
file: file
};
arrayMDLinks.push(link);
};
marked(readingFiles(file), {
renderer
});
}); // console.log(arrayMDLinks,'hola mundo');
return arrayMDLinks;
}; // console.log(getLinks('./test/prueba/varios/pruebaVarios.md'));
// console.log(getLinks('prueba1.md'));
exports.getLinks = getLinks;
const optionValidate = route => {
const linksArray = getLinks(route);
const valid = linksArray.map(link => fetch(link.href).then(res => ({
href: link.href,
text: link.text.substring(0, 50),
file: link.file,
status: res.status,
statusText: res.statusText
})).catch(() => ({
href: link.href,
text: link.text,
file: link.file,
status: 'no status',
statusText: 'FAIL'
})));
return Promise.all(valid);
}; // module.exports = optionValidate;
// export default optionValidate;
// optionValidate('prueba1.md').then((res) => console.log(res)).catch((err)=>console.log(err))
// console.log(optionValidate('prueba1.md'));
exports.optionValidate = optionValidate;