@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.
Files changed (293) hide show
  1. package/README.md +26 -7
  2. package/dist/aeroportos.d.ts +1 -1
  3. package/dist/anp-combustiveis.d.ts +64 -0
  4. package/dist/anp-combustiveis.js +37816 -0
  5. package/dist/anp-combustiveis.js.map +1 -0
  6. package/dist/bancos.d.ts +1 -1
  7. package/dist/batch.d.ts +3 -3
  8. package/dist/batch.js +30 -28
  9. package/dist/boleto.d.ts +2 -2
  10. package/dist/boleto.js +5 -5
  11. package/dist/brcode.d.ts +2 -2
  12. package/dist/brcode.js +9 -9
  13. package/dist/cartao-credito.d.ts +2 -2
  14. package/dist/cartao-credito.js +3 -3
  15. package/dist/cbo.d.ts +1 -1
  16. package/dist/cbo.js +1 -1
  17. package/dist/cep.d.ts +3 -3
  18. package/dist/cep.js +5 -5
  19. package/dist/cest.d.ts +1 -1
  20. package/dist/cest.js +1 -1
  21. package/dist/cfop.d.ts +1 -1
  22. package/dist/cfop.js +1 -1
  23. package/dist/{chunk-FX6JEBWO.js → chunk-26HMLR4Y.js} +3 -3
  24. package/dist/{chunk-FX6JEBWO.js.map → chunk-26HMLR4Y.js.map} +1 -1
  25. package/dist/{chunk-LPGSPM53.js → chunk-2EYJMAE2.js} +3 -3
  26. package/dist/{chunk-LPGSPM53.js.map → chunk-2EYJMAE2.js.map} +1 -1
  27. package/dist/{chunk-L3IKYN3J.js → chunk-2FQOQMS6.js} +7 -7
  28. package/dist/{chunk-L3IKYN3J.js.map → chunk-2FQOQMS6.js.map} +1 -1
  29. package/dist/{chunk-QZNAGWZB.js → chunk-2HD6TA3O.js} +4 -4
  30. package/dist/{chunk-QZNAGWZB.js.map → chunk-2HD6TA3O.js.map} +1 -1
  31. package/dist/chunk-2NSBFMTP.js +125 -0
  32. package/dist/chunk-2NSBFMTP.js.map +1 -0
  33. package/dist/{chunk-VDCITFZG.js → chunk-2ZWBFVYY.js} +3 -3
  34. package/dist/{chunk-VDCITFZG.js.map → chunk-2ZWBFVYY.js.map} +1 -1
  35. package/dist/{chunk-EGDZGSHA.js → chunk-3EVLQVBC.js} +3 -3
  36. package/dist/{chunk-EGDZGSHA.js.map → chunk-3EVLQVBC.js.map} +1 -1
  37. package/dist/{chunk-BA4I3QL5.js → chunk-3ZIXLRXZ.js} +4 -3
  38. package/dist/chunk-3ZIXLRXZ.js.map +1 -0
  39. package/dist/{chunk-BUZTJ3KC.js → chunk-47PZ7WGA.js} +23 -19
  40. package/dist/chunk-47PZ7WGA.js.map +1 -0
  41. package/dist/{chunk-ISMIJ5DH.js → chunk-4T2ZBJFM.js} +3 -3
  42. package/dist/{chunk-ISMIJ5DH.js.map → chunk-4T2ZBJFM.js.map} +1 -1
  43. package/dist/chunk-5AQKUZ6R.js +35 -0
  44. package/dist/chunk-5AQKUZ6R.js.map +1 -0
  45. package/dist/{chunk-F5OHOWZU.js → chunk-5I6WYO5R.js} +3 -3
  46. package/dist/{chunk-F5OHOWZU.js.map → chunk-5I6WYO5R.js.map} +1 -1
  47. package/dist/{chunk-Q5IK2DV4.js → chunk-6PODNJTJ.js} +4 -4
  48. package/dist/{chunk-Q5IK2DV4.js.map → chunk-6PODNJTJ.js.map} +1 -1
  49. package/dist/{chunk-UTSZKJAL.js → chunk-7EMUKPPG.js} +8 -8
  50. package/dist/{chunk-UTSZKJAL.js.map → chunk-7EMUKPPG.js.map} +1 -1
  51. package/dist/{chunk-ULNZHOMA.js → chunk-AG3VELYX.js} +5 -14
  52. package/dist/chunk-AG3VELYX.js.map +1 -0
  53. package/dist/{chunk-BKF6CKUK.js → chunk-BBKNHH72.js} +7 -7
  54. package/dist/{chunk-BKF6CKUK.js.map → chunk-BBKNHH72.js.map} +1 -1
  55. package/dist/{chunk-OZ2VAF7L.js → chunk-BBYLFHZZ.js} +5 -5
  56. package/dist/{chunk-OZ2VAF7L.js.map → chunk-BBYLFHZZ.js.map} +1 -1
  57. package/dist/chunk-BG72VA7O.js +33 -0
  58. package/dist/chunk-BG72VA7O.js.map +1 -0
  59. package/dist/{chunk-XSYO3MVO.js → chunk-BMIYI2TC.js} +7 -7
  60. package/dist/{chunk-XSYO3MVO.js.map → chunk-BMIYI2TC.js.map} +1 -1
  61. package/dist/{chunk-D5POEOY7.js → chunk-BNM3RSDY.js} +24 -19
  62. package/dist/chunk-BNM3RSDY.js.map +1 -0
  63. package/dist/{chunk-6VJAOYIG.js → chunk-BSNVQQTV.js} +25 -20
  64. package/dist/chunk-BSNVQQTV.js.map +1 -0
  65. package/dist/chunk-BSSRVJ2C.js +14 -0
  66. package/dist/chunk-BSSRVJ2C.js.map +1 -0
  67. package/dist/{chunk-WJ6M5YKH.js → chunk-CQQDYYFS.js} +5 -5
  68. package/dist/{chunk-WJ6M5YKH.js.map → chunk-CQQDYYFS.js.map} +1 -1
  69. package/dist/{chunk-2AFEQOCJ.js → chunk-DAX5PVBJ.js} +10 -8
  70. package/dist/chunk-DAX5PVBJ.js.map +1 -0
  71. package/dist/{chunk-HHYQ3GXP.js → chunk-DFPIMLGD.js} +7 -7
  72. package/dist/{chunk-HHYQ3GXP.js.map → chunk-DFPIMLGD.js.map} +1 -1
  73. package/dist/{chunk-YN4M6XL2.js → chunk-DH7N2ZS6.js} +7 -7
  74. package/dist/{chunk-YN4M6XL2.js.map → chunk-DH7N2ZS6.js.map} +1 -1
  75. package/dist/{chunk-MDFK6L72.js → chunk-DMUWIPJR.js} +3 -3
  76. package/dist/{chunk-MDFK6L72.js.map → chunk-DMUWIPJR.js.map} +1 -1
  77. package/dist/{chunk-G557DGIX.js → chunk-E2BVDZKJ.js} +3 -3
  78. package/dist/{chunk-G557DGIX.js.map → chunk-E2BVDZKJ.js.map} +1 -1
  79. package/dist/{chunk-6WHDXMTW.js → chunk-EDJC6HIP.js} +3 -3
  80. package/dist/{chunk-6WHDXMTW.js.map → chunk-EDJC6HIP.js.map} +1 -1
  81. package/dist/{chunk-4NFEM2SU.js → chunk-EMZCVV5Y.js} +9 -3
  82. package/dist/chunk-EMZCVV5Y.js.map +1 -0
  83. package/dist/chunk-FI2JE6AS.js +15 -0
  84. package/dist/chunk-FI2JE6AS.js.map +1 -0
  85. package/dist/{chunk-A5UHVGRB.js → chunk-G4YT6X7N.js} +4 -4
  86. package/dist/{chunk-A5UHVGRB.js.map → chunk-G4YT6X7N.js.map} +1 -1
  87. package/dist/chunk-G65WTGYO.js +31 -0
  88. package/dist/chunk-G65WTGYO.js.map +1 -0
  89. package/dist/{chunk-ZJQ7DRH4.js → chunk-GFYWUMYH.js} +5 -5
  90. package/dist/{chunk-ZJQ7DRH4.js.map → chunk-GFYWUMYH.js.map} +1 -1
  91. package/dist/chunk-HIWHBRFG.js +30 -0
  92. package/dist/chunk-HIWHBRFG.js.map +1 -0
  93. package/dist/{chunk-U5SLA2ZP.js → chunk-HSLV626U.js} +7 -7
  94. package/dist/{chunk-U5SLA2ZP.js.map → chunk-HSLV626U.js.map} +1 -1
  95. package/dist/{chunk-BDHKGP3S.js → chunk-J3QGK6MX.js} +33 -33
  96. package/dist/{chunk-BDHKGP3S.js.map → chunk-J3QGK6MX.js.map} +1 -1
  97. package/dist/{chunk-IHSOANVC.js → chunk-KTP26VPJ.js} +7 -7
  98. package/dist/{chunk-IHSOANVC.js.map → chunk-KTP26VPJ.js.map} +1 -1
  99. package/dist/{chunk-P3EJRH4P.js → chunk-LXB5FIAQ.js} +4 -4
  100. package/dist/{chunk-P3EJRH4P.js.map → chunk-LXB5FIAQ.js.map} +1 -1
  101. package/dist/{chunk-PDGAMTBR.js → chunk-M3RBXFYG.js} +39 -20
  102. package/dist/chunk-M3RBXFYG.js.map +1 -0
  103. package/dist/{chunk-3DLNIUBY.js → chunk-M6VUQK73.js} +5 -5
  104. package/dist/{chunk-3DLNIUBY.js.map → chunk-M6VUQK73.js.map} +1 -1
  105. package/dist/{chunk-5423O35D.js → chunk-MAJPROT7.js} +7 -7
  106. package/dist/{chunk-5423O35D.js.map → chunk-MAJPROT7.js.map} +1 -1
  107. package/dist/{chunk-RSJK46ZE.js → chunk-MLUDCL3P.js} +4 -4
  108. package/dist/{chunk-RSJK46ZE.js.map → chunk-MLUDCL3P.js.map} +1 -1
  109. package/dist/{chunk-4COFDYBY.js → chunk-MZZNNXAB.js} +27 -21
  110. package/dist/chunk-MZZNNXAB.js.map +1 -0
  111. package/dist/{chunk-DVA6QQUF.js → chunk-O3HZW2GM.js} +3 -3
  112. package/dist/{chunk-DVA6QQUF.js.map → chunk-O3HZW2GM.js.map} +1 -1
  113. package/dist/{chunk-CNJ4DIYS.js → chunk-O7RJQUAJ.js} +3 -3
  114. package/dist/{chunk-CNJ4DIYS.js.map → chunk-O7RJQUAJ.js.map} +1 -1
  115. package/dist/{chunk-IJ2DAVSD.js → chunk-OM5ELPM6.js} +3 -3
  116. package/dist/{chunk-IJ2DAVSD.js.map → chunk-OM5ELPM6.js.map} +1 -1
  117. package/dist/chunk-OPFCKUFX.js +31 -0
  118. package/dist/chunk-OPFCKUFX.js.map +1 -0
  119. package/dist/{chunk-2JSOXG2M.js → chunk-P37C3MVF.js} +3 -3
  120. package/dist/{chunk-2JSOXG2M.js.map → chunk-P37C3MVF.js.map} +1 -1
  121. package/dist/chunk-P5BDKYBC.js +3 -0
  122. package/dist/chunk-P5BDKYBC.js.map +1 -0
  123. package/dist/{chunk-LBAWZ4EV.js → chunk-PUTVO6HG.js} +4 -4
  124. package/dist/{chunk-LBAWZ4EV.js.map → chunk-PUTVO6HG.js.map} +1 -1
  125. package/dist/{chunk-26MSDS43.js → chunk-Q2CFVQ2U.js} +4 -4
  126. package/dist/{chunk-26MSDS43.js.map → chunk-Q2CFVQ2U.js.map} +1 -1
  127. package/dist/{chunk-24JBIV3A.js → chunk-QKAXRXU5.js} +4 -4
  128. package/dist/{chunk-24JBIV3A.js.map → chunk-QKAXRXU5.js.map} +1 -1
  129. package/dist/{chunk-OWD47AWI.js → chunk-QZPKTG4A.js} +3 -3
  130. package/dist/{chunk-OWD47AWI.js.map → chunk-QZPKTG4A.js.map} +1 -1
  131. package/dist/{chunk-FLZGOGER.js → chunk-RNI5G42M.js} +4 -4
  132. package/dist/{chunk-FLZGOGER.js.map → chunk-RNI5G42M.js.map} +1 -1
  133. package/dist/{chunk-72EZ2VUO.js → chunk-ROU5ZHN7.js} +4 -4
  134. package/dist/{chunk-72EZ2VUO.js.map → chunk-ROU5ZHN7.js.map} +1 -1
  135. package/dist/{chunk-SH6K4PUU.js → chunk-RP5UWF2G.js} +3 -3
  136. package/dist/{chunk-SH6K4PUU.js.map → chunk-RP5UWF2G.js.map} +1 -1
  137. package/dist/{chunk-AED7KSBM.js → chunk-RRG2HJMY.js} +6 -6
  138. package/dist/{chunk-AED7KSBM.js.map → chunk-RRG2HJMY.js.map} +1 -1
  139. package/dist/{chunk-PR7NSNQG.js → chunk-RY2BSDOR.js} +4 -4
  140. package/dist/{chunk-PR7NSNQG.js.map → chunk-RY2BSDOR.js.map} +1 -1
  141. package/dist/{chunk-QSSKPIG5.js → chunk-SIMI5XYE.js} +3 -3
  142. package/dist/{chunk-QSSKPIG5.js.map → chunk-SIMI5XYE.js.map} +1 -1
  143. package/dist/{chunk-TTDHGQEC.js → chunk-SQO7BO3Y.js} +3 -3
  144. package/dist/{chunk-TTDHGQEC.js.map → chunk-SQO7BO3Y.js.map} +1 -1
  145. package/dist/{chunk-T5NFIPTU.js → chunk-SXPLYH4N.js} +3 -3
  146. package/dist/{chunk-T5NFIPTU.js.map → chunk-SXPLYH4N.js.map} +1 -1
  147. package/dist/{chunk-EEFQYVLF.js → chunk-UANHHEWY.js} +4 -4
  148. package/dist/{chunk-EEFQYVLF.js.map → chunk-UANHHEWY.js.map} +1 -1
  149. package/dist/{chunk-MF47DACR.js → chunk-UGSA7FSW.js} +7 -7
  150. package/dist/{chunk-MF47DACR.js.map → chunk-UGSA7FSW.js.map} +1 -1
  151. package/dist/{chunk-TAOFFAG3.js → chunk-UJXGDUKJ.js} +3 -3
  152. package/dist/{chunk-TAOFFAG3.js.map → chunk-UJXGDUKJ.js.map} +1 -1
  153. package/dist/chunk-VXHJLWMA.js +115 -0
  154. package/dist/chunk-VXHJLWMA.js.map +1 -0
  155. package/dist/chunk-W64OQYC4.js +13 -0
  156. package/dist/chunk-W64OQYC4.js.map +1 -0
  157. package/dist/{chunk-C7WXL7UR.js → chunk-WAVBQYPE.js} +4 -4
  158. package/dist/{chunk-C7WXL7UR.js.map → chunk-WAVBQYPE.js.map} +1 -1
  159. package/dist/{chunk-CYBWPBXJ.js → chunk-WE6RG6OC.js} +4 -4
  160. package/dist/{chunk-CYBWPBXJ.js.map → chunk-WE6RG6OC.js.map} +1 -1
  161. package/dist/{chunk-Z7KH65RZ.js → chunk-WKDCI3NI.js} +3 -3
  162. package/dist/{chunk-Z7KH65RZ.js.map → chunk-WKDCI3NI.js.map} +1 -1
  163. package/dist/chunk-XFKSJRWM.js +14 -0
  164. package/dist/chunk-XFKSJRWM.js.map +1 -0
  165. package/dist/chunk-XHHJTKSP.js +33 -0
  166. package/dist/chunk-XHHJTKSP.js.map +1 -0
  167. package/dist/chunk-XVT5QOAL.js +30 -0
  168. package/dist/chunk-XVT5QOAL.js.map +1 -0
  169. package/dist/{chunk-VE2XZSKP.js → chunk-YA7RWTAE.js} +3 -3
  170. package/dist/{chunk-VE2XZSKP.js.map → chunk-YA7RWTAE.js.map} +1 -1
  171. package/dist/chunk-YAHKWOSP.js +35 -0
  172. package/dist/chunk-YAHKWOSP.js.map +1 -0
  173. package/dist/{chunk-G4OYYXVP.js → chunk-YJBKWUCE.js} +4 -3
  174. package/dist/chunk-YJBKWUCE.js.map +1 -0
  175. package/dist/cnaes.d.ts +4 -2
  176. package/dist/cnaes.js +3 -2
  177. package/dist/cnaes.js.map +1 -1
  178. package/dist/cnh.d.ts +2 -2
  179. package/dist/cnh.js +5 -5
  180. package/dist/cnis.d.ts +50 -0
  181. package/dist/cnis.js +7 -0
  182. package/dist/cnis.js.map +1 -0
  183. package/dist/cnpj-motivos.d.ts +52 -0
  184. package/dist/cnpj-motivos.js +292 -0
  185. package/dist/cnpj-motivos.js.map +1 -0
  186. package/dist/cnpj.d.ts +2 -2
  187. package/dist/cnpj.js +5 -5
  188. package/dist/compare.d.ts +3 -3
  189. package/dist/compare.js +32 -30
  190. package/dist/cpf.d.ts +2 -2
  191. package/dist/cpf.js +5 -5
  192. package/dist/cst.d.ts +73 -0
  193. package/dist/cst.js +482 -0
  194. package/dist/cst.js.map +1 -0
  195. package/dist/data-catalog.d.ts +2 -2
  196. package/dist/data-catalog.js +45 -29
  197. package/dist/data-catalog.js.map +1 -1
  198. package/dist/detect.d.ts +2 -2
  199. package/dist/detect.js +28 -26
  200. package/dist/diff.d.ts +3 -3
  201. package/dist/diff.js +32 -30
  202. package/dist/ean.d.ts +43 -0
  203. package/dist/ean.js +6 -0
  204. package/dist/ean.js.map +1 -0
  205. package/dist/esocial.d.ts +45 -0
  206. package/dist/esocial.js +387 -0
  207. package/dist/esocial.js.map +1 -0
  208. package/dist/feriados.d.ts +1 -1
  209. package/dist/generate.d.ts +1 -1
  210. package/dist/generate.js +41 -39
  211. package/dist/ibge.d.ts +34 -2
  212. package/dist/ibge.js +109 -1
  213. package/dist/ibge.js.map +1 -1
  214. package/dist/ibpt.d.ts +74 -0
  215. package/dist/ibpt.js +166 -0
  216. package/dist/ibpt.js.map +1 -0
  217. package/dist/incoterms.d.ts +1 -1
  218. package/dist/incoterms.js +1 -1
  219. package/dist/{index-CJ5ACErT.d.ts → index-BmoilwS2.d.ts} +2 -2
  220. package/dist/index.d.ts +11 -9
  221. package/dist/index.js +77 -67
  222. package/dist/index.js.map +1 -1
  223. package/dist/{inscricao-estadual-produtor-rural-BNAyLQPY.d.ts → inscricao-estadual-produtor-rural-Hfq6jN1n.d.ts} +1 -1
  224. package/dist/inscricao-estadual-produtor-rural.d.ts +2 -2
  225. package/dist/inscricao-estadual-produtor-rural.js +3 -3
  226. package/dist/inscricao-estadual.d.ts +3 -3
  227. package/dist/inscricao-estadual.js +4 -4
  228. package/dist/lc116.d.ts +42 -0
  229. package/dist/lc116.js +866 -0
  230. package/dist/lc116.js.map +1 -0
  231. package/dist/mask.d.ts +3 -3
  232. package/dist/mask.js +44 -40
  233. package/dist/moedas.d.ts +1 -1
  234. package/dist/moedas.js +1 -1
  235. package/dist/natureza-juridica.d.ts +1 -1
  236. package/dist/natureza-juridica.js +1 -1
  237. package/dist/nbs.d.ts +1 -1
  238. package/dist/nbs.js +1 -1
  239. package/dist/ncm.d.ts +1 -1
  240. package/dist/ncm.js +1 -1
  241. package/dist/nfe-chave.d.ts +2 -2
  242. package/dist/nfe-chave.js +3 -3
  243. package/dist/paises-bacen.d.ts +1 -1
  244. package/dist/paises-bacen.js +1 -1
  245. package/dist/pis-pasep.d.ts +2 -2
  246. package/dist/pis-pasep.js +5 -3
  247. package/dist/{pix-QsM0lMas.d.ts → pix-BcPQzXRx.d.ts} +1 -1
  248. package/dist/pix.d.ts +2 -2
  249. package/dist/pix.js +9 -9
  250. package/dist/placa.d.ts +2 -2
  251. package/dist/placa.js +4 -4
  252. package/dist/pncp-reference.d.ts +1 -1
  253. package/dist/pncp-reference.js +1 -1
  254. package/dist/portos.d.ts +1 -1
  255. package/dist/portos.js +1 -1
  256. package/dist/processo-judicial.d.ts +2 -2
  257. package/dist/processo-judicial.js +3 -3
  258. package/dist/ptax.d.ts +53 -0
  259. package/dist/ptax.js +485 -0
  260. package/dist/ptax.js.map +1 -0
  261. package/dist/renavam.d.ts +2 -2
  262. package/dist/renavam.js +5 -5
  263. package/dist/rg.d.ts +2 -2
  264. package/dist/rg.js +2 -2
  265. package/dist/sanitize.d.ts +2 -2
  266. package/dist/sanitize.js +27 -25
  267. package/dist/simples-nacional.d.ts +67 -0
  268. package/dist/simples-nacional.js +178 -0
  269. package/dist/simples-nacional.js.map +1 -0
  270. package/dist/telefone.d.ts +3 -3
  271. package/dist/telefone.js +4 -4
  272. package/dist/titulo-eleitor.d.ts +2 -2
  273. package/dist/titulo-eleitor.js +5 -5
  274. package/dist/transparencia-snapshots.d.ts +1 -1
  275. package/dist/transparencia-snapshots.js +3 -3
  276. package/dist/transparencia-snapshots.js.map +1 -1
  277. package/dist/tse-municipios.d.ts +1 -1
  278. package/dist/{types-CCKLomYy.d.ts → types-CnePu8im.d.ts} +1 -1
  279. package/dist/{types-CQvCmvGu.d.ts → types-DTtrW1Km.d.ts} +2 -2
  280. package/dist/{validation-result-hfVg2-Mc.d.ts → validation-result-Rb7C0_xj.d.ts} +30 -2
  281. package/package.json +52 -2
  282. package/dist/chunk-2AFEQOCJ.js.map +0 -1
  283. package/dist/chunk-4COFDYBY.js.map +0 -1
  284. package/dist/chunk-4NFEM2SU.js.map +0 -1
  285. package/dist/chunk-6VJAOYIG.js.map +0 -1
  286. package/dist/chunk-BA4I3QL5.js.map +0 -1
  287. package/dist/chunk-BUZTJ3KC.js.map +0 -1
  288. package/dist/chunk-D5POEOY7.js.map +0 -1
  289. package/dist/chunk-G4OYYXVP.js.map +0 -1
  290. package/dist/chunk-PDGAMTBR.js.map +0 -1
  291. package/dist/chunk-ULNZHOMA.js.map +0 -1
  292. package/dist/chunk-WAYYRZ2L.js +0 -23
  293. 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":";;;AAIO,SAAS,SAAS,KAAA,EAAuB;AAC9C,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAChC;;;ACLO,IAAM,uBAAA,GAA0B;AAEhC,IAAM,YAAA,GAAe;AACrB,IAAM,aAAA,GAAgB;AAGtB,IAAM,aAAA,GAAgB;AACtB,IAAM,oBAAA,GAAuB;AAG7B,IAAM,YAAA,GAAe;AACrB,IAAM,mBAAA,GAAsB;;;ACP5B,SAAS,sBAAsB,kBAAA,EAAoC;AACxE,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,kBAAA,CAAmB,QAAQ,CAAA,EAAA,EAAK;AAClD,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,kBAAA,CAAmB,MAAA,CAAO,CAAC,CAAC,CAAA;AACjD,IAAA,MAAM,MAAA,GAAS,CAAA,GAAI,CAAA,KAAM,CAAA,GAAI,CAAA,GAAI,CAAA;AACjC,IAAA,GAAA,IAAO,KAAA,GAAQ,MAAA;AAAA,EACjB;AACA,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,6BAA6B,kBAAA,EAAoC;AAC/E,EAAA,MAAM,SAAA,GAAY,qBAAA,CAAsB,kBAAkB,CAAA,GAAI,EAAA;AAC9D,EAAA,OAAO,SAAA,KAAc,CAAA,GAAI,CAAA,GAAI,EAAA,GAAK,SAAA;AACpC;AAGO,SAAS,kBAAkB,MAAA,EAAyB;AACzD,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAC/B,EAAA,MAAM,QAAA,GAAW,6BAA6B,IAAI,CAAA;AAClD,EAAA,OAAO,aAAa,MAAA,CAAO,MAAA,CAAO,OAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAC,CAAA;AAC7D;;;ACrBO,SAAS,gBAAgB,KAAA,EAAiC;AAC/D,EAAA,MAAM,QAAA,GAAW,SAAS,KAAK,CAAA;AAC/B,EAAA,IAAI,QAAA,CAAS,WAAW,aAAA,EAAe;AACrC,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,IAAI,QAAA,CAAS,WAAW,YAAA,EAAc;AACpC,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;;;ACVO,SAAS,aAAa,SAAA,EAA2B;AACtD,EAAA,IAAI,SAAA,CAAU,WAAW,aAAA,EAAe;AACtC,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,SAAA,CAAU,WAAW,YAAA,EAAc;AACrC,IAAA,OAAO,CAAA,EAAG,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,EACvD;AACA,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,cAAA,EAAiB,YAAY,CAAA,IAAA,EAAO,aAAa,CAAA,qBAAA,CAAuB,CAAA;AAC1F;;;ACeA,SAAS,OAAA,CAAQ,MAA4B,OAAA,EAA+B;AAC1E,EAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,IAAA,EAAM,OAAA,EAAQ;AACpC;AAEA,SAAS,kBAAkB,KAAA,EAAwB;AACjD,EAAA,MAAM,KAAA,GAAQ,MAAM,CAAC,CAAA;AACrB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,KAAA,EAAO;AACtB,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,iBAAA,CAAkB,OAAe,QAAA,EAAuC;AAC/E,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,OAAO,OAAA,CAAQ,eAAe,oBAAoB,CAAA;AAAA,EACpD;AAEA,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA;AAC9C,EAAA,IAAI,QAAA,CAAS,IAAA,CAAK,WAAW,CAAA,EAAG;AAC9B,IAAA,OAAO,OAAA,CAAQ,qBAAqB,iCAAiC,CAAA;AAAA,EACvE;AAEA,EAAA,IAAI,QAAA,CAAS,MAAA,KAAW,YAAA,IAAgB,QAAA,CAAS,WAAW,aAAA,EAAe;AACzE,IAAA,OAAO,OAAA;AAAA,MACL,gBAAA;AAAA,MACA,CAAA,cAAA,EAAiB,YAAY,CAAA,YAAA,EAAe,aAAa,CAAA,oCAAA;AAAA,KAC3D;AAAA,EACF;AAEA,EAAA,IAAI,iBAAA,CAAkB,QAAQ,CAAA,EAAG;AAC/B,IAAA,OAAO,OAAA,CAAQ,yBAAyB,0CAA0C,CAAA;AAAA,EACpF;AAEA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,mBAAmB,KAAA,EAAwB;AACzD,EAAA,MAAM,QAAA,GAAW,SAAS,KAAK,CAAA;AAC/B,EAAA,IAAI,QAAA,CAAS,MAAA,KAAW,YAAA,IAAgB,QAAA,CAAS,WAAW,aAAA,EAAe;AACzE,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA;AAC9C,EAAA,IAAI,QAAA,CAAS,IAAA,CAAK,WAAW,CAAA,EAAG;AAC9B,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,kBAAkB,QAAQ,CAAA;AACnC;AAEO,SAAS,WAAW,KAAA,EAAwB;AACjD,EAAA,OAAO,WAAA,CAAY,KAAK,CAAA,CAAE,EAAA;AAC5B;AAEO,SAAS,YAAY,KAAA,EAAoC;AAC9D,EAAA,MAAM,QAAA,GAAW,SAAS,KAAK,CAAA;AAC/B,EAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,KAAA,EAAO,QAAQ,CAAA;AACpD,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,OAAO,UAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,iBAAA,CAAkB,QAAQ,CAAA,EAAG;AAChC,IAAA,OAAO,OAAA,CAAQ,uBAAuB,4BAA4B,CAAA;AAAA,EACpE;AAEA,EAAA,MAAM,MAAA,GAAoB,QAAA,CAAS,MAAA,KAAW,aAAA,GAAgB,QAAA,GAAW,OAAA;AAEzE,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,IAAA;AAAA,IACJ,KAAA,EAAO,SAAS,QAAQ,CAAA;AAAA,IACxB;AAAA,GACF;AACF","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-4NFEM2SU.js';
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-VDCITFZG.js.map
198
- //# sourceMappingURL=chunk-VDCITFZG.js.map
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-TAOFFAG3.js';
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-EGDZGSHA.js.map
14
- //# sourceMappingURL=chunk-EGDZGSHA.js.map
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-EGDZGSHA.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
+ {"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-4COFDYBY.js';
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-BA4I3QL5.js.map
43
- //# sourceMappingURL=chunk-BA4I3QL5.js.map
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-DVA6QQUF.js';
2
- import { formatTelefone } from './chunk-FX6JEBWO.js';
3
- import { formatTituloEleitor } from './chunk-F5OHOWZU.js';
4
- import { formatPisPasep } from './chunk-WAYYRZ2L.js';
5
- import { formatPixKey } from './chunk-SH6K4PUU.js';
6
- import { formatPlaca } from './chunk-TTDHGQEC.js';
7
- import { formatRenavam } from './chunk-MDFK6L72.js';
8
- import { formatNfeChave } from './chunk-Z7KH65RZ.js';
9
- import { formatIeProdutorRural } from './chunk-EGDZGSHA.js';
10
- import { formatCnh } from './chunk-T5NFIPTU.js';
11
- import { formatCnpj } from './chunk-FLZGOGER.js';
12
- import { formatCpf } from './chunk-C7WXL7UR.js';
13
- import { formatRg } from './chunk-G557DGIX.js';
14
- import { formatInscricaoEstadual } from './chunk-P3EJRH4P.js';
15
- import { formatBoleto } from './chunk-LPGSPM53.js';
16
- import { formatCartaoCredito } from './chunk-OWD47AWI.js';
17
- import { formatCep } from './chunk-6WHDXMTW.js';
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-BUZTJ3KC.js.map
119
- //# sourceMappingURL=chunk-BUZTJ3KC.js.map
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-RSJK46ZE.js';
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-ISMIJ5DH.js.map
14
- //# sourceMappingURL=chunk-ISMIJ5DH.js.map
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-ISMIJ5DH.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"]}
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-26MSDS43.js';
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-F5OHOWZU.js.map
27
- //# sourceMappingURL=chunk-F5OHOWZU.js.map
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-F5OHOWZU.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"]}
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: 154,
15
+ adicionados: 0,
16
16
  removidos: 0,
17
17
  alterados: 0,
18
- comparadoCom: null
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-Q5IK2DV4.js.map
30
- //# sourceMappingURL=chunk-Q5IK2DV4.js.map
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,GAAA;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-Q5IK2DV4.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\": 154,\n \"removidos\": 0,\n \"alterados\": 0,\n \"comparadoCom\": null\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
+ {"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 { applyCnpjMask } from './chunk-ISMIJ5DH.js';
2
- import { validateCnpj, detectCnpjFormat } from './chunk-RSJK46ZE.js';
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 { brandPixKey } from './chunk-4NFEM2SU.js';
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-UTSZKJAL.js.map
255
- //# sourceMappingURL=chunk-UTSZKJAL.js.map
254
+ //# sourceMappingURL=chunk-7EMUKPPG.js.map
255
+ //# sourceMappingURL=chunk-7EMUKPPG.js.map