@br-validators/core 1.6.2 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -7
- package/dist/aeroportos.d.ts +1 -1
- package/dist/anp-combustiveis.d.ts +64 -0
- package/dist/anp-combustiveis.js +37816 -0
- package/dist/anp-combustiveis.js.map +1 -0
- package/dist/bancos.d.ts +1 -1
- package/dist/batch.d.ts +3 -3
- package/dist/batch.js +30 -28
- package/dist/boleto.d.ts +2 -2
- package/dist/boleto.js +5 -5
- package/dist/brcode.d.ts +2 -2
- package/dist/brcode.js +9 -9
- package/dist/cartao-credito.d.ts +2 -2
- package/dist/cartao-credito.js +3 -3
- package/dist/cbo.d.ts +1 -1
- package/dist/cbo.js +1 -1
- package/dist/cep.d.ts +3 -3
- package/dist/cep.js +5 -5
- package/dist/cest.d.ts +1 -1
- package/dist/cest.js +1 -1
- package/dist/cfop.d.ts +1 -1
- package/dist/cfop.js +1 -1
- package/dist/{chunk-FX6JEBWO.js → chunk-26HMLR4Y.js} +3 -3
- package/dist/{chunk-FX6JEBWO.js.map → chunk-26HMLR4Y.js.map} +1 -1
- package/dist/{chunk-LPGSPM53.js → chunk-2EYJMAE2.js} +3 -3
- package/dist/{chunk-LPGSPM53.js.map → chunk-2EYJMAE2.js.map} +1 -1
- package/dist/{chunk-L3IKYN3J.js → chunk-2FQOQMS6.js} +7 -7
- package/dist/{chunk-L3IKYN3J.js.map → chunk-2FQOQMS6.js.map} +1 -1
- package/dist/{chunk-QZNAGWZB.js → chunk-2HD6TA3O.js} +4 -4
- package/dist/{chunk-QZNAGWZB.js.map → chunk-2HD6TA3O.js.map} +1 -1
- package/dist/chunk-2NSBFMTP.js +125 -0
- package/dist/chunk-2NSBFMTP.js.map +1 -0
- package/dist/{chunk-VDCITFZG.js → chunk-2ZWBFVYY.js} +3 -3
- package/dist/{chunk-VDCITFZG.js.map → chunk-2ZWBFVYY.js.map} +1 -1
- package/dist/{chunk-EGDZGSHA.js → chunk-3EVLQVBC.js} +3 -3
- package/dist/{chunk-EGDZGSHA.js.map → chunk-3EVLQVBC.js.map} +1 -1
- package/dist/{chunk-BA4I3QL5.js → chunk-3ZIXLRXZ.js} +4 -3
- package/dist/chunk-3ZIXLRXZ.js.map +1 -0
- package/dist/{chunk-BUZTJ3KC.js → chunk-47PZ7WGA.js} +23 -19
- package/dist/chunk-47PZ7WGA.js.map +1 -0
- package/dist/{chunk-ISMIJ5DH.js → chunk-4T2ZBJFM.js} +3 -3
- package/dist/{chunk-ISMIJ5DH.js.map → chunk-4T2ZBJFM.js.map} +1 -1
- package/dist/chunk-5AQKUZ6R.js +35 -0
- package/dist/chunk-5AQKUZ6R.js.map +1 -0
- package/dist/{chunk-F5OHOWZU.js → chunk-5I6WYO5R.js} +3 -3
- package/dist/{chunk-F5OHOWZU.js.map → chunk-5I6WYO5R.js.map} +1 -1
- package/dist/{chunk-Q5IK2DV4.js → chunk-6PODNJTJ.js} +4 -4
- package/dist/{chunk-Q5IK2DV4.js.map → chunk-6PODNJTJ.js.map} +1 -1
- package/dist/{chunk-UTSZKJAL.js → chunk-7EMUKPPG.js} +8 -8
- package/dist/{chunk-UTSZKJAL.js.map → chunk-7EMUKPPG.js.map} +1 -1
- package/dist/{chunk-ULNZHOMA.js → chunk-AG3VELYX.js} +5 -14
- package/dist/chunk-AG3VELYX.js.map +1 -0
- package/dist/{chunk-BKF6CKUK.js → chunk-BBKNHH72.js} +7 -7
- package/dist/{chunk-BKF6CKUK.js.map → chunk-BBKNHH72.js.map} +1 -1
- package/dist/{chunk-OZ2VAF7L.js → chunk-BBYLFHZZ.js} +5 -5
- package/dist/{chunk-OZ2VAF7L.js.map → chunk-BBYLFHZZ.js.map} +1 -1
- package/dist/chunk-BG72VA7O.js +33 -0
- package/dist/chunk-BG72VA7O.js.map +1 -0
- package/dist/{chunk-XSYO3MVO.js → chunk-BMIYI2TC.js} +7 -7
- package/dist/{chunk-XSYO3MVO.js.map → chunk-BMIYI2TC.js.map} +1 -1
- package/dist/{chunk-D5POEOY7.js → chunk-BNM3RSDY.js} +24 -19
- package/dist/chunk-BNM3RSDY.js.map +1 -0
- package/dist/{chunk-6VJAOYIG.js → chunk-BSNVQQTV.js} +25 -20
- package/dist/chunk-BSNVQQTV.js.map +1 -0
- package/dist/chunk-BSSRVJ2C.js +14 -0
- package/dist/chunk-BSSRVJ2C.js.map +1 -0
- package/dist/{chunk-WJ6M5YKH.js → chunk-CQQDYYFS.js} +5 -5
- package/dist/{chunk-WJ6M5YKH.js.map → chunk-CQQDYYFS.js.map} +1 -1
- package/dist/{chunk-2AFEQOCJ.js → chunk-DAX5PVBJ.js} +10 -8
- package/dist/chunk-DAX5PVBJ.js.map +1 -0
- package/dist/{chunk-HHYQ3GXP.js → chunk-DFPIMLGD.js} +7 -7
- package/dist/{chunk-HHYQ3GXP.js.map → chunk-DFPIMLGD.js.map} +1 -1
- package/dist/{chunk-YN4M6XL2.js → chunk-DH7N2ZS6.js} +7 -7
- package/dist/{chunk-YN4M6XL2.js.map → chunk-DH7N2ZS6.js.map} +1 -1
- package/dist/{chunk-MDFK6L72.js → chunk-DMUWIPJR.js} +3 -3
- package/dist/{chunk-MDFK6L72.js.map → chunk-DMUWIPJR.js.map} +1 -1
- package/dist/{chunk-G557DGIX.js → chunk-E2BVDZKJ.js} +3 -3
- package/dist/{chunk-G557DGIX.js.map → chunk-E2BVDZKJ.js.map} +1 -1
- package/dist/{chunk-6WHDXMTW.js → chunk-EDJC6HIP.js} +3 -3
- package/dist/{chunk-6WHDXMTW.js.map → chunk-EDJC6HIP.js.map} +1 -1
- package/dist/{chunk-4NFEM2SU.js → chunk-EMZCVV5Y.js} +9 -3
- package/dist/chunk-EMZCVV5Y.js.map +1 -0
- package/dist/chunk-FI2JE6AS.js +15 -0
- package/dist/chunk-FI2JE6AS.js.map +1 -0
- package/dist/{chunk-A5UHVGRB.js → chunk-G4YT6X7N.js} +4 -4
- package/dist/{chunk-A5UHVGRB.js.map → chunk-G4YT6X7N.js.map} +1 -1
- package/dist/chunk-G65WTGYO.js +31 -0
- package/dist/chunk-G65WTGYO.js.map +1 -0
- package/dist/{chunk-ZJQ7DRH4.js → chunk-GFYWUMYH.js} +5 -5
- package/dist/{chunk-ZJQ7DRH4.js.map → chunk-GFYWUMYH.js.map} +1 -1
- package/dist/chunk-HIWHBRFG.js +30 -0
- package/dist/chunk-HIWHBRFG.js.map +1 -0
- package/dist/{chunk-U5SLA2ZP.js → chunk-HSLV626U.js} +7 -7
- package/dist/{chunk-U5SLA2ZP.js.map → chunk-HSLV626U.js.map} +1 -1
- package/dist/{chunk-BDHKGP3S.js → chunk-J3QGK6MX.js} +33 -33
- package/dist/{chunk-BDHKGP3S.js.map → chunk-J3QGK6MX.js.map} +1 -1
- package/dist/{chunk-IHSOANVC.js → chunk-KTP26VPJ.js} +7 -7
- package/dist/{chunk-IHSOANVC.js.map → chunk-KTP26VPJ.js.map} +1 -1
- package/dist/{chunk-P3EJRH4P.js → chunk-LXB5FIAQ.js} +4 -4
- package/dist/{chunk-P3EJRH4P.js.map → chunk-LXB5FIAQ.js.map} +1 -1
- package/dist/{chunk-PDGAMTBR.js → chunk-M3RBXFYG.js} +39 -20
- package/dist/chunk-M3RBXFYG.js.map +1 -0
- package/dist/{chunk-3DLNIUBY.js → chunk-M6VUQK73.js} +5 -5
- package/dist/{chunk-3DLNIUBY.js.map → chunk-M6VUQK73.js.map} +1 -1
- package/dist/{chunk-5423O35D.js → chunk-MAJPROT7.js} +7 -7
- package/dist/{chunk-5423O35D.js.map → chunk-MAJPROT7.js.map} +1 -1
- package/dist/{chunk-RSJK46ZE.js → chunk-MLUDCL3P.js} +4 -4
- package/dist/{chunk-RSJK46ZE.js.map → chunk-MLUDCL3P.js.map} +1 -1
- package/dist/{chunk-4COFDYBY.js → chunk-MZZNNXAB.js} +27 -21
- package/dist/chunk-MZZNNXAB.js.map +1 -0
- package/dist/{chunk-DVA6QQUF.js → chunk-O3HZW2GM.js} +3 -3
- package/dist/{chunk-DVA6QQUF.js.map → chunk-O3HZW2GM.js.map} +1 -1
- package/dist/{chunk-CNJ4DIYS.js → chunk-O7RJQUAJ.js} +3 -3
- package/dist/{chunk-CNJ4DIYS.js.map → chunk-O7RJQUAJ.js.map} +1 -1
- package/dist/{chunk-IJ2DAVSD.js → chunk-OM5ELPM6.js} +3 -3
- package/dist/{chunk-IJ2DAVSD.js.map → chunk-OM5ELPM6.js.map} +1 -1
- package/dist/chunk-OPFCKUFX.js +31 -0
- package/dist/chunk-OPFCKUFX.js.map +1 -0
- package/dist/{chunk-2JSOXG2M.js → chunk-P37C3MVF.js} +3 -3
- package/dist/{chunk-2JSOXG2M.js.map → chunk-P37C3MVF.js.map} +1 -1
- package/dist/chunk-P5BDKYBC.js +3 -0
- package/dist/chunk-P5BDKYBC.js.map +1 -0
- package/dist/{chunk-LBAWZ4EV.js → chunk-PUTVO6HG.js} +4 -4
- package/dist/{chunk-LBAWZ4EV.js.map → chunk-PUTVO6HG.js.map} +1 -1
- package/dist/{chunk-26MSDS43.js → chunk-Q2CFVQ2U.js} +4 -4
- package/dist/{chunk-26MSDS43.js.map → chunk-Q2CFVQ2U.js.map} +1 -1
- package/dist/{chunk-24JBIV3A.js → chunk-QKAXRXU5.js} +4 -4
- package/dist/{chunk-24JBIV3A.js.map → chunk-QKAXRXU5.js.map} +1 -1
- package/dist/{chunk-OWD47AWI.js → chunk-QZPKTG4A.js} +3 -3
- package/dist/{chunk-OWD47AWI.js.map → chunk-QZPKTG4A.js.map} +1 -1
- package/dist/{chunk-FLZGOGER.js → chunk-RNI5G42M.js} +4 -4
- package/dist/{chunk-FLZGOGER.js.map → chunk-RNI5G42M.js.map} +1 -1
- package/dist/{chunk-72EZ2VUO.js → chunk-ROU5ZHN7.js} +4 -4
- package/dist/{chunk-72EZ2VUO.js.map → chunk-ROU5ZHN7.js.map} +1 -1
- package/dist/{chunk-SH6K4PUU.js → chunk-RP5UWF2G.js} +3 -3
- package/dist/{chunk-SH6K4PUU.js.map → chunk-RP5UWF2G.js.map} +1 -1
- package/dist/{chunk-AED7KSBM.js → chunk-RRG2HJMY.js} +6 -6
- package/dist/{chunk-AED7KSBM.js.map → chunk-RRG2HJMY.js.map} +1 -1
- package/dist/{chunk-PR7NSNQG.js → chunk-RY2BSDOR.js} +4 -4
- package/dist/{chunk-PR7NSNQG.js.map → chunk-RY2BSDOR.js.map} +1 -1
- package/dist/{chunk-QSSKPIG5.js → chunk-SIMI5XYE.js} +3 -3
- package/dist/{chunk-QSSKPIG5.js.map → chunk-SIMI5XYE.js.map} +1 -1
- package/dist/{chunk-TTDHGQEC.js → chunk-SQO7BO3Y.js} +3 -3
- package/dist/{chunk-TTDHGQEC.js.map → chunk-SQO7BO3Y.js.map} +1 -1
- package/dist/{chunk-T5NFIPTU.js → chunk-SXPLYH4N.js} +3 -3
- package/dist/{chunk-T5NFIPTU.js.map → chunk-SXPLYH4N.js.map} +1 -1
- package/dist/{chunk-EEFQYVLF.js → chunk-UANHHEWY.js} +4 -4
- package/dist/{chunk-EEFQYVLF.js.map → chunk-UANHHEWY.js.map} +1 -1
- package/dist/{chunk-MF47DACR.js → chunk-UGSA7FSW.js} +7 -7
- package/dist/{chunk-MF47DACR.js.map → chunk-UGSA7FSW.js.map} +1 -1
- package/dist/{chunk-TAOFFAG3.js → chunk-UJXGDUKJ.js} +3 -3
- package/dist/{chunk-TAOFFAG3.js.map → chunk-UJXGDUKJ.js.map} +1 -1
- package/dist/chunk-VXHJLWMA.js +115 -0
- package/dist/chunk-VXHJLWMA.js.map +1 -0
- package/dist/chunk-W64OQYC4.js +13 -0
- package/dist/chunk-W64OQYC4.js.map +1 -0
- package/dist/{chunk-C7WXL7UR.js → chunk-WAVBQYPE.js} +4 -4
- package/dist/{chunk-C7WXL7UR.js.map → chunk-WAVBQYPE.js.map} +1 -1
- package/dist/{chunk-CYBWPBXJ.js → chunk-WE6RG6OC.js} +4 -4
- package/dist/{chunk-CYBWPBXJ.js.map → chunk-WE6RG6OC.js.map} +1 -1
- package/dist/{chunk-Z7KH65RZ.js → chunk-WKDCI3NI.js} +3 -3
- package/dist/{chunk-Z7KH65RZ.js.map → chunk-WKDCI3NI.js.map} +1 -1
- package/dist/chunk-XFKSJRWM.js +14 -0
- package/dist/chunk-XFKSJRWM.js.map +1 -0
- package/dist/chunk-XHHJTKSP.js +33 -0
- package/dist/chunk-XHHJTKSP.js.map +1 -0
- package/dist/chunk-XVT5QOAL.js +30 -0
- package/dist/chunk-XVT5QOAL.js.map +1 -0
- package/dist/{chunk-VE2XZSKP.js → chunk-YA7RWTAE.js} +3 -3
- package/dist/{chunk-VE2XZSKP.js.map → chunk-YA7RWTAE.js.map} +1 -1
- package/dist/chunk-YAHKWOSP.js +35 -0
- package/dist/chunk-YAHKWOSP.js.map +1 -0
- package/dist/{chunk-G4OYYXVP.js → chunk-YJBKWUCE.js} +4 -3
- package/dist/chunk-YJBKWUCE.js.map +1 -0
- package/dist/cnaes.d.ts +4 -2
- package/dist/cnaes.js +3 -2
- package/dist/cnaes.js.map +1 -1
- package/dist/cnh.d.ts +2 -2
- package/dist/cnh.js +5 -5
- package/dist/cnis.d.ts +50 -0
- package/dist/cnis.js +7 -0
- package/dist/cnis.js.map +1 -0
- package/dist/cnpj-motivos.d.ts +52 -0
- package/dist/cnpj-motivos.js +292 -0
- package/dist/cnpj-motivos.js.map +1 -0
- package/dist/cnpj.d.ts +2 -2
- package/dist/cnpj.js +5 -5
- package/dist/compare.d.ts +3 -3
- package/dist/compare.js +32 -30
- package/dist/cpf.d.ts +2 -2
- package/dist/cpf.js +5 -5
- package/dist/cst.d.ts +73 -0
- package/dist/cst.js +482 -0
- package/dist/cst.js.map +1 -0
- package/dist/data-catalog.d.ts +2 -2
- package/dist/data-catalog.js +45 -29
- package/dist/data-catalog.js.map +1 -1
- package/dist/detect.d.ts +2 -2
- package/dist/detect.js +28 -26
- package/dist/diff.d.ts +3 -3
- package/dist/diff.js +32 -30
- package/dist/ean.d.ts +43 -0
- package/dist/ean.js +6 -0
- package/dist/ean.js.map +1 -0
- package/dist/esocial.d.ts +45 -0
- package/dist/esocial.js +387 -0
- package/dist/esocial.js.map +1 -0
- package/dist/feriados.d.ts +1 -1
- package/dist/generate.d.ts +1 -1
- package/dist/generate.js +41 -39
- package/dist/ibge.d.ts +34 -2
- package/dist/ibge.js +109 -1
- package/dist/ibge.js.map +1 -1
- package/dist/ibpt.d.ts +74 -0
- package/dist/ibpt.js +166 -0
- package/dist/ibpt.js.map +1 -0
- package/dist/incoterms.d.ts +1 -1
- package/dist/incoterms.js +1 -1
- package/dist/{index-CJ5ACErT.d.ts → index-BmoilwS2.d.ts} +2 -2
- package/dist/index.d.ts +11 -9
- package/dist/index.js +77 -67
- package/dist/index.js.map +1 -1
- package/dist/{inscricao-estadual-produtor-rural-BNAyLQPY.d.ts → inscricao-estadual-produtor-rural-Hfq6jN1n.d.ts} +1 -1
- package/dist/inscricao-estadual-produtor-rural.d.ts +2 -2
- package/dist/inscricao-estadual-produtor-rural.js +3 -3
- package/dist/inscricao-estadual.d.ts +3 -3
- package/dist/inscricao-estadual.js +4 -4
- package/dist/lc116.d.ts +42 -0
- package/dist/lc116.js +866 -0
- package/dist/lc116.js.map +1 -0
- package/dist/mask.d.ts +3 -3
- package/dist/mask.js +44 -40
- package/dist/moedas.d.ts +1 -1
- package/dist/moedas.js +1 -1
- package/dist/natureza-juridica.d.ts +1 -1
- package/dist/natureza-juridica.js +1 -1
- package/dist/nbs.d.ts +1 -1
- package/dist/nbs.js +1 -1
- package/dist/ncm.d.ts +1 -1
- package/dist/ncm.js +1 -1
- package/dist/nfe-chave.d.ts +2 -2
- package/dist/nfe-chave.js +3 -3
- package/dist/paises-bacen.d.ts +1 -1
- package/dist/paises-bacen.js +1 -1
- package/dist/pis-pasep.d.ts +2 -2
- package/dist/pis-pasep.js +5 -3
- package/dist/{pix-QsM0lMas.d.ts → pix-BcPQzXRx.d.ts} +1 -1
- package/dist/pix.d.ts +2 -2
- package/dist/pix.js +9 -9
- package/dist/placa.d.ts +2 -2
- package/dist/placa.js +4 -4
- package/dist/pncp-reference.d.ts +1 -1
- package/dist/pncp-reference.js +1 -1
- package/dist/portos.d.ts +1 -1
- package/dist/portos.js +1 -1
- package/dist/processo-judicial.d.ts +2 -2
- package/dist/processo-judicial.js +3 -3
- package/dist/ptax.d.ts +53 -0
- package/dist/ptax.js +485 -0
- package/dist/ptax.js.map +1 -0
- package/dist/renavam.d.ts +2 -2
- package/dist/renavam.js +5 -5
- package/dist/rg.d.ts +2 -2
- package/dist/rg.js +2 -2
- package/dist/sanitize.d.ts +2 -2
- package/dist/sanitize.js +27 -25
- package/dist/simples-nacional.d.ts +67 -0
- package/dist/simples-nacional.js +178 -0
- package/dist/simples-nacional.js.map +1 -0
- package/dist/telefone.d.ts +3 -3
- package/dist/telefone.js +4 -4
- package/dist/titulo-eleitor.d.ts +2 -2
- package/dist/titulo-eleitor.js +5 -5
- package/dist/transparencia-snapshots.d.ts +1 -1
- package/dist/transparencia-snapshots.js +3 -3
- package/dist/transparencia-snapshots.js.map +1 -1
- package/dist/tse-municipios.d.ts +1 -1
- package/dist/{types-CCKLomYy.d.ts → types-CnePu8im.d.ts} +1 -1
- package/dist/{types-CQvCmvGu.d.ts → types-DTtrW1Km.d.ts} +2 -2
- package/dist/{validation-result-hfVg2-Mc.d.ts → validation-result-Rb7C0_xj.d.ts} +30 -2
- package/package.json +52 -2
- package/dist/chunk-2AFEQOCJ.js.map +0 -1
- package/dist/chunk-4COFDYBY.js.map +0 -1
- package/dist/chunk-4NFEM2SU.js.map +0 -1
- package/dist/chunk-6VJAOYIG.js.map +0 -1
- package/dist/chunk-BA4I3QL5.js.map +0 -1
- package/dist/chunk-BUZTJ3KC.js.map +0 -1
- package/dist/chunk-D5POEOY7.js.map +0 -1
- package/dist/chunk-G4OYYXVP.js.map +0 -1
- package/dist/chunk-PDGAMTBR.js.map +0 -1
- package/dist/chunk-ULNZHOMA.js.map +0 -1
- package/dist/chunk-WAYYRZ2L.js +0 -23
- package/dist/chunk-WAYYRZ2L.js.map +0 -1
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { brandEan } from './chunk-EMZCVV5Y.js';
|
|
2
|
+
|
|
3
|
+
// src/strip/ean.ts
|
|
4
|
+
function stripEan(input) {
|
|
5
|
+
return input.replace(/\D/g, "");
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
// src/core/ean/constants.ts
|
|
9
|
+
var EAN_OFFICIAL_SOURCE_URL = "https://www.gs1.org/standards/barcodes/ean-upc";
|
|
10
|
+
var EAN_8_LENGTH = 8;
|
|
11
|
+
var EAN_13_LENGTH = 13;
|
|
12
|
+
var EAN_GOLDEN_13 = "4006381333931";
|
|
13
|
+
var EAN_GOLDEN_13_MASKED = "4 006381 333931";
|
|
14
|
+
var EAN_GOLDEN_8 = "96385074";
|
|
15
|
+
var EAN_GOLDEN_8_MASKED = "9638 5074";
|
|
16
|
+
|
|
17
|
+
// src/core/ean/modulo10.ts
|
|
18
|
+
function computeGs1Modulo10Sum(digitsWithoutCheck) {
|
|
19
|
+
let sum = 0;
|
|
20
|
+
for (let i = 0; i < digitsWithoutCheck.length; i++) {
|
|
21
|
+
const digit = Number(digitsWithoutCheck.charAt(i));
|
|
22
|
+
const weight = i % 2 === 0 ? 1 : 3;
|
|
23
|
+
sum += digit * weight;
|
|
24
|
+
}
|
|
25
|
+
return sum;
|
|
26
|
+
}
|
|
27
|
+
function computeGs1Modulo10CheckDigit(digitsWithoutCheck) {
|
|
28
|
+
const remainder = computeGs1Modulo10Sum(digitsWithoutCheck) % 10;
|
|
29
|
+
return remainder === 0 ? 0 : 10 - remainder;
|
|
30
|
+
}
|
|
31
|
+
function passesGs1Modulo10(digits) {
|
|
32
|
+
const body = digits.slice(0, -1);
|
|
33
|
+
const expected = computeGs1Modulo10CheckDigit(body);
|
|
34
|
+
return expected === Number(digits.charAt(digits.length - 1));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// src/core/ean/detect-format.ts
|
|
38
|
+
function detectEanFormat(input) {
|
|
39
|
+
const stripped = stripEan(input);
|
|
40
|
+
if (stripped.length === EAN_13_LENGTH) {
|
|
41
|
+
return "ean-13";
|
|
42
|
+
}
|
|
43
|
+
if (stripped.length === EAN_8_LENGTH) {
|
|
44
|
+
return "ean-8";
|
|
45
|
+
}
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// src/core/ean/mask.ts
|
|
50
|
+
function applyEanMask(canonical) {
|
|
51
|
+
if (canonical.length === EAN_13_LENGTH) {
|
|
52
|
+
return `${canonical.slice(0, 1)} ${canonical.slice(1, 7)} ${canonical.slice(7)}`;
|
|
53
|
+
}
|
|
54
|
+
if (canonical.length === EAN_8_LENGTH) {
|
|
55
|
+
return `${canonical.slice(0, 4)} ${canonical.slice(4)}`;
|
|
56
|
+
}
|
|
57
|
+
throw new Error(`EAN must have ${EAN_8_LENGTH} or ${EAN_13_LENGTH} digits to apply mask`);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// src/core/ean/index.ts
|
|
61
|
+
function failure(code, message) {
|
|
62
|
+
return { ok: false, code, message };
|
|
63
|
+
}
|
|
64
|
+
function hasRepeatedDigits(value) {
|
|
65
|
+
const first = value[0];
|
|
66
|
+
for (let i = 1; i < value.length; i++) {
|
|
67
|
+
if (value[i] !== first) {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
function validateStructure(input, stripped) {
|
|
74
|
+
if (stripped.length === 0) {
|
|
75
|
+
return failure("EMPTY_INPUT", "EAN input is empty");
|
|
76
|
+
}
|
|
77
|
+
const withoutMask = input.replace(/[\s-]/g, "");
|
|
78
|
+
if (/[^0-9]/.test(withoutMask)) {
|
|
79
|
+
return failure("INVALID_CHARACTER", "EAN contains invalid characters");
|
|
80
|
+
}
|
|
81
|
+
if (stripped.length !== EAN_8_LENGTH && stripped.length !== EAN_13_LENGTH) {
|
|
82
|
+
return failure(
|
|
83
|
+
"INVALID_LENGTH",
|
|
84
|
+
`EAN must have ${EAN_8_LENGTH} (EAN-8) or ${EAN_13_LENGTH} (EAN-13) digits after normalization`
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
if (hasRepeatedDigits(stripped)) {
|
|
88
|
+
return failure("KNOWN_INVALID_PATTERN", "EAN with all identical digits is invalid");
|
|
89
|
+
}
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
function isValidGs1Modulo10(input) {
|
|
93
|
+
const stripped = stripEan(input);
|
|
94
|
+
if (stripped.length !== EAN_8_LENGTH && stripped.length !== EAN_13_LENGTH) {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
const withoutMask = input.replace(/[\s-]/g, "");
|
|
98
|
+
if (/[^0-9]/.test(withoutMask)) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
return passesGs1Modulo10(stripped);
|
|
102
|
+
}
|
|
103
|
+
function isValidEan(input) {
|
|
104
|
+
return validateEan(input).ok;
|
|
105
|
+
}
|
|
106
|
+
function validateEan(input) {
|
|
107
|
+
const stripped = stripEan(input);
|
|
108
|
+
const structural = validateStructure(input, stripped);
|
|
109
|
+
if (structural) {
|
|
110
|
+
return structural;
|
|
111
|
+
}
|
|
112
|
+
if (!passesGs1Modulo10(stripped)) {
|
|
113
|
+
return failure("INVALID_CHECK_DIGIT", "EAN check digit is invalid");
|
|
114
|
+
}
|
|
115
|
+
const format = stripped.length === EAN_13_LENGTH ? "ean-13" : "ean-8";
|
|
116
|
+
return {
|
|
117
|
+
ok: true,
|
|
118
|
+
value: brandEan(stripped),
|
|
119
|
+
format
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export { EAN_13_LENGTH, EAN_8_LENGTH, EAN_GOLDEN_13, EAN_GOLDEN_13_MASKED, EAN_GOLDEN_8, EAN_GOLDEN_8_MASKED, EAN_OFFICIAL_SOURCE_URL, applyEanMask, computeGs1Modulo10CheckDigit, computeGs1Modulo10Sum, detectEanFormat, isValidEan, isValidGs1Modulo10, passesGs1Modulo10, stripEan, validateEan };
|
|
124
|
+
//# sourceMappingURL=chunk-2NSBFMTP.js.map
|
|
125
|
+
//# sourceMappingURL=chunk-2NSBFMTP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/strip/ean.ts","../src/core/ean/constants.ts","../src/core/ean/modulo10.ts","../src/core/ean/detect-format.ts","../src/core/ean/mask.ts","../src/core/ean/index.ts"],"names":[],"mappings":"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","file":"chunk-2NSBFMTP.js","sourcesContent":["/**\n * Strip EAN mask — digits only.\n * @see https://www.gs1.org/standards/barcodes/ean-upc\n */\nexport function stripEan(input: string): string {\n return input.replace(/\\D/g, '');\n}\n","/** GS1 EAN/UPC — official reference for check-digit algorithm. */\nexport const EAN_OFFICIAL_SOURCE_URL = 'https://www.gs1.org/standards/barcodes/ean-upc' as const;\n\nexport const EAN_8_LENGTH = 8 as const;\nexport const EAN_13_LENGTH = 13 as const;\n\n/** Golden EAN-13 from GS1 examples (modulo-10 weights 1/3). */\nexport const EAN_GOLDEN_13 = '4006381333931' as const;\nexport const EAN_GOLDEN_13_MASKED = '4 006381 333931' as const;\n\n/** Golden EAN-8 from GS1 examples. */\nexport const EAN_GOLDEN_8 = '96385074' as const;\nexport const EAN_GOLDEN_8_MASKED = '9638 5074' as const;\n\nexport type EanFormat = 'ean-8' | 'ean-13';\n","/**\n * GS1 modulo-10 check digit — alternating weights 1 and 3 from the left (excluding check digit).\n * @see https://www.gs1.org/standards/barcodes/ean-upc\n */\n\nexport function computeGs1Modulo10Sum(digitsWithoutCheck: string): number {\n let sum = 0;\n for (let i = 0; i < digitsWithoutCheck.length; i++) {\n const digit = Number(digitsWithoutCheck.charAt(i));\n const weight = i % 2 === 0 ? 1 : 3;\n sum += digit * weight;\n }\n return sum;\n}\n\nexport function computeGs1Modulo10CheckDigit(digitsWithoutCheck: string): number {\n const remainder = computeGs1Modulo10Sum(digitsWithoutCheck) % 10;\n return remainder === 0 ? 0 : 10 - remainder;\n}\n\n/** Returns true when the full digit string passes GS1 modulo-10. */\nexport function passesGs1Modulo10(digits: string): boolean {\n const body = digits.slice(0, -1);\n const expected = computeGs1Modulo10CheckDigit(body);\n return expected === Number(digits.charAt(digits.length - 1));\n}\n","import { stripEan } from '../../strip/ean.js';\nimport { EAN_13_LENGTH, EAN_8_LENGTH, type EanFormat } from './constants.js';\n\n/** Best-effort format detection from stripped length (8 or 13 digits only). */\nexport function detectEanFormat(input: string): EanFormat | null {\n const stripped = stripEan(input);\n if (stripped.length === EAN_13_LENGTH) {\n return 'ean-13';\n }\n if (stripped.length === EAN_8_LENGTH) {\n return 'ean-8';\n }\n return null;\n}\n","import { EAN_13_LENGTH, EAN_8_LENGTH } from './constants.js';\n\n/** GS1 human-readable grouping — EAN-13: 1-6-6, EAN-8: 4-4. */\nexport function applyEanMask(canonical: string): string {\n if (canonical.length === EAN_13_LENGTH) {\n return `${canonical.slice(0, 1)} ${canonical.slice(1, 7)} ${canonical.slice(7)}`;\n }\n if (canonical.length === EAN_8_LENGTH) {\n return `${canonical.slice(0, 4)} ${canonical.slice(4)}`;\n }\n throw new Error(`EAN must have ${EAN_8_LENGTH} or ${EAN_13_LENGTH} digits to apply mask`);\n}\n","/**\n * GS1 EAN-8 / EAN-13 product barcode validation — modulo-10 weights 1 and 3.\n * @see docs/use-cases/UC-009-validate-ean.md\n */\nimport { stripEan } from '../../strip/ean.js';\nimport type { EanValidationResult } from '../../types/validation-result.js';\nimport { brandEan } from '../../types/validation-result.js';\nimport { EAN_13_LENGTH, EAN_8_LENGTH, type EanFormat } from './constants.js';\nimport { passesGs1Modulo10 } from './modulo10.js';\n\nexport {\n EAN_8_LENGTH,\n EAN_13_LENGTH,\n EAN_GOLDEN_13,\n EAN_GOLDEN_13_MASKED,\n EAN_GOLDEN_8,\n EAN_GOLDEN_8_MASKED,\n EAN_OFFICIAL_SOURCE_URL,\n} from './constants.js';\nexport type { EanFormat } from './constants.js';\nexport { detectEanFormat } from './detect-format.js';\nexport { applyEanMask } from './mask.js';\nexport { computeGs1Modulo10CheckDigit, computeGs1Modulo10Sum, passesGs1Modulo10 } from './modulo10.js';\n\ntype FailedResult = Extract<EanValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string): FailedResult {\n return { ok: false, code, message };\n}\n\nfunction hasRepeatedDigits(value: string): boolean {\n const first = value[0];\n for (let i = 1; i < value.length; i++) {\n if (value[i] !== first) {\n return false;\n }\n }\n return true;\n}\n\nfunction validateStructure(input: string, stripped: string): FailedResult | null {\n if (stripped.length === 0) {\n return failure('EMPTY_INPUT', 'EAN input is empty');\n }\n\n const withoutMask = input.replace(/[\\s-]/g, '');\n if (/[^0-9]/.test(withoutMask)) {\n return failure('INVALID_CHARACTER', 'EAN contains invalid characters');\n }\n\n if (stripped.length !== EAN_8_LENGTH && stripped.length !== EAN_13_LENGTH) {\n return failure(\n 'INVALID_LENGTH',\n `EAN must have ${EAN_8_LENGTH} (EAN-8) or ${EAN_13_LENGTH} (EAN-13) digits after normalization`,\n );\n }\n\n if (hasRepeatedDigits(stripped)) {\n return failure('KNOWN_INVALID_PATTERN', 'EAN with all identical digits is invalid');\n }\n\n return null;\n}\n\nexport function isValidGs1Modulo10(input: string): boolean {\n const stripped = stripEan(input);\n if (stripped.length !== EAN_8_LENGTH && stripped.length !== EAN_13_LENGTH) {\n return false;\n }\n const withoutMask = input.replace(/[\\s-]/g, '');\n if (/[^0-9]/.test(withoutMask)) {\n return false;\n }\n return passesGs1Modulo10(stripped);\n}\n\nexport function isValidEan(input: string): boolean {\n return validateEan(input).ok;\n}\n\nexport function validateEan(input: string): EanValidationResult {\n const stripped = stripEan(input);\n const structural = validateStructure(input, stripped);\n if (structural) {\n return structural;\n }\n\n if (!passesGs1Modulo10(stripped)) {\n return failure('INVALID_CHECK_DIGIT', 'EAN check digit is invalid');\n }\n\n const format: EanFormat = stripped.length === EAN_13_LENGTH ? 'ean-13' : 'ean-8';\n\n return {\n ok: true,\n value: brandEan(stripped),\n format,\n };\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { brandCartaoCredito } from './chunk-
|
|
1
|
+
import { brandCartaoCredito } from './chunk-EMZCVV5Y.js';
|
|
2
2
|
|
|
3
3
|
// src/strip/cartao-credito.ts
|
|
4
4
|
function stripCartaoCredito(input) {
|
|
@@ -194,5 +194,5 @@ function validateCartaoCredito(input) {
|
|
|
194
194
|
}
|
|
195
195
|
|
|
196
196
|
export { CARTAO_GOLDEN_AMEX, CARTAO_GOLDEN_LUHN_WALKTHROUGH, CARTAO_GOLDEN_MASTERCARD, CARTAO_GOLDEN_MIN_LENGTH, CARTAO_GOLDEN_VISA, CARTAO_GOLDEN_VISA_MASKED, CARTAO_IEC_SOURCE_URL, CARTAO_OFFICIAL_SOURCE_URL, CARTAO_PAN_MAX_LENGTH, CARTAO_PAN_MIN_LENGTH, ELO_IIN_PREFIXES, HIPERCARD_IIN_PREFIXES, applyCartaoCreditoMask, computeLuhnSum, detectCardBrand, isValidCartaoCredito, isValidLuhn, passesLuhn, stripCartaoCredito, validateCartaoCredito };
|
|
197
|
-
//# sourceMappingURL=chunk-
|
|
198
|
-
//# sourceMappingURL=chunk-
|
|
197
|
+
//# sourceMappingURL=chunk-2ZWBFVYY.js.map
|
|
198
|
+
//# sourceMappingURL=chunk-2ZWBFVYY.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/strip/cartao-credito.ts","../src/core/cartao-credito/constants.ts","../src/core/cartao-credito/detect-brand.ts","../src/core/cartao-credito/luhn.ts","../src/core/cartao-credito/mask.ts","../src/core/cartao-credito/index.ts"],"names":[],"mappings":"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","file":"chunk-VDCITFZG.js","sourcesContent":["/**\n * Strip credit card PAN mask — digits only (BR-LUHN-001).\n * @see https://www.iso.org/standard/70484.html\n */\nexport function stripCartaoCredito(input: string): string {\n return input.replace(/\\D/g, '');\n}\n","/**\n * Credit card PAN constants — ISO/IEC 7812-1 Annex B (Luhn).\n * @see https://www.iso.org/standard/70484.html\n * @see docs/use-cases/UC-008-validate-cartao-credito.md\n */\nexport type CardBrand = 'visa' | 'mastercard' | 'amex' | 'elo' | 'hipercard' | 'unknown';\n\nexport const CARTAO_PAN_MIN_LENGTH = 8;\nexport const CARTAO_PAN_MAX_LENGTH = 19;\n\nexport const CARTAO_GOLDEN_VISA = '4111111111111111';\nexport const CARTAO_GOLDEN_MASTERCARD = '5555555555554444';\nexport const CARTAO_GOLDEN_AMEX = '378282246310005';\nexport const CARTAO_GOLDEN_LUHN_WALKTHROUGH = '79927398713';\nexport const CARTAO_GOLDEN_VISA_MASKED = '4111 1111 1111 1111';\nexport const CARTAO_GOLDEN_MIN_LENGTH = '12345674';\n\nexport const CARTAO_OFFICIAL_SOURCE_URL = 'https://www.iso.org/standard/70484.html';\nexport const CARTAO_IEC_SOURCE_URL = 'https://webstore.iec.ch/en/publication/59763';\n\n/** Best-effort IIN prefixes — longest match first (BR-LUHN-005, non-authoritative). */\nexport const ELO_IIN_PREFIXES = [\n '401178',\n '401179',\n '431274',\n '438935',\n '451416',\n '457393',\n '457631',\n '457632',\n '504175',\n '506699',\n '506770',\n '509048',\n '509049',\n '627780',\n '636297',\n '636368',\n '650031',\n '650032',\n '650033',\n '650035',\n '650051',\n '650405',\n '650439',\n '650485',\n '650486',\n '650487',\n '650488',\n '650489',\n '650490',\n '650491',\n '650492',\n '650493',\n '650494',\n '650495',\n '650496',\n '650497',\n '650498',\n '650499',\n '651652',\n '651653',\n '651654',\n '651655',\n '651656',\n '651657',\n '651658',\n '651659',\n '651660',\n '655000',\n '655001',\n] as const;\n\nexport const HIPERCARD_IIN_PREFIXES = ['606282', '384100'] as const;\n","/**\n * Best-effort card brand from IIN prefix — non-authoritative (BR-LUHN-005).\n */\nimport type { CardBrand } from './constants.js';\nimport { ELO_IIN_PREFIXES, HIPERCARD_IIN_PREFIXES } from './constants.js';\n\nexport type { CardBrand };\n\nexport function detectCardBrand(strippedPan: string): CardBrand {\n for (const prefix of ELO_IIN_PREFIXES) {\n if (strippedPan.startsWith(prefix)) {\n return 'elo';\n }\n }\n\n for (const prefix of HIPERCARD_IIN_PREFIXES) {\n if (strippedPan.startsWith(prefix)) {\n return 'hipercard';\n }\n }\n\n if (/^3[47]/.test(strippedPan)) {\n return 'amex';\n }\n\n if (/^5[1-5]/.test(strippedPan) || /^2[2-7]/.test(strippedPan)) {\n return 'mastercard';\n }\n\n if (strippedPan.startsWith('4')) {\n return 'visa';\n }\n\n return 'unknown';\n}\n","/**\n * Luhn checksum — ISO/IEC 7812-1 Annex B (modulus-10 double-add-double).\n * @see BR-LUHN-003\n */\n\nexport function computeLuhnSum(pan: string): number {\n let sum = 0;\n let double = false;\n for (let i = pan.length - 1; i >= 0; i--) {\n let digit = Number(pan.charAt(i));\n if (double) {\n digit *= 2;\n if (digit > 9) {\n digit -= 9;\n }\n }\n sum += digit;\n double = !double;\n }\n return sum;\n}\n\n/** ISO/IEC 7812-1 Annex B — returns true when PAN passes Luhn. */\nexport function passesLuhn(pan: string): boolean {\n return computeLuhnSum(pan) % 10 === 0;\n}\n","import { CARTAO_PAN_MAX_LENGTH, CARTAO_PAN_MIN_LENGTH } from './constants.js';\n\n/** Grouped display mask (BR-LUHN-007). */\nexport function applyCartaoCreditoMask(canonical: string): string {\n if (canonical.length < CARTAO_PAN_MIN_LENGTH || canonical.length > CARTAO_PAN_MAX_LENGTH) {\n throw new Error(`PAN must have between ${CARTAO_PAN_MIN_LENGTH} and ${CARTAO_PAN_MAX_LENGTH} digits to apply mask`);\n }\n\n if (canonical.length === 15) {\n return `${canonical.slice(0, 4)} ${canonical.slice(4, 10)} ${canonical.slice(10)}`;\n }\n\n const groups: string[] = [];\n for (let i = 0; i < canonical.length; i += 4) {\n groups.push(canonical.slice(i, i + 4));\n }\n return groups.join(' ');\n}\n","/**\n * Credit card PAN validation — Luhn / ISO/IEC 7812-1 Annex B.\n * @see docs/use-cases/UC-008-validate-cartao-credito.md\n */\nimport { stripCartaoCredito } from '../../strip/cartao-credito.js';\nimport type { CartaoCreditoValidationResult } from '../../types/validation-result.js';\nimport { brandCartaoCredito } from '../../types/validation-result.js';\nimport { detectCardBrand } from './detect-brand.js';\nimport { CARTAO_PAN_MAX_LENGTH, CARTAO_PAN_MIN_LENGTH } from './constants.js';\nimport { passesLuhn } from './luhn.js';\n\nexport {\n CARTAO_GOLDEN_AMEX,\n CARTAO_GOLDEN_LUHN_WALKTHROUGH,\n CARTAO_GOLDEN_MASTERCARD,\n CARTAO_GOLDEN_MIN_LENGTH,\n CARTAO_GOLDEN_VISA,\n CARTAO_GOLDEN_VISA_MASKED,\n CARTAO_IEC_SOURCE_URL,\n CARTAO_OFFICIAL_SOURCE_URL,\n CARTAO_PAN_MAX_LENGTH,\n CARTAO_PAN_MIN_LENGTH,\n} from './constants.js';\nexport type { CardBrand } from './constants.js';\nexport { detectCardBrand } from './detect-brand.js';\nexport { computeLuhnSum, passesLuhn } from './luhn.js';\nexport { applyCartaoCreditoMask } from './mask.js';\n\ntype FailedResult = Extract<CartaoCreditoValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string): FailedResult {\n return { ok: false, code, message };\n}\n\nfunction hasRepeatedDigits(value: string): boolean {\n const first = value[0];\n for (let i = 1; i < value.length; i++) {\n if (value[i] !== first) {\n return false;\n }\n }\n return true;\n}\n\nfunction validateStructure(input: string, stripped: string): FailedResult | null {\n if (stripped.length === 0) {\n return failure('EMPTY_INPUT', 'Credit card PAN input is empty');\n }\n\n const withoutMask = input.replace(/[\\s-]/g, '');\n if (/[^0-9]/.test(withoutMask)) {\n return failure('INVALID_CHARACTER', 'Credit card PAN contains invalid characters');\n }\n\n if (stripped.length < CARTAO_PAN_MIN_LENGTH || stripped.length > CARTAO_PAN_MAX_LENGTH) {\n return failure(\n 'INVALID_LENGTH',\n `Credit card PAN must have between ${CARTAO_PAN_MIN_LENGTH} and ${CARTAO_PAN_MAX_LENGTH} digits after normalization`,\n );\n }\n\n if (hasRepeatedDigits(stripped)) {\n return failure('KNOWN_INVALID_PATTERN', 'Credit card PAN with all identical digits is invalid');\n }\n\n return null;\n}\n\nexport function isValidLuhn(input: string): boolean {\n const stripped = stripCartaoCredito(input);\n if (stripped.length < CARTAO_PAN_MIN_LENGTH || stripped.length > CARTAO_PAN_MAX_LENGTH) {\n return false;\n }\n const withoutMask = input.replace(/[\\s-]/g, '');\n if (/[^0-9]/.test(withoutMask)) {\n return false;\n }\n return passesLuhn(stripped);\n}\n\nexport function isValidCartaoCredito(input: string): boolean {\n return validateCartaoCredito(input).ok;\n}\n\nexport function validateCartaoCredito(input: string): CartaoCreditoValidationResult {\n const stripped = stripCartaoCredito(input);\n const structural = validateStructure(input, stripped);\n if (structural) {\n return structural;\n }\n\n if (!passesLuhn(stripped)) {\n return failure('INVALID_CHECK_DIGIT', 'Credit card PAN check digit is invalid');\n }\n\n const brand = detectCardBrand(stripped);\n return {\n ok: true,\n value: brandCartaoCredito(stripped),\n format: 'cartao-credito',\n brand,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/strip/cartao-credito.ts","../src/core/cartao-credito/constants.ts","../src/core/cartao-credito/detect-brand.ts","../src/core/cartao-credito/luhn.ts","../src/core/cartao-credito/mask.ts","../src/core/cartao-credito/index.ts"],"names":[],"mappings":"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","file":"chunk-2ZWBFVYY.js","sourcesContent":["/**\n * Strip credit card PAN mask — digits only (BR-LUHN-001).\n * @see https://www.iso.org/standard/70484.html\n */\nexport function stripCartaoCredito(input: string): string {\n return input.replace(/\\D/g, '');\n}\n","/**\n * Credit card PAN constants — ISO/IEC 7812-1 Annex B (Luhn).\n * @see https://www.iso.org/standard/70484.html\n * @see docs/use-cases/UC-008-validate-cartao-credito.md\n */\nexport type CardBrand = 'visa' | 'mastercard' | 'amex' | 'elo' | 'hipercard' | 'unknown';\n\nexport const CARTAO_PAN_MIN_LENGTH = 8;\nexport const CARTAO_PAN_MAX_LENGTH = 19;\n\nexport const CARTAO_GOLDEN_VISA = '4111111111111111';\nexport const CARTAO_GOLDEN_MASTERCARD = '5555555555554444';\nexport const CARTAO_GOLDEN_AMEX = '378282246310005';\nexport const CARTAO_GOLDEN_LUHN_WALKTHROUGH = '79927398713';\nexport const CARTAO_GOLDEN_VISA_MASKED = '4111 1111 1111 1111';\nexport const CARTAO_GOLDEN_MIN_LENGTH = '12345674';\n\nexport const CARTAO_OFFICIAL_SOURCE_URL = 'https://www.iso.org/standard/70484.html';\nexport const CARTAO_IEC_SOURCE_URL = 'https://webstore.iec.ch/en/publication/59763';\n\n/** Best-effort IIN prefixes — longest match first (BR-LUHN-005, non-authoritative). */\nexport const ELO_IIN_PREFIXES = [\n '401178',\n '401179',\n '431274',\n '438935',\n '451416',\n '457393',\n '457631',\n '457632',\n '504175',\n '506699',\n '506770',\n '509048',\n '509049',\n '627780',\n '636297',\n '636368',\n '650031',\n '650032',\n '650033',\n '650035',\n '650051',\n '650405',\n '650439',\n '650485',\n '650486',\n '650487',\n '650488',\n '650489',\n '650490',\n '650491',\n '650492',\n '650493',\n '650494',\n '650495',\n '650496',\n '650497',\n '650498',\n '650499',\n '651652',\n '651653',\n '651654',\n '651655',\n '651656',\n '651657',\n '651658',\n '651659',\n '651660',\n '655000',\n '655001',\n] as const;\n\nexport const HIPERCARD_IIN_PREFIXES = ['606282', '384100'] as const;\n","/**\n * Best-effort card brand from IIN prefix — non-authoritative (BR-LUHN-005).\n */\nimport type { CardBrand } from './constants.js';\nimport { ELO_IIN_PREFIXES, HIPERCARD_IIN_PREFIXES } from './constants.js';\n\nexport type { CardBrand };\n\nexport function detectCardBrand(strippedPan: string): CardBrand {\n for (const prefix of ELO_IIN_PREFIXES) {\n if (strippedPan.startsWith(prefix)) {\n return 'elo';\n }\n }\n\n for (const prefix of HIPERCARD_IIN_PREFIXES) {\n if (strippedPan.startsWith(prefix)) {\n return 'hipercard';\n }\n }\n\n if (/^3[47]/.test(strippedPan)) {\n return 'amex';\n }\n\n if (/^5[1-5]/.test(strippedPan) || /^2[2-7]/.test(strippedPan)) {\n return 'mastercard';\n }\n\n if (strippedPan.startsWith('4')) {\n return 'visa';\n }\n\n return 'unknown';\n}\n","/**\n * Luhn checksum — ISO/IEC 7812-1 Annex B (modulus-10 double-add-double).\n * @see BR-LUHN-003\n */\n\nexport function computeLuhnSum(pan: string): number {\n let sum = 0;\n let double = false;\n for (let i = pan.length - 1; i >= 0; i--) {\n let digit = Number(pan.charAt(i));\n if (double) {\n digit *= 2;\n if (digit > 9) {\n digit -= 9;\n }\n }\n sum += digit;\n double = !double;\n }\n return sum;\n}\n\n/** ISO/IEC 7812-1 Annex B — returns true when PAN passes Luhn. */\nexport function passesLuhn(pan: string): boolean {\n return computeLuhnSum(pan) % 10 === 0;\n}\n","import { CARTAO_PAN_MAX_LENGTH, CARTAO_PAN_MIN_LENGTH } from './constants.js';\n\n/** Grouped display mask (BR-LUHN-007). */\nexport function applyCartaoCreditoMask(canonical: string): string {\n if (canonical.length < CARTAO_PAN_MIN_LENGTH || canonical.length > CARTAO_PAN_MAX_LENGTH) {\n throw new Error(`PAN must have between ${CARTAO_PAN_MIN_LENGTH} and ${CARTAO_PAN_MAX_LENGTH} digits to apply mask`);\n }\n\n if (canonical.length === 15) {\n return `${canonical.slice(0, 4)} ${canonical.slice(4, 10)} ${canonical.slice(10)}`;\n }\n\n const groups: string[] = [];\n for (let i = 0; i < canonical.length; i += 4) {\n groups.push(canonical.slice(i, i + 4));\n }\n return groups.join(' ');\n}\n","/**\n * Credit card PAN validation — Luhn / ISO/IEC 7812-1 Annex B.\n * @see docs/use-cases/UC-008-validate-cartao-credito.md\n */\nimport { stripCartaoCredito } from '../../strip/cartao-credito.js';\nimport type { CartaoCreditoValidationResult } from '../../types/validation-result.js';\nimport { brandCartaoCredito } from '../../types/validation-result.js';\nimport { detectCardBrand } from './detect-brand.js';\nimport { CARTAO_PAN_MAX_LENGTH, CARTAO_PAN_MIN_LENGTH } from './constants.js';\nimport { passesLuhn } from './luhn.js';\n\nexport {\n CARTAO_GOLDEN_AMEX,\n CARTAO_GOLDEN_LUHN_WALKTHROUGH,\n CARTAO_GOLDEN_MASTERCARD,\n CARTAO_GOLDEN_MIN_LENGTH,\n CARTAO_GOLDEN_VISA,\n CARTAO_GOLDEN_VISA_MASKED,\n CARTAO_IEC_SOURCE_URL,\n CARTAO_OFFICIAL_SOURCE_URL,\n CARTAO_PAN_MAX_LENGTH,\n CARTAO_PAN_MIN_LENGTH,\n} from './constants.js';\nexport type { CardBrand } from './constants.js';\nexport { detectCardBrand } from './detect-brand.js';\nexport { computeLuhnSum, passesLuhn } from './luhn.js';\nexport { applyCartaoCreditoMask } from './mask.js';\n\ntype FailedResult = Extract<CartaoCreditoValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string): FailedResult {\n return { ok: false, code, message };\n}\n\nfunction hasRepeatedDigits(value: string): boolean {\n const first = value[0];\n for (let i = 1; i < value.length; i++) {\n if (value[i] !== first) {\n return false;\n }\n }\n return true;\n}\n\nfunction validateStructure(input: string, stripped: string): FailedResult | null {\n if (stripped.length === 0) {\n return failure('EMPTY_INPUT', 'Credit card PAN input is empty');\n }\n\n const withoutMask = input.replace(/[\\s-]/g, '');\n if (/[^0-9]/.test(withoutMask)) {\n return failure('INVALID_CHARACTER', 'Credit card PAN contains invalid characters');\n }\n\n if (stripped.length < CARTAO_PAN_MIN_LENGTH || stripped.length > CARTAO_PAN_MAX_LENGTH) {\n return failure(\n 'INVALID_LENGTH',\n `Credit card PAN must have between ${CARTAO_PAN_MIN_LENGTH} and ${CARTAO_PAN_MAX_LENGTH} digits after normalization`,\n );\n }\n\n if (hasRepeatedDigits(stripped)) {\n return failure('KNOWN_INVALID_PATTERN', 'Credit card PAN with all identical digits is invalid');\n }\n\n return null;\n}\n\nexport function isValidLuhn(input: string): boolean {\n const stripped = stripCartaoCredito(input);\n if (stripped.length < CARTAO_PAN_MIN_LENGTH || stripped.length > CARTAO_PAN_MAX_LENGTH) {\n return false;\n }\n const withoutMask = input.replace(/[\\s-]/g, '');\n if (/[^0-9]/.test(withoutMask)) {\n return false;\n }\n return passesLuhn(stripped);\n}\n\nexport function isValidCartaoCredito(input: string): boolean {\n return validateCartaoCredito(input).ok;\n}\n\nexport function validateCartaoCredito(input: string): CartaoCreditoValidationResult {\n const stripped = stripCartaoCredito(input);\n const structural = validateStructure(input, stripped);\n if (structural) {\n return structural;\n }\n\n if (!passesLuhn(stripped)) {\n return failure('INVALID_CHECK_DIGIT', 'Credit card PAN check digit is invalid');\n }\n\n const brand = detectCardBrand(stripped);\n return {\n ok: true,\n value: brandCartaoCredito(stripped),\n format: 'cartao-credito',\n brand,\n };\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { validateIeSpRural, applyIeSpRuralMask } from './chunk-
|
|
1
|
+
import { validateIeSpRural, applyIeSpRuralMask } from './chunk-UJXGDUKJ.js';
|
|
2
2
|
|
|
3
3
|
// src/format/inscricao-estadual-produtor-rural.ts
|
|
4
4
|
function formatIeProdutorRural(input) {
|
|
@@ -10,5 +10,5 @@ function formatIeProdutorRural(input) {
|
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
export { formatIeProdutorRural };
|
|
13
|
-
//# sourceMappingURL=chunk-
|
|
14
|
-
//# sourceMappingURL=chunk-
|
|
13
|
+
//# sourceMappingURL=chunk-3EVLQVBC.js.map
|
|
14
|
+
//# sourceMappingURL=chunk-3EVLQVBC.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/format/inscricao-estadual-produtor-rural.ts"],"names":[],"mappings":";;;AAIO,SAAS,sBAAsB,KAAA,EAA6B;AACjE,EAAA,MAAM,MAAA,GAAS,kBAAkB,KAAK,CAAA;AACtC,EAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,IAAA,OAAO,EAAE,IAAI,KAAA,EAAO,IAAA,EAAM,OAAO,IAAA,EAAM,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,EACjE;AACA,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,WAAW,kBAAA,CAAmB,MAAA,CAAO,KAAK,CAAA,EAAE;AACjE","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/format/inscricao-estadual-produtor-rural.ts"],"names":[],"mappings":";;;AAIO,SAAS,sBAAsB,KAAA,EAA6B;AACjE,EAAA,MAAM,MAAA,GAAS,kBAAkB,KAAK,CAAA;AACtC,EAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,IAAA,OAAO,EAAE,IAAI,KAAA,EAAO,IAAA,EAAM,OAAO,IAAA,EAAM,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,EACjE;AACA,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,WAAW,kBAAA,CAAmB,MAAA,CAAO,KAAK,CAAA,EAAE;AACjE","file":"chunk-3EVLQVBC.js","sourcesContent":["import { applyIeSpRuralMask } from '../core/inscricao-estadual/mask.js';\nimport { validateIeSpRural } from '../core/inscricao-estadual/sp-rural.js';\nimport type { FormatResult } from '../types/validation-result.js';\n\nexport function formatIeProdutorRural(input: string): FormatResult {\n const result = validateIeSpRural(input);\n if (!result.ok) {\n return { ok: false, code: result.code, message: result.message };\n }\n return { ok: true, formatted: applyIeSpRuralMask(result.value) };\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { normalizeForPlatform } from './chunk-
|
|
1
|
+
import { normalizeForPlatform } from './chunk-MZZNNXAB.js';
|
|
2
2
|
|
|
3
3
|
// src/platform/types.ts
|
|
4
4
|
var PLATFORM_DOCUMENT_TYPES = [
|
|
@@ -16,6 +16,7 @@ var PLATFORM_DOCUMENT_TYPES = [
|
|
|
16
16
|
"nfe-chave",
|
|
17
17
|
"boleto",
|
|
18
18
|
"cartao-credito",
|
|
19
|
+
"ean",
|
|
19
20
|
"inscricao-estadual",
|
|
20
21
|
"inscricao-estadual-produtor-rural",
|
|
21
22
|
"pix",
|
|
@@ -39,5 +40,5 @@ function compareRuntime(a, b, type, options = {}) {
|
|
|
39
40
|
}
|
|
40
41
|
|
|
41
42
|
export { compare, compareRuntime };
|
|
42
|
-
//# sourceMappingURL=chunk-
|
|
43
|
-
//# sourceMappingURL=chunk-
|
|
43
|
+
//# sourceMappingURL=chunk-3ZIXLRXZ.js.map
|
|
44
|
+
//# sourceMappingURL=chunk-3ZIXLRXZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/platform/types.ts","../src/compare/index.ts"],"names":[],"mappings":";;;AAKO,IAAM,uBAAA,GAA0B;AAAA,EACrC,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA;AAAA,EACA,mBAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,gBAAA;AAAA,EACA,KAAA;AAAA,EACA,oBAAA;AAAA,EACA,mCAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA;AAMO,SAAS,uBAAuB,IAAA,EAA4C;AACjF,EAAA,OAAQ,uBAAA,CAA8C,SAAS,IAAI,CAAA;AACrE;;;ACrBO,SAAS,QACd,CAAA,EACA,CAAA,EACA,IAAA,EACA,OAAA,GAA2B,EAAC,EACb;AACf,EAAA,MAAM,IAAA,GAAO,oBAAA,CAAqB,CAAA,EAAG,IAAA,EAAM,OAAO,CAAA;AAClD,EAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,CAAA,EAAG,IAAA,EAAM,OAAO,CAAA;AACnD,EAAA,OAAO,EAAE,KAAA,EAAO,IAAA,KAAS,KAAA,EAAM;AACjC;AAGO,SAAS,eACd,CAAA,EACA,CAAA,EACA,IAAA,EACA,OAAA,GAA2B,EAAC,EACmD;AAC/E,EAAA,IAAI,CAAC,sBAAA,CAAuB,IAAI,CAAA,EAAG;AACjC,IAAA,OAAO,EAAE,OAAO,KAAA,EAAO,IAAA,EAAM,sBAAsB,OAAA,EAAS,CAAA,uBAAA,EAA0B,IAAI,CAAA,CAAA,EAAG;AAAA,EAC/F;AACA,EAAA,OAAO,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,IAAA,EAAM,OAAO,CAAA;AACpC","file":"chunk-3ZIXLRXZ.js","sourcesContent":["import type { SanitizableDocumentType } from '../sanitize/index.js';\n\n/** Document types supported by compare, batch, and diff platform APIs. */\nexport type PlatformDocumentType = SanitizableDocumentType | 'pix' | 'brcode';\n\nexport const PLATFORM_DOCUMENT_TYPES = [\n 'cpf',\n 'cnpj',\n 'cep',\n 'placa',\n 'pis-pasep',\n 'telefone',\n 'cnh',\n 'renavam',\n 'titulo-eleitor',\n 'processo-judicial',\n 'rg',\n 'nfe-chave',\n 'boleto',\n 'cartao-credito',\n 'ean',\n 'inscricao-estadual',\n 'inscricao-estadual-produtor-rural',\n 'pix',\n 'brcode',\n] as const satisfies readonly PlatformDocumentType[];\n\nexport type PlatformOptions = {\n uf?: import('../types/validation-result.js').UfCode;\n};\n\nexport function isPlatformDocumentType(type: string): type is PlatformDocumentType {\n return (PLATFORM_DOCUMENT_TYPES as readonly string[]).includes(type);\n}\n","/**\n * Unified equality check — normalizes via strip/validate canonical (BR-COMPARE-001).\n * @see docs/OFFICIAL-SOURCES.md\n */\nimport { normalizeForPlatform } from '../platform/normalize.js';\nimport { isPlatformDocumentType } from '../platform/types.js';\nimport type { PlatformDocumentType, PlatformOptions } from '../platform/types.js';\n\nexport type CompareResult = {\n equal: boolean;\n};\n\nexport function compare(\n a: string,\n b: string,\n type: PlatformDocumentType,\n options: PlatformOptions = {},\n): CompareResult {\n const left = normalizeForPlatform(a, type, options);\n const right = normalizeForPlatform(b, type, options);\n return { equal: left === right };\n}\n\n/** Runtime guard for dynamic callers (non-exhaustive type string). */\nexport function compareRuntime(\n a: string,\n b: string,\n type: string,\n options: PlatformOptions = {},\n): CompareResult | { equal: false; code: 'UNSUPPORTED_FORMAT'; message: string } {\n if (!isPlatformDocumentType(type)) {\n return { equal: false, code: 'UNSUPPORTED_FORMAT', message: `Unknown document type: ${type}` };\n }\n return compare(a, b, type, options);\n}\n"]}
|
|
@@ -1,20 +1,21 @@
|
|
|
1
|
-
import { formatProcessoJudicial } from './chunk-
|
|
2
|
-
import { formatTelefone } from './chunk-
|
|
3
|
-
import { formatTituloEleitor } from './chunk-
|
|
4
|
-
import { formatPisPasep } from './chunk-
|
|
5
|
-
import { formatPixKey } from './chunk-
|
|
6
|
-
import { formatPlaca } from './chunk-
|
|
7
|
-
import { formatRenavam } from './chunk-
|
|
8
|
-
import { formatNfeChave } from './chunk-
|
|
9
|
-
import { formatIeProdutorRural } from './chunk-
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
1
|
+
import { formatProcessoJudicial } from './chunk-O3HZW2GM.js';
|
|
2
|
+
import { formatTelefone } from './chunk-26HMLR4Y.js';
|
|
3
|
+
import { formatTituloEleitor } from './chunk-5I6WYO5R.js';
|
|
4
|
+
import { formatPisPasep } from './chunk-FI2JE6AS.js';
|
|
5
|
+
import { formatPixKey } from './chunk-RP5UWF2G.js';
|
|
6
|
+
import { formatPlaca } from './chunk-SQO7BO3Y.js';
|
|
7
|
+
import { formatRenavam } from './chunk-DMUWIPJR.js';
|
|
8
|
+
import { formatNfeChave } from './chunk-WKDCI3NI.js';
|
|
9
|
+
import { formatIeProdutorRural } from './chunk-3EVLQVBC.js';
|
|
10
|
+
import { formatCpf } from './chunk-WAVBQYPE.js';
|
|
11
|
+
import { formatEan } from './chunk-BSSRVJ2C.js';
|
|
12
|
+
import { formatCep } from './chunk-EDJC6HIP.js';
|
|
13
|
+
import { formatCnh } from './chunk-SXPLYH4N.js';
|
|
14
|
+
import { formatCnpj } from './chunk-RNI5G42M.js';
|
|
15
|
+
import { formatRg } from './chunk-E2BVDZKJ.js';
|
|
16
|
+
import { formatInscricaoEstadual } from './chunk-LXB5FIAQ.js';
|
|
17
|
+
import { formatBoleto } from './chunk-2EYJMAE2.js';
|
|
18
|
+
import { formatCartaoCredito } from './chunk-QZPKTG4A.js';
|
|
18
19
|
|
|
19
20
|
// src/format/rg.ts
|
|
20
21
|
function formatRg2(input, options) {
|
|
@@ -37,6 +38,7 @@ var MASKABLE_DOCUMENT_TYPES = [
|
|
|
37
38
|
"nfe-chave",
|
|
38
39
|
"boleto",
|
|
39
40
|
"cartao-credito",
|
|
41
|
+
"ean",
|
|
40
42
|
"inscricao-estadual",
|
|
41
43
|
"inscricao-estadual-produtor-rural",
|
|
42
44
|
"pix"
|
|
@@ -97,6 +99,8 @@ function dispatchMask(raw, type, options) {
|
|
|
97
99
|
return formatBoleto(raw);
|
|
98
100
|
case "cartao-credito":
|
|
99
101
|
return formatCartaoCredito(raw);
|
|
102
|
+
case "ean":
|
|
103
|
+
return formatEan(raw);
|
|
100
104
|
case "inscricao-estadual":
|
|
101
105
|
return formatInscricaoEstadual(raw, { uf: options.uf });
|
|
102
106
|
case "inscricao-estadual-produtor-rural":
|
|
@@ -115,5 +119,5 @@ function dispatchMask(raw, type, options) {
|
|
|
115
119
|
}
|
|
116
120
|
|
|
117
121
|
export { MASKABLE_DOCUMENT_TYPES, isMaskableDocumentType, mask, maskRuntime };
|
|
118
|
-
//# sourceMappingURL=chunk-
|
|
119
|
-
//# sourceMappingURL=chunk-
|
|
122
|
+
//# sourceMappingURL=chunk-47PZ7WGA.js.map
|
|
123
|
+
//# sourceMappingURL=chunk-47PZ7WGA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/format/rg.ts","../src/mask/index.ts"],"names":["formatRg"],"mappings":"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","file":"chunk-47PZ7WGA.js","sourcesContent":["import type { ValidateRgOptions } from '../core/rg/index.js';\nimport { formatRg as formatRgCore } from '../core/rg/index.js';\n\nexport function formatRg(input: string, options: ValidateRgOptions): ReturnType<typeof formatRgCore> {\n return formatRgCore(input, options);\n}\n","/**\n * Unified display mask — delegates to existing `format*` (BR-MASK-001).\n * @see docs/use-cases/UC-003-format-document.md\n * @see docs/OFFICIAL-SOURCES.md\n */\nimport { formatInscricaoEstadual } from '../core/inscricao-estadual/index.js';\nimport { formatBoleto } from '../format/boleto.js';\nimport { formatCartaoCredito } from '../format/cartao-credito.js';\nimport { formatEan } from '../format/ean.js';\nimport { formatCep } from '../format/cep.js';\nimport { formatCnh } from '../format/cnh.js';\nimport { formatCnpj } from '../format/cnpj.js';\nimport { formatCpf } from '../format/cpf.js';\nimport { formatIeProdutorRural } from '../format/inscricao-estadual-produtor-rural.js';\nimport { formatNfeChave } from '../format/nfe-chave.js';\nimport { formatPisPasep } from '../format/pis-pasep.js';\nimport { formatPixKey } from '../format/pix.js';\nimport { formatPlaca } from '../format/placa.js';\nimport { formatProcessoJudicial } from '../format/processo-judicial.js';\nimport { formatRg } from '../format/rg.js';\nimport { formatRenavam } from '../format/renavam.js';\nimport { formatTelefone } from '../format/telefone.js';\nimport { formatTituloEleitor } from '../format/titulo-eleitor.js';\nimport type { FormatResult, RgUfCode, UfCode } from '../types/validation-result.js';\n\nexport type MaskableDocumentType =\n | 'cpf'\n | 'cnpj'\n | 'cep'\n | 'placa'\n | 'pis-pasep'\n | 'telefone'\n | 'cnh'\n | 'renavam'\n | 'titulo-eleitor'\n | 'processo-judicial'\n | 'rg'\n | 'nfe-chave'\n | 'boleto'\n | 'cartao-credito'\n | 'ean'\n | 'inscricao-estadual'\n | 'inscricao-estadual-produtor-rural'\n | 'pix';\n\nexport const MASKABLE_DOCUMENT_TYPES = [\n 'cpf',\n 'cnpj',\n 'cep',\n 'placa',\n 'pis-pasep',\n 'telefone',\n 'cnh',\n 'renavam',\n 'titulo-eleitor',\n 'processo-judicial',\n 'rg',\n 'nfe-chave',\n 'boleto',\n 'cartao-credito',\n 'ean',\n 'inscricao-estadual',\n 'inscricao-estadual-produtor-rural',\n 'pix',\n] as const satisfies readonly MaskableDocumentType[];\n\nexport type MaskOptions = {\n uf?: UfCode;\n};\n\nexport function isMaskableDocumentType(type: string): type is MaskableDocumentType {\n return (MASKABLE_DOCUMENT_TYPES as readonly string[]).includes(type);\n}\n\nexport function mask(\n raw: string,\n type: MaskableDocumentType,\n options: MaskOptions = {},\n): FormatResult {\n if (type === 'inscricao-estadual' && !options.uf) {\n return {\n ok: false,\n code: 'UNSUPPORTED_FORMAT',\n message: 'UF is required for inscricao-estadual masking',\n };\n }\n\n if (type === 'rg' && !options.uf) {\n return {\n ok: false,\n code: 'UNSUPPORTED_FORMAT',\n message: 'UF is required for RG masking',\n };\n }\n\n return dispatchMask(raw, type, options);\n}\n\n/** Runtime guard for dynamic callers (non-exhaustive type string). */\nexport function maskRuntime(\n type: string,\n raw: string,\n options: MaskOptions = {},\n): FormatResult {\n if (!isMaskableDocumentType(type)) {\n return { ok: false, code: 'UNSUPPORTED_FORMAT', message: `Unknown document type: ${type}` };\n }\n return mask(raw, type, options);\n}\n\nfunction dispatchMask(raw: string, type: MaskableDocumentType, options: MaskOptions): FormatResult {\n switch (type) {\n case 'cpf':\n return formatCpf(raw);\n case 'cnpj':\n return formatCnpj(raw);\n case 'cep':\n return formatCep(raw);\n case 'placa':\n return formatPlaca(raw);\n case 'pis-pasep':\n return formatPisPasep(raw);\n case 'telefone':\n return formatTelefone(raw);\n case 'cnh':\n return formatCnh(raw);\n case 'renavam':\n return formatRenavam(raw);\n case 'titulo-eleitor':\n return formatTituloEleitor(raw);\n case 'processo-judicial':\n return formatProcessoJudicial(raw);\n case 'rg':\n return formatRg(raw, { uf: options.uf as RgUfCode });\n case 'nfe-chave':\n return formatNfeChave(raw);\n case 'boleto':\n return formatBoleto(raw);\n case 'cartao-credito':\n return formatCartaoCredito(raw);\n case 'ean':\n return formatEan(raw);\n case 'inscricao-estadual':\n return formatInscricaoEstadual(raw, { uf: options.uf as UfCode });\n case 'inscricao-estadual-produtor-rural':\n return formatIeProdutorRural(raw);\n case 'pix':\n return formatPixKey(raw);\n default: {\n const _exhaustive: never = type;\n return {\n ok: false,\n code: 'UNSUPPORTED_FORMAT',\n message: `Unsupported type: ${String(_exhaustive)}`,\n };\n }\n }\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CNPJ_MASK_PATTERN } from './chunk-
|
|
1
|
+
import { CNPJ_MASK_PATTERN } from './chunk-MLUDCL3P.js';
|
|
2
2
|
|
|
3
3
|
// src/core/cnpj/mask.ts
|
|
4
4
|
function applyCnpjMask(canonical) {
|
|
@@ -10,5 +10,5 @@ function applyCnpjMask(canonical) {
|
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
export { applyCnpjMask };
|
|
13
|
-
//# sourceMappingURL=chunk-
|
|
14
|
-
//# sourceMappingURL=chunk-
|
|
13
|
+
//# sourceMappingURL=chunk-4T2ZBJFM.js.map
|
|
14
|
+
//# sourceMappingURL=chunk-4T2ZBJFM.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/cnpj/mask.ts"],"names":[],"mappings":";;;AAGO,SAAS,cAAc,SAAA,EAA2B;AACvD,EAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,IAAA,CAAK,SAAS,CAAA;AAC9C,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA,EACtE;AACA,EAAA,OAAO,GAAG,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,CAAC,IAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AACpE","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/core/cnpj/mask.ts"],"names":[],"mappings":";;;AAGO,SAAS,cAAc,SAAA,EAA2B;AACvD,EAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,IAAA,CAAK,SAAS,CAAA;AAC9C,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA,EACtE;AACA,EAAA,OAAO,GAAG,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,CAAC,IAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AACpE","file":"chunk-4T2ZBJFM.js","sourcesContent":["import { CNPJ_MASK_PATTERN } from './constants.js';\n\n/** Mask XX.XXX.XXX/XXXX-DD — same for numeric and alphanumeric (RFB Q21). */\nexport function applyCnpjMask(canonical: string): string {\n const match = CNPJ_MASK_PATTERN.exec(canonical);\n if (!match) {\n throw new Error('CNPJ must have exactly 14 characters to apply mask');\n }\n return `${match[1]}.${match[2]}.${match[3]}/${match[4]}-${match[5]}`;\n}\n"]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// src/anp-combustiveis/data/metadata.json
|
|
2
|
+
var metadata_default = {
|
|
3
|
+
id: "anp-combustiveis",
|
|
4
|
+
nome: "ANP \u2014 Levantamento de Pre\xE7os de Combust\xEDveis (LPC)",
|
|
5
|
+
fonte: "ANP \u2014 resumo_semanal_lpc (municipal averages)",
|
|
6
|
+
endpoints: [
|
|
7
|
+
"https://www.gov.br/anp/pt-br/assuntos/precos-e-defesa-da-concorrencia/precos/levantamento-de-precos-de-combustiveis-ultimas-semanas-pesquisadas",
|
|
8
|
+
"https://www.gov.br/anp/pt-br/assuntos/precos-e-defesa-da-concorrencia/precos/arquivos-lpc/2026/resumo_semanal_lpc_2026-06-14_2026-06-20.xlsx"
|
|
9
|
+
],
|
|
10
|
+
capturadoEm: "2026-06-24",
|
|
11
|
+
atualizadoEm: "2026-06-24T16:16:54.304Z",
|
|
12
|
+
contagens: {
|
|
13
|
+
semanas: 1,
|
|
14
|
+
precosMedios: 2357,
|
|
15
|
+
municipios: 386,
|
|
16
|
+
produtos: 7,
|
|
17
|
+
ufs: 27
|
|
18
|
+
},
|
|
19
|
+
alteracoes: {
|
|
20
|
+
adicionados: 0,
|
|
21
|
+
removidos: 0,
|
|
22
|
+
alterados: 0,
|
|
23
|
+
comparadoCom: "2026-06-24"
|
|
24
|
+
},
|
|
25
|
+
verificacao: {
|
|
26
|
+
agendamento: "semanal",
|
|
27
|
+
workflow: "data-refresh-bot.yml",
|
|
28
|
+
ultimaExecucao: "2026-06-24T16:16:54.304Z"
|
|
29
|
+
},
|
|
30
|
+
documentacao: "docs/OFFICIAL-SOURCES.md#anp-combustiveis"
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export { metadata_default };
|
|
34
|
+
//# sourceMappingURL=chunk-5AQKUZ6R.js.map
|
|
35
|
+
//# sourceMappingURL=chunk-5AQKUZ6R.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/anp-combustiveis/data/metadata.json"],"names":[],"mappings":";AAAA,IAAA,gBAAA,GAAA;AAAA,EACE,EAAA,EAAM,kBAAA;AAAA,EACN,IAAA,EAAQ,+DAAA;AAAA,EACR,KAAA,EAAS,oDAAA;AAAA,EACT,SAAA,EAAa;AAAA,IACX,iJAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,WAAA,EAAe,YAAA;AAAA,EACf,YAAA,EAAgB,0BAAA;AAAA,EAChB,SAAA,EAAa;AAAA,IACX,OAAA,EAAW,CAAA;AAAA,IACX,YAAA,EAAgB,IAAA;AAAA,IAChB,UAAA,EAAc,GAAA;AAAA,IACd,QAAA,EAAY,CAAA;AAAA,IACZ,GAAA,EAAO;AAAA,GACT;AAAA,EACA,UAAA,EAAc;AAAA,IACZ,WAAA,EAAe,CAAA;AAAA,IACf,SAAA,EAAa,CAAA;AAAA,IACb,SAAA,EAAa,CAAA;AAAA,IACb,YAAA,EAAgB;AAAA,GAClB;AAAA,EACA,WAAA,EAAe;AAAA,IACb,WAAA,EAAe,SAAA;AAAA,IACf,QAAA,EAAY,sBAAA;AAAA,IACZ,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA,YAAA,EAAgB;AAClB","file":"chunk-5AQKUZ6R.js","sourcesContent":["{\n \"id\": \"anp-combustiveis\",\n \"nome\": \"ANP — Levantamento de Preços de Combustíveis (LPC)\",\n \"fonte\": \"ANP — resumo_semanal_lpc (municipal averages)\",\n \"endpoints\": [\n \"https://www.gov.br/anp/pt-br/assuntos/precos-e-defesa-da-concorrencia/precos/levantamento-de-precos-de-combustiveis-ultimas-semanas-pesquisadas\",\n \"https://www.gov.br/anp/pt-br/assuntos/precos-e-defesa-da-concorrencia/precos/arquivos-lpc/2026/resumo_semanal_lpc_2026-06-14_2026-06-20.xlsx\"\n ],\n \"capturadoEm\": \"2026-06-24\",\n \"atualizadoEm\": \"2026-06-24T16:16:54.304Z\",\n \"contagens\": {\n \"semanas\": 1,\n \"precosMedios\": 2357,\n \"municipios\": 386,\n \"produtos\": 7,\n \"ufs\": 27\n },\n \"alteracoes\": {\n \"adicionados\": 0,\n \"removidos\": 0,\n \"alterados\": 0,\n \"comparadoCom\": \"2026-06-24\"\n },\n \"verificacao\": {\n \"agendamento\": \"semanal\",\n \"workflow\": \"data-refresh-bot.yml\",\n \"ultimaExecucao\": \"2026-06-24T16:16:54.304Z\"\n },\n \"documentacao\": \"docs/OFFICIAL-SOURCES.md#anp-combustiveis\"\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { validateTituloEleitor, TITULO_ELEITOR_NUMERIC_PATTERN_12, TITULO_ELEITOR_NUMERIC_PATTERN_13, TITULO_ELEITOR_LENGTH, TITULO_ELEITOR_LENGTH_EXTENDED } from './chunk-
|
|
1
|
+
import { validateTituloEleitor, TITULO_ELEITOR_NUMERIC_PATTERN_12, TITULO_ELEITOR_NUMERIC_PATTERN_13, TITULO_ELEITOR_LENGTH, TITULO_ELEITOR_LENGTH_EXTENDED } from './chunk-Q2CFVQ2U.js';
|
|
2
2
|
|
|
3
3
|
// src/core/titulo-eleitor/mask.ts
|
|
4
4
|
function applyTituloEleitorMask(canonical) {
|
|
@@ -23,5 +23,5 @@ function formatTituloEleitor(input) {
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
export { formatTituloEleitor };
|
|
26
|
-
//# sourceMappingURL=chunk-
|
|
27
|
-
//# sourceMappingURL=chunk-
|
|
26
|
+
//# sourceMappingURL=chunk-5I6WYO5R.js.map
|
|
27
|
+
//# sourceMappingURL=chunk-5I6WYO5R.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/titulo-eleitor/mask.ts","../src/format/titulo-eleitor.ts"],"names":[],"mappings":";;;AAWO,SAAS,uBAAuB,SAAA,EAA2B;AAChE,EAAA,IAAI,iCAAA,CAAkC,IAAA,CAAK,SAAS,CAAA,EAAG;AACrD,IAAA,OAAO,GAAG,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,EAChF;AACA,EAAA,IAAI,iCAAA,CAAkC,IAAA,CAAK,SAAS,CAAA,EAAG;AACrD,IAAA,OAAO,GAAG,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,EAChF;AACA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR,CAAA,uCAAA,EAAuC,qBAAqB,CAAA,IAAA,EAAO,8BAA8B,CAAA,iBAAA;AAAA,GACnG;AACF;;;ACjBO,SAAS,oBAAoB,KAAA,EAA6B;AAC/D,EAAA,MAAM,MAAA,GAAS,sBAAsB,KAAK,CAAA;AAC1C,EAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,IAAA,OAAO,EAAE,IAAI,KAAA,EAAO,IAAA,EAAM,OAAO,IAAA,EAAM,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,EACjE;AACA,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,WAAW,sBAAA,CAAuB,MAAA,CAAO,KAAK,CAAA,EAAE;AACrE","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/core/titulo-eleitor/mask.ts","../src/format/titulo-eleitor.ts"],"names":[],"mappings":";;;AAWO,SAAS,uBAAuB,SAAA,EAA2B;AAChE,EAAA,IAAI,iCAAA,CAAkC,IAAA,CAAK,SAAS,CAAA,EAAG;AACrD,IAAA,OAAO,GAAG,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,EAChF;AACA,EAAA,IAAI,iCAAA,CAAkC,IAAA,CAAK,SAAS,CAAA,EAAG;AACrD,IAAA,OAAO,GAAG,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,EAChF;AACA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR,CAAA,uCAAA,EAAuC,qBAAqB,CAAA,IAAA,EAAO,8BAA8B,CAAA,iBAAA;AAAA,GACnG;AACF;;;ACjBO,SAAS,oBAAoB,KAAA,EAA6B;AAC/D,EAAA,MAAM,MAAA,GAAS,sBAAsB,KAAK,CAAA;AAC1C,EAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,IAAA,OAAO,EAAE,IAAI,KAAA,EAAO,IAAA,EAAM,OAAO,IAAA,EAAM,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,EACjE;AACA,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,WAAW,sBAAA,CAAuB,MAAA,CAAO,KAAK,CAAA,EAAE;AACrE","file":"chunk-5I6WYO5R.js","sourcesContent":["import {\n TITULO_ELEITOR_LENGTH,\n TITULO_ELEITOR_LENGTH_EXTENDED,\n TITULO_ELEITOR_NUMERIC_PATTERN_12,\n TITULO_ELEITOR_NUMERIC_PATTERN_13,\n} from './constants.js';\n\n/**\n * Display mask — `XXXX XXXX XXXX` (BR-TITULO-005).\n * @see https://pt.wikipedia.org/wiki/T%C3%ADtulo_eleitoral#C%C3%A1lculo_do_d%C3%ADgito_verificador\n */\nexport function applyTituloEleitorMask(canonical: string): string {\n if (TITULO_ELEITOR_NUMERIC_PATTERN_12.test(canonical)) {\n return `${canonical.slice(0, 4)} ${canonical.slice(4, 8)} ${canonical.slice(8)}`;\n }\n if (TITULO_ELEITOR_NUMERIC_PATTERN_13.test(canonical)) {\n return `${canonical.slice(0, 5)} ${canonical.slice(5, 9)} ${canonical.slice(9)}`;\n }\n throw new Error(\n `Título de Eleitor must have exactly ${TITULO_ELEITOR_LENGTH} or ${TITULO_ELEITOR_LENGTH_EXTENDED} digits to format`,\n );\n}\n","import { applyTituloEleitorMask } from '../core/titulo-eleitor/mask.js';\nimport { validateTituloEleitor } from '../core/titulo-eleitor/index.js';\nimport type { FormatResult } from '../types/validation-result.js';\n\nexport function formatTituloEleitor(input: string): FormatResult {\n const result = validateTituloEleitor(input);\n if (!result.ok) {\n return { ok: false, code: result.code, message: result.message };\n }\n return { ok: true, formatted: applyTituloEleitorMask(result.value) };\n}\n"]}
|
|
@@ -12,10 +12,10 @@ var metadata_default = {
|
|
|
12
12
|
moedas: 154
|
|
13
13
|
},
|
|
14
14
|
alteracoes: {
|
|
15
|
-
adicionados:
|
|
15
|
+
adicionados: 0,
|
|
16
16
|
removidos: 0,
|
|
17
17
|
alterados: 0,
|
|
18
|
-
comparadoCom:
|
|
18
|
+
comparadoCom: "2026-06-23"
|
|
19
19
|
},
|
|
20
20
|
verificacao: {
|
|
21
21
|
agendamento: "diario",
|
|
@@ -26,5 +26,5 @@ var metadata_default = {
|
|
|
26
26
|
};
|
|
27
27
|
|
|
28
28
|
export { metadata_default };
|
|
29
|
-
//# sourceMappingURL=chunk-
|
|
30
|
-
//# sourceMappingURL=chunk-
|
|
29
|
+
//# sourceMappingURL=chunk-6PODNJTJ.js.map
|
|
30
|
+
//# sourceMappingURL=chunk-6PODNJTJ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/moedas/data/metadata.json"],"names":[],"mappings":";AAAA,IAAA,gBAAA,GAAA;AAAA,EACE,EAAA,EAAM,QAAA;AAAA,EACN,IAAA,EAAQ,kCAAA;AAAA,EACR,KAAA,EAAS,iDAAA;AAAA,EACT,SAAA,EAAa;AAAA,IACX;AAAA,GACF;AAAA,EACA,WAAA,EAAe,YAAA;AAAA,EACf,YAAA,EAAgB,0BAAA;AAAA,EAChB,SAAA,EAAa;AAAA,IACX,MAAA,EAAU;AAAA,GACZ;AAAA,EACA,UAAA,EAAc;AAAA,IACZ,WAAA,EAAe,
|
|
1
|
+
{"version":3,"sources":["../src/moedas/data/metadata.json"],"names":[],"mappings":";AAAA,IAAA,gBAAA,GAAA;AAAA,EACE,EAAA,EAAM,QAAA;AAAA,EACN,IAAA,EAAQ,kCAAA;AAAA,EACR,KAAA,EAAS,iDAAA;AAAA,EACT,SAAA,EAAa;AAAA,IACX;AAAA,GACF;AAAA,EACA,WAAA,EAAe,YAAA;AAAA,EACf,YAAA,EAAgB,0BAAA;AAAA,EAChB,SAAA,EAAa;AAAA,IACX,MAAA,EAAU;AAAA,GACZ;AAAA,EACA,UAAA,EAAc;AAAA,IACZ,WAAA,EAAe,CAAA;AAAA,IACf,SAAA,EAAa,CAAA;AAAA,IACb,SAAA,EAAa,CAAA;AAAA,IACb,YAAA,EAAgB;AAAA,GAClB;AAAA,EACA,WAAA,EAAe;AAAA,IACb,WAAA,EAAe,QAAA;AAAA,IACf,QAAA,EAAY,sBAAA;AAAA,IACZ,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA,YAAA,EAAgB;AAClB","file":"chunk-6PODNJTJ.js","sourcesContent":["{\n \"id\": \"moedas\",\n \"nome\": \"ISO 4217 Currencies + Bacen PTAX\",\n \"fonte\": \"ISO 4217 (embedded) + Banco Central PTAX Moedas\",\n \"endpoints\": [\n \"https://olinda.bcb.gov.br/olinda/servico/PTAX/versao/v1/odata/Moedas\"\n ],\n \"capturadoEm\": \"2026-06-23\",\n \"atualizadoEm\": \"2026-06-23T18:35:27.792Z\",\n \"contagens\": {\n \"moedas\": 154\n },\n \"alteracoes\": {\n \"adicionados\": 0,\n \"removidos\": 0,\n \"alterados\": 0,\n \"comparadoCom\": \"2026-06-23\"\n },\n \"verificacao\": {\n \"agendamento\": \"diario\",\n \"workflow\": \"data-refresh-bot.yml\",\n \"ultimaExecucao\": \"2026-06-23T18:35:27.792Z\"\n },\n \"documentacao\": \"docs/OFFICIAL-SOURCES.md#moedas\"\n}\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { applyCpfMask } from './chunk-CNJ4DIYS.js';
|
|
4
|
-
import { validateCpf } from './chunk-LBAWZ4EV.js';
|
|
5
|
-
import { stripCnpj } from './chunk-EB3G4IG6.js';
|
|
1
|
+
import { applyCpfMask } from './chunk-O7RJQUAJ.js';
|
|
2
|
+
import { validateCpf } from './chunk-PUTVO6HG.js';
|
|
6
3
|
import { stripCpf } from './chunk-UCJPSJN5.js';
|
|
7
|
-
import {
|
|
4
|
+
import { applyCnpjMask } from './chunk-4T2ZBJFM.js';
|
|
5
|
+
import { validateCnpj, detectCnpjFormat } from './chunk-MLUDCL3P.js';
|
|
6
|
+
import { stripCnpj } from './chunk-EB3G4IG6.js';
|
|
7
|
+
import { brandPixKey } from './chunk-EMZCVV5Y.js';
|
|
8
8
|
|
|
9
9
|
// src/core/pix/cnpj.ts
|
|
10
10
|
function failure(code, message) {
|
|
@@ -251,5 +251,5 @@ function validatePixKey(input, options) {
|
|
|
251
251
|
}
|
|
252
252
|
|
|
253
253
|
export { PIX_DICT_API_SOURCE_URL, PIX_GOLDEN_CNPJ_ALPHANUMERIC, PIX_GOLDEN_CNPJ_NUMERIC, PIX_GOLDEN_CPF, PIX_GOLDEN_EMAIL, PIX_GOLDEN_EVP, PIX_GOLDEN_PHONE, PIX_OFFICIAL_SOURCE_URL, applyPixCnpjKeyMask, applyPixCpfKeyMask, applyPixEmailKeyMask, applyPixEvpKeyMask, applyPixPhoneKeyMask, detectPixKeyType, isValidPixKey, validatePixCnpjKey, validatePixCpfKey, validatePixEmailKey, validatePixEvpKey, validatePixKey, validatePixPhoneKey };
|
|
254
|
-
//# sourceMappingURL=chunk-
|
|
255
|
-
//# sourceMappingURL=chunk-
|
|
254
|
+
//# sourceMappingURL=chunk-7EMUKPPG.js.map
|
|
255
|
+
//# sourceMappingURL=chunk-7EMUKPPG.js.map
|