From 8eb5d52a91fd0a2a0476c06258817916fb609e6a Mon Sep 17 00:00:00 2001 From: Hyan Mandian <5044101+hyanmandian@users.noreply.github.com> Date: Mon, 6 Apr 2026 14:15:19 -0300 Subject: [PATCH 1/9] chore: migrate to vite+ --- .github/workflows/build.yml | 13 +- .github/workflows/check.yml | 15 +- .github/workflows/tests.yml | 93 +- .release-it.json | 4 +- CHANGELOG.md | 177 - README.md | 26 +- biome.json | 28 - bun.lock | 1154 ---- docs/migration-v1-to-v2.md | 5 +- docs/pt-br/migration-v1-to-v2.md | 5 +- package.json | 70 +- pnpm-lock.yaml | 4831 +++++++++++++++++ scripts/cities.ts | 22 +- scripts/prebuild.ts | 63 +- scripts/states.ts | 17 +- src/_internals/constants/states.ts | 42 +- src/_internals/format/format.test.ts | 3 +- .../generate-checksum.test.ts | 3 +- .../generate-checksum/generate-checksum.ts | 5 +- .../generate-random-number.test.ts | 3 +- src/_internals/mod10/mod10.test.ts | 3 +- src/_internals/mod11/mod11.test.ts | 9 +- .../sanitize-to-digits.test.ts | 3 +- src/capitalize/capitalize.test.ts | 19 +- src/capitalize/capitalize.ts | 5 +- src/format-boleto/format-boleto.test.ts | 73 +- src/format-boleto/format-boleto.ts | 5 +- src/format-cep/format-cep.test.ts | 3 +- src/format-cep/format-cep.ts | 5 +- src/format-cnpj/format-cnpj.test.ts | 43 +- src/format-cnpj/format-cnpj.ts | 10 +- src/format-cpf/format-cpf.test.ts | 3 +- src/format-cpf/format-cpf.ts | 5 +- src/format-currency/format-currency.test.ts | 11 +- src/format-currency/format-currency.ts | 9 +- src/format-phone/format-phone.test.ts | 11 +- src/format-phone/format-phone.ts | 5 +- src/format-phone/index.ts | 1 + src/format-pis/format-pis.test.ts | 3 +- src/format-pis/format-pis.ts | 5 +- .../format-processo-juridico.test.ts | 31 +- src/generate-boleto/generate-boleto.test.ts | 3 +- src/generate-boleto/generate-boleto.ts | 6 +- src/generate-cnpj/generate-cnpj.test.ts | 3 +- src/generate-cnpj/generate-cnpj.ts | 20 +- src/generate-cpf/generate-cpf.test.ts | 3 +- .../get-address-info-by-cep.test.ts | 32 +- .../get-address-info-by-cep.ts | 39 +- src/get-boleto-info/get-boleto-info.test.ts | 15 +- src/get-cities/get-cities.test.ts | 4 +- src/get-holidays/get-holidays.test.ts | 11 +- src/get-holidays/get-holidays.ts | 11 +- src/get-states/get-states.test.ts | 3 +- src/index.test.ts | 2 +- src/index.ts | 45 +- .../is-valid-bank-account.test.ts | 6 +- .../is-valid-bank-account.ts | 21 +- src/is-valid-boleto/is-valid-boleto.test.ts | 25 +- src/is-valid-boleto/is-valid-boleto.ts | 10 +- src/is-valid-cep/is-valid-cep.test.ts | 5 +- src/is-valid-cnpj/is-valid-cnpj.test.ts | 9 +- src/is-valid-cnpj/is-valid-cnpj.ts | 17 +- src/is-valid-cpf/is-valid-cpf.test.ts | 9 +- src/is-valid-email/is-valid-email.test.ts | 5 +- src/is-valid-ie/is-valid-ie.test.ts | 3 +- .../is-valid-landline-phone.test.ts | 3 +- .../is-valid-license-plate.test.ts | 9 +- .../is-valid-license-plate.ts | 3 +- .../is-valid-mobile-phone.test.ts | 3 +- .../is-valid-mobile-phone.ts | 10 +- src/is-valid-phone/is-valid-phone.test.ts | 4 +- src/is-valid-phone/is-valid-phone.ts | 5 +- src/is-valid-pis/is-valid-pis.test.ts | 9 +- .../is-valid-processo-juridico.test.ts | 5 +- .../is-valid-processo-juridico.ts | 5 +- src/is-valid-renavam/is-valid-renavam.test.ts | 9 +- src/parse-boleto/parse-boleto.test.ts | 17 +- src/parse-boleto/parse-boleto.ts | 3 +- src/parse-cep/parse-cep.test.ts | 3 +- src/parse-cep/parse-cep.ts | 3 +- src/parse-cnpj/parse-cnpj.test.ts | 7 +- src/parse-cnpj/parse-cnpj.ts | 5 +- src/parse-cpf/parse-cpf.test.ts | 3 +- src/parse-cpf/parse-cpf.ts | 3 +- src/parse-currency/parse-currency.test.ts | 5 +- src/parse-phone/parse-phone.test.ts | 3 +- src/parse-phone/parse-phone.ts | 3 +- src/parse-pis/parse-pis.test.ts | 3 +- src/parse-pis/parse-pis.ts | 3 +- .../parse-processo-juridico.test.ts | 11 +- .../parse-processo-juridico.ts | 3 +- vite.config.ts | 55 +- vitest.config.ts | 16 - 93 files changed, 5329 insertions(+), 2030 deletions(-) delete mode 100644 CHANGELOG.md delete mode 100644 biome.json delete mode 100644 bun.lock create mode 100644 pnpm-lock.yaml delete mode 100644 vitest.config.ts diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cc1c34daf..bdd5093e1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -9,13 +9,12 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - name: Install Bun - uses: oven-sh/setup-bun@v1 - - - name: Install dependencies - run: bun install + - name: Setup Vite+ + uses: voidzero-dev/setup-vp@b5d848f4a12639022d2463fda46eacb0a0dcb9ff # v1.0.0 + with: + cache: true - name: Run build - run: bun run build \ No newline at end of file + run: vp run build diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 0bb8a4533..5ffae04f5 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -9,13 +9,12 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - name: Install Bun - uses: oven-sh/setup-bun@v1 + - name: Setup Vite+ + uses: voidzero-dev/setup-vp@b5d848f4a12639022d2463fda46eacb0a0dcb9ff # v1.0.0 + with: + cache: true - - name: Install dependencies - run: bun install - - - name: Run tests - run: bun run ci \ No newline at end of file + - name: Run checks + run: vp check diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 3c4580efa..8a37a6a16 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -8,39 +8,80 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node-version: [18, 20, 22] + node-version: [20, 22, 24] steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 + - name: Setup Node.js + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version: ${{ matrix.node-version }} - - name: Install dependencies - run: npm install + - name: Setup Vite+ + uses: voidzero-dev/setup-vp@b5d848f4a12639022d2463fda46eacb0a0dcb9ff # v1.0.0 + with: + cache: true - name: Run tests - run: npm run test + run: vp test - test-bun: - name: Test on Bun + smoke-bun: + name: Smoke on Bun runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - name: Install Bun - uses: oven-sh/setup-bun@v1 + - name: Setup Node.js + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + with: + node-version: 24 - - name: Install dependencies - run: bun install + - name: Setup Bun + uses: oven-sh/setup-bun@f4d14e019c4ef7fdb8623d7331f741f6a4b0f0a0 # v1 - - name: Run tests - run: bun test + - name: Setup Vite+ + uses: voidzero-dev/setup-vp@b5d848f4a12639022d2463fda46eacb0a0dcb9ff # v1.0.0 + with: + cache: true + + - name: Build package + run: vp run build + + - name: Smoke test ESM bundle in Bun + run: bun -e "const mod = await import('./dist/brazilian-utils.js'); if (!('isValidCpf' in mod)) throw new Error('Missing isValidCpf export');" + + smoke-deno: + name: Smoke on Deno + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + + - name: Setup Node.js + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + with: + node-version: 24 + + - name: Setup Deno + uses: denoland/setup-deno@e95548e13f374b46915956c2ecce7598176f265d # v2.0.3 + with: + deno-version: v2.x + + - name: Setup Vite+ + uses: voidzero-dev/setup-vp@b5d848f4a12639022d2463fda46eacb0a0dcb9ff # v1.0.0 + with: + cache: true + + - name: Build package + run: vp run build + + - name: Smoke test ESM bundle in Deno + run: deno eval --allow-read "const mod = await import('./dist/brazilian-utils.js'); if (!('isValidCpf' in mod)) throw new Error('Missing isValidCpf export');" test-browsers: name: Test on Browsers (${{ matrix.browser }}) @@ -51,13 +92,15 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - name: Install dependencies - run: npm install + - name: Setup Vite+ + uses: voidzero-dev/setup-vp@b5d848f4a12639022d2463fda46eacb0a0dcb9ff # v1.0.0 + with: + cache: true - name: Run tests in ${{ matrix.browser }} - run: npm run test:${{ matrix.browser }}-browser + run: vp test --browser=${{ matrix.browser }} test-safari: name: Test on Browsers (safari) @@ -65,10 +108,12 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - name: Install dependencies - run: npm install + - name: Setup Vite+ + uses: voidzero-dev/setup-vp@b5d848f4a12639022d2463fda46eacb0a0dcb9ff # v1.0.0 + with: + cache: true - name: Run tests in Safari - run: npm run test:safari-browser \ No newline at end of file + run: vp test --browser=safari --browser.headless=false diff --git a/.release-it.json b/.release-it.json index 0e32b1350..52349e2f5 100644 --- a/.release-it.json +++ b/.release-it.json @@ -4,8 +4,8 @@ "release": true }, "hooks": { - "before:init": ["bun run ci", "bun run test"], - "after:bump": "bun run build", + "before:init": ["vp check", "vp test"], + "after:bump": "vp run build", "after:release": "echo Successfully released ${name} v${version} to ${repo.repository}." } } diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index fb5fe903a..000000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,177 +0,0 @@ -# [2.0.1](https://github.com/brazilian-utils/brazilian-utils/compare/2.0.0...2.0.1) (2026-03-30) - - -### Bug Fixes - -* add support for Mercosul motorcycle license plates ([e918164](https://github.com/brazilian-utils/brazilian-utils/commit/e918164)) -* correct sanitization to accept the entire alphabet in alphanumeric CNPJ ([b1ad55e](https://github.com/brazilian-utils/brazilian-utils/commit/b1ad55e)) - -# [2.0.0](https://github.com/brazilian-utils/brazilian-utils/compare/v1.1.0...2.0.0) (2026-01-21) - - -### Bug Fixes - -* adjust build and publish configuration ([33f367f](https://github.com/brazilian-utils/brazilian-utils/commit/33f367f)) -* adjust `is-valid-cnpj` and `generate-cnpj` behavior ([adfdecb](https://github.com/brazilian-utils/brazilian-utils/commit/adfdecb)) -* adjust formatting, lint, and public API coverage ([38e06a4](https://github.com/brazilian-utils/brazilian-utils/commit/38e06a4), [9e9cd6a](https://github.com/brazilian-utils/brazilian-utils/commit/9e9cd6a), [cb13d33](https://github.com/brazilian-utils/brazilian-utils/commit/cb13d33)) -* adjust project structure and CI ([3cdb483](https://github.com/brazilian-utils/brazilian-utils/commit/3cdb483), [f5a1dd7](https://github.com/brazilian-utils/brazilian-utils/commit/f5a1dd7)) - - -### Features - -* add all formatters ([84ee6d2](https://github.com/brazilian-utils/brazilian-utils/commit/84ee6d2)) -* add docs to cities data ([954e953](https://github.com/brazilian-utils/brazilian-utils/commit/954e953)) -* include more utilities in the public package ([8df157c](https://github.com/brazilian-utils/brazilian-utils/commit/8df157c), [c3cfe0d](https://github.com/brazilian-utils/brazilian-utils/commit/c3cfe0d)) -* add public API test coverage and migration guide for the release ([158778d](https://github.com/brazilian-utils/brazilian-utils/commit/158778d), [e185a51](https://github.com/brazilian-utils/brazilian-utils/commit/e185a51)) - -# [1.1.0](https://github.com/brazilian-utils/brazilian-utils/compare/1.0.0-rc.12...v1.1.0) (2025-11-01) - - -### Bug Fixes - -* remove unused files and resolve merge conflicts in the processo juridico work ([26b33cb](https://github.com/brazilian-utils/brazilian-utils/commit/26b33cb), [47497c7](https://github.com/brazilian-utils/brazilian-utils/commit/47497c7)) -* update the build workflow and package structure ([d690541](https://github.com/brazilian-utils/brazilian-utils/commit/d690541), [fe62b69](https://github.com/brazilian-utils/brazilian-utils/commit/fe62b69)) - - -### Features - -* add support for alphanumeric CNPJ ([84dcac7](https://github.com/brazilian-utils/brazilian-utils/commit/84dcac7)) -* add validation utilities for processo juridico numbers ([12ac657](https://github.com/brazilian-utils/brazilian-utils/commit/12ac657)) -* update cities data ([cdd6c9d](https://github.com/brazilian-utils/brazilian-utils/commit/cdd6c9d)) - -# [1.0.0-rc.12](https://github.com/brazilian-utils/brazilian-utils/compare/1.0.0-rc.11...1.0.0-rc.12) (2020-10-27) - - -### Features - -* **licenseplate:** add a validador for brazilian and mercosul license plates ([580d961](https://github.com/brazilian-utils/brazilian-utils/commit/580d9613ed97d636f3ca717072522d05620081b3)), closes [#112](https://github.com/brazilian-utils/brazilian-utils/issues/112) - -# [1.0.0-rc.11](https://github.com/brazilian-utils/brazilian-utils/compare/1.0.0-rc.10...1.0.0-rc.11) (2020-08-25) - - -### Bug Fixes - -* esm filename in package.json ([32cd815](https://github.com/brazilian-utils/brazilian-utils/commit/32cd815905af8ff850f6b4f56824288223722200)) -* let formatCurrency() more flexible and remove default param from parseCurrency() ([8a9a437](https://github.com/brazilian-utils/brazilian-utils/commit/8a9a4374d2b1e6bd33f2ccb26e6496c5f12dcd22)) -* **deps:** upgrade devDependency to fix security warning ([af7c353](https://github.com/brazilian-utils/brazilian-utils/commit/af7c353e97d1f9140a251a84fc13168aa2789956)) -* replace array.flat with reduce to support node 10 ([a47a51a](https://github.com/brazilian-utils/brazilian-utils/commit/a47a51a1b881aaf045d9e69af4fd0b20c50dcbfe)) -* **workflow:** update workflow config ([fb449c0](https://github.com/brazilian-utils/brazilian-utils/commit/fb449c09ed0b19277f946af26e4465efe10c68be)) - - -### Features - -* add formatCurrency() and parseCurrency() ([b0e6994](https://github.com/brazilian-utils/brazilian-utils/commit/b0e6994ebd7613030c648bbc9150640f305bf4ca)) - - -# [1.0.0-rc.10](https://github.com/brazilian-utils/brazilian-utils/compare/1.0.0-rc.9...1.0.0-rc.10) (2020-07-27) - - -### Bug Fixes - -* exported the function "capitalize()" to the public API ([a16d603](https://github.com/brazilian-utils/brazilian-utils/commit/a16d603)) - - -### Features - -* add function capitalize() ([6d915fd](https://github.com/brazilian-utils/brazilian-utils/commit/6d915fd)) -* atualiza cidades novas ([348ab84](https://github.com/brazilian-utils/brazilian-utils/commit/348ab84)) - - -# [1.0.0-rc.9](https://github.com/brazilian-utils/brazilian-utils/compare/1.0.0-rc.8...1.0.0-rc.9) (2020-07-09) - - -### Bug Fixes - -* applied code review ([48a81f1](https://github.com/brazilian-utils/brazilian-utils/commit/48a81f1)) -* solve all Codecov issues ([3394479](https://github.com/brazilian-utils/brazilian-utils/commit/3394479)) - - -### Features - -* add functions isValidLandlinePhone() and isValidMobilePhone() ([e8fe8bd](https://github.com/brazilian-utils/brazilian-utils/commit/e8fe8bd)) - - -# [1.0.0-rc.8](https://github.com/brazilian-utils/brazilian-utils/compare/1.0.0-rc.7...1.0.0-rc.8) (2020-06-17) - - -### Bug Fixes - -* add getCities to api public testes ([3f8c4be](https://github.com/brazilian-utils/brazilian-utils/commit/3f8c4be)) -* adjust docs typo ([89cf335](https://github.com/brazilian-utils/brazilian-utils/commit/89cf335)) -* adjust responsive docs ([bafcdc0](https://github.com/brazilian-utils/brazilian-utils/commit/bafcdc0)) -* export getCities ([0472144](https://github.com/brazilian-utils/brazilian-utils/commit/0472144)) -* update-cities script command ([bce5628](https://github.com/brazilian-utils/brazilian-utils/commit/bce5628)) - - -### Features - -* add utility getCities ([ebb949d](https://github.com/brazilian-utils/brazilian-utils/commit/ebb949d)) -* black lives matters ([cce58d8](https://github.com/brazilian-utils/brazilian-utils/commit/cce58d8)) -* change the way the cities are filtered. Add docs ([7f4ca6d](https://github.com/brazilian-utils/brazilian-utils/commit/7f4ca6d)) - - -# [1.0.0-rc.7](https://github.com/brazilian-utils/brazilian-utils/compare/1.0.0-rc.6...1.0.0-rc.7) (2020-05-05) - - -### Features - -* **utilities:** create `getStates` method ([57e3174](https://github.com/brazilian-utils/brazilian-utils/commit/57e3174)), closes [#82](https://github.com/brazilian-utils/brazilian-utils/issues/82) - - - - -# [1.0.0-rc.6](https://github.com/brazilian-utils/brazilian-utils/compare/1.0.0-rc.6...1.0.0-rc.7) (2020-04-29) - - -### Features - -* **cpf, cnpj:** format accepts numbers, optional fillZeroes behavior ([5293721](https://github.com/brazilian-utils/brazilian-utils/commit/5293721)) -* **cpf, cnpj:** using an options object instead of a parameter ([db9ca46](https://github.com/brazilian-utils/brazilian-utils/commit/db9ca46)) - - - - -# [1.0.0-rc.5](https://github.com/brazilian-utils/brazilian-utils/compare/1.0.0-rc.6...1.0.0-rc.7) (2020-04-23) - - -### Bug Fixes - -* **build:** update tsconfig rootDir for tsdx 0.13 ([17ea338](https://github.com/brazilian-utils/brazilian-utils/commit/17ea338)) -* **release-it:** update config filename ([afc46a3](https://github.com/brazilian-utils/brazilian-utils/commit/afc46a3)) -* **tooling:** remote git-add from lint-staged ([b000e8e](https://github.com/brazilian-utils/brazilian-utils/commit/b000e8e)) -* adjust circular dependency ([6f4f53b](https://github.com/brazilian-utils/brazilian-utils/commit/6f4f53b)) -* adjust pt-BR documentation ([bb79fe6](https://github.com/brazilian-utils/brazilian-utils/commit/bb79fe6)) -* function typo on usage section ([06ca0ca](https://github.com/brazilian-utils/brazilian-utils/commit/06ca0ca)) -* length typo ([711ba8a](https://github.com/brazilian-utils/brazilian-utils/commit/711ba8a)) -* remove unnecessary escape ([74c53ed](https://github.com/brazilian-utils/brazilian-utils/commit/74c53ed)) -* **jest:** update jest to fix security warning ([a3af687](https://github.com/brazilian-utils/brazilian-utils/commit/a3af687)) - - -### ci - -* 🎡 adjust travis config ([0ec107f](https://github.com/brazilian-utils/brazilian-utils/commit/0ec107f)) -* 🎡 rename travis file ([25da01e](https://github.com/brazilian-utils/brazilian-utils/commit/25da01e)) - - -### Features - -* add cep formatter ([d8b0deb](https://github.com/brazilian-utils/brazilian-utils/commit/d8b0deb)) -* inscricao-estadual validator ([c4cf9ae](https://github.com/brazilian-utils/brazilian-utils/commit/c4cf9ae)) -* **boleto:** add boleto formatter ([3cfd0b4](https://github.com/brazilian-utils/brazilian-utils/commit/3cfd0b4)) -* **CNPJ:** migrate CNPJ formatter ([f34317d](https://github.com/brazilian-utils/brazilian-utils/commit/f34317d)) -* **CPF:** migrate CPF formatter ([ef1ed2a](https://github.com/brazilian-utils/brazilian-utils/commit/ef1ed2a)) -* **CPF:** migrate CPF generation ([6463b40](https://github.com/brazilian-utils/brazilian-utils/commit/6463b40)) -* **CPF:** migrate isValidCPF ([620f798](https://github.com/brazilian-utils/brazilian-utils/commit/620f798)) -* **refactoring:** add TSDX and rewrite helpers ([ebb2d18](https://github.com/brazilian-utils/brazilian-utils/commit/ebb2d18)) -* CheckSum generator ([7dd6978](https://github.com/brazilian-utils/brazilian-utils/commit/7dd6978)) -* cpf generator, requested on [#4](https://github.com/brazilian-utils/brazilian-utils/issues/4) ([5ffc2a1](https://github.com/brazilian-utils/brazilian-utils/commit/5ffc2a1)) - - -### BREAKING CHANGES - -* n - -Closes: n -* n - -Closes: n diff --git a/README.md b/README.md index 30b8ad952..76926ee33 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,12 @@ [![Build Status](https://github.com/brazilian-utils/javascript/actions/workflows/build.yml/badge.svg?branch=main)](https://github.com/brazilian-utils/javascript/actions/workflows/build.yml?query=branch%3Amain) [![Coverage Status](https://codecov.io/gh/brazilian-utils/javascript/graph/badge.svg?branch=main)](https://codecov.io/gh/brazilian-utils/javascript?branch=main) [![Known Vulnerabilities](https://snyk.io/test/github/brazilian-utils/javascript/badge.svg?targetFile=package.json)](https://snyk.io/test/github/brazilian-utils/javascript?targetFile=package.json) [![Maintainability](https://api.codeclimate.com/v1/badges/05d3cd8492ed438bf51d/maintainability)](https://codeclimate.com/github/brazilian-utils/javascript/maintainability) [![Downloads per month](https://img.shields.io/npm/dm/@brazilian-utils/brazilian-utils.svg)](https://www.npmjs.com/package/@brazilian-utils/brazilian-utils) [![License: MIT](https://img.shields.io/github/license/brazilian-utils/javascript.svg)](LICENSE) + + **Table of Contents** - [Getting Started](#getting-started) @@ -52,13 +54,33 @@ or `