@br-validators/core 0.12.0-alpha.3 → 1.1.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 (180) hide show
  1. package/README.md +84 -12
  2. package/dist/bancos.d.ts +41 -0
  3. package/dist/bancos.js +3328 -0
  4. package/dist/bancos.js.map +1 -0
  5. package/dist/batch.d.ts +28 -0
  6. package/dist/batch.js +30 -0
  7. package/dist/batch.js.map +1 -0
  8. package/dist/boleto.d.ts +58 -5
  9. package/dist/boleto.js +6 -3
  10. package/dist/brcode.d.ts +15 -3
  11. package/dist/brcode.js +8 -8
  12. package/dist/cartao-credito.d.ts +2 -2
  13. package/dist/cartao-credito.js +3 -3
  14. package/dist/cep.d.ts +2 -2
  15. package/dist/cep.js +4 -4
  16. package/dist/{chunk-WPL47PWJ.js → chunk-3LMDBXU6.js} +3 -3
  17. package/dist/{chunk-WPL47PWJ.js.map → chunk-3LMDBXU6.js.map} +1 -1
  18. package/dist/chunk-4J5IMD7B.js +3 -0
  19. package/dist/chunk-4J5IMD7B.js.map +1 -0
  20. package/dist/{chunk-BFZPCEYB.js → chunk-54UWHK5L.js} +3 -3
  21. package/dist/{chunk-BFZPCEYB.js.map → chunk-54UWHK5L.js.map} +1 -1
  22. package/dist/chunk-5V6N4JWQ.js +135 -0
  23. package/dist/chunk-5V6N4JWQ.js.map +1 -0
  24. package/dist/{chunk-F6PTZY4O.js → chunk-63G7QO73.js} +3 -3
  25. package/dist/{chunk-F6PTZY4O.js.map → chunk-63G7QO73.js.map} +1 -1
  26. package/dist/{chunk-3QP6R46N.js → chunk-665E36SC.js} +4 -4
  27. package/dist/{chunk-3QP6R46N.js.map → chunk-665E36SC.js.map} +1 -1
  28. package/dist/{chunk-AK5GVYQ5.js → chunk-ANWQBKGN.js} +3 -3
  29. package/dist/{chunk-AK5GVYQ5.js.map → chunk-ANWQBKGN.js.map} +1 -1
  30. package/dist/{chunk-D36RM7OD.js → chunk-AO6UTQ4A.js} +3 -3
  31. package/dist/{chunk-D36RM7OD.js.map → chunk-AO6UTQ4A.js.map} +1 -1
  32. package/dist/chunk-ASQ2XIN2.js +99 -0
  33. package/dist/chunk-ASQ2XIN2.js.map +1 -0
  34. package/dist/chunk-AU6TW3GH.js +136 -0
  35. package/dist/chunk-AU6TW3GH.js.map +1 -0
  36. package/dist/{chunk-XW5G2RAL.js → chunk-B6A7VF4R.js} +3 -3
  37. package/dist/{chunk-XW5G2RAL.js.map → chunk-B6A7VF4R.js.map} +1 -1
  38. package/dist/{chunk-Q7B5VOPW.js → chunk-BA3FAVK4.js} +243 -37
  39. package/dist/chunk-BA3FAVK4.js.map +1 -0
  40. package/dist/{chunk-Y6IW2LMW.js → chunk-CDNOUZEI.js} +3 -3
  41. package/dist/{chunk-Y6IW2LMW.js.map → chunk-CDNOUZEI.js.map} +1 -1
  42. package/dist/{chunk-XUO7FV6Z.js → chunk-CSRBRKXY.js} +3 -3
  43. package/dist/{chunk-XUO7FV6Z.js.map → chunk-CSRBRKXY.js.map} +1 -1
  44. package/dist/{chunk-DJUANFIK.js → chunk-CSVGWTCG.js} +3 -3
  45. package/dist/{chunk-DJUANFIK.js.map → chunk-CSVGWTCG.js.map} +1 -1
  46. package/dist/chunk-E2EFGMWA.js +200 -0
  47. package/dist/chunk-E2EFGMWA.js.map +1 -0
  48. package/dist/chunk-EFEE6CMO.js +24091 -0
  49. package/dist/chunk-EFEE6CMO.js.map +1 -0
  50. package/dist/{chunk-KSLDM5AD.js → chunk-EVULAGR5.js} +3 -3
  51. package/dist/{chunk-KSLDM5AD.js.map → chunk-EVULAGR5.js.map} +1 -1
  52. package/dist/{chunk-YXELVV37.js → chunk-FBARVLLP.js} +4 -4
  53. package/dist/{chunk-YXELVV37.js.map → chunk-FBARVLLP.js.map} +1 -1
  54. package/dist/chunk-FOP5LO7W.js +131 -0
  55. package/dist/chunk-FOP5LO7W.js.map +1 -0
  56. package/dist/{chunk-MK7OJUF5.js → chunk-H3MLGGFI.js} +8 -8
  57. package/dist/{chunk-MK7OJUF5.js.map → chunk-H3MLGGFI.js.map} +1 -1
  58. package/dist/{chunk-WLE2ENQA.js → chunk-I66ZRSEN.js} +3 -3
  59. package/dist/{chunk-WLE2ENQA.js.map → chunk-I66ZRSEN.js.map} +1 -1
  60. package/dist/{chunk-GRDUTHNX.js → chunk-IYOPXJLY.js} +3 -3
  61. package/dist/{chunk-GRDUTHNX.js.map → chunk-IYOPXJLY.js.map} +1 -1
  62. package/dist/chunk-JCWQDTZB.js +41 -0
  63. package/dist/chunk-JCWQDTZB.js.map +1 -0
  64. package/dist/{chunk-4Y2FBO57.js → chunk-JKDU7QYP.js} +3 -3
  65. package/dist/{chunk-4Y2FBO57.js.map → chunk-JKDU7QYP.js.map} +1 -1
  66. package/dist/{chunk-KH7DWOUA.js → chunk-JLCQ7MGC.js} +3 -3
  67. package/dist/{chunk-KH7DWOUA.js.map → chunk-JLCQ7MGC.js.map} +1 -1
  68. package/dist/chunk-KBNWI6GE.js +3 -0
  69. package/dist/chunk-KBNWI6GE.js.map +1 -0
  70. package/dist/chunk-KLPONHBL.js +3 -0
  71. package/dist/chunk-KLPONHBL.js.map +1 -0
  72. package/dist/chunk-KTEQPYYN.js +31 -0
  73. package/dist/chunk-KTEQPYYN.js.map +1 -0
  74. package/dist/{chunk-CDGRHI7W.js → chunk-LAEUXOF6.js} +3 -3
  75. package/dist/{chunk-CDGRHI7W.js.map → chunk-LAEUXOF6.js.map} +1 -1
  76. package/dist/chunk-LRUZVPLR.js +93 -0
  77. package/dist/chunk-LRUZVPLR.js.map +1 -0
  78. package/dist/{chunk-ZAUZRIOU.js → chunk-MESOO5GZ.js} +3 -3
  79. package/dist/{chunk-ZAUZRIOU.js.map → chunk-MESOO5GZ.js.map} +1 -1
  80. package/dist/chunk-MKYCKCZ6.js +100 -0
  81. package/dist/chunk-MKYCKCZ6.js.map +1 -0
  82. package/dist/chunk-N5CER3QZ.js +128 -0
  83. package/dist/chunk-N5CER3QZ.js.map +1 -0
  84. package/dist/chunk-N6RQICAP.js +220 -0
  85. package/dist/chunk-N6RQICAP.js.map +1 -0
  86. package/dist/{chunk-MSLJF2FM.js → chunk-NUQSMT4Y.js} +2 -2
  87. package/dist/chunk-NUQSMT4Y.js.map +1 -0
  88. package/dist/{chunk-KQDLIGSG.js → chunk-P2KNN6ZR.js} +3 -3
  89. package/dist/{chunk-KQDLIGSG.js.map → chunk-P2KNN6ZR.js.map} +1 -1
  90. package/dist/{chunk-JZNTCZMV.js → chunk-PCP77SLS.js} +34 -18
  91. package/dist/chunk-PCP77SLS.js.map +1 -0
  92. package/dist/{chunk-G2Y63PIF.js → chunk-PNPESCSP.js} +3 -3
  93. package/dist/{chunk-G2Y63PIF.js.map → chunk-PNPESCSP.js.map} +1 -1
  94. package/dist/{chunk-LYBFUKHR.js → chunk-RMTHCPIV.js} +4 -4
  95. package/dist/{chunk-LYBFUKHR.js.map → chunk-RMTHCPIV.js.map} +1 -1
  96. package/dist/{chunk-2JJS46FM.js → chunk-TE6NSONR.js} +3 -3
  97. package/dist/{chunk-2JJS46FM.js.map → chunk-TE6NSONR.js.map} +1 -1
  98. package/dist/{chunk-NHLLC6WH.js → chunk-TJCE4TVX.js} +4 -4
  99. package/dist/{chunk-NHLLC6WH.js.map → chunk-TJCE4TVX.js.map} +1 -1
  100. package/dist/chunk-UCNPXHIJ.js +32 -0
  101. package/dist/chunk-UCNPXHIJ.js.map +1 -0
  102. package/dist/{chunk-WCQUQ2WX.js → chunk-V7UJ55KW.js} +47 -5
  103. package/dist/chunk-V7UJ55KW.js.map +1 -0
  104. package/dist/{chunk-IQGRFAQV.js → chunk-VSW3NBJQ.js} +3 -3
  105. package/dist/{chunk-IQGRFAQV.js.map → chunk-VSW3NBJQ.js.map} +1 -1
  106. package/dist/{chunk-6QJFMOIX.js → chunk-VWVQWN2G.js} +3 -3
  107. package/dist/{chunk-6QJFMOIX.js.map → chunk-VWVQWN2G.js.map} +1 -1
  108. package/dist/chunk-XADVBV73.js +30 -0
  109. package/dist/chunk-XADVBV73.js.map +1 -0
  110. package/dist/{chunk-FXLVNCG3.js → chunk-XWHGXSQV.js} +3 -3
  111. package/dist/{chunk-FXLVNCG3.js.map → chunk-XWHGXSQV.js.map} +1 -1
  112. package/dist/{chunk-G32U6YQ5.js → chunk-YD5MPZWY.js} +3 -3
  113. package/dist/{chunk-G32U6YQ5.js.map → chunk-YD5MPZWY.js.map} +1 -1
  114. package/dist/{chunk-US4OLTJ2.js → chunk-YNVMVDFN.js} +3 -3
  115. package/dist/{chunk-US4OLTJ2.js.map → chunk-YNVMVDFN.js.map} +1 -1
  116. package/dist/cnh.d.ts +2 -2
  117. package/dist/cnh.js +4 -4
  118. package/dist/cnpj.d.ts +2 -2
  119. package/dist/cnpj.js +5 -5
  120. package/dist/compare.d.ts +16 -0
  121. package/dist/compare.js +33 -0
  122. package/dist/compare.js.map +1 -0
  123. package/dist/cpf.d.ts +2 -2
  124. package/dist/cpf.js +4 -4
  125. package/dist/data-catalog.d.ts +14 -0
  126. package/dist/data-catalog.js +25 -0
  127. package/dist/data-catalog.js.map +1 -0
  128. package/dist/detect.d.ts +1 -1
  129. package/dist/detect.js +23 -20
  130. package/dist/diff.d.ts +16 -0
  131. package/dist/diff.js +33 -0
  132. package/dist/diff.js.map +1 -0
  133. package/dist/generate.d.ts +24 -3
  134. package/dist/generate.js +37 -27
  135. package/dist/ibge.d.ts +65 -0
  136. package/dist/ibge.js +28174 -0
  137. package/dist/ibge.js.map +1 -0
  138. package/dist/{index-CZLo9YOT.d.ts → index-BEJFgDXj.d.ts} +1 -1
  139. package/dist/index.d.ts +15 -9
  140. package/dist/index.js +61 -49
  141. package/dist/index.js.map +1 -1
  142. package/dist/{inscricao-estadual-produtor-rural-CfWUaggb.d.ts → inscricao-estadual-produtor-rural-BXFVQscj.d.ts} +1 -1
  143. package/dist/inscricao-estadual-produtor-rural.d.ts +2 -2
  144. package/dist/inscricao-estadual-produtor-rural.js +3 -3
  145. package/dist/inscricao-estadual.d.ts +3 -3
  146. package/dist/inscricao-estadual.js +4 -4
  147. package/dist/mask.d.ts +13 -0
  148. package/dist/mask.js +41 -0
  149. package/dist/mask.js.map +1 -0
  150. package/dist/nfe-chave.d.ts +2 -2
  151. package/dist/nfe-chave.js +4 -3
  152. package/dist/pis-pasep.d.ts +2 -2
  153. package/dist/pis-pasep.js +3 -3
  154. package/dist/{pix-ddldLlb7.d.ts → pix-B4habHLG.d.ts} +1 -1
  155. package/dist/pix.d.ts +2 -2
  156. package/dist/pix.js +9 -8
  157. package/dist/placa.d.ts +2 -2
  158. package/dist/placa.js +4 -4
  159. package/dist/renavam.d.ts +2 -2
  160. package/dist/renavam.js +4 -4
  161. package/dist/sanitize.d.ts +2 -2
  162. package/dist/sanitize.js +21 -17
  163. package/dist/telefone.d.ts +34 -3
  164. package/dist/telefone.js +4 -3
  165. package/dist/titulo-eleitor.d.ts +2 -2
  166. package/dist/titulo-eleitor.js +4 -4
  167. package/dist/types-CBIZxgfG.d.ts +28 -0
  168. package/dist/types-MXifBcV5.d.ts +10 -0
  169. package/dist/{validation-result-BhQE-1_O.d.ts → validation-result-BaI2Xder.d.ts} +24 -5
  170. package/package.json +36 -1
  171. package/dist/chunk-4W4OKLSZ.js +0 -366
  172. package/dist/chunk-4W4OKLSZ.js.map +0 -1
  173. package/dist/chunk-5UL3M7IU.js +0 -192
  174. package/dist/chunk-5UL3M7IU.js.map +0 -1
  175. package/dist/chunk-CSZCIOGA.js +0 -187
  176. package/dist/chunk-CSZCIOGA.js.map +0 -1
  177. package/dist/chunk-JZNTCZMV.js.map +0 -1
  178. package/dist/chunk-MSLJF2FM.js.map +0 -1
  179. package/dist/chunk-Q7B5VOPW.js.map +0 -1
  180. package/dist/chunk-WCQUQ2WX.js.map +0 -1
@@ -0,0 +1,220 @@
1
+ import { computeModulo10FieldDv, BOLETO_CODIGO_BARRAS_LENGTH, detectBoletoSituacao, BOLETO_CODE_ISPB_HOLDER, computeModulo11BarcodeDv, toBoletoSituacaoCode, BOLETO_ARRECADACAO_LINHA_LENGTH, BOLETO_ARRECADACAO_PRODUCT_ID, BOLETO_ARRECADACAO_CODIGO_BARRAS_LENGTH } from './chunk-E2EFGMWA.js';
2
+ import { brandCodigoBarras } from './chunk-NUQSMT4Y.js';
3
+
4
+ // src/core/boleto/codigo-barras.ts
5
+ function failure(code, message) {
6
+ return { ok: false, code, message, inputKind: "codigo-barras" };
7
+ }
8
+ function stripCodigoBarras(input) {
9
+ return input.replace(/\D/g, "");
10
+ }
11
+ function validateCodigoBarras(input) {
12
+ const trimmed = input.trim();
13
+ if (trimmed.length === 0) {
14
+ return { ok: false, code: "EMPTY_INPUT", message: "C\xF3digo de barras input is empty" };
15
+ }
16
+ if (/[^0-9]/.test(trimmed)) {
17
+ return failure("INVALID_CHARACTER", "C\xF3digo de barras contains invalid characters");
18
+ }
19
+ if (trimmed.length !== BOLETO_CODIGO_BARRAS_LENGTH) {
20
+ return failure("INVALID_LENGTH", `C\xF3digo de barras must have ${BOLETO_CODIGO_BARRAS_LENGTH} digits`);
21
+ }
22
+ const situacaoKind = detectBoletoSituacao(trimmed);
23
+ if (situacaoKind === "unknown") {
24
+ const isIspbHolder = trimmed.slice(0, 3) === BOLETO_CODE_ISPB_HOLDER;
25
+ const message = isIspbHolder ? "ISPB holder boleto (code 988) requires currency indicator 0 (Situa\xE7\xE3o 2)" : "Bank boleto currency code must be 9 (Real) for Situa\xE7\xE3o 1";
26
+ return failure("UNSUPPORTED_FORMAT", message);
27
+ }
28
+ if (trimmed.charAt(4) === "0") {
29
+ return failure("INVALID_CHECK_DIGIT", "Barcode DV cannot be 0");
30
+ }
31
+ const expectedDv = String(computeModulo11BarcodeDv(trimmed.slice(0, 4) + trimmed.slice(5)));
32
+ if (trimmed.charAt(4) !== expectedDv) {
33
+ return failure("INVALID_CHECK_DIGIT", "C\xF3digo de barras check digit is invalid");
34
+ }
35
+ const situacao = toBoletoSituacaoCode(situacaoKind);
36
+ return {
37
+ ok: true,
38
+ value: brandCodigoBarras(trimmed),
39
+ inputKind: "codigo-barras",
40
+ format: "codigo-barras",
41
+ situacao
42
+ };
43
+ }
44
+
45
+ // src/core/boleto/arrecadacao-modulo.ts
46
+ function computeArrecadacaoModulo11Dv(digits) {
47
+ const multipliers = [2, 3, 4, 5, 6, 7, 8, 9];
48
+ let sum = 0;
49
+ for (let i = digits.length - 1, m = 0; i >= 0; i--, m++) {
50
+ sum += Number(digits[i]) * multipliers[m % multipliers.length];
51
+ }
52
+ const remainder = sum % 11;
53
+ if (remainder === 0 || remainder === 1) {
54
+ return 0;
55
+ }
56
+ if (remainder === 10) {
57
+ return 1;
58
+ }
59
+ return 11 - remainder;
60
+ }
61
+ function isArrecadacaoValueType(valueType) {
62
+ return valueType === "6" || valueType === "7" || valueType === "8" || valueType === "9";
63
+ }
64
+ function getArrecadacaoDvCalculator(valueType) {
65
+ if (valueType === "6" || valueType === "7") {
66
+ return computeModulo10FieldDv;
67
+ }
68
+ if (valueType === "8" || valueType === "9") {
69
+ return computeArrecadacaoModulo11Dv;
70
+ }
71
+ throw new Error(`Unsupported arrecada\xE7\xE3o value type: ${valueType}`);
72
+ }
73
+
74
+ // src/core/boleto/arrecadacao.ts
75
+ function failure2(code, message, inputKind) {
76
+ return { ok: false, code, message, ...inputKind ? { inputKind } : {} };
77
+ }
78
+ function stripArrecadacao(input) {
79
+ return input.replace(/\D/g, "");
80
+ }
81
+ function validateGeneralDv(barcode) {
82
+ const valueType = barcode.charAt(2);
83
+ const withoutDv = barcode.slice(0, 3) + barcode.slice(4);
84
+ const expected = String(getArrecadacaoDvCalculator(valueType)(withoutDv));
85
+ if (barcode.charAt(3) !== expected) {
86
+ return failure2("INVALID_CHECK_DIGIT", "Arrecada\xE7\xE3o general check digit is invalid");
87
+ }
88
+ return null;
89
+ }
90
+ function validateLinhaFieldDvs(linha, valueType) {
91
+ const dv = getArrecadacaoDvCalculator(valueType);
92
+ const blocks = [
93
+ [0, 11, 1],
94
+ [12, 23, 2],
95
+ [24, 35, 3],
96
+ [36, 47, 4]
97
+ ];
98
+ for (const [start, dvIndex, blockNumber] of blocks) {
99
+ const field = linha.slice(start, start + 11);
100
+ const expected = String(dv(field));
101
+ if (linha.charAt(dvIndex) !== expected) {
102
+ return failure2(
103
+ "INVALID_CHECK_DIGIT",
104
+ `Arrecada\xE7\xE3o linha block ${String(blockNumber)} check digit is invalid`,
105
+ "arrecadacao-linha"
106
+ );
107
+ }
108
+ }
109
+ return null;
110
+ }
111
+ function linhaArrecadacaoToCodigoBarras(linha) {
112
+ return [0, 12, 24, 36].map((start) => linha.slice(start, start + 11)).join("");
113
+ }
114
+ function validateArrecadacaoLinha(input) {
115
+ const trimmed = input.trim();
116
+ if (trimmed.length === 0) {
117
+ return failure2("EMPTY_INPUT", "Arrecada\xE7\xE3o input is empty");
118
+ }
119
+ if (/[^0-9.\s]/.test(trimmed)) {
120
+ return failure2("INVALID_CHARACTER", "Arrecada\xE7\xE3o linha contains invalid characters", "arrecadacao-linha");
121
+ }
122
+ const stripped = stripArrecadacao(trimmed);
123
+ if (stripped.length !== BOLETO_ARRECADACAO_LINHA_LENGTH) {
124
+ return failure2(
125
+ "INVALID_LENGTH",
126
+ `Arrecada\xE7\xE3o linha must have ${String(BOLETO_ARRECADACAO_LINHA_LENGTH)} digits`,
127
+ "arrecadacao-linha"
128
+ );
129
+ }
130
+ if (!stripped.startsWith(BOLETO_ARRECADACAO_PRODUCT_ID)) {
131
+ return failure2("UNSUPPORTED_FORMAT", "Arrecada\xE7\xE3o linha must start with 8", "arrecadacao-linha");
132
+ }
133
+ const valueType = stripped.charAt(2);
134
+ if (!isArrecadacaoValueType(valueType)) {
135
+ return failure2("UNSUPPORTED_FORMAT", "Arrecada\xE7\xE3o value type must be 6, 7, 8, or 9", "arrecadacao-linha");
136
+ }
137
+ const fieldError = validateLinhaFieldDvs(stripped, valueType);
138
+ if (fieldError) {
139
+ return fieldError;
140
+ }
141
+ const barcode = linhaArrecadacaoToCodigoBarras(stripped);
142
+ const generalError = validateGeneralDv(barcode);
143
+ if (generalError) {
144
+ return { ...generalError, inputKind: "arrecadacao-linha" };
145
+ }
146
+ return {
147
+ ok: true,
148
+ value: stripped,
149
+ inputKind: "arrecadacao-linha",
150
+ format: "arrecadacao",
151
+ segment: stripped.charAt(1),
152
+ valueType
153
+ };
154
+ }
155
+ function validateArrecadacaoCodigoBarras(input) {
156
+ const trimmed = input.trim();
157
+ if (trimmed.length === 0) {
158
+ return failure2("EMPTY_INPUT", "Arrecada\xE7\xE3o input is empty");
159
+ }
160
+ if (/[^0-9]/.test(trimmed)) {
161
+ return failure2("INVALID_CHARACTER", "Arrecada\xE7\xE3o c\xF3digo de barras contains invalid characters", "arrecadacao-codigo-barras");
162
+ }
163
+ if (trimmed.length !== BOLETO_ARRECADACAO_CODIGO_BARRAS_LENGTH) {
164
+ return failure2(
165
+ "INVALID_LENGTH",
166
+ `Arrecada\xE7\xE3o c\xF3digo de barras must have ${String(BOLETO_ARRECADACAO_CODIGO_BARRAS_LENGTH)} digits`,
167
+ "arrecadacao-codigo-barras"
168
+ );
169
+ }
170
+ if (!trimmed.startsWith(BOLETO_ARRECADACAO_PRODUCT_ID)) {
171
+ return failure2("UNSUPPORTED_FORMAT", "Arrecada\xE7\xE3o c\xF3digo de barras must start with 8", "arrecadacao-codigo-barras");
172
+ }
173
+ const valueType = trimmed.charAt(2);
174
+ if (!isArrecadacaoValueType(valueType)) {
175
+ return failure2("UNSUPPORTED_FORMAT", "Arrecada\xE7\xE3o value type must be 6, 7, 8, or 9", "arrecadacao-codigo-barras");
176
+ }
177
+ const generalError = validateGeneralDv(trimmed);
178
+ if (generalError) {
179
+ return generalError;
180
+ }
181
+ return {
182
+ ok: true,
183
+ value: trimmed,
184
+ inputKind: "arrecadacao-codigo-barras",
185
+ format: "arrecadacao",
186
+ segment: trimmed.charAt(1),
187
+ valueType
188
+ };
189
+ }
190
+ function validateArrecadacao(input) {
191
+ const stripped = stripArrecadacao(input.trim());
192
+ if (stripped.length === 0) {
193
+ return failure2("EMPTY_INPUT", "Arrecada\xE7\xE3o input is empty");
194
+ }
195
+ if (stripped.length === BOLETO_ARRECADACAO_LINHA_LENGTH) {
196
+ return validateArrecadacaoLinha(input);
197
+ }
198
+ if (stripped.length === BOLETO_ARRECADACAO_CODIGO_BARRAS_LENGTH) {
199
+ return validateArrecadacaoCodigoBarras(input);
200
+ }
201
+ return failure2("INVALID_LENGTH", "Arrecada\xE7\xE3o input must have 44 or 48 digits");
202
+ }
203
+ function isValidArrecadacao(input) {
204
+ return validateArrecadacao(input).ok;
205
+ }
206
+ function buildArrecadacaoGoldenPair(options) {
207
+ const head = BOLETO_ARRECADACAO_PRODUCT_ID + options.segment + options.valueType;
208
+ const body = options.value.padStart(11, "0") + options.company.padStart(4, "0") + options.free.padEnd(25, "0").slice(0, 25);
209
+ const withoutDv = head + body;
210
+ const dvFn = getArrecadacaoDvCalculator(options.valueType);
211
+ const barcode = head + String(dvFn(withoutDv)) + body;
212
+ const linha = [0, 11, 22, 33].map((start) => barcode.slice(start, start + 11) + String(dvFn(barcode.slice(start, start + 11)))).join("");
213
+ return { barcode, linha };
214
+ }
215
+ var ARRECADACAO_MOD10_GOLDEN_SEQUENCE = "01230067896";
216
+ computeModulo10FieldDv(ARRECADACAO_MOD10_GOLDEN_SEQUENCE);
217
+
218
+ export { buildArrecadacaoGoldenPair, computeArrecadacaoModulo11Dv, getArrecadacaoDvCalculator, isArrecadacaoValueType, isValidArrecadacao, linhaArrecadacaoToCodigoBarras, stripArrecadacao, stripCodigoBarras, validateArrecadacao, validateArrecadacaoCodigoBarras, validateArrecadacaoLinha, validateCodigoBarras };
219
+ //# sourceMappingURL=chunk-N6RQICAP.js.map
220
+ //# sourceMappingURL=chunk-N6RQICAP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/boleto/codigo-barras.ts","../src/core/boleto/arrecadacao-modulo.ts","../src/core/boleto/arrecadacao.ts"],"names":["failure"],"mappings":"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","file":"chunk-N6RQICAP.js","sourcesContent":["/**\n * Código de barras validation — modulo 11 general DV (Anexo X).\n * @see BR-BOLETO-003, BR-BOLETO-004, BR-BOLETO-010\n */\nimport type { BoletoSituacao, CobrancaBoletoValidationResult } from '../../types/validation-result.js';\nimport { brandCodigoBarras } from '../../types/validation-result.js';\nimport {\n BOLETO_CODIGO_BARRAS_LENGTH,\n BOLETO_CODE_ISPB_HOLDER,\n} from './constants.js';\nimport { detectBoletoSituacao, toBoletoSituacaoCode } from './detect-situacao.js';\nimport { computeModulo11BarcodeDv } from './modulo11.js';\n\ntype FailedResult = Extract<CobrancaBoletoValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string): FailedResult {\n return { ok: false, code, message, inputKind: 'codigo-barras' };\n}\n\nexport function stripCodigoBarras(input: string): string {\n return input.replace(/\\D/g, '');\n}\n\nexport function validateCodigoBarras(input: string): CobrancaBoletoValidationResult {\n const trimmed = input.trim();\n if (trimmed.length === 0) {\n return { ok: false, code: 'EMPTY_INPUT', message: 'Código de barras input is empty' };\n }\n\n if (/[^0-9]/.test(trimmed)) {\n return failure('INVALID_CHARACTER', 'Código de barras contains invalid characters');\n }\n\n if (trimmed.length !== BOLETO_CODIGO_BARRAS_LENGTH) {\n return failure('INVALID_LENGTH', `Código de barras must have ${BOLETO_CODIGO_BARRAS_LENGTH} digits`);\n }\n\n const situacaoKind = detectBoletoSituacao(trimmed);\n if (situacaoKind === 'unknown') {\n const isIspbHolder = trimmed.slice(0, 3) === BOLETO_CODE_ISPB_HOLDER;\n const message = isIspbHolder\n ? 'ISPB holder boleto (code 988) requires currency indicator 0 (Situação 2)'\n : 'Bank boleto currency code must be 9 (Real) for Situação 1';\n return failure('UNSUPPORTED_FORMAT', message);\n }\n\n if (trimmed.charAt(4) === '0') {\n return failure('INVALID_CHECK_DIGIT', 'Barcode DV cannot be 0');\n }\n\n const expectedDv = String(computeModulo11BarcodeDv(trimmed.slice(0, 4) + trimmed.slice(5)));\n if (trimmed.charAt(4) !== expectedDv) {\n return failure('INVALID_CHECK_DIGIT', 'Código de barras check digit is invalid');\n }\n\n const situacao = toBoletoSituacaoCode(situacaoKind) as BoletoSituacao;\n return {\n ok: true,\n value: brandCodigoBarras(trimmed),\n inputKind: 'codigo-barras',\n format: 'codigo-barras',\n situacao,\n };\n}\n","import { computeModulo10FieldDv } from './modulo10.js';\n\n/**\n * FEBRABAN arrecadação modulo 11 — Layout v7 §09–10.\n * @see BOLETO_ARRECADACAO_OFFICIAL_SOURCE_URL\n *\n * Multipliers 2,3,4,5,6,7,8,9,2,3,4… from right; remainder 0|1 → DV 0; remainder 10 → DV 1.\n */\nexport function computeArrecadacaoModulo11Dv(digits: string): number {\n const multipliers = [2, 3, 4, 5, 6, 7, 8, 9];\n let sum = 0;\n\n for (let i = digits.length - 1, m = 0; i >= 0; i--, m++) {\n sum += Number(digits[i]) * multipliers[m % multipliers.length];\n }\n\n const remainder = sum % 11;\n if (remainder === 0 || remainder === 1) {\n return 0;\n }\n if (remainder === 10) {\n return 1;\n }\n return 11 - remainder;\n}\n\nexport function isArrecadacaoValueType(valueType: string): valueType is ArrecadacaoValueType {\n return valueType === '6' || valueType === '7' || valueType === '8' || valueType === '9';\n}\n\nexport type ArrecadacaoValueType = '6' | '7' | '8' | '9';\n\nexport function getArrecadacaoDvCalculator(\n valueType: string,\n): (digits: string) => number {\n if (valueType === '6' || valueType === '7') {\n return computeModulo10FieldDv;\n }\n if (valueType === '8' || valueType === '9') {\n return computeArrecadacaoModulo11Dv;\n }\n throw new Error(`Unsupported arrecadação value type: ${valueType}`);\n}\n\n/** Re-export cobrança-compatible modulo 10 (Layout v7 §07 — same algorithm). */\nexport { computeModulo10FieldDv as computeArrecadacaoModulo10Dv } from './modulo10.js';\n","/**\n * Boleto arrecadação — FEBRABAN Layout v7 (48-digit linha + 44-digit código de barras).\n * @see docs/use-cases/UC-007-validate-boleto.md\n * @see BOLETO_ARRECADACAO_OFFICIAL_SOURCE_URL\n */\nimport type { ValidationErrorCode } from '../../types/validation-result.js';\nimport {\n BOLETO_ARRECADACAO_CODIGO_BARRAS_LENGTH,\n BOLETO_ARRECADACAO_LINHA_LENGTH,\n BOLETO_ARRECADACAO_PRODUCT_ID,\n} from './constants.js';\nimport {\n computeArrecadacaoModulo10Dv,\n getArrecadacaoDvCalculator,\n isArrecadacaoValueType,\n type ArrecadacaoValueType,\n} from './arrecadacao-modulo.js';\n\nexport type ArrecadacaoInputKind = 'arrecadacao-linha' | 'arrecadacao-codigo-barras';\n\nexport type ArrecadacaoValidationResult =\n | {\n ok: true;\n value: string;\n inputKind: ArrecadacaoInputKind;\n format: 'arrecadacao';\n segment: string;\n valueType: ArrecadacaoValueType;\n }\n | { ok: false; code: ValidationErrorCode; message: string; inputKind?: ArrecadacaoInputKind };\n\ntype Failure = Extract<ArrecadacaoValidationResult, { ok: false }>;\n\nfunction failure(\n code: Failure['code'],\n message: string,\n inputKind?: ArrecadacaoInputKind,\n): Failure {\n return { ok: false, code, message, ...(inputKind ? { inputKind } : {}) };\n}\n\nexport function stripArrecadacao(input: string): string {\n return input.replace(/\\D/g, '');\n}\n\nfunction validateGeneralDv(barcode: string): Failure | null {\n const valueType = barcode.charAt(2) as ArrecadacaoValueType;\n const withoutDv = barcode.slice(0, 3) + barcode.slice(4);\n const expected = String(getArrecadacaoDvCalculator(valueType)(withoutDv));\n if (barcode.charAt(3) !== expected) {\n return failure('INVALID_CHECK_DIGIT', 'Arrecadação general check digit is invalid');\n }\n return null;\n}\n\nfunction validateLinhaFieldDvs(linha: string, valueType: ArrecadacaoValueType): Failure | null {\n const dv = getArrecadacaoDvCalculator(valueType);\n const blocks: Array<[number, number, number]> = [\n [0, 11, 1],\n [12, 23, 2],\n [24, 35, 3],\n [36, 47, 4],\n ];\n\n for (const [start, dvIndex, blockNumber] of blocks) {\n const field = linha.slice(start, start + 11);\n const expected = String(dv(field));\n if (linha.charAt(dvIndex) !== expected) {\n return failure(\n 'INVALID_CHECK_DIGIT',\n `Arrecadação linha block ${String(blockNumber)} check digit is invalid`,\n 'arrecadacao-linha',\n );\n }\n }\n return null;\n}\n\nexport function linhaArrecadacaoToCodigoBarras(linha: string): string {\n return [0, 12, 24, 36].map((start) => linha.slice(start, start + 11)).join('');\n}\n\nexport function validateArrecadacaoLinha(input: string): ArrecadacaoValidationResult {\n const trimmed = input.trim();\n if (trimmed.length === 0) {\n return failure('EMPTY_INPUT', 'Arrecadação input is empty');\n }\n\n if (/[^0-9.\\s]/.test(trimmed)) {\n return failure('INVALID_CHARACTER', 'Arrecadação linha contains invalid characters', 'arrecadacao-linha');\n }\n\n const stripped = stripArrecadacao(trimmed);\n if (stripped.length !== BOLETO_ARRECADACAO_LINHA_LENGTH) {\n return failure(\n 'INVALID_LENGTH',\n `Arrecadação linha must have ${String(BOLETO_ARRECADACAO_LINHA_LENGTH)} digits`,\n 'arrecadacao-linha',\n );\n }\n\n if (!stripped.startsWith(BOLETO_ARRECADACAO_PRODUCT_ID)) {\n return failure('UNSUPPORTED_FORMAT', 'Arrecadação linha must start with 8', 'arrecadacao-linha');\n }\n\n const valueType = stripped.charAt(2);\n if (!isArrecadacaoValueType(valueType)) {\n return failure('UNSUPPORTED_FORMAT', 'Arrecadação value type must be 6, 7, 8, or 9', 'arrecadacao-linha');\n }\n\n const fieldError = validateLinhaFieldDvs(stripped, valueType);\n if (fieldError) {\n return fieldError;\n }\n\n const barcode = linhaArrecadacaoToCodigoBarras(stripped);\n const generalError = validateGeneralDv(barcode);\n if (generalError) {\n return { ...generalError, inputKind: 'arrecadacao-linha' };\n }\n\n return {\n ok: true,\n value: stripped,\n inputKind: 'arrecadacao-linha',\n format: 'arrecadacao',\n segment: stripped.charAt(1),\n valueType,\n };\n}\n\nexport function validateArrecadacaoCodigoBarras(input: string): ArrecadacaoValidationResult {\n const trimmed = input.trim();\n if (trimmed.length === 0) {\n return failure('EMPTY_INPUT', 'Arrecadação input is empty');\n }\n\n if (/[^0-9]/.test(trimmed)) {\n return failure('INVALID_CHARACTER', 'Arrecadação código de barras contains invalid characters', 'arrecadacao-codigo-barras');\n }\n\n if (trimmed.length !== BOLETO_ARRECADACAO_CODIGO_BARRAS_LENGTH) {\n return failure(\n 'INVALID_LENGTH',\n `Arrecadação código de barras must have ${String(BOLETO_ARRECADACAO_CODIGO_BARRAS_LENGTH)} digits`,\n 'arrecadacao-codigo-barras',\n );\n }\n\n if (!trimmed.startsWith(BOLETO_ARRECADACAO_PRODUCT_ID)) {\n return failure('UNSUPPORTED_FORMAT', 'Arrecadação código de barras must start with 8', 'arrecadacao-codigo-barras');\n }\n\n const valueType = trimmed.charAt(2);\n if (!isArrecadacaoValueType(valueType)) {\n return failure('UNSUPPORTED_FORMAT', 'Arrecadação value type must be 6, 7, 8, or 9', 'arrecadacao-codigo-barras');\n }\n\n const generalError = validateGeneralDv(trimmed);\n if (generalError) {\n return generalError;\n }\n\n return {\n ok: true,\n value: trimmed,\n inputKind: 'arrecadacao-codigo-barras',\n format: 'arrecadacao',\n segment: trimmed.charAt(1),\n valueType,\n };\n}\n\nexport function validateArrecadacao(input: string): ArrecadacaoValidationResult {\n const stripped = stripArrecadacao(input.trim());\n if (stripped.length === 0) {\n return failure('EMPTY_INPUT', 'Arrecadação input is empty');\n }\n\n if (stripped.length === BOLETO_ARRECADACAO_LINHA_LENGTH) {\n return validateArrecadacaoLinha(input);\n }\n\n if (stripped.length === BOLETO_ARRECADACAO_CODIGO_BARRAS_LENGTH) {\n return validateArrecadacaoCodigoBarras(input);\n }\n\n return failure('INVALID_LENGTH', 'Arrecadação input must have 44 or 48 digits');\n}\n\nexport function isValidArrecadacao(input: string): boolean {\n return validateArrecadacao(input).ok;\n}\n\n/** @internal Golden vector helper — builds valid barcode then linha. */\nexport function buildArrecadacaoGoldenPair(options: {\n segment: string;\n valueType: ArrecadacaoValueType;\n value: string;\n company: string;\n free: string;\n}): { barcode: string; linha: string } {\n const head = BOLETO_ARRECADACAO_PRODUCT_ID + options.segment + options.valueType;\n const body =\n options.value.padStart(11, '0') +\n options.company.padStart(4, '0') +\n options.free.padEnd(25, '0').slice(0, 25);\n const withoutDv = head + body;\n const dvFn = getArrecadacaoDvCalculator(options.valueType);\n const barcode = head + String(dvFn(withoutDv)) + body;\n const linha = [0, 11, 22, 33]\n .map((start) => barcode.slice(start, start + 11) + String(dvFn(barcode.slice(start, start + 11))))\n .join('');\n return { barcode, linha };\n}\n\n// verify mod10 example from FEBRABAN §07\nexport const ARRECADACAO_MOD10_GOLDEN_SEQUENCE = '01230067896';\nexport const ARRECADACAO_MOD10_GOLDEN_DV = computeArrecadacaoModulo10Dv(ARRECADACAO_MOD10_GOLDEN_SEQUENCE);\n"]}
@@ -52,5 +52,5 @@ function brandBrCodePayload(value) {
52
52
  }
53
53
 
54
54
  export { brandBrCodePayload, brandCartaoCredito, brandCep, brandCnh, brandCnpj, brandCodigoBarras, brandCpf, brandInscricaoEstadual, brandInscricaoEstadualProdutorRural, brandLinhaDigitavel, brandNfeChave, brandPisPasep, brandPixKey, brandPlaca, brandRenavam, brandTelefone, brandTituloEleitor };
55
- //# sourceMappingURL=chunk-MSLJF2FM.js.map
56
- //# sourceMappingURL=chunk-MSLJF2FM.js.map
55
+ //# sourceMappingURL=chunk-NUQSMT4Y.js.map
56
+ //# sourceMappingURL=chunk-NUQSMT4Y.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types/validation-result.ts"],"names":[],"mappings":";AA2JO,SAAS,UAAU,KAAA,EAAqB;AAC7C,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,SAAS,KAAA,EAAoB;AAC3C,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,SAAS,KAAA,EAAoB;AAC3C,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,aAAa,KAAA,EAAwB;AACnD,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,mBAAmB,KAAA,EAA8B;AAC/D,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,cAAc,KAAA,EAAyB;AACrD,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,SAAS,KAAA,EAAoB;AAC3C,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,WAAW,KAAA,EAAsB;AAC/C,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,cAAc,KAAA,EAAyB;AACrD,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,YAAY,KAAA,EAAuB;AACjD,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,oBAAoB,KAAA,EAA+B;AACjE,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,kBAAkB,KAAA,EAA6B;AAC7D,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,mBAAmB,KAAA,EAA8B;AAC/D,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,uBAAuB,KAAA,EAAkC;AACvE,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,oCAAoC,KAAA,EAA+C;AACjG,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,cAAc,KAAA,EAAyB;AACrD,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,mBAAmB,KAAA,EAA8B;AAC/D,EAAA,OAAO,KAAA;AACT","file":"chunk-NUQSMT4Y.js","sourcesContent":["export type DocumentFormat =\n | 'numeric'\n | 'alphanumeric'\n | 'legacy'\n | 'mercosul'\n | 'email'\n | 'phone'\n | 'evp'\n | 'linha-digitavel'\n | 'codigo-barras'\n | 'cartao-credito'\n | 'inscricao-estadual'\n | 'inscricao-estadual-produtor-rural'\n | 'telefone'\n | 'brcode'\n | 'arrecadacao';\n\nexport type PixKeyType = 'cpf' | 'cnpj' | 'email' | 'phone' | 'evp';\n\nexport type TelefoneTipo = 'celular' | 'fixo';\n\nexport type BoletoInputKind = 'linha-digitavel' | 'codigo-barras' | 'arrecadacao-linha' | 'arrecadacao-codigo-barras';\n\nexport type ValidationErrorCode =\n | 'INVALID_LENGTH'\n | 'INVALID_CHARACTER'\n | 'INVALID_CHECK_DIGIT'\n | 'KNOWN_INVALID_PATTERN'\n | 'UNSUPPORTED_FORMAT'\n | 'EMPTY_INPUT';\n\nexport type ValidationResult<T extends string = string> =\n | { ok: true; value: T; format: DocumentFormat }\n | { ok: false; code: ValidationErrorCode; message: string };\n\nexport type FormatResult =\n | { ok: true; formatted: string }\n | { ok: false; code: ValidationErrorCode; message: string };\n\nexport type Cnpj = string & { readonly __brand: 'Cnpj' };\nexport type Cpf = string & { readonly __brand: 'Cpf' };\nexport type Cnh = string & { readonly __brand: 'Cnh' };\nexport type Renavam = string & { readonly __brand: 'Renavam' };\nexport type TituloEleitor = string & { readonly __brand: 'TituloEleitor' };\nexport type NfeChave = string & { readonly __brand: 'NfeChave' };\nexport type Cep = string & { readonly __brand: 'Cep' };\nexport type Placa = string & { readonly __brand: 'Placa' };\nexport type PisPasep = string & { readonly __brand: 'PisPasep' };\nexport type PixKey = string & { readonly __brand: 'PixKey' };\nexport type LinhaDigitavel = string & { readonly __brand: 'LinhaDigitavel' };\nexport type CodigoBarras = string & { readonly __brand: 'CodigoBarras' };\nexport type CartaoCredito = string & { readonly __brand: 'CartaoCredito' };\nexport type InscricaoEstadual = string & { readonly __brand: 'InscricaoEstadual' };\nexport type InscricaoEstadualProdutorRural = string & { readonly __brand: 'InscricaoEstadualProdutorRural' };\nexport type Telefone = string & { readonly __brand: 'Telefone' };\nexport type BrCodePayload = string & { readonly __brand: 'BrCodePayload' };\n\nexport type UfCode =\n | 'AC' | 'AL' | 'AM' | 'AP' | 'BA' | 'CE' | 'DF' | 'ES' | 'GO' | 'MA' | 'MG' | 'MS' | 'MT'\n | 'PA' | 'PB' | 'PE' | 'PI' | 'PR' | 'RJ' | 'RN' | 'RO' | 'RR' | 'RS' | 'SC' | 'SE' | 'SP' | 'TO';\n\nexport type CardBrand = 'visa' | 'mastercard' | 'amex' | 'elo' | 'hipercard' | 'unknown';\n\nexport type CartaoCreditoValidationResult =\n | { ok: true; value: CartaoCredito; format: 'cartao-credito'; brand: CardBrand }\n | { ok: false; code: ValidationErrorCode; message: string; brand?: CardBrand };\n\nexport type PixValidationResult =\n | { ok: true; value: PixKey; keyType: PixKeyType; format: DocumentFormat }\n | { ok: false; code: ValidationErrorCode; message: string; keyType?: PixKeyType };\n\nexport type BoletoSituacao = '1' | '2';\n\nexport type CobrancaBoletoValidationResult =\n | {\n ok: true;\n value: LinhaDigitavel | CodigoBarras;\n inputKind: 'linha-digitavel' | 'codigo-barras';\n format: 'linha-digitavel' | 'codigo-barras';\n situacao: BoletoSituacao;\n }\n | { ok: false; code: ValidationErrorCode; message: string; inputKind?: BoletoInputKind };\n\nexport type BoletoValidationResult =\n | {\n ok: true;\n value: LinhaDigitavel | CodigoBarras;\n inputKind: 'linha-digitavel' | 'codigo-barras';\n format: 'linha-digitavel' | 'codigo-barras';\n situacao: BoletoSituacao;\n }\n | {\n ok: true;\n value: string;\n inputKind: 'arrecadacao-linha' | 'arrecadacao-codigo-barras';\n format: 'arrecadacao';\n segment: string;\n valueType: '6' | '7' | '8' | '9';\n }\n | { ok: false; code: ValidationErrorCode; message: string; inputKind?: BoletoInputKind };\n\nexport type InscricaoEstadualValidationResult =\n | { ok: true; value: InscricaoEstadual; uf: UfCode; format: 'inscricao-estadual' }\n | { ok: false; code: ValidationErrorCode; message: string; uf?: UfCode };\n\nexport type IeProdutorRuralValidationResult =\n | { ok: true; value: InscricaoEstadualProdutorRural; uf: 'SP'; format: 'inscricao-estadual-produtor-rural' }\n | { ok: false; code: ValidationErrorCode; message: string; uf?: UfCode };\n\nexport type TituloEleitorValidationResult =\n | {\n ok: true;\n value: TituloEleitor;\n format: 'numeric';\n ufCode: number;\n uf?: UfCode;\n exterior?: true;\n }\n | { ok: false; code: ValidationErrorCode; message: string; ufCode?: number };\n\nexport type NfeChaveParsed = {\n cUF: string;\n aamm: string;\n cnpj: string;\n mod: string;\n serie: string;\n nNF: string;\n tpEmis: string;\n cNF: string;\n cDV: string;\n};\n\nexport type NfeChaveValidationResult =\n | { ok: true; value: NfeChave; format: 'numeric'; parsed: NfeChaveParsed; uf?: UfCode }\n | { ok: false; code: ValidationErrorCode; message: string; uf?: UfCode };\n\nexport type TelefoneValidationResult =\n | { ok: true; value: Telefone; tipo: TelefoneTipo; format: 'telefone' }\n | { ok: false; code: ValidationErrorCode; message: string };\n\nexport type BrCodeValidationResult =\n | {\n ok: true;\n value: BrCodePayload;\n format: 'brcode';\n merchantName: string;\n merchantCity: string;\n amount?: string;\n txid?: string;\n pixKey?: PixKey;\n pixKeyType?: PixKeyType;\n pixInitiationUrl?: string;\n }\n | { ok: false; code: ValidationErrorCode; message: string };\n\nexport function brandCnpj(value: string): Cnpj {\n return value as Cnpj;\n}\n\nexport function brandCpf(value: string): Cpf {\n return value as Cpf;\n}\n\nexport function brandCnh(value: string): Cnh {\n return value as Cnh;\n}\n\nexport function brandRenavam(value: string): Renavam {\n return value as Renavam;\n}\n\nexport function brandTituloEleitor(value: string): TituloEleitor {\n return value as TituloEleitor;\n}\n\nexport function brandNfeChave(value: string): NfeChave {\n return value as NfeChave;\n}\n\nexport function brandCep(value: string): Cep {\n return value as Cep;\n}\n\nexport function brandPlaca(value: string): Placa {\n return value as Placa;\n}\n\nexport function brandPisPasep(value: string): PisPasep {\n return value as PisPasep;\n}\n\nexport function brandPixKey(value: string): PixKey {\n return value as PixKey;\n}\n\nexport function brandLinhaDigitavel(value: string): LinhaDigitavel {\n return value as LinhaDigitavel;\n}\n\nexport function brandCodigoBarras(value: string): CodigoBarras {\n return value as CodigoBarras;\n}\n\nexport function brandCartaoCredito(value: string): CartaoCredito {\n return value as CartaoCredito;\n}\n\nexport function brandInscricaoEstadual(value: string): InscricaoEstadual {\n return value as InscricaoEstadual;\n}\n\nexport function brandInscricaoEstadualProdutorRural(value: string): InscricaoEstadualProdutorRural {\n return value as InscricaoEstadualProdutorRural;\n}\n\nexport function brandTelefone(value: string): Telefone {\n return value as Telefone;\n}\n\nexport function brandBrCodePayload(value: string): BrCodePayload {\n return value as BrCodePayload;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { CPF_MASK_PATTERN } from './chunk-F6PTZY4O.js';
1
+ import { CPF_MASK_PATTERN } from './chunk-63G7QO73.js';
2
2
 
3
3
  // src/core/cpf/mask.ts
4
4
  function applyCpfMask(canonical) {
@@ -10,5 +10,5 @@ function applyCpfMask(canonical) {
10
10
  }
11
11
 
12
12
  export { applyCpfMask };
13
- //# sourceMappingURL=chunk-KQDLIGSG.js.map
14
- //# sourceMappingURL=chunk-KQDLIGSG.js.map
13
+ //# sourceMappingURL=chunk-P2KNN6ZR.js.map
14
+ //# sourceMappingURL=chunk-P2KNN6ZR.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/cpf/mask.ts"],"names":[],"mappings":";;;AAGO,SAAS,aAAa,SAAA,EAA2B;AACtD,EAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,IAAA,CAAK,SAAS,CAAA;AAC7C,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,MAAM,+CAA+C,CAAA;AAAA,EACjE;AACA,EAAA,OAAO,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,IAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AACxD","file":"chunk-KQDLIGSG.js","sourcesContent":["import { CPF_MASK_PATTERN } from './constants.js';\n\n/** Mask XXX.XXX.XXX-DD (BR-CPF-005). */\nexport function applyCpfMask(canonical: string): string {\n const match = CPF_MASK_PATTERN.exec(canonical);\n if (!match) {\n throw new Error('CPF must have exactly 11 digits to apply mask');\n }\n return `${match[1]}.${match[2]}.${match[3]}-${match[4]}`;\n}\n"]}
1
+ {"version":3,"sources":["../src/core/cpf/mask.ts"],"names":[],"mappings":";;;AAGO,SAAS,aAAa,SAAA,EAA2B;AACtD,EAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,IAAA,CAAK,SAAS,CAAA;AAC7C,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,MAAM,+CAA+C,CAAA;AAAA,EACjE;AACA,EAAA,OAAO,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,IAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AACxD","file":"chunk-P2KNN6ZR.js","sourcesContent":["import { CPF_MASK_PATTERN } from './constants.js';\n\n/** Mask XXX.XXX.XXX-DD (BR-CPF-005). */\nexport function applyCpfMask(canonical: string): string {\n const match = CPF_MASK_PATTERN.exec(canonical);\n if (!match) {\n throw new Error('CPF must have exactly 11 digits to apply mask');\n }\n return `${match[1]}.${match[2]}.${match[3]}-${match[4]}`;\n}\n"]}
@@ -1,18 +1,20 @@
1
- import { validateTelefone } from './chunk-5UL3M7IU.js';
2
- import { validateTituloEleitor } from './chunk-DJUANFIK.js';
3
- import { validateInscricaoEstadual } from './chunk-3QP6R46N.js';
4
- import { isSpRuralIeInput, validateIeProdutorRural } from './chunk-Y6IW2LMW.js';
5
- import { validateNfeChave, NFE_CHAVE_LENGTH } from './chunk-D36RM7OD.js';
6
- import { validatePisPasep } from './chunk-KH7DWOUA.js';
7
- import { validatePlaca, PLACA_LENGTH } from './chunk-WPL47PWJ.js';
8
- import { validateBoleto, detectBoletoInputKind } from './chunk-4W4OKLSZ.js';
9
- import { validateBrCode } from './chunk-WCQUQ2WX.js';
10
- import { validatePixKey } from './chunk-MK7OJUF5.js';
11
- import { validateCartaoCredito, CARTAO_PAN_MIN_LENGTH, CARTAO_PAN_MAX_LENGTH } from './chunk-AK5GVYQ5.js';
12
- import { validateCep } from './chunk-2JJS46FM.js';
13
- import { validateCnh } from './chunk-US4OLTJ2.js';
14
- import { validateCnpj, CNPJ_LENGTH } from './chunk-YXELVV37.js';
15
- import { validateCpf } from './chunk-F6PTZY4O.js';
1
+ import { validateTelefone } from './chunk-EFEE6CMO.js';
2
+ import { validateTituloEleitor } from './chunk-CSVGWTCG.js';
3
+ import { validateInscricaoEstadual } from './chunk-665E36SC.js';
4
+ import { isSpRuralIeInput, validateIeProdutorRural } from './chunk-CDNOUZEI.js';
5
+ import { validateNfeChave, NFE_CHAVE_LENGTH } from './chunk-AO6UTQ4A.js';
6
+ import { validatePisPasep } from './chunk-JLCQ7MGC.js';
7
+ import { validatePlaca, PLACA_LENGTH } from './chunk-3LMDBXU6.js';
8
+ import { validateBoleto } from './chunk-AU6TW3GH.js';
9
+ import { validateArrecadacao } from './chunk-N6RQICAP.js';
10
+ import { detectBoletoInputKind } from './chunk-E2EFGMWA.js';
11
+ import { validateBrCode } from './chunk-V7UJ55KW.js';
12
+ import { validatePixKey } from './chunk-H3MLGGFI.js';
13
+ import { validateCpf } from './chunk-63G7QO73.js';
14
+ import { validateCartaoCredito, CARTAO_PAN_MIN_LENGTH, CARTAO_PAN_MAX_LENGTH } from './chunk-ANWQBKGN.js';
15
+ import { validateCep } from './chunk-TE6NSONR.js';
16
+ import { validateCnh } from './chunk-YNVMVDFN.js';
17
+ import { validateCnpj, CNPJ_LENGTH } from './chunk-FBARVLLP.js';
16
18
 
17
19
  // src/detect/helpers.ts
18
20
  function stripDigits(input) {
@@ -114,11 +116,25 @@ function tryValidators(attempts) {
114
116
  return null;
115
117
  }
116
118
  var CANDIDATES = [
119
+ {
120
+ canTry: (raw) => isBoletoArrecadacao(raw),
121
+ detect: (raw) => {
122
+ const result = validateArrecadacao(raw);
123
+ if (!result.ok) {
124
+ return null;
125
+ }
126
+ return success("boleto", result.value, "arrecadacao", {
127
+ inputKind: result.inputKind,
128
+ segment: result.segment,
129
+ valueType: result.valueType
130
+ });
131
+ }
132
+ },
117
133
  {
118
134
  canTry: (raw) => looksLikeBoleto(raw) && !isBoletoArrecadacao(raw),
119
135
  detect: (raw) => {
120
136
  const result = validateBoleto(raw);
121
- if (!result.ok) {
137
+ if (!result.ok || result.format === "arrecadacao") {
122
138
  return null;
123
139
  }
124
140
  return success("boleto", result.value, result.format, {
@@ -303,5 +319,5 @@ function detect(raw, options = {}) {
303
319
  }
304
320
 
305
321
  export { detect };
306
- //# sourceMappingURL=chunk-JZNTCZMV.js.map
307
- //# sourceMappingURL=chunk-JZNTCZMV.js.map
322
+ //# sourceMappingURL=chunk-PCP77SLS.js.map
323
+ //# sourceMappingURL=chunk-PCP77SLS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/detect/helpers.ts","../src/detect/index.ts"],"names":["result"],"mappings":"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","file":"chunk-PCP77SLS.js","sourcesContent":["import { BOLETO_CODIGO_BARRAS_LENGTH, BOLETO_LINHA_LENGTH } from '../core/boleto/constants.js';\nimport { CARTAO_PAN_MAX_LENGTH, CARTAO_PAN_MIN_LENGTH } from '../core/cartao-credito/constants.js';\nimport { CNPJ_LENGTH } from '../core/cnpj/constants.js';\nimport { NFE_CHAVE_LENGTH } from '../core/nfe-chave/constants.js';\nimport { PLACA_LENGTH } from '../core/placa/constants.js';\nimport { detectBoletoInputKind } from '../core/boleto/detect.js';\nimport { isSpRuralIeInput } from '../core/inscricao-estadual/sp-rural.js';\n\nexport function stripDigits(input: string): string {\n return input.replace(/\\D/g, '');\n}\n\nexport function stripAlnumUpper(input: string): string {\n return input.replace(/[^A-Za-z0-9]/g, '').toUpperCase();\n}\n\nexport function hasLetters(input: string): boolean {\n return /[A-Za-z]/.test(input);\n}\n\nexport function looksLikeBrCode(input: string): boolean {\n const trimmed = input.trim();\n return trimmed.startsWith('00020') && trimmed.length > 20;\n}\n\nexport function looksLikeBoleto(input: string): boolean {\n const kind = detectBoletoInputKind(input);\n return kind === 'linha-digitavel' || kind === 'codigo-barras';\n}\n\nexport function isBoletoArrecadacao(input: string): boolean {\n return detectBoletoInputKind(input) === 'arrecadacao';\n}\n\nexport function looksLikeNfeChave(input: string): boolean {\n const digits = stripDigits(input);\n return digits.length === NFE_CHAVE_LENGTH && /^\\d+$/.test(digits);\n}\n\nexport function looksLikeCnpjNumeric(input: string): boolean {\n const digits = stripDigits(input);\n return digits.length === CNPJ_LENGTH && /^\\d+$/.test(digits);\n}\n\nexport function looksLikeCnpjAlphanumeric(input: string): boolean {\n const stripped = stripAlnumUpper(input);\n return stripped.length === CNPJ_LENGTH && hasLetters(input);\n}\n\nexport function looksLikeElevenDigits(input: string): boolean {\n const digits = stripDigits(input);\n return digits.length === 11 && /^\\d+$/.test(digits);\n}\n\nexport function looksLikeTituloEleitor(input: string): boolean {\n const digits = stripDigits(input);\n return digits.length === 12 && /^\\d+$/.test(digits);\n}\n\nexport function looksLikeCep(input: string): boolean {\n const digits = stripDigits(input);\n return digits.length === 8 && /^\\d+$/.test(digits);\n}\n\nexport function looksLikePlaca(input: string): boolean {\n const stripped = stripAlnumUpper(input);\n return stripped.length === PLACA_LENGTH && /^[A-Z0-9]+$/.test(stripped);\n}\n\nexport function looksLikeCartao(input: string): boolean {\n const withoutMask = input.replace(/[\\s-]/g, '');\n if (/[^0-9]/.test(withoutMask)) {\n return false;\n }\n const digits = stripDigits(input);\n return digits.length >= CARTAO_PAN_MIN_LENGTH && digits.length <= CARTAO_PAN_MAX_LENGTH;\n}\n\nexport function looksLikeIe(input: string, uf?: string): boolean {\n if (!uf) {\n return false;\n }\n if (uf === 'SP' && isSpRuralIeInput(input)) {\n return true;\n }\n const digits = stripDigits(input);\n return digits.length >= 8 && digits.length <= 14;\n}\n\nexport function looksLikePix(input: string): boolean {\n const trimmed = input.trim();\n if (trimmed.includes('@')) {\n return true;\n }\n if (/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(trimmed)) {\n return true;\n }\n if (/^\\+?\\d/.test(trimmed)) {\n const digits = stripDigits(trimmed);\n return digits.length === 11 || digits.length === 14;\n }\n return false;\n}\n\nexport function looksLikeTelefone(input: string): boolean {\n const digits = stripDigits(input);\n return digits.length >= 10 && digits.length <= 13;\n}\n\nexport {\n BOLETO_CODIGO_BARRAS_LENGTH,\n BOLETO_LINHA_LENGTH,\n};\n","/**\n * Unified document type detection — delegates to existing validators (BR-DETECT-001).\n * @see docs/VALIDATION-RULES.md\n */\nimport { validateArrecadacao } from '../core/boleto/arrecadacao.js';\nimport { validateBoleto } from '../core/boleto/index.js';\nimport { validateBrCode } from '../core/brcode/index.js';\nimport { validateCartaoCredito } from '../core/cartao-credito/index.js';\nimport { validateCep } from '../core/cep/index.js';\nimport { validateCnh } from '../core/cnh/index.js';\nimport { validateCnpj } from '../core/cnpj/index.js';\nimport { validateCpf } from '../core/cpf/index.js';\nimport { validateInscricaoEstadual } from '../core/inscricao-estadual/index.js';\nimport { validateIeProdutorRural } from '../core/inscricao-estadual/validate-produtor-rural.js';\nimport { isSpRuralIeInput } from '../core/inscricao-estadual/sp-rural.js';\nimport { validateNfeChave } from '../core/nfe-chave/index.js';\nimport { validatePisPasep } from '../core/pis-pasep/index.js';\nimport { validatePlaca } from '../core/placa/index.js';\nimport { validatePixKey } from '../core/pix/index.js';\nimport { validateTelefone } from '../core/telefone/index.js';\nimport { validateTituloEleitor } from '../core/titulo-eleitor/index.js';\nimport {\n isBoletoArrecadacao,\n looksLikeBoleto,\n looksLikeBrCode,\n looksLikeCartao,\n looksLikeCep,\n looksLikeCnpjAlphanumeric,\n looksLikeCnpjNumeric,\n looksLikeElevenDigits,\n looksLikeIe,\n looksLikeNfeChave,\n looksLikePix,\n looksLikePlaca,\n looksLikeTelefone,\n looksLikeTituloEleitor,\n} from './helpers.js';\nimport type { DocumentFormat, UfCode, ValidationErrorCode } from '../types/validation-result.js';\n\nexport type DetectableDocumentType =\n | 'cpf'\n | 'cnpj'\n | 'cep'\n | 'placa'\n | 'pis-pasep'\n | 'pix'\n | 'telefone'\n | 'boleto'\n | 'cartao-credito'\n | 'cnh'\n | 'renavam'\n | 'nfe-chave'\n | 'titulo-eleitor'\n | 'inscricao-estadual'\n | 'inscricao-estadual-produtor-rural'\n | 'brcode'\n | 'unknown';\n\nexport type DetectOptions = {\n uf?: UfCode;\n};\n\nexport type DetectSuccess = {\n type: DetectableDocumentType;\n ok: true;\n value: string;\n format?: DocumentFormat;\n meta?: Record<string, unknown>;\n};\n\nexport type DetectFailure = {\n type: DetectableDocumentType;\n ok: false;\n code: ValidationErrorCode;\n message: string;\n};\n\nexport type DetectResult = DetectSuccess | DetectFailure;\n\ntype Candidate = {\n canTry: (raw: string, options: DetectOptions) => boolean;\n detect: (raw: string, options: DetectOptions) => DetectResult | null;\n};\n\n/** @internal Test hook for success result branches. */\nexport function buildDetectSuccess(\n type: DetectableDocumentType,\n value: string,\n format?: DocumentFormat,\n meta?: Record<string, unknown>,\n): DetectResult {\n return success(type, value, format, meta);\n}\n\nfunction success(\n type: DetectableDocumentType,\n value: string,\n format?: DocumentFormat,\n meta?: Record<string, unknown>,\n): DetectResult {\n return { type, ok: true, value, ...(format ? { format } : {}), ...(meta ? { meta } : {}) };\n}\n\nfunction tryValidators(attempts: Array<() => DetectResult | null>): DetectResult | null {\n for (const attempt of attempts) {\n const result = attempt();\n if (result) {\n return result;\n }\n }\n return null;\n}\n\nconst CANDIDATES: Candidate[] = [\n {\n canTry: (raw) => isBoletoArrecadacao(raw),\n detect: (raw) => {\n const result = validateArrecadacao(raw);\n if (!result.ok) {\n return null;\n }\n return success('boleto', result.value, 'arrecadacao', {\n inputKind: result.inputKind,\n segment: result.segment,\n valueType: result.valueType,\n });\n },\n },\n {\n canTry: (raw) => looksLikeBoleto(raw) && !isBoletoArrecadacao(raw),\n detect: (raw) => {\n const result = validateBoleto(raw);\n if (!result.ok || result.format === 'arrecadacao') {\n return null;\n }\n return success('boleto', result.value, result.format, {\n inputKind: result.inputKind,\n situacao: result.situacao,\n });\n },\n },\n {\n canTry: (raw) => looksLikeNfeChave(raw),\n detect: (raw) => {\n const result = validateNfeChave(raw);\n if (!result.ok) {\n return null;\n }\n return success('nfe-chave', result.value, result.format, {\n parsed: result.parsed,\n uf: result.uf,\n });\n },\n },\n {\n canTry: (raw) => looksLikeBrCode(raw),\n detect: (raw) => {\n const result = validateBrCode(raw);\n if (!result.ok) {\n return null;\n }\n return success('brcode', result.value, result.format, {\n merchantName: result.merchantName,\n merchantCity: result.merchantCity,\n pixKey: result.pixKey,\n pixKeyType: result.pixKeyType,\n });\n },\n },\n {\n canTry: (raw) => looksLikeCnpjAlphanumeric(raw),\n detect: (raw) => {\n const result = validateCnpj(raw);\n if (!result.ok) {\n return null;\n }\n return success('cnpj', result.value, result.format);\n },\n },\n {\n canTry: (raw) => looksLikeCnpjNumeric(raw),\n detect: (raw) => {\n const result = validateCnpj(raw);\n if (!result.ok) {\n return null;\n }\n return success('cnpj', result.value, result.format);\n },\n },\n {\n canTry: (raw) => looksLikeElevenDigits(raw),\n detect: (raw) =>\n tryValidators([\n () => {\n const result = validateCpf(raw);\n return result.ok ? success('cpf', result.value, result.format) : null;\n },\n () => {\n const result = validateCnh(raw);\n return result.ok ? success('cnh', result.value, result.format) : null;\n },\n () => {\n const result = validatePisPasep(raw);\n return result.ok ? success('pis-pasep', result.value, result.format) : null;\n },\n ]),\n },\n {\n canTry: (raw) => looksLikeTituloEleitor(raw),\n detect: (raw) => {\n const result = validateTituloEleitor(raw);\n if (!result.ok) {\n return null;\n }\n return success('titulo-eleitor', result.value, result.format, {\n ufCode: result.ufCode,\n ...(result.uf ? { uf: result.uf } : {}),\n ...(result.exterior ? { exterior: result.exterior } : {}),\n });\n },\n },\n {\n canTry: (raw) => looksLikeCep(raw),\n detect: (raw) => {\n const result = validateCep(raw);\n if (!result.ok) {\n return null;\n }\n return success('cep', result.value, result.format);\n },\n },\n {\n canTry: (raw) => looksLikePlaca(raw),\n detect: (raw) => {\n const result = validatePlaca(raw);\n if (!result.ok) {\n return null;\n }\n return success('placa', result.value, result.format);\n },\n },\n {\n canTry: (raw) => looksLikePix(raw),\n detect: (raw) => {\n const result = validatePixKey(raw);\n if (!result.ok) {\n return null;\n }\n return success('pix', result.value, result.format, { keyType: result.keyType });\n },\n },\n {\n canTry: (raw) => looksLikeTelefone(raw),\n detect: (raw) => {\n const result = validateTelefone(raw);\n if (!result.ok) {\n return null;\n }\n return success('telefone', result.value, result.format, { tipo: result.tipo });\n },\n },\n {\n canTry: (raw) => looksLikeCartao(raw),\n detect: (raw) => {\n const result = validateCartaoCredito(raw);\n if (!result.ok) {\n return null;\n }\n return success('cartao-credito', result.value, result.format, { brand: result.brand });\n },\n },\n {\n canTry: (raw, options) => looksLikeIe(raw, options.uf),\n detect: (raw, options) => {\n const uf = options.uf as UfCode;\n if (uf === 'SP' && isSpRuralIeInput(raw)) {\n const result = validateIeProdutorRural(uf, raw);\n if (!result.ok) {\n return null;\n }\n return success('inscricao-estadual-produtor-rural', result.value, result.format, { uf: result.uf });\n }\n const result = validateInscricaoEstadual(raw, { uf });\n if (!result.ok) {\n return null;\n }\n return success('inscricao-estadual', result.value, result.format, { uf: result.uf });\n },\n },\n];\n\nexport function detect(raw: string, options: DetectOptions = {}): DetectResult {\n const trimmed = raw.trim();\n if (trimmed.length === 0) {\n return {\n type: 'unknown',\n ok: false,\n code: 'EMPTY_INPUT',\n message: 'Input is empty',\n };\n }\n\n for (const candidate of CANDIDATES) {\n if (!candidate.canTry(trimmed, options)) {\n continue;\n }\n const result = candidate.detect(trimmed, options);\n if (result?.ok) {\n return result;\n }\n }\n\n return {\n type: 'unknown',\n ok: false,\n code: 'UNSUPPORTED_FORMAT',\n message: options.uf\n ? 'No supported document type matched the input'\n : 'No supported document type matched the input; provide options.uf for Inscrição Estadual detection',\n };\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { validateTelefone, TELEFONE_CELULAR_MASK_PATTERN, TELEFONE_FIXO_MASK_PATTERN } from './chunk-5UL3M7IU.js';
1
+ import { validateTelefone, TELEFONE_CELULAR_MASK_PATTERN, TELEFONE_FIXO_MASK_PATTERN } from './chunk-EFEE6CMO.js';
2
2
 
3
3
  // src/core/telefone/mask.ts
4
4
  function applyTelefoneMask(canonical, tipo) {
@@ -20,5 +20,5 @@ function formatTelefone(input) {
20
20
  }
21
21
 
22
22
  export { formatTelefone };
23
- //# sourceMappingURL=chunk-G2Y63PIF.js.map
24
- //# sourceMappingURL=chunk-G2Y63PIF.js.map
23
+ //# sourceMappingURL=chunk-PNPESCSP.js.map
24
+ //# sourceMappingURL=chunk-PNPESCSP.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/telefone/mask.ts","../src/format/telefone.ts"],"names":[],"mappings":";;;AAOO,SAAS,iBAAA,CAAkB,WAAmB,IAAA,EAA4B;AAC/E,EAAA,MAAM,OAAA,GAAU,IAAA,KAAS,SAAA,GAAY,6BAAA,GAAgC,0BAAA;AACrE,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,SAAS,CAAA;AACpC,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,IAAI,CAAA,qBAAA,CAAuB,CAAA;AAAA,EAC1E;AACA,EAAA,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,CAAC,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAC9C;;;ACVO,SAAS,eAAe,KAAA,EAA6B;AAC1D,EAAA,MAAM,MAAA,GAAS,iBAAiB,KAAK,CAAA;AACrC,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,IAAI,IAAA,EAAM,SAAA,EAAW,kBAAkB,MAAA,CAAO,KAAA,EAAO,MAAA,CAAO,IAAI,CAAA,EAAE;AAC7E","file":"chunk-G2Y63PIF.js","sourcesContent":["import {\n TELEFONE_CELULAR_MASK_PATTERN,\n TELEFONE_FIXO_MASK_PATTERN,\n} from './constants.js';\nimport type { TelefoneTipo } from '../../types/validation-result.js';\n\n/** Mask (DD) 9XXXX-XXXX or (DD) XXXX-XXXX per Anatel E.164 layout. */\nexport function applyTelefoneMask(canonical: string, tipo: TelefoneTipo): string {\n const pattern = tipo === 'celular' ? TELEFONE_CELULAR_MASK_PATTERN : TELEFONE_FIXO_MASK_PATTERN;\n const match = pattern.exec(canonical);\n if (!match) {\n throw new Error(`Telephone must have valid ${tipo} length to apply mask`);\n }\n return `(${match[1]}) ${match[2]}-${match[3]}`;\n}\n","import { applyTelefoneMask } from '../core/telefone/mask.js';\nimport { validateTelefone } from '../core/telefone/index.js';\nimport type { FormatResult } from '../types/validation-result.js';\n\nexport function formatTelefone(input: string): FormatResult {\n const result = validateTelefone(input);\n if (!result.ok) {\n return { ok: false, code: result.code, message: result.message };\n }\n return { ok: true, formatted: applyTelefoneMask(result.value, result.tipo) };\n}\n"]}
1
+ {"version":3,"sources":["../src/core/telefone/mask.ts","../src/format/telefone.ts"],"names":[],"mappings":";;;AAOO,SAAS,iBAAA,CAAkB,WAAmB,IAAA,EAA4B;AAC/E,EAAA,MAAM,OAAA,GAAU,IAAA,KAAS,SAAA,GAAY,6BAAA,GAAgC,0BAAA;AACrE,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,SAAS,CAAA;AACpC,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,IAAI,CAAA,qBAAA,CAAuB,CAAA;AAAA,EAC1E;AACA,EAAA,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,CAAC,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAC9C;;;ACVO,SAAS,eAAe,KAAA,EAA6B;AAC1D,EAAA,MAAM,MAAA,GAAS,iBAAiB,KAAK,CAAA;AACrC,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,IAAI,IAAA,EAAM,SAAA,EAAW,kBAAkB,MAAA,CAAO,KAAA,EAAO,MAAA,CAAO,IAAI,CAAA,EAAE;AAC7E","file":"chunk-PNPESCSP.js","sourcesContent":["import {\n TELEFONE_CELULAR_MASK_PATTERN,\n TELEFONE_FIXO_MASK_PATTERN,\n} from './constants.js';\nimport type { TelefoneTipo } from '../../types/validation-result.js';\n\n/** Mask (DD) 9XXXX-XXXX or (DD) XXXX-XXXX per Anatel E.164 layout. */\nexport function applyTelefoneMask(canonical: string, tipo: TelefoneTipo): string {\n const pattern = tipo === 'celular' ? TELEFONE_CELULAR_MASK_PATTERN : TELEFONE_FIXO_MASK_PATTERN;\n const match = pattern.exec(canonical);\n if (!match) {\n throw new Error(`Telephone must have valid ${tipo} length to apply mask`);\n }\n return `(${match[1]}) ${match[2]}-${match[3]}`;\n}\n","import { applyTelefoneMask } from '../core/telefone/mask.js';\nimport { validateTelefone } from '../core/telefone/index.js';\nimport type { FormatResult } from '../types/validation-result.js';\n\nexport function formatTelefone(input: string): FormatResult {\n const result = validateTelefone(input);\n if (!result.ok) {\n return { ok: false, code: result.code, message: result.message };\n }\n return { ok: true, formatted: applyTelefoneMask(result.value, result.tipo) };\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { applyCnpjMask } from './chunk-XUO7FV6Z.js';
2
- import { validateCnpj } from './chunk-YXELVV37.js';
1
+ import { applyCnpjMask } from './chunk-CSRBRKXY.js';
2
+ import { validateCnpj } from './chunk-FBARVLLP.js';
3
3
 
4
4
  // src/format/cnpj.ts
5
5
  function formatCnpj(input) {
@@ -17,5 +17,5 @@ function formatCnpjAlphanumeric(input) {
17
17
  }
18
18
 
19
19
  export { formatCnpj, formatCnpjAlphanumeric, formatCnpjNumeric };
20
- //# sourceMappingURL=chunk-LYBFUKHR.js.map
21
- //# sourceMappingURL=chunk-LYBFUKHR.js.map
20
+ //# sourceMappingURL=chunk-RMTHCPIV.js.map
21
+ //# sourceMappingURL=chunk-RMTHCPIV.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/format/cnpj.ts"],"names":[],"mappings":";;;;AAIO,SAAS,WAAW,KAAA,EAA6B;AACtD,EAAA,MAAM,MAAA,GAAS,aAAa,KAAK,CAAA;AACjC,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,aAAA,CAAc,MAAA,CAAO,KAAK,CAAA,EAAE;AAC5D;AAEO,SAAS,kBAAkB,KAAA,EAA6B;AAC7D,EAAA,OAAO,WAAW,KAAK,CAAA;AACzB;AAEO,SAAS,uBAAuB,KAAA,EAA6B;AAClE,EAAA,OAAO,WAAW,KAAK,CAAA;AACzB","file":"chunk-LYBFUKHR.js","sourcesContent":["import { applyCnpjMask } from '../core/cnpj/mask.js';\nimport { validateCnpj } from '../core/cnpj/index.js';\nimport type { FormatResult } from '../types/validation-result.js';\n\nexport function formatCnpj(input: string): FormatResult {\n const result = validateCnpj(input);\n if (!result.ok) {\n return { ok: false, code: result.code, message: result.message };\n }\n return { ok: true, formatted: applyCnpjMask(result.value) };\n}\n\nexport function formatCnpjNumeric(input: string): FormatResult {\n return formatCnpj(input);\n}\n\nexport function formatCnpjAlphanumeric(input: string): FormatResult {\n return formatCnpj(input);\n}\n"]}
1
+ {"version":3,"sources":["../src/format/cnpj.ts"],"names":[],"mappings":";;;;AAIO,SAAS,WAAW,KAAA,EAA6B;AACtD,EAAA,MAAM,MAAA,GAAS,aAAa,KAAK,CAAA;AACjC,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,aAAA,CAAc,MAAA,CAAO,KAAK,CAAA,EAAE;AAC5D;AAEO,SAAS,kBAAkB,KAAA,EAA6B;AAC7D,EAAA,OAAO,WAAW,KAAK,CAAA;AACzB;AAEO,SAAS,uBAAuB,KAAA,EAA6B;AAClE,EAAA,OAAO,WAAW,KAAK,CAAA;AACzB","file":"chunk-RMTHCPIV.js","sourcesContent":["import { applyCnpjMask } from '../core/cnpj/mask.js';\nimport { validateCnpj } from '../core/cnpj/index.js';\nimport type { FormatResult } from '../types/validation-result.js';\n\nexport function formatCnpj(input: string): FormatResult {\n const result = validateCnpj(input);\n if (!result.ok) {\n return { ok: false, code: result.code, message: result.message };\n }\n return { ok: true, formatted: applyCnpjMask(result.value) };\n}\n\nexport function formatCnpjNumeric(input: string): FormatResult {\n return formatCnpj(input);\n}\n\nexport function formatCnpjAlphanumeric(input: string): FormatResult {\n return formatCnpj(input);\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { stripCep } from './chunk-YYHS5WQN.js';
2
- import { brandCep } from './chunk-MSLJF2FM.js';
2
+ import { brandCep } from './chunk-NUQSMT4Y.js';
3
3
 
4
4
  // src/core/cep/constants.ts
5
5
  var CEP_LENGTH = 8;
@@ -39,5 +39,5 @@ function validateCep(input) {
39
39
  }
40
40
 
41
41
  export { CEP_GOLDEN_PRIMARY, CEP_GOLDEN_PRIMARY_MASKED, CEP_GOLDEN_SECONDARY, CEP_MASK_PATTERN, CEP_OFFICIAL_SOURCE_URL, isValidCep, validateCep };
42
- //# sourceMappingURL=chunk-2JJS46FM.js.map
43
- //# sourceMappingURL=chunk-2JJS46FM.js.map
42
+ //# sourceMappingURL=chunk-TE6NSONR.js.map
43
+ //# sourceMappingURL=chunk-TE6NSONR.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/cep/constants.ts","../src/core/cep/index.ts"],"names":[],"mappings":";;;;AAKO,IAAM,UAAA,GAAa,CAAA;AACnB,IAAM,gBAAA,GAAmB;AAGzB,IAAM,kBAAA,GAAqB;AAC3B,IAAM,oBAAA,GAAuB;AAC7B,IAAM,yBAAA,GAA4B;AAClC,IAAM,uBAAA,GACX;;;ACMF,SAAS,OAAA,CAAQ,MAA4B,OAAA,EAA+B;AAC1E,EAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,IAAA,EAAM,OAAA,EAAQ;AACpC;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,WAAW,UAAA,EAAY;AAClC,IAAA,OAAO,OAAA,CAAQ,gBAAA,EAAkB,CAAA,cAAA,EAAiB,UAAU,CAAA,2BAAA,CAA6B,CAAA;AAAA,EAC3F;AAEA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,WAAW,KAAA,EAAwB;AACjD,EAAA,OAAO,WAAA,CAAY,KAAK,CAAA,CAAE,EAAA;AAC5B;AAEO,SAAS,YAAY,KAAA,EAAiC;AAC3D,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,OAAO,EAAE,IAAI,IAAA,EAAM,KAAA,EAAO,SAAS,QAAQ,CAAA,EAAG,QAAQ,SAAA,EAAU;AAClE","file":"chunk-2JJS46FM.js","sourcesContent":["/**\n * CEP constants — 8 digits, no check digit (Correios).\n * @see https://www.correios.com.br/atendimento/developers/manuais/manual-api-busca-cep\n * @see docs/VALIDATION-RULES.md BR-CEP-001 — golden vector 01310100\n */\nexport const CEP_LENGTH = 8;\nexport const CEP_MASK_PATTERN = /^(\\d{5})(\\d{3})$/;\nexport const CEP_NUMERIC_PATTERN = /^\\d{8}$/;\n\nexport const CEP_GOLDEN_PRIMARY = '01310100';\nexport const CEP_GOLDEN_SECONDARY = '20040020';\nexport const CEP_GOLDEN_PRIMARY_MASKED = '01310-100';\nexport const CEP_OFFICIAL_SOURCE_URL =\n 'https://www.correios.com.br/atendimento/developers/manuais/manual-api-busca-cep';\n","/**\n * CEP validation — structural only, no check digit (Correios).\n * @see https://www.correios.com.br/atendimento/developers/manuais/manual-api-busca-cep\n * @see docs/VALIDATION-RULES.md BR-CEP-001 — golden vector 01310100\n */\nimport { stripCep } from '../../strip/index.js';\nimport type { ValidationResult } from '../../types/validation-result.js';\nimport { brandCep } from '../../types/validation-result.js';\nimport { CEP_LENGTH } from './constants.js';\n\nexport {\n CEP_GOLDEN_PRIMARY,\n CEP_GOLDEN_PRIMARY_MASKED,\n CEP_GOLDEN_SECONDARY,\n CEP_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 validateStructure(input: string, stripped: string): FailedResult | null {\n if (stripped.length === 0) {\n return failure('EMPTY_INPUT', 'CEP input is empty');\n }\n\n const withoutMask = input.replace(/[-\\s]/g, '');\n if (/[^0-9]/.test(withoutMask)) {\n return failure('INVALID_CHARACTER', 'CEP contains invalid characters');\n }\n\n if (stripped.length !== CEP_LENGTH) {\n return failure('INVALID_LENGTH', `CEP must have ${CEP_LENGTH} digits after normalization`);\n }\n\n return null;\n}\n\nexport function isValidCep(input: string): boolean {\n return validateCep(input).ok;\n}\n\nexport function validateCep(input: string): ValidationResult {\n const stripped = stripCep(input);\n const structural = validateStructure(input, stripped);\n if (structural) {\n return structural;\n }\n\n return { ok: true, value: brandCep(stripped), format: 'numeric' };\n}\n"]}
1
+ {"version":3,"sources":["../src/core/cep/constants.ts","../src/core/cep/index.ts"],"names":[],"mappings":";;;;AAKO,IAAM,UAAA,GAAa,CAAA;AACnB,IAAM,gBAAA,GAAmB;AAGzB,IAAM,kBAAA,GAAqB;AAC3B,IAAM,oBAAA,GAAuB;AAC7B,IAAM,yBAAA,GAA4B;AAClC,IAAM,uBAAA,GACX;;;ACMF,SAAS,OAAA,CAAQ,MAA4B,OAAA,EAA+B;AAC1E,EAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,IAAA,EAAM,OAAA,EAAQ;AACpC;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,WAAW,UAAA,EAAY;AAClC,IAAA,OAAO,OAAA,CAAQ,gBAAA,EAAkB,CAAA,cAAA,EAAiB,UAAU,CAAA,2BAAA,CAA6B,CAAA;AAAA,EAC3F;AAEA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,WAAW,KAAA,EAAwB;AACjD,EAAA,OAAO,WAAA,CAAY,KAAK,CAAA,CAAE,EAAA;AAC5B;AAEO,SAAS,YAAY,KAAA,EAAiC;AAC3D,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,OAAO,EAAE,IAAI,IAAA,EAAM,KAAA,EAAO,SAAS,QAAQ,CAAA,EAAG,QAAQ,SAAA,EAAU;AAClE","file":"chunk-TE6NSONR.js","sourcesContent":["/**\n * CEP constants — 8 digits, no check digit (Correios).\n * @see https://www.correios.com.br/atendimento/developers/manuais/manual-api-busca-cep\n * @see docs/VALIDATION-RULES.md BR-CEP-001 — golden vector 01310100\n */\nexport const CEP_LENGTH = 8;\nexport const CEP_MASK_PATTERN = /^(\\d{5})(\\d{3})$/;\nexport const CEP_NUMERIC_PATTERN = /^\\d{8}$/;\n\nexport const CEP_GOLDEN_PRIMARY = '01310100';\nexport const CEP_GOLDEN_SECONDARY = '20040020';\nexport const CEP_GOLDEN_PRIMARY_MASKED = '01310-100';\nexport const CEP_OFFICIAL_SOURCE_URL =\n 'https://www.correios.com.br/atendimento/developers/manuais/manual-api-busca-cep';\n","/**\n * CEP validation — structural only, no check digit (Correios).\n * @see https://www.correios.com.br/atendimento/developers/manuais/manual-api-busca-cep\n * @see docs/VALIDATION-RULES.md BR-CEP-001 — golden vector 01310100\n */\nimport { stripCep } from '../../strip/index.js';\nimport type { ValidationResult } from '../../types/validation-result.js';\nimport { brandCep } from '../../types/validation-result.js';\nimport { CEP_LENGTH } from './constants.js';\n\nexport {\n CEP_GOLDEN_PRIMARY,\n CEP_GOLDEN_PRIMARY_MASKED,\n CEP_GOLDEN_SECONDARY,\n CEP_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 validateStructure(input: string, stripped: string): FailedResult | null {\n if (stripped.length === 0) {\n return failure('EMPTY_INPUT', 'CEP input is empty');\n }\n\n const withoutMask = input.replace(/[-\\s]/g, '');\n if (/[^0-9]/.test(withoutMask)) {\n return failure('INVALID_CHARACTER', 'CEP contains invalid characters');\n }\n\n if (stripped.length !== CEP_LENGTH) {\n return failure('INVALID_LENGTH', `CEP must have ${CEP_LENGTH} digits after normalization`);\n }\n\n return null;\n}\n\nexport function isValidCep(input: string): boolean {\n return validateCep(input).ok;\n}\n\nexport function validateCep(input: string): ValidationResult {\n const stripped = stripCep(input);\n const structural = validateStructure(input, stripped);\n if (structural) {\n return structural;\n }\n\n return { ok: true, value: brandCep(stripped), format: 'numeric' };\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { applyCpfMask } from './chunk-KQDLIGSG.js';
2
- import { validateCpf } from './chunk-F6PTZY4O.js';
1
+ import { applyCpfMask } from './chunk-P2KNN6ZR.js';
2
+ import { validateCpf } from './chunk-63G7QO73.js';
3
3
 
4
4
  // src/format/cpf.ts
5
5
  function formatCpf(input) {
@@ -11,5 +11,5 @@ function formatCpf(input) {
11
11
  }
12
12
 
13
13
  export { formatCpf };
14
- //# sourceMappingURL=chunk-NHLLC6WH.js.map
15
- //# sourceMappingURL=chunk-NHLLC6WH.js.map
14
+ //# sourceMappingURL=chunk-TJCE4TVX.js.map
15
+ //# sourceMappingURL=chunk-TJCE4TVX.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/format/cpf.ts"],"names":[],"mappings":";;;;AAIO,SAAS,UAAU,KAAA,EAA6B;AACrD,EAAA,MAAM,MAAA,GAAS,YAAY,KAAK,CAAA;AAChC,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,YAAA,CAAa,MAAA,CAAO,KAAK,CAAA,EAAE;AAC3D","file":"chunk-NHLLC6WH.js","sourcesContent":["import { applyCpfMask } from '../core/cpf/mask.js';\nimport { validateCpf } from '../core/cpf/index.js';\nimport type { FormatResult } from '../types/validation-result.js';\n\nexport function formatCpf(input: string): FormatResult {\n const result = validateCpf(input);\n if (!result.ok) {\n return { ok: false, code: result.code, message: result.message };\n }\n return { ok: true, formatted: applyCpfMask(result.value) };\n}\n"]}
1
+ {"version":3,"sources":["../src/format/cpf.ts"],"names":[],"mappings":";;;;AAIO,SAAS,UAAU,KAAA,EAA6B;AACrD,EAAA,MAAM,MAAA,GAAS,YAAY,KAAK,CAAA;AAChC,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,YAAA,CAAa,MAAA,CAAO,KAAK,CAAA,EAAE;AAC3D","file":"chunk-TJCE4TVX.js","sourcesContent":["import { applyCpfMask } from '../core/cpf/mask.js';\nimport { validateCpf } from '../core/cpf/index.js';\nimport type { FormatResult } from '../types/validation-result.js';\n\nexport function formatCpf(input: string): FormatResult {\n const result = validateCpf(input);\n if (!result.ok) {\n return { ok: false, code: result.code, message: result.message };\n }\n return { ok: true, formatted: applyCpfMask(result.value) };\n}\n"]}
@@ -0,0 +1,32 @@
1
+ // src/ibge/data/metadata.json
2
+ var metadata_default = {
3
+ id: "ibge",
4
+ nome: "IBGE Localidades",
5
+ fonte: "IBGE API v1 /localidades",
6
+ endpoints: [
7
+ "https://servicodados.ibge.gov.br/api/v1/localidades/estados",
8
+ "https://servicodados.ibge.gov.br/api/v1/localidades/municipios"
9
+ ],
10
+ capturadoEm: "2026-06-23",
11
+ atualizadoEm: "2026-06-23T14:16:50.155Z",
12
+ contagens: {
13
+ estados: 27,
14
+ municipios: 5571
15
+ },
16
+ alteracoes: {
17
+ adicionados: 5598,
18
+ removidos: 0,
19
+ alterados: 0,
20
+ comparadoCom: null
21
+ },
22
+ verificacao: {
23
+ agendamento: "semanal",
24
+ workflow: "data-refresh-bot.yml",
25
+ ultimaExecucao: "2026-06-23T14:16:50.155Z"
26
+ },
27
+ documentacao: "docs/OFFICIAL-SOURCES.md#ibge-localities"
28
+ };
29
+
30
+ export { metadata_default };
31
+ //# sourceMappingURL=chunk-UCNPXHIJ.js.map
32
+ //# sourceMappingURL=chunk-UCNPXHIJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ibge/data/metadata.json"],"names":[],"mappings":";AAAA,IAAA,gBAAA,GAAA;AAAA,EACE,EAAA,EAAM,MAAA;AAAA,EACN,IAAA,EAAQ,kBAAA;AAAA,EACR,KAAA,EAAS,0BAAA;AAAA,EACT,SAAA,EAAa;AAAA,IACX,6DAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,WAAA,EAAe,YAAA;AAAA,EACf,YAAA,EAAgB,0BAAA;AAAA,EAChB,SAAA,EAAa;AAAA,IACX,OAAA,EAAW,EAAA;AAAA,IACX,UAAA,EAAc;AAAA,GAChB;AAAA,EACA,UAAA,EAAc;AAAA,IACZ,WAAA,EAAe,IAAA;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-UCNPXHIJ.js","sourcesContent":["{\n \"id\": \"ibge\",\n \"nome\": \"IBGE Localidades\",\n \"fonte\": \"IBGE API v1 /localidades\",\n \"endpoints\": [\n \"https://servicodados.ibge.gov.br/api/v1/localidades/estados\",\n \"https://servicodados.ibge.gov.br/api/v1/localidades/municipios\"\n ],\n \"capturadoEm\": \"2026-06-23\",\n \"atualizadoEm\": \"2026-06-23T14:16:50.155Z\",\n \"contagens\": {\n \"estados\": 27,\n \"municipios\": 5571\n },\n \"alteracoes\": {\n \"adicionados\": 5598,\n \"removidos\": 0,\n \"alterados\": 0,\n \"comparadoCom\": null\n },\n \"verificacao\": {\n \"agendamento\": \"semanal\",\n \"workflow\": \"data-refresh-bot.yml\",\n \"ultimaExecucao\": \"2026-06-23T14:16:50.155Z\"\n },\n \"documentacao\": \"docs/OFFICIAL-SOURCES.md#ibge-localities\"\n}\n"]}