UNPKG

claudiaq-md-links

Version:

Application that detects broken links in Markdown files. It is a project for Laboratoria cohort SCL010

112 lines (94 loc) 4.61 kB
const stats = require('./md-links-options.js'); module.exports = mdLinksStats = { //mdPromise y findUrlAndLinks hacen lo mismo. Uno es promesa y el otro, no mdPromise: (data) => { //con promesa let promise = new Promise ( (resolve, reject) => { if (data.substring(data.length-1, data.length-4) === '.md') {//si es url de un archivo // Print user input in console. console.log('User Input Data : ' + data); //Saltarse el paso de filehound e ir directo al paso de markdown-link-extractor resolve( mdLinksStats.printDirectoryLinkText(mdLinksStats.callMarkdownLinkExtractor(data.replace('\n', ''))) ); } else {//si es un directorio // Print user input in console. console.log('User Input Data : ' + data); resolve( mdLinksStats.callFileHound(data.replace('\n', '')) ); } }) return promise; }, findUrlAndLinks: (data) => { // sin promesa if (data.substring(data.length-1, data.length-4) === '.md') {//si es url de un archivo // Print user input in console. console.log('User Input Data : ' + data); //Saltarse el paso de filehound e ir directo al paso de markdown-link-extractor mdLinksStats.printDirectoryLinkText(mdLinksStats.callMarkdownLinkExtractor(data.replace('\n', ''))); } else {//si es un directorio // Print user input in console. console.log('User Input Data : ' + data); mdLinksStats.callFileHound(data.replace('\n', '')); } }, callFileHound: (Directory) => {//no se puede testear porque no se puede retornar nada desde una promesa. más info aquí https://stackoverflow.com/questions/22232280/how-do-you-return-inside-a-promise const FileHound = require('filehound'); const files = FileHound.create() .paths(Directory) .ext('md') .find(); files.then(res => { res.forEach( (element) => { let directoryString = ''; directoryString += element; directoryString += ' '; mdLinksStats.printDirectoryLinkText(mdLinksStats.callMarkdownLinkExtractor(element, directoryString)); }); }); }, callMarkdownLinkExtractor: (element, directoryString) => { const fs = require('fs'); const markdownLinkExtractor = require('markdown-link-extractor'); let markdown = fs.readFileSync(element).toString(); let links = markdownLinkExtractor(markdown);//[] const mdTextLinkExtractor = require('./markdown-text-link-extractor'); let texts = mdTextLinkExtractor(markdown);//[] let directory = ''; if (directoryString === undefined) { //if directoryString === udefined, directoryString = element directory = element; directory += ' '; } else { directory = directoryString; directory += ' '; } let ArrayOfLinkTextObjects = []; let count = 0; links.forEach( (link) => { let directoryLinkTextObject = { directory: '', link: '', text: '' //status: ''//valid / invalid === ok / fail //no se puede guardar el status porque fetch() funciona con promesas y las promesas no retornan cosas, sólo promesas } let truncatedText = mdLinksStats.returnTruncatedText(texts[count]); directoryLinkTextObject.directory = directory; directoryLinkTextObject.link = link; directoryLinkTextObject.text = truncatedText; ArrayOfLinkTextObjects.push(directoryLinkTextObject); count += 1; }); return ArrayOfLinkTextObjects; }, returnTruncatedText: (text) => { const length = 50; let truncatedText = text.substring(0, length); return truncatedText; }, printDirectoryLinkText: (objectArray) => { //esto debería ser una promesa //aquí dentro deberías validar los link e imprimir el status y ok/fail //tal vez en vez de recibir arreglo de strings, debe recibir arreglo de objetos y aquí armar el string console.log(objectArray[0].directory); stats.stats(objectArray) .then( ) .catch( (err) => { // handle error for example console.error(err); }); } };