fvi-node-utils

FVI - Node Utilities on objects, arrays, string ...

Usage no npm install needed!

<script type="module">
  import fviNodeUtils from 'https://cdn.skypack.dev/fvi-node-utils';
</script>

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
  • npm run release: Inicia uma nova release de versão incrementando o patch, git flow release start.
  • npm run release:minor: Inicia uma nova release de versão incrementando o minor, git flow release start.
  • npm run release:major: Inicia uma nova release de versão incrementando o major, git flow release start.
  • npm run release:finish: Finaliza a release, ou seja, realiza o git flow release finish.

FVI - Node Utilities

Biblioteca fvi de funções e bibliotecas utilitárias para programação em Node.js.

Core Utilities

const {
    env,
    sugar,
    debug,
    logger,
    string,
    config,
    blocked,
    arrays,
    objects,
} = require('fvi-node-utils')
  • sugar: sugar.js
  • debug: debug-safe.js
  • logger: pino
  • string: voca.js
  • config: convict.js, uma implementação que busca sempre arquivos *.json no diretório raiz do projeto.
  • blocked: blocked.js
  • env: Ver documentação abaixo.
  • arrays: Ver documentação abaixo.
  • objects: Ver documentação abaixo.

Env Utilities

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

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

Object Utilities

const {
    merge,
    json,
    inspect,
    isConfig,
    toJson,
    toBase64,
    toError,
    toErrorStack,
    joi,
} = require('fvi-node-utils/app/objects')
  • joi: joi.js
  • 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:
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:
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:
interface IConfig {
   get(param: String): Object
   has(param: String): Boolean
   getProperties(): Object
}

Portanto,

let isValidConfig = isConfig({
    label: 'value',
})
// isValidConfig === false

isValidConfig = isConfig({
    get: s => s,
    has: s => !!s,
    getProperties: () => {},
})
// isValidConfig === true