fvi-node-utils
Version:
Freunde Von Idden - Node Utils Library
168 lines (141 loc) • 6.47 kB
Markdown
# fvi-node-utils
- `npm run compile`: Executa a limpeza dos arquivos e diretorios.
- `npm run debug-test`: Executa os testes unitários com o DEBUG ativo.
- `npm run test`: Executa os testes unitários.
- `npm run debug-dev`: Executa os testes unitários e espera por alterações com o DEBUG ativo.
- `npm run dev`: Executa os testes unitários e espera por alterçãoes.
- `npm run prod`: Executa o código com NODE_ENV=production.
- `npm run coverage`: Executa os testes unitários e retorna a cobertura dos códigos através do [nyc](https://github.com/istanbuljs/nyc/)
- `npm run release`: Inicia uma nova release de versão incrementando o **patch**, [git flow](https://github.com/nvie/gitflow/) release start.
- `npm run release:minor`: Inicia uma nova release de versão incrementando o **minor**, [git flow](https://github.com/nvie/gitflow/) release start.
- `npm run release:major`: Inicia uma nova release de versão incrementando o **major**, [git flow](https://github.com/nvie/gitflow/) release start.
- `npm run release:finish`: Finaliza a release, ou seja, realiza o [git flow](https://github.com/nvie/gitflow/) release finish.
## FVI - Node Utilities
Biblioteca fvi de funções e bibliotecas utilitárias para programação em Node.js.
### Core Utilities
```javascript
const {
env,
sugar,
debug,
logger,
string,
config,
blocked,
arrays,
objects,
} = require('fvi-node-utils')
```
- **sugar**: [sugar.js](https://sugarjs.com/)
- **debug**: [debug-safe.js](https://www.npmjs.com/package/debug)
- **logger**: [pino](https://github.com/pinojs/pino.git)
- **string**: [voca.js](https://vocajs.com/)
- **config**: [convict.js](https://github.com/mozilla/node-convict), uma implementação que busca sempre arquivos _\*.json_ no diretório raiz do projeto.
- **blocked**: [blocked.js](https://github.com/visionmedia/node-blocked#readme)
- **env**: Ver documentação abaixo.
- **arrays**: Ver documentação abaixo.
- **objects**: Ver documentação abaixo.
### Env Utilities
```javascript
const {
DEVELOPMENT,
LOCALHOST,
TEST,
STAGING,
PRODUCTION,
IS_ENV,
IS_DEV,
IS_TEST,
IS_LOCAL,
IS_STAG,
IS_PROD,
} = require('fvi-node-utils/app/env)
```
- **DEVELOPMENT**: Constanten que representa a `String` _development_.
- **LOCALHOST**: Constanten que representa a `String` _localhost_.
- **TEST**: Constanten que representa a `String` _test_.
- **STAGING**: Constanten que representa a `String` _staging_.
- **PRODUCTION**: Constanten que representa a `String` _production_.
- **IS_ENV(node_env: string)**: Função que recebe uma `String` e retorna a validação `process.env.NODE_ENV === param`.
- **IS_DEV**: Propriedade booleana `true: process.env.NODE_ENV === DEVELOPMENT`, ou `false`.
- **IS_TEST**: Propriedade booleana `true: process.env.NODE_ENV === TEST`, ou `false`.
- **IS_LOCAL**: Propriedade booleana `true: process.env.NODE_ENV === LOCALHOST`, ou `false`.
- **IS_STAG**: Propriedade booleana `true: process.env.NODE_ENV === STAGING`, ou `false`.
- **IS_PROD**: Propriedade booleana `true: process.env.NODE_ENV === PRODUCTION`, ou `false`.
### Array Utilities
```javascript
const {
chunk,
flatmap,
asyncFilter,
arrayToBase64,
arrayToJson,
collect,
} = require('fvi-node-utils/app/arrays)
```
- **chunck(xs: array, limit: int)**: `chunk([1, 2, 3, 4, 5], 2)` resultado `[[1, 2], [3, 4], 5]`.
- **flatmap**: Função de `flatmap` para versões Node.js sem esta implementação nativa.
- **asyncFilter**: Função de `filter` para cenários assíncronos, portanto retorna uma _Promise_.
- **arrayToBase64(xs: array)**: Função que recebe um _Array_ e retorna um _Base64_ equivalente, senão dispara o erro.
- **arrayToJson(base64: string)**: Função que recebe um _Base64_ e retorna um _Object_ equivalente, senão dispara o erro.
- **collect**: [collect.js](https://collect.js.org/)
### Object Utilities
```javascript
const {
merge,
json,
inspect,
isConfig,
toJson,
toBase64,
toError,
toErrorStack,
joi,
} = require('fvi-node-utils/app/objects')
```
- **joi**: [joi.js](https://github.com/hapijs/joi#readme)
- **merge**: Atalho p/ `const merge = (obj, toMerge) => Object.assign(obj, toMerge)`.
- **json**: Atalho p/ `const json = obj => JSON.stringify(obj)`.
- **inspect**: Atalho p/ `const inspect = obj => util.inspect(obj, false, null)`.
- **toJson(base64: string)**: Função que recebe um _Base64_ e retorna o _Json_ equivalente, senão dispara o erro.
- **toBase64(json: string)**: Função que recebe um _Object_ e retorna o _Base64_ equivalente, senão dispara o erro.
- **toErrorStack**: Função que retorna um _Error_ detalhado, com `code` e `type`. Exemplo:
```javascript
const stackError = toErrorStack(new Error('Message'))
console.log(stackError.code) // 500
console.log(stackError.type) // error
console.log(stackError.message) // Message
const stackError = toErrorStack(null)
console.log(stackError.code) // 520
console.log(stackError.type) // unknown_error
console.log(stackError.message) // null
```
Esta função também trata erros que são _Object_'s que possuem uma estrutura de erro _HTTP_, e.g. `error.request` ou `error.response`.
- **toErrorTrace**: Função que retorna uma _Promise_ com o error detalhado, com trace completo em formato json. Exemplo:
```javascript
toErrorTrace(e)
.then(hydrateError => console.error(hydrateError))
.catch(console.error)
```
Essa função utiliza a biblioteca [stacktrace.js]() para recuperar o trace do erro passado como parâmetro, caso ocorra um erro durante o processo de recuperar o erro detalhado usando o _stacktracejs_ será retornado o erro original em `.catch(e => console.error(e))`.
- **isConfig(obj)**: Função que retorna `true` se o _Object_ passado repeitar o contrato básico _like a convict_ ou _node_config_, esta função é útil caso tenhamos uma biblioteca que utiliza configurações externas e as recebe através de uma _Object_ e pode validar se este parâmetro passado respeita métodos base que recupera as configurações externas. Basicamente esta função valida o seguinte:
```javascript
interface IConfig {
get(param: String): Object
has(param: String): Boolean
getProperties(): Object
}
```
Portanto,
```javascript
let isValidConfig = isConfig({
label: 'value',
})
// isValidConfig === false
isValidConfig = isConfig({
get: s => s,
has: s => !!s,
getProperties: () => {},
})
// isValidConfig === true
```