# best-globals algunas funciones comunes que queremos que sean globales [![npm-version](https://img.shields.io/npm/v/best-globals.svg)](https://npmjs.org/package/best-globals) [![downloads](https://img.shields.io/npm/dm/best-globals.svg)](https://npmjs.org/package/best-globals) [![build](https://github.com/codenautas/best-globals/actions/workflows/build-and-test.yml/badge.svg)](https://github.com/codenautas/best-globals/actions/workflows/build-and-test.yml) [![coverage](https://img.shields.io/coveralls/codenautas/best-globals/master.svg)](https://coveralls.io/r/codenautas/best-globals) [![sonar](https://sonarcloud.io/api/project_badges/measure?project=codenautas_best-globals&metric=alert_status)](https://sonarcloud.io/summary/overall?id=codenautas_best-globals) [![qa-control](https://github.com/codenautas/best-globals/actions/workflows/qa-control.yml/badge.svg)](https://github.com/codenautas/best-globals/actions/workflows/qa-control.yml) idioma: ![castellano](https://raw.githubusercontent.com/codenautas/multilang/master/img/lang-es.png) también disponible en: [![inglés](https://raw.githubusercontent.com/codenautas/multilang/master/img/lang-en.png)](README.md) ## Instalación ```sh $ npm install best-globals ``` ## Objetivo principal Tener a mano algunas funciones que estén como globales ## API ### coalesce(a [...,b] [,coalesce.throwError(message)]) Retorna el primer argumento que no es nulo o indefinido En caso de recibir como parámetro `coalesce.throwError(message)` y que los parámetros anteriores no están definidos o son distintos de null lanza una excepción con ese mensaje. En caso de recibir como parámetro `coalesce.throwErrorIfUndefined(message)` y que los parámetros anteriores no están definidos lanza una excepción con ese mensaje. Es similar a `??` salvo que `coalesce` entre `null` y `undefined` `coalesce` siempre devuelve `null` y `??` devuelve el último. Además `coalesce` interpeta sus funciones auxiliares `throwError` y `throwErrorIfUndefined`. ```js var coalesce = require('best-globals').coalesce; console.log(coalesce(1,2)); // = 1 console.log(coalesce(null,3)); // = 3 console.log(coalesce(null,undefined,false,4)); // = false console.log(coalesce(null,undefined)); // = null [1] console.log(coalesce(undefined,null)); // = null console.log(coalesce(undefined,undefined)); // = undefined console.log(coalesce(undefined,coalesce.throwErrorIfUndefined('name'))); // = throw an Error [1] ``` Las sentencias marcadas con `[1]` reaccionan distinto a su par `??` ### changing(originalConfig, changes, options) Retorna un nuevo objeto con los datos que tiene orginalConfig cambiados por los que diga changes. Changes puede ser: * un valor cualquiera, * un objeto al que se le aplicará el cambio recursivo (si el original también es un objeto) * la llamada a `changes.trueByObject(changes)` que solo hace el cambio si el valor original no es falso ```js var changing = require('best-globals').changing; var newConfig = changing( { database:'default_db', port:3306, user:'default_user', throwExceptions:true }, { database:'develop_db', user:'devel_user', password:'d3v31_u53r', throwExceptions:undefined }, changing.options({deletingValue:undefined}) ); console.log(newConfig); /* { database:'develop_db', port:3306, user:'devel_user', password:'d3v31_u53r', }, */ ``` opciones |predeterminado |uso ----------------|---------------|---------------------------- `deletingValue` | *apagado* |valor que se usa como señal de que la propiedad debe ser eliminada `mostlyPlain` | `false` |permite cambiar un objeto de una clase que no es "plain" ### changing(new Error(msg), changes) Si el primer parámetro es de clase Error retorna el mismo objeto con los cambios en él. ```js var changing = require('best-globals').changing; try{ //something throw changing(new Error('error in example', {Gravity:'Falls'})); }catch(err){ console.log(err.message); // error in example consoel.log(err.Gravity); // Falls } ``` ### escapeRegExp(text) Produce el texto que debe ser enviado a `RegExp` para que detecte exacto ese texto (aún cuando en el texto haya caracteres especiales de una regexp). ```js var escapeRegExp = require('best-globals').escapeRegExp; console.log(RegExp(escapeRegExp('a|b')).test('a|b')); // true console.log(RegExp(escapeRegExp('a|b')).test('a')); // false console.log(RegExp(/a|b/).test('a')); // true ``` ### forOrder(text) Produce un texto que puede ser comparado para un orden "mas humano" de modo de que sea cierto: ```js var forOrder = require('best-globals').forOrder; console.log(forOrder('code X9') ### compareForOrder(criteria) Crea una función para ser utilizada con la función sort de arreglos ```js var compareForOrder = require('best-globals').compareForOrder; var data=[ {lastName:'Smith', firstName:'Bob' }, {lastName:'Kerry', firstName:'Kelly'}, ]; data.sort(compareForOrder([ {column:'lastName' }, {column:'firstName', order:-1}, // descending ])); console.log(data); ``` ### sleep(milliseconds) Suspende una cadena de promesas durante un tiempo ```js var sleep = require('best-globals').sleep; sleep(2000).then(function(){ console.log('two seconds waited'); return sleep(1000); }).then(function(){ console.log('another second waited'); return 42; }).then(sleep(3000)).then(function(result){ console.log('wait three seconds and pass the result to the next "then"'); }); ``` ### serie({[from:number,] to:number [,step:number]}) ### serie({[from:number,] length:number [,step:number]}) Devuelve un arreglo con una serie de números sumando de a *step* (o 1) empezando en *from* (o en 0) y terminando en *to* o tienendo una longitud de *length*. ```js var serie = require('best-globals').serie; console.log(serie({length:3})); // [0,1,2] console.log(serie({from:2,length:3})); // [2,3,4] console.log(serie({from:2,to:4})); // [2,3,4] console.log(serie({from:2,to:15,step:5})); // [2,7,12] ``` ### today() Devuelve un date sin hora ```js var today = require('best-globals').today; console.log(today()); // 2017-03-31 current date! ``` ## Licencia [MIT](LICENSE)