npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@alu0101397627/espree-logging

v1.1.1

Published

Adds logs to javascript code

Downloads

2

Readme

Practica Espree-Logging

Documentacion código generada con JSdoc

Para generar esta documentación, se ha utilizado la libreria jsdoc-to-markdown. Para generarla, es tan simple como hacer:

$ jsdoc2md src/logging-espree.js > README.md

Functions

transpile(inputFile, outputFile) ⇒ void

  • Transforms the code of a file, adding a console.log when we enter a function, writing it into a file if the outputFile parameter is specified, otherwise writing in the console.

Kind: global function
Returns: void - - Nothing

| Param | Type | Description | | --- | --- | --- | | inputFile | String | The path of the file to be transformed | | outputFile | String | The path of the file where the transformed code will be saved |

addLogging(code) ⇒ String

  • Transforms the code of a file, adding a console.log when we enter a function of types FunctionDeclaration, FunctionExpression or ArrowFunctionExpression.

Kind: global function
Returns: String - - The transformed code

| Param | Type | Description | | --- | --- | --- | | code | String | The code to be transformed |

addBeforeCode(node) ⇒ void

  • Adds a console.log if we enter into a function, arrow function or anonymous function, specifying the name of the function, the parameters and the line number.

Kind: global function
Returns: void - - Nothing

| Param | Type | Description | | --- | --- | --- | | node | Node | The node were we are currently |

Instalación

Para instalarlo es tan sencillo como escribir: installation

Ejemplo de uso

Una vez instalado, un ejemplo de uso es el siguiente:

example_use

Donde obtenemos la función addLogging de la carpeta @alu0101397627/espree-logging, ubicada en la carpeta de los modules de node. Al estar declarado en el packaje.json del modulo un atributo main que indica donde esta el archivo a exportar, no hace falta escribir la ruta completa.

El output de este mini programa, para comprobar que funciona, es el siguiente:

output_example

Funcionando como es debido.

Ejecutable

El ejecutable funciona correctamente y se puede ejecutar desde el propio modulo como es debido, al haber declarado el fichero en el package.json, en el atributo bin

Aqui podemos ver como podemos ejecutarlo, funcionando todos los argumentos:

exec_example

Podra tener 1 argumento y 1 opciones (además del -h y -V):

  • filename: El fichero con el codigo a evaluar
  • -o --output : Fichero donde se quiera guardar el codigo generado (opcional)

Código

transpile

Este código, se encarga de leer el fichero de entrada, añadirle el logging con la función descrita y explicada más abajo y escribirlo en el fichero de salida, si se ha especificado. En caso de no especificarse, se escribe por consola.

Como funciona

El archivo principal que se encarga de añadir el logging a las funciones, en que linea se encuentran y cuando se entra, es el /src/logging-espree.js, más en concreto estas 2 parte:

add_logging

Esta primera función, se encarga de parsear el código, recorrerlo y añadir el logging a las funciones que se encuentren. Para ello, se utiliza la libreria espree para parsear el código, y estraverse para recorrer el árbol generado por el parseo. En el momento que al entrar a un nodo, encuentre una función de los siguientes tipos:

  • FunctionDeclaration
  • FunctionExpression
  • ArrowFunctionExpression

Llama a la función addBeforeCode que se encarga de añadir el logging a la función.

before_code

Esta función, se encarga de añadir el logging a la función, para ello, se encarga de generar el código que se quiere añadir, en este caso, un console.log con el nombre de la función, los parametros que recibe y en que linea se encuentra.

Gracias al atributo loc de la función, podemos obtener la linea en la que se encuentra, y gracias a id y params podemos obtener el nombre de la función y los parametros que recibe.

Tests

Para los tests, se ha utilizado la libreria jest. Para ejecutarlo, es tan simple como hacer npm test y en el caso de que se quiera hacer cubrimiento, es tan simple como hacer npm run cov.

El código de los tests es el siguiente:

test

Este código, se encarga de recorrer el array de tests, y para cada uno de ellos, se encarga de hacer la transpilación, comprobar que el código generado es el correcto y que la evaluación del código generado es la correcta.

Tanto los tests, como las soluciones de estos, están guardados en un fichero llamado test-description.mjs.

test_description

Donde cada uno de los tests, tiene los siguientes atributos:

  • input: El fichero de entrada
  • output: El fichero de salida
  • correctLogged: El fichero con el código correcto
  • correctOut: El fichero con el output correcto

Scripts

En el package.json, se han declarado los siguientes scripts:

scripts

  • exec: Ejecuta el ejecutable
  • exec-test: Ejecuta el ejecutable con el fichero de test1
  • test: Ejecuta los tests
  • cov: Ejecuta los tests con el cubrimiento
  • clean: Limpia los ficheros generados por los tests

Github Actions

Por último, implementamos la integración continua (CI) con Github Actions, donde creamos dentro del directorio /.github/worfklows un fichero nodejs.yml donde configuraremos las acciones que queramos hacer, quedando el fichero algo asi:

Donde:

  1. Especificamos el nombre de la action "CI"

  2. Configuramos que cada vez que haya un push en la rama main, se ejecute la action

  3. Creamos las tareas de la action:

    • Especificamos el sistema operativo a usar para las pruebas, en este caso ubuntu
    • Usamos actions/checkout para que el runner se descarge el repositorio
    • Usamos actions/setup-node para que el runner utilice node con la version que queremos
    • Ejecutamos npm ci (igual al npm install pero se utiliza en entornos de integracion continua) y npm test para ejecutar los tests.

Y si todo sale bien, nos saldrá un tick verde como el siguiente:

NPM

El modulo se encuentra publicado en npm, y se puede encontrar en el siguiente enlace: https://www.npmjs.com/package/@alu0101397627/espree-logging

Para publicarlo, se ha tenido primero crear un usuario en npm y conectarnos con el comando npm login. Si todo ha salido correctamente, si hacemos npm whoami nos saldrá el nombre de usuario que hemos creado.

$ npm whoami
alu0101397627

Una vez hecho esto, para publicar el modulo, simplemente tenemos que hacer npm publish --access=public y ya estará publicado, pero antes, deberemos asignarle el ambito, en nuestro caso alu0101397627. Para ello, en el package.json, en el nombre del paquete lo escribimos de la siguiente manera:

"name": "@alu0101397627/espree-logging"

Y ya estaría publicado y accesible para todo el mundo, al ser un modulo publico.

Cubrimiento

Para el cubrimiento, se ha utilizado la libreria jest con el argumento --coverage. Para ejecutarlo, es tan simple como hacer npm run cov.

El enlace a la página de cubrimiento es el siguiente:

https://ull-esit-pl-2223.github.io/espree-logging-alexander-gonzalez-covic-alu0101397627/