@br-validators/core 0.12.0-alpha.1 → 0.12.0-alpha.2

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.
@@ -1,4 +1,4 @@
1
- import { validateCartaoCredito, applyCartaoCreditoMask } from './chunk-EPKHEW5V.js';
1
+ import { validateCartaoCredito, applyCartaoCreditoMask } from './chunk-AK5GVYQ5.js';
2
2
 
3
3
  // src/format/cartao-credito.ts
4
4
  function formatCartaoCredito(input) {
@@ -10,5 +10,5 @@ function formatCartaoCredito(input) {
10
10
  }
11
11
 
12
12
  export { formatCartaoCredito };
13
- //# sourceMappingURL=chunk-XKY2CV3G.js.map
14
- //# sourceMappingURL=chunk-XKY2CV3G.js.map
13
+ //# sourceMappingURL=chunk-XW5G2RAL.js.map
14
+ //# sourceMappingURL=chunk-XW5G2RAL.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/format/cartao-credito.ts"],"names":[],"mappings":";;;AAIO,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-XKY2CV3G.js","sourcesContent":["import { applyCartaoCreditoMask } from '../core/cartao-credito/mask.js';\nimport { validateCartaoCredito } from '../core/cartao-credito/index.js';\nimport type { FormatResult } from '../types/validation-result.js';\n\nexport function formatCartaoCredito(input: string): FormatResult {\n const result = validateCartaoCredito(input);\n if (!result.ok) {\n return { ok: false, code: result.code, message: result.message };\n }\n return { ok: true, formatted: applyCartaoCreditoMask(result.value) };\n}\n"]}
1
+ {"version":3,"sources":["../src/format/cartao-credito.ts"],"names":[],"mappings":";;;AAIO,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-XW5G2RAL.js","sourcesContent":["import { applyCartaoCreditoMask } from '../core/cartao-credito/mask.js';\nimport { validateCartaoCredito } from '../core/cartao-credito/index.js';\nimport type { FormatResult } from '../types/validation-result.js';\n\nexport function formatCartaoCredito(input: string): FormatResult {\n const result = validateCartaoCredito(input);\n if (!result.ok) {\n return { ok: false, code: result.code, message: result.message };\n }\n return { ok: true, formatted: applyCartaoCreditoMask(result.value) };\n}\n"]}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Credit card PAN constants — ISO/IEC 7812-1 Annex B (Luhn).
3
+ * @see https://www.iso.org/standard/70484.html
4
+ * @see docs/use-cases/UC-008-validate-cartao-credito.md
5
+ */
6
+ type CardBrand = 'visa' | 'mastercard' | 'amex' | 'elo' | 'hipercard' | 'unknown';
7
+ declare const CARTAO_PAN_MIN_LENGTH = 8;
8
+ declare const CARTAO_PAN_MAX_LENGTH = 19;
9
+ declare const CARTAO_GOLDEN_VISA = "4111111111111111";
10
+ declare const CARTAO_GOLDEN_MASTERCARD = "5555555555554444";
11
+ declare const CARTAO_GOLDEN_AMEX = "378282246310005";
12
+ declare const CARTAO_GOLDEN_LUHN_WALKTHROUGH = "79927398713";
13
+ declare const CARTAO_GOLDEN_VISA_MASKED = "4111 1111 1111 1111";
14
+ declare const CARTAO_GOLDEN_MIN_LENGTH = "12345674";
15
+ declare const CARTAO_OFFICIAL_SOURCE_URL = "https://www.iso.org/standard/70484.html";
16
+ declare const CARTAO_IEC_SOURCE_URL = "https://webstore.iec.ch/en/publication/59763";
17
+
18
+ export { CARTAO_GOLDEN_AMEX as C, CARTAO_GOLDEN_LUHN_WALKTHROUGH as a, CARTAO_GOLDEN_MASTERCARD as b, CARTAO_GOLDEN_MIN_LENGTH as c, CARTAO_GOLDEN_VISA as d, CARTAO_GOLDEN_VISA_MASKED as e, CARTAO_IEC_SOURCE_URL as f, CARTAO_OFFICIAL_SOURCE_URL as g, CARTAO_PAN_MAX_LENGTH as h, CARTAO_PAN_MIN_LENGTH as i, type CardBrand as j };
package/dist/detect.js CHANGED
@@ -1,6 +1,6 @@
1
- export { detect } from './chunk-OCYXNLHO.js';
2
- import './chunk-MLPXW7N2.js';
1
+ export { detect } from './chunk-JZNTCZMV.js';
3
2
  import './chunk-5UL3M7IU.js';
3
+ import './chunk-DJUANFIK.js';
4
4
  import './chunk-3QP6R46N.js';
5
5
  import './chunk-Y6IW2LMW.js';
6
6
  import './chunk-D36RM7OD.js';
@@ -9,7 +9,7 @@ import './chunk-WPL47PWJ.js';
9
9
  import './chunk-4W4OKLSZ.js';
10
10
  import './chunk-WCQUQ2WX.js';
11
11
  import './chunk-MK7OJUF5.js';
12
- import './chunk-EPKHEW5V.js';
12
+ import './chunk-AK5GVYQ5.js';
13
13
  import './chunk-2JJS46FM.js';
14
14
  import './chunk-US4OLTJ2.js';
15
15
  import './chunk-YYHS5WQN.js';
@@ -1,10 +1,24 @@
1
- type GeneratableDocumentType = 'cpf' | 'cnpj' | 'cep' | 'placa' | 'pis-pasep' | 'renavam' | 'cnh' | 'telefone' | 'cartao-credito';
1
+ import { j as CardBrand } from './constants-BqegsAc2.js';
2
+ import { U as UfCode } from './validation-result-BhQE-1_O.js';
3
+
4
+ /**
5
+ * Synthetic credit card PAN generation — Luhn + brand IIN prefixes (BR-GENERATE-001).
6
+ */
7
+
8
+ type GeneratableCardBrand = Exclude<CardBrand, 'unknown'>;
9
+ declare const GENERATABLE_CARD_BRANDS: readonly GeneratableCardBrand[];
10
+ declare function isGeneratableCardBrand(brand: string): brand is GeneratableCardBrand;
11
+
12
+ type GeneratableDocumentType = 'cpf' | 'cnpj' | 'cep' | 'placa' | 'pis-pasep' | 'renavam' | 'cnh' | 'telefone' | 'cartao-credito' | 'inscricao-estadual' | 'titulo-eleitor';
2
13
  type GenerateFormat = 'numeric' | 'alphanumeric' | 'legacy' | 'mercosul' | 'celular' | 'fixo';
3
14
  type GenerateOptions = {
4
15
  format?: GenerateFormat;
5
16
  masked?: boolean;
6
17
  seed?: number;
18
+ uf?: UfCode;
19
+ brand?: GeneratableCardBrand;
7
20
  };
21
+
8
22
  declare function generate(type: GeneratableDocumentType, options?: GenerateOptions): string;
9
23
 
10
- export { type GeneratableDocumentType, type GenerateFormat, type GenerateOptions, generate };
24
+ export { GENERATABLE_CARD_BRANDS, type GeneratableCardBrand, type GeneratableDocumentType, type GenerateFormat, type GenerateOptions, generate, isGeneratableCardBrand };
package/dist/generate.js CHANGED
@@ -1,18 +1,22 @@
1
- export { generate } from './chunk-LGD2JJBZ.js';
1
+ export { GENERATABLE_CARD_BRANDS, generate, isGeneratableCardBrand } from './chunk-Q7B5VOPW.js';
2
2
  import './chunk-CDGRHI7W.js';
3
3
  import './chunk-WLE2ENQA.js';
4
4
  import './chunk-G2Y63PIF.js';
5
+ import './chunk-KSLDM5AD.js';
5
6
  import './chunk-IQGRFAQV.js';
6
7
  import './chunk-G32U6YQ5.js';
7
- import './chunk-XKY2CV3G.js';
8
+ import './chunk-XW5G2RAL.js';
8
9
  import './chunk-ZAUZRIOU.js';
9
10
  import './chunk-6QJFMOIX.js';
10
11
  import './chunk-LYBFUKHR.js';
11
12
  import './chunk-NHLLC6WH.js';
12
13
  import './chunk-5UL3M7IU.js';
14
+ import './chunk-DJUANFIK.js';
15
+ import './chunk-3QP6R46N.js';
16
+ import './chunk-Y6IW2LMW.js';
13
17
  import './chunk-KH7DWOUA.js';
14
18
  import './chunk-WPL47PWJ.js';
15
- import './chunk-EPKHEW5V.js';
19
+ import './chunk-AK5GVYQ5.js';
16
20
  import './chunk-2JJS46FM.js';
17
21
  import './chunk-US4OLTJ2.js';
18
22
  import './chunk-YYHS5WQN.js';
package/dist/index.d.ts CHANGED
@@ -14,11 +14,12 @@ export { PLACA_GOLDEN_CONVERSION_FROM, PLACA_GOLDEN_CONVERSION_TO, PLACA_GOLDEN_
14
14
  export { PIS_PASEP_GOLDEN_PRIMARY, PIS_PASEP_GOLDEN_PRIMARY_MASKED, PIS_PASEP_GOLDEN_SECONDARY, PIS_PASEP_OFFICIAL_SOURCE_URL, formatPisPasep, isValidPisPasep, stripPisPasep, validatePisPasep } from './pis-pasep.js';
15
15
  export { BOLETO_CODE_ISPB_HOLDER, BOLETO_CODIGO_BARRAS_LENGTH, BOLETO_CURRENCY_ISPB, BOLETO_CURRENCY_REAL, BOLETO_GOLDEN_CODIGO_BARRAS, BOLETO_GOLDEN_CODIGO_BARRAS_BB, BOLETO_GOLDEN_CODIGO_BARRAS_SITUACAO2, BOLETO_GOLDEN_LINHA_BB_STRIPPED, BOLETO_GOLDEN_LINHA_MASKED, BOLETO_GOLDEN_LINHA_SITUACAO2_STRIPPED, BOLETO_GOLDEN_LINHA_STRIPPED, BOLETO_LAYOUTS_PORTAL_URL, BOLETO_LINHA_LENGTH, BOLETO_OFFICIAL_SOURCE_URL, BoletoSituacaoCode, BoletoSituacaoKind, DetectedBoletoInputKind, FatorVencimentoValidationResult, ValidateBoletoOptions, ValorDocumentoValidationResult, applyLinhaDigitavelMask, computeModulo10FieldDv, computeModulo11BarcodeDv, convertCodigoBarrasToLinhaDigitavel, convertCodigoBarrasToLinhaDigits, convertLinhaToCodigoBarras, convertLinhaToCodigoBarrasDigits, detectBoletoInputKind, detectBoletoSituacao, formatBoleto, formatLinhaDigitavel, isValidBoleto, stripCodigoBarras, stripLinhaDigitavel, validateBoleto, validateCodigoBarras, validateFatorVencimento, validateLinhaDigitavel, validateValorDocumento } from './boleto.js';
16
16
  export { D as DetectedPixKeyType, P as PIX_DICT_API_SOURCE_URL, a as PIX_GOLDEN_CNPJ_ALPHANUMERIC, b as PIX_GOLDEN_CNPJ_NUMERIC, c as PIX_GOLDEN_CPF, d as PIX_GOLDEN_EMAIL, e as PIX_GOLDEN_EVP, f as PIX_GOLDEN_PHONE, g as PIX_OFFICIAL_SOURCE_URL, V as ValidatePixKeyOptions, h as detectPixKeyType, i as formatPixKey, j as isValidPixKey, v as validatePixCnpjKey, k as validatePixCpfKey, l as validatePixEmailKey, m as validatePixEvpKey, n as validatePixKey, o as validatePixPhoneKey } from './pix-ddldLlb7.js';
17
- export { CARTAO_GOLDEN_AMEX, CARTAO_GOLDEN_LUHN_WALKTHROUGH, CARTAO_GOLDEN_MASTERCARD, CARTAO_GOLDEN_MIN_LENGTH, CARTAO_GOLDEN_VISA, CARTAO_GOLDEN_VISA_MASKED, CARTAO_IEC_SOURCE_URL, CARTAO_OFFICIAL_SOURCE_URL, CARTAO_PAN_MAX_LENGTH, CARTAO_PAN_MIN_LENGTH, CardBrand, computeLuhnSum, detectCardBrand, formatCartaoCredito, isValidCartaoCredito, isValidLuhn, passesLuhn, stripCartaoCredito, validateCartaoCredito } from './cartao-credito.js';
17
+ export { computeLuhnSum, detectCardBrand, formatCartaoCredito, isValidCartaoCredito, isValidLuhn, passesLuhn, stripCartaoCredito, validateCartaoCredito } from './cartao-credito.js';
18
18
  export { ValidateInscricaoEstadualOptions, formatInscricaoEstadual, getIeOfficialSourceUrl, isValidInscricaoEstadual, stripInscricaoEstadual, validateIeDf, validateIeMt, validateIeSp, validateInscricaoEstadual } from './inscricao-estadual.js';
19
19
  export { DetectOptions, DetectResult, DetectableDocumentType, detect } from './detect.js';
20
20
  export { S as SanitizableDocumentType, a as SanitizeOptions, b as SanitizeResult, s as sanitize } from './index-CZLo9YOT.js';
21
- export { GeneratableDocumentType, GenerateOptions, generate } from './generate.js';
21
+ export { GENERATABLE_CARD_BRANDS, GeneratableCardBrand, GeneratableDocumentType, GenerateOptions, generate, isGeneratableCardBrand } from './generate.js';
22
+ export { C as CARTAO_GOLDEN_AMEX, a as CARTAO_GOLDEN_LUHN_WALKTHROUGH, b as CARTAO_GOLDEN_MASTERCARD, c as CARTAO_GOLDEN_MIN_LENGTH, d as CARTAO_GOLDEN_VISA, e as CARTAO_GOLDEN_VISA_MASKED, f as CARTAO_IEC_SOURCE_URL, g as CARTAO_OFFICIAL_SOURCE_URL, h as CARTAO_PAN_MAX_LENGTH, i as CARTAO_PAN_MIN_LENGTH, j as CardBrand } from './constants-BqegsAc2.js';
22
23
 
23
24
  /**
24
25
  * Format decorator — union entrypoint (UC-003).
package/dist/index.js CHANGED
@@ -1,11 +1,12 @@
1
1
  import './chunk-G24G7WR5.js';
2
- export { sanitize } from './chunk-7ZL7PZII.js';
2
+ export { sanitize } from './chunk-CSZCIOGA.js';
3
3
  import './chunk-ZH4RJNG7.js';
4
- export { formatTituloEleitor } from './chunk-PB4RIS6G.js';
5
- export { generate } from './chunk-LGD2JJBZ.js';
4
+ import './chunk-7ULDLG4C.js';
5
+ export { GENERATABLE_CARD_BRANDS, generate, isGeneratableCardBrand } from './chunk-Q7B5VOPW.js';
6
6
  export { formatRenavam } from './chunk-CDGRHI7W.js';
7
7
  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_OFFICIAL_SOURCE_URL, RENAVAM_SENATRAN_CONSULTA_URL, isValidRenavam, validateRenavam } from './chunk-WLE2ENQA.js';
8
8
  export { formatTelefone } from './chunk-G2Y63PIF.js';
9
+ export { formatTituloEleitor } from './chunk-KSLDM5AD.js';
9
10
  import './chunk-MFNJTAUS.js';
10
11
  import './chunk-GVK6IMBF.js';
11
12
  import './chunk-QGMVUIDD.js';
@@ -23,8 +24,8 @@ import { formatBoleto } from './chunk-FXLVNCG3.js';
23
24
  export { formatBoleto } from './chunk-FXLVNCG3.js';
24
25
  import './chunk-RYGAK7PB.js';
25
26
  import './chunk-CQPM43VV.js';
26
- import { formatCartaoCredito } from './chunk-XKY2CV3G.js';
27
- export { formatCartaoCredito } from './chunk-XKY2CV3G.js';
27
+ import { formatCartaoCredito } from './chunk-XW5G2RAL.js';
28
+ export { formatCartaoCredito } from './chunk-XW5G2RAL.js';
28
29
  import './chunk-2CNYSY3Z.js';
29
30
  import { formatCep } from './chunk-ZAUZRIOU.js';
30
31
  export { formatCep } from './chunk-ZAUZRIOU.js';
@@ -36,9 +37,9 @@ export { formatCnpj, formatCnpjAlphanumeric, formatCnpjNumeric } from './chunk-L
36
37
  import './chunk-YGA5W54J.js';
37
38
  import { formatCpf } from './chunk-NHLLC6WH.js';
38
39
  export { formatCpf } from './chunk-NHLLC6WH.js';
39
- export { detect } from './chunk-OCYXNLHO.js';
40
- export { TITULO_ELEITOR_ALGORITHM_REF_URL, TITULO_ELEITOR_ALGORITHM_WEIGHTS_REF_URL, TITULO_ELEITOR_DV1_WEIGHTS_8, TITULO_ELEITOR_DV1_WEIGHTS_9, TITULO_ELEITOR_DV2_WEIGHTS, TITULO_ELEITOR_ETITULO_URL, TITULO_ELEITOR_EXTERIOR_UF_CODE, TITULO_ELEITOR_GOLDEN_EXTERIOR, TITULO_ELEITOR_GOLDEN_MASKED_INPUT, TITULO_ELEITOR_GOLDEN_PRIMARY, TITULO_ELEITOR_GOLDEN_SP_EXTENDED, TITULO_ELEITOR_GOLDEN_SP_SPECIAL, TITULO_ELEITOR_LENGTH, TITULO_ELEITOR_LENGTH_EXTENDED, TITULO_ELEITOR_NORMATIVE_SECONDARY_URL, TITULO_ELEITOR_NUMERIC_PATTERN_12, TITULO_ELEITOR_NUMERIC_PATTERN_13, TITULO_ELEITOR_OFFICIAL_SOURCE_URL, TITULO_ELEITOR_SEQUENTIAL_LENGTH, TITULO_ELEITOR_SEQUENTIAL_LENGTH_EXTENDED, TITULO_ELEITOR_SPECIAL_UF_CODES, TITULO_ELEITOR_TSE_PORTAL_URL, TITULO_ELEITOR_UF_BY_CODE, isValidTituloEleitor, validateTituloEleitor } from './chunk-MLPXW7N2.js';
40
+ export { detect } from './chunk-JZNTCZMV.js';
41
41
  export { ANATEL_DDDS, ANATEL_DDD_SET, TELEFONE_ANATEL_DDD_PANEL_URL, TELEFONE_GOLDEN_CELULAR, TELEFONE_GOLDEN_CELULAR_MASKED, TELEFONE_GOLDEN_FIXO, TELEFONE_GOLDEN_FIXO_MASKED, TELEFONE_OFFICIAL_SOURCE_URL, extractTelefoneDigits, isValidTelefone, normalizeTelefoneDigits, stripTelefone, validateTelefone } from './chunk-5UL3M7IU.js';
42
+ export { TITULO_ELEITOR_ALGORITHM_REF_URL, TITULO_ELEITOR_ALGORITHM_WEIGHTS_REF_URL, TITULO_ELEITOR_DV1_WEIGHTS_8, TITULO_ELEITOR_DV1_WEIGHTS_9, TITULO_ELEITOR_DV2_WEIGHTS, TITULO_ELEITOR_ETITULO_URL, TITULO_ELEITOR_EXTERIOR_UF_CODE, TITULO_ELEITOR_GOLDEN_EXTERIOR, TITULO_ELEITOR_GOLDEN_MASKED_INPUT, TITULO_ELEITOR_GOLDEN_PRIMARY, TITULO_ELEITOR_GOLDEN_SP_EXTENDED, TITULO_ELEITOR_GOLDEN_SP_SPECIAL, TITULO_ELEITOR_LENGTH, TITULO_ELEITOR_LENGTH_EXTENDED, TITULO_ELEITOR_NORMATIVE_SECONDARY_URL, TITULO_ELEITOR_NUMERIC_PATTERN_12, TITULO_ELEITOR_NUMERIC_PATTERN_13, TITULO_ELEITOR_OFFICIAL_SOURCE_URL, TITULO_ELEITOR_SEQUENTIAL_LENGTH, TITULO_ELEITOR_SEQUENTIAL_LENGTH_EXTENDED, TITULO_ELEITOR_SPECIAL_UF_CODES, TITULO_ELEITOR_TSE_PORTAL_URL, TITULO_ELEITOR_UF_BY_CODE, isValidTituloEleitor, validateTituloEleitor } from './chunk-DJUANFIK.js';
42
43
  export { formatInscricaoEstadual, getIeOfficialSourceUrl, isValidInscricaoEstadual, stripInscricaoEstadual, validateIeDf, validateIeMt, validateIeSp, validateInscricaoEstadual } from './chunk-3QP6R46N.js';
43
44
  export { IE_DF_GOLDEN, IE_DF_GOLDEN_MASKED, IE_DF_OFFICIAL_SOURCE_URL, IE_MT_GOLDEN_CANONICAL, IE_MT_GOLDEN_LEGACY, IE_MT_OFFICIAL_SOURCE_URL, IE_OFFICIAL_SOURCE_URLS, IE_SP_GOLDEN, IE_SP_GOLDEN_MASKED, IE_SP_OFFICIAL_SOURCE_URL, IE_SP_RURAL_GOLDEN, IE_SP_RURAL_GOLDEN_MASKED, IE_SP_RURAL_LENGTH, IE_SP_RURAL_OFFICIAL_SOURCE_URL, IE_SUPPORTED_UFS, getIeProdutorRuralOfficialSourceUrl, isSpRuralIeInput, isValidIeProdutorRural, stripIeSpRural, stripIeSpRural as stripInscricaoEstadualProdutorRural, validateIeProdutorRural, validateIeSpRural } from './chunk-Y6IW2LMW.js';
44
45
  export { NFE_CHAVE_BASE_LENGTH, NFE_CHAVE_DFE_PORTAL_URL, NFE_CHAVE_GOLDEN_PRIMARY, NFE_CHAVE_GOLDEN_SECONDARY, NFE_CHAVE_LENGTH, NFE_CHAVE_MOC_DV_SECTION_URL, NFE_CHAVE_MOC_ONLINE_URL, NFE_CHAVE_MOC_PDF_URL, NFE_CHAVE_MOD, NFE_CHAVE_NFCE_QR_ILLUSTRATIVE, NFE_CHAVE_NFCE_QR_ILLUSTRATIVE_URL, NFE_CHAVE_NUMERIC_PATTERN, NFE_CHAVE_OFFICIAL_SOURCE_URL, NFE_CHAVE_WEIGHT_CYCLE, NFE_IBGE_UF_BY_CODE, NFE_IBGE_UF_CODES, NFE_MODELOS, NFE_MODELO_NFCE, NFE_MODELO_NFE, computeNfeChaveCheckDigit, computeNfeChaveWeightedSum, isValidNfeChave, isValidNfeChaveCheckDigit, parseNfeChave, parseNfeChaveParts, resolveNfeChaveCheckDigit, validateNfeChave } from './chunk-D36RM7OD.js';
@@ -47,7 +48,7 @@ export { PLACA_GOLDEN_CONVERSION_FROM, PLACA_GOLDEN_CONVERSION_TO, PLACA_GOLDEN_
47
48
  export { BOLETO_CODE_ISPB_HOLDER, BOLETO_CODIGO_BARRAS_LENGTH, BOLETO_CURRENCY_ISPB, BOLETO_CURRENCY_REAL, BOLETO_GOLDEN_CODIGO_BARRAS, BOLETO_GOLDEN_CODIGO_BARRAS_BB, BOLETO_GOLDEN_CODIGO_BARRAS_SITUACAO2, BOLETO_GOLDEN_LINHA_BB_STRIPPED, BOLETO_GOLDEN_LINHA_MASKED, BOLETO_GOLDEN_LINHA_SITUACAO2_STRIPPED, BOLETO_GOLDEN_LINHA_STRIPPED, BOLETO_LAYOUTS_PORTAL_URL, BOLETO_LINHA_LENGTH, BOLETO_OFFICIAL_SOURCE_URL, applyLinhaDigitavelMask, computeModulo10FieldDv, computeModulo11BarcodeDv, convertCodigoBarrasToLinhaDigitavel, convertCodigoBarrasToLinhaDigits, convertLinhaToCodigoBarras, convertLinhaToCodigoBarrasDigits, detectBoletoInputKind, detectBoletoSituacao, formatLinhaDigitavel, isValidBoleto, stripCodigoBarras, stripLinhaDigitavel, validateBoleto, validateCodigoBarras, validateFatorVencimento, validateLinhaDigitavel, validateValorDocumento } from './chunk-4W4OKLSZ.js';
48
49
  export { BRCODE_GOLDEN_COMPOSITE, BRCODE_GOLDEN_DYNAMIC_URL, BRCODE_GOLDEN_STATIC_CPF, BRCODE_GOLDEN_STATIC_EMAIL, BRCODE_GOLDEN_STATIC_EVP, BRCODE_OFFICIAL_SOURCE_URL, BRCODE_PIX_INITIATION_MANUAL_URL, computeCrc16Ccitt, findPixMerchantAccount, findTlvField, isValidBrCode, normalizeBrCodePayload, parseBrCode, parseBrCodePayload, parseTlvSequence, validateBrCode, verifyBrCodeCrc } from './chunk-WCQUQ2WX.js';
49
50
  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, detectPixKeyType, isValidPixKey, validatePixCnpjKey, validatePixCpfKey, validatePixEmailKey, validatePixEvpKey, validatePixKey, validatePixPhoneKey } from './chunk-MK7OJUF5.js';
50
- export { CARTAO_GOLDEN_AMEX, CARTAO_GOLDEN_LUHN_WALKTHROUGH, CARTAO_GOLDEN_MASTERCARD, CARTAO_GOLDEN_MIN_LENGTH, CARTAO_GOLDEN_VISA, CARTAO_GOLDEN_VISA_MASKED, CARTAO_IEC_SOURCE_URL, CARTAO_OFFICIAL_SOURCE_URL, CARTAO_PAN_MAX_LENGTH, CARTAO_PAN_MIN_LENGTH, computeLuhnSum, detectCardBrand, isValidCartaoCredito, isValidLuhn, passesLuhn, stripCartaoCredito, validateCartaoCredito } from './chunk-EPKHEW5V.js';
51
+ export { CARTAO_GOLDEN_AMEX, CARTAO_GOLDEN_LUHN_WALKTHROUGH, CARTAO_GOLDEN_MASTERCARD, CARTAO_GOLDEN_MIN_LENGTH, CARTAO_GOLDEN_VISA, CARTAO_GOLDEN_VISA_MASKED, CARTAO_IEC_SOURCE_URL, CARTAO_OFFICIAL_SOURCE_URL, CARTAO_PAN_MAX_LENGTH, CARTAO_PAN_MIN_LENGTH, computeLuhnSum, detectCardBrand, isValidCartaoCredito, isValidLuhn, passesLuhn, stripCartaoCredito, validateCartaoCredito } from './chunk-AK5GVYQ5.js';
51
52
  export { CEP_GOLDEN_PRIMARY, CEP_GOLDEN_PRIMARY_MASKED, CEP_GOLDEN_SECONDARY, CEP_OFFICIAL_SOURCE_URL, isValidCep, validateCep } from './chunk-2JJS46FM.js';
52
53
  export { CNH_BASE_LENGTH, CNH_DV1_WEIGHTS, CNH_DV2_WEIGHTS, CNH_GOLDEN_DISCOUNT_CASE, CNH_GOLDEN_PRIMARY, CNH_GOLDEN_PRIMARY_DECORATED_INPUT, CNH_GOLDEN_SECONDARY, CNH_LENGTH, CNH_OFFICIAL_SOURCE_URL, CNH_SENATRAN_VALIDAR_URL, isValidCnh, validateCnh } from './chunk-US4OLTJ2.js';
53
54
  export { stripCep, stripCnh, stripPlaca, stripRenavam, stripTituloEleitor } from './chunk-YYHS5WQN.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/format/document.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBO,IAAM,0BAAA,GAA6B;AAAA,EACxC,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF;AAEO,SAAS,0BAA0B,IAAA,EAA+C;AACvF,EAAA,OAAQ,0BAAA,CAAiD,SAAS,IAAI,CAAA;AACxE;AAEO,SAAS,cAAA,CAAe,MAA+B,KAAA,EAA6B;AACzF,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,KAAA;AACH,MAAA,OAAO,UAAU,KAAK,CAAA;AAAA,IACxB,KAAK,MAAA;AACH,MAAA,OAAO,WAAW,KAAK,CAAA;AAAA,IACzB,KAAK,KAAA;AACH,MAAA,OAAO,UAAU,KAAK,CAAA;AAAA,IACxB,KAAK,OAAA;AACH,MAAA,OAAO,YAAY,KAAK,CAAA;AAAA,IAC1B,KAAK,WAAA;AACH,MAAA,OAAO,eAAe,KAAK,CAAA;AAAA,IAC7B,KAAK,KAAA;AACH,MAAA,OAAO,aAAa,KAAK,CAAA;AAAA,IAC3B,KAAK,QAAA;AACH,MAAA,OAAO,aAAa,KAAK,CAAA;AAAA,IAC3B,KAAK,gBAAA;AACH,MAAA,OAAO,oBAAoB,KAAK,CAAA;AAAA;AAEtC;AAGO,SAAS,qBAAA,CAAsB,MAAc,KAAA,EAA6B;AAC/E,EAAA,IAAI,CAAC,yBAAA,CAA0B,IAAI,CAAA,EAAG;AACpC,IAAA,OAAO,EAAE,IAAI,KAAA,EAAO,IAAA,EAAM,sBAAsB,OAAA,EAAS,CAAA,uBAAA,EAA0B,IAAI,CAAA,CAAA,EAAG;AAAA,EAC5F;AACA,EAAA,OAAO,cAAA,CAAe,MAAM,KAAK,CAAA;AACnC","file":"index.js","sourcesContent":["/**\n * Format decorator — union entrypoint (UC-003).\n * @see docs/use-cases/UC-003-format-document.md\n */\nimport type { FormatResult } from '../types/validation-result.js';\nimport { formatBoleto } from './boleto.js';\nimport { formatCartaoCredito } from './cartao-credito.js';\nimport { formatCep } from './cep.js';\nimport { formatCnpj } from './cnpj.js';\nimport { formatCpf } from './cpf.js';\nimport { formatPisPasep } from './pis-pasep.js';\nimport { formatPixKey } from './pix.js';\nimport { formatPlaca } from './placa.js';\n\nexport type FormattableDocumentType =\n | 'cpf'\n | 'cnpj'\n | 'cep'\n | 'placa'\n | 'pis-pasep'\n | 'pix'\n | 'boleto'\n | 'cartao-credito';\n\nexport const FORMATTABLE_DOCUMENT_TYPES = [\n 'cpf',\n 'cnpj',\n 'cep',\n 'placa',\n 'pis-pasep',\n 'pix',\n 'boleto',\n 'cartao-credito',\n] as const satisfies readonly FormattableDocumentType[];\n\nexport function isFormattableDocumentType(type: string): type is FormattableDocumentType {\n return (FORMATTABLE_DOCUMENT_TYPES as readonly string[]).includes(type);\n}\n\nexport function formatDocument(type: FormattableDocumentType, input: string): FormatResult {\n switch (type) {\n case 'cpf':\n return formatCpf(input);\n case 'cnpj':\n return formatCnpj(input);\n case 'cep':\n return formatCep(input);\n case 'placa':\n return formatPlaca(input);\n case 'pis-pasep':\n return formatPisPasep(input);\n case 'pix':\n return formatPixKey(input);\n case 'boleto':\n return formatBoleto(input);\n case 'cartao-credito':\n return formatCartaoCredito(input);\n }\n}\n\n/** Runtime guard for dynamic callers (non-exhaustive type string). */\nexport function formatDocumentRuntime(type: string, input: string): FormatResult {\n if (!isFormattableDocumentType(type)) {\n return { ok: false, code: 'UNSUPPORTED_FORMAT', message: `Unknown document type: ${type}` };\n }\n return formatDocument(type, input);\n}\n"]}
1
+ {"version":3,"sources":["../src/format/document.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBO,IAAM,0BAAA,GAA6B;AAAA,EACxC,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF;AAEO,SAAS,0BAA0B,IAAA,EAA+C;AACvF,EAAA,OAAQ,0BAAA,CAAiD,SAAS,IAAI,CAAA;AACxE;AAEO,SAAS,cAAA,CAAe,MAA+B,KAAA,EAA6B;AACzF,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,KAAA;AACH,MAAA,OAAO,UAAU,KAAK,CAAA;AAAA,IACxB,KAAK,MAAA;AACH,MAAA,OAAO,WAAW,KAAK,CAAA;AAAA,IACzB,KAAK,KAAA;AACH,MAAA,OAAO,UAAU,KAAK,CAAA;AAAA,IACxB,KAAK,OAAA;AACH,MAAA,OAAO,YAAY,KAAK,CAAA;AAAA,IAC1B,KAAK,WAAA;AACH,MAAA,OAAO,eAAe,KAAK,CAAA;AAAA,IAC7B,KAAK,KAAA;AACH,MAAA,OAAO,aAAa,KAAK,CAAA;AAAA,IAC3B,KAAK,QAAA;AACH,MAAA,OAAO,aAAa,KAAK,CAAA;AAAA,IAC3B,KAAK,gBAAA;AACH,MAAA,OAAO,oBAAoB,KAAK,CAAA;AAAA;AAEtC;AAGO,SAAS,qBAAA,CAAsB,MAAc,KAAA,EAA6B;AAC/E,EAAA,IAAI,CAAC,yBAAA,CAA0B,IAAI,CAAA,EAAG;AACpC,IAAA,OAAO,EAAE,IAAI,KAAA,EAAO,IAAA,EAAM,sBAAsB,OAAA,EAAS,CAAA,uBAAA,EAA0B,IAAI,CAAA,CAAA,EAAG;AAAA,EAC5F;AACA,EAAA,OAAO,cAAA,CAAe,MAAM,KAAK,CAAA;AACnC","file":"index.js","sourcesContent":["/**\n * Format decorator — union entrypoint (UC-003).\n * @see docs/use-cases/UC-003-format-document.md\n */\nimport type { FormatResult } from '../types/validation-result.js';\nimport { formatBoleto } from './boleto.js';\nimport { formatCartaoCredito } from './cartao-credito.js';\nimport { formatCep } from './cep.js';\nimport { formatCnpj } from './cnpj.js';\nimport { formatCpf } from './cpf.js';\nimport { formatPisPasep } from './pis-pasep.js';\nimport { formatPixKey } from './pix.js';\nimport { formatPlaca } from './placa.js';\n\nexport type FormattableDocumentType =\n | 'cpf'\n | 'cnpj'\n | 'cep'\n | 'placa'\n | 'pis-pasep'\n | 'pix'\n | 'boleto'\n | 'cartao-credito';\n\nexport const FORMATTABLE_DOCUMENT_TYPES = [\n 'cpf',\n 'cnpj',\n 'cep',\n 'placa',\n 'pis-pasep',\n 'pix',\n 'boleto',\n 'cartao-credito',\n] as const satisfies readonly FormattableDocumentType[];\n\nexport function isFormattableDocumentType(type: string): type is FormattableDocumentType {\n return (FORMATTABLE_DOCUMENT_TYPES as readonly string[]).includes(type);\n}\n\nexport function formatDocument(type: FormattableDocumentType, input: string): FormatResult {\n switch (type) {\n case 'cpf':\n return formatCpf(input);\n case 'cnpj':\n return formatCnpj(input);\n case 'cep':\n return formatCep(input);\n case 'placa':\n return formatPlaca(input);\n case 'pis-pasep':\n return formatPisPasep(input);\n case 'pix':\n return formatPixKey(input);\n case 'boleto':\n return formatBoleto(input);\n case 'cartao-credito':\n return formatCartaoCredito(input);\n }\n}\n\n/** Runtime guard for dynamic callers (non-exhaustive type string). */\nexport function formatDocumentRuntime(type: string, input: string): FormatResult {\n if (!isFormattableDocumentType(type)) {\n return { ok: false, code: 'UNSUPPORTED_FORMAT', message: `Unknown document type: ${type}` };\n }\n return formatDocument(type, input);\n}\n"]}
package/dist/sanitize.js CHANGED
@@ -1,15 +1,15 @@
1
- export { sanitize } from './chunk-7ZL7PZII.js';
1
+ export { sanitize } from './chunk-CSZCIOGA.js';
2
2
  import './chunk-WLE2ENQA.js';
3
3
  import './chunk-GVK6IMBF.js';
4
- import './chunk-MLPXW7N2.js';
5
4
  import './chunk-5UL3M7IU.js';
5
+ import './chunk-DJUANFIK.js';
6
6
  import './chunk-3QP6R46N.js';
7
7
  import './chunk-Y6IW2LMW.js';
8
8
  import './chunk-D36RM7OD.js';
9
9
  import './chunk-KH7DWOUA.js';
10
10
  import './chunk-WPL47PWJ.js';
11
11
  import './chunk-4W4OKLSZ.js';
12
- import './chunk-EPKHEW5V.js';
12
+ import './chunk-AK5GVYQ5.js';
13
13
  import './chunk-2JJS46FM.js';
14
14
  import './chunk-US4OLTJ2.js';
15
15
  import './chunk-YYHS5WQN.js';
@@ -1,5 +1,6 @@
1
- export { formatTituloEleitor } from './chunk-PB4RIS6G.js';
2
- export { TITULO_ELEITOR_ALGORITHM_REF_URL, TITULO_ELEITOR_ALGORITHM_WEIGHTS_REF_URL, TITULO_ELEITOR_DV1_WEIGHTS_8, TITULO_ELEITOR_DV1_WEIGHTS_9, TITULO_ELEITOR_DV2_WEIGHTS, TITULO_ELEITOR_ETITULO_URL, TITULO_ELEITOR_EXTERIOR_UF_CODE, TITULO_ELEITOR_GOLDEN_EXTERIOR, TITULO_ELEITOR_GOLDEN_MASKED_INPUT, TITULO_ELEITOR_GOLDEN_PRIMARY, TITULO_ELEITOR_GOLDEN_SP_EXTENDED, TITULO_ELEITOR_GOLDEN_SP_SPECIAL, TITULO_ELEITOR_LENGTH, TITULO_ELEITOR_LENGTH_EXTENDED, TITULO_ELEITOR_NORMATIVE_SECONDARY_URL, TITULO_ELEITOR_NUMERIC_PATTERN_12, TITULO_ELEITOR_NUMERIC_PATTERN_13, TITULO_ELEITOR_OFFICIAL_SOURCE_URL, TITULO_ELEITOR_SEQUENTIAL_LENGTH, TITULO_ELEITOR_SEQUENTIAL_LENGTH_EXTENDED, TITULO_ELEITOR_SPECIAL_UF_CODES, TITULO_ELEITOR_TSE_PORTAL_URL, TITULO_ELEITOR_UF_BY_CODE, isValidTituloEleitor, validateTituloEleitor } from './chunk-MLPXW7N2.js';
1
+ import './chunk-7ULDLG4C.js';
2
+ export { formatTituloEleitor } from './chunk-KSLDM5AD.js';
3
+ export { TITULO_ELEITOR_ALGORITHM_REF_URL, TITULO_ELEITOR_ALGORITHM_WEIGHTS_REF_URL, TITULO_ELEITOR_DV1_WEIGHTS_8, TITULO_ELEITOR_DV1_WEIGHTS_9, TITULO_ELEITOR_DV2_WEIGHTS, TITULO_ELEITOR_ETITULO_URL, TITULO_ELEITOR_EXTERIOR_UF_CODE, TITULO_ELEITOR_GOLDEN_EXTERIOR, TITULO_ELEITOR_GOLDEN_MASKED_INPUT, TITULO_ELEITOR_GOLDEN_PRIMARY, TITULO_ELEITOR_GOLDEN_SP_EXTENDED, TITULO_ELEITOR_GOLDEN_SP_SPECIAL, TITULO_ELEITOR_LENGTH, TITULO_ELEITOR_LENGTH_EXTENDED, TITULO_ELEITOR_NORMATIVE_SECONDARY_URL, TITULO_ELEITOR_NUMERIC_PATTERN_12, TITULO_ELEITOR_NUMERIC_PATTERN_13, TITULO_ELEITOR_OFFICIAL_SOURCE_URL, TITULO_ELEITOR_SEQUENTIAL_LENGTH, TITULO_ELEITOR_SEQUENTIAL_LENGTH_EXTENDED, TITULO_ELEITOR_SPECIAL_UF_CODES, TITULO_ELEITOR_TSE_PORTAL_URL, TITULO_ELEITOR_UF_BY_CODE, isValidTituloEleitor, validateTituloEleitor } from './chunk-DJUANFIK.js';
3
4
  export { stripTituloEleitor } from './chunk-YYHS5WQN.js';
4
5
  import './chunk-4SNBZFS5.js';
5
6
  import './chunk-EB3G4IG6.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@br-validators/core",
3
- "version": "0.12.0-alpha.1",
3
+ "version": "0.12.0-alpha.2",
4
4
  "description": "Brazilian document validators (MIT) — CPF, CNPJ, CEP, CNH, RENAVAM, NF-e chave, IE (27 UFs), PIX, boleto, BR Code + detect/sanitize/generate platform APIs",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/strip/cartao-credito.ts","../src/core/cartao-credito/constants.ts","../src/core/cartao-credito/detect-brand.ts","../src/core/cartao-credito/luhn.ts","../src/core/cartao-credito/mask.ts","../src/core/cartao-credito/index.ts"],"names":[],"mappings":"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","file":"chunk-EPKHEW5V.js","sourcesContent":["/**\n * Strip credit card PAN mask — digits only (BR-LUHN-001).\n * @see https://www.iso.org/standard/70484.html\n */\nexport function stripCartaoCredito(input: string): string {\n return input.replace(/\\D/g, '');\n}\n","/**\n * Credit card PAN constants — ISO/IEC 7812-1 Annex B (Luhn).\n * @see https://www.iso.org/standard/70484.html\n * @see docs/use-cases/UC-008-validate-cartao-credito.md\n */\nexport type CardBrand = 'visa' | 'mastercard' | 'amex' | 'elo' | 'hipercard' | 'unknown';\n\nexport const CARTAO_PAN_MIN_LENGTH = 8;\nexport const CARTAO_PAN_MAX_LENGTH = 19;\n\nexport const CARTAO_GOLDEN_VISA = '4111111111111111';\nexport const CARTAO_GOLDEN_MASTERCARD = '5555555555554444';\nexport const CARTAO_GOLDEN_AMEX = '378282246310005';\nexport const CARTAO_GOLDEN_LUHN_WALKTHROUGH = '79927398713';\nexport const CARTAO_GOLDEN_VISA_MASKED = '4111 1111 1111 1111';\nexport const CARTAO_GOLDEN_MIN_LENGTH = '12345674';\n\nexport const CARTAO_OFFICIAL_SOURCE_URL = 'https://www.iso.org/standard/70484.html';\nexport const CARTAO_IEC_SOURCE_URL = 'https://webstore.iec.ch/en/publication/59763';\n\n/** Best-effort IIN prefixes — longest match first (BR-LUHN-005, non-authoritative). */\nexport const ELO_IIN_PREFIXES = [\n '401178',\n '401179',\n '431274',\n '438935',\n '451416',\n '457393',\n '457631',\n '457632',\n '504175',\n '506699',\n '506770',\n '509048',\n '509049',\n '627780',\n '636297',\n '636368',\n '650031',\n '650032',\n '650033',\n '650035',\n '650051',\n '650405',\n '650439',\n '650485',\n '650486',\n '650487',\n '650488',\n '650489',\n '650490',\n '650491',\n '650492',\n '650493',\n '650494',\n '650495',\n '650496',\n '650497',\n '650498',\n '650499',\n '651652',\n '651653',\n '651654',\n '651655',\n '651656',\n '651657',\n '651658',\n '651659',\n '651660',\n '655000',\n '655001',\n] as const;\n\nexport const HIPERCARD_IIN_PREFIXES = ['606282', '384100'] as const;\n","/**\n * Best-effort card brand from IIN prefix — non-authoritative (BR-LUHN-005).\n */\nimport type { CardBrand } from './constants.js';\nimport { ELO_IIN_PREFIXES, HIPERCARD_IIN_PREFIXES } from './constants.js';\n\nexport type { CardBrand };\n\nexport function detectCardBrand(strippedPan: string): CardBrand {\n for (const prefix of ELO_IIN_PREFIXES) {\n if (strippedPan.startsWith(prefix)) {\n return 'elo';\n }\n }\n\n for (const prefix of HIPERCARD_IIN_PREFIXES) {\n if (strippedPan.startsWith(prefix)) {\n return 'hipercard';\n }\n }\n\n if (/^3[47]/.test(strippedPan)) {\n return 'amex';\n }\n\n if (/^5[1-5]/.test(strippedPan) || /^2[2-7]/.test(strippedPan)) {\n return 'mastercard';\n }\n\n if (strippedPan.startsWith('4')) {\n return 'visa';\n }\n\n return 'unknown';\n}\n","/**\n * Luhn checksum — ISO/IEC 7812-1 Annex B (modulus-10 double-add-double).\n * @see BR-LUHN-003\n */\n\nexport function computeLuhnSum(pan: string): number {\n let sum = 0;\n let double = false;\n for (let i = pan.length - 1; i >= 0; i--) {\n let digit = Number(pan.charAt(i));\n if (double) {\n digit *= 2;\n if (digit > 9) {\n digit -= 9;\n }\n }\n sum += digit;\n double = !double;\n }\n return sum;\n}\n\n/** ISO/IEC 7812-1 Annex B — returns true when PAN passes Luhn. */\nexport function passesLuhn(pan: string): boolean {\n return computeLuhnSum(pan) % 10 === 0;\n}\n","import { CARTAO_PAN_MAX_LENGTH, CARTAO_PAN_MIN_LENGTH } from './constants.js';\n\n/** Grouped display mask (BR-LUHN-007). */\nexport function applyCartaoCreditoMask(canonical: string): string {\n if (canonical.length < CARTAO_PAN_MIN_LENGTH || canonical.length > CARTAO_PAN_MAX_LENGTH) {\n throw new Error(`PAN must have between ${CARTAO_PAN_MIN_LENGTH} and ${CARTAO_PAN_MAX_LENGTH} digits to apply mask`);\n }\n\n if (canonical.length === 15) {\n return `${canonical.slice(0, 4)} ${canonical.slice(4, 10)} ${canonical.slice(10)}`;\n }\n\n const groups: string[] = [];\n for (let i = 0; i < canonical.length; i += 4) {\n groups.push(canonical.slice(i, i + 4));\n }\n return groups.join(' ');\n}\n","/**\n * Credit card PAN validation — Luhn / ISO/IEC 7812-1 Annex B.\n * @see docs/use-cases/UC-008-validate-cartao-credito.md\n */\nimport { stripCartaoCredito } from '../../strip/cartao-credito.js';\nimport type { CartaoCreditoValidationResult } from '../../types/validation-result.js';\nimport { brandCartaoCredito } from '../../types/validation-result.js';\nimport { detectCardBrand } from './detect-brand.js';\nimport { CARTAO_PAN_MAX_LENGTH, CARTAO_PAN_MIN_LENGTH } from './constants.js';\nimport { passesLuhn } from './luhn.js';\n\nexport {\n CARTAO_GOLDEN_AMEX,\n CARTAO_GOLDEN_LUHN_WALKTHROUGH,\n CARTAO_GOLDEN_MASTERCARD,\n CARTAO_GOLDEN_MIN_LENGTH,\n CARTAO_GOLDEN_VISA,\n CARTAO_GOLDEN_VISA_MASKED,\n CARTAO_IEC_SOURCE_URL,\n CARTAO_OFFICIAL_SOURCE_URL,\n CARTAO_PAN_MAX_LENGTH,\n CARTAO_PAN_MIN_LENGTH,\n} from './constants.js';\nexport type { CardBrand } from './constants.js';\nexport { detectCardBrand } from './detect-brand.js';\nexport { computeLuhnSum, passesLuhn } from './luhn.js';\nexport { applyCartaoCreditoMask } from './mask.js';\n\ntype FailedResult = Extract<CartaoCreditoValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string): FailedResult {\n return { ok: false, code, message };\n}\n\nfunction hasRepeatedDigits(value: string): boolean {\n const first = value[0];\n for (let i = 1; i < value.length; i++) {\n if (value[i] !== first) {\n return false;\n }\n }\n return true;\n}\n\nfunction validateStructure(input: string, stripped: string): FailedResult | null {\n if (stripped.length === 0) {\n return failure('EMPTY_INPUT', 'Credit card PAN input is empty');\n }\n\n const withoutMask = input.replace(/[\\s-]/g, '');\n if (/[^0-9]/.test(withoutMask)) {\n return failure('INVALID_CHARACTER', 'Credit card PAN contains invalid characters');\n }\n\n if (stripped.length < CARTAO_PAN_MIN_LENGTH || stripped.length > CARTAO_PAN_MAX_LENGTH) {\n return failure(\n 'INVALID_LENGTH',\n `Credit card PAN must have between ${CARTAO_PAN_MIN_LENGTH} and ${CARTAO_PAN_MAX_LENGTH} digits after normalization`,\n );\n }\n\n if (hasRepeatedDigits(stripped)) {\n return failure('KNOWN_INVALID_PATTERN', 'Credit card PAN with all identical digits is invalid');\n }\n\n return null;\n}\n\nexport function isValidLuhn(input: string): boolean {\n const stripped = stripCartaoCredito(input);\n if (stripped.length < CARTAO_PAN_MIN_LENGTH || stripped.length > CARTAO_PAN_MAX_LENGTH) {\n return false;\n }\n const withoutMask = input.replace(/[\\s-]/g, '');\n if (/[^0-9]/.test(withoutMask)) {\n return false;\n }\n return passesLuhn(stripped);\n}\n\nexport function isValidCartaoCredito(input: string): boolean {\n return validateCartaoCredito(input).ok;\n}\n\nexport function validateCartaoCredito(input: string): CartaoCreditoValidationResult {\n const stripped = stripCartaoCredito(input);\n const structural = validateStructure(input, stripped);\n if (structural) {\n return structural;\n }\n\n if (!passesLuhn(stripped)) {\n return failure('INVALID_CHECK_DIGIT', 'Credit card PAN check digit is invalid');\n }\n\n const brand = detectCardBrand(stripped);\n return {\n ok: true,\n value: brandCartaoCredito(stripped),\n format: 'cartao-credito',\n brand,\n };\n}\n"]}
@@ -1,288 +0,0 @@
1
- import { formatRenavam } from './chunk-CDGRHI7W.js';
2
- import { computeRenavamCheckDigit, RENAVAM_BASE_LENGTH } from './chunk-WLE2ENQA.js';
3
- import { formatTelefone } from './chunk-G2Y63PIF.js';
4
- import { formatPisPasep } from './chunk-IQGRFAQV.js';
5
- import { formatPlaca } from './chunk-G32U6YQ5.js';
6
- import { formatCartaoCredito } from './chunk-XKY2CV3G.js';
7
- import { formatCep } from './chunk-ZAUZRIOU.js';
8
- import { formatCnh } from './chunk-6QJFMOIX.js';
9
- import { formatCnpj } from './chunk-LYBFUKHR.js';
10
- import { formatCpf } from './chunk-NHLLC6WH.js';
11
- import { ANATEL_DDDS, validateTelefone } from './chunk-5UL3M7IU.js';
12
- import { PIS_PASEP_DV_WEIGHTS, PIS_PASEP_BASE_LENGTH } from './chunk-KH7DWOUA.js';
13
- import { PLACA_LEGACY_PATTERN, PLACA_MERCOSUL_PATTERN, validatePlaca } from './chunk-WPL47PWJ.js';
14
- import { validateCartaoCredito } from './chunk-EPKHEW5V.js';
15
- import { validateCep } from './chunk-2JJS46FM.js';
16
- import { computeCnhCheckDigits, CNH_BASE_LENGTH } from './chunk-US4OLTJ2.js';
17
- import { CNPJ_DV1_WEIGHTS, cnpjCharValue, CNPJ_DV2_WEIGHTS, CNPJ_BASE_LENGTH } from './chunk-YXELVV37.js';
18
- import { CPF_DV1_WEIGHTS, CPF_DV2_WEIGHTS, CPF_BASE_LENGTH } from './chunk-F6PTZY4O.js';
19
- import { computeCheckDigit } from './chunk-OTZHMJYE.js';
20
-
21
- // src/generate/apply-mask.ts
22
- function applyMask(type, value) {
23
- switch (type) {
24
- case "cpf": {
25
- const result = formatCpf(value);
26
- return result.ok ? result.formatted : value;
27
- }
28
- case "cnpj": {
29
- const result = formatCnpj(value);
30
- return result.ok ? result.formatted : value;
31
- }
32
- case "cep": {
33
- const result = formatCep(value);
34
- return result.ok ? result.formatted : value;
35
- }
36
- case "placa": {
37
- const result = formatPlaca(value);
38
- return result.ok ? result.formatted : value;
39
- }
40
- case "pis-pasep": {
41
- const result = formatPisPasep(value);
42
- return result.ok ? result.formatted : value;
43
- }
44
- case "renavam": {
45
- const result = formatRenavam(value);
46
- return result.ok ? result.formatted : value;
47
- }
48
- case "cnh": {
49
- const result = formatCnh(value);
50
- return result.ok ? result.formatted : value;
51
- }
52
- case "telefone": {
53
- const result = formatTelefone(value);
54
- return result.ok ? result.formatted : value;
55
- }
56
- case "cartao-credito": {
57
- const result = formatCartaoCredito(value);
58
- return result.ok ? result.formatted : value;
59
- }
60
- default: {
61
- const _exhaustive = type;
62
- return _exhaustive;
63
- }
64
- }
65
- }
66
-
67
- // src/generate/random.ts
68
- function mulberry32(seed) {
69
- let state = seed >>> 0;
70
- return () => {
71
- state = state + 1831565813 >>> 0;
72
- let t = state;
73
- t = Math.imul(t ^ t >>> 15, t | 1);
74
- t ^= t + Math.imul(t ^ t >>> 7, t | 61);
75
- return ((t ^ t >>> 14) >>> 0) / 4294967296;
76
- };
77
- }
78
- function createRandomSource(seed) {
79
- const nextFn = seed === void 0 ? () => Math.random() : mulberry32(seed);
80
- return {
81
- next: nextFn,
82
- int(min, max) {
83
- return Math.floor(nextFn() * (max - min + 1)) + min;
84
- },
85
- digit() {
86
- return String(Math.floor(nextFn() * 10));
87
- },
88
- digits(count) {
89
- let out = "";
90
- for (let i = 0; i < count; i++) {
91
- out += this.digit();
92
- }
93
- return out;
94
- },
95
- letter() {
96
- const letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
97
- return letters.charAt(this.int(0, letters.length - 1));
98
- },
99
- pick(items) {
100
- return items[this.int(0, items.length - 1)];
101
- }
102
- };
103
- }
104
- function hasRepeatedChars(value) {
105
- const first = value[0];
106
- for (let i = 1; i < value.length; i++) {
107
- if (value[i] !== first) {
108
- return false;
109
- }
110
- }
111
- return true;
112
- }
113
- function computeLuhnCheckDigit(partial) {
114
- let sum = 0;
115
- let double = true;
116
- for (let i = partial.length - 1; i >= 0; i--) {
117
- let digit = Number(partial.charAt(i));
118
- if (double) {
119
- digit *= 2;
120
- if (digit > 9) {
121
- digit -= 9;
122
- }
123
- }
124
- sum += digit;
125
- double = !double;
126
- }
127
- return String((10 - sum % 10) % 10);
128
- }
129
-
130
- // src/generate/index.ts
131
- var CNPJ_ALNUM_CHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
132
- var MAX_ATTEMPTS = 50;
133
- function digitValue(char) {
134
- return Number(char);
135
- }
136
- function randomBaseDigits(rng, length) {
137
- for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {
138
- const base = rng.digits(length);
139
- if (!hasRepeatedChars(base)) {
140
- return base;
141
- }
142
- }
143
- return "123456789".slice(0, length).padEnd(length, "1");
144
- }
145
- function randomCnpjAlphanumericBase(rng) {
146
- for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {
147
- let base = "";
148
- for (let i = 0; i < CNPJ_BASE_LENGTH; i++) {
149
- base += CNPJ_ALNUM_CHARS.charAt(rng.int(0, CNPJ_ALNUM_CHARS.length - 1));
150
- }
151
- if (!hasRepeatedChars(base)) {
152
- return base;
153
- }
154
- }
155
- return "12ABC34501DE";
156
- }
157
- function generateCpfValue(rng) {
158
- const base = randomBaseDigits(rng, CPF_BASE_LENGTH);
159
- const dv1 = String(computeCheckDigit(base, CPF_DV1_WEIGHTS, digitValue));
160
- const dv2 = String(computeCheckDigit(base + dv1, CPF_DV2_WEIGHTS, digitValue));
161
- return base + dv1 + dv2;
162
- }
163
- function generateCnpjValue(rng, format) {
164
- if (format === "alphanumeric") {
165
- const base2 = randomCnpjAlphanumericBase(rng);
166
- const dv12 = String(computeCheckDigit(base2, CNPJ_DV1_WEIGHTS, cnpjCharValue));
167
- const dv22 = String(computeCheckDigit(base2 + dv12, CNPJ_DV2_WEIGHTS, cnpjCharValue));
168
- return base2 + dv12 + dv22;
169
- }
170
- const base = randomBaseDigits(rng, CNPJ_BASE_LENGTH);
171
- const dv1 = String(computeCheckDigit(base, CNPJ_DV1_WEIGHTS, digitValue));
172
- const dv2 = String(computeCheckDigit(base + dv1, CNPJ_DV2_WEIGHTS, digitValue));
173
- return base + dv1 + dv2;
174
- }
175
- function generateCepValue(rng) {
176
- for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {
177
- const value = rng.digits(8);
178
- if (value !== "00000000" && validateCep(value).ok) {
179
- return value;
180
- }
181
- }
182
- return "01310100";
183
- }
184
- function generatePlacaValue(rng, format) {
185
- const mode = format === "legacy" ? "legacy" : "mercosul";
186
- for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {
187
- const letters = rng.letter() + rng.letter() + rng.letter();
188
- let candidate;
189
- if (mode === "legacy") {
190
- candidate = letters + rng.digits(4);
191
- if (!PLACA_LEGACY_PATTERN.test(candidate)) {
192
- continue;
193
- }
194
- } else {
195
- candidate = letters + rng.digit() + rng.pick(["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]) + rng.digits(2);
196
- if (!PLACA_MERCOSUL_PATTERN.test(candidate)) {
197
- continue;
198
- }
199
- }
200
- if (validatePlaca(candidate).ok) {
201
- return candidate;
202
- }
203
- }
204
- return mode === "legacy" ? "ABC1234" : "ABC1D23";
205
- }
206
- function generatePisValue(rng) {
207
- const base = randomBaseDigits(rng, PIS_PASEP_BASE_LENGTH);
208
- const dv = String(computeCheckDigit(base, PIS_PASEP_DV_WEIGHTS, digitValue));
209
- return base + dv;
210
- }
211
- function generateRenavamValue(rng) {
212
- const base = randomBaseDigits(rng, RENAVAM_BASE_LENGTH);
213
- const dv = String(computeRenavamCheckDigit(base));
214
- return base + dv;
215
- }
216
- function generateCnhValue(rng) {
217
- const base = randomBaseDigits(rng, CNH_BASE_LENGTH);
218
- return base + computeCnhCheckDigits(base);
219
- }
220
- function generateTelefoneValue(rng, format) {
221
- const ddd = rng.pick(ANATEL_DDDS);
222
- const useFixo = format === "fixo";
223
- for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {
224
- const local = useFixo ? String(rng.int(2, 5)) + rng.digits(7) : `9${rng.digits(8)}`;
225
- const candidate = ddd + local;
226
- if (validateTelefone(candidate).ok) {
227
- return candidate;
228
- }
229
- }
230
- return useFixo ? "1133333333" : "11999999999";
231
- }
232
- function generateCartaoValue(rng) {
233
- const length = rng.int(13, 16);
234
- for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {
235
- const partial = rng.digits(length - 1);
236
- if (hasRepeatedChars(partial)) {
237
- continue;
238
- }
239
- const check = computeLuhnCheckDigit(partial);
240
- const candidate = partial + check;
241
- if (validateCartaoCredito(candidate).ok) {
242
- return candidate;
243
- }
244
- }
245
- return "4111111111111111";
246
- }
247
- function generate(type, options = {}) {
248
- const rng = createRandomSource(options.seed);
249
- let value;
250
- switch (type) {
251
- case "cpf":
252
- value = generateCpfValue(rng);
253
- break;
254
- case "cnpj":
255
- value = generateCnpjValue(rng, options.format);
256
- break;
257
- case "cep":
258
- value = generateCepValue(rng);
259
- break;
260
- case "placa":
261
- value = generatePlacaValue(rng, options.format);
262
- break;
263
- case "pis-pasep":
264
- value = generatePisValue(rng);
265
- break;
266
- case "renavam":
267
- value = generateRenavamValue(rng);
268
- break;
269
- case "cnh":
270
- value = generateCnhValue(rng);
271
- break;
272
- case "telefone":
273
- value = generateTelefoneValue(rng, options.format);
274
- break;
275
- case "cartao-credito":
276
- value = generateCartaoValue(rng);
277
- break;
278
- default: {
279
- const _exhaustive = type;
280
- throw new Error(`Unsupported generatable type: ${String(_exhaustive)}`);
281
- }
282
- }
283
- return options.masked ? applyMask(type, value) : value;
284
- }
285
-
286
- export { generate };
287
- //# sourceMappingURL=chunk-LGD2JJBZ.js.map
288
- //# sourceMappingURL=chunk-LGD2JJBZ.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/generate/apply-mask.ts","../src/generate/random.ts","../src/generate/index.ts"],"names":["base","dv1","dv2"],"mappings":"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","file":"chunk-LGD2JJBZ.js","sourcesContent":["import { formatCartaoCredito } from '../format/cartao-credito.js';\nimport { formatCep } from '../format/cep.js';\nimport { formatCnh } from '../format/cnh.js';\nimport { formatCnpj } from '../format/cnpj.js';\nimport { formatCpf } from '../format/cpf.js';\nimport { formatPisPasep } from '../format/pis-pasep.js';\nimport { formatPlaca } from '../format/placa.js';\nimport { formatRenavam } from '../format/renavam.js';\nimport { formatTelefone } from '../format/telefone.js';\nimport type { GeneratableDocumentType } from './index.js';\n\nexport function applyMask(type: GeneratableDocumentType, value: string): string {\n switch (type) {\n case 'cpf': {\n const result = formatCpf(value);\n return result.ok ? result.formatted : value;\n }\n case 'cnpj': {\n const result = formatCnpj(value);\n return result.ok ? result.formatted : value;\n }\n case 'cep': {\n const result = formatCep(value);\n return result.ok ? result.formatted : value;\n }\n case 'placa': {\n const result = formatPlaca(value);\n return result.ok ? result.formatted : value;\n }\n case 'pis-pasep': {\n const result = formatPisPasep(value);\n return result.ok ? result.formatted : value;\n }\n case 'renavam': {\n const result = formatRenavam(value);\n return result.ok ? result.formatted : value;\n }\n case 'cnh': {\n const result = formatCnh(value);\n return result.ok ? result.formatted : value;\n }\n case 'telefone': {\n const result = formatTelefone(value);\n return result.ok ? result.formatted : value;\n }\n case 'cartao-credito': {\n const result = formatCartaoCredito(value);\n return result.ok ? result.formatted : value;\n }\n default: {\n const _exhaustive: never = type;\n return _exhaustive;\n }\n }\n}\n","/**\n * Mulberry32 PRNG — deterministic when seed is provided (BR-GENERATE-001).\n */\nexport type RandomSource = {\n next(): number;\n int(min: number, max: number): number;\n digit(): string;\n digits(count: number): string;\n letter(): string;\n pick<T>(items: readonly T[]): T;\n};\n\nfunction mulberry32(seed: number): () => number {\n let state = seed >>> 0;\n return () => {\n state = (state + 0x6d2b79f5) >>> 0;\n let t = state;\n t = Math.imul(t ^ (t >>> 15), t | 1);\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\nexport function createRandomSource(seed?: number): RandomSource {\n const nextFn = seed === undefined ? () => Math.random() : mulberry32(seed);\n\n return {\n next: nextFn,\n int(min: number, max: number): number {\n return Math.floor(nextFn() * (max - min + 1)) + min;\n },\n digit(): string {\n return String(Math.floor(nextFn() * 10));\n },\n digits(count: number): string {\n let out = '';\n for (let i = 0; i < count; i++) {\n out += this.digit();\n }\n return out;\n },\n letter(): string {\n const letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n return letters.charAt(this.int(0, letters.length - 1));\n },\n pick<T>(items: readonly T[]): T {\n return items[this.int(0, items.length - 1)];\n },\n };\n}\n\nexport function 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\nexport function computeLuhnCheckDigit(partial: string): string {\n let sum = 0;\n let double = true;\n for (let i = partial.length - 1; i >= 0; i--) {\n let digit = Number(partial.charAt(i));\n if (double) {\n digit *= 2;\n if (digit > 9) {\n digit -= 9;\n }\n }\n sum += digit;\n double = !double;\n }\n return String((10 - (sum % 10)) % 10);\n}\n","/**\n * Synthetic document generation — test fixtures only (BR-GENERATE-001).\n * Reuses existing modulo 11 / Luhn compute helpers — never duplicates DV logic.\n * @see docs/VALIDATION-RULES.md\n */\nimport { computeCheckDigit } from '../core/cnpj/modulo11.js';\nimport { cnpjCharValue } from '../core/cnpj/ascii-value.js';\nimport { CNPJ_BASE_LENGTH, CNPJ_DV1_WEIGHTS, CNPJ_DV2_WEIGHTS } from '../core/cnpj/constants.js';\nimport { computeCnhCheckDigits } from '../core/cnh/check-digits.js';\nimport { CNH_BASE_LENGTH } from '../core/cnh/constants.js';\nimport { CPF_BASE_LENGTH, CPF_DV1_WEIGHTS, CPF_DV2_WEIGHTS } from '../core/cpf/constants.js';\nimport { PIS_PASEP_BASE_LENGTH, PIS_PASEP_DV_WEIGHTS } from '../core/pis-pasep/constants.js';\nimport { computeRenavamCheckDigit } from '../core/renavam/check-digits.js';\nimport { RENAVAM_BASE_LENGTH } from '../core/renavam/constants.js';\nimport { PLACA_LEGACY_PATTERN, PLACA_MERCOSUL_PATTERN } from '../core/placa/constants.js';\nimport { ANATEL_DDDS } from '../core/telefone/constants.js';\nimport { validateCep } from '../core/cep/index.js';\nimport { validateCartaoCredito } from '../core/cartao-credito/index.js';\nimport { validatePlaca } from '../core/placa/index.js';\nimport { validateTelefone } from '../core/telefone/index.js';\nimport { applyMask } from './apply-mask.js';\nimport { computeLuhnCheckDigit, createRandomSource, hasRepeatedChars, type RandomSource } from './random.js';\n\nexport type GeneratableDocumentType =\n | 'cpf'\n | 'cnpj'\n | 'cep'\n | 'placa'\n | 'pis-pasep'\n | 'renavam'\n | 'cnh'\n | 'telefone'\n | 'cartao-credito';\n\nexport type GenerateFormat =\n | 'numeric'\n | 'alphanumeric'\n | 'legacy'\n | 'mercosul'\n | 'celular'\n | 'fixo';\n\nexport type GenerateOptions = {\n format?: GenerateFormat;\n masked?: boolean;\n seed?: number;\n};\n\nconst CNPJ_ALNUM_CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\nconst MAX_ATTEMPTS = 50;\n\nfunction digitValue(char: string): number {\n return Number(char);\n}\n\nfunction randomBaseDigits(rng: RandomSource, length: number): string {\n for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {\n const base = rng.digits(length);\n if (!hasRepeatedChars(base)) {\n return base;\n }\n }\n return '123456789'.slice(0, length).padEnd(length, '1');\n}\n\nfunction randomCnpjAlphanumericBase(rng: RandomSource): string {\n for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {\n let base = '';\n for (let i = 0; i < CNPJ_BASE_LENGTH; i++) {\n base += CNPJ_ALNUM_CHARS.charAt(rng.int(0, CNPJ_ALNUM_CHARS.length - 1));\n }\n if (!hasRepeatedChars(base)) {\n return base;\n }\n }\n return '12ABC34501DE';\n}\n\nfunction generateCpfValue(rng: RandomSource): string {\n const base = randomBaseDigits(rng, CPF_BASE_LENGTH);\n const dv1 = String(computeCheckDigit(base, CPF_DV1_WEIGHTS, digitValue));\n const dv2 = String(computeCheckDigit(base + dv1, CPF_DV2_WEIGHTS, digitValue));\n return base + dv1 + dv2;\n}\n\nfunction generateCnpjValue(rng: RandomSource, format: GenerateOptions['format']): string {\n if (format === 'alphanumeric') {\n const base = randomCnpjAlphanumericBase(rng);\n const dv1 = String(computeCheckDigit(base, CNPJ_DV1_WEIGHTS, cnpjCharValue));\n const dv2 = String(computeCheckDigit(base + dv1, CNPJ_DV2_WEIGHTS, cnpjCharValue));\n return base + dv1 + dv2;\n }\n const base = randomBaseDigits(rng, CNPJ_BASE_LENGTH);\n const dv1 = String(computeCheckDigit(base, CNPJ_DV1_WEIGHTS, digitValue));\n const dv2 = String(computeCheckDigit(base + dv1, CNPJ_DV2_WEIGHTS, digitValue));\n return base + dv1 + dv2;\n}\n\nfunction generateCepValue(rng: RandomSource): string {\n for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {\n const value = rng.digits(8);\n if (value !== '00000000' && validateCep(value).ok) {\n return value;\n }\n }\n return '01310100';\n}\n\nfunction generatePlacaValue(rng: RandomSource, format: GenerateOptions['format']): string {\n const mode = format === 'legacy' ? 'legacy' : 'mercosul';\n for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {\n const letters = rng.letter() + rng.letter() + rng.letter();\n let candidate: string;\n if (mode === 'legacy') {\n candidate = letters + rng.digits(4);\n if (!PLACA_LEGACY_PATTERN.test(candidate)) {\n continue;\n }\n } else {\n candidate =\n letters +\n rng.digit() +\n rng.pick(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']) +\n rng.digits(2);\n if (!PLACA_MERCOSUL_PATTERN.test(candidate)) {\n continue;\n }\n }\n if (validatePlaca(candidate).ok) {\n return candidate;\n }\n }\n return mode === 'legacy' ? 'ABC1234' : 'ABC1D23';\n}\n\nfunction generatePisValue(rng: RandomSource): string {\n const base = randomBaseDigits(rng, PIS_PASEP_BASE_LENGTH);\n const dv = String(computeCheckDigit(base, PIS_PASEP_DV_WEIGHTS, digitValue));\n return base + dv;\n}\n\nfunction generateRenavamValue(rng: RandomSource): string {\n const base = randomBaseDigits(rng, RENAVAM_BASE_LENGTH);\n const dv = String(computeRenavamCheckDigit(base));\n return base + dv;\n}\n\nfunction generateCnhValue(rng: RandomSource): string {\n const base = randomBaseDigits(rng, CNH_BASE_LENGTH);\n return base + computeCnhCheckDigits(base);\n}\n\nfunction generateTelefoneValue(rng: RandomSource, format: GenerateOptions['format']): string {\n const ddd = rng.pick(ANATEL_DDDS);\n const useFixo = format === 'fixo';\n for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {\n const local = useFixo ? String(rng.int(2, 5)) + rng.digits(7) : `9${rng.digits(8)}`;\n const candidate = ddd + local;\n if (validateTelefone(candidate).ok) {\n return candidate;\n }\n }\n return useFixo ? '1133333333' : '11999999999';\n}\n\nfunction generateCartaoValue(rng: RandomSource): string {\n const length = rng.int(13, 16);\n for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {\n const partial = rng.digits(length - 1);\n if (hasRepeatedChars(partial)) {\n continue;\n }\n const check = computeLuhnCheckDigit(partial);\n const candidate = partial + check;\n if (validateCartaoCredito(candidate).ok) {\n return candidate;\n }\n }\n return '4111111111111111';\n}\n\nexport function generate(type: GeneratableDocumentType, options: GenerateOptions = {}): string {\n const rng = createRandomSource(options.seed);\n let value: string;\n\n switch (type) {\n case 'cpf':\n value = generateCpfValue(rng);\n break;\n case 'cnpj':\n value = generateCnpjValue(rng, options.format);\n break;\n case 'cep':\n value = generateCepValue(rng);\n break;\n case 'placa':\n value = generatePlacaValue(rng, options.format);\n break;\n case 'pis-pasep':\n value = generatePisValue(rng);\n break;\n case 'renavam':\n value = generateRenavamValue(rng);\n break;\n case 'cnh':\n value = generateCnhValue(rng);\n break;\n case 'telefone':\n value = generateTelefoneValue(rng, options.format);\n break;\n case 'cartao-credito':\n value = generateCartaoValue(rng);\n break;\n default: {\n const _exhaustive: never = type;\n throw new Error(`Unsupported generatable type: ${String(_exhaustive)}`);\n }\n }\n\n return options.masked ? applyMask(type, value) : value;\n}\n\nconst repeatingRng: RandomSource = {\n next: () => 0,\n int: (min: number) => min,\n digit: () => '1',\n digits: (count: number) => '1'.repeat(count),\n letter: () => 'A',\n pick: <T>(items: readonly T[]) => items[0],\n};\n\nconst zeroRng: RandomSource = {\n ...repeatingRng,\n digits: (count: number) => '0'.repeat(count),\n};\n\n/** Always fails placa pattern checks so fallback constants are returned. */\nconst exhaustPlacaLegacyRng: RandomSource = {\n ...repeatingRng,\n digits: (count: number) => '1'.repeat(Math.max(0, count - 1)),\n};\n\nconst exhaustPlacaMercosulRng: RandomSource = {\n ...repeatingRng,\n digits: () => '1',\n};\n\n/** Always fails telefone validation so fallback constants are returned. */\nconst exhaustTelefoneRng: RandomSource = {\n ...repeatingRng,\n int: () => 0,\n digits: () => '0',\n};\n\n/** @internal Test hooks for generator fallback branches. */\nexport const __generateTesting = {\n randomBaseDigits: (length: number) => randomBaseDigits(repeatingRng, length),\n randomCnpjAlphanumericBase: () => randomCnpjAlphanumericBase(repeatingRng),\n generateCpfValue: () => generateCpfValue(repeatingRng),\n generateCnpjValue: (format?: GenerateOptions['format']) => generateCnpjValue(repeatingRng, format),\n generateCepValue: () => generateCepValue(zeroRng),\n generateCartaoValue: () => generateCartaoValue(repeatingRng),\n generatePlacaValue: (format?: GenerateOptions['format']) =>\n generatePlacaValue(format === 'legacy' ? exhaustPlacaLegacyRng : exhaustPlacaMercosulRng, format),\n generateTelefoneValue: (format?: GenerateOptions['format']) =>\n generateTelefoneValue(exhaustTelefoneRng, format),\n generatePisValue: () => generatePisValue(repeatingRng),\n generateRenavamValue: () => generateRenavamValue(repeatingRng),\n generateCnhValue: () => generateCnhValue(repeatingRng),\n touchAllRngMethods: () => {\n for (const rng of [repeatingRng, zeroRng, exhaustPlacaLegacyRng, exhaustPlacaMercosulRng, exhaustTelefoneRng]) {\n rng.next();\n rng.int(1, 2);\n rng.digit();\n rng.digits(3);\n rng.letter();\n rng.pick(['a']);\n }\n },\n};\n"]}