# ast-types: spread-operator

# Warning

Deadline

This GitHub Classroom assignment is configured with deadline 16/03/2023 8:00

/images/deadline.png

# Objetivos

Construya un paquete npm y publíquelo en GitHub Registry con ámbito @ULL-ESIT-PL-2122 y nombre el nombre del repo asignado.

El módulo además de exportar la función spread provee un ejecutable spread que se llama así:

spread input.js output.js
1

el cual realiza una traducción del operador es6 ... a versiones anteriores de JS sobre input.js dejando la salida en output.js. Tiene una solución en la sección Translating the ES6 spread operator ... to ES5 de estos apuntes.

Una parte de los conceptos y habilidades a adquirir con esta práctica se explican en la sección Creating and publishing a node.js module en GitHub y en NPM. Léala con detenimiento antes de hacer esta práctica.

# Pruebas

Deberá añadir pruebas usando Mocha y Chai o Jest. Repase las secciones Testing with Mocha and Chai y Jest. Añada un estudio de covering. See the notes in covering. Añada CI con GitHub Actions.

# Informe y Documentación

Documente el módulo incorporando un README.md: Como se instala, como se usa el ejecutable, como se carga la librería, etc.

No haga el informe de la práctica en el README.md sino que utilice el generador estático Vuepress (opens new window) para hacer el informe. El template de la práctica usa Vuepress 1.x que ha quedado algo obsoleto y produce errores si se usa con versiones de Node.js posteriores a la 16. Para evitar estos errores puede cambiar a la versión 2.x de Vuepress (recomendado) o bajar la versión de Node.js a la 16.

Para el despliegue en GitHub Pages use el directorio docs. Si lo desea puede también usar Netlify o Vercel para el despliegue.

Para el despliegue en v1.x (opens new window) y v2.x (opens new window) del informe puede

  • mover los ficheros generados por VuePress del directorio src/.vuepress/dist/ al directorio docs/).

  • En v1.x recuerde poner base en su Vuepress config.js con el nombre de su repo. Algo así:

    module.exports = {
      title: 'Lab ast-types Report',
      base: '/ast-types-casiano-rodriguez-leon-alumno5/',
      ...
    }
    
    1
    2
    3
    4
    5
  • Añada un fichero con nombre .nojekyll (opens new window) en su directorio docs/.

Puede sustituir el uso de Vuepress por algún otro generador como Vitepress (opens new window), Docusaurus (opens new window), Nextra (opens new window) o Astro (opens new window).

La documentación de la API de la función exportada usando JsDoc la puede dejar accesible en el despliegue (directorio docs/api) o puede tratar de integrarla con Vuepress JsDoc Plugin (opens new window).

Añada el informe de Covering también (directorio docs/covering o similar).

# SpreadElements inside an ArrayExpression

With ES6 spread syntax it is easy to create a new array using an existing array:

let parts = ['shoulders', 'knees'];
let lyrics = ['head', ...parts, 'and', 'toes'];
//  ["head", "shoulders", "knees", "and", "toes"]
1
2
3

The same can be done in former versions of JS using Array.concat:

> parts = ['shoulders', 'knees'];
> lyrics = [].concat('head', parts, 'and', 'toes')
[ 'head', 'shoulders', 'knees', 'and', 'toes' ] // makes a shallow copy of parts
1
2
3

But can be achieved with other strategies.

Extend your translator to cover this use of the spread operator inside an ArrayExpression.

Publish it and update the version following the Semantic Versioning rules.

# References

# ast-types

# ASTs Anatomy

# Packages

# Testing

# Documentation

# Semantic versioning and npm

Grading Rubric#

Comments#

Last Updated: 3 months ago