3.0.2 • Published 2 years ago

@alu0101127163/constant-folding v3.0.2

Weekly downloads
-
License
Unlicense
Repository
github
Last release
2 years ago

npm version CI for constant-folding

constant-folding

El objetivo que cumple este módulo es realizar la transformación de plegado de constantes sobre un fichero de entrada input.js dejando la salida en un fichero de salida output.js.

El plegado constante es el proceso de reconocer y evaluar expresiones constantes en tiempo de compilación en lugar de calcularlas en tiempo de ejecución. Los términos en expresiones constantes suelen ser literales simples, como el literal entero 2, pero también pueden ser variables cuyos valores se conocen en tiempo de compilación.

Installation

Para poder instalarlo hay que tener en cuenta de que se trata un paquete publicado en npmjs.

Previamente ha de tener instalado la herramienta npm; para poder aplicar este módulo dentro del proyecto ha de escribir en su package.json la dependencia "@alu0101127163/constant-folding": "*", y la instalamos con npm i. Así tendremos tanto el ejecutable como el objeto si lo quiere usar dentro de s código.

Usage as executable:

Para poder porveer un ejecutable debemos de añadir al package.json la siguiente línea:

  "bin": {
    "cf": "bin/constant-folding-cli.js"
  }

Con esto estamos exportando un ejecutable llamado cf el cuál ejecutará el programa constant-folding-cli-js contenido en la carpeta /bin. Para poder usar este ejecutable debemos de instalar el módulo @alu0101127163/constant-folding globalmente npm install -g @alu0101127163/constant-folding, y así ya podremos poder usar libremente el módulo desde línea de comandos.

Usage from code:

Si queremos usarlo en el código de nuestro proyecto simplemente debemos de añadirlo en la cabecera del fichero y crear un objeto que contenga dicho módulo.

const constantFolding = require('constant-folding');
//call the function

The documentation of the function.

Examples

Examples as executable

Por ejemplo, para comprobar que la herramienta commander funciona correctamente, ejecutamos el ejecutable con la opción --help.

~/src/PL/constant-folding-module-oscar-hernandez-diaz-alu0101127163 (master) $ cf --help
Usage: cf [options] <filename>

Constant Folding javascript code

Arguments:
  filename                 file with the original code

Options:
  -V, --version            output the version number
  -o, --output <filename>  output file (default: "output.js")
  -h, --help               display help for command

Ahora si queremos hacer uso de esta debemos pasarle un <filename> que contendrá el código que queremos que le haga un plegado de constantes y le pasamos la opción -o para que nos vuelque la salida en un fichero aparte, por default lo escribe en output.js.

~/src/PL/constant-folding-module-oscar-hernandez-diaz-alu0101127163 (master) $ cf input.js 
File read succesfully
Output written succesfully in output.js

o

~/src/PL/constant-folding-module-oscar-hernandez-diaz-alu0101127163 (master) $ cf input.js -o output.js 
File read succesfully
Output written succesfully in output.js

Examples from code

Para poder usarlo en el código, como nombre antes hay que añadir primero el módulo:

const constantFolding = require("@alu0101127163/constant-folding");

Ahora podemos usar este objeto pasandole por parámetro un código js y nos devolvera con un plegado de constantes; con este códido ya plegado podemos trabajar con el todo lo que queramos

Author

Óscar Hernández Díaz.

alu0101127163@ull.edu.es

Tests

Para los test usamos la herramienta chai, para eso creamos un script test.js que contenga lo siguiente.

const constantFolding = require('../src/constant-folding');
const should = require('chai').should();  

const Checks = [
  //{ text: "[a, b, c].concat([d, e], f, g, [h]);", result: "[ a, b, c, d, e, f, g, h];"},
  { text: "[a, b, c].join();", result: "'a,b,c';" },
  { text: "[a, b, c].join('@');", result: "'a@b@c';" },
  { text: "[1, 2, 3].length;", result: "3;" },
  { text: "[1, 2, 3][2-1];", result: "2;" },
  { text: "[1, 2, 3].shift();", result: "1;" },
  { text: "[a, b, c].pop();", result: "'c';"},
  { text: "'abc'[0];", result : "'a';"},
  { text: "'abc'.charAt();", result: "'a';"},
  { text: "'abc'.charAt(1);", result: "'b';"},
  { text: "'abc'.length;", result: "3;"},
  { text: "'a,b,c'.split(',');", result: "a,b,c;"},
  { text: "(100 + 23).toString();", result: "'123';" },
];

describe('constantFolding tests', () => {
  for (let c of Checks) {
    it(`Test ${c.text} = ${c.result}`, () => {
      constantFolding(c.text).should.equal(c.result);
    });
  }
});

Lo que nos hará para cada código que tenemos en el objeto Checks se lo pasará a nuestro programa y comprobará si la salida que nos ha dado es la misma que esperabamos y nos quedaría tal que así:

~/src/PL/constant-folding-module-oscar-hernandez-diaz-alu0101127163 (master) $ npm run test

> @alu0101127163/constant-folding@3.0.1 test
> mocha



  constantFolding tests
    ✔ Test [a, b, c].join(); = 'a,b,c';
    ✔ Test [a, b, c].join('@'); = 'a@b@c';
    ✔ Test [1, 2, 3].length; = 3;
    ✔ Test [1, 2, 3][2-1]; = 2;
    ✔ Test [1, 2, 3].shift(); = 1;
    ✔ Test [a, b, c].pop(); = 'c';
    ✔ Test 'abc'[0]; = 'a';
    ✔ Test 'abc'.charAt(); = 'a';
    ✔ Test 'abc'.charAt(1); = 'b';
    ✔ Test 'abc'.length; = 3;
    ✔ Test 'a,b,c'.split(','); = a,b,c;
    ✔ Test (100 + 23).toString(); = '123';


  12 passing (32ms)
2.2.0

2 years ago

3.0.2

2 years ago

3.0.1

2 years ago

3.0.0

2 years ago

2.1.0

2 years ago

2.0.1

2 years ago

2.0.0

2 years ago

1.0.0

2 years ago