@br-validators/core 0.12.0-alpha.3 → 1.0.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 (162) hide show
  1. package/README.md +83 -12
  2. package/dist/batch.d.ts +28 -0
  3. package/dist/batch.js +29 -0
  4. package/dist/batch.js.map +1 -0
  5. package/dist/boleto.d.ts +58 -5
  6. package/dist/boleto.js +6 -3
  7. package/dist/brcode.d.ts +15 -3
  8. package/dist/brcode.js +8 -8
  9. package/dist/cartao-credito.d.ts +2 -2
  10. package/dist/cartao-credito.js +3 -3
  11. package/dist/cep.d.ts +2 -2
  12. package/dist/cep.js +4 -4
  13. package/dist/{chunk-WPL47PWJ.js → chunk-3LMDBXU6.js} +3 -3
  14. package/dist/{chunk-WPL47PWJ.js.map → chunk-3LMDBXU6.js.map} +1 -1
  15. package/dist/chunk-4J5IMD7B.js +3 -0
  16. package/dist/chunk-4J5IMD7B.js.map +1 -0
  17. package/dist/{chunk-BFZPCEYB.js → chunk-54UWHK5L.js} +3 -3
  18. package/dist/{chunk-BFZPCEYB.js.map → chunk-54UWHK5L.js.map} +1 -1
  19. package/dist/{chunk-F6PTZY4O.js → chunk-63G7QO73.js} +3 -3
  20. package/dist/{chunk-F6PTZY4O.js.map → chunk-63G7QO73.js.map} +1 -1
  21. package/dist/{chunk-3QP6R46N.js → chunk-665E36SC.js} +4 -4
  22. package/dist/{chunk-3QP6R46N.js.map → chunk-665E36SC.js.map} +1 -1
  23. package/dist/{chunk-AK5GVYQ5.js → chunk-ANWQBKGN.js} +3 -3
  24. package/dist/{chunk-AK5GVYQ5.js.map → chunk-ANWQBKGN.js.map} +1 -1
  25. package/dist/{chunk-D36RM7OD.js → chunk-AO6UTQ4A.js} +3 -3
  26. package/dist/{chunk-D36RM7OD.js.map → chunk-AO6UTQ4A.js.map} +1 -1
  27. package/dist/chunk-AU6TW3GH.js +136 -0
  28. package/dist/chunk-AU6TW3GH.js.map +1 -0
  29. package/dist/{chunk-XW5G2RAL.js → chunk-B6A7VF4R.js} +3 -3
  30. package/dist/{chunk-XW5G2RAL.js.map → chunk-B6A7VF4R.js.map} +1 -1
  31. package/dist/chunk-BFMRXXFE.js +99 -0
  32. package/dist/chunk-BFMRXXFE.js.map +1 -0
  33. package/dist/{chunk-Y6IW2LMW.js → chunk-CDNOUZEI.js} +3 -3
  34. package/dist/{chunk-Y6IW2LMW.js.map → chunk-CDNOUZEI.js.map} +1 -1
  35. package/dist/{chunk-XUO7FV6Z.js → chunk-CSRBRKXY.js} +3 -3
  36. package/dist/{chunk-XUO7FV6Z.js.map → chunk-CSRBRKXY.js.map} +1 -1
  37. package/dist/{chunk-DJUANFIK.js → chunk-CSVGWTCG.js} +3 -3
  38. package/dist/{chunk-DJUANFIK.js.map → chunk-CSVGWTCG.js.map} +1 -1
  39. package/dist/{chunk-5UL3M7IU.js → chunk-DAR6VOMT.js} +3 -3
  40. package/dist/{chunk-5UL3M7IU.js.map → chunk-DAR6VOMT.js.map} +1 -1
  41. package/dist/chunk-E2EFGMWA.js +200 -0
  42. package/dist/chunk-E2EFGMWA.js.map +1 -0
  43. package/dist/{chunk-KSLDM5AD.js → chunk-EVULAGR5.js} +3 -3
  44. package/dist/{chunk-KSLDM5AD.js.map → chunk-EVULAGR5.js.map} +1 -1
  45. package/dist/{chunk-YXELVV37.js → chunk-FBARVLLP.js} +4 -4
  46. package/dist/{chunk-YXELVV37.js.map → chunk-FBARVLLP.js.map} +1 -1
  47. package/dist/chunk-FKFRB3RJ.js +135 -0
  48. package/dist/chunk-FKFRB3RJ.js.map +1 -0
  49. package/dist/chunk-G6OBZRZM.js +131 -0
  50. package/dist/chunk-G6OBZRZM.js.map +1 -0
  51. package/dist/{chunk-MK7OJUF5.js → chunk-H3MLGGFI.js} +8 -8
  52. package/dist/{chunk-MK7OJUF5.js.map → chunk-H3MLGGFI.js.map} +1 -1
  53. package/dist/chunk-HUIMOB5E.js +41 -0
  54. package/dist/chunk-HUIMOB5E.js.map +1 -0
  55. package/dist/{chunk-WLE2ENQA.js → chunk-I66ZRSEN.js} +3 -3
  56. package/dist/{chunk-WLE2ENQA.js.map → chunk-I66ZRSEN.js.map} +1 -1
  57. package/dist/{chunk-Q7B5VOPW.js → chunk-I7DM47IR.js} +243 -37
  58. package/dist/chunk-I7DM47IR.js.map +1 -0
  59. package/dist/{chunk-GRDUTHNX.js → chunk-IYOPXJLY.js} +3 -3
  60. package/dist/{chunk-GRDUTHNX.js.map → chunk-IYOPXJLY.js.map} +1 -1
  61. package/dist/{chunk-4Y2FBO57.js → chunk-JKDU7QYP.js} +3 -3
  62. package/dist/{chunk-4Y2FBO57.js.map → chunk-JKDU7QYP.js.map} +1 -1
  63. package/dist/{chunk-KH7DWOUA.js → chunk-JLCQ7MGC.js} +3 -3
  64. package/dist/{chunk-KH7DWOUA.js.map → chunk-JLCQ7MGC.js.map} +1 -1
  65. package/dist/chunk-KBNWI6GE.js +3 -0
  66. package/dist/chunk-KBNWI6GE.js.map +1 -0
  67. package/dist/chunk-KLPONHBL.js +3 -0
  68. package/dist/chunk-KLPONHBL.js.map +1 -0
  69. package/dist/{chunk-CDGRHI7W.js → chunk-LAEUXOF6.js} +3 -3
  70. package/dist/{chunk-CDGRHI7W.js.map → chunk-LAEUXOF6.js.map} +1 -1
  71. package/dist/{chunk-ZAUZRIOU.js → chunk-MESOO5GZ.js} +3 -3
  72. package/dist/{chunk-ZAUZRIOU.js.map → chunk-MESOO5GZ.js.map} +1 -1
  73. package/dist/chunk-N2WVO3GF.js +128 -0
  74. package/dist/chunk-N2WVO3GF.js.map +1 -0
  75. package/dist/chunk-N6N5ATLY.js +93 -0
  76. package/dist/chunk-N6N5ATLY.js.map +1 -0
  77. package/dist/chunk-N6RQICAP.js +220 -0
  78. package/dist/chunk-N6RQICAP.js.map +1 -0
  79. package/dist/{chunk-MSLJF2FM.js → chunk-NUQSMT4Y.js} +2 -2
  80. package/dist/chunk-NUQSMT4Y.js.map +1 -0
  81. package/dist/{chunk-KQDLIGSG.js → chunk-P2KNN6ZR.js} +3 -3
  82. package/dist/{chunk-KQDLIGSG.js.map → chunk-P2KNN6ZR.js.map} +1 -1
  83. package/dist/{chunk-G2Y63PIF.js → chunk-PD7ZTWMM.js} +3 -3
  84. package/dist/{chunk-G2Y63PIF.js.map → chunk-PD7ZTWMM.js.map} +1 -1
  85. package/dist/{chunk-LYBFUKHR.js → chunk-RMTHCPIV.js} +4 -4
  86. package/dist/{chunk-LYBFUKHR.js.map → chunk-RMTHCPIV.js.map} +1 -1
  87. package/dist/chunk-SAZA3V2U.js +100 -0
  88. package/dist/chunk-SAZA3V2U.js.map +1 -0
  89. package/dist/{chunk-2JJS46FM.js → chunk-TE6NSONR.js} +3 -3
  90. package/dist/{chunk-2JJS46FM.js.map → chunk-TE6NSONR.js.map} +1 -1
  91. package/dist/{chunk-NHLLC6WH.js → chunk-TJCE4TVX.js} +4 -4
  92. package/dist/{chunk-NHLLC6WH.js.map → chunk-TJCE4TVX.js.map} +1 -1
  93. package/dist/{chunk-WCQUQ2WX.js → chunk-V7UJ55KW.js} +47 -5
  94. package/dist/chunk-V7UJ55KW.js.map +1 -0
  95. package/dist/{chunk-IQGRFAQV.js → chunk-VSW3NBJQ.js} +3 -3
  96. package/dist/{chunk-IQGRFAQV.js.map → chunk-VSW3NBJQ.js.map} +1 -1
  97. package/dist/{chunk-6QJFMOIX.js → chunk-VWVQWN2G.js} +3 -3
  98. package/dist/{chunk-6QJFMOIX.js.map → chunk-VWVQWN2G.js.map} +1 -1
  99. package/dist/{chunk-JZNTCZMV.js → chunk-WC6YYFWP.js} +34 -18
  100. package/dist/chunk-WC6YYFWP.js.map +1 -0
  101. package/dist/{chunk-FXLVNCG3.js → chunk-XWHGXSQV.js} +3 -3
  102. package/dist/{chunk-FXLVNCG3.js.map → chunk-XWHGXSQV.js.map} +1 -1
  103. package/dist/{chunk-G32U6YQ5.js → chunk-YD5MPZWY.js} +3 -3
  104. package/dist/{chunk-G32U6YQ5.js.map → chunk-YD5MPZWY.js.map} +1 -1
  105. package/dist/{chunk-US4OLTJ2.js → chunk-YNVMVDFN.js} +3 -3
  106. package/dist/{chunk-US4OLTJ2.js.map → chunk-YNVMVDFN.js.map} +1 -1
  107. package/dist/cnh.d.ts +2 -2
  108. package/dist/cnh.js +4 -4
  109. package/dist/cnpj.d.ts +2 -2
  110. package/dist/cnpj.js +5 -5
  111. package/dist/compare.d.ts +16 -0
  112. package/dist/compare.js +32 -0
  113. package/dist/compare.js.map +1 -0
  114. package/dist/cpf.d.ts +2 -2
  115. package/dist/cpf.js +4 -4
  116. package/dist/detect.d.ts +1 -1
  117. package/dist/detect.js +22 -20
  118. package/dist/diff.d.ts +16 -0
  119. package/dist/diff.js +32 -0
  120. package/dist/diff.js.map +1 -0
  121. package/dist/generate.d.ts +24 -3
  122. package/dist/generate.js +36 -27
  123. package/dist/{index-CZLo9YOT.d.ts → index-BEJFgDXj.d.ts} +1 -1
  124. package/dist/index.d.ts +13 -8
  125. package/dist/index.js +60 -49
  126. package/dist/index.js.map +1 -1
  127. package/dist/{inscricao-estadual-produtor-rural-CfWUaggb.d.ts → inscricao-estadual-produtor-rural-BXFVQscj.d.ts} +1 -1
  128. package/dist/inscricao-estadual-produtor-rural.d.ts +2 -2
  129. package/dist/inscricao-estadual-produtor-rural.js +3 -3
  130. package/dist/inscricao-estadual.d.ts +3 -3
  131. package/dist/inscricao-estadual.js +4 -4
  132. package/dist/mask.d.ts +13 -0
  133. package/dist/mask.js +40 -0
  134. package/dist/mask.js.map +1 -0
  135. package/dist/nfe-chave.d.ts +2 -2
  136. package/dist/nfe-chave.js +4 -3
  137. package/dist/pis-pasep.d.ts +2 -2
  138. package/dist/pis-pasep.js +3 -3
  139. package/dist/{pix-ddldLlb7.d.ts → pix-B4habHLG.d.ts} +1 -1
  140. package/dist/pix.d.ts +2 -2
  141. package/dist/pix.js +9 -8
  142. package/dist/placa.d.ts +2 -2
  143. package/dist/placa.js +4 -4
  144. package/dist/renavam.d.ts +2 -2
  145. package/dist/renavam.js +4 -4
  146. package/dist/sanitize.d.ts +2 -2
  147. package/dist/sanitize.js +20 -17
  148. package/dist/telefone.d.ts +2 -2
  149. package/dist/telefone.js +3 -3
  150. package/dist/titulo-eleitor.d.ts +2 -2
  151. package/dist/titulo-eleitor.js +4 -4
  152. package/dist/types-MXifBcV5.d.ts +10 -0
  153. package/dist/{validation-result-BhQE-1_O.d.ts → validation-result-BaI2Xder.d.ts} +24 -5
  154. package/package.json +21 -1
  155. package/dist/chunk-4W4OKLSZ.js +0 -366
  156. package/dist/chunk-4W4OKLSZ.js.map +0 -1
  157. package/dist/chunk-CSZCIOGA.js +0 -187
  158. package/dist/chunk-CSZCIOGA.js.map +0 -1
  159. package/dist/chunk-JZNTCZMV.js.map +0 -1
  160. package/dist/chunk-MSLJF2FM.js.map +0 -1
  161. package/dist/chunk-Q7B5VOPW.js.map +0 -1
  162. package/dist/chunk-WCQUQ2WX.js.map +0 -1
package/README.md CHANGED
@@ -25,7 +25,7 @@ Every Brazilian SaaS eventually reinvents CPF validation — usually wrong.
25
25
  (Receita Federal, Bacen, CONTRAN, TSE, SEFAZ, FEBRABAN, Anatel) so you don't have to.
26
26
 
27
27
  - ✅ **CNPJ alfanumérico** — new RFB format (effective July 2026), ready now
28
- - ✅ **18 document types** — CPF, CNPJ, CEP, NF-e chave, BR Code PIX, boleto, CNH, RENAVAM, placa, PIS/PASEP, PIX key, cartão de crédito, IE (27 UFs), IE produtor rural, título de eleitor, telefone, + platform APIs
28
+ - ✅ **18+ document types** — CPF, CNPJ, CEP, NF-e chave, BR Code PIX, boleto (cobrança + arrecadação), CNH, RENAVAM, placa, PIS/PASEP, PIX key, cartão de crédito, IE (27 UFs), IE produtor rural, título de eleitor, telefone, + platform APIs above
29
29
  - ✅ **Zero runtime dependencies** — pure TypeScript logic, no HTTP calls
30
30
  - ✅ **Never throws** — every function returns `{ ok: true, value } | { ok: false, message, code }`
31
31
  - ✅ **Tree-shakeable** — subpath imports per document type
@@ -93,9 +93,16 @@ generate('cnh');
93
93
  generate('inscricao-estadual', { uf: 'SP', seed: 42 });
94
94
  generate('titulo-eleitor', { uf: 'SC', seed: 42 });
95
95
  generate('cartao-credito', { brand: 'visa', seed: 42 });
96
+ generate('pix', { seed: 42 }); // EVP UUID — Bacen DICT
97
+ generate('nfe-chave', { seed: 42 }); // MOC §2.2.6 modulo-11 DV
98
+ generate('brcode', { seed: 42 }); // static PIX EMV + CRC16
99
+ generate('boleto', { masked: true }); // FEBRABAN cobrança Situação 1
100
+ generate('boleto-arrecadacao'); // FEBRABAN Layout v7
101
+ generate('inscricao-estadual-produtor-rural', { masked: true }); // SP SINTEGRA Bloco II
96
102
  ```
97
103
 
98
- > `generate()` is for test fixtures and seed data only — never use in production.
104
+ > `generate()` is for test fixtures and seed data only — never use in production.
105
+ > Alphanumeric CPF: `generate('cpf', { format: 'alphanumeric' })` throws `CPF_ALPHA_SPEC_PENDING` until RFB publishes the official algorithm ([OFFICIAL-SOURCES.md](https://github.com/AlexandreZanata/br-validators/blob/main/docs/OFFICIAL-SOURCES.md)).
99
106
 
100
107
  ### ETL / data cleanup
101
108
 
@@ -121,12 +128,66 @@ const result = validateNfeChave('52060433009911002506550120000007800267301615');
121
128
  ### BR Code (PIX QR payload)
122
129
 
123
130
  ```typescript
124
- import { validateBrCode, parseBrCode } from '@br-validators/core/brcode';
125
-
126
- parseBrCode('00020126580014br.gov.bcb.pix0136...');
131
+ import {
132
+ buildStaticPixBrCode,
133
+ parseBrCode,
134
+ validateBrCode,
135
+ } from '@br-validators/core/brcode';
136
+
137
+ // Permanent static QR (no amount — payer sets value at payment time)
138
+ const payload = buildStaticPixBrCode({
139
+ pixKey: 'pix@bcb.gov.br',
140
+ merchantName: 'Fulano de Tal',
141
+ merchantCity: 'BRASILIA',
142
+ });
143
+ validateBrCode(payload).ok; // true
144
+
145
+ // Fixed-value static QR
146
+ buildStaticPixBrCode({
147
+ pixKey: 'pix@bcb.gov.br',
148
+ merchantName: 'Fulano de Tal',
149
+ merchantCity: 'BRASILIA',
150
+ amount: '10.50',
151
+ });
152
+
153
+ parseBrCode(payload);
127
154
  // { ok: true, pixKey, pixKeyType, merchantName, merchantCity, amount, txid }
128
155
  ```
129
156
 
157
+ **Playground:** [doc-raiz-playground.vercel.app/pix](https://doc-raiz-playground.vercel.app/pix) renders the QR image from `buildStaticPixBrCode` output. Official sources: [Bacen Manual BR Code](https://www.bcb.gov.br/content/estabilidadefinanceira/spb_docs/ManualBRCode.pdf) · [Manual de Padrões PIX](https://www.bcb.gov.br/content/estabilidadefinanceira/pix/Regulamento_Pix/II_ManualdePadroesparaIniciacaodoPix.pdf).
158
+
159
+ ### Boleto — cobrança + arrecadação
160
+
161
+ ```typescript
162
+ import { validateBoleto, validateArrecadacao } from '@br-validators/core/boleto';
163
+
164
+ validateBoleto('03399.02579 08991.834006 71742.301014 6 14500000099668');
165
+ // cobrança Situação 1/2 — FEBRABAN FB-0061/2021
166
+
167
+ validateArrecadacao('846300000003812345678906123456789015234567890129');
168
+ // arrecadação 48-digit — FEBRABAN Layout v7
169
+ ```
170
+
171
+ ### Platform APIs — mask, compare, batch, diff
172
+
173
+ ```typescript
174
+ import { mask, compare, batch, diff } from '@br-validators/core';
175
+
176
+ mask('12345678909', 'cpf');
177
+ // { ok: true, formatted: '123.456.789-09' }
178
+
179
+ compare('123.456.789-09', '12345678909', 'cpf');
180
+ // { equal: true }
181
+
182
+ batch(['12345678909', 'invalid'], 'cpf');
183
+ // { valid: [...], invalid: [...], summary: { total: 2, valid: 1, invalid: 1 } }
184
+
185
+ diff('12345678909', '12345678901', 'cpf');
186
+ // { changed: true, fields: [{ field: 'dv', a: '09', b: '01' }] }
187
+ ```
188
+
189
+ Per-type rules and official sources: [docs/OFFICIAL-SOURCES.md](https://github.com/AlexandreZanata/br-validators/blob/main/docs/OFFICIAL-SOURCES.md) · API contract: [docs/LIBRARY-API.md](https://github.com/AlexandreZanata/br-validators/blob/main/docs/LIBRARY-API.md)
190
+
130
191
  ### Form handler (React / Next.js)
131
192
 
132
193
  ```typescript
@@ -156,8 +217,12 @@ br-validators cnpj validate "$CNPJ" --quiet || exit 1
156
217
  br-validators ie validate "$IE" --uf SP --json
157
218
  br-validators detect '123.456.789-09' --json
158
219
  br-validators generate cpf --seed 42 --masked
159
- br-validators generate inscricao-estadual --uf SP --seed 42
160
- br-validators generate cartao-credito --brand visa --seed 42
220
+ br-validators generate pix --seed 42
221
+ br-validators generate nfe-chave --seed 42
222
+ br-validators generate brcode --seed 42
223
+ br-validators generate boleto --masked --seed 42
224
+ br-validators generate boleto-arrecadacao --seed 42
225
+ br-validators generate inscricao-estadual-produtor-rural --masked --seed 42
161
226
  ```
162
227
 
163
228
  ---
@@ -176,15 +241,21 @@ br-validators generate cartao-credito --brand visa --seed 42
176
241
  | Placa (Mercosul + legada) | `@br-validators/core/placa` | `br-validators placa …` | `/placa` |
177
242
  | PIS / PASEP / NIS | `@br-validators/core/pis-pasep` | `br-validators pis-pasep …` | `/pis` |
178
243
  | PIX key | `@br-validators/core/pix` | `br-validators pix …` | `/pix` |
179
- | BR Code (PIX QR payload) | `@br-validators/core/brcode` | `br-validators brcode …` | `/brcode` |
180
- | Boleto (Situação 1 + 2) | `@br-validators/core/boleto` | `br-validators boleto …` | `/boleto` |
244
+ | BR Code (PIX QR payload + builder) | `@br-validators/core/brcode` | `br-validators brcode …` | `/brcode` |
245
+ | Boleto cobrança (Situação 1 + 2) | `@br-validators/core/boleto` | `br-validators boleto …` | `/boleto` |
246
+ | Boleto arrecadação (48/44) | `@br-validators/core/boleto` | `br-validators boleto …` | `/boleto` |
181
247
  | NF-e / NFC-e chave (44 digits) | `@br-validators/core/nfe-chave` | `br-validators nfe-chave …` | `/nfe-chave` |
182
248
  | Cartão de crédito (Luhn) | `@br-validators/core/cartao-credito` | `br-validators cartao …` | `/cartao-credito` |
183
249
  | Inscrição Estadual (27 UFs) | `@br-validators/core/inscricao-estadual` | `br-validators ie … --uf SP` | `/ie` |
184
- | IE Produtor Rural | `@br-validators/core/inscricao-estadual-produtor-rural` | `br-validators ie …` (auto-detect `P` prefix) | `/ie` |
250
+ | IE Produtor Rural | `@br-validators/core/inscricao-estadual-produtor-rural` | `br-validators ie …` (auto `P`) | `/ie` |
185
251
  | **detect()** | `@br-validators/core/detect` | `br-validators detect …` | `/detect` |
186
252
  | **sanitize()** | `@br-validators/core/sanitize` | `br-validators sanitize …` | `/sanitize` |
253
+ | **mask()** | `@br-validators/core/mask` | — | via per-type `format` |
254
+ | **compare()** | `@br-validators/core/compare` | — | — |
255
+ | **batch()** | `@br-validators/core/batch` | — | — |
256
+ | **diff()** | `@br-validators/core/diff` | — | — |
187
257
  | **generate()** | `@br-validators/core/generate` | `br-validators generate …` | `/generate` |
258
+ | **buildStaticPixBrCode()** | `@br-validators/core/brcode` | — | `/pix` (QR panel) |
188
259
 
189
260
  Full official sources per type: [docs/OFFICIAL-SOURCES.md](https://github.com/AlexandreZanata/br-validators/blob/main/docs/OFFICIAL-SOURCES.md)
190
261
 
@@ -207,8 +278,8 @@ import { parseNfeChave } from '@br-validators/core/nfe-chave';
207
278
  | Package | Status |
208
279
  |---|---|
209
280
  | [`@br-validators/cli`](https://www.npmjs.com/package/@br-validators/cli) | Published |
210
- | `@br-validators/zod` | Coming soon — Zod schemas |
211
- | `@br-validators/react-hook-form` | Coming soon — RHF resolvers |
281
+ | [`@br-validators/zod`](https://www.npmjs.com/package/@br-validators/zod) | Published — Zod 3/4 schemas |
282
+ | [`@br-validators/react-hook-form`](https://www.npmjs.com/package/@br-validators/react-hook-form) | Published — RHF resolvers |
212
283
 
213
284
  ---
214
285
 
@@ -0,0 +1,28 @@
1
+ import { P as PlatformDocumentType, a as PlatformOptions } from './types-MXifBcV5.js';
2
+ import { V as ValidationErrorCode } from './validation-result-BaI2Xder.js';
3
+ import './index-BEJFgDXj.js';
4
+
5
+ type BatchValidEntry = {
6
+ index: number;
7
+ input: string;
8
+ value: string;
9
+ };
10
+ type BatchInvalidEntry = {
11
+ index: number;
12
+ input: string;
13
+ code: ValidationErrorCode;
14
+ message: string;
15
+ };
16
+ type BatchSummary = {
17
+ total: number;
18
+ valid: number;
19
+ invalid: number;
20
+ };
21
+ type BatchResult = {
22
+ valid: BatchValidEntry[];
23
+ invalid: BatchInvalidEntry[];
24
+ summary: BatchSummary;
25
+ };
26
+ declare function batch(inputs: readonly string[], type: PlatformDocumentType, options?: PlatformOptions): BatchResult;
27
+
28
+ export { type BatchInvalidEntry, type BatchResult, type BatchSummary, type BatchValidEntry, batch };
package/dist/batch.js ADDED
@@ -0,0 +1,29 @@
1
+ export { batch } from './chunk-N2WVO3GF.js';
2
+ import './chunk-I66ZRSEN.js';
3
+ import './chunk-AO6UTQ4A.js';
4
+ import './chunk-JLCQ7MGC.js';
5
+ import './chunk-3LMDBXU6.js';
6
+ import './chunk-DAR6VOMT.js';
7
+ import './chunk-CSVGWTCG.js';
8
+ import './chunk-665E36SC.js';
9
+ import './chunk-CDNOUZEI.js';
10
+ import './chunk-AU6TW3GH.js';
11
+ import './chunk-N6RQICAP.js';
12
+ import './chunk-E2EFGMWA.js';
13
+ import './chunk-V7UJ55KW.js';
14
+ import './chunk-H3MLGGFI.js';
15
+ import './chunk-P2KNN6ZR.js';
16
+ import './chunk-63G7QO73.js';
17
+ import './chunk-ANWQBKGN.js';
18
+ import './chunk-TE6NSONR.js';
19
+ import './chunk-YNVMVDFN.js';
20
+ import './chunk-YYHS5WQN.js';
21
+ import './chunk-4SNBZFS5.js';
22
+ import './chunk-UCJPSJN5.js';
23
+ import './chunk-CSRBRKXY.js';
24
+ import './chunk-FBARVLLP.js';
25
+ import './chunk-OTZHMJYE.js';
26
+ import './chunk-EB3G4IG6.js';
27
+ import './chunk-NUQSMT4Y.js';
28
+ //# sourceMappingURL=batch.js.map
29
+ //# sourceMappingURL=batch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"batch.js"}
package/dist/boleto.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { b as BoletoValidationResult, V as ValidationErrorCode, B as BoletoInputKind, F as FormatResult } from './validation-result-BhQE-1_O.js';
2
- export { a as BoletoSituacao, i as CodigoBarras, D as DocumentFormat, L as LinhaDigitavel } from './validation-result-BhQE-1_O.js';
1
+ import { y as CobrancaBoletoValidationResult, V as ValidationErrorCode, B as BoletoInputKind, b as BoletoValidationResult, F as FormatResult } from './validation-result-BaI2Xder.js';
2
+ export { a as BoletoSituacao, i as CodigoBarras, D as DocumentFormat, L as LinhaDigitavel } from './validation-result-BaI2Xder.js';
3
3
 
4
4
  /**
5
5
  * FEBRABAN bank boleto (cobrança) — linha digitável + código de barras.
@@ -20,6 +20,10 @@ declare const BOLETO_GOLDEN_LINHA_SITUACAO2_STRIPPED = "988012345167890123457678
20
20
  declare const BOLETO_GOLDEN_CODIGO_BARRAS_SITUACAO2 = "98807607469480001121234567890123456789012345";
21
21
  declare const BOLETO_OFFICIAL_SOURCE_URL = "https://cmsarquivos.febraban.org.br/Arquivos/documentos/PDF/Conven%C3%A7%C3%A3o%20da%20Cobran%C3%A7a%20-%2005_02_2021_f.pdf";
22
22
  declare const BOLETO_LAYOUTS_PORTAL_URL = "https://portal.febraban.org.br/pagina/3425/33/pt-br/layout-febraban";
23
+ declare const BOLETO_ARRECADACAO_LINHA_LENGTH = 48;
24
+ declare const BOLETO_ARRECADACAO_CODIGO_BARRAS_LENGTH = 44;
25
+ declare const BOLETO_ARRECADACAO_PRODUCT_ID = "8";
26
+ declare const BOLETO_ARRECADACAO_OFFICIAL_SOURCE_URL = "https://cmsarquivos.febraban.org.br/Arquivos/documentos/PDF/Layout%20-%20C%C3%B3digo%20de%20Barras%20-%20Vers%C3%A3o%207%20-%2001_03_2023_mn.pdf";
23
27
 
24
28
  /**
25
29
  * Modulo 10 — linha digitável field DVs (Anexo IX).
@@ -52,7 +56,7 @@ declare function formatLinhaDigitavel(stripped: string): string;
52
56
  */
53
57
 
54
58
  declare function stripLinhaDigitavel(input: string): string;
55
- declare function validateLinhaDigitavel(input: string): BoletoValidationResult;
59
+ declare function validateLinhaDigitavel(input: string): CobrancaBoletoValidationResult;
56
60
 
57
61
  /**
58
62
  * Código de barras validation — modulo 11 general DV (Anexo X).
@@ -60,7 +64,7 @@ declare function validateLinhaDigitavel(input: string): BoletoValidationResult;
60
64
  */
61
65
 
62
66
  declare function stripCodigoBarras(input: string): string;
63
- declare function validateCodigoBarras(input: string): BoletoValidationResult;
67
+ declare function validateCodigoBarras(input: string): CobrancaBoletoValidationResult;
64
68
 
65
69
  /**
66
70
  * Due-date factor semantic validation (Situação 1 only).
@@ -93,6 +97,55 @@ type ValorDocumentoValidationResult = {
93
97
  };
94
98
  declare function validateValorDocumento(value: string): ValorDocumentoValidationResult;
95
99
 
100
+ /**
101
+ * FEBRABAN arrecadação modulo 11 — Layout v7 §09–10.
102
+ * @see BOLETO_ARRECADACAO_OFFICIAL_SOURCE_URL
103
+ *
104
+ * Multipliers 2,3,4,5,6,7,8,9,2,3,4… from right; remainder 0|1 → DV 0; remainder 10 → DV 1.
105
+ */
106
+ declare function computeArrecadacaoModulo11Dv(digits: string): number;
107
+ declare function isArrecadacaoValueType(valueType: string): valueType is ArrecadacaoValueType;
108
+ type ArrecadacaoValueType = '6' | '7' | '8' | '9';
109
+ declare function getArrecadacaoDvCalculator(valueType: string): (digits: string) => number;
110
+
111
+ /**
112
+ * Boleto arrecadação — FEBRABAN Layout v7 (48-digit linha + 44-digit código de barras).
113
+ * @see docs/use-cases/UC-007-validate-boleto.md
114
+ * @see BOLETO_ARRECADACAO_OFFICIAL_SOURCE_URL
115
+ */
116
+
117
+ type ArrecadacaoInputKind = 'arrecadacao-linha' | 'arrecadacao-codigo-barras';
118
+ type ArrecadacaoValidationResult = {
119
+ ok: true;
120
+ value: string;
121
+ inputKind: ArrecadacaoInputKind;
122
+ format: 'arrecadacao';
123
+ segment: string;
124
+ valueType: ArrecadacaoValueType;
125
+ } | {
126
+ ok: false;
127
+ code: ValidationErrorCode;
128
+ message: string;
129
+ inputKind?: ArrecadacaoInputKind;
130
+ };
131
+ declare function stripArrecadacao(input: string): string;
132
+ declare function linhaArrecadacaoToCodigoBarras(linha: string): string;
133
+ declare function validateArrecadacaoLinha(input: string): ArrecadacaoValidationResult;
134
+ declare function validateArrecadacaoCodigoBarras(input: string): ArrecadacaoValidationResult;
135
+ declare function validateArrecadacao(input: string): ArrecadacaoValidationResult;
136
+ declare function isValidArrecadacao(input: string): boolean;
137
+ /** @internal Golden vector helper — builds valid barcode then linha. */
138
+ declare function buildArrecadacaoGoldenPair(options: {
139
+ segment: string;
140
+ valueType: ArrecadacaoValueType;
141
+ value: string;
142
+ company: string;
143
+ free: string;
144
+ }): {
145
+ barcode: string;
146
+ linha: string;
147
+ };
148
+
96
149
  /**
97
150
  * Boleto validation — linha digitável + código de barras (FEBRABAN cobrança).
98
151
  * @see docs/use-cases/UC-007-validate-boleto.md
@@ -110,4 +163,4 @@ declare function convertCodigoBarrasToLinhaDigitavel(input: string): BoletoValid
110
163
 
111
164
  declare function formatBoleto(input: string): FormatResult;
112
165
 
113
- export { BOLETO_CODE_ISPB_HOLDER, BOLETO_CODIGO_BARRAS_LENGTH, BOLETO_CURRENCY_ISPB, BOLETO_CURRENCY_REAL, BOLETO_GOLDEN_CODIGO_BARRAS, BOLETO_GOLDEN_CODIGO_BARRAS_BB, BOLETO_GOLDEN_CODIGO_BARRAS_SITUACAO2, BOLETO_GOLDEN_LINHA_BB_STRIPPED, BOLETO_GOLDEN_LINHA_MASKED, BOLETO_GOLDEN_LINHA_SITUACAO2_STRIPPED, BOLETO_GOLDEN_LINHA_STRIPPED, BOLETO_LAYOUTS_PORTAL_URL, BOLETO_LINHA_LENGTH, BOLETO_OFFICIAL_SOURCE_URL, BoletoInputKind, type BoletoSituacaoCode, type BoletoSituacaoKind, BoletoValidationResult, type DetectedBoletoInputKind, type FatorVencimentoValidationResult, type ValidateBoletoOptions, ValidationErrorCode, type ValorDocumentoValidationResult, applyLinhaDigitavelMask, computeModulo10FieldDv, computeModulo11BarcodeDv, convertCodigoBarrasToLinhaDigitavel, convertCodigoBarrasToLinhaDigits, convertLinhaToCodigoBarras, convertLinhaToCodigoBarrasDigits, detectBoletoInputKind, detectBoletoSituacao, formatBoleto, formatLinhaDigitavel, isValidBoleto, stripCodigoBarras, stripLinhaDigitavel, validateBoleto, validateCodigoBarras, validateFatorVencimento, validateLinhaDigitavel, validateValorDocumento };
166
+ export { type ArrecadacaoInputKind, type ArrecadacaoValidationResult, type ArrecadacaoValueType, BOLETO_ARRECADACAO_CODIGO_BARRAS_LENGTH, BOLETO_ARRECADACAO_LINHA_LENGTH, BOLETO_ARRECADACAO_OFFICIAL_SOURCE_URL, BOLETO_ARRECADACAO_PRODUCT_ID, BOLETO_CODE_ISPB_HOLDER, BOLETO_CODIGO_BARRAS_LENGTH, BOLETO_CURRENCY_ISPB, BOLETO_CURRENCY_REAL, BOLETO_GOLDEN_CODIGO_BARRAS, BOLETO_GOLDEN_CODIGO_BARRAS_BB, BOLETO_GOLDEN_CODIGO_BARRAS_SITUACAO2, BOLETO_GOLDEN_LINHA_BB_STRIPPED, BOLETO_GOLDEN_LINHA_MASKED, BOLETO_GOLDEN_LINHA_SITUACAO2_STRIPPED, BOLETO_GOLDEN_LINHA_STRIPPED, BOLETO_LAYOUTS_PORTAL_URL, BOLETO_LINHA_LENGTH, BOLETO_OFFICIAL_SOURCE_URL, BoletoInputKind, type BoletoSituacaoCode, type BoletoSituacaoKind, BoletoValidationResult, type DetectedBoletoInputKind, type FatorVencimentoValidationResult, type ValidateBoletoOptions, ValidationErrorCode, type ValorDocumentoValidationResult, applyLinhaDigitavelMask, buildArrecadacaoGoldenPair, computeModulo10FieldDv as computeArrecadacaoModulo10Dv, computeArrecadacaoModulo11Dv, computeModulo10FieldDv, computeModulo11BarcodeDv, convertCodigoBarrasToLinhaDigitavel, convertCodigoBarrasToLinhaDigits, convertLinhaToCodigoBarras, convertLinhaToCodigoBarrasDigits, detectBoletoInputKind, detectBoletoSituacao, formatBoleto, formatLinhaDigitavel, getArrecadacaoDvCalculator, isArrecadacaoValueType, isValidArrecadacao, isValidBoleto, linhaArrecadacaoToCodigoBarras, stripArrecadacao, stripCodigoBarras, stripLinhaDigitavel, validateArrecadacao, validateArrecadacaoCodigoBarras, validateArrecadacaoLinha, validateBoleto, validateCodigoBarras, validateFatorVencimento, validateLinhaDigitavel, validateValorDocumento };
package/dist/boleto.js CHANGED
@@ -1,5 +1,8 @@
1
- export { formatBoleto } from './chunk-FXLVNCG3.js';
2
- export { BOLETO_CODE_ISPB_HOLDER, BOLETO_CODIGO_BARRAS_LENGTH, BOLETO_CURRENCY_ISPB, BOLETO_CURRENCY_REAL, BOLETO_GOLDEN_CODIGO_BARRAS, BOLETO_GOLDEN_CODIGO_BARRAS_BB, BOLETO_GOLDEN_CODIGO_BARRAS_SITUACAO2, BOLETO_GOLDEN_LINHA_BB_STRIPPED, BOLETO_GOLDEN_LINHA_MASKED, BOLETO_GOLDEN_LINHA_SITUACAO2_STRIPPED, BOLETO_GOLDEN_LINHA_STRIPPED, BOLETO_LAYOUTS_PORTAL_URL, BOLETO_LINHA_LENGTH, BOLETO_OFFICIAL_SOURCE_URL, applyLinhaDigitavelMask, computeModulo10FieldDv, computeModulo11BarcodeDv, convertCodigoBarrasToLinhaDigitavel, convertCodigoBarrasToLinhaDigits, convertLinhaToCodigoBarras, convertLinhaToCodigoBarrasDigits, detectBoletoInputKind, detectBoletoSituacao, formatLinhaDigitavel, isValidBoleto, stripCodigoBarras, stripLinhaDigitavel, validateBoleto, validateCodigoBarras, validateFatorVencimento, validateLinhaDigitavel, validateValorDocumento } from './chunk-4W4OKLSZ.js';
3
- import './chunk-MSLJF2FM.js';
1
+ import './chunk-KBNWI6GE.js';
2
+ export { formatBoleto } from './chunk-XWHGXSQV.js';
3
+ export { convertCodigoBarrasToLinhaDigitavel, convertLinhaToCodigoBarras, isValidBoleto, validateBoleto, validateFatorVencimento, validateValorDocumento } from './chunk-AU6TW3GH.js';
4
+ export { buildArrecadacaoGoldenPair, computeArrecadacaoModulo11Dv, getArrecadacaoDvCalculator, isArrecadacaoValueType, isValidArrecadacao, linhaArrecadacaoToCodigoBarras, stripArrecadacao, stripCodigoBarras, validateArrecadacao, validateArrecadacaoCodigoBarras, validateArrecadacaoLinha, validateCodigoBarras } from './chunk-N6RQICAP.js';
5
+ export { BOLETO_ARRECADACAO_CODIGO_BARRAS_LENGTH, BOLETO_ARRECADACAO_LINHA_LENGTH, BOLETO_ARRECADACAO_OFFICIAL_SOURCE_URL, BOLETO_ARRECADACAO_PRODUCT_ID, BOLETO_CODE_ISPB_HOLDER, BOLETO_CODIGO_BARRAS_LENGTH, BOLETO_CURRENCY_ISPB, BOLETO_CURRENCY_REAL, BOLETO_GOLDEN_CODIGO_BARRAS, BOLETO_GOLDEN_CODIGO_BARRAS_BB, BOLETO_GOLDEN_CODIGO_BARRAS_SITUACAO2, BOLETO_GOLDEN_LINHA_BB_STRIPPED, BOLETO_GOLDEN_LINHA_MASKED, BOLETO_GOLDEN_LINHA_SITUACAO2_STRIPPED, BOLETO_GOLDEN_LINHA_STRIPPED, BOLETO_LAYOUTS_PORTAL_URL, BOLETO_LINHA_LENGTH, BOLETO_OFFICIAL_SOURCE_URL, applyLinhaDigitavelMask, computeModulo10FieldDv as computeArrecadacaoModulo10Dv, computeModulo10FieldDv, computeModulo11BarcodeDv, convertCodigoBarrasToLinhaDigits, convertLinhaToCodigoBarrasDigits, detectBoletoInputKind, detectBoletoSituacao, formatLinhaDigitavel, stripLinhaDigitavel, validateLinhaDigitavel } from './chunk-E2EFGMWA.js';
6
+ import './chunk-NUQSMT4Y.js';
4
7
  //# sourceMappingURL=boleto.js.map
5
8
  //# sourceMappingURL=boleto.js.map
package/dist/brcode.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { p as PixKey, q as PixKeyType, V as ValidationErrorCode, d as BrCodeValidationResult } from './validation-result-BhQE-1_O.js';
2
- export { c as BrCodePayload } from './validation-result-BhQE-1_O.js';
1
+ import { p as PixKey, q as PixKeyType, V as ValidationErrorCode, d as BrCodeValidationResult } from './validation-result-BaI2Xder.js';
2
+ export { c as BrCodePayload } from './validation-result-BaI2Xder.js';
3
3
 
4
4
  /** Bacen Manual BR Code — EMV-QRCPS-MPM TLV + CRC16-CCITT */
5
5
  declare const BRCODE_OFFICIAL_SOURCE_URL = "https://www.bcb.gov.br/content/estabilidadefinanceira/spb_docs/ManualBRCode.pdf";
@@ -24,6 +24,18 @@ declare function verifyBrCodeCrc(payload: string): {
24
24
  message: string;
25
25
  };
26
26
 
27
+ type StaticPixBrCodeInput = {
28
+ pixKey: string;
29
+ merchantName: string;
30
+ merchantCity: string;
31
+ /** Omit for permanent static QR (payer sets amount). Decimal with up to 2 fraction digits. */
32
+ amount?: string;
33
+ /** Defaults to `***` per Manual de Padrões PIX static QR. */
34
+ txid?: string;
35
+ };
36
+ /** Build static PIX BR Code EMV payload. Validate output with `validateBrCode`. */
37
+ declare function buildStaticPixBrCode(input: StaticPixBrCodeInput): string;
38
+
27
39
  type BrCodeParsedFields = {
28
40
  merchantName: string;
29
41
  merchantCity: string;
@@ -76,4 +88,4 @@ declare function isValidBrCode(input: string): boolean;
76
88
  declare function parseBrCode(input: string): BrCodeValidationResult;
77
89
  declare function validateBrCode(input: string): BrCodeValidationResult;
78
90
 
79
- export { BRCODE_GOLDEN_COMPOSITE, BRCODE_GOLDEN_DYNAMIC_URL, BRCODE_GOLDEN_STATIC_CPF, BRCODE_GOLDEN_STATIC_EMAIL, BRCODE_GOLDEN_STATIC_EVP, BRCODE_OFFICIAL_SOURCE_URL, BRCODE_PIX_INITIATION_MANUAL_URL, type BrCodeParseResult, type BrCodeParsedFields, BrCodeValidationResult, PixKeyType, type TlvField, type TlvParseResult, computeCrc16Ccitt, findPixMerchantAccount, findTlvField, isValidBrCode, normalizeBrCodePayload, parseBrCode, parseBrCodePayload, parseTlvSequence, validateBrCode, verifyBrCodeCrc };
91
+ export { BRCODE_GOLDEN_COMPOSITE, BRCODE_GOLDEN_DYNAMIC_URL, BRCODE_GOLDEN_STATIC_CPF, BRCODE_GOLDEN_STATIC_EMAIL, BRCODE_GOLDEN_STATIC_EVP, BRCODE_OFFICIAL_SOURCE_URL, BRCODE_PIX_INITIATION_MANUAL_URL, type BrCodeParseResult, type BrCodeParsedFields, BrCodeValidationResult, PixKeyType, type StaticPixBrCodeInput, type TlvField, type TlvParseResult, buildStaticPixBrCode, computeCrc16Ccitt, findPixMerchantAccount, findTlvField, isValidBrCode, normalizeBrCodePayload, parseBrCode, parseBrCodePayload, parseTlvSequence, validateBrCode, verifyBrCodeCrc };
package/dist/brcode.js CHANGED
@@ -1,13 +1,13 @@
1
1
  import './chunk-RYGAK7PB.js';
2
- export { BRCODE_GOLDEN_COMPOSITE, BRCODE_GOLDEN_DYNAMIC_URL, BRCODE_GOLDEN_STATIC_CPF, BRCODE_GOLDEN_STATIC_EMAIL, BRCODE_GOLDEN_STATIC_EVP, BRCODE_OFFICIAL_SOURCE_URL, BRCODE_PIX_INITIATION_MANUAL_URL, computeCrc16Ccitt, findPixMerchantAccount, findTlvField, isValidBrCode, normalizeBrCodePayload, parseBrCode, parseBrCodePayload, parseTlvSequence, validateBrCode, verifyBrCodeCrc } from './chunk-WCQUQ2WX.js';
3
- import './chunk-MK7OJUF5.js';
4
- import './chunk-XUO7FV6Z.js';
5
- import './chunk-YXELVV37.js';
6
- import './chunk-EB3G4IG6.js';
7
- import './chunk-KQDLIGSG.js';
8
- import './chunk-F6PTZY4O.js';
2
+ export { BRCODE_GOLDEN_COMPOSITE, BRCODE_GOLDEN_DYNAMIC_URL, BRCODE_GOLDEN_STATIC_CPF, BRCODE_GOLDEN_STATIC_EMAIL, BRCODE_GOLDEN_STATIC_EVP, BRCODE_OFFICIAL_SOURCE_URL, BRCODE_PIX_INITIATION_MANUAL_URL, buildStaticPixBrCode, computeCrc16Ccitt, findPixMerchantAccount, findTlvField, isValidBrCode, normalizeBrCodePayload, parseBrCode, parseBrCodePayload, parseTlvSequence, validateBrCode, verifyBrCodeCrc } from './chunk-V7UJ55KW.js';
3
+ import './chunk-H3MLGGFI.js';
4
+ import './chunk-P2KNN6ZR.js';
5
+ import './chunk-63G7QO73.js';
9
6
  import './chunk-UCJPSJN5.js';
7
+ import './chunk-CSRBRKXY.js';
8
+ import './chunk-FBARVLLP.js';
10
9
  import './chunk-OTZHMJYE.js';
11
- import './chunk-MSLJF2FM.js';
10
+ import './chunk-EB3G4IG6.js';
11
+ import './chunk-NUQSMT4Y.js';
12
12
  //# sourceMappingURL=brcode.js.map
13
13
  //# sourceMappingURL=brcode.js.map
@@ -1,5 +1,5 @@
1
- import { e as CartaoCreditoValidationResult, F as FormatResult } from './validation-result-BhQE-1_O.js';
2
- export { C as CartaoCredito, D as DocumentFormat, V as ValidationErrorCode } from './validation-result-BhQE-1_O.js';
1
+ import { e as CartaoCreditoValidationResult, F as FormatResult } from './validation-result-BaI2Xder.js';
2
+ export { C as CartaoCredito, D as DocumentFormat, V as ValidationErrorCode } from './validation-result-BaI2Xder.js';
3
3
  import { j as CardBrand } from './constants-BqegsAc2.js';
4
4
  export { C as CARTAO_GOLDEN_AMEX, a as CARTAO_GOLDEN_LUHN_WALKTHROUGH, b as CARTAO_GOLDEN_MASTERCARD, c as CARTAO_GOLDEN_MIN_LENGTH, d as CARTAO_GOLDEN_VISA, e as CARTAO_GOLDEN_VISA_MASKED, f as CARTAO_IEC_SOURCE_URL, g as CARTAO_OFFICIAL_SOURCE_URL, h as CARTAO_PAN_MAX_LENGTH, i as CARTAO_PAN_MIN_LENGTH } from './constants-BqegsAc2.js';
5
5
 
@@ -1,6 +1,6 @@
1
1
  import './chunk-CQPM43VV.js';
2
- export { formatCartaoCredito } from './chunk-XW5G2RAL.js';
3
- 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, computeLuhnSum, detectCardBrand, isValidCartaoCredito, isValidLuhn, passesLuhn, stripCartaoCredito, validateCartaoCredito } from './chunk-AK5GVYQ5.js';
4
- import './chunk-MSLJF2FM.js';
2
+ export { formatCartaoCredito } from './chunk-B6A7VF4R.js';
3
+ 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, computeLuhnSum, detectCardBrand, isValidCartaoCredito, isValidLuhn, passesLuhn, stripCartaoCredito, validateCartaoCredito } from './chunk-ANWQBKGN.js';
4
+ import './chunk-NUQSMT4Y.js';
5
5
  //# sourceMappingURL=cartao-credito.js.map
6
6
  //# sourceMappingURL=cartao-credito.js.map
package/dist/cep.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { x as ValidationResult, F as FormatResult } from './validation-result-BhQE-1_O.js';
2
- export { f as Cep, D as DocumentFormat, V as ValidationErrorCode } from './validation-result-BhQE-1_O.js';
1
+ import { x as ValidationResult, F as FormatResult } from './validation-result-BaI2Xder.js';
2
+ export { f as Cep, D as DocumentFormat, V as ValidationErrorCode } from './validation-result-BaI2Xder.js';
3
3
 
4
4
  declare const CEP_GOLDEN_PRIMARY = "01310100";
5
5
  declare const CEP_GOLDEN_SECONDARY = "20040020";
package/dist/cep.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import './chunk-2CNYSY3Z.js';
2
- export { formatCep } from './chunk-ZAUZRIOU.js';
3
- export { CEP_GOLDEN_PRIMARY, CEP_GOLDEN_PRIMARY_MASKED, CEP_GOLDEN_SECONDARY, CEP_OFFICIAL_SOURCE_URL, isValidCep, validateCep } from './chunk-2JJS46FM.js';
2
+ export { formatCep } from './chunk-MESOO5GZ.js';
3
+ export { CEP_GOLDEN_PRIMARY, CEP_GOLDEN_PRIMARY_MASKED, CEP_GOLDEN_SECONDARY, CEP_OFFICIAL_SOURCE_URL, isValidCep, validateCep } from './chunk-TE6NSONR.js';
4
4
  export { stripCep } from './chunk-YYHS5WQN.js';
5
5
  import './chunk-4SNBZFS5.js';
6
- import './chunk-EB3G4IG6.js';
7
6
  import './chunk-UCJPSJN5.js';
8
- import './chunk-MSLJF2FM.js';
7
+ import './chunk-EB3G4IG6.js';
8
+ import './chunk-NUQSMT4Y.js';
9
9
  //# sourceMappingURL=cep.js.map
10
10
  //# sourceMappingURL=cep.js.map
@@ -1,5 +1,5 @@
1
1
  import { stripPlaca } from './chunk-YYHS5WQN.js';
2
- import { brandPlaca } from './chunk-MSLJF2FM.js';
2
+ import { brandPlaca } from './chunk-NUQSMT4Y.js';
3
3
 
4
4
  // src/core/placa/constants.ts
5
5
  var PLACA_LENGTH = 7;
@@ -102,5 +102,5 @@ function validatePlaca(input) {
102
102
  }
103
103
 
104
104
  export { PLACA_GOLDEN_CONVERSION_FROM, PLACA_GOLDEN_CONVERSION_TO, PLACA_GOLDEN_LEGACY, PLACA_GOLDEN_MERCOSUL, PLACA_LEGACY_PATTERN, PLACA_LENGTH, PLACA_MERCOSUL_PATTERN, PLACA_OFFICIAL_SOURCE_URL, convertPlacaToMercosul, detectPlacaFormat, isValidPlaca, isValidPlacaLegacy, isValidPlacaMercosul, validatePlaca };
105
- //# sourceMappingURL=chunk-WPL47PWJ.js.map
106
- //# sourceMappingURL=chunk-WPL47PWJ.js.map
105
+ //# sourceMappingURL=chunk-3LMDBXU6.js.map
106
+ //# sourceMappingURL=chunk-3LMDBXU6.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/placa/constants.ts","../src/core/placa/detect.ts","../src/core/placa/legacy.ts","../src/core/placa/mercosul.ts","../src/core/placa/convert.ts","../src/core/placa/index.ts"],"names":["failure"],"mappings":"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","file":"chunk-WPL47PWJ.js","sourcesContent":["/**\n * License plate patterns — CONTRAN 729/2018 (legacy + Mercosul).\n * @see https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7292018consolidada.pdf\n * @see docs/use-cases/UC-004-validate-placa.md — golden vectors ABC1D23, ABC1234\n */\nexport const PLACA_LENGTH = 7;\nexport const PLACA_LEGACY_PATTERN = /^[A-Z]{3}[0-9]{4}$/;\nexport const PLACA_MERCOSUL_PATTERN = /^[A-Z]{3}[0-9][A-Z0-9][0-9]{2}$/;\nexport const PLACA_LEGACY_TO_MERCOSUL_MAP: Record<string, string> = {\n '0': 'A',\n '1': 'B',\n '2': 'C',\n '3': 'D',\n '4': 'E',\n '5': 'F',\n '6': 'G',\n '7': 'H',\n '8': 'I',\n '9': 'J',\n};\nexport const PLACA_GOLDEN_MERCOSUL = 'ABC1D23';\nexport const PLACA_GOLDEN_LEGACY = 'ABC1234';\nexport const PLACA_GOLDEN_CONVERSION_FROM = 'ABC1234';\nexport const PLACA_GOLDEN_CONVERSION_TO = 'ABC1C34';\nexport const PLACA_OFFICIAL_SOURCE_URL =\n 'https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7292018consolidada.pdf';\n","/**\n * License plate format detection — legacy vs Mercosul (CONTRAN).\n * @see https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7292018consolidada.pdf\n */\nimport { stripPlaca } from '../../strip/index.js';\nimport { PLACA_LENGTH, PLACA_LEGACY_PATTERN, PLACA_MERCOSUL_PATTERN } from './constants.js';\n\nexport type PlacaFormat = 'legacy' | 'mercosul' | 'unknown';\n\nexport function detectPlacaFormat(input: string): PlacaFormat {\n const stripped = stripPlaca(input);\n if (stripped.length !== PLACA_LENGTH) {\n return 'unknown';\n }\n if (PLACA_LEGACY_PATTERN.test(stripped)) {\n return 'legacy';\n }\n if (PLACA_MERCOSUL_PATTERN.test(stripped)) {\n return 'mercosul';\n }\n return 'unknown';\n}\n","/**\n * License plate — legacy format LLLNNNN (CONTRAN).\n * @see https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7292018consolidada.pdf\n */\nimport { stripPlaca } from '../../strip/index.js';\nimport { PLACA_LEGACY_PATTERN } from './constants.js';\n\nexport function isValidPlacaLegacy(input: string): boolean {\n const stripped = stripPlaca(input);\n return PLACA_LEGACY_PATTERN.test(stripped);\n}\n","/**\n * License plate — Mercosul format LLLNLNN (CONTRAN).\n * @see https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7292018consolidada.pdf\n */\nimport { stripPlaca } from '../../strip/index.js';\nimport { PLACA_MERCOSUL_PATTERN } from './constants.js';\n\nexport function isValidPlacaMercosul(input: string): boolean {\n const stripped = stripPlaca(input);\n return PLACA_MERCOSUL_PATTERN.test(stripped);\n}\n","/**\n * Legacy → Mercosul plate conversion (CONTRAN digit-to-letter table).\n * @see https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7292018consolidada.pdf\n */\nimport type { FormatResult } from '../../types/validation-result.js';\nimport { stripPlaca } from '../../strip/index.js';\nimport { PLACA_LEGACY_TO_MERCOSUL_MAP } from './constants.js';\nimport { detectPlacaFormat } from './detect.js';\n\ntype FailedResult = Extract<FormatResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string): FailedResult {\n return { ok: false, code, message };\n}\n\nexport function convertPlacaToMercosul(input: string): FormatResult {\n const stripped = stripPlaca(input);\n if (stripped.length === 0) {\n return failure('EMPTY_INPUT', 'Placa input is empty');\n }\n\n if (detectPlacaFormat(input) !== 'legacy') {\n return failure('UNSUPPORTED_FORMAT', 'Conversion requires a valid legacy plate (LLLNNNN)');\n }\n\n const prefix = stripped.slice(0, 4);\n const mapped = PLACA_LEGACY_TO_MERCOSUL_MAP[stripped.charAt(4)];\n const suffix = stripped.slice(5);\n return { ok: true, formatted: `${prefix}${mapped}${suffix}` };\n}\n","/**\n * License plate validation — legacy (LLLNNNN) + Mercosul (LLLNLNN). CONTRAN 729/2018.\n * @see https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7292018consolidada.pdf\n * @see docs/use-cases/UC-004-validate-placa.md — golden vectors ABC1D23, ABC1234\n */\nimport { stripPlaca } from '../../strip/index.js';\nimport type { DocumentFormat, Placa, ValidationResult } from '../../types/validation-result.js';\nimport { brandPlaca } from '../../types/validation-result.js';\nimport { detectPlacaFormat } from './detect.js';\nimport { PLACA_LENGTH } from './constants.js';\n\nexport {\n PLACA_GOLDEN_CONVERSION_FROM,\n PLACA_GOLDEN_CONVERSION_TO,\n PLACA_GOLDEN_LEGACY,\n PLACA_GOLDEN_MERCOSUL,\n PLACA_OFFICIAL_SOURCE_URL,\n} from './constants.js';\nexport { detectPlacaFormat, type PlacaFormat } from './detect.js';\nexport { isValidPlacaLegacy } from './legacy.js';\nexport { isValidPlacaMercosul } from './mercosul.js';\nexport { convertPlacaToMercosul } from './convert.js';\n\ntype FailedResult = Extract<ValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string): FailedResult {\n return { ok: false, code, message };\n}\n\nfunction validateStructure(input: string, stripped: string): FailedResult | null {\n if (stripped.length === 0) {\n return failure('EMPTY_INPUT', 'Placa input is empty');\n }\n\n const withoutSeparators = input.replace(/[-\\s]/g, '');\n if (/[^A-Za-z0-9]/.test(withoutSeparators)) {\n return failure('INVALID_CHARACTER', 'Placa contains invalid characters');\n }\n\n if (stripped.length !== PLACA_LENGTH) {\n return failure('INVALID_LENGTH', `Placa must have ${PLACA_LENGTH} characters after normalization`);\n }\n\n return null;\n}\n\nexport function isValidPlaca(input: string): boolean {\n return validatePlaca(input).ok;\n}\n\nexport function validatePlaca(input: string): ValidationResult<Placa> {\n const stripped = stripPlaca(input);\n const structural = validateStructure(input, stripped);\n if (structural) {\n return structural;\n }\n\n const format = detectPlacaFormat(input);\n if (format === 'unknown') {\n return failure('UNSUPPORTED_FORMAT', 'Placa does not match legacy or Mercosul format');\n }\n\n return { ok: true, value: brandPlaca(stripped), format: format as DocumentFormat };\n}\n"]}
1
+ {"version":3,"sources":["../src/core/placa/constants.ts","../src/core/placa/detect.ts","../src/core/placa/legacy.ts","../src/core/placa/mercosul.ts","../src/core/placa/convert.ts","../src/core/placa/index.ts"],"names":["failure"],"mappings":"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","file":"chunk-3LMDBXU6.js","sourcesContent":["/**\n * License plate patterns — CONTRAN 729/2018 (legacy + Mercosul).\n * @see https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7292018consolidada.pdf\n * @see docs/use-cases/UC-004-validate-placa.md — golden vectors ABC1D23, ABC1234\n */\nexport const PLACA_LENGTH = 7;\nexport const PLACA_LEGACY_PATTERN = /^[A-Z]{3}[0-9]{4}$/;\nexport const PLACA_MERCOSUL_PATTERN = /^[A-Z]{3}[0-9][A-Z0-9][0-9]{2}$/;\nexport const PLACA_LEGACY_TO_MERCOSUL_MAP: Record<string, string> = {\n '0': 'A',\n '1': 'B',\n '2': 'C',\n '3': 'D',\n '4': 'E',\n '5': 'F',\n '6': 'G',\n '7': 'H',\n '8': 'I',\n '9': 'J',\n};\nexport const PLACA_GOLDEN_MERCOSUL = 'ABC1D23';\nexport const PLACA_GOLDEN_LEGACY = 'ABC1234';\nexport const PLACA_GOLDEN_CONVERSION_FROM = 'ABC1234';\nexport const PLACA_GOLDEN_CONVERSION_TO = 'ABC1C34';\nexport const PLACA_OFFICIAL_SOURCE_URL =\n 'https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7292018consolidada.pdf';\n","/**\n * License plate format detection — legacy vs Mercosul (CONTRAN).\n * @see https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7292018consolidada.pdf\n */\nimport { stripPlaca } from '../../strip/index.js';\nimport { PLACA_LENGTH, PLACA_LEGACY_PATTERN, PLACA_MERCOSUL_PATTERN } from './constants.js';\n\nexport type PlacaFormat = 'legacy' | 'mercosul' | 'unknown';\n\nexport function detectPlacaFormat(input: string): PlacaFormat {\n const stripped = stripPlaca(input);\n if (stripped.length !== PLACA_LENGTH) {\n return 'unknown';\n }\n if (PLACA_LEGACY_PATTERN.test(stripped)) {\n return 'legacy';\n }\n if (PLACA_MERCOSUL_PATTERN.test(stripped)) {\n return 'mercosul';\n }\n return 'unknown';\n}\n","/**\n * License plate — legacy format LLLNNNN (CONTRAN).\n * @see https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7292018consolidada.pdf\n */\nimport { stripPlaca } from '../../strip/index.js';\nimport { PLACA_LEGACY_PATTERN } from './constants.js';\n\nexport function isValidPlacaLegacy(input: string): boolean {\n const stripped = stripPlaca(input);\n return PLACA_LEGACY_PATTERN.test(stripped);\n}\n","/**\n * License plate — Mercosul format LLLNLNN (CONTRAN).\n * @see https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7292018consolidada.pdf\n */\nimport { stripPlaca } from '../../strip/index.js';\nimport { PLACA_MERCOSUL_PATTERN } from './constants.js';\n\nexport function isValidPlacaMercosul(input: string): boolean {\n const stripped = stripPlaca(input);\n return PLACA_MERCOSUL_PATTERN.test(stripped);\n}\n","/**\n * Legacy → Mercosul plate conversion (CONTRAN digit-to-letter table).\n * @see https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7292018consolidada.pdf\n */\nimport type { FormatResult } from '../../types/validation-result.js';\nimport { stripPlaca } from '../../strip/index.js';\nimport { PLACA_LEGACY_TO_MERCOSUL_MAP } from './constants.js';\nimport { detectPlacaFormat } from './detect.js';\n\ntype FailedResult = Extract<FormatResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string): FailedResult {\n return { ok: false, code, message };\n}\n\nexport function convertPlacaToMercosul(input: string): FormatResult {\n const stripped = stripPlaca(input);\n if (stripped.length === 0) {\n return failure('EMPTY_INPUT', 'Placa input is empty');\n }\n\n if (detectPlacaFormat(input) !== 'legacy') {\n return failure('UNSUPPORTED_FORMAT', 'Conversion requires a valid legacy plate (LLLNNNN)');\n }\n\n const prefix = stripped.slice(0, 4);\n const mapped = PLACA_LEGACY_TO_MERCOSUL_MAP[stripped.charAt(4)];\n const suffix = stripped.slice(5);\n return { ok: true, formatted: `${prefix}${mapped}${suffix}` };\n}\n","/**\n * License plate validation — legacy (LLLNNNN) + Mercosul (LLLNLNN). CONTRAN 729/2018.\n * @see https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7292018consolidada.pdf\n * @see docs/use-cases/UC-004-validate-placa.md — golden vectors ABC1D23, ABC1234\n */\nimport { stripPlaca } from '../../strip/index.js';\nimport type { DocumentFormat, Placa, ValidationResult } from '../../types/validation-result.js';\nimport { brandPlaca } from '../../types/validation-result.js';\nimport { detectPlacaFormat } from './detect.js';\nimport { PLACA_LENGTH } from './constants.js';\n\nexport {\n PLACA_GOLDEN_CONVERSION_FROM,\n PLACA_GOLDEN_CONVERSION_TO,\n PLACA_GOLDEN_LEGACY,\n PLACA_GOLDEN_MERCOSUL,\n PLACA_OFFICIAL_SOURCE_URL,\n} from './constants.js';\nexport { detectPlacaFormat, type PlacaFormat } from './detect.js';\nexport { isValidPlacaLegacy } from './legacy.js';\nexport { isValidPlacaMercosul } from './mercosul.js';\nexport { convertPlacaToMercosul } from './convert.js';\n\ntype FailedResult = Extract<ValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string): FailedResult {\n return { ok: false, code, message };\n}\n\nfunction validateStructure(input: string, stripped: string): FailedResult | null {\n if (stripped.length === 0) {\n return failure('EMPTY_INPUT', 'Placa input is empty');\n }\n\n const withoutSeparators = input.replace(/[-\\s]/g, '');\n if (/[^A-Za-z0-9]/.test(withoutSeparators)) {\n return failure('INVALID_CHARACTER', 'Placa contains invalid characters');\n }\n\n if (stripped.length !== PLACA_LENGTH) {\n return failure('INVALID_LENGTH', `Placa must have ${PLACA_LENGTH} characters after normalization`);\n }\n\n return null;\n}\n\nexport function isValidPlaca(input: string): boolean {\n return validatePlaca(input).ok;\n}\n\nexport function validatePlaca(input: string): ValidationResult<Placa> {\n const stripped = stripPlaca(input);\n const structural = validateStructure(input, stripped);\n if (structural) {\n return structural;\n }\n\n const format = detectPlacaFormat(input);\n if (format === 'unknown') {\n return failure('UNSUPPORTED_FORMAT', 'Placa does not match legacy or Mercosul format');\n }\n\n return { ok: true, value: brandPlaca(stripped), format: format as DocumentFormat };\n}\n"]}
@@ -0,0 +1,3 @@
1
+
2
+ //# sourceMappingURL=chunk-4J5IMD7B.js.map
3
+ //# sourceMappingURL=chunk-4J5IMD7B.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-4J5IMD7B.js"}
@@ -1,4 +1,4 @@
1
- import { validateIeSpRural, applyIeSpRuralMask } from './chunk-Y6IW2LMW.js';
1
+ import { validateIeSpRural, applyIeSpRuralMask } from './chunk-CDNOUZEI.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-BFZPCEYB.js.map
14
- //# sourceMappingURL=chunk-BFZPCEYB.js.map
13
+ //# sourceMappingURL=chunk-54UWHK5L.js.map
14
+ //# sourceMappingURL=chunk-54UWHK5L.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-BFZPCEYB.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-54UWHK5L.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,6 +1,6 @@
1
1
  import { stripCpf } from './chunk-UCJPSJN5.js';
2
2
  import { computeCheckDigit } from './chunk-OTZHMJYE.js';
3
- import { brandCpf } from './chunk-MSLJF2FM.js';
3
+ import { brandCpf } from './chunk-NUQSMT4Y.js';
4
4
 
5
5
  // src/core/cpf/constants.ts
6
6
  var CPF_DV1_WEIGHTS = [10, 9, 8, 7, 6, 5, 4, 3, 2];
@@ -69,5 +69,5 @@ function validateCpf(input) {
69
69
  }
70
70
 
71
71
  export { CPF_BASE_LENGTH, CPF_DV1_WEIGHTS, CPF_DV2_WEIGHTS, CPF_GOLDEN_PRIMARY, CPF_GOLDEN_PRIMARY_MASKED, CPF_GOLDEN_SECONDARY, CPF_MASK_PATTERN, CPF_OFFICIAL_SOURCE_URL, isValidCpf, validateCpf };
72
- //# sourceMappingURL=chunk-F6PTZY4O.js.map
73
- //# sourceMappingURL=chunk-F6PTZY4O.js.map
72
+ //# sourceMappingURL=chunk-63G7QO73.js.map
73
+ //# sourceMappingURL=chunk-63G7QO73.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/cpf/constants.ts","../src/core/cpf/index.ts"],"names":[],"mappings":"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","file":"chunk-F6PTZY4O.js","sourcesContent":["/**\n * CPF constants — modulo 11 weights (RFB standard).\n * @see https://www.gov.br/receitafederal/pt-br/assuntos/cpf\n * @see docs/use-cases/UC-001-validate-cpf.md — golden vector 12345678909\n */\nexport const CPF_DV1_WEIGHTS = [10, 9, 8, 7, 6, 5, 4, 3, 2] as const;\nexport const CPF_DV2_WEIGHTS = [11, 10, 9, 8, 7, 6, 5, 4, 3, 2] as const;\nexport const CPF_LENGTH = 11;\nexport const CPF_BASE_LENGTH = 9;\nexport const CPF_NUMERIC_PATTERN = /^\\d{11}$/;\nexport const CPF_MASK_PATTERN = /^(\\d{3})(\\d{3})(\\d{3})(\\d{2})$/;\n\nexport const CPF_GOLDEN_PRIMARY = '12345678909';\nexport const CPF_GOLDEN_SECONDARY = '11144477735';\nexport const CPF_GOLDEN_PRIMARY_MASKED = '123.456.789-09';\nexport const CPF_OFFICIAL_SOURCE_URL =\n 'https://www.gov.br/receitafederal/pt-br/assuntos/cpf';\n","/**\n * CPF validation — modulo 11 (RFB standard weights).\n * @see https://www.gov.br/receitafederal/pt-br/assuntos/cpf\n * @see docs/use-cases/UC-001-validate-cpf.md — golden vector 12345678909\n */\nimport { stripCpf } from '../../strip/cpf.js';\nimport type { ValidationResult } from '../../types/validation-result.js';\nimport { brandCpf } from '../../types/validation-result.js';\nimport { computeCheckDigit } from '../cnpj/modulo11.js';\nimport {\n CPF_BASE_LENGTH,\n CPF_DV1_WEIGHTS,\n CPF_DV2_WEIGHTS,\n CPF_LENGTH,\n} from './constants.js';\n\nexport {\n CPF_GOLDEN_PRIMARY,\n CPF_GOLDEN_PRIMARY_MASKED,\n CPF_GOLDEN_SECONDARY,\n CPF_OFFICIAL_SOURCE_URL,\n} from './constants.js';\n\ntype FailedResult = Extract<ValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string): FailedResult {\n return { ok: false, code, message };\n}\n\nfunction digitValue(char: string): number {\n return Number(char);\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 isValidCpfChecksum(stripped: string): boolean {\n const base = stripped.slice(0, CPF_BASE_LENGTH);\n const dv1Expected = String(computeCheckDigit(base, CPF_DV1_WEIGHTS, digitValue));\n const dv2Expected = String(\n computeCheckDigit(base + dv1Expected, CPF_DV2_WEIGHTS, digitValue),\n );\n\n return stripped.slice(CPF_BASE_LENGTH) === dv1Expected + dv2Expected;\n}\n\nfunction validateStructure(input: string, stripped: string): FailedResult | null {\n if (stripped.length === 0) {\n return failure('EMPTY_INPUT', 'CPF input is empty');\n }\n\n const withoutMask = input.replace(/[.-]/g, '');\n if (/[^0-9]/.test(withoutMask)) {\n return failure('INVALID_CHARACTER', 'CPF contains invalid characters');\n }\n\n if (stripped.length !== CPF_LENGTH) {\n return failure('INVALID_LENGTH', `CPF must have ${CPF_LENGTH} digits after normalization`);\n }\n\n if (hasRepeatedDigits(stripped)) {\n return failure('KNOWN_INVALID_PATTERN', 'CPF with all identical digits is invalid');\n }\n\n return null;\n}\n\nexport function isValidCpf(input: string): boolean {\n return validateCpf(input).ok;\n}\n\nexport function validateCpf(input: string): ValidationResult {\n const stripped = stripCpf(input);\n const structural = validateStructure(input, stripped);\n if (structural) {\n return structural;\n }\n\n if (isValidCpfChecksum(stripped)) {\n return { ok: true, value: brandCpf(stripped), format: 'numeric' };\n }\n\n return failure('INVALID_CHECK_DIGIT', 'CPF check digits are invalid');\n}\n"]}
1
+ {"version":3,"sources":["../src/core/cpf/constants.ts","../src/core/cpf/index.ts"],"names":[],"mappings":"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","file":"chunk-63G7QO73.js","sourcesContent":["/**\n * CPF constants — modulo 11 weights (RFB standard).\n * @see https://www.gov.br/receitafederal/pt-br/assuntos/cpf\n * @see docs/use-cases/UC-001-validate-cpf.md — golden vector 12345678909\n */\nexport const CPF_DV1_WEIGHTS = [10, 9, 8, 7, 6, 5, 4, 3, 2] as const;\nexport const CPF_DV2_WEIGHTS = [11, 10, 9, 8, 7, 6, 5, 4, 3, 2] as const;\nexport const CPF_LENGTH = 11;\nexport const CPF_BASE_LENGTH = 9;\nexport const CPF_NUMERIC_PATTERN = /^\\d{11}$/;\nexport const CPF_MASK_PATTERN = /^(\\d{3})(\\d{3})(\\d{3})(\\d{2})$/;\n\nexport const CPF_GOLDEN_PRIMARY = '12345678909';\nexport const CPF_GOLDEN_SECONDARY = '11144477735';\nexport const CPF_GOLDEN_PRIMARY_MASKED = '123.456.789-09';\nexport const CPF_OFFICIAL_SOURCE_URL =\n 'https://www.gov.br/receitafederal/pt-br/assuntos/cpf';\n","/**\n * CPF validation — modulo 11 (RFB standard weights).\n * @see https://www.gov.br/receitafederal/pt-br/assuntos/cpf\n * @see docs/use-cases/UC-001-validate-cpf.md — golden vector 12345678909\n */\nimport { stripCpf } from '../../strip/cpf.js';\nimport type { ValidationResult } from '../../types/validation-result.js';\nimport { brandCpf } from '../../types/validation-result.js';\nimport { computeCheckDigit } from '../cnpj/modulo11.js';\nimport {\n CPF_BASE_LENGTH,\n CPF_DV1_WEIGHTS,\n CPF_DV2_WEIGHTS,\n CPF_LENGTH,\n} from './constants.js';\n\nexport {\n CPF_GOLDEN_PRIMARY,\n CPF_GOLDEN_PRIMARY_MASKED,\n CPF_GOLDEN_SECONDARY,\n CPF_OFFICIAL_SOURCE_URL,\n} from './constants.js';\n\ntype FailedResult = Extract<ValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string): FailedResult {\n return { ok: false, code, message };\n}\n\nfunction digitValue(char: string): number {\n return Number(char);\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 isValidCpfChecksum(stripped: string): boolean {\n const base = stripped.slice(0, CPF_BASE_LENGTH);\n const dv1Expected = String(computeCheckDigit(base, CPF_DV1_WEIGHTS, digitValue));\n const dv2Expected = String(\n computeCheckDigit(base + dv1Expected, CPF_DV2_WEIGHTS, digitValue),\n );\n\n return stripped.slice(CPF_BASE_LENGTH) === dv1Expected + dv2Expected;\n}\n\nfunction validateStructure(input: string, stripped: string): FailedResult | null {\n if (stripped.length === 0) {\n return failure('EMPTY_INPUT', 'CPF input is empty');\n }\n\n const withoutMask = input.replace(/[.-]/g, '');\n if (/[^0-9]/.test(withoutMask)) {\n return failure('INVALID_CHARACTER', 'CPF contains invalid characters');\n }\n\n if (stripped.length !== CPF_LENGTH) {\n return failure('INVALID_LENGTH', `CPF must have ${CPF_LENGTH} digits after normalization`);\n }\n\n if (hasRepeatedDigits(stripped)) {\n return failure('KNOWN_INVALID_PATTERN', 'CPF with all identical digits is invalid');\n }\n\n return null;\n}\n\nexport function isValidCpf(input: string): boolean {\n return validateCpf(input).ok;\n}\n\nexport function validateCpf(input: string): ValidationResult {\n const stripped = stripCpf(input);\n const structural = validateStructure(input, stripped);\n if (structural) {\n return structural;\n }\n\n if (isValidCpfChecksum(stripped)) {\n return { ok: true, value: brandCpf(stripped), format: 'numeric' };\n }\n\n return failure('INVALID_CHECK_DIGIT', 'CPF check digits are invalid');\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { IE_DF_LENGTH, IE_DF_PREFIX, computeIeDfCheckDigit, IE_DF_DV1_WEIGHTS, IE_DF_DV2_WEIGHTS, IE_MT_CANONICAL_LENGTH, IE_MT_LEGACY_LENGTH, IE_MT_PREFIX, computeIeMtCheckDigit, IE_SP_LENGTH, computeIeSpCheckDigit, IE_SP_DV1_WEIGHTS, IE_SP_DV2_WEIGHTS, IE_OFFICIAL_SOURCE_URLS, applyIeSpMask, applyIeDfMask, IE_SUPPORTED_UFS, IE_TO_LEGACY_PREFIXES, computeIeToCheckDigit, computeIeCyclicMod11CheckDigit, IE_RR_PREFIX, computeIeRrCheckDigit, computeIeRoCheckDigit, IE_RN_PREFIX, computeIePrStyleCheckDigit, computeIePeCheckDigit, IE_PA_PREFIX, IE_MS_PREFIX, computeIeMgFirstCheckDigit, computeIeMgSecondCheckDigit, IE_MA_PREFIX, IE_GO_PREFIXES, computeIeGoCheckDigit, computeIeCeCheckDigit, computeIeBaModule, computeIeBaCheckDigit, IE_AP_PREFIX, computeIeApCheckDigit, computeIeAmCheckDigit, IE_AL_PREFIX, computeIeAlCheckDigit, IE_AC_PREFIX, computeIeAcCheckDigit } from './chunk-Y6IW2LMW.js';
2
- import { brandInscricaoEstadual } from './chunk-MSLJF2FM.js';
1
+ import { IE_DF_LENGTH, IE_DF_PREFIX, computeIeDfCheckDigit, IE_DF_DV1_WEIGHTS, IE_DF_DV2_WEIGHTS, IE_MT_CANONICAL_LENGTH, IE_MT_LEGACY_LENGTH, IE_MT_PREFIX, computeIeMtCheckDigit, IE_SP_LENGTH, computeIeSpCheckDigit, IE_SP_DV1_WEIGHTS, IE_SP_DV2_WEIGHTS, IE_OFFICIAL_SOURCE_URLS, applyIeSpMask, applyIeDfMask, IE_SUPPORTED_UFS, IE_TO_LEGACY_PREFIXES, computeIeToCheckDigit, computeIeCyclicMod11CheckDigit, IE_RR_PREFIX, computeIeRrCheckDigit, computeIeRoCheckDigit, IE_RN_PREFIX, computeIePrStyleCheckDigit, computeIePeCheckDigit, IE_PA_PREFIX, IE_MS_PREFIX, computeIeMgFirstCheckDigit, computeIeMgSecondCheckDigit, IE_MA_PREFIX, IE_GO_PREFIXES, computeIeGoCheckDigit, computeIeCeCheckDigit, computeIeBaModule, computeIeBaCheckDigit, IE_AP_PREFIX, computeIeApCheckDigit, computeIeAmCheckDigit, IE_AL_PREFIX, computeIeAlCheckDigit, IE_AC_PREFIX, computeIeAcCheckDigit } from './chunk-CDNOUZEI.js';
2
+ import { brandInscricaoEstadual } from './chunk-NUQSMT4Y.js';
3
3
 
4
4
  // src/core/inscricao-estadual/df.ts
5
5
  var DF_MASK_PATTERN = /^[0-9.-]+$/;
@@ -799,5 +799,5 @@ function formatInscricaoEstadual(input, options) {
799
799
  }
800
800
 
801
801
  export { formatInscricaoEstadual, getIeOfficialSourceUrl, isValidInscricaoEstadual, stripInscricaoEstadual, validateIeDf, validateIeMt, validateIeSp, validateInscricaoEstadual };
802
- //# sourceMappingURL=chunk-3QP6R46N.js.map
803
- //# sourceMappingURL=chunk-3QP6R46N.js.map
802
+ //# sourceMappingURL=chunk-665E36SC.js.map
803
+ //# sourceMappingURL=chunk-665E36SC.js.map