@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.
- package/README.md +84 -12
- package/dist/bancos.d.ts +41 -0
- package/dist/bancos.js +3328 -0
- package/dist/bancos.js.map +1 -0
- package/dist/batch.d.ts +28 -0
- package/dist/batch.js +30 -0
- package/dist/batch.js.map +1 -0
- package/dist/boleto.d.ts +58 -5
- package/dist/boleto.js +6 -3
- package/dist/brcode.d.ts +15 -3
- package/dist/brcode.js +8 -8
- package/dist/cartao-credito.d.ts +2 -2
- package/dist/cartao-credito.js +3 -3
- package/dist/cep.d.ts +2 -2
- package/dist/cep.js +4 -4
- package/dist/{chunk-WPL47PWJ.js → chunk-3LMDBXU6.js} +3 -3
- package/dist/{chunk-WPL47PWJ.js.map → chunk-3LMDBXU6.js.map} +1 -1
- package/dist/chunk-4J5IMD7B.js +3 -0
- package/dist/chunk-4J5IMD7B.js.map +1 -0
- package/dist/{chunk-BFZPCEYB.js → chunk-54UWHK5L.js} +3 -3
- package/dist/{chunk-BFZPCEYB.js.map → chunk-54UWHK5L.js.map} +1 -1
- package/dist/chunk-5V6N4JWQ.js +135 -0
- package/dist/chunk-5V6N4JWQ.js.map +1 -0
- package/dist/{chunk-F6PTZY4O.js → chunk-63G7QO73.js} +3 -3
- package/dist/{chunk-F6PTZY4O.js.map → chunk-63G7QO73.js.map} +1 -1
- package/dist/{chunk-3QP6R46N.js → chunk-665E36SC.js} +4 -4
- package/dist/{chunk-3QP6R46N.js.map → chunk-665E36SC.js.map} +1 -1
- package/dist/{chunk-AK5GVYQ5.js → chunk-ANWQBKGN.js} +3 -3
- package/dist/{chunk-AK5GVYQ5.js.map → chunk-ANWQBKGN.js.map} +1 -1
- package/dist/{chunk-D36RM7OD.js → chunk-AO6UTQ4A.js} +3 -3
- package/dist/{chunk-D36RM7OD.js.map → chunk-AO6UTQ4A.js.map} +1 -1
- package/dist/chunk-ASQ2XIN2.js +99 -0
- package/dist/chunk-ASQ2XIN2.js.map +1 -0
- package/dist/chunk-AU6TW3GH.js +136 -0
- package/dist/chunk-AU6TW3GH.js.map +1 -0
- package/dist/{chunk-XW5G2RAL.js → chunk-B6A7VF4R.js} +3 -3
- package/dist/{chunk-XW5G2RAL.js.map → chunk-B6A7VF4R.js.map} +1 -1
- package/dist/{chunk-Q7B5VOPW.js → chunk-BA3FAVK4.js} +243 -37
- package/dist/chunk-BA3FAVK4.js.map +1 -0
- package/dist/{chunk-Y6IW2LMW.js → chunk-CDNOUZEI.js} +3 -3
- package/dist/{chunk-Y6IW2LMW.js.map → chunk-CDNOUZEI.js.map} +1 -1
- package/dist/{chunk-XUO7FV6Z.js → chunk-CSRBRKXY.js} +3 -3
- package/dist/{chunk-XUO7FV6Z.js.map → chunk-CSRBRKXY.js.map} +1 -1
- package/dist/{chunk-DJUANFIK.js → chunk-CSVGWTCG.js} +3 -3
- package/dist/{chunk-DJUANFIK.js.map → chunk-CSVGWTCG.js.map} +1 -1
- package/dist/chunk-E2EFGMWA.js +200 -0
- package/dist/chunk-E2EFGMWA.js.map +1 -0
- package/dist/chunk-EFEE6CMO.js +24091 -0
- package/dist/chunk-EFEE6CMO.js.map +1 -0
- package/dist/{chunk-KSLDM5AD.js → chunk-EVULAGR5.js} +3 -3
- package/dist/{chunk-KSLDM5AD.js.map → chunk-EVULAGR5.js.map} +1 -1
- package/dist/{chunk-YXELVV37.js → chunk-FBARVLLP.js} +4 -4
- package/dist/{chunk-YXELVV37.js.map → chunk-FBARVLLP.js.map} +1 -1
- package/dist/chunk-FOP5LO7W.js +131 -0
- package/dist/chunk-FOP5LO7W.js.map +1 -0
- package/dist/{chunk-MK7OJUF5.js → chunk-H3MLGGFI.js} +8 -8
- package/dist/{chunk-MK7OJUF5.js.map → chunk-H3MLGGFI.js.map} +1 -1
- package/dist/{chunk-WLE2ENQA.js → chunk-I66ZRSEN.js} +3 -3
- package/dist/{chunk-WLE2ENQA.js.map → chunk-I66ZRSEN.js.map} +1 -1
- package/dist/{chunk-GRDUTHNX.js → chunk-IYOPXJLY.js} +3 -3
- package/dist/{chunk-GRDUTHNX.js.map → chunk-IYOPXJLY.js.map} +1 -1
- package/dist/chunk-JCWQDTZB.js +41 -0
- package/dist/chunk-JCWQDTZB.js.map +1 -0
- package/dist/{chunk-4Y2FBO57.js → chunk-JKDU7QYP.js} +3 -3
- package/dist/{chunk-4Y2FBO57.js.map → chunk-JKDU7QYP.js.map} +1 -1
- package/dist/{chunk-KH7DWOUA.js → chunk-JLCQ7MGC.js} +3 -3
- package/dist/{chunk-KH7DWOUA.js.map → chunk-JLCQ7MGC.js.map} +1 -1
- package/dist/chunk-KBNWI6GE.js +3 -0
- package/dist/chunk-KBNWI6GE.js.map +1 -0
- package/dist/chunk-KLPONHBL.js +3 -0
- package/dist/chunk-KLPONHBL.js.map +1 -0
- package/dist/chunk-KTEQPYYN.js +31 -0
- package/dist/chunk-KTEQPYYN.js.map +1 -0
- package/dist/{chunk-CDGRHI7W.js → chunk-LAEUXOF6.js} +3 -3
- package/dist/{chunk-CDGRHI7W.js.map → chunk-LAEUXOF6.js.map} +1 -1
- package/dist/chunk-LRUZVPLR.js +93 -0
- package/dist/chunk-LRUZVPLR.js.map +1 -0
- package/dist/{chunk-ZAUZRIOU.js → chunk-MESOO5GZ.js} +3 -3
- package/dist/{chunk-ZAUZRIOU.js.map → chunk-MESOO5GZ.js.map} +1 -1
- package/dist/chunk-MKYCKCZ6.js +100 -0
- package/dist/chunk-MKYCKCZ6.js.map +1 -0
- package/dist/chunk-N5CER3QZ.js +128 -0
- package/dist/chunk-N5CER3QZ.js.map +1 -0
- package/dist/chunk-N6RQICAP.js +220 -0
- package/dist/chunk-N6RQICAP.js.map +1 -0
- package/dist/{chunk-MSLJF2FM.js → chunk-NUQSMT4Y.js} +2 -2
- package/dist/chunk-NUQSMT4Y.js.map +1 -0
- package/dist/{chunk-KQDLIGSG.js → chunk-P2KNN6ZR.js} +3 -3
- package/dist/{chunk-KQDLIGSG.js.map → chunk-P2KNN6ZR.js.map} +1 -1
- package/dist/{chunk-JZNTCZMV.js → chunk-PCP77SLS.js} +34 -18
- package/dist/chunk-PCP77SLS.js.map +1 -0
- package/dist/{chunk-G2Y63PIF.js → chunk-PNPESCSP.js} +3 -3
- package/dist/{chunk-G2Y63PIF.js.map → chunk-PNPESCSP.js.map} +1 -1
- package/dist/{chunk-LYBFUKHR.js → chunk-RMTHCPIV.js} +4 -4
- package/dist/{chunk-LYBFUKHR.js.map → chunk-RMTHCPIV.js.map} +1 -1
- package/dist/{chunk-2JJS46FM.js → chunk-TE6NSONR.js} +3 -3
- package/dist/{chunk-2JJS46FM.js.map → chunk-TE6NSONR.js.map} +1 -1
- package/dist/{chunk-NHLLC6WH.js → chunk-TJCE4TVX.js} +4 -4
- package/dist/{chunk-NHLLC6WH.js.map → chunk-TJCE4TVX.js.map} +1 -1
- package/dist/chunk-UCNPXHIJ.js +32 -0
- package/dist/chunk-UCNPXHIJ.js.map +1 -0
- package/dist/{chunk-WCQUQ2WX.js → chunk-V7UJ55KW.js} +47 -5
- package/dist/chunk-V7UJ55KW.js.map +1 -0
- package/dist/{chunk-IQGRFAQV.js → chunk-VSW3NBJQ.js} +3 -3
- package/dist/{chunk-IQGRFAQV.js.map → chunk-VSW3NBJQ.js.map} +1 -1
- package/dist/{chunk-6QJFMOIX.js → chunk-VWVQWN2G.js} +3 -3
- package/dist/{chunk-6QJFMOIX.js.map → chunk-VWVQWN2G.js.map} +1 -1
- package/dist/chunk-XADVBV73.js +30 -0
- package/dist/chunk-XADVBV73.js.map +1 -0
- package/dist/{chunk-FXLVNCG3.js → chunk-XWHGXSQV.js} +3 -3
- package/dist/{chunk-FXLVNCG3.js.map → chunk-XWHGXSQV.js.map} +1 -1
- package/dist/{chunk-G32U6YQ5.js → chunk-YD5MPZWY.js} +3 -3
- package/dist/{chunk-G32U6YQ5.js.map → chunk-YD5MPZWY.js.map} +1 -1
- package/dist/{chunk-US4OLTJ2.js → chunk-YNVMVDFN.js} +3 -3
- package/dist/{chunk-US4OLTJ2.js.map → chunk-YNVMVDFN.js.map} +1 -1
- package/dist/cnh.d.ts +2 -2
- package/dist/cnh.js +4 -4
- package/dist/cnpj.d.ts +2 -2
- package/dist/cnpj.js +5 -5
- package/dist/compare.d.ts +16 -0
- package/dist/compare.js +33 -0
- package/dist/compare.js.map +1 -0
- package/dist/cpf.d.ts +2 -2
- package/dist/cpf.js +4 -4
- package/dist/data-catalog.d.ts +14 -0
- package/dist/data-catalog.js +25 -0
- package/dist/data-catalog.js.map +1 -0
- package/dist/detect.d.ts +1 -1
- package/dist/detect.js +23 -20
- package/dist/diff.d.ts +16 -0
- package/dist/diff.js +33 -0
- package/dist/diff.js.map +1 -0
- package/dist/generate.d.ts +24 -3
- package/dist/generate.js +37 -27
- package/dist/ibge.d.ts +65 -0
- package/dist/ibge.js +28174 -0
- package/dist/ibge.js.map +1 -0
- package/dist/{index-CZLo9YOT.d.ts → index-BEJFgDXj.d.ts} +1 -1
- package/dist/index.d.ts +15 -9
- package/dist/index.js +61 -49
- package/dist/index.js.map +1 -1
- package/dist/{inscricao-estadual-produtor-rural-CfWUaggb.d.ts → inscricao-estadual-produtor-rural-BXFVQscj.d.ts} +1 -1
- package/dist/inscricao-estadual-produtor-rural.d.ts +2 -2
- package/dist/inscricao-estadual-produtor-rural.js +3 -3
- package/dist/inscricao-estadual.d.ts +3 -3
- package/dist/inscricao-estadual.js +4 -4
- package/dist/mask.d.ts +13 -0
- package/dist/mask.js +41 -0
- package/dist/mask.js.map +1 -0
- package/dist/nfe-chave.d.ts +2 -2
- package/dist/nfe-chave.js +4 -3
- package/dist/pis-pasep.d.ts +2 -2
- package/dist/pis-pasep.js +3 -3
- package/dist/{pix-ddldLlb7.d.ts → pix-B4habHLG.d.ts} +1 -1
- package/dist/pix.d.ts +2 -2
- package/dist/pix.js +9 -8
- package/dist/placa.d.ts +2 -2
- package/dist/placa.js +4 -4
- package/dist/renavam.d.ts +2 -2
- package/dist/renavam.js +4 -4
- package/dist/sanitize.d.ts +2 -2
- package/dist/sanitize.js +21 -17
- package/dist/telefone.d.ts +34 -3
- package/dist/telefone.js +4 -3
- package/dist/titulo-eleitor.d.ts +2 -2
- package/dist/titulo-eleitor.js +4 -4
- package/dist/types-CBIZxgfG.d.ts +28 -0
- package/dist/types-MXifBcV5.d.ts +10 -0
- package/dist/{validation-result-BhQE-1_O.d.ts → validation-result-BaI2Xder.d.ts} +24 -5
- package/package.json +36 -1
- package/dist/chunk-4W4OKLSZ.js +0 -366
- package/dist/chunk-4W4OKLSZ.js.map +0 -1
- package/dist/chunk-5UL3M7IU.js +0 -192
- package/dist/chunk-5UL3M7IU.js.map +0 -1
- package/dist/chunk-CSZCIOGA.js +0 -187
- package/dist/chunk-CSZCIOGA.js.map +0 -1
- package/dist/chunk-JZNTCZMV.js.map +0 -1
- package/dist/chunk-MSLJF2FM.js.map +0 -1
- package/dist/chunk-Q7B5VOPW.js.map +0 -1
- package/dist/chunk-WCQUQ2WX.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { validateTituloEleitor, TITULO_ELEITOR_NUMERIC_PATTERN_12, TITULO_ELEITOR_NUMERIC_PATTERN_13, TITULO_ELEITOR_LENGTH, TITULO_ELEITOR_LENGTH_EXTENDED } from './chunk-
|
|
1
|
+
import { validateTituloEleitor, TITULO_ELEITOR_NUMERIC_PATTERN_12, TITULO_ELEITOR_NUMERIC_PATTERN_13, TITULO_ELEITOR_LENGTH, TITULO_ELEITOR_LENGTH_EXTENDED } from './chunk-CSVGWTCG.js';
|
|
2
2
|
|
|
3
3
|
// src/core/titulo-eleitor/mask.ts
|
|
4
4
|
function applyTituloEleitorMask(canonical) {
|
|
@@ -23,5 +23,5 @@ function formatTituloEleitor(input) {
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
export { formatTituloEleitor };
|
|
26
|
-
//# sourceMappingURL=chunk-
|
|
27
|
-
//# sourceMappingURL=chunk-
|
|
26
|
+
//# sourceMappingURL=chunk-EVULAGR5.js.map
|
|
27
|
+
//# sourceMappingURL=chunk-EVULAGR5.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/titulo-eleitor/mask.ts","../src/format/titulo-eleitor.ts"],"names":[],"mappings":";;;AAWO,SAAS,uBAAuB,SAAA,EAA2B;AAChE,EAAA,IAAI,iCAAA,CAAkC,IAAA,CAAK,SAAS,CAAA,EAAG;AACrD,IAAA,OAAO,GAAG,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,EAChF;AACA,EAAA,IAAI,iCAAA,CAAkC,IAAA,CAAK,SAAS,CAAA,EAAG;AACrD,IAAA,OAAO,GAAG,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,EAChF;AACA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR,CAAA,uCAAA,EAAuC,qBAAqB,CAAA,IAAA,EAAO,8BAA8B,CAAA,iBAAA;AAAA,GACnG;AACF;;;ACjBO,SAAS,oBAAoB,KAAA,EAA6B;AAC/D,EAAA,MAAM,MAAA,GAAS,sBAAsB,KAAK,CAAA;AAC1C,EAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,IAAA,OAAO,EAAE,IAAI,KAAA,EAAO,IAAA,EAAM,OAAO,IAAA,EAAM,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,EACjE;AACA,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,WAAW,sBAAA,CAAuB,MAAA,CAAO,KAAK,CAAA,EAAE;AACrE","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/core/titulo-eleitor/mask.ts","../src/format/titulo-eleitor.ts"],"names":[],"mappings":";;;AAWO,SAAS,uBAAuB,SAAA,EAA2B;AAChE,EAAA,IAAI,iCAAA,CAAkC,IAAA,CAAK,SAAS,CAAA,EAAG;AACrD,IAAA,OAAO,GAAG,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,EAChF;AACA,EAAA,IAAI,iCAAA,CAAkC,IAAA,CAAK,SAAS,CAAA,EAAG;AACrD,IAAA,OAAO,GAAG,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,EAChF;AACA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR,CAAA,uCAAA,EAAuC,qBAAqB,CAAA,IAAA,EAAO,8BAA8B,CAAA,iBAAA;AAAA,GACnG;AACF;;;ACjBO,SAAS,oBAAoB,KAAA,EAA6B;AAC/D,EAAA,MAAM,MAAA,GAAS,sBAAsB,KAAK,CAAA;AAC1C,EAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,IAAA,OAAO,EAAE,IAAI,KAAA,EAAO,IAAA,EAAM,OAAO,IAAA,EAAM,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,EACjE;AACA,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,WAAW,sBAAA,CAAuB,MAAA,CAAO,KAAK,CAAA,EAAE;AACrE","file":"chunk-EVULAGR5.js","sourcesContent":["import {\n TITULO_ELEITOR_LENGTH,\n TITULO_ELEITOR_LENGTH_EXTENDED,\n TITULO_ELEITOR_NUMERIC_PATTERN_12,\n TITULO_ELEITOR_NUMERIC_PATTERN_13,\n} from './constants.js';\n\n/**\n * Display mask — `XXXX XXXX XXXX` (BR-TITULO-005).\n * @see https://pt.wikipedia.org/wiki/T%C3%ADtulo_eleitoral#C%C3%A1lculo_do_d%C3%ADgito_verificador\n */\nexport function applyTituloEleitorMask(canonical: string): string {\n if (TITULO_ELEITOR_NUMERIC_PATTERN_12.test(canonical)) {\n return `${canonical.slice(0, 4)} ${canonical.slice(4, 8)} ${canonical.slice(8)}`;\n }\n if (TITULO_ELEITOR_NUMERIC_PATTERN_13.test(canonical)) {\n return `${canonical.slice(0, 5)} ${canonical.slice(5, 9)} ${canonical.slice(9)}`;\n }\n throw new Error(\n `Título de Eleitor must have exactly ${TITULO_ELEITOR_LENGTH} or ${TITULO_ELEITOR_LENGTH_EXTENDED} digits to format`,\n );\n}\n","import { applyTituloEleitorMask } from '../core/titulo-eleitor/mask.js';\nimport { validateTituloEleitor } from '../core/titulo-eleitor/index.js';\nimport type { FormatResult } from '../types/validation-result.js';\n\nexport function formatTituloEleitor(input: string): FormatResult {\n const result = validateTituloEleitor(input);\n if (!result.ok) {\n return { ok: false, code: result.code, message: result.message };\n }\n return { ok: true, formatted: applyTituloEleitorMask(result.value) };\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { stripCnpj } from './chunk-EB3G4IG6.js';
|
|
2
1
|
import { computeCheckDigit } from './chunk-OTZHMJYE.js';
|
|
3
|
-
import {
|
|
2
|
+
import { stripCnpj } from './chunk-EB3G4IG6.js';
|
|
3
|
+
import { brandCnpj } from './chunk-NUQSMT4Y.js';
|
|
4
4
|
|
|
5
5
|
// src/core/cnpj/constants.ts
|
|
6
6
|
var CNPJ_LENGTH = 14;
|
|
@@ -143,5 +143,5 @@ function validateCnpj(input) {
|
|
|
143
143
|
}
|
|
144
144
|
|
|
145
145
|
export { CNPJ_BASE_LENGTH, CNPJ_DV1_WEIGHTS, CNPJ_DV2_WEIGHTS, CNPJ_GOLDEN_ALPHANUMERIC, CNPJ_GOLDEN_ALPHANUMERIC_MASKED, CNPJ_GOLDEN_NUMERIC, CNPJ_GOLDEN_NUMERIC_MASKED, CNPJ_LENGTH, CNPJ_MASK_PATTERN, CNPJ_OFFICIAL_SOURCE_URL, cnpjCharValue, detectCnpjFormat, isValidCnpj, isValidCnpjAlphanumeric, isValidCnpjNumeric, validateCnpj };
|
|
146
|
-
//# sourceMappingURL=chunk-
|
|
147
|
-
//# sourceMappingURL=chunk-
|
|
146
|
+
//# sourceMappingURL=chunk-FBARVLLP.js.map
|
|
147
|
+
//# sourceMappingURL=chunk-FBARVLLP.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/cnpj/constants.ts","../src/core/cnpj/ascii-value.ts","../src/core/cnpj/alphanumeric.ts","../src/core/cnpj/detect.ts","../src/core/cnpj/numeric.ts","../src/core/cnpj/index.ts"],"names":[],"mappings":"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","file":"chunk-YXELVV37.js","sourcesContent":["/**\n * CNPJ constants — modulo 11 weights from RFB FAQ Q14.\n * @see https://www.gov.br/receitafederal/pt-br/centrais-de-conteudo/publicacoes/perguntas-e-respostas/cnpj/cnpj-alfanumerico.pdf\n */\nexport const CNPJ_LENGTH = 14;\nexport const CNPJ_BASE_LENGTH = 12;\n\nexport const CNPJ_DV1_WEIGHTS = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] as const;\nexport const CNPJ_DV2_WEIGHTS = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] as const;\n\nexport const CNPJ_ALPHANUMERIC_PATTERN = /^[A-Z0-9]{12}[0-9]{2}$/;\nexport const CNPJ_NUMERIC_PATTERN = /^[0-9]{14}$/;\n\nexport const CNPJ_OFFICIAL_SOURCE_URL =\n 'https://www.gov.br/receitafederal/pt-br/centrais-de-conteudo/publicacoes/perguntas-e-respostas/cnpj/cnpj-alfanumerico.pdf';\n\n/** RFB Q14 golden vector */\nexport const CNPJ_GOLDEN_ALPHANUMERIC = '12ABC34501DE35';\n\n/** Valid numeric CNPJ for regression tests (modulo 11) */\nexport const CNPJ_GOLDEN_NUMERIC = '11222333000181';\nexport const CNPJ_GOLDEN_NUMERIC_MASKED = '11.222.333/0001-81';\nexport const CNPJ_GOLDEN_ALPHANUMERIC_MASKED = '12.ABC.345/01DE-35';\n\nexport const CNPJ_MASK_PATTERN = /^(.{2})(.{3})(.{3})(.{4})(.{2})$/;\n","/**\n * Character value for CNPJ modulo 11 — ASCII decimal minus 48 (RFB Q14).\n * @see https://www.gov.br/receitafederal/pt-br/centrais-de-conteudo/publicacoes/perguntas-e-respostas/cnpj/cnpj-alfanumerico.pdf\n */\nexport function cnpjCharValue(char: string): number {\n return char.charCodeAt(0) - 48;\n}\n","import { CNPJ_ALPHANUMERIC_PATTERN, CNPJ_BASE_LENGTH, CNPJ_DV1_WEIGHTS, CNPJ_DV2_WEIGHTS, CNPJ_LENGTH } from './constants.js';\nimport { cnpjCharValue } from './ascii-value.js';\nimport { computeCheckDigit } from './modulo11.js';\n\nfunction hasRepeatedChars(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 isValidStructure(canonical: string): boolean {\n return canonical.length === CNPJ_LENGTH && CNPJ_ALPHANUMERIC_PATTERN.test(canonical);\n}\n\n/**\n * Alphanumeric CNPJ — ASCII-48 modulo 11 (RFB Q14).\n * Golden vector: 12ABC34501DE35\n */\nexport function isValidCnpjAlphanumeric(input: string): boolean {\n const canonical = input.toUpperCase();\n if (!isValidStructure(canonical)) {\n return false;\n }\n if (hasRepeatedChars(canonical)) {\n return false;\n }\n\n const base = canonical.slice(0, CNPJ_BASE_LENGTH);\n const dv1Expected = String(computeCheckDigit(base, CNPJ_DV1_WEIGHTS, cnpjCharValue));\n const dv2Expected = String(\n computeCheckDigit(base + dv1Expected, CNPJ_DV2_WEIGHTS, cnpjCharValue),\n );\n\n return canonical.slice(CNPJ_BASE_LENGTH) === dv1Expected + dv2Expected;\n}\n","import { CNPJ_ALPHANUMERIC_PATTERN, CNPJ_NUMERIC_PATTERN } from './constants.js';\nimport type { DocumentFormat } from '../../types/validation-result.js';\n\nexport function detectCnpjFormat(stripped: string): DocumentFormat | 'unknown' {\n const upper = stripped.toUpperCase();\n if (CNPJ_NUMERIC_PATTERN.test(upper)) {\n return 'numeric';\n }\n if (CNPJ_ALPHANUMERIC_PATTERN.test(upper)) {\n return 'alphanumeric';\n }\n return 'unknown';\n}\n\nexport function containsLetter(value: string): boolean {\n return /[A-Za-z]/.test(value);\n}\n","import { CNPJ_BASE_LENGTH, CNPJ_DV1_WEIGHTS, CNPJ_DV2_WEIGHTS, CNPJ_NUMERIC_PATTERN } from './constants.js';\nimport { computeCheckDigit } from './modulo11.js';\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\n/**\n * Numeric CNPJ — traditional modulo 11 on digits (RFB Q6–Q7 coexistence).\n */\nexport function isValidCnpjNumeric(input: string): boolean {\n const canonical = input.replace(/\\D/g, '');\n if (!CNPJ_NUMERIC_PATTERN.test(canonical)) {\n return false;\n }\n if (hasRepeatedDigits(canonical)) {\n return false;\n }\n\n const base = canonical.slice(0, CNPJ_BASE_LENGTH);\n const dv1Expected = String(computeCheckDigit(base, CNPJ_DV1_WEIGHTS, digitValue));\n const dv2Expected = String(\n computeCheckDigit(base + dv1Expected, CNPJ_DV2_WEIGHTS, digitValue),\n );\n\n return canonical.slice(CNPJ_BASE_LENGTH) === dv1Expected + dv2Expected;\n}\n","import { stripCnpj } from '../../strip/cnpj.js';\nimport type { DocumentFormat, ValidationResult } from '../../types/validation-result.js';\nimport { brandCnpj } from '../../types/validation-result.js';\nimport { isValidCnpjAlphanumeric } from './alphanumeric.js';\nimport { CNPJ_LENGTH } from './constants.js';\nimport { containsLetter, detectCnpjFormat } from './detect.js';\nimport { isValidCnpjNumeric } from './numeric.js';\n\nexport { detectCnpjFormat, containsLetter } from './detect.js';\nexport { isValidCnpjAlphanumeric } from './alphanumeric.js';\nexport { isValidCnpjNumeric } from './numeric.js';\nexport {\n CNPJ_GOLDEN_ALPHANUMERIC,\n CNPJ_GOLDEN_ALPHANUMERIC_MASKED,\n CNPJ_GOLDEN_NUMERIC,\n CNPJ_GOLDEN_NUMERIC_MASKED,\n CNPJ_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(\n input: string,\n stripped: string,\n): FailedResult | { format: DocumentFormat } {\n if (stripped.length === 0) {\n return failure('EMPTY_INPUT', 'CNPJ input is empty');\n }\n\n const withoutMask = input.replace(/[.\\-/]/g, '');\n if (/[^A-Za-z0-9]/.test(withoutMask)) {\n return failure('INVALID_CHARACTER', 'CNPJ contains invalid characters');\n }\n\n if (stripped.length !== CNPJ_LENGTH) {\n return failure('INVALID_LENGTH', `CNPJ must have ${CNPJ_LENGTH} characters after normalization`);\n }\n\n const format = detectCnpjFormat(stripped);\n if (format === 'unknown') {\n return failure('UNSUPPORTED_FORMAT', 'CNPJ format is not numeric or alphanumeric');\n }\n\n return { format };\n}\n\nexport function isValidCnpj(input: string): boolean {\n return validateCnpj(input).ok;\n}\n\nexport function validateCnpj(input: string): ValidationResult {\n const stripped = stripCnpj(input);\n const structural = validateStructure(input, stripped);\n if ('ok' in structural) {\n return structural;\n }\n\n const { format } = structural;\n\n if (format === 'numeric' || !containsLetter(stripped)) {\n if (isValidCnpjNumeric(stripped)) {\n return { ok: true, value: brandCnpj(stripped), format: 'numeric' };\n }\n if (format === 'numeric') {\n if (/^(\\d)\\1{13}$/.test(stripped)) {\n return failure('KNOWN_INVALID_PATTERN', 'CNPJ with all identical digits is invalid');\n }\n return failure('INVALID_CHECK_DIGIT', 'CNPJ check digits are invalid');\n }\n }\n\n if (isValidCnpjAlphanumeric(stripped)) {\n return { ok: true, value: brandCnpj(stripped), format: 'alphanumeric' };\n }\n\n return failure('INVALID_CHECK_DIGIT', 'CNPJ check digits are invalid');\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/cnpj/constants.ts","../src/core/cnpj/ascii-value.ts","../src/core/cnpj/alphanumeric.ts","../src/core/cnpj/detect.ts","../src/core/cnpj/numeric.ts","../src/core/cnpj/index.ts"],"names":[],"mappings":"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","file":"chunk-FBARVLLP.js","sourcesContent":["/**\n * CNPJ constants — modulo 11 weights from RFB FAQ Q14.\n * @see https://www.gov.br/receitafederal/pt-br/centrais-de-conteudo/publicacoes/perguntas-e-respostas/cnpj/cnpj-alfanumerico.pdf\n */\nexport const CNPJ_LENGTH = 14;\nexport const CNPJ_BASE_LENGTH = 12;\n\nexport const CNPJ_DV1_WEIGHTS = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] as const;\nexport const CNPJ_DV2_WEIGHTS = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] as const;\n\nexport const CNPJ_ALPHANUMERIC_PATTERN = /^[A-Z0-9]{12}[0-9]{2}$/;\nexport const CNPJ_NUMERIC_PATTERN = /^[0-9]{14}$/;\n\nexport const CNPJ_OFFICIAL_SOURCE_URL =\n 'https://www.gov.br/receitafederal/pt-br/centrais-de-conteudo/publicacoes/perguntas-e-respostas/cnpj/cnpj-alfanumerico.pdf';\n\n/** RFB Q14 golden vector */\nexport const CNPJ_GOLDEN_ALPHANUMERIC = '12ABC34501DE35';\n\n/** Valid numeric CNPJ for regression tests (modulo 11) */\nexport const CNPJ_GOLDEN_NUMERIC = '11222333000181';\nexport const CNPJ_GOLDEN_NUMERIC_MASKED = '11.222.333/0001-81';\nexport const CNPJ_GOLDEN_ALPHANUMERIC_MASKED = '12.ABC.345/01DE-35';\n\nexport const CNPJ_MASK_PATTERN = /^(.{2})(.{3})(.{3})(.{4})(.{2})$/;\n","/**\n * Character value for CNPJ modulo 11 — ASCII decimal minus 48 (RFB Q14).\n * @see https://www.gov.br/receitafederal/pt-br/centrais-de-conteudo/publicacoes/perguntas-e-respostas/cnpj/cnpj-alfanumerico.pdf\n */\nexport function cnpjCharValue(char: string): number {\n return char.charCodeAt(0) - 48;\n}\n","import { CNPJ_ALPHANUMERIC_PATTERN, CNPJ_BASE_LENGTH, CNPJ_DV1_WEIGHTS, CNPJ_DV2_WEIGHTS, CNPJ_LENGTH } from './constants.js';\nimport { cnpjCharValue } from './ascii-value.js';\nimport { computeCheckDigit } from './modulo11.js';\n\nfunction hasRepeatedChars(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 isValidStructure(canonical: string): boolean {\n return canonical.length === CNPJ_LENGTH && CNPJ_ALPHANUMERIC_PATTERN.test(canonical);\n}\n\n/**\n * Alphanumeric CNPJ — ASCII-48 modulo 11 (RFB Q14).\n * Golden vector: 12ABC34501DE35\n */\nexport function isValidCnpjAlphanumeric(input: string): boolean {\n const canonical = input.toUpperCase();\n if (!isValidStructure(canonical)) {\n return false;\n }\n if (hasRepeatedChars(canonical)) {\n return false;\n }\n\n const base = canonical.slice(0, CNPJ_BASE_LENGTH);\n const dv1Expected = String(computeCheckDigit(base, CNPJ_DV1_WEIGHTS, cnpjCharValue));\n const dv2Expected = String(\n computeCheckDigit(base + dv1Expected, CNPJ_DV2_WEIGHTS, cnpjCharValue),\n );\n\n return canonical.slice(CNPJ_BASE_LENGTH) === dv1Expected + dv2Expected;\n}\n","import { CNPJ_ALPHANUMERIC_PATTERN, CNPJ_NUMERIC_PATTERN } from './constants.js';\nimport type { DocumentFormat } from '../../types/validation-result.js';\n\nexport function detectCnpjFormat(stripped: string): DocumentFormat | 'unknown' {\n const upper = stripped.toUpperCase();\n if (CNPJ_NUMERIC_PATTERN.test(upper)) {\n return 'numeric';\n }\n if (CNPJ_ALPHANUMERIC_PATTERN.test(upper)) {\n return 'alphanumeric';\n }\n return 'unknown';\n}\n\nexport function containsLetter(value: string): boolean {\n return /[A-Za-z]/.test(value);\n}\n","import { CNPJ_BASE_LENGTH, CNPJ_DV1_WEIGHTS, CNPJ_DV2_WEIGHTS, CNPJ_NUMERIC_PATTERN } from './constants.js';\nimport { computeCheckDigit } from './modulo11.js';\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\n/**\n * Numeric CNPJ — traditional modulo 11 on digits (RFB Q6–Q7 coexistence).\n */\nexport function isValidCnpjNumeric(input: string): boolean {\n const canonical = input.replace(/\\D/g, '');\n if (!CNPJ_NUMERIC_PATTERN.test(canonical)) {\n return false;\n }\n if (hasRepeatedDigits(canonical)) {\n return false;\n }\n\n const base = canonical.slice(0, CNPJ_BASE_LENGTH);\n const dv1Expected = String(computeCheckDigit(base, CNPJ_DV1_WEIGHTS, digitValue));\n const dv2Expected = String(\n computeCheckDigit(base + dv1Expected, CNPJ_DV2_WEIGHTS, digitValue),\n );\n\n return canonical.slice(CNPJ_BASE_LENGTH) === dv1Expected + dv2Expected;\n}\n","import { stripCnpj } from '../../strip/cnpj.js';\nimport type { DocumentFormat, ValidationResult } from '../../types/validation-result.js';\nimport { brandCnpj } from '../../types/validation-result.js';\nimport { isValidCnpjAlphanumeric } from './alphanumeric.js';\nimport { CNPJ_LENGTH } from './constants.js';\nimport { containsLetter, detectCnpjFormat } from './detect.js';\nimport { isValidCnpjNumeric } from './numeric.js';\n\nexport { detectCnpjFormat, containsLetter } from './detect.js';\nexport { isValidCnpjAlphanumeric } from './alphanumeric.js';\nexport { isValidCnpjNumeric } from './numeric.js';\nexport {\n CNPJ_GOLDEN_ALPHANUMERIC,\n CNPJ_GOLDEN_ALPHANUMERIC_MASKED,\n CNPJ_GOLDEN_NUMERIC,\n CNPJ_GOLDEN_NUMERIC_MASKED,\n CNPJ_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(\n input: string,\n stripped: string,\n): FailedResult | { format: DocumentFormat } {\n if (stripped.length === 0) {\n return failure('EMPTY_INPUT', 'CNPJ input is empty');\n }\n\n const withoutMask = input.replace(/[.\\-/]/g, '');\n if (/[^A-Za-z0-9]/.test(withoutMask)) {\n return failure('INVALID_CHARACTER', 'CNPJ contains invalid characters');\n }\n\n if (stripped.length !== CNPJ_LENGTH) {\n return failure('INVALID_LENGTH', `CNPJ must have ${CNPJ_LENGTH} characters after normalization`);\n }\n\n const format = detectCnpjFormat(stripped);\n if (format === 'unknown') {\n return failure('UNSUPPORTED_FORMAT', 'CNPJ format is not numeric or alphanumeric');\n }\n\n return { format };\n}\n\nexport function isValidCnpj(input: string): boolean {\n return validateCnpj(input).ok;\n}\n\nexport function validateCnpj(input: string): ValidationResult {\n const stripped = stripCnpj(input);\n const structural = validateStructure(input, stripped);\n if ('ok' in structural) {\n return structural;\n }\n\n const { format } = structural;\n\n if (format === 'numeric' || !containsLetter(stripped)) {\n if (isValidCnpjNumeric(stripped)) {\n return { ok: true, value: brandCnpj(stripped), format: 'numeric' };\n }\n if (format === 'numeric') {\n if (/^(\\d)\\1{13}$/.test(stripped)) {\n return failure('KNOWN_INVALID_PATTERN', 'CNPJ with all identical digits is invalid');\n }\n return failure('INVALID_CHECK_DIGIT', 'CNPJ check digits are invalid');\n }\n }\n\n if (isValidCnpjAlphanumeric(stripped)) {\n return { ok: true, value: brandCnpj(stripped), format: 'alphanumeric' };\n }\n\n return failure('INVALID_CHECK_DIGIT', 'CNPJ check digits are invalid');\n}\n"]}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { stripForType } from './chunk-5V6N4JWQ.js';
|
|
2
|
+
import { validateRenavam } from './chunk-I66ZRSEN.js';
|
|
3
|
+
import { validateTelefone } from './chunk-EFEE6CMO.js';
|
|
4
|
+
import { validateTituloEleitor } from './chunk-CSVGWTCG.js';
|
|
5
|
+
import { validateInscricaoEstadual } from './chunk-665E36SC.js';
|
|
6
|
+
import { validateIeSpRural } from './chunk-CDNOUZEI.js';
|
|
7
|
+
import { validateNfeChave } from './chunk-AO6UTQ4A.js';
|
|
8
|
+
import { validatePisPasep } from './chunk-JLCQ7MGC.js';
|
|
9
|
+
import { validatePlaca } from './chunk-3LMDBXU6.js';
|
|
10
|
+
import { validateBoleto } from './chunk-AU6TW3GH.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 } from './chunk-ANWQBKGN.js';
|
|
15
|
+
import { validateCep } from './chunk-TE6NSONR.js';
|
|
16
|
+
import { validateCnh } from './chunk-YNVMVDFN.js';
|
|
17
|
+
import { validateCnpj } from './chunk-FBARVLLP.js';
|
|
18
|
+
|
|
19
|
+
// src/platform/normalize.ts
|
|
20
|
+
var SANITIZABLE_PLATFORM_TYPES = /* @__PURE__ */ new Set([
|
|
21
|
+
"cpf",
|
|
22
|
+
"cnpj",
|
|
23
|
+
"cep",
|
|
24
|
+
"placa",
|
|
25
|
+
"pis-pasep",
|
|
26
|
+
"telefone",
|
|
27
|
+
"cnh",
|
|
28
|
+
"renavam",
|
|
29
|
+
"titulo-eleitor",
|
|
30
|
+
"nfe-chave",
|
|
31
|
+
"boleto",
|
|
32
|
+
"cartao-credito",
|
|
33
|
+
"inscricao-estadual",
|
|
34
|
+
"inscricao-estadual-produtor-rural"
|
|
35
|
+
]);
|
|
36
|
+
function isSanitizablePlatformType(type) {
|
|
37
|
+
return SANITIZABLE_PLATFORM_TYPES.has(type);
|
|
38
|
+
}
|
|
39
|
+
function stripForPlatform(raw, type) {
|
|
40
|
+
if (type === "pix" || type === "brcode") {
|
|
41
|
+
return raw;
|
|
42
|
+
}
|
|
43
|
+
if (isSanitizablePlatformType(type)) {
|
|
44
|
+
return stripForType(raw, type);
|
|
45
|
+
}
|
|
46
|
+
return raw;
|
|
47
|
+
}
|
|
48
|
+
function normalizeForPlatform(raw, type, options = {}) {
|
|
49
|
+
const trimmed = raw.trim();
|
|
50
|
+
const stripped = stripForPlatform(trimmed, type);
|
|
51
|
+
const validated = tryValidatedCanonical(stripped, type, options.uf);
|
|
52
|
+
return validated ?? stripped;
|
|
53
|
+
}
|
|
54
|
+
function tryValidatedCanonical(value, type, uf) {
|
|
55
|
+
switch (type) {
|
|
56
|
+
case "cpf": {
|
|
57
|
+
const result = validateCpf(value);
|
|
58
|
+
return result.ok ? result.value : null;
|
|
59
|
+
}
|
|
60
|
+
case "cnpj": {
|
|
61
|
+
const result = validateCnpj(value);
|
|
62
|
+
return result.ok ? result.value : null;
|
|
63
|
+
}
|
|
64
|
+
case "cep": {
|
|
65
|
+
const result = validateCep(value);
|
|
66
|
+
return result.ok ? result.value : null;
|
|
67
|
+
}
|
|
68
|
+
case "placa": {
|
|
69
|
+
const result = validatePlaca(value);
|
|
70
|
+
return result.ok ? result.value : null;
|
|
71
|
+
}
|
|
72
|
+
case "pis-pasep": {
|
|
73
|
+
const result = validatePisPasep(value);
|
|
74
|
+
return result.ok ? result.value : null;
|
|
75
|
+
}
|
|
76
|
+
case "telefone": {
|
|
77
|
+
const result = validateTelefone(value);
|
|
78
|
+
return result.ok ? result.value : null;
|
|
79
|
+
}
|
|
80
|
+
case "cnh": {
|
|
81
|
+
const result = validateCnh(value);
|
|
82
|
+
return result.ok ? result.value : null;
|
|
83
|
+
}
|
|
84
|
+
case "renavam": {
|
|
85
|
+
const result = validateRenavam(value);
|
|
86
|
+
return result.ok ? result.value : null;
|
|
87
|
+
}
|
|
88
|
+
case "titulo-eleitor": {
|
|
89
|
+
const result = validateTituloEleitor(value);
|
|
90
|
+
return result.ok ? result.value : null;
|
|
91
|
+
}
|
|
92
|
+
case "nfe-chave": {
|
|
93
|
+
const result = validateNfeChave(value);
|
|
94
|
+
return result.ok ? result.value : null;
|
|
95
|
+
}
|
|
96
|
+
case "boleto": {
|
|
97
|
+
const result = validateBoleto(value);
|
|
98
|
+
return result.ok ? result.value : null;
|
|
99
|
+
}
|
|
100
|
+
case "cartao-credito": {
|
|
101
|
+
const result = validateCartaoCredito(value);
|
|
102
|
+
return result.ok ? result.value : null;
|
|
103
|
+
}
|
|
104
|
+
case "inscricao-estadual": {
|
|
105
|
+
if (!uf) {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
const result = validateInscricaoEstadual(value, { uf });
|
|
109
|
+
return result.ok ? result.value : null;
|
|
110
|
+
}
|
|
111
|
+
case "inscricao-estadual-produtor-rural": {
|
|
112
|
+
const result = validateIeSpRural(value);
|
|
113
|
+
return result.ok ? result.value : null;
|
|
114
|
+
}
|
|
115
|
+
case "pix": {
|
|
116
|
+
const result = validatePixKey(value);
|
|
117
|
+
return result.ok ? result.value : null;
|
|
118
|
+
}
|
|
119
|
+
case "brcode": {
|
|
120
|
+
const result = validateBrCode(value);
|
|
121
|
+
return result.ok ? result.value : null;
|
|
122
|
+
}
|
|
123
|
+
default: {
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export { normalizeForPlatform };
|
|
130
|
+
//# sourceMappingURL=chunk-FOP5LO7W.js.map
|
|
131
|
+
//# sourceMappingURL=chunk-FOP5LO7W.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/platform/normalize.ts"],"names":[],"mappings":"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","file":"chunk-FOP5LO7W.js","sourcesContent":["/**\n * Canonical normalization for platform compare/diff (BR-PLATFORM-001).\n * @see docs/OFFICIAL-SOURCES.md\n */\nimport { validateBrCode } from '../core/brcode/index.js';\nimport { validateBoleto } from '../core/boleto/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 { validateIeSpRural } 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 { validateRenavam } from '../core/renavam/index.js';\nimport { validateTelefone } from '../core/telefone/index.js';\nimport { validateTituloEleitor } from '../core/titulo-eleitor/index.js';\nimport { stripForType } from '../sanitize/fixes.js';\nimport type { SanitizableDocumentType } from '../sanitize/index.js';\nimport type { UfCode } from '../types/validation-result.js';\nimport type { PlatformDocumentType, PlatformOptions } from './types.js';\n\nconst SANITIZABLE_PLATFORM_TYPES = new Set<PlatformDocumentType>([\n 'cpf',\n 'cnpj',\n 'cep',\n 'placa',\n 'pis-pasep',\n 'telefone',\n 'cnh',\n 'renavam',\n 'titulo-eleitor',\n 'nfe-chave',\n 'boleto',\n 'cartao-credito',\n 'inscricao-estadual',\n 'inscricao-estadual-produtor-rural',\n]);\n\nfunction isSanitizablePlatformType(type: PlatformDocumentType): type is SanitizableDocumentType {\n return SANITIZABLE_PLATFORM_TYPES.has(type);\n}\n\nfunction stripForPlatform(raw: string, type: PlatformDocumentType): string {\n if (type === 'pix' || type === 'brcode') {\n return raw;\n }\n if (isSanitizablePlatformType(type)) {\n return stripForType(raw, type);\n }\n return raw;\n}\n\nexport function normalizeForPlatform(\n raw: string,\n type: PlatformDocumentType,\n options: PlatformOptions = {},\n): string {\n const trimmed = raw.trim();\n const stripped = stripForPlatform(trimmed, type);\n const validated = tryValidatedCanonical(stripped, type, options.uf);\n return validated ?? stripped;\n}\n\nfunction tryValidatedCanonical(\n value: string,\n type: PlatformDocumentType,\n uf?: UfCode,\n): string | null {\n switch (type) {\n case 'cpf': {\n const result = validateCpf(value);\n return result.ok ? result.value : null;\n }\n case 'cnpj': {\n const result = validateCnpj(value);\n return result.ok ? result.value : null;\n }\n case 'cep': {\n const result = validateCep(value);\n return result.ok ? result.value : null;\n }\n case 'placa': {\n const result = validatePlaca(value);\n return result.ok ? result.value : null;\n }\n case 'pis-pasep': {\n const result = validatePisPasep(value);\n return result.ok ? result.value : null;\n }\n case 'telefone': {\n const result = validateTelefone(value);\n return result.ok ? result.value : null;\n }\n case 'cnh': {\n const result = validateCnh(value);\n return result.ok ? result.value : null;\n }\n case 'renavam': {\n const result = validateRenavam(value);\n return result.ok ? result.value : null;\n }\n case 'titulo-eleitor': {\n const result = validateTituloEleitor(value);\n return result.ok ? result.value : null;\n }\n case 'nfe-chave': {\n const result = validateNfeChave(value);\n return result.ok ? result.value : null;\n }\n case 'boleto': {\n const result = validateBoleto(value);\n return result.ok ? result.value : null;\n }\n case 'cartao-credito': {\n const result = validateCartaoCredito(value);\n return result.ok ? result.value : null;\n }\n case 'inscricao-estadual': {\n if (!uf) {\n return null;\n }\n const result = validateInscricaoEstadual(value, { uf });\n return result.ok ? result.value : null;\n }\n case 'inscricao-estadual-produtor-rural': {\n const result = validateIeSpRural(value);\n return result.ok ? result.value : null;\n }\n case 'pix': {\n const result = validatePixKey(value);\n return result.ok ? result.value : null;\n }\n case 'brcode': {\n const result = validateBrCode(value);\n return result.ok ? result.value : null;\n }\n default: {\n return null;\n }\n }\n}\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { stripCnpj } from './chunk-EB3G4IG6.js';
|
|
4
|
-
import { applyCpfMask } from './chunk-KQDLIGSG.js';
|
|
5
|
-
import { validateCpf } from './chunk-F6PTZY4O.js';
|
|
1
|
+
import { applyCpfMask } from './chunk-P2KNN6ZR.js';
|
|
2
|
+
import { validateCpf } from './chunk-63G7QO73.js';
|
|
6
3
|
import { stripCpf } from './chunk-UCJPSJN5.js';
|
|
7
|
-
import {
|
|
4
|
+
import { applyCnpjMask } from './chunk-CSRBRKXY.js';
|
|
5
|
+
import { validateCnpj, detectCnpjFormat } from './chunk-FBARVLLP.js';
|
|
6
|
+
import { stripCnpj } from './chunk-EB3G4IG6.js';
|
|
7
|
+
import { brandPixKey } from './chunk-NUQSMT4Y.js';
|
|
8
8
|
|
|
9
9
|
// src/core/pix/cnpj.ts
|
|
10
10
|
function failure(code, message) {
|
|
@@ -251,5 +251,5 @@ function validatePixKey(input, options) {
|
|
|
251
251
|
}
|
|
252
252
|
|
|
253
253
|
export { PIX_DICT_API_SOURCE_URL, PIX_GOLDEN_CNPJ_ALPHANUMERIC, PIX_GOLDEN_CNPJ_NUMERIC, PIX_GOLDEN_CPF, PIX_GOLDEN_EMAIL, PIX_GOLDEN_EVP, PIX_GOLDEN_PHONE, PIX_OFFICIAL_SOURCE_URL, applyPixCnpjKeyMask, applyPixCpfKeyMask, applyPixEmailKeyMask, applyPixEvpKeyMask, applyPixPhoneKeyMask, detectPixKeyType, isValidPixKey, validatePixCnpjKey, validatePixCpfKey, validatePixEmailKey, validatePixEvpKey, validatePixKey, validatePixPhoneKey };
|
|
254
|
-
//# sourceMappingURL=chunk-
|
|
255
|
-
//# sourceMappingURL=chunk-
|
|
254
|
+
//# sourceMappingURL=chunk-H3MLGGFI.js.map
|
|
255
|
+
//# sourceMappingURL=chunk-H3MLGGFI.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/pix/cnpj.ts","../src/core/pix/cpf.ts","../src/core/pix/constants.ts","../src/core/pix/detect.ts","../src/core/pix/email.ts","../src/core/pix/evp.ts","../src/core/pix/phone.ts","../src/core/pix/mask.ts","../src/core/pix/index.ts"],"names":["failure"],"mappings":";;;;;;;;;AAMA,SAAS,OAAA,CAAQ,MAA4B,OAAA,EAA+B;AAC1E,EAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,IAAA,EAAM,OAAA,EAAS,SAAS,MAAA,EAAO;AACrD;AAEO,SAAS,mBAAmB,KAAA,EAAoC;AACrE,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAO,OAAA,CAAQ,eAAe,6BAA6B,CAAA;AAAA,EAC7D;AAEA,EAAA,MAAM,MAAA,GAAS,aAAa,OAAO,CAAA;AACnC,EAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,IAAA,EAAM,MAAA,CAAO,MAAM,OAAA,EAAS,MAAA,CAAO,OAAA,EAAS,OAAA,EAAS,MAAA,EAAO;AAAA,EAClF;AAEA,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,IAAA;AAAA,IACJ,KAAA,EAAO,WAAA,CAAY,MAAA,CAAO,KAAK,CAAA;AAAA,IAC/B,OAAA,EAAS,MAAA;AAAA,IACT,QAAQ,MAAA,CAAO;AAAA,GACjB;AACF;;;ACrBA,SAASA,QAAAA,CAAQ,MAA4B,OAAA,EAA+B;AAC1E,EAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,IAAA,EAAM,OAAA,EAAS,SAAS,KAAA,EAAM;AACpD;AAEO,SAAS,kBAAkB,KAAA,EAAoC;AACpE,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAOA,QAAAA,CAAQ,eAAe,4BAA4B,CAAA;AAAA,EAC5D;AAEA,EAAA,MAAM,MAAA,GAAS,YAAY,OAAO,CAAA;AAClC,EAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,IAAA,EAAM,MAAA,CAAO,MAAM,OAAA,EAAS,MAAA,CAAO,OAAA,EAAS,OAAA,EAAS,KAAA,EAAM;AAAA,EACjF;AAEA,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,IAAA;AAAA,IACJ,KAAA,EAAO,WAAA,CAAY,MAAA,CAAO,KAAK,CAAA;AAAA,IAC/B,OAAA,EAAS,KAAA;AAAA,IACT,QAAQ,MAAA,CAAO;AAAA,GACjB;AACF;;;ACrBO,IAAM,oBAAA,GAAuB,EAAA;AAC7B,IAAM,iBAAA,GACX,+GAAA;AAEK,IAAM,sBAAA,GAAyB,mBAAA;AAC/B,IAAM,2BAAA,GAA8B,mBAAA;AAEpC,IAAM,eAAA,GACX,gEAAA;AAEK,IAAM,sBAAA,GAAyB,aAAA;AAE/B,IAAM,cAAA,GAAiB;AACvB,IAAM,uBAAA,GAA0B;AAChC,IAAM,4BAAA,GAA+B;AACrC,IAAM,gBAAA,GAAmB;AACzB,IAAM,gBAAA,GAAmB;AAEzB,IAAM,cAAA,GAAiB;AAGvB,IAAM,uBAAA,GACX;AAEK,IAAM,uBAAA,GACX;;;ACpBF,SAAS,iBAAiB,KAAA,EAAwB;AAChD,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,MAAM,QAAA,GAAW,SAAS,OAAO,CAAA;AACjC,EAAA,IAAI,CAAC,sBAAA,CAAuB,IAAA,CAAK,QAAQ,CAAA,EAAG;AAC1C,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,cAAA,CAAe,KAAK,OAAO,CAAA;AACpC;AAEA,SAAS,kBAAkB,KAAA,EAAwB;AACjD,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,MAAM,QAAA,GAAW,UAAU,OAAO,CAAA;AAClC,EAAA,IAAI,gBAAA,CAAiB,QAAQ,CAAA,KAAM,SAAA,EAAW;AAC5C,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,sBAAA,CAAuB,KAAK,OAAO,CAAA;AAC5C;AAEO,SAAS,iBAAiB,KAAA,EAAmC;AAClE,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAO,SAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,EAAG;AACzB,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG;AAC3B,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,IAAI,eAAA,CAAgB,IAAA,CAAK,OAAO,CAAA,EAAG;AACjC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,gBAAA,CAAiB,OAAO,CAAA,EAAG;AAC7B,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,iBAAA,CAAkB,OAAO,CAAA,EAAG;AAC9B,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO,SAAA;AACT;;;AClDA,SAASA,QAAAA,CAAQ,MAA4B,OAAA,EAA+B;AAC1E,EAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,IAAA,EAAM,OAAA,EAAS,SAAS,OAAA,EAAQ;AACtD;AAEO,SAAS,oBAAoB,KAAA,EAAoC;AACtE,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAOA,QAAAA,CAAQ,eAAe,8BAA8B,CAAA;AAAA,EAC9D;AAEA,EAAA,IAAI,OAAA,KAAY,OAAA,CAAQ,WAAA,EAAY,EAAG;AACrC,IAAA,OAAOA,QAAAA,CAAQ,qBAAqB,iCAAiC,CAAA;AAAA,EACvE;AAEA,EAAA,IAAI,OAAA,CAAQ,SAAS,oBAAA,EAAsB;AACzC,IAAA,OAAOA,QAAAA,CAAQ,gBAAA,EAAkB,CAAA,gCAAA,EAAmC,oBAAoB,CAAA,WAAA,CAAa,CAAA;AAAA,EACvG;AAEA,EAAA,IAAI,CAAC,QAAQ,QAAA,CAAS,GAAG,KAAK,CAAC,iBAAA,CAAkB,IAAA,CAAK,OAAO,CAAA,EAAG;AAC9D,IAAA,OAAOA,QAAAA,CAAQ,sBAAsB,iCAAiC,CAAA;AAAA,EACxE;AAEA,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,IAAA;AAAA,IACJ,KAAA,EAAO,YAAY,OAAO,CAAA;AAAA,IAC1B,OAAA,EAAS,OAAA;AAAA,IACT,MAAA,EAAQ;AAAA,GACV;AACF;;;AC5BA,SAASA,QAAAA,CAAQ,MAA4B,OAAA,EAA+B;AAC1E,EAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,IAAA,EAAM,OAAA,EAAS,SAAS,KAAA,EAAM;AACpD;AAEO,SAAS,kBAAkB,KAAA,EAAoC;AACpE,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAOA,QAAAA,CAAQ,eAAe,4BAA4B,CAAA;AAAA,EAC5D;AAEA,EAAA,IAAI,OAAA,KAAY,OAAA,CAAQ,WAAA,EAAY,EAAG;AACrC,IAAA,OAAOA,QAAAA,CAAQ,qBAAqB,+BAA+B,CAAA;AAAA,EACrE;AAEA,EAAA,IAAI,CAAC,eAAA,CAAgB,IAAA,CAAK,OAAO,CAAA,EAAG;AAClC,IAAA,OAAOA,QAAAA,CAAQ,sBAAsB,mDAAmD,CAAA;AAAA,EAC1F;AAEA,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,IAAA;AAAA,IACJ,KAAA,EAAO,YAAY,OAAO,CAAA;AAAA,IAC1B,OAAA,EAAS,KAAA;AAAA,IACT,MAAA,EAAQ;AAAA,GACV;AACF;;;ACxBA,SAASA,QAAAA,CAAQ,MAA4B,OAAA,EAA+B;AAC1E,EAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,IAAA,EAAM,OAAA,EAAS,SAAS,OAAA,EAAQ;AACtD;AAEO,SAAS,oBAAoB,KAAA,EAAoC;AACtE,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAOA,QAAAA,CAAQ,eAAe,8BAA8B,CAAA;AAAA,EAC9D;AAEA,EAAA,IAAI,CAAC,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG;AAC5B,IAAA,OAAOA,QAAAA,CAAQ,qBAAqB,yCAAyC,CAAA;AAAA,EAC/E;AAEA,EAAA,IAAI,CAAC,sBAAA,CAAuB,IAAA,CAAK,OAAO,CAAA,EAAG;AACzC,IAAA,OAAOA,QAAAA,CAAQ,qBAAqB,2CAA2C,CAAA;AAAA,EACjF;AAEA,EAAA,IAAI,CAAC,OAAA,CAAQ,UAAA,CAAW,KAAK,CAAA,EAAG;AAC9B,IAAA,OAAOA,QAAAA,CAAQ,sBAAsB,mDAAmD,CAAA;AAAA,EAC1F;AAEA,EAAA,IAAI,CAAC,2BAAA,CAA4B,IAAA,CAAK,OAAO,CAAA,EAAG;AAC9C,IAAA,OAAOA,QAAAA,CAAQ,sBAAsB,iEAAiE,CAAA;AAAA,EACxG;AAEA,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,IAAA;AAAA,IACJ,KAAA,EAAO,YAAY,OAAO,CAAA;AAAA,IAC1B,OAAA,EAAS,OAAA;AAAA,IACT,MAAA,EAAQ;AAAA,GACV;AACF;;;AC/BO,SAAS,mBAAmB,SAAA,EAA2B;AAC5D,EAAA,OAAO,aAAa,SAAS,CAAA;AAC/B;AAEO,SAAS,oBAAoB,SAAA,EAA2B;AAC7D,EAAA,OAAO,cAAc,SAAS,CAAA;AAChC;AAGO,SAAS,qBAAqB,IAAA,EAAsB;AACzD,EAAA,MAAM,KAAA,GAAQ,8BAAA,CAA+B,IAAA,CAAK,IAAI,CAAA;AACtD,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,MAAM,iEAAiE,CAAA;AAAA,EACnF;AACA,EAAA,OAAO,CAAA,KAAA,EAAQ,KAAA,CAAM,CAAC,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAClD;AAEO,SAAS,qBAAqB,KAAA,EAAuB;AAC1D,EAAA,OAAO,KAAA,CAAM,WAAA,EAAY,CAAE,IAAA,EAAK;AAClC;AAEO,SAAS,mBAAmB,IAAA,EAAsB;AACvD,EAAA,OAAO,KAAK,WAAA,EAAY;AAC1B;;;ACcA,SAASA,QAAAA,CAAQ,IAAA,EAA4B,OAAA,EAAiB,OAAA,EAAoC;AAChG,EAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,IAAA,EAAM,OAAA,EAAS,GAAI,OAAA,GAAU,EAAE,OAAA,EAAQ,GAAI,EAAC,EAAG;AACrE;AAEA,SAAS,cAAA,CAAe,OAAe,OAAA,EAA0C;AAC/E,EAAA,QAAQ,OAAA;AAAS,IACf,KAAK,KAAA;AACH,MAAA,OAAO,kBAAkB,KAAK,CAAA;AAAA,IAChC,KAAK,MAAA;AACH,MAAA,OAAO,mBAAmB,KAAK,CAAA;AAAA,IACjC,KAAK,OAAA;AACH,MAAA,OAAO,oBAAoB,KAAK,CAAA;AAAA,IAClC,KAAK,OAAA;AACH,MAAA,OAAO,oBAAoB,KAAK,CAAA;AAAA,IAClC,KAAK,KAAA;AACH,MAAA,OAAO,kBAAkB,KAAK,CAAA;AAAA,IAChC,SAAS;AACP,MAAA,MAAM,WAAA,GAAqB,OAAA;AAC3B,MAAA,OAAOA,QAAAA,CAAQ,oBAAA,EAAsB,CAAA,sBAAA,EAAyB,WAAW,CAAA,CAAE,CAAA;AAAA,IAC7E;AAAA;AAEJ;AAEO,SAAS,aAAA,CAAc,OAAe,OAAA,EAA0C;AACrF,EAAA,OAAO,cAAA,CAAe,KAAA,EAAO,OAAO,CAAA,CAAE,EAAA;AACxC;AAEO,SAAS,cAAA,CAAe,OAAe,OAAA,EAAsD;AAClG,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAOA,QAAAA,CAAQ,eAAe,wBAAwB,CAAA;AAAA,EACxD;AAEA,EAAA,MAAM,QAAA,GAAW,iBAAiB,OAAO,CAAA;AAEzC,EAAA,IAAI,OAAA,EAAS,SAAS,MAAA,EAAW;AAC/B,IAAA,IAAI,QAAA,KAAa,SAAA,IAAa,QAAA,KAAa,OAAA,CAAQ,IAAA,EAAM;AACvD,MAAA,OAAOA,QAAAA;AAAA,QACL,oBAAA;AAAA,QACA,CAAA,oBAAA,EAAuB,QAAQ,CAAA,oBAAA,EAAuB,OAAA,CAAQ,IAAI,CAAA,CAAA;AAAA,QAClE,OAAA,CAAQ;AAAA,OACV;AAAA,IACF;AACA,IAAA,OAAO,cAAA,CAAe,OAAA,EAAS,OAAA,CAAQ,IAAI,CAAA;AAAA,EAC7C;AAEA,EAAA,IAAI,aAAa,SAAA,EAAW;AAC1B,IAAA,OAAOA,QAAAA,CAAQ,sBAAsB,sCAAsC,CAAA;AAAA,EAC7E;AAEA,EAAA,OAAO,cAAA,CAAe,SAAS,QAAQ,CAAA;AACzC","file":"chunk-MK7OJUF5.js","sourcesContent":["import { validateCnpj } from '../cnpj/index.js';\nimport type { PixValidationResult } from '../../types/validation-result.js';\nimport { brandPixKey } from '../../types/validation-result.js';\n\ntype FailedResult = Extract<PixValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string): FailedResult {\n return { ok: false, code, message, keyType: 'cnpj' };\n}\n\nexport function validatePixCnpjKey(input: string): PixValidationResult {\n const trimmed = input.trim();\n if (trimmed.length === 0) {\n return failure('EMPTY_INPUT', 'PIX CNPJ key input is empty');\n }\n\n const result = validateCnpj(trimmed);\n if (!result.ok) {\n return { ok: false, code: result.code, message: result.message, keyType: 'cnpj' };\n }\n\n return {\n ok: true,\n value: brandPixKey(result.value),\n keyType: 'cnpj',\n format: result.format,\n };\n}\n","import { validateCpf } from '../cpf/index.js';\nimport type { PixValidationResult } from '../../types/validation-result.js';\nimport { brandPixKey } from '../../types/validation-result.js';\n\ntype FailedResult = Extract<PixValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string): FailedResult {\n return { ok: false, code, message, keyType: 'cpf' };\n}\n\nexport function validatePixCpfKey(input: string): PixValidationResult {\n const trimmed = input.trim();\n if (trimmed.length === 0) {\n return failure('EMPTY_INPUT', 'PIX CPF key input is empty');\n }\n\n const result = validateCpf(trimmed);\n if (!result.ok) {\n return { ok: false, code: result.code, message: result.message, keyType: 'cpf' };\n }\n\n return {\n ok: true,\n value: brandPixKey(result.value),\n keyType: 'cpf',\n format: result.format,\n };\n}\n","/**\n * PIX key constants — Bacen DICT API + Manual de Iniciação do Pix.\n * @see https://aprendervalor.bcb.gov.br/content/estabilidadefinanceira/pix/API-DICT_v2-9-0.html\n * @see https://www.bcb.gov.br/content/estabilidadefinanceira/pix/Regulamento_Pix/II_ManualdePadroesparaIniciacaodoPix.pdf\n * @see docs/use-cases/UC-005-validate-pix-key.md\n */\nexport const PIX_EMAIL_MAX_LENGTH = 77;\nexport const PIX_EMAIL_PATTERN =\n /^[a-z0-9.!#$'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/;\n\nexport const PIX_PHONE_E164_PATTERN = /^\\+[1-9]\\d{1,14}$/;\nexport const PIX_PHONE_BR_MOBILE_PATTERN = /^\\+55\\d{2}9\\d{8}$/;\n\nexport const PIX_EVP_PATTERN =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;\n\nexport const PIX_CPF_DIGITS_PATTERN = /^[0-9]{11}$/;\n\nexport const PIX_GOLDEN_CPF = '12345678909';\nexport const PIX_GOLDEN_CNPJ_NUMERIC = '11222333000181';\nexport const PIX_GOLDEN_CNPJ_ALPHANUMERIC = '12ABC34501DE35';\nexport const PIX_GOLDEN_EMAIL = 'pix@bcb.gov.br';\nexport const PIX_GOLDEN_PHONE = '+5510998765432';\nexport const PIX_GOLDEN_PHONE_SECONDARY = '+5561912345678';\nexport const PIX_GOLDEN_EVP = '123e4567-e89b-12d3-a456-426655440000';\nexport const PIX_GOLDEN_EMAIL_SECONDARY = 'fulano_da_silva.recebedor@example.com';\n\nexport const PIX_OFFICIAL_SOURCE_URL =\n 'https://www.bcb.gov.br/content/estabilidadefinanceira/pix/Regulamento_Pix/II_ManualdePadroesparaIniciacaodoPix.pdf';\n\nexport const PIX_DICT_API_SOURCE_URL =\n 'https://aprendervalor.bcb.gov.br/content/estabilidadefinanceira/pix/API-DICT_v2-9-0.html';\n","import { stripCnpj } from '../../strip/cnpj.js';\nimport { stripCpf } from '../../strip/cpf.js';\nimport type { PixKeyType } from '../../types/validation-result.js';\nimport { detectCnpjFormat } from '../cnpj/detect.js';\nimport {\n PIX_CPF_DIGITS_PATTERN,\n PIX_EVP_PATTERN,\n} from './constants.js';\n\nexport type DetectedPixKeyType = PixKeyType | 'unknown';\n\nfunction isCpfShapedInput(input: string): boolean {\n const trimmed = input.trim();\n const stripped = stripCpf(trimmed);\n if (!PIX_CPF_DIGITS_PATTERN.test(stripped)) {\n return false;\n }\n return /^[\\d.\\-\\s]+$/.test(trimmed);\n}\n\nfunction isCnpjShapedInput(input: string): boolean {\n const trimmed = input.trim();\n const stripped = stripCnpj(trimmed);\n if (detectCnpjFormat(stripped) === 'unknown') {\n return false;\n }\n return /^[A-Za-z0-9./\\-\\s]+$/.test(trimmed);\n}\n\nexport function detectPixKeyType(input: string): DetectedPixKeyType {\n const trimmed = input.trim();\n if (trimmed.length === 0) {\n return 'unknown';\n }\n\n if (trimmed.includes('@')) {\n return 'email';\n }\n\n if (trimmed.startsWith('+')) {\n return 'phone';\n }\n\n if (PIX_EVP_PATTERN.test(trimmed)) {\n return 'evp';\n }\n\n if (isCpfShapedInput(trimmed)) {\n return 'cpf';\n }\n\n if (isCnpjShapedInput(trimmed)) {\n return 'cnpj';\n }\n\n return 'unknown';\n}\n","import type { PixValidationResult } from '../../types/validation-result.js';\nimport { brandPixKey } from '../../types/validation-result.js';\nimport { PIX_EMAIL_MAX_LENGTH, PIX_EMAIL_PATTERN } from './constants.js';\n\ntype FailedResult = Extract<PixValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string): FailedResult {\n return { ok: false, code, message, keyType: 'email' };\n}\n\nexport function validatePixEmailKey(input: string): PixValidationResult {\n const trimmed = input.trim();\n if (trimmed.length === 0) {\n return failure('EMPTY_INPUT', 'PIX email key input is empty');\n }\n\n if (trimmed !== trimmed.toLowerCase()) {\n return failure('INVALID_CHARACTER', 'PIX email key must be lowercase');\n }\n\n if (trimmed.length > PIX_EMAIL_MAX_LENGTH) {\n return failure('INVALID_LENGTH', `PIX email key must have at most ${PIX_EMAIL_MAX_LENGTH} characters`);\n }\n\n if (!trimmed.includes('@') || !PIX_EMAIL_PATTERN.test(trimmed)) {\n return failure('UNSUPPORTED_FORMAT', 'PIX email key format is invalid');\n }\n\n return {\n ok: true,\n value: brandPixKey(trimmed),\n keyType: 'email',\n format: 'email',\n };\n}\n","import type { PixValidationResult } from '../../types/validation-result.js';\nimport { brandPixKey } from '../../types/validation-result.js';\nimport { PIX_EVP_PATTERN } from './constants.js';\n\ntype FailedResult = Extract<PixValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string): FailedResult {\n return { ok: false, code, message, keyType: 'evp' };\n}\n\nexport function validatePixEvpKey(input: string): PixValidationResult {\n const trimmed = input.trim();\n if (trimmed.length === 0) {\n return failure('EMPTY_INPUT', 'PIX EVP key input is empty');\n }\n\n if (trimmed !== trimmed.toLowerCase()) {\n return failure('INVALID_CHARACTER', 'PIX EVP key must be lowercase');\n }\n\n if (!PIX_EVP_PATTERN.test(trimmed)) {\n return failure('UNSUPPORTED_FORMAT', 'PIX EVP key must be a lowercase UUID with hyphens');\n }\n\n return {\n ok: true,\n value: brandPixKey(trimmed),\n keyType: 'evp',\n format: 'evp',\n };\n}\n","import type { PixValidationResult } from '../../types/validation-result.js';\nimport { brandPixKey } from '../../types/validation-result.js';\nimport { PIX_PHONE_BR_MOBILE_PATTERN, PIX_PHONE_E164_PATTERN } from './constants.js';\n\ntype FailedResult = Extract<PixValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string): FailedResult {\n return { ok: false, code, message, keyType: 'phone' };\n}\n\nexport function validatePixPhoneKey(input: string): PixValidationResult {\n const trimmed = input.trim();\n if (trimmed.length === 0) {\n return failure('EMPTY_INPUT', 'PIX phone key input is empty');\n }\n\n if (!trimmed.startsWith('+')) {\n return failure('INVALID_CHARACTER', 'PIX phone key must start with + (E.164)');\n }\n\n if (!PIX_PHONE_E164_PATTERN.test(trimmed)) {\n return failure('INVALID_CHARACTER', 'PIX phone key contains invalid characters');\n }\n\n if (!trimmed.startsWith('+55')) {\n return failure('UNSUPPORTED_FORMAT', 'PIX phone key must use Brazilian country code +55');\n }\n\n if (!PIX_PHONE_BR_MOBILE_PATTERN.test(trimmed)) {\n return failure('UNSUPPORTED_FORMAT', 'PIX phone key must match Brazilian mobile format +55DD9XXXXXXXX');\n }\n\n return {\n ok: true,\n value: brandPixKey(trimmed),\n keyType: 'phone',\n format: 'phone',\n };\n}\n","/**\n * PIX key display masks — delegates to parent validators where applicable (BR-PIX-001…005).\n * @see docs/use-cases/UC-003-format-document.md\n */\nimport { applyCnpjMask } from '../cnpj/mask.js';\nimport { applyCpfMask } from '../cpf/mask.js';\n\nexport function applyPixCpfKeyMask(canonical: string): string {\n return applyCpfMask(canonical);\n}\n\nexport function applyPixCnpjKeyMask(canonical: string): string {\n return applyCnpjMask(canonical);\n}\n\n/** Brazilian mobile E.164 → +55 (DD) 9XXXX-XXXX display. */\nexport function applyPixPhoneKeyMask(e164: string): string {\n const match = /^\\+55(\\d{2})(9\\d{4})(\\d{4})$/.exec(e164);\n if (!match) {\n throw new Error('PIX phone key must be a validated Brazilian mobile E.164 number');\n }\n return `+55 (${match[1]}) ${match[2]}-${match[3]}`;\n}\n\nexport function applyPixEmailKeyMask(email: string): string {\n return email.toLowerCase().trim();\n}\n\nexport function applyPixEvpKeyMask(uuid: string): string {\n return uuid.toLowerCase();\n}\n","/**\n * PIX key validation — five Bacen types (CPF, CNPJ, email, phone, EVP).\n * @see docs/use-cases/UC-005-validate-pix-key.md\n */\nimport type { PixKeyType, PixValidationResult } from '../../types/validation-result.js';\nimport { validatePixCnpjKey } from './cnpj.js';\nimport { validatePixCpfKey } from './cpf.js';\nimport { detectPixKeyType } from './detect.js';\nimport { validatePixEmailKey } from './email.js';\nimport { validatePixEvpKey } from './evp.js';\nimport { validatePixPhoneKey } from './phone.js';\n\nexport {\n PIX_DICT_API_SOURCE_URL,\n PIX_GOLDEN_CNPJ_ALPHANUMERIC,\n PIX_GOLDEN_CNPJ_NUMERIC,\n PIX_GOLDEN_CPF,\n PIX_GOLDEN_EMAIL,\n PIX_GOLDEN_EMAIL_SECONDARY,\n PIX_GOLDEN_EVP,\n PIX_GOLDEN_PHONE,\n PIX_GOLDEN_PHONE_SECONDARY,\n PIX_OFFICIAL_SOURCE_URL,\n} from './constants.js';\nexport { detectPixKeyType, type DetectedPixKeyType } from './detect.js';\nexport { validatePixCpfKey } from './cpf.js';\nexport { validatePixCnpjKey } from './cnpj.js';\nexport { validatePixEmailKey } from './email.js';\nexport { validatePixPhoneKey } from './phone.js';\nexport { validatePixEvpKey } from './evp.js';\nexport {\n applyPixCnpjKeyMask,\n applyPixCpfKeyMask,\n applyPixEmailKeyMask,\n applyPixEvpKeyMask,\n applyPixPhoneKeyMask,\n} from './mask.js';\n\nexport type ValidatePixKeyOptions = {\n type?: PixKeyType;\n};\n\ntype FailedResult = Extract<PixValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string, keyType?: PixKeyType): FailedResult {\n return { ok: false, code, message, ...(keyType ? { keyType } : {}) };\n}\n\nfunction validateByType(input: string, keyType: PixKeyType): PixValidationResult {\n switch (keyType) {\n case 'cpf':\n return validatePixCpfKey(input);\n case 'cnpj':\n return validatePixCnpjKey(input);\n case 'email':\n return validatePixEmailKey(input);\n case 'phone':\n return validatePixPhoneKey(input);\n case 'evp':\n return validatePixEvpKey(input);\n default: {\n const _exhaustive: never = keyType;\n return failure('UNSUPPORTED_FORMAT', `Unknown PIX key type: ${_exhaustive}`);\n }\n }\n}\n\nexport function isValidPixKey(input: string, options?: ValidatePixKeyOptions): boolean {\n return validatePixKey(input, options).ok;\n}\n\nexport function validatePixKey(input: string, options?: ValidatePixKeyOptions): PixValidationResult {\n const trimmed = input.trim();\n if (trimmed.length === 0) {\n return failure('EMPTY_INPUT', 'PIX key input is empty');\n }\n\n const detected = detectPixKeyType(trimmed);\n\n if (options?.type !== undefined) {\n if (detected !== 'unknown' && detected !== options.type) {\n return failure(\n 'UNSUPPORTED_FORMAT',\n `PIX key detected as ${detected} but forced type is ${options.type}`,\n options.type,\n );\n }\n return validateByType(trimmed, options.type);\n }\n\n if (detected === 'unknown') {\n return failure('UNSUPPORTED_FORMAT', 'PIX key type could not be determined');\n }\n\n return validateByType(trimmed, detected);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/pix/cnpj.ts","../src/core/pix/cpf.ts","../src/core/pix/constants.ts","../src/core/pix/detect.ts","../src/core/pix/email.ts","../src/core/pix/evp.ts","../src/core/pix/phone.ts","../src/core/pix/mask.ts","../src/core/pix/index.ts"],"names":["failure"],"mappings":"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","file":"chunk-H3MLGGFI.js","sourcesContent":["import { validateCnpj } from '../cnpj/index.js';\nimport type { PixValidationResult } from '../../types/validation-result.js';\nimport { brandPixKey } from '../../types/validation-result.js';\n\ntype FailedResult = Extract<PixValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string): FailedResult {\n return { ok: false, code, message, keyType: 'cnpj' };\n}\n\nexport function validatePixCnpjKey(input: string): PixValidationResult {\n const trimmed = input.trim();\n if (trimmed.length === 0) {\n return failure('EMPTY_INPUT', 'PIX CNPJ key input is empty');\n }\n\n const result = validateCnpj(trimmed);\n if (!result.ok) {\n return { ok: false, code: result.code, message: result.message, keyType: 'cnpj' };\n }\n\n return {\n ok: true,\n value: brandPixKey(result.value),\n keyType: 'cnpj',\n format: result.format,\n };\n}\n","import { validateCpf } from '../cpf/index.js';\nimport type { PixValidationResult } from '../../types/validation-result.js';\nimport { brandPixKey } from '../../types/validation-result.js';\n\ntype FailedResult = Extract<PixValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string): FailedResult {\n return { ok: false, code, message, keyType: 'cpf' };\n}\n\nexport function validatePixCpfKey(input: string): PixValidationResult {\n const trimmed = input.trim();\n if (trimmed.length === 0) {\n return failure('EMPTY_INPUT', 'PIX CPF key input is empty');\n }\n\n const result = validateCpf(trimmed);\n if (!result.ok) {\n return { ok: false, code: result.code, message: result.message, keyType: 'cpf' };\n }\n\n return {\n ok: true,\n value: brandPixKey(result.value),\n keyType: 'cpf',\n format: result.format,\n };\n}\n","/**\n * PIX key constants — Bacen DICT API + Manual de Iniciação do Pix.\n * @see https://aprendervalor.bcb.gov.br/content/estabilidadefinanceira/pix/API-DICT_v2-9-0.html\n * @see https://www.bcb.gov.br/content/estabilidadefinanceira/pix/Regulamento_Pix/II_ManualdePadroesparaIniciacaodoPix.pdf\n * @see docs/use-cases/UC-005-validate-pix-key.md\n */\nexport const PIX_EMAIL_MAX_LENGTH = 77;\nexport const PIX_EMAIL_PATTERN =\n /^[a-z0-9.!#$'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/;\n\nexport const PIX_PHONE_E164_PATTERN = /^\\+[1-9]\\d{1,14}$/;\nexport const PIX_PHONE_BR_MOBILE_PATTERN = /^\\+55\\d{2}9\\d{8}$/;\n\nexport const PIX_EVP_PATTERN =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;\n\nexport const PIX_CPF_DIGITS_PATTERN = /^[0-9]{11}$/;\n\nexport const PIX_GOLDEN_CPF = '12345678909';\nexport const PIX_GOLDEN_CNPJ_NUMERIC = '11222333000181';\nexport const PIX_GOLDEN_CNPJ_ALPHANUMERIC = '12ABC34501DE35';\nexport const PIX_GOLDEN_EMAIL = 'pix@bcb.gov.br';\nexport const PIX_GOLDEN_PHONE = '+5510998765432';\nexport const PIX_GOLDEN_PHONE_SECONDARY = '+5561912345678';\nexport const PIX_GOLDEN_EVP = '123e4567-e89b-12d3-a456-426655440000';\nexport const PIX_GOLDEN_EMAIL_SECONDARY = 'fulano_da_silva.recebedor@example.com';\n\nexport const PIX_OFFICIAL_SOURCE_URL =\n 'https://www.bcb.gov.br/content/estabilidadefinanceira/pix/Regulamento_Pix/II_ManualdePadroesparaIniciacaodoPix.pdf';\n\nexport const PIX_DICT_API_SOURCE_URL =\n 'https://aprendervalor.bcb.gov.br/content/estabilidadefinanceira/pix/API-DICT_v2-9-0.html';\n","import { stripCnpj } from '../../strip/cnpj.js';\nimport { stripCpf } from '../../strip/cpf.js';\nimport type { PixKeyType } from '../../types/validation-result.js';\nimport { detectCnpjFormat } from '../cnpj/detect.js';\nimport {\n PIX_CPF_DIGITS_PATTERN,\n PIX_EVP_PATTERN,\n} from './constants.js';\n\nexport type DetectedPixKeyType = PixKeyType | 'unknown';\n\nfunction isCpfShapedInput(input: string): boolean {\n const trimmed = input.trim();\n const stripped = stripCpf(trimmed);\n if (!PIX_CPF_DIGITS_PATTERN.test(stripped)) {\n return false;\n }\n return /^[\\d.\\-\\s]+$/.test(trimmed);\n}\n\nfunction isCnpjShapedInput(input: string): boolean {\n const trimmed = input.trim();\n const stripped = stripCnpj(trimmed);\n if (detectCnpjFormat(stripped) === 'unknown') {\n return false;\n }\n return /^[A-Za-z0-9./\\-\\s]+$/.test(trimmed);\n}\n\nexport function detectPixKeyType(input: string): DetectedPixKeyType {\n const trimmed = input.trim();\n if (trimmed.length === 0) {\n return 'unknown';\n }\n\n if (trimmed.includes('@')) {\n return 'email';\n }\n\n if (trimmed.startsWith('+')) {\n return 'phone';\n }\n\n if (PIX_EVP_PATTERN.test(trimmed)) {\n return 'evp';\n }\n\n if (isCpfShapedInput(trimmed)) {\n return 'cpf';\n }\n\n if (isCnpjShapedInput(trimmed)) {\n return 'cnpj';\n }\n\n return 'unknown';\n}\n","import type { PixValidationResult } from '../../types/validation-result.js';\nimport { brandPixKey } from '../../types/validation-result.js';\nimport { PIX_EMAIL_MAX_LENGTH, PIX_EMAIL_PATTERN } from './constants.js';\n\ntype FailedResult = Extract<PixValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string): FailedResult {\n return { ok: false, code, message, keyType: 'email' };\n}\n\nexport function validatePixEmailKey(input: string): PixValidationResult {\n const trimmed = input.trim();\n if (trimmed.length === 0) {\n return failure('EMPTY_INPUT', 'PIX email key input is empty');\n }\n\n if (trimmed !== trimmed.toLowerCase()) {\n return failure('INVALID_CHARACTER', 'PIX email key must be lowercase');\n }\n\n if (trimmed.length > PIX_EMAIL_MAX_LENGTH) {\n return failure('INVALID_LENGTH', `PIX email key must have at most ${PIX_EMAIL_MAX_LENGTH} characters`);\n }\n\n if (!trimmed.includes('@') || !PIX_EMAIL_PATTERN.test(trimmed)) {\n return failure('UNSUPPORTED_FORMAT', 'PIX email key format is invalid');\n }\n\n return {\n ok: true,\n value: brandPixKey(trimmed),\n keyType: 'email',\n format: 'email',\n };\n}\n","import type { PixValidationResult } from '../../types/validation-result.js';\nimport { brandPixKey } from '../../types/validation-result.js';\nimport { PIX_EVP_PATTERN } from './constants.js';\n\ntype FailedResult = Extract<PixValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string): FailedResult {\n return { ok: false, code, message, keyType: 'evp' };\n}\n\nexport function validatePixEvpKey(input: string): PixValidationResult {\n const trimmed = input.trim();\n if (trimmed.length === 0) {\n return failure('EMPTY_INPUT', 'PIX EVP key input is empty');\n }\n\n if (trimmed !== trimmed.toLowerCase()) {\n return failure('INVALID_CHARACTER', 'PIX EVP key must be lowercase');\n }\n\n if (!PIX_EVP_PATTERN.test(trimmed)) {\n return failure('UNSUPPORTED_FORMAT', 'PIX EVP key must be a lowercase UUID with hyphens');\n }\n\n return {\n ok: true,\n value: brandPixKey(trimmed),\n keyType: 'evp',\n format: 'evp',\n };\n}\n","import type { PixValidationResult } from '../../types/validation-result.js';\nimport { brandPixKey } from '../../types/validation-result.js';\nimport { PIX_PHONE_BR_MOBILE_PATTERN, PIX_PHONE_E164_PATTERN } from './constants.js';\n\ntype FailedResult = Extract<PixValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string): FailedResult {\n return { ok: false, code, message, keyType: 'phone' };\n}\n\nexport function validatePixPhoneKey(input: string): PixValidationResult {\n const trimmed = input.trim();\n if (trimmed.length === 0) {\n return failure('EMPTY_INPUT', 'PIX phone key input is empty');\n }\n\n if (!trimmed.startsWith('+')) {\n return failure('INVALID_CHARACTER', 'PIX phone key must start with + (E.164)');\n }\n\n if (!PIX_PHONE_E164_PATTERN.test(trimmed)) {\n return failure('INVALID_CHARACTER', 'PIX phone key contains invalid characters');\n }\n\n if (!trimmed.startsWith('+55')) {\n return failure('UNSUPPORTED_FORMAT', 'PIX phone key must use Brazilian country code +55');\n }\n\n if (!PIX_PHONE_BR_MOBILE_PATTERN.test(trimmed)) {\n return failure('UNSUPPORTED_FORMAT', 'PIX phone key must match Brazilian mobile format +55DD9XXXXXXXX');\n }\n\n return {\n ok: true,\n value: brandPixKey(trimmed),\n keyType: 'phone',\n format: 'phone',\n };\n}\n","/**\n * PIX key display masks — delegates to parent validators where applicable (BR-PIX-001…005).\n * @see docs/use-cases/UC-003-format-document.md\n */\nimport { applyCnpjMask } from '../cnpj/mask.js';\nimport { applyCpfMask } from '../cpf/mask.js';\n\nexport function applyPixCpfKeyMask(canonical: string): string {\n return applyCpfMask(canonical);\n}\n\nexport function applyPixCnpjKeyMask(canonical: string): string {\n return applyCnpjMask(canonical);\n}\n\n/** Brazilian mobile E.164 → +55 (DD) 9XXXX-XXXX display. */\nexport function applyPixPhoneKeyMask(e164: string): string {\n const match = /^\\+55(\\d{2})(9\\d{4})(\\d{4})$/.exec(e164);\n if (!match) {\n throw new Error('PIX phone key must be a validated Brazilian mobile E.164 number');\n }\n return `+55 (${match[1]}) ${match[2]}-${match[3]}`;\n}\n\nexport function applyPixEmailKeyMask(email: string): string {\n return email.toLowerCase().trim();\n}\n\nexport function applyPixEvpKeyMask(uuid: string): string {\n return uuid.toLowerCase();\n}\n","/**\n * PIX key validation — five Bacen types (CPF, CNPJ, email, phone, EVP).\n * @see docs/use-cases/UC-005-validate-pix-key.md\n */\nimport type { PixKeyType, PixValidationResult } from '../../types/validation-result.js';\nimport { validatePixCnpjKey } from './cnpj.js';\nimport { validatePixCpfKey } from './cpf.js';\nimport { detectPixKeyType } from './detect.js';\nimport { validatePixEmailKey } from './email.js';\nimport { validatePixEvpKey } from './evp.js';\nimport { validatePixPhoneKey } from './phone.js';\n\nexport {\n PIX_DICT_API_SOURCE_URL,\n PIX_GOLDEN_CNPJ_ALPHANUMERIC,\n PIX_GOLDEN_CNPJ_NUMERIC,\n PIX_GOLDEN_CPF,\n PIX_GOLDEN_EMAIL,\n PIX_GOLDEN_EMAIL_SECONDARY,\n PIX_GOLDEN_EVP,\n PIX_GOLDEN_PHONE,\n PIX_GOLDEN_PHONE_SECONDARY,\n PIX_OFFICIAL_SOURCE_URL,\n} from './constants.js';\nexport { detectPixKeyType, type DetectedPixKeyType } from './detect.js';\nexport { validatePixCpfKey } from './cpf.js';\nexport { validatePixCnpjKey } from './cnpj.js';\nexport { validatePixEmailKey } from './email.js';\nexport { validatePixPhoneKey } from './phone.js';\nexport { validatePixEvpKey } from './evp.js';\nexport {\n applyPixCnpjKeyMask,\n applyPixCpfKeyMask,\n applyPixEmailKeyMask,\n applyPixEvpKeyMask,\n applyPixPhoneKeyMask,\n} from './mask.js';\n\nexport type ValidatePixKeyOptions = {\n type?: PixKeyType;\n};\n\ntype FailedResult = Extract<PixValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string, keyType?: PixKeyType): FailedResult {\n return { ok: false, code, message, ...(keyType ? { keyType } : {}) };\n}\n\nfunction validateByType(input: string, keyType: PixKeyType): PixValidationResult {\n switch (keyType) {\n case 'cpf':\n return validatePixCpfKey(input);\n case 'cnpj':\n return validatePixCnpjKey(input);\n case 'email':\n return validatePixEmailKey(input);\n case 'phone':\n return validatePixPhoneKey(input);\n case 'evp':\n return validatePixEvpKey(input);\n default: {\n const _exhaustive: never = keyType;\n return failure('UNSUPPORTED_FORMAT', `Unknown PIX key type: ${_exhaustive}`);\n }\n }\n}\n\nexport function isValidPixKey(input: string, options?: ValidatePixKeyOptions): boolean {\n return validatePixKey(input, options).ok;\n}\n\nexport function validatePixKey(input: string, options?: ValidatePixKeyOptions): PixValidationResult {\n const trimmed = input.trim();\n if (trimmed.length === 0) {\n return failure('EMPTY_INPUT', 'PIX key input is empty');\n }\n\n const detected = detectPixKeyType(trimmed);\n\n if (options?.type !== undefined) {\n if (detected !== 'unknown' && detected !== options.type) {\n return failure(\n 'UNSUPPORTED_FORMAT',\n `PIX key detected as ${detected} but forced type is ${options.type}`,\n options.type,\n );\n }\n return validateByType(trimmed, options.type);\n }\n\n if (detected === 'unknown') {\n return failure('UNSUPPORTED_FORMAT', 'PIX key type could not be determined');\n }\n\n return validateByType(trimmed, detected);\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { stripRenavam } from './chunk-YYHS5WQN.js';
|
|
2
2
|
import { weightedSum } from './chunk-OTZHMJYE.js';
|
|
3
|
-
import { brandRenavam } from './chunk-
|
|
3
|
+
import { brandRenavam } from './chunk-NUQSMT4Y.js';
|
|
4
4
|
|
|
5
5
|
// src/core/renavam/constants.ts
|
|
6
6
|
var RENAVAM_DV_WEIGHTS = [3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
|
|
@@ -82,5 +82,5 @@ function validateRenavam(input) {
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
export { RENAVAM_BASE_LENGTH, RENAVAM_DV_WEIGHTS, RENAVAM_GOLDEN_DASH_INPUT, RENAVAM_GOLDEN_DV_ZERO, RENAVAM_GOLDEN_LEADING_ZEROS, RENAVAM_GOLDEN_PRIMARY, RENAVAM_GOLDEN_SECONDARY, RENAVAM_LENGTH, RENAVAM_NUMERIC_PATTERN, RENAVAM_OFFICIAL_SOURCE_URL, RENAVAM_SENATRAN_CONSULTA_URL, computeRenavamCheckDigit, isValidRenavam, validateRenavam };
|
|
85
|
-
//# sourceMappingURL=chunk-
|
|
86
|
-
//# sourceMappingURL=chunk-
|
|
85
|
+
//# sourceMappingURL=chunk-I66ZRSEN.js.map
|
|
86
|
+
//# sourceMappingURL=chunk-I66ZRSEN.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/renavam/constants.ts","../src/core/renavam/check-digits.ts","../src/core/renavam/index.ts"],"names":[],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/core/renavam/constants.ts","../src/core/renavam/check-digits.ts","../src/core/renavam/index.ts"],"names":[],"mappings":"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","file":"chunk-I66ZRSEN.js","sourcesContent":["/**\n * RENAVAM constants — modulo 11, peso 9 (DENATRAN / SENATRAN).\n * @see https://www.gov.br/transportes/pt-br/assuntos/transito/arquivos-senatran/portarias/2013/portaria0272013.pdf\n * @see https://www.gov.br/pt-br/servicos/consultar-dados-de-veiculo-na-base-renavam\n * @see https://siga0984.wordpress.com/2019/05/01/algoritmos-validacao-de-renavam/ — algorithm cross-check (AdvPL)\n * @see https://www.geravalida.com.br/gerador-de-renavam — implementation cross-check\n * @see https://geradorfacil.com/geradores/renavam — implementation cross-check\n */\nexport const RENAVAM_DV_WEIGHTS = [3, 2, 9, 8, 7, 6, 5, 4, 3, 2] as const;\nexport const RENAVAM_LENGTH = 11;\nexport const RENAVAM_BASE_LENGTH = 10;\nexport const RENAVAM_NUMERIC_PATTERN = /^\\d{11}$/;\n\n/** Golden primary — DV walkthrough: base `6397779110` → DV `4`. */\nexport const RENAVAM_GOLDEN_PRIMARY = '63977791104';\nexport const RENAVAM_GOLDEN_SECONDARY = '72176426415';\nexport const RENAVAM_GOLDEN_LEADING_ZEROS = '00207104255';\nexport const RENAVAM_GOLDEN_DV_ZERO = '12345678900';\n\n/** Optional dash before check digit — accepted on input via strip, never emitted by format. */\nexport const RENAVAM_GOLDEN_DASH_INPUT = '7217642641-5';\n\nexport const RENAVAM_OFFICIAL_SOURCE_URL =\n 'https://www.gov.br/transportes/pt-br/assuntos/transito/arquivos-senatran/portarias/2013/portaria0272013.pdf';\n\n/** SENATRAN online vehicle lookup — requires RENAVAM + plate + owner CPF/CNPJ. */\nexport const RENAVAM_SENATRAN_CONSULTA_URL =\n 'https://www.gov.br/pt-br/servicos/consultar-dados-de-veiculo-na-base-renavam';\n","/**\n * RENAVAM check digit — modulo 11, peso 9 (Portaria DENATRAN 27/2013).\n * @see https://www.gov.br/transportes/pt-br/assuntos/transito/arquivos-senatran/portarias/2013/portaria0272013.pdf\n * @see https://siga0984.wordpress.com/2019/05/01/algoritmos-validacao-de-renavam/ — algorithm cross-check (AdvPL)\n */\nimport { weightedSum } from '../cnpj/modulo11.js';\nimport { RENAVAM_DV_WEIGHTS } from './constants.js';\n\nfunction digitValue(char: string): number {\n return Number(char);\n}\n\nexport function computeRenavamWeightedSum(base: string): number {\n const values = base.split('').map(digitValue);\n return weightedSum(values, RENAVAM_DV_WEIGHTS);\n}\n\nexport function computeRenavamCheckDigit(base: string): number {\n const remainder = computeRenavamWeightedSum(base) % 11;\n let dv = 11 - remainder;\n if (dv > 9) {\n dv = 0;\n }\n return dv;\n}\n","/**\n * RENAVAM validation — modulo 11, peso 9 (DENATRAN / SENATRAN).\n * @see https://www.gov.br/transportes/pt-br/assuntos/transito/arquivos-senatran/portarias/2013/portaria0272013.pdf\n * @see https://www.gov.br/pt-br/servicos/consultar-dados-de-veiculo-na-base-renavam\n */\nimport { stripRenavam } from '../../strip/index.js';\nimport type { Renavam, ValidationResult } from '../../types/validation-result.js';\nimport { brandRenavam } from '../../types/validation-result.js';\nimport { computeRenavamCheckDigit } from './check-digits.js';\nimport { RENAVAM_BASE_LENGTH, RENAVAM_LENGTH } from './constants.js';\n\nexport {\n RENAVAM_BASE_LENGTH,\n RENAVAM_DV_WEIGHTS,\n RENAVAM_GOLDEN_DASH_INPUT,\n RENAVAM_GOLDEN_DV_ZERO,\n RENAVAM_GOLDEN_LEADING_ZEROS,\n RENAVAM_GOLDEN_PRIMARY,\n RENAVAM_GOLDEN_SECONDARY,\n RENAVAM_LENGTH,\n RENAVAM_NUMERIC_PATTERN,\n RENAVAM_OFFICIAL_SOURCE_URL,\n RENAVAM_SENATRAN_CONSULTA_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 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 isValidRenavamChecksum(stripped: string): boolean {\n const base = stripped.slice(0, RENAVAM_BASE_LENGTH);\n const expected = String(computeRenavamCheckDigit(base));\n return stripped.charAt(RENAVAM_BASE_LENGTH) === expected;\n}\n\nfunction validateStructure(input: string, stripped: string): FailedResult | null {\n if (stripped.length === 0) {\n return failure('EMPTY_INPUT', 'RENAVAM input is empty');\n }\n\n const withoutMask = input.replace(/-/g, '');\n if (/[^0-9]/.test(withoutMask)) {\n return failure('INVALID_CHARACTER', 'RENAVAM contains invalid characters');\n }\n\n if (stripped.length !== RENAVAM_LENGTH) {\n return failure('INVALID_LENGTH', `RENAVAM must have ${RENAVAM_LENGTH} digits after normalization`);\n }\n\n if (hasRepeatedDigits(stripped)) {\n return failure('KNOWN_INVALID_PATTERN', 'RENAVAM with all identical digits is invalid');\n }\n\n return null;\n}\n\nexport function isValidRenavam(input: string): boolean {\n return validateRenavam(input).ok;\n}\n\nexport function validateRenavam(input: string): ValidationResult<Renavam> {\n const stripped = stripRenavam(input);\n const structural = validateStructure(input, stripped);\n if (structural) {\n return structural;\n }\n\n if (isValidRenavamChecksum(stripped)) {\n return { ok: true, value: brandRenavam(stripped), format: 'numeric' };\n }\n\n return failure('INVALID_CHECK_DIGIT', 'RENAVAM check digit is invalid');\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { validatePixKey, applyPixEvpKeyMask, applyPixEmailKeyMask, applyPixPhoneKeyMask, applyPixCnpjKeyMask, applyPixCpfKeyMask } from './chunk-
|
|
1
|
+
import { validatePixKey, applyPixEvpKeyMask, applyPixEmailKeyMask, applyPixPhoneKeyMask, applyPixCnpjKeyMask, applyPixCpfKeyMask } from './chunk-H3MLGGFI.js';
|
|
2
2
|
|
|
3
3
|
// src/format/pix.ts
|
|
4
4
|
function applyPixMask(keyType, value) {
|
|
@@ -24,5 +24,5 @@ function formatPixKey(input, options) {
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
export { formatPixKey };
|
|
27
|
-
//# sourceMappingURL=chunk-
|
|
28
|
-
//# sourceMappingURL=chunk-
|
|
27
|
+
//# sourceMappingURL=chunk-IYOPXJLY.js.map
|
|
28
|
+
//# sourceMappingURL=chunk-IYOPXJLY.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/format/pix.ts"],"names":[],"mappings":";;;AAgBA,SAAS,YAAA,CAAa,SAAqB,KAAA,EAAuB;AAChE,EAAA,QAAQ,OAAA;AAAS,IACf,KAAK,KAAA;AACH,MAAA,OAAO,mBAAmB,KAAK,CAAA;AAAA,IACjC,KAAK,MAAA;AACH,MAAA,OAAO,oBAAoB,KAAK,CAAA;AAAA,IAClC,KAAK,OAAA;AACH,MAAA,OAAO,qBAAqB,KAAK,CAAA;AAAA,IACnC,KAAK,OAAA;AACH,MAAA,OAAO,qBAAqB,KAAK,CAAA;AAAA,IACnC,KAAK,KAAA;AACH,MAAA,OAAO,mBAAmB,KAAK,CAAA;AAAA;AAErC;AAEO,SAAS,YAAA,CAAa,OAAe,OAAA,EAA+C;AACzF,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,KAAA,EAAO,OAAO,CAAA;AAC5C,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;AAEA,EAAA,OAAO,EAAE,IAAI,IAAA,EAAM,SAAA,EAAW,aAAa,MAAA,CAAO,OAAA,EAAS,MAAA,CAAO,KAAK,CAAA,EAAE;AAC3E","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/format/pix.ts"],"names":[],"mappings":";;;AAgBA,SAAS,YAAA,CAAa,SAAqB,KAAA,EAAuB;AAChE,EAAA,QAAQ,OAAA;AAAS,IACf,KAAK,KAAA;AACH,MAAA,OAAO,mBAAmB,KAAK,CAAA;AAAA,IACjC,KAAK,MAAA;AACH,MAAA,OAAO,oBAAoB,KAAK,CAAA;AAAA,IAClC,KAAK,OAAA;AACH,MAAA,OAAO,qBAAqB,KAAK,CAAA;AAAA,IACnC,KAAK,OAAA;AACH,MAAA,OAAO,qBAAqB,KAAK,CAAA;AAAA,IACnC,KAAK,KAAA;AACH,MAAA,OAAO,mBAAmB,KAAK,CAAA;AAAA;AAErC;AAEO,SAAS,YAAA,CAAa,OAAe,OAAA,EAA+C;AACzF,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,KAAA,EAAO,OAAO,CAAA;AAC5C,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;AAEA,EAAA,OAAO,EAAE,IAAI,IAAA,EAAM,SAAA,EAAW,aAAa,MAAA,CAAO,OAAA,EAAS,MAAA,CAAO,KAAK,CAAA,EAAE;AAC3E","file":"chunk-IYOPXJLY.js","sourcesContent":["/**\n * Format decorator — strip → validate → apply official mask (UC-003).\n * @see docs/use-cases/UC-003-format-document.md\n * @see docs/VALIDATION-RULES.md BR-GLOBAL-002\n */\nimport type { ValidatePixKeyOptions } from '../core/pix/index.js';\nimport { validatePixKey } from '../core/pix/index.js';\nimport {\n applyPixCnpjKeyMask,\n applyPixCpfKeyMask,\n applyPixEmailKeyMask,\n applyPixEvpKeyMask,\n applyPixPhoneKeyMask,\n} from '../core/pix/mask.js';\nimport type { FormatResult, PixKeyType } from '../types/validation-result.js';\n\nfunction applyPixMask(keyType: PixKeyType, value: string): string {\n switch (keyType) {\n case 'cpf':\n return applyPixCpfKeyMask(value);\n case 'cnpj':\n return applyPixCnpjKeyMask(value);\n case 'phone':\n return applyPixPhoneKeyMask(value);\n case 'email':\n return applyPixEmailKeyMask(value);\n case 'evp':\n return applyPixEvpKeyMask(value);\n }\n}\n\nexport function formatPixKey(input: string, options?: ValidatePixKeyOptions): FormatResult {\n const result = validatePixKey(input, options);\n if (!result.ok) {\n return { ok: false, code: result.code, message: result.message };\n }\n\n return { ok: true, formatted: applyPixMask(result.keyType, result.value) };\n}\n"]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { normalizeForPlatform } from './chunk-FOP5LO7W.js';
|
|
2
|
+
|
|
3
|
+
// src/platform/types.ts
|
|
4
|
+
var PLATFORM_DOCUMENT_TYPES = [
|
|
5
|
+
"cpf",
|
|
6
|
+
"cnpj",
|
|
7
|
+
"cep",
|
|
8
|
+
"placa",
|
|
9
|
+
"pis-pasep",
|
|
10
|
+
"telefone",
|
|
11
|
+
"cnh",
|
|
12
|
+
"renavam",
|
|
13
|
+
"titulo-eleitor",
|
|
14
|
+
"nfe-chave",
|
|
15
|
+
"boleto",
|
|
16
|
+
"cartao-credito",
|
|
17
|
+
"inscricao-estadual",
|
|
18
|
+
"inscricao-estadual-produtor-rural",
|
|
19
|
+
"pix",
|
|
20
|
+
"brcode"
|
|
21
|
+
];
|
|
22
|
+
function isPlatformDocumentType(type) {
|
|
23
|
+
return PLATFORM_DOCUMENT_TYPES.includes(type);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// src/compare/index.ts
|
|
27
|
+
function compare(a, b, type, options = {}) {
|
|
28
|
+
const left = normalizeForPlatform(a, type, options);
|
|
29
|
+
const right = normalizeForPlatform(b, type, options);
|
|
30
|
+
return { equal: left === right };
|
|
31
|
+
}
|
|
32
|
+
function compareRuntime(a, b, type, options = {}) {
|
|
33
|
+
if (!isPlatformDocumentType(type)) {
|
|
34
|
+
return { equal: false, code: "UNSUPPORTED_FORMAT", message: `Unknown document type: ${type}` };
|
|
35
|
+
}
|
|
36
|
+
return compare(a, b, type, options);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export { compare, compareRuntime };
|
|
40
|
+
//# sourceMappingURL=chunk-JCWQDTZB.js.map
|
|
41
|
+
//# sourceMappingURL=chunk-JCWQDTZB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/platform/types.ts","../src/compare/index.ts"],"names":[],"mappings":";;;AAKO,IAAM,uBAAA,GAA0B;AAAA,EACrC,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,gBAAA;AAAA,EACA,oBAAA;AAAA,EACA,mCAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA;AAMO,SAAS,uBAAuB,IAAA,EAA4C;AACjF,EAAA,OAAQ,uBAAA,CAA8C,SAAS,IAAI,CAAA;AACrE;;;AClBO,SAAS,QACd,CAAA,EACA,CAAA,EACA,IAAA,EACA,OAAA,GAA2B,EAAC,EACb;AACf,EAAA,MAAM,IAAA,GAAO,oBAAA,CAAqB,CAAA,EAAG,IAAA,EAAM,OAAO,CAAA;AAClD,EAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,CAAA,EAAG,IAAA,EAAM,OAAO,CAAA;AACnD,EAAA,OAAO,EAAE,KAAA,EAAO,IAAA,KAAS,KAAA,EAAM;AACjC;AAGO,SAAS,eACd,CAAA,EACA,CAAA,EACA,IAAA,EACA,OAAA,GAA2B,EAAC,EACmD;AAC/E,EAAA,IAAI,CAAC,sBAAA,CAAuB,IAAI,CAAA,EAAG;AACjC,IAAA,OAAO,EAAE,OAAO,KAAA,EAAO,IAAA,EAAM,sBAAsB,OAAA,EAAS,CAAA,uBAAA,EAA0B,IAAI,CAAA,CAAA,EAAG;AAAA,EAC/F;AACA,EAAA,OAAO,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,IAAA,EAAM,OAAO,CAAA;AACpC","file":"chunk-JCWQDTZB.js","sourcesContent":["import type { SanitizableDocumentType } from '../sanitize/index.js';\n\n/** Document types supported by compare, batch, and diff platform APIs. */\nexport type PlatformDocumentType = SanitizableDocumentType | 'pix' | 'brcode';\n\nexport const PLATFORM_DOCUMENT_TYPES = [\n 'cpf',\n 'cnpj',\n 'cep',\n 'placa',\n 'pis-pasep',\n 'telefone',\n 'cnh',\n 'renavam',\n 'titulo-eleitor',\n 'nfe-chave',\n 'boleto',\n 'cartao-credito',\n 'inscricao-estadual',\n 'inscricao-estadual-produtor-rural',\n 'pix',\n 'brcode',\n] as const satisfies readonly PlatformDocumentType[];\n\nexport type PlatformOptions = {\n uf?: import('../types/validation-result.js').UfCode;\n};\n\nexport function isPlatformDocumentType(type: string): type is PlatformDocumentType {\n return (PLATFORM_DOCUMENT_TYPES as readonly string[]).includes(type);\n}\n","/**\n * Unified equality check — normalizes via strip/validate canonical (BR-COMPARE-001).\n * @see docs/OFFICIAL-SOURCES.md\n */\nimport { normalizeForPlatform } from '../platform/normalize.js';\nimport { isPlatformDocumentType } from '../platform/types.js';\nimport type { PlatformDocumentType, PlatformOptions } from '../platform/types.js';\n\nexport type CompareResult = {\n equal: boolean;\n};\n\nexport function compare(\n a: string,\n b: string,\n type: PlatformDocumentType,\n options: PlatformOptions = {},\n): CompareResult {\n const left = normalizeForPlatform(a, type, options);\n const right = normalizeForPlatform(b, type, options);\n return { equal: left === right };\n}\n\n/** Runtime guard for dynamic callers (non-exhaustive type string). */\nexport function compareRuntime(\n a: string,\n b: string,\n type: string,\n options: PlatformOptions = {},\n): CompareResult | { equal: false; code: 'UNSUPPORTED_FORMAT'; message: string } {\n if (!isPlatformDocumentType(type)) {\n return { equal: false, code: 'UNSUPPORTED_FORMAT', message: `Unknown document type: ${type}` };\n }\n return compare(a, b, type, options);\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { validateNfeChave, NFE_CHAVE_NUMERIC_PATTERN } from './chunk-
|
|
1
|
+
import { validateNfeChave, NFE_CHAVE_NUMERIC_PATTERN } from './chunk-AO6UTQ4A.js';
|
|
2
2
|
|
|
3
3
|
// src/core/nfe-chave/mask.ts
|
|
4
4
|
function applyNfeChaveMask(canonical) {
|
|
@@ -22,5 +22,5 @@ function formatNfeChave(input) {
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
export { formatNfeChave };
|
|
25
|
-
//# sourceMappingURL=chunk-
|
|
26
|
-
//# sourceMappingURL=chunk-
|
|
25
|
+
//# sourceMappingURL=chunk-JKDU7QYP.js.map
|
|
26
|
+
//# sourceMappingURL=chunk-JKDU7QYP.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/nfe-chave/mask.ts","../src/format/nfe-chave.ts"],"names":[],"mappings":";;;AAMO,SAAS,kBAAkB,SAAA,EAA2B;AAC3D,EAAA,IAAI,CAAC,yBAAA,CAA0B,IAAA,CAAK,SAAS,CAAA,EAAG;AAC9C,IAAA,MAAM,IAAI,MAAM,sDAAsD,CAAA;AAAA,EACxE;AAEA,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,MAAA,EAAQ,KAAK,CAAA,EAAG;AAC5C,IAAA,MAAA,CAAO,KAAK,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,CAAA,GAAI,CAAC,CAAC,CAAA;AAAA,EACvC;AACA,EAAA,OAAO,MAAA,CAAO,KAAK,GAAG,CAAA;AACxB;;;ACZO,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,EAAA,EAAI,IAAA,EAAM,WAAW,iBAAA,CAAkB,MAAA,CAAO,KAAK,CAAA,EAAE;AAChE","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/core/nfe-chave/mask.ts","../src/format/nfe-chave.ts"],"names":[],"mappings":";;;AAMO,SAAS,kBAAkB,SAAA,EAA2B;AAC3D,EAAA,IAAI,CAAC,yBAAA,CAA0B,IAAA,CAAK,SAAS,CAAA,EAAG;AAC9C,IAAA,MAAM,IAAI,MAAM,sDAAsD,CAAA;AAAA,EACxE;AAEA,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,MAAA,EAAQ,KAAK,CAAA,EAAG;AAC5C,IAAA,MAAA,CAAO,KAAK,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,CAAA,GAAI,CAAC,CAAC,CAAA;AAAA,EACvC;AACA,EAAA,OAAO,MAAA,CAAO,KAAK,GAAG,CAAA;AACxB;;;ACZO,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,EAAA,EAAI,IAAA,EAAM,WAAW,iBAAA,CAAkB,MAAA,CAAO,KAAK,CAAA,EAAE;AAChE","file":"chunk-JKDU7QYP.js","sourcesContent":["import { NFE_CHAVE_NUMERIC_PATTERN } from './constants.js';\n\n/**\n * Display mask — 11 groups of 4 digits (BR-NFE-CHAVE-006).\n * @see http://moc.sped.fazenda.pr.gov.br/ — chave de acesso layout\n */\nexport function applyNfeChaveMask(canonical: string): string {\n if (!NFE_CHAVE_NUMERIC_PATTERN.test(canonical)) {\n throw new Error('NF-e chave must have exactly 44 digits to apply mask');\n }\n\n const groups: string[] = [];\n for (let i = 0; i < canonical.length; i += 4) {\n groups.push(canonical.slice(i, i + 4));\n }\n return groups.join(' ');\n}\n","import { applyNfeChaveMask } from '../core/nfe-chave/mask.js';\nimport { validateNfeChave } from '../core/nfe-chave/index.js';\nimport type { FormatResult } from '../types/validation-result.js';\n\nexport function formatNfeChave(input: string): FormatResult {\n const result = validateNfeChave(input);\n if (!result.ok) {\n return { ok: false, code: result.code, message: result.message };\n }\n return { ok: true, formatted: applyNfeChaveMask(result.value) };\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { computeCheckDigit } from './chunk-OTZHMJYE.js';
|
|
2
|
-
import { brandPisPasep } from './chunk-
|
|
2
|
+
import { brandPisPasep } from './chunk-NUQSMT4Y.js';
|
|
3
3
|
|
|
4
4
|
// src/strip/pis-pasep.ts
|
|
5
5
|
function stripPisPasep(input) {
|
|
@@ -69,5 +69,5 @@ function validatePisPasep(input) {
|
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
export { PIS_PASEP_BASE_LENGTH, PIS_PASEP_DV_WEIGHTS, PIS_PASEP_GOLDEN_PRIMARY, PIS_PASEP_GOLDEN_PRIMARY_MASKED, PIS_PASEP_GOLDEN_SECONDARY, PIS_PASEP_MASK_PATTERN, PIS_PASEP_OFFICIAL_SOURCE_URL, isValidPisPasep, stripPisPasep, validatePisPasep };
|
|
72
|
-
//# sourceMappingURL=chunk-
|
|
73
|
-
//# sourceMappingURL=chunk-
|
|
72
|
+
//# sourceMappingURL=chunk-JLCQ7MGC.js.map
|
|
73
|
+
//# sourceMappingURL=chunk-JLCQ7MGC.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/strip/pis-pasep.ts","../src/core/pis-pasep/constants.ts","../src/core/pis-pasep/index.ts"],"names":[],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/strip/pis-pasep.ts","../src/core/pis-pasep/constants.ts","../src/core/pis-pasep/index.ts"],"names":[],"mappings":";;;;AAIO,SAAS,cAAc,KAAA,EAAuB;AACnD,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAChC;;;ACCO,IAAM,oBAAA,GAAuB,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC;AAC1D,IAAM,gBAAA,GAAmB,EAAA;AACzB,IAAM,qBAAA,GAAwB;AAC9B,IAAM,sBAAA,GAAyB;AAE/B,IAAM,wBAAA,GAA2B;AACjC,IAAM,0BAAA,GAA6B;AACnC,IAAM,+BAAA,GAAkC;AACxC,IAAM,6BAAA,GACX;;;ACQF,SAAS,OAAA,CAAQ,MAA4B,OAAA,EAA+B;AAC1E,EAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,IAAA,EAAM,OAAA,EAAQ;AACpC;AAEA,SAAS,WAAW,IAAA,EAAsB;AACxC,EAAA,OAAO,OAAO,IAAI,CAAA;AACpB;AAEA,SAAS,kBAAkB,KAAA,EAAwB;AACjD,EAAA,MAAM,KAAA,GAAQ,MAAM,CAAC,CAAA;AACrB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,KAAA,EAAO;AACtB,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,wBAAwB,QAAA,EAA2B;AAC1D,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,qBAAqB,CAAA;AACpD,EAAA,MAAM,aAAa,MAAA,CAAO,iBAAA,CAAkB,IAAA,EAAM,oBAAA,EAAsB,UAAU,CAAC,CAAA;AACnF,EAAA,OAAO,QAAA,CAAS,MAAA,CAAO,qBAAqB,CAAA,KAAM,UAAA;AACpD;AAEA,SAAS,iBAAA,CAAkB,OAAe,QAAA,EAAuC;AAC/E,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,OAAO,OAAA,CAAQ,eAAe,0BAA0B,CAAA;AAAA,EAC1D;AAEA,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA;AAC7C,EAAA,IAAI,QAAA,CAAS,IAAA,CAAK,WAAW,CAAA,EAAG;AAC9B,IAAA,OAAO,OAAA,CAAQ,qBAAqB,uCAAuC,CAAA;AAAA,EAC7E;AAEA,EAAA,IAAI,QAAA,CAAS,WAAW,gBAAA,EAAkB;AACxC,IAAA,OAAO,OAAA,CAAQ,gBAAA,EAAkB,CAAA,oBAAA,EAAuB,gBAAgB,CAAA,2BAAA,CAA6B,CAAA;AAAA,EACvG;AAEA,EAAA,IAAI,iBAAA,CAAkB,QAAQ,CAAA,EAAG;AAC/B,IAAA,OAAO,OAAA,CAAQ,yBAAyB,gDAAgD,CAAA;AAAA,EAC1F;AAEA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,gBAAgB,KAAA,EAAwB;AACtD,EAAA,OAAO,gBAAA,CAAiB,KAAK,CAAA,CAAE,EAAA;AACjC;AAEO,SAAS,iBAAiB,KAAA,EAAiC;AAChE,EAAA,MAAM,QAAA,GAAW,cAAc,KAAK,CAAA;AACpC,EAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,KAAA,EAAO,QAAQ,CAAA;AACpD,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,OAAO,UAAA;AAAA,EACT;AAEA,EAAA,IAAI,uBAAA,CAAwB,QAAQ,CAAA,EAAG;AACrC,IAAA,OAAO,EAAE,IAAI,IAAA,EAAM,KAAA,EAAO,cAAc,QAAQ,CAAA,EAAG,QAAQ,SAAA,EAAU;AAAA,EACvE;AAEA,EAAA,OAAO,OAAA,CAAQ,uBAAuB,kCAAkC,CAAA;AAC1E","file":"chunk-JLCQ7MGC.js","sourcesContent":["/**\n * Strip PIS/PASEP mask — digits only (BR-PIS-002).\n * @see https://www.gov.br/previdencia/pt-br/outros/imagens/2015/07/rgrva_RegrasValidacao.pdf — RV_03\n */\nexport function stripPisPasep(input: string): string {\n return input.replace(/\\D/g, '');\n}\n","/**\n * PIS/PASEP/NIS/NIT constants — modulo 11 (CNIS unified registry).\n * @see https://www.gov.br/previdencia/pt-br/outros/imagens/2015/07/rgrva_RegrasValidacao.pdf — RV_03\n * @see docs/use-cases/UC-006-validate-pis-pasep.md — golden vector 10027230888\n *\n * PIS, PASEP, NIS, and NIT share the same 11-digit algorithm and check-digit weights.\n */\nexport const PIS_PASEP_DV_WEIGHTS = [3, 2, 9, 8, 7, 6, 5, 4, 3, 2] as const;\nexport const PIS_PASEP_LENGTH = 11;\nexport const PIS_PASEP_BASE_LENGTH = 10;\nexport const PIS_PASEP_MASK_PATTERN = /^(\\d{3})(\\d{5})(\\d{2})(\\d{1})$/;\n\nexport const PIS_PASEP_GOLDEN_PRIMARY = '10027230888';\nexport const PIS_PASEP_GOLDEN_SECONDARY = '12056456402';\nexport const PIS_PASEP_GOLDEN_PRIMARY_MASKED = '100.27230.88-8';\nexport const PIS_PASEP_OFFICIAL_SOURCE_URL =\n 'https://www.gov.br/previdencia/pt-br/outros/imagens/2015/07/rgrva_RegrasValidacao.pdf';\n","/**\n * PIS/PASEP validation — modulo 11 (CNIS unified registry).\n * @see https://www.gov.br/previdencia/pt-br/outros/imagens/2015/07/rgrva_RegrasValidacao.pdf — RV_03\n * @see docs/use-cases/UC-006-validate-pis-pasep.md — golden vector 10027230888\n */\nimport { stripPisPasep } from '../../strip/pis-pasep.js';\nimport type { ValidationResult } from '../../types/validation-result.js';\nimport { brandPisPasep } from '../../types/validation-result.js';\nimport { computeCheckDigit } from '../cnpj/modulo11.js';\nimport {\n PIS_PASEP_BASE_LENGTH,\n PIS_PASEP_DV_WEIGHTS,\n PIS_PASEP_LENGTH,\n} from './constants.js';\n\nexport {\n PIS_PASEP_GOLDEN_PRIMARY,\n PIS_PASEP_GOLDEN_PRIMARY_MASKED,\n PIS_PASEP_GOLDEN_SECONDARY,\n PIS_PASEP_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 isValidPisPasepChecksum(stripped: string): boolean {\n const base = stripped.slice(0, PIS_PASEP_BASE_LENGTH);\n const dvExpected = String(computeCheckDigit(base, PIS_PASEP_DV_WEIGHTS, digitValue));\n return stripped.charAt(PIS_PASEP_BASE_LENGTH) === dvExpected;\n}\n\nfunction validateStructure(input: string, stripped: string): FailedResult | null {\n if (stripped.length === 0) {\n return failure('EMPTY_INPUT', 'PIS/PASEP input is empty');\n }\n\n const withoutMask = input.replace(/[.-]/g, '');\n if (/[^0-9]/.test(withoutMask)) {\n return failure('INVALID_CHARACTER', 'PIS/PASEP contains invalid characters');\n }\n\n if (stripped.length !== PIS_PASEP_LENGTH) {\n return failure('INVALID_LENGTH', `PIS/PASEP must have ${PIS_PASEP_LENGTH} digits after normalization`);\n }\n\n if (hasRepeatedDigits(stripped)) {\n return failure('KNOWN_INVALID_PATTERN', 'PIS/PASEP with all identical digits is invalid');\n }\n\n return null;\n}\n\nexport function isValidPisPasep(input: string): boolean {\n return validatePisPasep(input).ok;\n}\n\nexport function validatePisPasep(input: string): ValidationResult {\n const stripped = stripPisPasep(input);\n const structural = validateStructure(input, stripped);\n if (structural) {\n return structural;\n }\n\n if (isValidPisPasepChecksum(stripped)) {\n return { ok: true, value: brandPisPasep(stripped), format: 'numeric' };\n }\n\n return failure('INVALID_CHECK_DIGIT', 'PIS/PASEP check digit is invalid');\n}\n"]}
|