# ast-types: spread-operator
# Warning
Deadline
This GitHub Classroom assignment is configured with deadline 16/03/2023 8:00
# 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
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 directoriodocs/
).En v1.x recuerde poner
base
en su Vuepressconfig.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
5Añada un fichero con nombre
.nojekyll
(opens new window) en su directoriodocs/
.
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"]
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
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
- Creating and Publishing a node.js Module in GitHub and NPM Registries
- Módulos
- Node.js docs. Modules: ECMAScript modules (opens new window)
- Node.js Packages
- Instalación de Módulos desde GitHub
- Introducción a los Módulos en JS (opens new window) por Manz
- @ull-esit-dsi-1617/scapegoat (opens new window) en npm
- How to install an npm package from GitHub directly? (opens new window) in StackOverflow
- Working with scoped packages (opens new window)
- npm-scope manual: Scoped packages (opens new window)
- Package.json documentation en npm site (opens new window)
# Testing
# Documentation
- Vuepress (opens new window)
- .nojekyll (opens new window) Bypassing Jekyll on GitHub Pages
- Vitepress (opens new window)
- Docusaurus (opens new window)
- Nextra (opens new window)
- Astro (opens new window).
- JSDoc and others in this notes