Constant Folding
Objetivos
Construya un paquete npm y publíquelo en el GitHub Registry que además de exportar la función constantFolding
provea un ejecutable cf
que se llama así:
cf input.js output.js
el cual realiza la transformación de plegado de constantes sobre input.js
dejando la salida en output.js
.
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.
Ámbitos
Para saber sobre ámbitos, vea la sección Scopes and Registries.
Pruebas
Deberá añadir pruebas usando Mocha y Chai o Jest. Repase las secciones Testing with Mocha and Chai y Jest.
Documentación
Documente el módulo incorporando un README.md
y la documentación de la función exportada usando JsDoc. Repase la sección Documenting the JavaScript Sources
Constant Folding of MemberExpression literals
Añada ahora plegado de constantes para métodos (con argumentos plegables) y propiedades de los arrays. Esto es, expresiones como:
["a", "b", "c"].concat(["d", "e"], "f", "g", ["h"]); ["a", "b", "c"].join(); ["a", "b", "c"].join('@'); [1, 2, 3].length; [1, 2, 3][2-1]; [1, 2, 3].shift(); [1, 2, 3].slice(0, 1+1); [a, b, c].pop(); // substitute the MemberExpression node by the last AST in the "elements" array of the object Array Expression [a, b, c].reverse(); // reverse the ASTs
Serán evaluadas en tiempo de compilación produciendo:
["a", "b", "c", "d", "e", "f", "g", "h"]; "a,b,c"; "a@b@c"; 3; 2; 2; [1, 2]; c; [c, b, a];
Publique ahora esta mejora en la funcionalidad del módulo.
¿Como debe en cambiar el nº de versión?
Repase la sección Semantic Versioning
Other possible optional extensions are:
Constant folding for methods and properties of Literal Strings:
"abc"[0]; "abc".charAt(); "abc".charAt(1); "abc".length; "a,b,c".split(",");
Constant folding for methods and properties of Objects, Numbers, etc.
{a:4, b:5}.b (100 + 23).toString();
References
Constant Folding
- Transformación de plegado de constantes en estos apuntes
- Babel plugin minify-constant-folding
- esmangle (esmangle) is mangler / minifier for Parser API AST that includes constant folding
Packages
- Creating and Publishing a node.js Module in GitHub and NPM Registries
- Módulos
- Node.js Packages
- Instalación de Módulos desde GitHub
- Introducción a los Módulos en JS por Manz
- @ull-esit-dsi-1617/scapegoat en npm
- How to install an npm package from GitHub directly? in StackOverflow
- Working with scoped packages
- npm-scope manual: Scoped packages
- Package.json documentation en npm site