# fvi-node-utils

> Freunde Von Idden - Node Utils Library

Latest version **0.1.2** (published 2021-09-30) · MIT license · 0 weekly downloads

## Install

```sh
npm install fvi-node-utils
pnpm add fvi-node-utils
yarn add fvi-node-utils
bun add fvi-node-utils
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.1.2 |
| Published | 2021-09-30 |
| First published | 2020-06-10 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 12 |
| Unpacked size | 17.3 KB |
| Known vulnerabilities | 0 (+5 in 1 direct dependencies) |
| Install scripts | no |
| Author | salespaulo |
| Maintainers | salespaulo |
| Keywords | node, utils, debug, joi, blocked, collect.js, convict, dotenv-safe, pino, pino-pretty, stacktrace-js, sugar, voca |

## Links

- npm: https://www.npmjs.com/package/fvi-node-utils
- Repository: https://github.com/fvideen/fvi-node-js
- Homepage: https://github.com/fvideen/fvi-node-js#readme
- Issues: https://github.com/fvideen/fvi-node-js/issues
- npm.io page: https://npm.io/package/fvi-node-utils

## Dependencies (12)

- [joi](https://npm.io/package/joi.md) ^17.4.2
- [pino](https://npm.io/package/pino.md) ^6.13.3
- [voca](https://npm.io/package/voca.md) ^1.4.0
- [debug](https://npm.io/package/debug.md) ^4.3.2
- [grunt](https://npm.io/package/grunt.md) ^1.4.1
- [sugar](https://npm.io/package/sugar.md) ^2.0.6
- [blocked](https://npm.io/package/blocked.md) ^1.3.0
- [convict](https://npm.io/package/convict.md) ^5.2.1
- [collect.js](https://npm.io/package/collect.js.md) ^4.29.0
- [dotenv-safe](https://npm.io/package/dotenv-safe.md) ^8.2.0
- [pino-pretty](https://npm.io/package/pino-pretty.md) ^7.0.1
- [stacktrace-js](https://npm.io/package/stacktrace-js.md) ^2.0.2

## Alternatives

- [jsforce](https://npm.io/package/jsforce.md) — 851.2K weekly downloads
- [react-native-qrcode-svg](https://npm.io/package/react-native-qrcode-svg.md) — 693.5K weekly downloads
- [@salesforce/plugin-data](https://npm.io/package/@salesforce/plugin-data.md) — 394.9K weekly downloads
- [@backstage/plugin-search-common](https://npm.io/package/@backstage/plugin-search-common.md) — 308.5K weekly downloads
- [@chain-registry/types](https://npm.io/package/@chain-registry/types.md) — 38.4K weekly downloads

## Recent versions

- 0.1.2 (latest) — 2021-09-30
- 0.1.1 — 2021-01-29
- 0.1.0 — 2020-11-24
- 0.0.10 — 2020-11-24
- 0.0.9 — 2020-10-29
- 0.0.8 — 2020-10-19
- 0.0.1 — 2020-06-10

## README

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

---
_Source: https://npm.io/package/fvi-node-utils · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
