# ast-types
# 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.
Use GitHub Pages en el directorio docs
.
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.
Para el despliegue (opens new window) del informe puede
mover los ficheros generados por VuePress del directorio
src/.vuepress/dist/
al directoriodocs/
).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/
.
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).
# Challenge: 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
- JSDoc and others in this notes
# Semantic versioning and npm
Grading Rubric#
#Labs
- Task GitHub-AluXXXX Form
- Lab GitHub Campus Expert
- Lab GitHub Project Board
- Lab GitPod and Visual Studio Code
- Lab IAAS
- Lab Espree Logging
- Lab Hello Compilers
- Lab Constant Folding
- Lab ast-types
- Lab egg-parser
- Lab Lexer Generator
- Lab The Egg Interpreter
- Lab Adding OOP to the Egg Parser
- Lab Extending the Egg Interpreter
- Lab TFA: Final Project PL
- Task Training Exam for PL