# 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
2
3
4
5
6
7
8
9
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];
2
3
4
5
6
7
8
9
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(",");
1
2
3
4
5Constant folding for methods and properties of Objects, Numbers, etc.
{a:4, b:5}.b (100 + 23).toString();
1
2
# References
# Constant Folding
- Transformación de plegado de constantes en estos apuntes
- Babel plugin minify-constant-folding (opens new window)
- esmangle (esmangle (opens new window)) is mangler / minifier for Parser API (opens new window) AST that includes constant folding (opens new window)
# 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 (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)