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
JavaScript
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);
});
}
};