Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

functional-light

Package Overview
Dependencies
Maintainers
1
Versions
8
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

functional-light - npm Package Compare versions

Comparing version 0.2.0 to 0.3.0

60

lib/index.js
/**
* Agreaga el elemento value al comienzo de la lista.
* Agrega el elemento value al comienzo de la lista.
* @param {*} value
* @param {Array} list
* @returns {Array}
* @example cons(1, [2, 3]); // => [1, 2, 3]
*/

@@ -15,2 +17,4 @@ function cons(value, list) {

* @param {Array} list
* @example first([1, 2, 3]) // => 1
* @returns {*}
*/

@@ -24,2 +28,4 @@ function first(list) {

* @param {Array} list
* @returns {Array}
* @example rest([1, 2, 3]); // => [2, 3]
*/

@@ -33,2 +39,6 @@ function rest(list) {

* @param {Array} list
* @returns {boolean}
* @example isEmpty([1, 2, 3]); // => false
* @example isEmpty([]); // => true
*/

@@ -43,4 +53,9 @@ function isEmpty(list) {

/**
* El objeto de entrada es una lista?
* @param {Array} list
* Retorna verdadero si el objeto de entrada es una lista
* @param {Array} list
* @returns {boolean}
* @example isList([]); // => true
* @example isList([1, 2]); // => true
* @example isList(1); // => false
* @example isList("Hola"); // => false
*/

@@ -54,2 +69,5 @@ function isList(list) {

* @param {Array} list
* @returns {Number}
* @example length([]); // => 0
* @example length([2, 4]); // => 2
*/

@@ -65,2 +83,4 @@ function length(list) {

* @param {Array | Object} list2
* @returns {Array}
* @example append([1, 2], [3, 4]); // => [1, 2, 3, 4]
*/

@@ -78,2 +98,34 @@ function append(list1, list2) {

module.exports = { cons, first, rest, isEmpty, isList, length, append };
/**
* Filtra la lista l usando la función f.
* @param {Array} l
* @param {function} f función booleana
* @returns {Array}
* @example filter([1, 2, 3, 4, 5], x => x % 2 === 1); // => [1, 3, 5]
*/
function filter(l, f) {
if (isEmpty(l)) {
return [];
} else if (f(first(l))) {
return cons(first(l), filter(rest(l), f));
} else {
return filter(rest(l), f);
}
}
/**
* Aplica la función f a cada elemento del arreglo a
* @param {Array} a
* @param {function} f
* @returns {Array}
* @example console.log(map([1,2,3], x => x*x)); // => [1, 4, 9]
*/
let map = function (a, f) {
if (isEmpty(a)) {
return [];
} else {
return cons(f(first(a)), map(rest(a), f));
}
};
module.exports = { cons, first, rest, isEmpty, isList, length, append, filter, map };

10

package.json
{
"name": "functional-light",
"version": "0.2.0",
"version": "0.3.0",
"description": "Librería para el curso de programación funcional con JavaScript",

@@ -36,3 +36,4 @@ "keywords": [

"compile": "babel src --out-dir lib --quiet --ignore __tests__",
"prepublish": "npm run compile"
"prepublish": "npm run compile",
"jsdoc": "jsdoc2md src/index.js > docs/functional-light.md"
},

@@ -42,2 +43,3 @@ "devDependencies": {

"babel-preset-env": "^1.7.0",
"chai": "4.2.0",
"eslint": "^5.15.3",

@@ -48,6 +50,6 @@ "eslint-config-cheminfo": "^1.20.1",

"jest": "^24.5.0",
"rimraf": "^2.6.3",
"chai": "4.2.0"
"jsdoc-to-markdown": "^5.0.0",
"rimraf": "^2.6.3"
},
"dependencies": {}
}
# Programación funcional con JavaScript
## Instalar paquete
## Instalación paquete

@@ -9,2 +9,6 @@ ```bash

## Documentación del API
[Ver todas las funciones](docs/functional-light.md)
## Ejemplo

@@ -15,3 +19,2 @@

console.log(cons('1',[])); // ['1']

@@ -32,1 +35,96 @@ console.log(cons('2', cons('1',[]))); // ['2', '1']

```
# Crear un nuevo proyecto usando esta librería
Crear un nuevo directorio para el proyecto. En este ejemplo usaremos **fl-extended**. Luego debemos inicializar el proyecto usando npm init y llenar los campos de manera adecuada según le pregunte la herramienta. Usar *jest* para las pruebas
``` bash
mkdir fl-extended
cd fl-extended
npm init
```
Luego instalamos la librería functional-light y jest para la pruebas. Con los comando siguientes no solo se instalan las librerías, sino que además se incluyen las librerías en el archivo package.json
``` bash
npm i functional-light
npm i jest --save-dev
npm i browserify --save-dev
```
Incluya los siguientes scripts en el archivo package.json
``` js
"scripts": {
"test": "jest",
"build": "browserify -r ./src/index.js:fl-extended -o ./dist/fl-extended.js"
}
```
El archivo package.json debería verse como esto:
``` js
{
"name": "fl-extended",
"version": "1.0.0",
"description": "Example project",
"main": "src/index.js",
"scripts": {
"test": "jest",
"build": "browserify -r ./src/index.js:fl-extended -o ./dist/fl-extended.js"
},
"author": "Andres M. Castillo",
"license": "MIT",
"dependencies": {
"functional-light": "^0.2.0"
},
"devDependencies": {
"browserify": "^16.5.0",
"jest": "^24.8.0",
}
}
```
Creamos la carpeta que contendrá el código fuente. Estos pasos se pueden hacer desde el IDE de desarrollo o desde el navegador de archivos. Aqui continuo en bash
``` bash
mkdir src
```
Dentro de esta carpeta pondremos todo nuestro código fuente. Para este ejemplo supongamos que queremos extender nuestra librería functional-light para agregar la función map, que recibe un arreglo, un función f y retorna una nueva lista con los elementos de la lista original mapeados usando la función f. El siguiente código debe ir en *src/index.js*
``` js
const { cons, first, rest, isEmpty, isList, append, length } = require('functional-light');
/**
* Apply a function f to each element of the array a
* @param {Array} a
* @param {function} f
* @example console.log(map([1,2,3], x => x*x)); // => [1, 4, 9]
*/
let map = function(a, f) {
if (isEmpty(a)) {
return [];
} else {
return cons(f(first(a)), map(rest(a), f));
}
}
// We export all the previous functions + our current implementation of map
module.exports = { cons, first, rest, isEmpty, isList, append, length, map }
```
## Compilar el paquete para el navegador
Ahora para obtener una librería que pueda ser usada en nuestro framework-canvas, debemos compilar el proyecto para obtener un archivo javascript para el navegador. Para esto, debemos compilar usando browserify
``` bash
npm run build
```
Ahora tendremos nuestro archivo compilado en la carpeta **dist**. El archivo se llama **fl-extended.js** según especificamos en el package.json
Ahora pueden copiar este archivo dentro de la carpeta web-lib de su proyecto HTML y deben importarlo usando una etiqueta de script. Algo como esto:
``` html
<script src="web-lib/fl-extended.js"></script>
<script>
// Importamos las librerias
let { append, cons, first, isEmpty, isList, length, rest, map } = require('fl-extended');
```
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc