Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
e969bfa
Agrega carpeta con archivos para leer archivos md
KamilaOjeda Dec 13, 2022
91c08c9
Agrega librerias nativas fs, path y fetch. Agrega promesa readFilePro…
KamilaOjeda Dec 13, 2022
4938f9c
Agrega babel
KamilaOjeda Dec 13, 2022
121f7cc
Agrega scrips a package.json. Agrega promesa para validar archivo .md
KamilaOjeda Dec 13, 2022
c01c841
Modifica archivo file_1.md para pruebas
KamilaOjeda Dec 14, 2022
be90928
Agrega promesas: getAbsolutePromise, validatePathPromise. Concatena l…
KamilaOjeda Dec 14, 2022
fd8ea65
Soluciona problema con node. Instala cross-fetch. Quita el llamado al…
KamilaOjeda Dec 14, 2022
4bc2470
Agrega modulo getLinks. Crea archivo preambulo.md que contiene links
KamilaOjeda Dec 15, 2022
863c0f9
Agrega modulo getLinks. Crea archivo preambulo.md que contiene links
KamilaOjeda Dec 15, 2022
2247a0e
Agrega función para obtener el contenido de un directorio.
KamilaOjeda Dec 15, 2022
1731894
Agrega promesa searchMdFilesPromise.
KamilaOjeda Dec 16, 2022
6bdffa2
Agrega getMdFilesFromPath, función síncrona para obtener los archivos…
KamilaOjeda Dec 19, 2022
56d0e42
Agrega axios para http request
KamilaOjeda Dec 21, 2022
d5868d1
Agrega promesa fque revisa si los links funcionan o no - HTTP request…
KamilaOjeda Dec 21, 2022
0f6ec8b
Refactoriza el código. Agrega promesa para validar un link. Agrega pr…
KamilaOjeda Dec 21, 2022
ac391cb
Agrega isMdFile function, para validar si la ruta que ingresa solo es…
KamilaOjeda Dec 21, 2022
f7cc160
Agrega promesa mdLinks en archivo index.js
KamilaOjeda Dec 22, 2022
7018c26
Agrega función principal mdLinks con opción por default y --validate:…
KamilaOjeda Dec 22, 2022
18d8c05
Agrega validateOption y statsOption, funciones para validar el ingres…
KamilaOjeda Dec 22, 2022
55ac07f
Refactoriza código. Quita funciones isMdFile, isDirectory. Agrega Pro…
KamilaOjeda Dec 23, 2022
74ce1ea
Agrega promesa getLinksFromFileOrDirectoryPromise.
KamilaOjeda Dec 23, 2022
f981d88
Agrega funcion countUniqueLinks en md_links.js. Agrega estadísticas: …
KamilaOjeda Dec 23, 2022
eed0aed
Agrega process-mdlinks.js que contiene módulo process.argv, para reci…
KamilaOjeda Dec 23, 2022
3e9ccec
Agrega funciones getOptionsFromArguments y getPathFromArguments.
KamilaOjeda Dec 26, 2022
8d04560
Agrega process.argv. Agrega validar opciones que ingresan.
KamilaOjeda Dec 26, 2022
24345be
Agrega README
KamilaOjeda Dec 27, 2022
57480f6
Agrega cli.js, para contener el módulo ejecutable. Modifica index.js,…
KamilaOjeda Dec 27, 2022
cb48552
ADefine las funciones que se están utilizando y quita las que no.
KamilaOjeda Dec 30, 2022
be27d34
Actualiza promesa md_links.
KamilaOjeda Dec 30, 2022
ea04587
Exporta md_links y se llama a ejecutar en el archivo cli.js.
KamilaOjeda Dec 30, 2022
e05ca5b
Quita funciones getOptions y getPath.
KamilaOjeda Jan 3, 2023
4d10296
Actualiza versión de módulo para importar mdLinks.
KamilaOjeda Jan 3, 2023
1d3091b
Actualiza versión ejecutable de la aplicación.
KamilaOjeda Jan 3, 2023
6c7b1aa
Actualiza README.md con ejemplos reales.
KamilaOjeda Jan 3, 2023
e21eb40
Actualización README.
KamilaOjeda Jan 3, 2023
64786e5
Agrega mensaje para ingresar opción correcta.
KamilaOjeda Jan 3, 2023
46e5dc2
Quita module.exports.
KamilaOjeda Jan 3, 2023
de3d470
Agrega carpeta bin. Agrega últimos detalles al readme.
KamilaOjeda Jan 3, 2023
c5e312c
Actualiza versión!
KamilaOjeda Jan 3, 2023
4422602
Quita carpeta bin.
KamilaOjeda Jan 3, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .babelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"presets": [
["@babel/env", {
"targets": {
"node": "current"
}
}]
]
}
712 changes: 127 additions & 585 deletions README.md

Large diffs are not rendered by default.

46 changes: 46 additions & 0 deletions cli.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
const process = require("process")
const { mdLinks } = require("./index.js")
const { countUniqueLinks } = require("./md_links")

const [, , ...args] = process.argv
// console.log([, , ...args])
if (args.length === 0) {
console.error("Enter a path to be validated");
}
if (args.length === 1) {
mdLinks(args[0], { validate: false })
.then(response => console.log(response))
.catch(error => console.log(error));
} else if (args.length === 2 && (args[1] === "--validate")) {
mdLinks(args[0], { validate: true })
.then(response => console.log(response))
.catch(error => console.log(error));
} else if (args.length === 2 && (args[1] === "--stats")) {
mdLinks(args[0], { validate: false })
.then(arrayObjects => console.log(
"Total links: " + arrayObjects.length + "\n" +
"Unique links: " + countUniqueLinks(arrayObjects))
)
.catch(error => console.log(error));
} else if (args.length === 3 && (args[1] === "--stats" && args[2] === "--validate")) {
mdLinks(args[0], { validate: true })
.then(arrayObjects => console.log(
"Total links: " + arrayObjects.length + "\n" +
"Unique: " + countUniqueLinks(arrayObjects) + "\n" +
"Broken: " + arrayObjects.filter(link => link.message === "Fail").length)
)
.catch(error => console.log(error));
} else {
console.log("--Verify the parameters entered--" + "\n" +
"Ex: " + "\n" +
"--validate" + "\n" +
"--stats" + "\n" +
"--stats --validate");
}
// mdLinks(getPathFromArguments(arguments), getOptionsFromArguments(arguments))
// .then(response => console.log(response))
// .catch(error => console.log(error));

module.exports = { mdLinks }


Binary file added img-README/Diagrama_Flujo.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img-README/Git-Hub_Projects.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
45 changes: 42 additions & 3 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,42 @@
module.exports = () => {
// ...
};
const { getLinksFromFileOrDirectoryPromise,
validateArrayLinks,
getAbsolutePath } = require("./md_links.js");

const mdLinks = (entryPath, options) => {
return new Promise((resolve, reject) => {
if (options === undefined || options === null) {
console.log(
"---------------------------------------------------------------------------" + "\n" +
" THE SOLVED PATH: " + getAbsolutePath(entryPath) + "\n" +
"---------------------------------------------------------------------------" + "\n" + "\n" +
"--------------------contains the following information --------------------" + "\n" + "\n")
getLinksFromFileOrDirectoryPromise(entryPath)
.then(res => resolve(res))
.catch(error => reject(error))
} else if (options.validate === false) {
console.log(
"---------------------------------------------------------------------------" + "\n" +
" THE SOLVED PATH: " + getAbsolutePath(entryPath) + "\n" +
"---------------------------------------------------------------------------" + "\n" + "\n" +
"--------------------contains the following information --------------------" + "\n" + "\n")
getLinksFromFileOrDirectoryPromise(entryPath)
.then(res => resolve(res))
.catch(error => reject(error))
} else if (options.validate === true) {
console.log(
"---------------------------------------------------------------------------" + "\n" +
" THE SOLVED PATH: " + getAbsolutePath(entryPath) + "\n" +
"---------------------------------------------------------------------------" + "\n" + "\n" +
"--------------------contains the following information --------------------" + "\n" + "\n")
getLinksFromFileOrDirectoryPromise(entryPath)
.then(links => validateArrayLinks(links))
.then(arrayObjects => resolve(arrayObjects))
.catch(error => reject(error))
} else {
resolve("WARNING! Please, enter the following options: " + "\n"+
"{validate: true} OR" + "\n" +
"{validate: false}")
}
})
}
module.exports = {mdLinks}
30 changes: 30 additions & 0 deletions md_files/consideraciones.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
## 4. Consideraciones generales

* Este proyecto se debe "resolver" de manera individual.

* La **librería** y el **script ejecutable** (herramienta de línea de comando -
CLI) deben estar implementados en JavaScript para ser ejecutados con
Node.js. **Está permitido usar librerías externas**.

* Tu módulo **debe ser instalable** via `npm install <github-user>/md-links`. Este
módulo debe incluir tanto un _ejecutable_ que podamos invocar en la línea de
comando como una interfaz que podamos importar con `require` para usarlo
programáticamente.

* Los **tests unitarios** deben cubrir un mínimo del 70% de _statements_,
_functions_, _lines_ y _branches_. Te recomendamos explorar [Jest](https://jestjs.io/)
para tus pruebas unitarias.

* Para este proyecto **no está permitido** utilizar `async/await`.

* Para este proyecto te sugerimos **no utilizar** la versión síncrona
de la función para leer archivos, `readFileSync`, y en cambio intentar
resolver este desafío de manera asíncrona.

* Para este proyecto es **opcional** el uso de ES Modules `(import/export)`, en el
caso optes utilizarlo deberás de crear un script de `build` en el `package.json`
que los transforme en `requires` y `module.exports` con ayuda de **babel**.

* Para disminuir la complejidad de tu algoritmo recursivo, te recomendamos
utilizar la versión síncrona de la función para leer directorios, `readdirSync`.

12 changes: 12 additions & 0 deletions md_files/criterios.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
## 5. Criterios de aceptación mínimos del proyecto

Para comenzar este proyecto tendrás que hacer un **_fork_** y **_clonar_** este
repositorio.

Antes de comenzar a codear, es necesario crear un **plan de acción**. Esto debería
quedar detallado en el `README.md` de tu repo y en una serie de **_issues_**
y **_milestones_** para priorizar y organizar el trabajo, y para poder hacer
seguimiento de tu progreso.

Dentro de cada **_milestone_** se crearán y asignarán los **_issues_** que cada quien
considere necesarios.
Empty file added md_files/nodo_1/hoja_1/gris.txt
Empty file.
18 changes: 18 additions & 0 deletions md_files/nodo_1/hoja_1/preambulo.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
## 1. Preámbulo

[Markdown](https://es.wikipedia.org/wiki/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`).

Estos archivos `Markdown` normalmente contienen _links_ (vínculos/ligas) que
muchas veces están rotos o ya no son válidos y eso perjudica mucho el valor de
la información que se quiere compartir.

Dentro de una comunidad de código abierto, nos han propuesto crear una
herramienta usando [Node.js](https://nodejs.org/), que lea y analice archivos
en formato `Markdown`, para verificar los links que contengan y reportar
algunas estadísticas.

![md-links](https://user-images.githubusercontent.com/110297/42118443-b7a5f1f0-7bc8-11e8-96ad-9cc5593715a6.jpg)
20 changes: 20 additions & 0 deletions md_files/nodo_1/resumen.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
## 2. Resumen del proyecto

En este proyecto crearás una herramienta de línea de comando (CLI) así como tu
propia librería (o biblioteca - library) en JavaScript.

En esta oportunidad nos alejamos un poco del navegador para construir un
programa que se ejecute usando Node.js. Aprenderemos sobre procesos
(`process.env`, `process.argv`, ...), cómo interactuar con el sistema archivos,
cómo hacer consultas de red, etc.

[Node.js](https://nodejs.org/es/) es un entorno de ejecución para JavaScript
construido con el [motor de JavaScript V8 de Chrome](https://developers.google.com/v8/).
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, ...

Diseñar tu propia librería es una experiencia fundamental para cualquier
desarrollador porque que te obliga a pensar en la interfaz (API) de tus
_módulos_ y cómo será usado por otros developers. Debes tener especial
consideración en peculiaridades del lenguaje, convenciones y buenas prácticas.
12 changes: 12 additions & 0 deletions md_files/nodo_2/modulos.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
[ ] **Módulos de CommonJS**

<details><summary>Links</summary><p>

* [Modules: CommonJS modules - Node.js Docs](https://nodejs.org/docs/latest/api/modules.html)
</p></details>

- [ ] **Diferenciar entre expresiones (expressions) y sentencias (statements)**

- [ ] **Callbacks**

<details><summary>Links</summary><p>
11 changes: 11 additions & 0 deletions md_files/nodo_2/recursion.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
- [ ] **Recursión o recursividad**

<details><summary>Links</summary><p>

* [Píldora recursión - YouTube Laboratoria Developers](https://www.youtube.com/watch?v=lPPgY3HLlhQ)
* [Recursión o Recursividad - Laboratoria Developers en Medium](https://medium.com/laboratoria-developers/recursi%C3%B3n-o-recursividad-ec8f1a359727)
</p></details>

* [Debería ser 404](https://reqres.in/api/users/23)
* [Debería ser 404](https://reqres.in/api/users/23)
* [Debería ser 404](https://reqres.in/api/users/23)
9 changes: 9 additions & 0 deletions md_files/peticion.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
- [ ] **Consulta o petición (request) y respuesta (response).**

<details><summary>Links</summary><p>

* [Generalidades del protocolo HTTP - MDN](https://developer.mozilla.org/es/docs/Web/HTTP/Overview)
* [Mensajes HTTP - MDN](https://developer.mozilla.org/es/docs/Web/HTTP/Messages)
</p></details>

* [Debería ser fallido](https://reqres.in/api/uses/23)
Loading