ro-md-links
v0.1.1
Published
Librería desarrollada de línea de comando (CLI) con Node. js, que lee y analiza archivos en formato Markdown dada una ruta, para verificar los links que contengan ,y así reportar algunas estadísticas.
Downloads
2
Readme
ÍNDICE
- 1. Ro md Links 📁
- 2. Realización del Proyecto
- 3. Resultados de los tests
- 4. Tecnologías empleadas
- 5. Fuentes
- 6. Autores
1. Ro md Links
👩🏽💻 RO-MD-LINKS : Librería desarrollada de línea de comando (CLI) con Node. js, que lee y analiza archivos 📁 en formato Markdown 📑 dada una ruta, para verificar los links que contengan ,y así reportar algunas estadísticas.📊
2. Realización del Proyecto
Este proyecto consta de DOS partes
2.1 Diagramas de Flujo ✍🏼
A) JavaScript API
B) CLI (Command Line Interface - Interfaz de Línea de Comando)
2.2 Descripción del proceso ✍🏼
A) JavaScript API
El módulo debe poder importarse en otros scripts de Node.js y debe ofrecer la siguiente interfaz:
📌 mdLinks(path, options)
Argumentos
path
: Ruta absoluta o relativa al archivo o directorio. Si la ruta pasada es relativa, debe resolverse como relativa al directorio desde donde se invoca node - current working directory).options
: Un objeto con únicamente la siguiente propiedad:validate
: Booleano que determina si se desea validar los links encontrados.
Valor de retorno
La función debe retornar una promesa (Promise
) que resuelva a un arreglo
(Array
) de objetos (Object
), donde cada objeto representa un link y contiene
las siguientes propiedades
Con validate:false
:
href
: URL encontrada.text
: Texto que aparecía dentro del link (<a>
).file
: Ruta del archivo donde se encontró el link.
Con validate:true
:
href
: URL encontrada.text
: Texto que aparecía dentro del link (<a>
).file
: Ruta del archivo donde se encontró el link.status
: Código de respuesta HTTP.ok
: Mensajefail
en caso de fallo uok
en caso de éxito.
Función md links empleada:
const styleBroken = chalk.bold.red;
export const mdLinksFunction = (track, options = { validate: true }) => new Promise((resolve) => {
// convert path in absolute
const path = convertToAbsolute(track);
// if path does not exits
if (isExistsPath(path) === false) {
// message if does not exist
styleBroken('Path does not exist')
// if options validate is true
} else if (options.validate) {
const validate = getvalidLinksInArray(getLinksInArray(path));
resolve(validate);
// if options validate is false
} else {
resolve(getLinksInArray(path));
}
});
B) CLI (Command Line Interface - Interfaz de Línea de Comando)
El ejecutable de nuestra aplicación debe poder ejecutarse de la siguiente manera a través de la terminal:
md <path-to-file> [options]
El comportamiento por defecto no debe validar si las URLs responden ok o no, solo debe identificar el archivo markdown (a partir de la ruta que recibe como argumento), analizar el archivo Markdown e imprimir los links que vaya encontrando, junto con la ruta del archivo donde aparece y el texto que hay dentro del link (truncado a 50 caracteres).
Options
📌 --help
📌 --validate
Si pasamos la opción --validate
, el módulo debe hacer una petición HTTP para
averiguar si el link funciona o no. Si el link resulta en una redirección a una
URL que responde ok, entonces consideraremos el link como ok.
Vemos que el output en este caso incluye la palabra ok
o fail
después de
la URL, así como el status de la respuesta recibida a la petición HTTP a dicha
URL.
📌 --stats
Si pasamos la opción --stats
el output (salida) será un texto con estadísticas
básicas sobre los links.
📌 --stats --validate
o --validate --stats
También podemos combinar --stats
y --validate
para obtener estadísticas que
necesiten de los resultados de la validación.
📌 --ro
📌 Colocando solo el path
📌 Colocando contenido inválido
3. Resultados de los tests
4. Tecnologías empleadas 👩🏾💻
Para la Planificación ✍
- Github Projects: En este proyecto se utilizó la herramienta de planificación y organización de GitHub llamada Github Projects.Mediante issues y milestones podrás organizar y planificar tareas y objetivos concretos.
Tomando en consideración los entregables del proyecto, se definió historias de usuario en base a
diagramas de flujos
, para crear la planificación.
Para la estructura y diseño: ✍
Chalk: Es una librería que ayuda a darle formato de estilo en el terminal.
Generadores de Texto: Usada para definir el logo en la terminal para mi librería
Para el Testing: ✍
Jest: Framework para realizar los testing unitarios.
Eslint: Herramienta de linting para analizar el código en busca de errores.
Para la funcionalidad: ✍
Javascript: Para dar la funcionalidad a la plataforma.
Node.js: es un entorno de ejecución para JavaScript construido con el motor de JavaScript V8 de Chrome. Esto nos va a permitir ejecutar JavaScript en el entorno del sistema operativo, ya sea tu máquina o un servidor, lo cual nos abre las puertas para poder interactuar con el sistema en sí, archivos, redes, ...
Node-fetch: En lugar de implementar XMLHttpRequesten Node.js para ejecutar Fetch polyfill específico del navegador , ¿por qué no pasar directamente de nativo httpa fetchAPI? Por lo tanto, node-fetchcódigo mínimo para una window.fetchAPI compatible en tiempo de ejecución de Node.js. Vea el isomorphic-unfetch de Jason Miller o el cross-fetch de Leonardo Quixada para el uso isomorfo (exportaciones node-fetchpara el lado del servidor, whatwg-fetchpara el lado del cliente).
Markdown es un lenguaje de marcado ligero muy popular entre developers. Es usado en muchísimas plataformas que manejan texto plano (GitHub, foros, blogs, ...), y es muy común encontrar varios archivos en ese formato en cualquier tipo de repositorio (empezando por el tradicional
README.md
).
5. Fuentes 📚
- Repositorio de Laboratoria: Se encuentran todas las condiciones y herramientas a trabajar para el proyecto.
6. Autores 📍
- Rosamaria Rodriguez
- Equipo de Laboratoria LIM016