codenautas/best-globals

View on GitHub
LEEME.md

Summary

Maintainability
Test Coverage
<!--multilang v0 es:LEEME.md en:README.md -->
# best-globals
<!--lang:es-->

algunas funciones comunes que queremos que sean globales

<!--lang:en--]

common global function and constants - i.e. coalesce

[!--lang:*-->

<!-- cucardas -->
![stable](https://img.shields.io/badge/stability-stable-blue.svg)
[![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/node.js.yml/badge.svg)](https://github.com/codenautas/best-globals/actions/workflows/node.js.yml)
[![coverage](https://img.shields.io/coveralls/codenautas/best-globals/master.svg)](https://coveralls.io/r/codenautas/best-globals)
[![outdated-deps](https://img.shields.io/github/issues-search/codenautas/best-globals?color=9cf&label=outdated-deps&query=is%3Apr%20author%3Aapp%2Fdependabot%20is%3Aopen)](https://github.com/codenautas/best-globals/pulls/app%2Fdependabot)

<!--multilang buttons-->

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)

<!--lang:es-->

## Instalación

<!--lang:en--]

## Install

[!--lang:*-->

```sh
$ npm install best-globals
```

<!--lang:es-->

## Objetivo principal

Tener a mano algunas funciones que estén como globales

<!--lang:en--]

## Main goal

Have handy some common global functions

[!--lang:*-->

## API

### coalesce(a [...,b] [,coalesce.throwError(message)])

<!--lang:es-->

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`. 

<!--lang:en--]

Returns the first not null nor undefined parameter. 

Use `coalesce.throwError(message)` for throw an Exception if all parameters are null or undefined.

Use `coalesce.throwErrorIfUndefined(message)` for throw an Exception if all parameters are undefined.

`coalesce` is similar to `??`, but `coalesce` with `null` and `undefined` returns `null`, 
and `??` returns the last. Also `coalesce` can be used with his auxiliar functions `throwError` and `throwErrorIfUndefined`. 

[!--lang:*-->

```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]
```
<!--lang:es-->

Las sentencias marcadas con `[1]` reaccionan distinto a su par `??`

<!--lang:en--]

**Note** `[1]` the behavior differs from `??`

[!--lang:*-->

### changing(originalConfig, changes, options)

<!--lang:es-->

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

<!--lang:en--]

Returns a new object like originalConfig with the changes reflected

Changes can be:
   * any value,
   * an object to apply the recursive changes (if the original is also an object)
   * a call to `changes.trueByObject(changes)` that means that the change only applies to non falsy values


[!--lang:*-->

```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',
    },
*/

```

<!--lang:es-->

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"

<!--lang:en--]

options         |default  |use
----------------|---------|----------------------------
`deletingValue` | *off*   |value used to delete a property
`mostlyPlain`   | `false` |allows non plain object to be changed property by property

[!--lang:*-->

### changing(new Error(msg), changes)

<!--lang:es-->

Si el primer parámetro es de clase Error retorna el mismo objeto con los cambios en él.

<!--lang:en--]

If the first argument is an instance of Error, It returns the same object with the changes reflected

[!--lang:*-->

```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
}
```

<!--lang:*-->

### escapeRegExp(text)

<!--lang:es-->

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). 

<!--lang:en--]

Returns de text that must be passed to `RegExp` for detects the exact original text.

[!--lang:*-->

```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
```

<!--lang:*-->

### forOrder(text)

<!--lang:es-->

Produce un texto que puede ser comparado para un orden "mas humano" de modo de que sea cierto:

<!--lang:en--]

Returns a unreadeable text that can be used to order the text in an human way

[!--lang:*-->

```js
var forOrder = require('best-globals').forOrder;

console.log(forOrder('code X9')<forOrder('code X11')); // true
```

<!--lang:*-->

### compareForOrder(criteria)

<!--lang:es-->

Crea una función para ser utilizada con la función sort de arreglos

<!--lang:en--]

Returns a function to be pased to the sort array function.

[!--lang:*-->

```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);
```

<!--lang:*-->

### sleep(milliseconds)

<!--lang:es-->

Suspende una cadena de promesas durante un tiempo

<!--lang:en--]

Suspends a promises chain for a while

[!--lang:*-->

```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"');
});

```
<!--lang:*-->

### serie({[from:number,] to:number [,step:number]}) 
### serie({[from:number,] length:number [,step:number]}) 

<!--lang:es-->

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*. 

<!--lang:en--]

Returns an array with a serie of numbers starting with *from* (or zero), step by *step* (or 1);
with *length* or until *to*.

[!--lang:*-->

```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]
```
<!--lang:*-->

### today() 

<!--lang:es-->

Devuelve un date sin hora

<!--lang:en--]

Returns today with hour

[!--lang:*-->

```js
var today = require('best-globals').today;

console.log(today()); // 2017-03-31 current date!
```

<!--lang:es-->

## Licencia

<!--lang:en--]

## License

[!--lang:*-->

[MIT](LICENSE)