🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@br-validators/core

Package Overview
Dependencies
Maintainers
1
Versions
27
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@br-validators/core - npm Package Compare versions

Comparing version
0.12.0-alpha.1
to
0.12.0-alpha.2
+3
dist/chunk-7ULDLG4C.js
//# sourceMappingURL=chunk-7ULDLG4C.js.map
//# sourceMappingURL=chunk-7ULDLG4C.js.map
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-7ULDLG4C.js"}
import { brandCartaoCredito } from './chunk-MSLJF2FM.js';
// src/strip/cartao-credito.ts
function stripCartaoCredito(input) {
return input.replace(/\D/g, "");
}
// src/core/cartao-credito/constants.ts
var CARTAO_PAN_MIN_LENGTH = 8;
var CARTAO_PAN_MAX_LENGTH = 19;
var CARTAO_GOLDEN_VISA = "4111111111111111";
var CARTAO_GOLDEN_MASTERCARD = "5555555555554444";
var CARTAO_GOLDEN_AMEX = "378282246310005";
var CARTAO_GOLDEN_LUHN_WALKTHROUGH = "79927398713";
var CARTAO_GOLDEN_VISA_MASKED = "4111 1111 1111 1111";
var CARTAO_GOLDEN_MIN_LENGTH = "12345674";
var CARTAO_OFFICIAL_SOURCE_URL = "https://www.iso.org/standard/70484.html";
var CARTAO_IEC_SOURCE_URL = "https://webstore.iec.ch/en/publication/59763";
var ELO_IIN_PREFIXES = [
"401178",
"401179",
"431274",
"438935",
"451416",
"457393",
"457631",
"457632",
"504175",
"506699",
"506770",
"509048",
"509049",
"627780",
"636297",
"636368",
"650031",
"650032",
"650033",
"650035",
"650051",
"650405",
"650439",
"650485",
"650486",
"650487",
"650488",
"650489",
"650490",
"650491",
"650492",
"650493",
"650494",
"650495",
"650496",
"650497",
"650498",
"650499",
"651652",
"651653",
"651654",
"651655",
"651656",
"651657",
"651658",
"651659",
"651660",
"655000",
"655001"
];
var HIPERCARD_IIN_PREFIXES = ["606282", "384100"];
// src/core/cartao-credito/detect-brand.ts
function detectCardBrand(strippedPan) {
for (const prefix of ELO_IIN_PREFIXES) {
if (strippedPan.startsWith(prefix)) {
return "elo";
}
}
for (const prefix of HIPERCARD_IIN_PREFIXES) {
if (strippedPan.startsWith(prefix)) {
return "hipercard";
}
}
if (/^3[47]/.test(strippedPan)) {
return "amex";
}
if (/^5[1-5]/.test(strippedPan) || /^2[2-7]/.test(strippedPan)) {
return "mastercard";
}
if (strippedPan.startsWith("4")) {
return "visa";
}
return "unknown";
}
// src/core/cartao-credito/luhn.ts
function computeLuhnSum(pan) {
let sum = 0;
let double = false;
for (let i = pan.length - 1; i >= 0; i--) {
let digit = Number(pan.charAt(i));
if (double) {
digit *= 2;
if (digit > 9) {
digit -= 9;
}
}
sum += digit;
double = !double;
}
return sum;
}
function passesLuhn(pan) {
return computeLuhnSum(pan) % 10 === 0;
}
// src/core/cartao-credito/mask.ts
function applyCartaoCreditoMask(canonical) {
if (canonical.length < CARTAO_PAN_MIN_LENGTH || canonical.length > CARTAO_PAN_MAX_LENGTH) {
throw new Error(`PAN must have between ${CARTAO_PAN_MIN_LENGTH} and ${CARTAO_PAN_MAX_LENGTH} digits to apply mask`);
}
if (canonical.length === 15) {
return `${canonical.slice(0, 4)} ${canonical.slice(4, 10)} ${canonical.slice(10)}`;
}
const groups = [];
for (let i = 0; i < canonical.length; i += 4) {
groups.push(canonical.slice(i, i + 4));
}
return groups.join(" ");
}
// src/core/cartao-credito/index.ts
function failure(code, message) {
return { ok: false, code, message };
}
function hasRepeatedDigits(value) {
const first = value[0];
for (let i = 1; i < value.length; i++) {
if (value[i] !== first) {
return false;
}
}
return true;
}
function validateStructure(input, stripped) {
if (stripped.length === 0) {
return failure("EMPTY_INPUT", "Credit card PAN input is empty");
}
const withoutMask = input.replace(/[\s-]/g, "");
if (/[^0-9]/.test(withoutMask)) {
return failure("INVALID_CHARACTER", "Credit card PAN contains invalid characters");
}
if (stripped.length < CARTAO_PAN_MIN_LENGTH || stripped.length > CARTAO_PAN_MAX_LENGTH) {
return failure(
"INVALID_LENGTH",
`Credit card PAN must have between ${CARTAO_PAN_MIN_LENGTH} and ${CARTAO_PAN_MAX_LENGTH} digits after normalization`
);
}
if (hasRepeatedDigits(stripped)) {
return failure("KNOWN_INVALID_PATTERN", "Credit card PAN with all identical digits is invalid");
}
return null;
}
function isValidLuhn(input) {
const stripped = stripCartaoCredito(input);
if (stripped.length < CARTAO_PAN_MIN_LENGTH || stripped.length > CARTAO_PAN_MAX_LENGTH) {
return false;
}
const withoutMask = input.replace(/[\s-]/g, "");
if (/[^0-9]/.test(withoutMask)) {
return false;
}
return passesLuhn(stripped);
}
function isValidCartaoCredito(input) {
return validateCartaoCredito(input).ok;
}
function validateCartaoCredito(input) {
const stripped = stripCartaoCredito(input);
const structural = validateStructure(input, stripped);
if (structural) {
return structural;
}
if (!passesLuhn(stripped)) {
return failure("INVALID_CHECK_DIGIT", "Credit card PAN check digit is invalid");
}
const brand = detectCardBrand(stripped);
return {
ok: true,
value: brandCartaoCredito(stripped),
format: "cartao-credito",
brand
};
}
export { CARTAO_GOLDEN_AMEX, CARTAO_GOLDEN_LUHN_WALKTHROUGH, CARTAO_GOLDEN_MASTERCARD, CARTAO_GOLDEN_MIN_LENGTH, CARTAO_GOLDEN_VISA, CARTAO_GOLDEN_VISA_MASKED, CARTAO_IEC_SOURCE_URL, CARTAO_OFFICIAL_SOURCE_URL, CARTAO_PAN_MAX_LENGTH, CARTAO_PAN_MIN_LENGTH, ELO_IIN_PREFIXES, HIPERCARD_IIN_PREFIXES, applyCartaoCreditoMask, computeLuhnSum, detectCardBrand, isValidCartaoCredito, isValidLuhn, passesLuhn, stripCartaoCredito, validateCartaoCredito };
//# sourceMappingURL=chunk-AK5GVYQ5.js.map
//# sourceMappingURL=chunk-AK5GVYQ5.js.map
{"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":";;;AAIO,SAAS,mBAAmB,KAAA,EAAuB;AACxD,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAChC;;;ACCO,IAAM,qBAAA,GAAwB;AAC9B,IAAM,qBAAA,GAAwB;AAE9B,IAAM,kBAAA,GAAqB;AAC3B,IAAM,wBAAA,GAA2B;AACjC,IAAM,kBAAA,GAAqB;AAC3B,IAAM,8BAAA,GAAiC;AACvC,IAAM,yBAAA,GAA4B;AAClC,IAAM,wBAAA,GAA2B;AAEjC,IAAM,0BAAA,GAA6B;AACnC,IAAM,qBAAA,GAAwB;AAG9B,IAAM,gBAAA,GAAmB;AAAA,EAC9B,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF;AAEO,IAAM,sBAAA,GAAyB,CAAC,QAAA,EAAU,QAAQ;;;ACjElD,SAAS,gBAAgB,WAAA,EAAgC;AAC9D,EAAA,KAAA,MAAW,UAAU,gBAAA,EAAkB;AACrC,IAAA,IAAI,WAAA,CAAY,UAAA,CAAW,MAAM,CAAA,EAAG;AAClC,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,UAAU,sBAAA,EAAwB;AAC3C,IAAA,IAAI,WAAA,CAAY,UAAA,CAAW,MAAM,CAAA,EAAG;AAClC,MAAA,OAAO,WAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,IAAI,QAAA,CAAS,IAAA,CAAK,WAAW,CAAA,EAAG;AAC9B,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI,UAAU,IAAA,CAAK,WAAW,KAAK,SAAA,CAAU,IAAA,CAAK,WAAW,CAAA,EAAG;AAC9D,IAAA,OAAO,YAAA;AAAA,EACT;AAEA,EAAA,IAAI,WAAA,CAAY,UAAA,CAAW,GAAG,CAAA,EAAG;AAC/B,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO,SAAA;AACT;;;AC7BO,SAAS,eAAe,GAAA,EAAqB;AAClD,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,IAAI,MAAA,GAAS,KAAA;AACb,EAAA,KAAA,IAAS,IAAI,GAAA,CAAI,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACxC,IAAA,IAAI,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,MAAA,CAAO,CAAC,CAAC,CAAA;AAChC,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,KAAA,IAAS,CAAA;AACT,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,KAAA,IAAS,CAAA;AAAA,MACX;AAAA,IACF;AACA,IAAA,GAAA,IAAO,KAAA;AACP,IAAA,MAAA,GAAS,CAAC,MAAA;AAAA,EACZ;AACA,EAAA,OAAO,GAAA;AACT;AAGO,SAAS,WAAW,GAAA,EAAsB;AAC/C,EAAA,OAAO,cAAA,CAAe,GAAG,CAAA,GAAI,EAAA,KAAO,CAAA;AACtC;;;ACtBO,SAAS,uBAAuB,SAAA,EAA2B;AAChE,EAAA,IAAI,SAAA,CAAU,MAAA,GAAS,qBAAA,IAAyB,SAAA,CAAU,SAAS,qBAAA,EAAuB;AACxF,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,qBAAqB,CAAA,KAAA,EAAQ,qBAAqB,CAAA,qBAAA,CAAuB,CAAA;AAAA,EACpH;AAEA,EAAA,IAAI,SAAA,CAAU,WAAW,EAAA,EAAI;AAC3B,IAAA,OAAO,GAAG,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,KAAA,CAAM,EAAE,CAAC,CAAA,CAAA;AAAA,EAClF;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;;;ACaA,SAAS,OAAA,CAAQ,MAA4B,OAAA,EAA+B;AAC1E,EAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,IAAA,EAAM,OAAA,EAAQ;AACpC;AAEA,SAAS,kBAAkB,KAAA,EAAwB;AACjD,EAAA,MAAM,KAAA,GAAQ,MAAM,CAAC,CAAA;AACrB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,KAAA,EAAO;AACtB,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,iBAAA,CAAkB,OAAe,QAAA,EAAuC;AAC/E,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,OAAO,OAAA,CAAQ,eAAe,gCAAgC,CAAA;AAAA,EAChE;AAEA,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA;AAC9C,EAAA,IAAI,QAAA,CAAS,IAAA,CAAK,WAAW,CAAA,EAAG;AAC9B,IAAA,OAAO,OAAA,CAAQ,qBAAqB,6CAA6C,CAAA;AAAA,EACnF;AAEA,EAAA,IAAI,QAAA,CAAS,MAAA,GAAS,qBAAA,IAAyB,QAAA,CAAS,SAAS,qBAAA,EAAuB;AACtF,IAAA,OAAO,OAAA;AAAA,MACL,gBAAA;AAAA,MACA,CAAA,kCAAA,EAAqC,qBAAqB,CAAA,KAAA,EAAQ,qBAAqB,CAAA,2BAAA;AAAA,KACzF;AAAA,EACF;AAEA,EAAA,IAAI,iBAAA,CAAkB,QAAQ,CAAA,EAAG;AAC/B,IAAA,OAAO,OAAA,CAAQ,yBAAyB,sDAAsD,CAAA;AAAA,EAChG;AAEA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,YAAY,KAAA,EAAwB;AAClD,EAAA,MAAM,QAAA,GAAW,mBAAmB,KAAK,CAAA;AACzC,EAAA,IAAI,QAAA,CAAS,MAAA,GAAS,qBAAA,IAAyB,QAAA,CAAS,SAAS,qBAAA,EAAuB;AACtF,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA;AAC9C,EAAA,IAAI,QAAA,CAAS,IAAA,CAAK,WAAW,CAAA,EAAG;AAC9B,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,WAAW,QAAQ,CAAA;AAC5B;AAEO,SAAS,qBAAqB,KAAA,EAAwB;AAC3D,EAAA,OAAO,qBAAA,CAAsB,KAAK,CAAA,CAAE,EAAA;AACtC;AAEO,SAAS,sBAAsB,KAAA,EAA8C;AAClF,EAAA,MAAM,QAAA,GAAW,mBAAmB,KAAK,CAAA;AACzC,EAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,KAAA,EAAO,QAAQ,CAAA;AACpD,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,OAAO,UAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,UAAA,CAAW,QAAQ,CAAA,EAAG;AACzB,IAAA,OAAO,OAAA,CAAQ,uBAAuB,wCAAwC,CAAA;AAAA,EAChF;AAEA,EAAA,MAAM,KAAA,GAAQ,gBAAgB,QAAQ,CAAA;AACtC,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,IAAA;AAAA,IACJ,KAAA,EAAO,mBAAmB,QAAQ,CAAA;AAAA,IAClC,MAAA,EAAQ,gBAAA;AAAA,IACR;AAAA,GACF;AACF","file":"chunk-AK5GVYQ5.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"]}
import { validateRenavam } from './chunk-WLE2ENQA.js';
import { validateTelefone, extractTelefoneDigits, normalizeTelefoneDigits } from './chunk-5UL3M7IU.js';
import { validateTituloEleitor } from './chunk-DJUANFIK.js';
import { validateInscricaoEstadual } from './chunk-3QP6R46N.js';
import { validateIeSpRural, stripIeSpRural } from './chunk-Y6IW2LMW.js';
import { validateNfeChave } from './chunk-D36RM7OD.js';
import { validatePisPasep } from './chunk-KH7DWOUA.js';
import { validatePlaca } from './chunk-WPL47PWJ.js';
import { validateBoleto } from './chunk-4W4OKLSZ.js';
import { validateCartaoCredito } from './chunk-AK5GVYQ5.js';
import { validateCep } from './chunk-2JJS46FM.js';
import { validateCnh } from './chunk-US4OLTJ2.js';
import { stripPlaca } from './chunk-YYHS5WQN.js';
import { validateCnpj } from './chunk-YXELVV37.js';
import { validateCpf } from './chunk-F6PTZY4O.js';
// src/sanitize/fixes.ts
function trimFix(raw) {
const trimmed = raw.trim();
const fixes = [];
if (trimmed !== raw) {
fixes.push("trimmed");
}
return { value: trimmed, fixes };
}
function digitsFix(value, fixes) {
const digits = value.replace(/\D/g, "");
if (digits !== value) {
fixes.push("removed_non_digits");
}
return { value: digits, fixes };
}
function upperAndStripSeparators(value, fixes) {
const upper = value.toUpperCase();
if (upper !== value) {
fixes.push("uppercased");
}
const stripped = upper.replace(/[^A-Z0-9]/g, "");
if (stripped !== upper) {
fixes.push("removed_separators");
}
return { value: stripped, fixes };
}
function placaFix(value, fixes) {
const upper = value.toUpperCase();
if (upper !== value) {
fixes.push("uppercased");
}
if (/[-.\s/]/.test(value)) {
fixes.push("removed_separators");
}
return { value: stripPlaca(upper), fixes };
}
function telefoneFix(value, fixes) {
if (/[\s()-]/.test(value)) {
fixes.push("removed_mask_chars");
}
const digitsOnly = extractTelefoneDigits(value);
const normalized = normalizeTelefoneDigits(value);
if (normalized !== digitsOnly && normalized.length > 0) {
fixes.push("normalized_national");
}
return { value: normalized, fixes };
}
function ieProdutorRuralFix(value, fixes) {
const upper = value.toUpperCase();
if (upper !== value) {
fixes.push("uppercased");
}
if (/^[Pp]/.test(upper)) {
fixes.push("preserved_p_prefix");
}
return { value: stripIeSpRural(upper), fixes };
}
function applyFixes(raw, type) {
const { value: trimmed, fixes } = trimFix(raw);
switch (type) {
case "cpf":
case "cep":
case "pis-pasep":
case "cnh":
case "renavam":
case "nfe-chave":
case "cartao-credito":
case "boleto":
case "titulo-eleitor":
case "inscricao-estadual":
return digitsFix(trimmed, fixes);
case "cnpj":
return upperAndStripSeparators(trimmed, fixes);
case "placa":
return placaFix(trimmed, fixes);
case "telefone":
return telefoneFix(trimmed, fixes);
case "inscricao-estadual-produtor-rural":
return ieProdutorRuralFix(trimmed, fixes);
default: {
const _exhaustive = type;
return { value: _exhaustive, fixes };
}
}
}
// src/sanitize/index.ts
function sanitize(raw, type, options = {}) {
const { value: fixed, fixes } = applyFixes(raw, type);
if (type === "inscricao-estadual" && !options.uf) {
return {
ok: false,
code: "UNSUPPORTED_FORMAT",
message: "UF is required for inscricao-estadual sanitization"
};
}
const validation = validateFixed(fixed, type, options.uf);
if (!validation.ok) {
return { ok: false, code: validation.code, message: validation.message };
}
return { ok: true, value: validation.value, fixes };
}
function validateFixed(value, type, uf) {
switch (type) {
case "cpf": {
const result = validateCpf(value);
return result.ok ? { ok: true, value: result.value } : result;
}
case "cnpj": {
const result = validateCnpj(value);
return result.ok ? { ok: true, value: result.value } : result;
}
case "cep": {
const result = validateCep(value);
return result.ok ? { ok: true, value: result.value } : result;
}
case "placa": {
const result = validatePlaca(value);
return result.ok ? { ok: true, value: result.value } : result;
}
case "pis-pasep": {
const result = validatePisPasep(value);
return result.ok ? { ok: true, value: result.value } : result;
}
case "telefone": {
const result = validateTelefone(value);
return result.ok ? { ok: true, value: result.value } : result;
}
case "cnh": {
const result = validateCnh(value);
return result.ok ? { ok: true, value: result.value } : result;
}
case "renavam": {
const result = validateRenavam(value);
return result.ok ? { ok: true, value: result.value } : result;
}
case "titulo-eleitor": {
const result = validateTituloEleitor(value);
return result.ok ? { ok: true, value: result.value } : result;
}
case "nfe-chave": {
const result = validateNfeChave(value);
return result.ok ? { ok: true, value: result.value } : result;
}
case "boleto": {
const result = validateBoleto(value);
return result.ok ? { ok: true, value: result.value } : result;
}
case "cartao-credito": {
const result = validateCartaoCredito(value);
return result.ok ? { ok: true, value: result.value } : result;
}
case "inscricao-estadual": {
const result = validateInscricaoEstadual(value, { uf });
return result.ok ? { ok: true, value: result.value } : result;
}
case "inscricao-estadual-produtor-rural": {
const result = validateIeSpRural(value);
return result.ok ? { ok: true, value: result.value } : result;
}
default: {
const _exhaustive = type;
return { ok: false, code: "UNSUPPORTED_FORMAT", message: `Unsupported type: ${String(_exhaustive)}` };
}
}
}
export { sanitize };
//# sourceMappingURL=chunk-CSZCIOGA.js.map
//# sourceMappingURL=chunk-CSZCIOGA.js.map
{"version":3,"sources":["../src/sanitize/fixes.ts","../src/sanitize/index.ts"],"names":[],"mappings":"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","file":"chunk-CSZCIOGA.js","sourcesContent":["import { stripCep } from '../strip/cep.js';\nimport { stripCnh } from '../strip/cnh.js';\nimport { stripCnpj } from '../strip/cnpj.js';\nimport { stripCpf } from '../strip/cpf.js';\nimport { stripIeSpRural } from '../strip/inscricao-estadual-produtor-rural.js';\nimport { stripInscricaoEstadual } from '../core/inscricao-estadual/index.js';\nimport { stripNfeChave } from '../strip/nfe-chave.js';\nimport { stripPisPasep } from '../strip/pis-pasep.js';\nimport { stripPlaca } from '../strip/placa.js';\nimport { stripRenavam } from '../strip/renavam.js';\nimport { stripTituloEleitor } from '../strip/titulo-eleitor.js';\nimport { extractTelefoneDigits, normalizeTelefoneDigits } from '../strip/telefone.js';\n\nexport type SanitizableDocumentType =\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\nexport type FixResult = {\n value: string;\n fixes: string[];\n};\n\nfunction trimFix(raw: string): FixResult {\n const trimmed = raw.trim();\n const fixes: string[] = [];\n if (trimmed !== raw) {\n fixes.push('trimmed');\n }\n return { value: trimmed, fixes };\n}\n\nfunction digitsFix(value: string, fixes: string[]): FixResult {\n const digits = value.replace(/\\D/g, '');\n if (digits !== value) {\n fixes.push('removed_non_digits');\n }\n return { value: digits, fixes };\n}\n\nfunction upperAndStripSeparators(value: string, fixes: string[]): FixResult {\n const upper = value.toUpperCase();\n if (upper !== value) {\n fixes.push('uppercased');\n }\n const stripped = upper.replace(/[^A-Z0-9]/g, '');\n if (stripped !== upper) {\n fixes.push('removed_separators');\n }\n return { value: stripped, fixes };\n}\n\nfunction placaFix(value: string, fixes: string[]): FixResult {\n const upper = value.toUpperCase();\n if (upper !== value) {\n fixes.push('uppercased');\n }\n if (/[-.\\s/]/.test(value)) {\n fixes.push('removed_separators');\n }\n return { value: stripPlaca(upper), fixes };\n}\n\nfunction telefoneFix(value: string, fixes: string[]): FixResult {\n if (/[\\s()-]/.test(value)) {\n fixes.push('removed_mask_chars');\n }\n const digitsOnly = extractTelefoneDigits(value);\n const normalized = normalizeTelefoneDigits(value);\n if (normalized !== digitsOnly && normalized.length > 0) {\n fixes.push('normalized_national');\n }\n return { value: normalized, fixes };\n}\n\nfunction ieProdutorRuralFix(value: string, fixes: string[]): FixResult {\n const upper = value.toUpperCase();\n if (upper !== value) {\n fixes.push('uppercased');\n }\n if (/^[Pp]/.test(upper)) {\n fixes.push('preserved_p_prefix');\n }\n return { value: stripIeSpRural(upper), fixes };\n}\n\nexport function applyFixes(raw: string, type: SanitizableDocumentType): FixResult {\n const { value: trimmed, fixes } = trimFix(raw);\n\n switch (type) {\n case 'cpf':\n case 'cep':\n case 'pis-pasep':\n case 'cnh':\n case 'renavam':\n case 'nfe-chave':\n case 'cartao-credito':\n case 'boleto':\n case 'titulo-eleitor':\n case 'inscricao-estadual':\n return digitsFix(trimmed, fixes);\n case 'cnpj':\n return upperAndStripSeparators(trimmed, fixes);\n case 'placa':\n return placaFix(trimmed, fixes);\n case 'telefone':\n return telefoneFix(trimmed, fixes);\n case 'inscricao-estadual-produtor-rural':\n return ieProdutorRuralFix(trimmed, fixes);\n default: {\n const _exhaustive: never = type;\n return { value: _exhaustive, fixes };\n }\n }\n}\n\n/** Validates canonical strip output matches fix pipeline (used in tests). */\nexport function stripForType(value: string, type: SanitizableDocumentType): string {\n switch (type) {\n case 'cpf':\n return stripCpf(value);\n case 'cnpj':\n return stripCnpj(value);\n case 'cep':\n return stripCep(value);\n case 'placa':\n return stripPlaca(value);\n case 'pis-pasep':\n return stripPisPasep(value);\n case 'telefone':\n return normalizeTelefoneDigits(value);\n case 'cnh':\n return stripCnh(value);\n case 'renavam':\n return stripRenavam(value);\n case 'titulo-eleitor':\n return stripTituloEleitor(value);\n case 'nfe-chave':\n return stripNfeChave(value);\n case 'boleto':\n return value.replace(/\\D/g, '');\n case 'cartao-credito':\n return value.replace(/\\D/g, '');\n case 'inscricao-estadual':\n return stripInscricaoEstadual(value);\n case 'inscricao-estadual-produtor-rural':\n return stripIeSpRural(value);\n default: {\n const _exhaustive: never = type;\n return _exhaustive;\n }\n }\n}\n","/**\n * ETL-style document sanitization — applies fixes then validates (BR-SANITIZE-001).\n * @see docs/VALIDATION-RULES.md\n */\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 { validateRenavam } from '../core/renavam/index.js';\nimport { validateTelefone } from '../core/telefone/index.js';\nimport { validateTituloEleitor } from '../core/titulo-eleitor/index.js';\nimport type { UfCode, ValidationErrorCode } from '../types/validation-result.js';\nimport { applyFixes } from './fixes.js';\n\nexport type SanitizableDocumentType =\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\nexport type SanitizeOptions = {\n uf?: UfCode;\n};\n\nexport type SanitizeSuccess = {\n ok: true;\n value: string;\n fixes: string[];\n};\n\nexport type SanitizeFailure = {\n ok: false;\n code: ValidationErrorCode;\n message: string;\n};\n\nexport type SanitizeResult = SanitizeSuccess | SanitizeFailure;\n\nexport type { FixResult } from './fixes.js';\n\ntype ValidateFixedResult =\n | { ok: true; value: string }\n | { ok: false; code: ValidationErrorCode; message: string };\n\nexport function sanitize(\n raw: string,\n type: SanitizableDocumentType,\n options: SanitizeOptions = {},\n): SanitizeResult {\n const { value: fixed, fixes } = applyFixes(raw, type);\n\n if (type === 'inscricao-estadual' && !options.uf) {\n return {\n ok: false,\n code: 'UNSUPPORTED_FORMAT',\n message: 'UF is required for inscricao-estadual sanitization',\n };\n }\n\n const validation = validateFixed(fixed, type, options.uf);\n if (!validation.ok) {\n return { ok: false, code: validation.code, message: validation.message };\n }\n\n return { ok: true, value: validation.value, fixes };\n}\n\nfunction validateFixed(value: string, type: SanitizableDocumentType, uf?: UfCode): ValidateFixedResult {\n switch (type) {\n case 'cpf': {\n const result = validateCpf(value);\n return result.ok ? { ok: true, value: result.value } : result;\n }\n case 'cnpj': {\n const result = validateCnpj(value);\n return result.ok ? { ok: true, value: result.value } : result;\n }\n case 'cep': {\n const result = validateCep(value);\n return result.ok ? { ok: true, value: result.value } : result;\n }\n case 'placa': {\n const result = validatePlaca(value);\n return result.ok ? { ok: true, value: result.value } : result;\n }\n case 'pis-pasep': {\n const result = validatePisPasep(value);\n return result.ok ? { ok: true, value: result.value } : result;\n }\n case 'telefone': {\n const result = validateTelefone(value);\n return result.ok ? { ok: true, value: result.value } : result;\n }\n case 'cnh': {\n const result = validateCnh(value);\n return result.ok ? { ok: true, value: result.value } : result;\n }\n case 'renavam': {\n const result = validateRenavam(value);\n return result.ok ? { ok: true, value: result.value } : result;\n }\n case 'titulo-eleitor': {\n const result = validateTituloEleitor(value);\n return result.ok ? { ok: true, value: result.value } : result;\n }\n case 'nfe-chave': {\n const result = validateNfeChave(value);\n return result.ok ? { ok: true, value: result.value } : result;\n }\n case 'boleto': {\n const result = validateBoleto(value);\n return result.ok ? { ok: true, value: result.value } : result;\n }\n case 'cartao-credito': {\n const result = validateCartaoCredito(value);\n return result.ok ? { ok: true, value: result.value } : result;\n }\n case 'inscricao-estadual': {\n const result = validateInscricaoEstadual(value, { uf: uf as UfCode });\n return result.ok ? { ok: true, value: result.value } : result;\n }\n case 'inscricao-estadual-produtor-rural': {\n const result = validateIeSpRural(value);\n return result.ok ? { ok: true, value: result.value } : result;\n }\n default: {\n const _exhaustive: never = type;\n return { ok: false, code: 'UNSUPPORTED_FORMAT', message: `Unsupported type: ${String(_exhaustive)}` };\n }\n }\n}\n"]}
import { stripTituloEleitor } from './chunk-YYHS5WQN.js';
import { weightedSum } from './chunk-OTZHMJYE.js';
import { brandTituloEleitor } from './chunk-MSLJF2FM.js';
// src/core/titulo-eleitor/constants.ts
var TITULO_ELEITOR_DV1_WEIGHTS_8 = [2, 3, 4, 5, 6, 7, 8, 9];
var TITULO_ELEITOR_DV1_WEIGHTS_9 = [9, 2, 3, 4, 5, 6, 7, 8, 9];
var TITULO_ELEITOR_DV2_WEIGHTS = [7, 8, 9];
var TITULO_ELEITOR_SEQUENTIAL_LENGTH = 8;
var TITULO_ELEITOR_SEQUENTIAL_LENGTH_EXTENDED = 9;
var TITULO_ELEITOR_LENGTH = 12;
var TITULO_ELEITOR_LENGTH_EXTENDED = 13;
var TITULO_ELEITOR_MIN_UF_CODE = 1;
var TITULO_ELEITOR_MAX_UF_CODE = 28;
var TITULO_ELEITOR_NUMERIC_PATTERN_12 = /^\d{12}$/;
var TITULO_ELEITOR_NUMERIC_PATTERN_13 = /^\d{13}$/;
var TITULO_ELEITOR_SPECIAL_UF_CODES = [1, 2];
var TITULO_ELEITOR_GOLDEN_PRIMARY = "004356870906";
var TITULO_ELEITOR_GOLDEN_SP_SPECIAL = "000000000116";
var TITULO_ELEITOR_GOLDEN_SP_EXTENDED = "1234567890175";
var TITULO_ELEITOR_GOLDEN_EXTERIOR = "000000012895";
var TITULO_ELEITOR_GOLDEN_MASKED_INPUT = "0043 5687 0906";
var TITULO_ELEITOR_OFFICIAL_SOURCE_URL = "https://www.tse.jus.br/legislacao/compilada/res/1998/resolucao-no-20-132-de-19-de-marco-de-1998";
var TITULO_ELEITOR_NORMATIVE_SECONDARY_URL = "https://www.tse.jus.br/legislacao/compilada/res/2021/resolucao-no-23-659-de-26-de-outubro-de-2021";
var TITULO_ELEITOR_ALGORITHM_WEIGHTS_REF_URL = "https://pt.wikipedia.org/wiki/T%C3%ADtulo_eleitoral#C%C3%A1lculo_do_d%C3%ADgito_verificador";
var TITULO_ELEITOR_ALGORITHM_REF_URL = "http://ghiorzi.org/DVnew.htm#e";
var TITULO_ELEITOR_TSE_PORTAL_URL = "https://www.tse.jus.br/";
var TITULO_ELEITOR_ETITULO_URL = "https://www.tse.jus.br/eleitor/servicos/aplicativo-e-titulo";
var TITULO_ELEITOR_UF_BY_CODE = {
1: "SP",
2: "MG",
3: "RJ",
4: "RS",
5: "BA",
6: "PR",
7: "CE",
8: "PE",
9: "SC",
10: "GO",
11: "MA",
12: "PB",
13: "PA",
14: "ES",
15: "PI",
16: "RN",
17: "AL",
18: "MT",
19: "MS",
20: "DF",
21: "SE",
22: "AM",
23: "RO",
24: "AC",
25: "AP",
26: "RR",
27: "TO"
};
var TITULO_ELEITOR_EXTERIOR_UF_CODE = 28;
// src/core/titulo-eleitor/check-digits.ts
function digitValues(chars) {
const values = [];
for (let i = 0; i < chars.length; i++) {
values.push(Number(chars.charAt(i)));
}
return values;
}
function isSpecialUf(ufCode) {
return TITULO_ELEITOR_SPECIAL_UF_CODES.includes(ufCode);
}
function resolveTituloEleitorCheckDigit(remainder, ufCode) {
if (remainder >= 10) {
return 0;
}
if (remainder === 0 && isSpecialUf(ufCode)) {
return 1;
}
return remainder;
}
function computeTituloEleitorFirstCheckDigit(sequential, ufCode) {
const weights = sequential.length === 8 ? TITULO_ELEITOR_DV1_WEIGHTS_8 : TITULO_ELEITOR_DV1_WEIGHTS_9;
const remainder = weightedSum(digitValues(sequential), weights) % 11;
return resolveTituloEleitorCheckDigit(remainder, ufCode);
}
function computeTituloEleitorSecondCheckDigit(ufDigits, firstDv, ufCode) {
const uf1 = Number(ufDigits.charAt(0));
const uf2 = Number(ufDigits.charAt(1));
const remainder = weightedSum([uf1, uf2, firstDv], TITULO_ELEITOR_DV2_WEIGHTS) % 11;
return resolveTituloEleitorCheckDigit(remainder, ufCode);
}
function computeTituloEleitorCheckDigits(sequential, ufDigits, ufCode) {
const dv1 = computeTituloEleitorFirstCheckDigit(sequential, ufCode);
const dv2 = computeTituloEleitorSecondCheckDigit(ufDigits, dv1, ufCode);
return `${String(dv1)}${String(dv2)}`;
}
// src/core/titulo-eleitor/parse.ts
function parseTituloEleitorParts(stripped) {
if (stripped.length === TITULO_ELEITOR_LENGTH) {
return {
sequential: stripped.slice(0, TITULO_ELEITOR_SEQUENTIAL_LENGTH),
ufDigits: stripped.slice(TITULO_ELEITOR_SEQUENTIAL_LENGTH, TITULO_ELEITOR_LENGTH - 2),
ufCode: Number(stripped.slice(TITULO_ELEITOR_SEQUENTIAL_LENGTH, TITULO_ELEITOR_LENGTH - 2)),
checkDigits: stripped.slice(TITULO_ELEITOR_LENGTH - 2)
};
}
if (stripped.length === TITULO_ELEITOR_LENGTH_EXTENDED) {
const ufDigits = stripped.slice(
TITULO_ELEITOR_SEQUENTIAL_LENGTH_EXTENDED,
TITULO_ELEITOR_SEQUENTIAL_LENGTH_EXTENDED + 2
);
const ufCode = Number(ufDigits);
if (!TITULO_ELEITOR_SPECIAL_UF_CODES.includes(ufCode)) {
return null;
}
return {
sequential: stripped.slice(0, TITULO_ELEITOR_SEQUENTIAL_LENGTH_EXTENDED),
ufDigits,
ufCode,
checkDigits: stripped.slice(TITULO_ELEITOR_LENGTH_EXTENDED - 2)
};
}
return null;
}
// src/core/titulo-eleitor/index.ts
function failure(code, message, ufCode) {
if (ufCode === void 0) {
return { ok: false, code, message };
}
return { ok: false, code, message, ufCode };
}
function hasRepeatedDigits(value) {
const first = value[0];
for (let i = 1; i < value.length; i++) {
if (value[i] !== first) {
return false;
}
}
return true;
}
function isValidUfCode(ufCode) {
return ufCode >= TITULO_ELEITOR_MIN_UF_CODE && ufCode <= TITULO_ELEITOR_MAX_UF_CODE;
}
function resolveUf(ufCode) {
return TITULO_ELEITOR_UF_BY_CODE[ufCode];
}
function validateStructure(input, stripped) {
if (stripped.length === 0) {
return { ok: false, error: failure("EMPTY_INPUT", "T\xEDtulo de Eleitor input is empty") };
}
if (/[^0-9\s]/.test(input.replace(/\s/g, ""))) {
return { ok: false, error: failure("INVALID_CHARACTER", "T\xEDtulo de Eleitor contains invalid characters") };
}
if (stripped.length !== TITULO_ELEITOR_LENGTH && stripped.length !== TITULO_ELEITOR_LENGTH_EXTENDED) {
return {
ok: false,
error: failure(
"INVALID_LENGTH",
`T\xEDtulo de Eleitor must have ${TITULO_ELEITOR_LENGTH} or ${TITULO_ELEITOR_LENGTH_EXTENDED} digits after normalization`
)
};
}
const parts = parseTituloEleitorParts(stripped);
if (!parts) {
return {
ok: false,
error: failure(
"UNSUPPORTED_FORMAT",
`13-digit T\xEDtulo de Eleitor is only valid for SP (01) or MG (02)`
)
};
}
if (!isValidUfCode(parts.ufCode)) {
return {
ok: false,
error: failure(
"KNOWN_INVALID_PATTERN",
`T\xEDtulo de Eleitor UF code ${parts.ufDigits} is not a valid TSE electoral code`,
parts.ufCode
)
};
}
if (hasRepeatedDigits(stripped)) {
return {
ok: false,
error: failure("KNOWN_INVALID_PATTERN", "T\xEDtulo de Eleitor with all identical digits is invalid")
};
}
return { ok: true, parts };
}
function isValidTituloEleitorChecksum(parts) {
const expected = computeTituloEleitorCheckDigits(parts.sequential, parts.ufDigits, parts.ufCode);
return parts.checkDigits === expected;
}
function isValidTituloEleitor(input) {
return validateTituloEleitor(input).ok;
}
function validateTituloEleitor(input) {
const stripped = stripTituloEleitor(input);
const structure = validateStructure(input, stripped);
if (!structure.ok) {
return structure.error;
}
const { parts } = structure;
if (!isValidTituloEleitorChecksum(parts)) {
return failure("INVALID_CHECK_DIGIT", "T\xEDtulo de Eleitor check digits are invalid", parts.ufCode);
}
const uf = resolveUf(parts.ufCode);
const success = {
ok: true,
value: brandTituloEleitor(stripped),
format: "numeric",
ufCode: parts.ufCode
};
if (uf !== void 0) {
success.uf = uf;
} else if (parts.ufCode === TITULO_ELEITOR_EXTERIOR_UF_CODE) {
success.exterior = true;
}
return success;
}
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, computeTituloEleitorCheckDigits, isValidTituloEleitor, validateTituloEleitor };
//# sourceMappingURL=chunk-DJUANFIK.js.map
//# sourceMappingURL=chunk-DJUANFIK.js.map
{"version":3,"sources":["../src/core/titulo-eleitor/constants.ts","../src/core/titulo-eleitor/check-digits.ts","../src/core/titulo-eleitor/parse.ts","../src/core/titulo-eleitor/index.ts"],"names":[],"mappings":"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","file":"chunk-DJUANFIK.js","sourcesContent":["/**\n * Título de Eleitor constants — modulo 11 (TSE Res. 20.132/1998 + algorithm cross-checks).\n * @see https://www.tse.jus.br/legislacao/compilada/res/1998/resolucao-no-20-132-de-19-de-marco-de-1998 — Art. 10 (structure, mod 11)\n * @see https://pt.wikipedia.org/wiki/T%C3%ADtulo_eleitoral#C%C3%A1lculo_do_d%C3%ADgito_verificador — weights + SP/MG rule\n * @see http://ghiorzi.org/DVnew.htm#e — algorithm cross-check\n */\nimport type { UfCode } from '../../types/validation-result.js';\n\nexport const TITULO_ELEITOR_DV1_WEIGHTS_8 = [2, 3, 4, 5, 6, 7, 8, 9] as const;\nexport const TITULO_ELEITOR_DV1_WEIGHTS_9 = [9, 2, 3, 4, 5, 6, 7, 8, 9] as const;\nexport const TITULO_ELEITOR_DV2_WEIGHTS = [7, 8, 9] as const;\nexport const TITULO_ELEITOR_SEQUENTIAL_LENGTH = 8;\nexport const TITULO_ELEITOR_SEQUENTIAL_LENGTH_EXTENDED = 9;\nexport const TITULO_ELEITOR_LENGTH = 12;\nexport const TITULO_ELEITOR_LENGTH_EXTENDED = 13;\nexport const TITULO_ELEITOR_UF_LENGTH = 2;\nexport const TITULO_ELEITOR_DV_LENGTH = 2;\nexport const TITULO_ELEITOR_MIN_UF_CODE = 1;\nexport const TITULO_ELEITOR_MAX_UF_CODE = 28;\nexport const TITULO_ELEITOR_NUMERIC_PATTERN_12 = /^\\d{12}$/;\nexport const TITULO_ELEITOR_NUMERIC_PATTERN_13 = /^\\d{13}$/;\n\n/** TSE UF codes where remainder 0 maps DV to 1 instead of 0. */\nexport const TITULO_ELEITOR_SPECIAL_UF_CODES = [1, 2] as const;\n\n/** Golden primary — SC (UF=09), Wikipedia PT walkthrough. */\nexport const TITULO_ELEITOR_GOLDEN_PRIMARY = '004356870906';\nexport const TITULO_ELEITOR_GOLDEN_SP_SPECIAL = '000000000116';\nexport const TITULO_ELEITOR_GOLDEN_SP_EXTENDED = '1234567890175';\nexport const TITULO_ELEITOR_GOLDEN_EXTERIOR = '000000012895';\nexport const TITULO_ELEITOR_GOLDEN_MASKED_INPUT = '0043 5687 0906';\n\n/** Normative — Resolução TSE 20.132/1998, Art. 10 (8 seq + 2 UF + 2 DV, mod 11). */\nexport const TITULO_ELEITOR_OFFICIAL_SOURCE_URL =\n 'https://www.tse.jus.br/legislacao/compilada/res/1998/resolucao-no-20-132-de-19-de-marco-de-1998';\n\n/** Normative — Resolução TSE 23.659/2021 (Cadastro Eleitoral; confirms UF + DV structure). */\nexport const TITULO_ELEITOR_NORMATIVE_SECONDARY_URL =\n 'https://www.tse.jus.br/legislacao/compilada/res/2021/resolucao-no-23-659-de-26-de-outubro-de-2021';\n\n/**\n * Algorithm weights + SP/MG remainder-zero rule — not in TSE resolution text.\n * Community consensus validated empirically (Wikipedia PT worked example).\n */\nexport const TITULO_ELEITOR_ALGORITHM_WEIGHTS_REF_URL =\n 'https://pt.wikipedia.org/wiki/T%C3%ADtulo_eleitoral#C%C3%A1lculo_do_d%C3%ADgito_verificador';\n\n/** Algorithm cross-check — Ghiorzi DV table. */\nexport const TITULO_ELEITOR_ALGORITHM_REF_URL = 'http://ghiorzi.org/DVnew.htm#e';\n\nexport const TITULO_ELEITOR_TSE_PORTAL_URL = 'https://www.tse.jus.br/';\n\nexport const TITULO_ELEITOR_ETITULO_URL =\n 'https://www.tse.jus.br/eleitor/servicos/aplicativo-e-titulo';\n\n/** TSE electoral UF code → Brazilian UF (28 = exterior / ZZ). */\nexport const TITULO_ELEITOR_UF_BY_CODE: Readonly<Record<number, UfCode>> = {\n 1: 'SP',\n 2: 'MG',\n 3: 'RJ',\n 4: 'RS',\n 5: 'BA',\n 6: 'PR',\n 7: 'CE',\n 8: 'PE',\n 9: 'SC',\n 10: 'GO',\n 11: 'MA',\n 12: 'PB',\n 13: 'PA',\n 14: 'ES',\n 15: 'PI',\n 16: 'RN',\n 17: 'AL',\n 18: 'MT',\n 19: 'MS',\n 20: 'DF',\n 21: 'SE',\n 22: 'AM',\n 23: 'RO',\n 24: 'AC',\n 25: 'AP',\n 26: 'RR',\n 27: 'TO',\n};\n\nexport const TITULO_ELEITOR_EXTERIOR_UF_CODE = 28;\n","/**\n * Título de Eleitor check digits — modulo 11 (TSE / Wikipedia PT + Ghiorzi).\n * @see https://www.tse.jus.br/legislacao/compilada/res/1998/resolucao-no-20-132-de-19-de-marco-de-1998\n * @see https://pt.wikipedia.org/wiki/T%C3%ADtulo_eleitoral#C%C3%A1lculo_do_d%C3%ADgito_verificador\n * @see http://ghiorzi.org/DVnew.htm#e\n */\nimport { weightedSum } from '../cnpj/modulo11.js';\nimport {\n TITULO_ELEITOR_DV1_WEIGHTS_8,\n TITULO_ELEITOR_DV1_WEIGHTS_9,\n TITULO_ELEITOR_DV2_WEIGHTS,\n TITULO_ELEITOR_SPECIAL_UF_CODES,\n} from './constants.js';\n\nfunction digitValues(chars: string): number[] {\n const values: number[] = [];\n for (let i = 0; i < chars.length; i++) {\n values.push(Number(chars.charAt(i)));\n }\n return values;\n}\n\nfunction isSpecialUf(ufCode: number): boolean {\n return (TITULO_ELEITOR_SPECIAL_UF_CODES as readonly number[]).includes(ufCode);\n}\n\nexport function resolveTituloEleitorCheckDigit(remainder: number, ufCode: number): number {\n if (remainder >= 10) {\n return 0;\n }\n if (remainder === 0 && isSpecialUf(ufCode)) {\n return 1;\n }\n return remainder;\n}\n\nexport function computeTituloEleitorFirstCheckDigit(sequential: string, ufCode: number): number {\n const weights =\n sequential.length === 8 ? TITULO_ELEITOR_DV1_WEIGHTS_8 : TITULO_ELEITOR_DV1_WEIGHTS_9;\n const remainder = weightedSum(digitValues(sequential), weights) % 11;\n return resolveTituloEleitorCheckDigit(remainder, ufCode);\n}\n\nexport function computeTituloEleitorSecondCheckDigit(\n ufDigits: string,\n firstDv: number,\n ufCode: number,\n): number {\n const uf1 = Number(ufDigits.charAt(0));\n const uf2 = Number(ufDigits.charAt(1));\n const remainder = weightedSum([uf1, uf2, firstDv], TITULO_ELEITOR_DV2_WEIGHTS) % 11;\n return resolveTituloEleitorCheckDigit(remainder, ufCode);\n}\n\nexport function computeTituloEleitorCheckDigits(\n sequential: string,\n ufDigits: string,\n ufCode: number,\n): string {\n const dv1 = computeTituloEleitorFirstCheckDigit(sequential, ufCode);\n const dv2 = computeTituloEleitorSecondCheckDigit(ufDigits, dv1, ufCode);\n return `${String(dv1)}${String(dv2)}`;\n}\n","import {\n TITULO_ELEITOR_LENGTH,\n TITULO_ELEITOR_LENGTH_EXTENDED,\n TITULO_ELEITOR_SEQUENTIAL_LENGTH,\n TITULO_ELEITOR_SEQUENTIAL_LENGTH_EXTENDED,\n TITULO_ELEITOR_SPECIAL_UF_CODES,\n} from './constants.js';\n\nexport type TituloEleitorParts = {\n sequential: string;\n ufDigits: string;\n ufCode: number;\n checkDigits: string;\n};\n\nexport function parseTituloEleitorParts(stripped: string): TituloEleitorParts | null {\n if (stripped.length === TITULO_ELEITOR_LENGTH) {\n return {\n sequential: stripped.slice(0, TITULO_ELEITOR_SEQUENTIAL_LENGTH),\n ufDigits: stripped.slice(TITULO_ELEITOR_SEQUENTIAL_LENGTH, TITULO_ELEITOR_LENGTH - 2),\n ufCode: Number(stripped.slice(TITULO_ELEITOR_SEQUENTIAL_LENGTH, TITULO_ELEITOR_LENGTH - 2)),\n checkDigits: stripped.slice(TITULO_ELEITOR_LENGTH - 2),\n };\n }\n\n if (stripped.length === TITULO_ELEITOR_LENGTH_EXTENDED) {\n const ufDigits = stripped.slice(\n TITULO_ELEITOR_SEQUENTIAL_LENGTH_EXTENDED,\n TITULO_ELEITOR_SEQUENTIAL_LENGTH_EXTENDED + 2,\n );\n const ufCode = Number(ufDigits);\n if (!(TITULO_ELEITOR_SPECIAL_UF_CODES as readonly number[]).includes(ufCode)) {\n return null;\n }\n return {\n sequential: stripped.slice(0, TITULO_ELEITOR_SEQUENTIAL_LENGTH_EXTENDED),\n ufDigits,\n ufCode,\n checkDigits: stripped.slice(TITULO_ELEITOR_LENGTH_EXTENDED - 2),\n };\n }\n\n return null;\n}\n","/**\n * Título de Eleitor validation — modulo 11 (TSE Res. 20.132/1998 + algorithm cross-checks).\n * @see https://www.tse.jus.br/legislacao/compilada/res/1998/resolucao-no-20-132-de-19-de-marco-de-1998\n * @see https://pt.wikipedia.org/wiki/T%C3%ADtulo_eleitoral#C%C3%A1lculo_do_d%C3%ADgito_verificador\n * @see http://ghiorzi.org/DVnew.htm#e\n */\nimport { stripTituloEleitor } from '../../strip/index.js';\nimport type { TituloEleitorValidationResult, UfCode } from '../../types/validation-result.js';\nimport { brandTituloEleitor } from '../../types/validation-result.js';\nimport { computeTituloEleitorCheckDigits } from './check-digits.js';\nimport {\n TITULO_ELEITOR_EXTERIOR_UF_CODE,\n TITULO_ELEITOR_LENGTH,\n TITULO_ELEITOR_LENGTH_EXTENDED,\n TITULO_ELEITOR_MAX_UF_CODE,\n TITULO_ELEITOR_MIN_UF_CODE,\n TITULO_ELEITOR_UF_BY_CODE,\n} from './constants.js';\nimport { parseTituloEleitorParts } from './parse.js';\n\nexport {\n TITULO_ELEITOR_ALGORITHM_REF_URL,\n TITULO_ELEITOR_ALGORITHM_WEIGHTS_REF_URL,\n TITULO_ELEITOR_DV1_WEIGHTS_8,\n TITULO_ELEITOR_DV1_WEIGHTS_9,\n TITULO_ELEITOR_DV2_WEIGHTS,\n TITULO_ELEITOR_ETITULO_URL,\n TITULO_ELEITOR_EXTERIOR_UF_CODE,\n TITULO_ELEITOR_GOLDEN_EXTERIOR,\n TITULO_ELEITOR_GOLDEN_MASKED_INPUT,\n TITULO_ELEITOR_GOLDEN_PRIMARY,\n TITULO_ELEITOR_GOLDEN_SP_EXTENDED,\n TITULO_ELEITOR_GOLDEN_SP_SPECIAL,\n TITULO_ELEITOR_LENGTH,\n TITULO_ELEITOR_LENGTH_EXTENDED,\n TITULO_ELEITOR_NORMATIVE_SECONDARY_URL,\n TITULO_ELEITOR_NUMERIC_PATTERN_12,\n TITULO_ELEITOR_NUMERIC_PATTERN_13,\n TITULO_ELEITOR_OFFICIAL_SOURCE_URL,\n TITULO_ELEITOR_SEQUENTIAL_LENGTH,\n TITULO_ELEITOR_SEQUENTIAL_LENGTH_EXTENDED,\n TITULO_ELEITOR_SPECIAL_UF_CODES,\n TITULO_ELEITOR_TSE_PORTAL_URL,\n TITULO_ELEITOR_UF_BY_CODE,\n} from './constants.js';\n\ntype FailedResult = Extract<TituloEleitorValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string, ufCode?: number): FailedResult {\n if (ufCode === undefined) {\n return { ok: false, code, message };\n }\n return { ok: false, code, message, ufCode };\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 isValidUfCode(ufCode: number): boolean {\n return ufCode >= TITULO_ELEITOR_MIN_UF_CODE && ufCode <= TITULO_ELEITOR_MAX_UF_CODE;\n}\n\nfunction resolveUf(ufCode: number): UfCode | undefined {\n return TITULO_ELEITOR_UF_BY_CODE[ufCode];\n}\n\ntype StructureResult =\n | { ok: false; error: FailedResult }\n | { ok: true; parts: NonNullable<ReturnType<typeof parseTituloEleitorParts>> };\n\nfunction validateStructure(input: string, stripped: string): StructureResult {\n if (stripped.length === 0) {\n return { ok: false, error: failure('EMPTY_INPUT', 'Título de Eleitor input is empty') };\n }\n\n if (/[^0-9\\s]/.test(input.replace(/\\s/g, ''))) {\n return { ok: false, error: failure('INVALID_CHARACTER', 'Título de Eleitor contains invalid characters') };\n }\n\n if (stripped.length !== TITULO_ELEITOR_LENGTH && stripped.length !== TITULO_ELEITOR_LENGTH_EXTENDED) {\n return {\n ok: false,\n error: failure(\n 'INVALID_LENGTH',\n `Título de Eleitor must have ${TITULO_ELEITOR_LENGTH} or ${TITULO_ELEITOR_LENGTH_EXTENDED} digits after normalization`,\n ),\n };\n }\n\n const parts = parseTituloEleitorParts(stripped);\n if (!parts) {\n return {\n ok: false,\n error: failure(\n 'UNSUPPORTED_FORMAT',\n `13-digit Título de Eleitor is only valid for SP (01) or MG (02)`,\n ),\n };\n }\n\n if (!isValidUfCode(parts.ufCode)) {\n return {\n ok: false,\n error: failure(\n 'KNOWN_INVALID_PATTERN',\n `Título de Eleitor UF code ${parts.ufDigits} is not a valid TSE electoral code`,\n parts.ufCode,\n ),\n };\n }\n\n if (hasRepeatedDigits(stripped)) {\n return {\n ok: false,\n error: failure('KNOWN_INVALID_PATTERN', 'Título de Eleitor with all identical digits is invalid'),\n };\n }\n\n return { ok: true, parts };\n}\n\nfunction isValidTituloEleitorChecksum(parts: {\n sequential: string;\n ufDigits: string;\n ufCode: number;\n checkDigits: string;\n}): boolean {\n const expected = computeTituloEleitorCheckDigits(parts.sequential, parts.ufDigits, parts.ufCode);\n return parts.checkDigits === expected;\n}\n\nexport function isValidTituloEleitor(input: string): boolean {\n return validateTituloEleitor(input).ok;\n}\n\nexport function validateTituloEleitor(input: string): TituloEleitorValidationResult {\n const stripped = stripTituloEleitor(input);\n const structure = validateStructure(input, stripped);\n if (!structure.ok) {\n return structure.error;\n }\n\n const { parts } = structure;\n\n if (!isValidTituloEleitorChecksum(parts)) {\n return failure('INVALID_CHECK_DIGIT', 'Título de Eleitor check digits are invalid', parts.ufCode);\n }\n\n const uf = resolveUf(parts.ufCode);\n const success: Extract<TituloEleitorValidationResult, { ok: true }> = {\n ok: true,\n value: brandTituloEleitor(stripped),\n format: 'numeric',\n ufCode: parts.ufCode,\n };\n if (uf !== undefined) {\n success.uf = uf;\n } else if (parts.ufCode === TITULO_ELEITOR_EXTERIOR_UF_CODE) {\n success.exterior = true;\n }\n return success;\n}\n"]}
import { validateTelefone } from './chunk-5UL3M7IU.js';
import { validateTituloEleitor } from './chunk-DJUANFIK.js';
import { validateInscricaoEstadual } from './chunk-3QP6R46N.js';
import { isSpRuralIeInput, validateIeProdutorRural } from './chunk-Y6IW2LMW.js';
import { validateNfeChave, NFE_CHAVE_LENGTH } from './chunk-D36RM7OD.js';
import { validatePisPasep } from './chunk-KH7DWOUA.js';
import { validatePlaca, PLACA_LENGTH } from './chunk-WPL47PWJ.js';
import { validateBoleto, detectBoletoInputKind } from './chunk-4W4OKLSZ.js';
import { validateBrCode } from './chunk-WCQUQ2WX.js';
import { validatePixKey } from './chunk-MK7OJUF5.js';
import { validateCartaoCredito, CARTAO_PAN_MIN_LENGTH, CARTAO_PAN_MAX_LENGTH } from './chunk-AK5GVYQ5.js';
import { validateCep } from './chunk-2JJS46FM.js';
import { validateCnh } from './chunk-US4OLTJ2.js';
import { validateCnpj, CNPJ_LENGTH } from './chunk-YXELVV37.js';
import { validateCpf } from './chunk-F6PTZY4O.js';
// src/detect/helpers.ts
function stripDigits(input) {
return input.replace(/\D/g, "");
}
function stripAlnumUpper(input) {
return input.replace(/[^A-Za-z0-9]/g, "").toUpperCase();
}
function hasLetters(input) {
return /[A-Za-z]/.test(input);
}
function looksLikeBrCode(input) {
const trimmed = input.trim();
return trimmed.startsWith("00020") && trimmed.length > 20;
}
function looksLikeBoleto(input) {
const kind = detectBoletoInputKind(input);
return kind === "linha-digitavel" || kind === "codigo-barras";
}
function isBoletoArrecadacao(input) {
return detectBoletoInputKind(input) === "arrecadacao";
}
function looksLikeNfeChave(input) {
const digits = stripDigits(input);
return digits.length === NFE_CHAVE_LENGTH && /^\d+$/.test(digits);
}
function looksLikeCnpjNumeric(input) {
const digits = stripDigits(input);
return digits.length === CNPJ_LENGTH && /^\d+$/.test(digits);
}
function looksLikeCnpjAlphanumeric(input) {
const stripped = stripAlnumUpper(input);
return stripped.length === CNPJ_LENGTH && hasLetters(input);
}
function looksLikeElevenDigits(input) {
const digits = stripDigits(input);
return digits.length === 11 && /^\d+$/.test(digits);
}
function looksLikeTituloEleitor(input) {
const digits = stripDigits(input);
return digits.length === 12 && /^\d+$/.test(digits);
}
function looksLikeCep(input) {
const digits = stripDigits(input);
return digits.length === 8 && /^\d+$/.test(digits);
}
function looksLikePlaca(input) {
const stripped = stripAlnumUpper(input);
return stripped.length === PLACA_LENGTH && /^[A-Z0-9]+$/.test(stripped);
}
function looksLikeCartao(input) {
const withoutMask = input.replace(/[\s-]/g, "");
if (/[^0-9]/.test(withoutMask)) {
return false;
}
const digits = stripDigits(input);
return digits.length >= CARTAO_PAN_MIN_LENGTH && digits.length <= CARTAO_PAN_MAX_LENGTH;
}
function looksLikeIe(input, uf) {
if (!uf) {
return false;
}
if (uf === "SP" && isSpRuralIeInput(input)) {
return true;
}
const digits = stripDigits(input);
return digits.length >= 8 && digits.length <= 14;
}
function looksLikePix(input) {
const trimmed = input.trim();
if (trimmed.includes("@")) {
return true;
}
if (/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(trimmed)) {
return true;
}
if (/^\+?\d/.test(trimmed)) {
const digits = stripDigits(trimmed);
return digits.length === 11 || digits.length === 14;
}
return false;
}
function looksLikeTelefone(input) {
const digits = stripDigits(input);
return digits.length >= 10 && digits.length <= 13;
}
// src/detect/index.ts
function success(type, value, format, meta) {
return { type, ok: true, value, ...format ? { format } : {}, ...meta ? { meta } : {} };
}
function tryValidators(attempts) {
for (const attempt of attempts) {
const result = attempt();
if (result) {
return result;
}
}
return null;
}
var CANDIDATES = [
{
canTry: (raw) => looksLikeBoleto(raw) && !isBoletoArrecadacao(raw),
detect: (raw) => {
const result = validateBoleto(raw);
if (!result.ok) {
return null;
}
return success("boleto", result.value, result.format, {
inputKind: result.inputKind,
situacao: result.situacao
});
}
},
{
canTry: (raw) => looksLikeNfeChave(raw),
detect: (raw) => {
const result = validateNfeChave(raw);
if (!result.ok) {
return null;
}
return success("nfe-chave", result.value, result.format, {
parsed: result.parsed,
uf: result.uf
});
}
},
{
canTry: (raw) => looksLikeBrCode(raw),
detect: (raw) => {
const result = validateBrCode(raw);
if (!result.ok) {
return null;
}
return success("brcode", result.value, result.format, {
merchantName: result.merchantName,
merchantCity: result.merchantCity,
pixKey: result.pixKey,
pixKeyType: result.pixKeyType
});
}
},
{
canTry: (raw) => looksLikeCnpjAlphanumeric(raw),
detect: (raw) => {
const result = validateCnpj(raw);
if (!result.ok) {
return null;
}
return success("cnpj", result.value, result.format);
}
},
{
canTry: (raw) => looksLikeCnpjNumeric(raw),
detect: (raw) => {
const result = validateCnpj(raw);
if (!result.ok) {
return null;
}
return success("cnpj", result.value, result.format);
}
},
{
canTry: (raw) => looksLikeElevenDigits(raw),
detect: (raw) => tryValidators([
() => {
const result = validateCpf(raw);
return result.ok ? success("cpf", result.value, result.format) : null;
},
() => {
const result = validateCnh(raw);
return result.ok ? success("cnh", result.value, result.format) : null;
},
() => {
const result = validatePisPasep(raw);
return result.ok ? success("pis-pasep", result.value, result.format) : null;
}
])
},
{
canTry: (raw) => looksLikeTituloEleitor(raw),
detect: (raw) => {
const result = validateTituloEleitor(raw);
if (!result.ok) {
return null;
}
return success("titulo-eleitor", result.value, result.format, {
ufCode: result.ufCode,
...result.uf ? { uf: result.uf } : {},
...result.exterior ? { exterior: result.exterior } : {}
});
}
},
{
canTry: (raw) => looksLikeCep(raw),
detect: (raw) => {
const result = validateCep(raw);
if (!result.ok) {
return null;
}
return success("cep", result.value, result.format);
}
},
{
canTry: (raw) => looksLikePlaca(raw),
detect: (raw) => {
const result = validatePlaca(raw);
if (!result.ok) {
return null;
}
return success("placa", result.value, result.format);
}
},
{
canTry: (raw) => looksLikePix(raw),
detect: (raw) => {
const result = validatePixKey(raw);
if (!result.ok) {
return null;
}
return success("pix", result.value, result.format, { keyType: result.keyType });
}
},
{
canTry: (raw) => looksLikeTelefone(raw),
detect: (raw) => {
const result = validateTelefone(raw);
if (!result.ok) {
return null;
}
return success("telefone", result.value, result.format, { tipo: result.tipo });
}
},
{
canTry: (raw) => looksLikeCartao(raw),
detect: (raw) => {
const result = validateCartaoCredito(raw);
if (!result.ok) {
return null;
}
return success("cartao-credito", result.value, result.format, { brand: result.brand });
}
},
{
canTry: (raw, options) => looksLikeIe(raw, options.uf),
detect: (raw, options) => {
const uf = options.uf;
if (uf === "SP" && isSpRuralIeInput(raw)) {
const result2 = validateIeProdutorRural(uf, raw);
if (!result2.ok) {
return null;
}
return success("inscricao-estadual-produtor-rural", result2.value, result2.format, { uf: result2.uf });
}
const result = validateInscricaoEstadual(raw, { uf });
if (!result.ok) {
return null;
}
return success("inscricao-estadual", result.value, result.format, { uf: result.uf });
}
}
];
function detect(raw, options = {}) {
const trimmed = raw.trim();
if (trimmed.length === 0) {
return {
type: "unknown",
ok: false,
code: "EMPTY_INPUT",
message: "Input is empty"
};
}
for (const candidate of CANDIDATES) {
if (!candidate.canTry(trimmed, options)) {
continue;
}
const result = candidate.detect(trimmed, options);
if (result?.ok) {
return result;
}
}
return {
type: "unknown",
ok: false,
code: "UNSUPPORTED_FORMAT",
message: options.uf ? "No supported document type matched the input" : "No supported document type matched the input; provide options.uf for Inscri\xE7\xE3o Estadual detection"
};
}
export { detect };
//# sourceMappingURL=chunk-JZNTCZMV.js.map
//# sourceMappingURL=chunk-JZNTCZMV.js.map
{"version":3,"sources":["../src/detect/helpers.ts","../src/detect/index.ts"],"names":["result"],"mappings":"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","file":"chunk-JZNTCZMV.js","sourcesContent":["import { BOLETO_CODIGO_BARRAS_LENGTH, BOLETO_LINHA_LENGTH } from '../core/boleto/constants.js';\nimport { CARTAO_PAN_MAX_LENGTH, CARTAO_PAN_MIN_LENGTH } from '../core/cartao-credito/constants.js';\nimport { CNPJ_LENGTH } from '../core/cnpj/constants.js';\nimport { NFE_CHAVE_LENGTH } from '../core/nfe-chave/constants.js';\nimport { PLACA_LENGTH } from '../core/placa/constants.js';\nimport { detectBoletoInputKind } from '../core/boleto/detect.js';\nimport { isSpRuralIeInput } from '../core/inscricao-estadual/sp-rural.js';\n\nexport function stripDigits(input: string): string {\n return input.replace(/\\D/g, '');\n}\n\nexport function stripAlnumUpper(input: string): string {\n return input.replace(/[^A-Za-z0-9]/g, '').toUpperCase();\n}\n\nexport function hasLetters(input: string): boolean {\n return /[A-Za-z]/.test(input);\n}\n\nexport function looksLikeBrCode(input: string): boolean {\n const trimmed = input.trim();\n return trimmed.startsWith('00020') && trimmed.length > 20;\n}\n\nexport function looksLikeBoleto(input: string): boolean {\n const kind = detectBoletoInputKind(input);\n return kind === 'linha-digitavel' || kind === 'codigo-barras';\n}\n\nexport function isBoletoArrecadacao(input: string): boolean {\n return detectBoletoInputKind(input) === 'arrecadacao';\n}\n\nexport function looksLikeNfeChave(input: string): boolean {\n const digits = stripDigits(input);\n return digits.length === NFE_CHAVE_LENGTH && /^\\d+$/.test(digits);\n}\n\nexport function looksLikeCnpjNumeric(input: string): boolean {\n const digits = stripDigits(input);\n return digits.length === CNPJ_LENGTH && /^\\d+$/.test(digits);\n}\n\nexport function looksLikeCnpjAlphanumeric(input: string): boolean {\n const stripped = stripAlnumUpper(input);\n return stripped.length === CNPJ_LENGTH && hasLetters(input);\n}\n\nexport function looksLikeElevenDigits(input: string): boolean {\n const digits = stripDigits(input);\n return digits.length === 11 && /^\\d+$/.test(digits);\n}\n\nexport function looksLikeTituloEleitor(input: string): boolean {\n const digits = stripDigits(input);\n return digits.length === 12 && /^\\d+$/.test(digits);\n}\n\nexport function looksLikeCep(input: string): boolean {\n const digits = stripDigits(input);\n return digits.length === 8 && /^\\d+$/.test(digits);\n}\n\nexport function looksLikePlaca(input: string): boolean {\n const stripped = stripAlnumUpper(input);\n return stripped.length === PLACA_LENGTH && /^[A-Z0-9]+$/.test(stripped);\n}\n\nexport function looksLikeCartao(input: string): boolean {\n const withoutMask = input.replace(/[\\s-]/g, '');\n if (/[^0-9]/.test(withoutMask)) {\n return false;\n }\n const digits = stripDigits(input);\n return digits.length >= CARTAO_PAN_MIN_LENGTH && digits.length <= CARTAO_PAN_MAX_LENGTH;\n}\n\nexport function looksLikeIe(input: string, uf?: string): boolean {\n if (!uf) {\n return false;\n }\n if (uf === 'SP' && isSpRuralIeInput(input)) {\n return true;\n }\n const digits = stripDigits(input);\n return digits.length >= 8 && digits.length <= 14;\n}\n\nexport function looksLikePix(input: string): boolean {\n const trimmed = input.trim();\n if (trimmed.includes('@')) {\n return true;\n }\n if (/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(trimmed)) {\n return true;\n }\n if (/^\\+?\\d/.test(trimmed)) {\n const digits = stripDigits(trimmed);\n return digits.length === 11 || digits.length === 14;\n }\n return false;\n}\n\nexport function looksLikeTelefone(input: string): boolean {\n const digits = stripDigits(input);\n return digits.length >= 10 && digits.length <= 13;\n}\n\nexport {\n BOLETO_CODIGO_BARRAS_LENGTH,\n BOLETO_LINHA_LENGTH,\n};\n","/**\n * Unified document type detection — delegates to existing validators (BR-DETECT-001).\n * @see docs/VALIDATION-RULES.md\n */\nimport { validateBoleto } from '../core/boleto/index.js';\nimport { validateBrCode } from '../core/brcode/index.js';\nimport { validateCartaoCredito } from '../core/cartao-credito/index.js';\nimport { validateCep } from '../core/cep/index.js';\nimport { validateCnh } from '../core/cnh/index.js';\nimport { validateCnpj } from '../core/cnpj/index.js';\nimport { validateCpf } from '../core/cpf/index.js';\nimport { validateInscricaoEstadual } from '../core/inscricao-estadual/index.js';\nimport { validateIeProdutorRural } from '../core/inscricao-estadual/validate-produtor-rural.js';\nimport { isSpRuralIeInput } from '../core/inscricao-estadual/sp-rural.js';\nimport { validateNfeChave } from '../core/nfe-chave/index.js';\nimport { validatePisPasep } from '../core/pis-pasep/index.js';\nimport { validatePlaca } from '../core/placa/index.js';\nimport { validatePixKey } from '../core/pix/index.js';\nimport { validateTelefone } from '../core/telefone/index.js';\nimport { validateTituloEleitor } from '../core/titulo-eleitor/index.js';\nimport {\n isBoletoArrecadacao,\n looksLikeBoleto,\n looksLikeBrCode,\n looksLikeCartao,\n looksLikeCep,\n looksLikeCnpjAlphanumeric,\n looksLikeCnpjNumeric,\n looksLikeElevenDigits,\n looksLikeIe,\n looksLikeNfeChave,\n looksLikePix,\n looksLikePlaca,\n looksLikeTelefone,\n looksLikeTituloEleitor,\n} from './helpers.js';\nimport type { DocumentFormat, UfCode, ValidationErrorCode } from '../types/validation-result.js';\n\nexport type DetectableDocumentType =\n | 'cpf'\n | 'cnpj'\n | 'cep'\n | 'placa'\n | 'pis-pasep'\n | 'pix'\n | 'telefone'\n | 'boleto'\n | 'cartao-credito'\n | 'cnh'\n | 'renavam'\n | 'nfe-chave'\n | 'titulo-eleitor'\n | 'inscricao-estadual'\n | 'inscricao-estadual-produtor-rural'\n | 'brcode'\n | 'unknown';\n\nexport type DetectOptions = {\n uf?: UfCode;\n};\n\nexport type DetectSuccess = {\n type: DetectableDocumentType;\n ok: true;\n value: string;\n format?: DocumentFormat;\n meta?: Record<string, unknown>;\n};\n\nexport type DetectFailure = {\n type: DetectableDocumentType;\n ok: false;\n code: ValidationErrorCode;\n message: string;\n};\n\nexport type DetectResult = DetectSuccess | DetectFailure;\n\ntype Candidate = {\n canTry: (raw: string, options: DetectOptions) => boolean;\n detect: (raw: string, options: DetectOptions) => DetectResult | null;\n};\n\n/** @internal Test hook for success result branches. */\nexport function buildDetectSuccess(\n type: DetectableDocumentType,\n value: string,\n format?: DocumentFormat,\n meta?: Record<string, unknown>,\n): DetectResult {\n return success(type, value, format, meta);\n}\n\nfunction success(\n type: DetectableDocumentType,\n value: string,\n format?: DocumentFormat,\n meta?: Record<string, unknown>,\n): DetectResult {\n return { type, ok: true, value, ...(format ? { format } : {}), ...(meta ? { meta } : {}) };\n}\n\nfunction tryValidators(attempts: Array<() => DetectResult | null>): DetectResult | null {\n for (const attempt of attempts) {\n const result = attempt();\n if (result) {\n return result;\n }\n }\n return null;\n}\n\nconst CANDIDATES: Candidate[] = [\n {\n canTry: (raw) => looksLikeBoleto(raw) && !isBoletoArrecadacao(raw),\n detect: (raw) => {\n const result = validateBoleto(raw);\n if (!result.ok) {\n return null;\n }\n return success('boleto', result.value, result.format, {\n inputKind: result.inputKind,\n situacao: result.situacao,\n });\n },\n },\n {\n canTry: (raw) => looksLikeNfeChave(raw),\n detect: (raw) => {\n const result = validateNfeChave(raw);\n if (!result.ok) {\n return null;\n }\n return success('nfe-chave', result.value, result.format, {\n parsed: result.parsed,\n uf: result.uf,\n });\n },\n },\n {\n canTry: (raw) => looksLikeBrCode(raw),\n detect: (raw) => {\n const result = validateBrCode(raw);\n if (!result.ok) {\n return null;\n }\n return success('brcode', result.value, result.format, {\n merchantName: result.merchantName,\n merchantCity: result.merchantCity,\n pixKey: result.pixKey,\n pixKeyType: result.pixKeyType,\n });\n },\n },\n {\n canTry: (raw) => looksLikeCnpjAlphanumeric(raw),\n detect: (raw) => {\n const result = validateCnpj(raw);\n if (!result.ok) {\n return null;\n }\n return success('cnpj', result.value, result.format);\n },\n },\n {\n canTry: (raw) => looksLikeCnpjNumeric(raw),\n detect: (raw) => {\n const result = validateCnpj(raw);\n if (!result.ok) {\n return null;\n }\n return success('cnpj', result.value, result.format);\n },\n },\n {\n canTry: (raw) => looksLikeElevenDigits(raw),\n detect: (raw) =>\n tryValidators([\n () => {\n const result = validateCpf(raw);\n return result.ok ? success('cpf', result.value, result.format) : null;\n },\n () => {\n const result = validateCnh(raw);\n return result.ok ? success('cnh', result.value, result.format) : null;\n },\n () => {\n const result = validatePisPasep(raw);\n return result.ok ? success('pis-pasep', result.value, result.format) : null;\n },\n ]),\n },\n {\n canTry: (raw) => looksLikeTituloEleitor(raw),\n detect: (raw) => {\n const result = validateTituloEleitor(raw);\n if (!result.ok) {\n return null;\n }\n return success('titulo-eleitor', result.value, result.format, {\n ufCode: result.ufCode,\n ...(result.uf ? { uf: result.uf } : {}),\n ...(result.exterior ? { exterior: result.exterior } : {}),\n });\n },\n },\n {\n canTry: (raw) => looksLikeCep(raw),\n detect: (raw) => {\n const result = validateCep(raw);\n if (!result.ok) {\n return null;\n }\n return success('cep', result.value, result.format);\n },\n },\n {\n canTry: (raw) => looksLikePlaca(raw),\n detect: (raw) => {\n const result = validatePlaca(raw);\n if (!result.ok) {\n return null;\n }\n return success('placa', result.value, result.format);\n },\n },\n {\n canTry: (raw) => looksLikePix(raw),\n detect: (raw) => {\n const result = validatePixKey(raw);\n if (!result.ok) {\n return null;\n }\n return success('pix', result.value, result.format, { keyType: result.keyType });\n },\n },\n {\n canTry: (raw) => looksLikeTelefone(raw),\n detect: (raw) => {\n const result = validateTelefone(raw);\n if (!result.ok) {\n return null;\n }\n return success('telefone', result.value, result.format, { tipo: result.tipo });\n },\n },\n {\n canTry: (raw) => looksLikeCartao(raw),\n detect: (raw) => {\n const result = validateCartaoCredito(raw);\n if (!result.ok) {\n return null;\n }\n return success('cartao-credito', result.value, result.format, { brand: result.brand });\n },\n },\n {\n canTry: (raw, options) => looksLikeIe(raw, options.uf),\n detect: (raw, options) => {\n const uf = options.uf as UfCode;\n if (uf === 'SP' && isSpRuralIeInput(raw)) {\n const result = validateIeProdutorRural(uf, raw);\n if (!result.ok) {\n return null;\n }\n return success('inscricao-estadual-produtor-rural', result.value, result.format, { uf: result.uf });\n }\n const result = validateInscricaoEstadual(raw, { uf });\n if (!result.ok) {\n return null;\n }\n return success('inscricao-estadual', result.value, result.format, { uf: result.uf });\n },\n },\n];\n\nexport function detect(raw: string, options: DetectOptions = {}): DetectResult {\n const trimmed = raw.trim();\n if (trimmed.length === 0) {\n return {\n type: 'unknown',\n ok: false,\n code: 'EMPTY_INPUT',\n message: 'Input is empty',\n };\n }\n\n for (const candidate of CANDIDATES) {\n if (!candidate.canTry(trimmed, options)) {\n continue;\n }\n const result = candidate.detect(trimmed, options);\n if (result?.ok) {\n return result;\n }\n }\n\n return {\n type: 'unknown',\n ok: false,\n code: 'UNSUPPORTED_FORMAT',\n message: options.uf\n ? 'No supported document type matched the input'\n : 'No supported document type matched the input; provide options.uf for Inscrição Estadual detection',\n };\n}\n"]}
import { validateTituloEleitor, TITULO_ELEITOR_NUMERIC_PATTERN_12, TITULO_ELEITOR_NUMERIC_PATTERN_13, TITULO_ELEITOR_LENGTH, TITULO_ELEITOR_LENGTH_EXTENDED } from './chunk-DJUANFIK.js';
// src/core/titulo-eleitor/mask.ts
function applyTituloEleitorMask(canonical) {
if (TITULO_ELEITOR_NUMERIC_PATTERN_12.test(canonical)) {
return `${canonical.slice(0, 4)} ${canonical.slice(4, 8)} ${canonical.slice(8)}`;
}
if (TITULO_ELEITOR_NUMERIC_PATTERN_13.test(canonical)) {
return `${canonical.slice(0, 5)} ${canonical.slice(5, 9)} ${canonical.slice(9)}`;
}
throw new Error(
`T\xEDtulo de Eleitor must have exactly ${TITULO_ELEITOR_LENGTH} or ${TITULO_ELEITOR_LENGTH_EXTENDED} digits to format`
);
}
// src/format/titulo-eleitor.ts
function formatTituloEleitor(input) {
const result = validateTituloEleitor(input);
if (!result.ok) {
return { ok: false, code: result.code, message: result.message };
}
return { ok: true, formatted: applyTituloEleitorMask(result.value) };
}
export { formatTituloEleitor };
//# sourceMappingURL=chunk-KSLDM5AD.js.map
//# sourceMappingURL=chunk-KSLDM5AD.js.map
{"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-KSLDM5AD.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"]}
import { formatRenavam } from './chunk-CDGRHI7W.js';
import { computeRenavamCheckDigit, RENAVAM_BASE_LENGTH } from './chunk-WLE2ENQA.js';
import { formatTelefone } from './chunk-G2Y63PIF.js';
import { formatTituloEleitor } from './chunk-KSLDM5AD.js';
import { formatPisPasep } from './chunk-IQGRFAQV.js';
import { formatPlaca } from './chunk-G32U6YQ5.js';
import { formatCartaoCredito } from './chunk-XW5G2RAL.js';
import { formatCep } from './chunk-ZAUZRIOU.js';
import { formatCnh } from './chunk-6QJFMOIX.js';
import { formatCnpj } from './chunk-LYBFUKHR.js';
import { formatCpf } from './chunk-NHLLC6WH.js';
import { ANATEL_DDDS, validateTelefone } from './chunk-5UL3M7IU.js';
import { TITULO_ELEITOR_UF_BY_CODE, validateTituloEleitor, TITULO_ELEITOR_SEQUENTIAL_LENGTH, computeTituloEleitorCheckDigits, TITULO_ELEITOR_GOLDEN_PRIMARY, TITULO_ELEITOR_GOLDEN_SP_SPECIAL } from './chunk-DJUANFIK.js';
import { validateInscricaoEstadual, formatInscricaoEstadual } from './chunk-3QP6R46N.js';
import { IE_SP_GOLDEN, IE_MT_GOLDEN_LEGACY, IE_DF_GOLDEN, computeIeToCheckDigit, computeIeRoCheckDigit, computeIeCyclicMod11CheckDigit, computeIeRrCheckDigit, computeIeAmCheckDigit, computeIeAlCheckDigit, IE_AP_PREFIX, computeIeApCheckDigit, IE_GO_PREFIXES, computeIeGoCheckDigit, computeIePeCheckDigit, computeIeBaModule, computeIeBaCheckDigit, computeIeMgFirstCheckDigit, computeIeMgSecondCheckDigit, IE_MT_PREFIX, computeIeMtCheckDigit, IE_DF_PREFIX, computeIeDfCheckDigit, IE_DF_DV1_WEIGHTS, IE_DF_DV2_WEIGHTS, computeIeSpCheckDigit, IE_SP_DV1_WEIGHTS, IE_SP_DV2_WEIGHTS, IE_RR_PREFIX, computeIeCeCheckDigit, IE_AL_PREFIX, computeIePrStyleCheckDigit, IE_RN_PREFIX, IE_MA_PREFIX, IE_PA_PREFIX, IE_MS_PREFIX, computeIeAcCheckDigit, IE_AC_PREFIX } from './chunk-Y6IW2LMW.js';
import { PIS_PASEP_DV_WEIGHTS, PIS_PASEP_BASE_LENGTH } from './chunk-KH7DWOUA.js';
import { PLACA_LEGACY_PATTERN, PLACA_MERCOSUL_PATTERN, validatePlaca } from './chunk-WPL47PWJ.js';
import { detectCardBrand, validateCartaoCredito, CARTAO_GOLDEN_AMEX, CARTAO_GOLDEN_MASTERCARD, CARTAO_GOLDEN_VISA, HIPERCARD_IIN_PREFIXES, ELO_IIN_PREFIXES } from './chunk-AK5GVYQ5.js';
import { validateCep } from './chunk-2JJS46FM.js';
import { computeCnhCheckDigits, CNH_BASE_LENGTH } from './chunk-US4OLTJ2.js';
import { CNPJ_DV1_WEIGHTS, cnpjCharValue, CNPJ_DV2_WEIGHTS, CNPJ_BASE_LENGTH } from './chunk-YXELVV37.js';
import { CPF_DV1_WEIGHTS, CPF_DV2_WEIGHTS, CPF_BASE_LENGTH } from './chunk-F6PTZY4O.js';
import { computeCheckDigit } from './chunk-OTZHMJYE.js';
// src/generate/apply-mask.ts
function applyMask(type, value) {
switch (type) {
case "cpf": {
const result = formatCpf(value);
return result.ok ? result.formatted : value;
}
case "cnpj": {
const result = formatCnpj(value);
return result.ok ? result.formatted : value;
}
case "cep": {
const result = formatCep(value);
return result.ok ? result.formatted : value;
}
case "placa": {
const result = formatPlaca(value);
return result.ok ? result.formatted : value;
}
case "pis-pasep": {
const result = formatPisPasep(value);
return result.ok ? result.formatted : value;
}
case "renavam": {
const result = formatRenavam(value);
return result.ok ? result.formatted : value;
}
case "cnh": {
const result = formatCnh(value);
return result.ok ? result.formatted : value;
}
case "telefone": {
const result = formatTelefone(value);
return result.ok ? result.formatted : value;
}
case "cartao-credito": {
const result = formatCartaoCredito(value);
return result.ok ? result.formatted : value;
}
case "inscricao-estadual":
return value;
case "titulo-eleitor": {
const result = formatTituloEleitor(value);
return result.ok ? result.formatted : value;
}
default: {
const _exhaustive = type;
return _exhaustive;
}
}
}
// src/generate/random.ts
function mulberry32(seed) {
let state = seed >>> 0;
return () => {
state = state + 1831565813 >>> 0;
let t = state;
t = Math.imul(t ^ t >>> 15, t | 1);
t ^= t + Math.imul(t ^ t >>> 7, t | 61);
return ((t ^ t >>> 14) >>> 0) / 4294967296;
};
}
function createRandomSource(seed) {
const nextFn = seed === void 0 ? () => Math.random() : mulberry32(seed);
return {
next: nextFn,
int(min, max) {
return Math.floor(nextFn() * (max - min + 1)) + min;
},
digit() {
return String(Math.floor(nextFn() * 10));
},
digits(count) {
let out = "";
for (let i = 0; i < count; i++) {
out += this.digit();
}
return out;
},
letter() {
const letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
return letters.charAt(this.int(0, letters.length - 1));
},
pick(items) {
return items[this.int(0, items.length - 1)];
}
};
}
function hasRepeatedChars(value) {
const first = value[0];
for (let i = 1; i < value.length; i++) {
if (value[i] !== first) {
return false;
}
}
return true;
}
function computeLuhnCheckDigit(partial) {
let sum = 0;
let double = true;
for (let i = partial.length - 1; i >= 0; i--) {
let digit = Number(partial.charAt(i));
if (double) {
digit *= 2;
if (digit > 9) {
digit -= 9;
}
}
sum += digit;
double = !double;
}
return String((10 - sum % 10) % 10);
}
// src/generate/cartao-credito.ts
var MAX_ATTEMPTS = 50;
var GENERATABLE_CARD_BRANDS = [
"visa",
"mastercard",
"amex",
"elo",
"hipercard"
];
var BRAND_FALLBACKS = {
visa: CARTAO_GOLDEN_VISA,
mastercard: CARTAO_GOLDEN_MASTERCARD,
amex: CARTAO_GOLDEN_AMEX,
elo: "401178000000006",
hipercard: "606282000000003"
};
function buildBrandPartial(rng, brand) {
switch (brand) {
case "visa":
return `411111${rng.digits(9)}`;
case "mastercard":
return `${rng.pick(["51", "52", "53", "54", "55"])}${rng.digits(13)}`;
case "amex":
return `${rng.pick(["34", "37"])}${rng.digits(12)}`;
case "elo": {
const prefix = rng.pick(ELO_IIN_PREFIXES);
return `${prefix}${rng.digits(16 - prefix.length - 1)}`;
}
case "hipercard": {
const prefix = rng.pick(HIPERCARD_IIN_PREFIXES);
return `${prefix}${rng.digits(16 - prefix.length - 1)}`;
}
default: {
const _exhaustive = brand;
return _exhaustive;
}
}
}
function buildRandomPartial(rng) {
const length = rng.int(13, 16);
return rng.digits(length - 1);
}
function generateCartaoCreditoValue(rng, brand, detectBrand = detectCardBrand, validate = validateCartaoCredito) {
for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {
const partial = brand ? buildBrandPartial(rng, brand) : buildRandomPartial(rng);
if (hasRepeatedChars(partial)) {
continue;
}
const candidate = partial + computeLuhnCheckDigit(partial);
if (!validate(candidate).ok) {
continue;
}
if (brand && detectBrand(candidate) !== brand) {
continue;
}
return candidate;
}
if (brand) {
return BRAND_FALLBACKS[brand];
}
return CARTAO_GOLDEN_VISA;
}
function isGeneratableCardBrand(brand) {
return GENERATABLE_CARD_BRANDS.includes(brand);
}
// src/generate/inscricao-estadual.ts
var MAX_ATTEMPTS2 = 50;
var IE_GENERATE_FALLBACKS = {
AC: "0113253877910",
AL: "248682954",
AM: "917050150",
AP: "039045820",
BA: "63984300",
CE: "836182316",
DF: IE_DF_GOLDEN,
ES: "463921810",
GO: "112237118",
MA: "123517680",
MG: "2490944173923",
MS: "282570926",
MT: IE_MT_GOLDEN_LEGACY,
PA: "153662476",
PB: "312029063",
PE: "064970639",
PI: "465180426",
PR: "0031595584",
RJ: "06540481",
RN: "204502292",
RO: "39206839474860",
RR: "247681047",
RS: "3288345503",
SC: "632480718",
SE: "826594042",
SP: IE_SP_GOLDEN,
TO: "27035910938"
};
function prefixBody8(rng, prefix) {
return prefix + rng.digits(8 - prefix.length);
}
function buildCeStyle(rng, prefix) {
const body = prefix ? prefixBody8(rng, prefix) : rng.digits(8);
return body + String(computeIeCeCheckDigit(body));
}
function buildDualTrailing(rng, prefix, bodyLength, computeFirst, computeSecond) {
const body = prefix + rng.digits(bodyLength - prefix.length);
const first = computeFirst(body);
const second = computeSecond(body + String(first));
return body + String(first) + String(second);
}
function generateSpValue(rng) {
const head = rng.digits(8);
const middle = rng.digits(2);
let partial = `${head}0${middle}0`;
const dv1 = computeIeSpCheckDigit(partial, IE_SP_DV1_WEIGHTS);
partial = `${head}${String(dv1)}${middle}0`;
const dv2 = computeIeSpCheckDigit(partial, IE_SP_DV2_WEIGHTS);
return `${head}${String(dv1)}${middle}${String(dv2)}`;
}
function generateDfValue(rng) {
const core11 = IE_DF_PREFIX + rng.digits(9);
const dv1 = computeIeDfCheckDigit(core11, IE_DF_DV1_WEIGHTS);
const dv2 = computeIeDfCheckDigit(core11, IE_DF_DV2_WEIGHTS, true, dv1);
return `${core11}${String(dv1)}${String(dv2)}`;
}
function generateMtValue(rng) {
const padded = `${IE_MT_PREFIX.padStart(4, "0")}${rng.digits(6)}`;
const dv = computeIeMtCheckDigit(padded.slice(0, 10));
return `${padded.slice(0, 10)}${String(dv)}`;
}
function generateMgValue(rng) {
const body = rng.digits(11);
const first = computeIeMgFirstCheckDigit(body);
const second = computeIeMgSecondCheckDigit(body + String(first));
return body + String(first) + String(second);
}
function generateBaValue(rng) {
const body = rng.digits(6);
const mod = computeIeBaModule(`${body}00`);
const second = computeIeBaCheckDigit(body, mod);
const first = computeIeBaCheckDigit(body + String(second), mod);
return body + String(first) + String(second);
}
function generatePeValue(rng) {
const body = rng.digits(7);
const first = computeIePeCheckDigit(body);
const second = computeIePeCheckDigit(body + String(first));
return body + String(first) + String(second);
}
function generateGoValue(rng) {
const prefix = rng.pick([...IE_GO_PREFIXES]);
const body = prefix + rng.digits(6);
return body + String(computeIeGoCheckDigit(body));
}
function generateApValue(rng) {
const body = IE_AP_PREFIX + rng.digits(6);
const dv = computeIeApCheckDigit(body);
return body + String(dv);
}
var GENERATORS = {
SP: generateSpValue,
DF: generateDfValue,
MT: generateMtValue,
MG: generateMgValue,
BA: generateBaValue,
PE: generatePeValue,
GO: generateGoValue,
AP: generateApValue,
AC: (rng) => buildDualTrailing(rng, IE_AC_PREFIX, 11, computeIeAcCheckDigit, computeIeAcCheckDigit),
AL: (rng) => {
const body = prefixBody8(rng, IE_AL_PREFIX);
return body + String(computeIeAlCheckDigit(body));
},
AM: (rng) => {
const body = rng.digits(8);
return body + String(computeIeAmCheckDigit(body));
},
CE: (rng) => buildCeStyle(rng),
ES: (rng) => buildCeStyle(rng),
SC: (rng) => buildCeStyle(rng),
SE: (rng) => buildCeStyle(rng),
PB: (rng) => buildCeStyle(rng),
PI: (rng) => buildCeStyle(rng),
MS: (rng) => buildCeStyle(rng, IE_MS_PREFIX),
PA: (rng) => buildCeStyle(rng, IE_PA_PREFIX),
MA: (rng) => buildCeStyle(rng, IE_MA_PREFIX),
RN: (rng) => buildCeStyle(rng, IE_RN_PREFIX),
RR: (rng) => {
const body = prefixBody8(rng, IE_RR_PREFIX);
return body + String(computeIeRrCheckDigit(body));
},
PR: (rng) => buildDualTrailing(rng, "", 8, computeIePrStyleCheckDigit, computeIePrStyleCheckDigit),
RJ: (rng) => {
const body = rng.digits(7);
return body + String(computeIeCyclicMod11CheckDigit(body, 2, 7));
},
RS: (rng) => {
const body = rng.digits(9);
return body + String(computeIeCyclicMod11CheckDigit(body, 2, 9));
},
RO: (rng) => {
const body = rng.digits(13);
return body + String(computeIeRoCheckDigit(body));
},
TO: (rng) => {
const body = rng.digits(8);
return body + String(computeIeToCheckDigit(body));
}
};
function generateInscricaoEstadualValue(uf, rng, validate = validateInscricaoEstadual) {
const generator = GENERATORS[uf];
for (let attempt = 0; attempt < MAX_ATTEMPTS2; attempt++) {
const candidate = generator(rng);
if (validate(candidate, { uf }).ok) {
return candidate;
}
}
return IE_GENERATE_FALLBACKS[uf];
}
// src/generate/titulo-eleitor.ts
var MAX_ATTEMPTS3 = 50;
var TITULO_ELEITOR_CODE_BY_UF = Object.fromEntries(
Object.entries(TITULO_ELEITOR_UF_BY_CODE).map(([code, uf]) => [uf, Number(code)])
);
var TITULO_GENERATE_FALLBACKS = {
SP: TITULO_ELEITOR_GOLDEN_SP_SPECIAL,
SC: TITULO_ELEITOR_GOLDEN_PRIMARY
};
function deterministicTituloFallback(uf) {
const ufCode = TITULO_ELEITOR_CODE_BY_UF[uf];
const ufDigits = String(ufCode).padStart(2, "0");
const sequential = "12345678";
const checkDigits = computeTituloEleitorCheckDigits(sequential, ufDigits, ufCode);
return `${sequential}${ufDigits}${checkDigits}`;
}
function generateTituloEleitorValue(uf, rng, validate = validateTituloEleitor) {
const ufCode = TITULO_ELEITOR_CODE_BY_UF[uf];
const ufDigits = String(ufCode).padStart(2, "0");
for (let attempt = 0; attempt < MAX_ATTEMPTS3; attempt++) {
const sequential = rng.digits(TITULO_ELEITOR_SEQUENTIAL_LENGTH);
if (hasRepeatedChars(sequential)) {
continue;
}
const checkDigits = computeTituloEleitorCheckDigits(sequential, ufDigits, ufCode);
const candidate = `${sequential}${ufDigits}${checkDigits}`;
if (validate(candidate).ok) {
return candidate;
}
}
return TITULO_GENERATE_FALLBACKS[uf] ?? deterministicTituloFallback(uf);
}
// src/generate/index.ts
var CNPJ_ALNUM_CHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var MAX_ATTEMPTS4 = 50;
function digitValue(char) {
return Number(char);
}
function randomBaseDigits(rng, length) {
for (let attempt = 0; attempt < MAX_ATTEMPTS4; attempt++) {
const base = rng.digits(length);
if (!hasRepeatedChars(base)) {
return base;
}
}
return "123456789".slice(0, length).padEnd(length, "1");
}
function randomCnpjAlphanumericBase(rng) {
for (let attempt = 0; attempt < MAX_ATTEMPTS4; attempt++) {
let base = "";
for (let i = 0; i < CNPJ_BASE_LENGTH; i++) {
base += CNPJ_ALNUM_CHARS.charAt(rng.int(0, CNPJ_ALNUM_CHARS.length - 1));
}
if (!hasRepeatedChars(base)) {
return base;
}
}
return "12ABC34501DE";
}
function generateCpfValue(rng) {
const base = randomBaseDigits(rng, CPF_BASE_LENGTH);
const dv1 = String(computeCheckDigit(base, CPF_DV1_WEIGHTS, digitValue));
const dv2 = String(computeCheckDigit(base + dv1, CPF_DV2_WEIGHTS, digitValue));
return base + dv1 + dv2;
}
function generateCnpjValue(rng, format) {
if (format === "alphanumeric") {
const base2 = randomCnpjAlphanumericBase(rng);
const dv12 = String(computeCheckDigit(base2, CNPJ_DV1_WEIGHTS, cnpjCharValue));
const dv22 = String(computeCheckDigit(base2 + dv12, CNPJ_DV2_WEIGHTS, cnpjCharValue));
return base2 + dv12 + dv22;
}
const base = randomBaseDigits(rng, CNPJ_BASE_LENGTH);
const dv1 = String(computeCheckDigit(base, CNPJ_DV1_WEIGHTS, digitValue));
const dv2 = String(computeCheckDigit(base + dv1, CNPJ_DV2_WEIGHTS, digitValue));
return base + dv1 + dv2;
}
function generateCepValue(rng) {
for (let attempt = 0; attempt < MAX_ATTEMPTS4; attempt++) {
const value = rng.digits(8);
if (value !== "00000000" && validateCep(value).ok) {
return value;
}
}
return "01310100";
}
function generatePlacaValue(rng, format) {
const mode = format === "legacy" ? "legacy" : "mercosul";
for (let attempt = 0; attempt < MAX_ATTEMPTS4; attempt++) {
const letters = rng.letter() + rng.letter() + rng.letter();
let candidate;
if (mode === "legacy") {
candidate = letters + rng.digits(4);
if (!PLACA_LEGACY_PATTERN.test(candidate)) {
continue;
}
} else {
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);
if (!PLACA_MERCOSUL_PATTERN.test(candidate)) {
continue;
}
}
if (validatePlaca(candidate).ok) {
return candidate;
}
}
return mode === "legacy" ? "ABC1234" : "ABC1D23";
}
function generatePisValue(rng) {
const base = randomBaseDigits(rng, PIS_PASEP_BASE_LENGTH);
const dv = String(computeCheckDigit(base, PIS_PASEP_DV_WEIGHTS, digitValue));
return base + dv;
}
function generateRenavamValue(rng) {
const base = randomBaseDigits(rng, RENAVAM_BASE_LENGTH);
const dv = String(computeRenavamCheckDigit(base));
return base + dv;
}
function generateCnhValue(rng) {
const base = randomBaseDigits(rng, CNH_BASE_LENGTH);
return base + computeCnhCheckDigits(base);
}
function generateTelefoneValue(rng, format) {
const ddd = rng.pick(ANATEL_DDDS);
const useFixo = format === "fixo";
for (let attempt = 0; attempt < MAX_ATTEMPTS4; attempt++) {
const local = useFixo ? String(rng.int(2, 5)) + rng.digits(7) : `9${rng.digits(8)}`;
const candidate = ddd + local;
if (validateTelefone(candidate).ok) {
return candidate;
}
}
return useFixo ? "1133333333" : "11999999999";
}
function generateCartaoValue(rng, brand) {
return generateCartaoCreditoValue(rng, brand);
}
function applyInscricaoEstadualGenerateMask(value, uf) {
const formatted = formatInscricaoEstadual(value, { uf });
return formatted.ok ? formatted.formatted : value;
}
function generate(type, options = {}) {
const rng = createRandomSource(options.seed);
let value;
switch (type) {
case "cpf":
value = generateCpfValue(rng);
break;
case "cnpj":
value = generateCnpjValue(rng, options.format);
break;
case "cep":
value = generateCepValue(rng);
break;
case "placa":
value = generatePlacaValue(rng, options.format);
break;
case "pis-pasep":
value = generatePisValue(rng);
break;
case "renavam":
value = generateRenavamValue(rng);
break;
case "cnh":
value = generateCnhValue(rng);
break;
case "telefone":
value = generateTelefoneValue(rng, options.format);
break;
case "cartao-credito":
value = generateCartaoValue(rng, options.brand);
break;
case "inscricao-estadual": {
if (!options.uf) {
throw new Error("UF is required for inscricao-estadual generation");
}
value = generateInscricaoEstadualValue(options.uf, rng);
break;
}
case "titulo-eleitor": {
if (!options.uf) {
throw new Error("UF is required for titulo-eleitor generation");
}
value = generateTituloEleitorValue(options.uf, rng);
break;
}
default: {
const _exhaustive = type;
throw new Error(`Unsupported generatable type: ${String(_exhaustive)}`);
}
}
if (options.masked && type === "inscricao-estadual") {
return applyInscricaoEstadualGenerateMask(value, options.uf);
}
return options.masked ? applyMask(type, value) : value;
}
export { GENERATABLE_CARD_BRANDS, generate, isGeneratableCardBrand };
//# sourceMappingURL=chunk-Q7B5VOPW.js.map
//# sourceMappingURL=chunk-Q7B5VOPW.js.map
{"version":3,"sources":["../src/generate/apply-mask.ts","../src/generate/random.ts","../src/generate/cartao-credito.ts","../src/generate/inscricao-estadual.ts","../src/generate/titulo-eleitor.ts","../src/generate/index.ts"],"names":["MAX_ATTEMPTS","base","dv1","dv2"],"mappings":"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","file":"chunk-Q7B5VOPW.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 { formatTituloEleitor } from '../format/titulo-eleitor.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 case 'inscricao-estadual':\n return value;\n case 'titulo-eleitor': {\n const result = formatTituloEleitor(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 credit card PAN generation — Luhn + brand IIN prefixes (BR-GENERATE-001).\n */\nimport type { CardBrand } from '../core/cartao-credito/constants.js';\nimport {\n CARTAO_GOLDEN_AMEX,\n CARTAO_GOLDEN_MASTERCARD,\n CARTAO_GOLDEN_VISA,\n ELO_IIN_PREFIXES,\n HIPERCARD_IIN_PREFIXES,\n} from '../core/cartao-credito/constants.js';\nimport { detectCardBrand } from '../core/cartao-credito/detect-brand.js';\nimport { validateCartaoCredito } from '../core/cartao-credito/index.js';\nimport { computeLuhnCheckDigit, hasRepeatedChars, type RandomSource } from './random.js';\n\nconst MAX_ATTEMPTS = 50;\n\nexport type GeneratableCardBrand = Exclude<CardBrand, 'unknown'>;\n\nexport const GENERATABLE_CARD_BRANDS: readonly GeneratableCardBrand[] = [\n 'visa',\n 'mastercard',\n 'amex',\n 'elo',\n 'hipercard',\n] as const;\n\nconst BRAND_FALLBACKS: Record<GeneratableCardBrand, string> = {\n visa: CARTAO_GOLDEN_VISA,\n mastercard: CARTAO_GOLDEN_MASTERCARD,\n amex: CARTAO_GOLDEN_AMEX,\n elo: '401178000000006',\n hipercard: '606282000000003',\n};\n\nfunction buildBrandPartial(rng: RandomSource, brand: GeneratableCardBrand): string {\n switch (brand) {\n case 'visa':\n return `411111${rng.digits(9)}`;\n case 'mastercard':\n return `${rng.pick(['51', '52', '53', '54', '55'])}${rng.digits(13)}`;\n case 'amex':\n return `${rng.pick(['34', '37'])}${rng.digits(12)}`;\n case 'elo': {\n const prefix = rng.pick(ELO_IIN_PREFIXES);\n return `${prefix}${rng.digits(16 - prefix.length - 1)}`;\n }\n case 'hipercard': {\n const prefix = rng.pick(HIPERCARD_IIN_PREFIXES);\n return `${prefix}${rng.digits(16 - prefix.length - 1)}`;\n }\n default: {\n const _exhaustive: never = brand;\n return _exhaustive;\n }\n }\n}\n\nfunction buildRandomPartial(rng: RandomSource): string {\n const length = rng.int(13, 16);\n return rng.digits(length - 1);\n}\n\nexport function generateCartaoCreditoValue(\n rng: RandomSource,\n brand?: GeneratableCardBrand,\n detectBrand: (pan: string) => CardBrand = detectCardBrand,\n validate: (input: string) => ReturnType<typeof validateCartaoCredito> = validateCartaoCredito,\n): string {\n for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {\n const partial = brand ? buildBrandPartial(rng, brand) : buildRandomPartial(rng);\n if (hasRepeatedChars(partial)) {\n continue;\n }\n const candidate = partial + computeLuhnCheckDigit(partial);\n if (!validate(candidate).ok) {\n continue;\n }\n if (brand && detectBrand(candidate) !== brand) {\n continue;\n }\n return candidate;\n }\n\n if (brand) {\n return BRAND_FALLBACKS[brand];\n }\n return CARTAO_GOLDEN_VISA;\n}\n\nexport function isGeneratableCardBrand(brand: string): brand is GeneratableCardBrand {\n return (GENERATABLE_CARD_BRANDS as readonly string[]).includes(brand);\n}\n\nconst brandHookRng: 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 randomHookRng: RandomSource = {\n ...brandHookRng,\n int: () => 16,\n};\n\n/** @internal Test hooks for cartao generator branches. */\nexport const __generateCartaoTesting = {\n fallback: (brand: GeneratableCardBrand) => BRAND_FALLBACKS[brand],\n buildBrandPartial: (brand: GeneratableCardBrand) => buildBrandPartial(brandHookRng, brand),\n buildRandomPartial: () => buildRandomPartial(randomHookRng),\n generateWithAlwaysWrongBrand: (brand: GeneratableCardBrand, rng: RandomSource) =>\n generateCartaoCreditoValue(rng, brand, () => 'unknown'),\n generateWithAlwaysInvalidValidation: (rng: RandomSource) =>\n generateCartaoCreditoValue(rng, undefined, detectCardBrand, () => ({\n ok: false,\n code: 'INVALID_CHECK_DIGIT',\n message: 'forced invalid for test',\n })),\n invokeBuildBrandPartialDefault: () =>\n buildBrandPartial(brandHookRng, 'invalid' as GeneratableCardBrand),\n touchHookRngMethods: () => {\n for (const rng of [brandHookRng, randomHookRng]) {\n rng.next();\n rng.int(1, 16);\n rng.digit();\n rng.digits(3);\n rng.letter();\n rng.pick(['a']);\n }\n },\n};\n","/**\n * Synthetic Inscrição Estadual generation — reuses modulo-ie helpers (BR-GENERATE-001).\n * @see docs/IE-STATE-ALGORITHMS.md\n */\nimport {\n IE_AC_PREFIX,\n IE_AL_PREFIX,\n IE_AP_PREFIX,\n IE_DF_DV1_WEIGHTS,\n IE_DF_DV2_WEIGHTS,\n IE_DF_GOLDEN,\n IE_DF_PREFIX,\n IE_GO_PREFIXES,\n IE_MA_PREFIX,\n IE_MS_PREFIX,\n IE_MT_GOLDEN_LEGACY,\n IE_MT_PREFIX,\n IE_PA_PREFIX,\n IE_RN_PREFIX,\n IE_RR_PREFIX,\n IE_SP_DV1_WEIGHTS,\n IE_SP_DV2_WEIGHTS,\n IE_SP_GOLDEN,\n IE_SUPPORTED_UFS,\n} from '../core/inscricao-estadual/constants.js';\nimport {\n computeIeAcCheckDigit,\n computeIeAlCheckDigit,\n computeIeAmCheckDigit,\n computeIeApCheckDigit,\n computeIeBaCheckDigit,\n computeIeBaModule,\n computeIeCeCheckDigit,\n computeIeCyclicMod11CheckDigit,\n computeIeDfCheckDigit,\n computeIeGoCheckDigit,\n computeIeMgFirstCheckDigit,\n computeIeMgSecondCheckDigit,\n computeIeMtCheckDigit,\n computeIePeCheckDigit,\n computeIePrStyleCheckDigit,\n computeIeRoCheckDigit,\n computeIeRrCheckDigit,\n computeIeSpCheckDigit,\n computeIeToCheckDigit,\n} from '../core/inscricao-estadual/modulo-ie.js';\nimport { validateInscricaoEstadual } from '../core/inscricao-estadual/index.js';\nimport type { UfCode } from '../types/validation-result.js';\nimport type { RandomSource } from './random.js';\n\nconst MAX_ATTEMPTS = 50;\n\n/** Official golden stripped values — fallback when random synthesis fails. */\nexport const IE_GENERATE_FALLBACKS: Record<UfCode, string> = {\n AC: '0113253877910',\n AL: '248682954',\n AM: '917050150',\n AP: '039045820',\n BA: '63984300',\n CE: '836182316',\n DF: IE_DF_GOLDEN,\n ES: '463921810',\n GO: '112237118',\n MA: '123517680',\n MG: '2490944173923',\n MS: '282570926',\n MT: IE_MT_GOLDEN_LEGACY,\n PA: '153662476',\n PB: '312029063',\n PE: '064970639',\n PI: '465180426',\n PR: '0031595584',\n RJ: '06540481',\n RN: '204502292',\n RO: '39206839474860',\n RR: '247681047',\n RS: '3288345503',\n SC: '632480718',\n SE: '826594042',\n SP: IE_SP_GOLDEN,\n TO: '27035910938',\n};\n\nfunction prefixBody8(rng: RandomSource, prefix: string): string {\n return prefix + rng.digits(8 - prefix.length);\n}\n\nfunction buildCeStyle(rng: RandomSource, prefix?: string): string {\n const body = prefix ? prefixBody8(rng, prefix) : rng.digits(8);\n return body + String(computeIeCeCheckDigit(body));\n}\n\nfunction buildDualTrailing(\n rng: RandomSource,\n prefix: string,\n bodyLength: number,\n computeFirst: (body: string) => number,\n computeSecond: (body: string) => number,\n): string {\n const body = prefix + rng.digits(bodyLength - prefix.length);\n const first = computeFirst(body);\n const second = computeSecond(body + String(first));\n return body + String(first) + String(second);\n}\n\nfunction generateSpValue(rng: RandomSource): string {\n const head = rng.digits(8);\n const middle = rng.digits(2);\n let partial = `${head}0${middle}0`;\n const dv1 = computeIeSpCheckDigit(partial, IE_SP_DV1_WEIGHTS);\n partial = `${head}${String(dv1)}${middle}0`;\n const dv2 = computeIeSpCheckDigit(partial, IE_SP_DV2_WEIGHTS);\n return `${head}${String(dv1)}${middle}${String(dv2)}`;\n}\n\nfunction generateDfValue(rng: RandomSource): string {\n const core11 = IE_DF_PREFIX + rng.digits(9);\n const dv1 = computeIeDfCheckDigit(core11, IE_DF_DV1_WEIGHTS);\n const dv2 = computeIeDfCheckDigit(core11, IE_DF_DV2_WEIGHTS, true, dv1);\n return `${core11}${String(dv1)}${String(dv2)}`;\n}\n\nfunction generateMtValue(rng: RandomSource): string {\n const padded = `${IE_MT_PREFIX.padStart(4, '0')}${rng.digits(6)}`;\n const dv = computeIeMtCheckDigit(padded.slice(0, 10));\n return `${padded.slice(0, 10)}${String(dv)}`;\n}\n\nfunction generateMgValue(rng: RandomSource): string {\n const body = rng.digits(11);\n const first = computeIeMgFirstCheckDigit(body);\n const second = computeIeMgSecondCheckDigit(body + String(first));\n return body + String(first) + String(second);\n}\n\nfunction generateBaValue(rng: RandomSource): string {\n const body = rng.digits(6);\n const mod = computeIeBaModule(`${body}00`);\n const second = computeIeBaCheckDigit(body, mod);\n const first = computeIeBaCheckDigit(body + String(second), mod);\n return body + String(first) + String(second);\n}\n\nfunction generatePeValue(rng: RandomSource): string {\n const body = rng.digits(7);\n const first = computeIePeCheckDigit(body);\n const second = computeIePeCheckDigit(body + String(first));\n return body + String(first) + String(second);\n}\n\nfunction generateGoValue(rng: RandomSource): string {\n const prefix = rng.pick([...IE_GO_PREFIXES]);\n const body = prefix + rng.digits(6);\n return body + String(computeIeGoCheckDigit(body));\n}\n\nfunction generateApValue(rng: RandomSource): string {\n const body = IE_AP_PREFIX + rng.digits(6);\n const dv = computeIeApCheckDigit(body);\n return body + String(dv);\n}\n\nconst GENERATORS: Record<UfCode, (rng: RandomSource) => string> = {\n SP: generateSpValue,\n DF: generateDfValue,\n MT: generateMtValue,\n MG: generateMgValue,\n BA: generateBaValue,\n PE: generatePeValue,\n GO: generateGoValue,\n AP: generateApValue,\n AC: (rng) =>\n buildDualTrailing(rng, IE_AC_PREFIX, 11, computeIeAcCheckDigit, computeIeAcCheckDigit),\n AL: (rng) => {\n const body = prefixBody8(rng, IE_AL_PREFIX);\n return body + String(computeIeAlCheckDigit(body));\n },\n AM: (rng) => {\n const body = rng.digits(8);\n return body + String(computeIeAmCheckDigit(body));\n },\n CE: (rng) => buildCeStyle(rng),\n ES: (rng) => buildCeStyle(rng),\n SC: (rng) => buildCeStyle(rng),\n SE: (rng) => buildCeStyle(rng),\n PB: (rng) => buildCeStyle(rng),\n PI: (rng) => buildCeStyle(rng),\n MS: (rng) => buildCeStyle(rng, IE_MS_PREFIX),\n PA: (rng) => buildCeStyle(rng, IE_PA_PREFIX),\n MA: (rng) => buildCeStyle(rng, IE_MA_PREFIX),\n RN: (rng) => buildCeStyle(rng, IE_RN_PREFIX),\n RR: (rng) => {\n const body = prefixBody8(rng, IE_RR_PREFIX);\n return body + String(computeIeRrCheckDigit(body));\n },\n PR: (rng) =>\n buildDualTrailing(rng, '', 8, computeIePrStyleCheckDigit, computeIePrStyleCheckDigit),\n RJ: (rng) => {\n const body = rng.digits(7);\n return body + String(computeIeCyclicMod11CheckDigit(body, 2, 7));\n },\n RS: (rng) => {\n const body = rng.digits(9);\n return body + String(computeIeCyclicMod11CheckDigit(body, 2, 9));\n },\n RO: (rng) => {\n const body = rng.digits(13);\n return body + String(computeIeRoCheckDigit(body));\n },\n TO: (rng) => {\n const body = rng.digits(8);\n return body + String(computeIeToCheckDigit(body));\n },\n};\n\nexport function generateInscricaoEstadualValue(\n uf: UfCode,\n rng: RandomSource,\n validate: (input: string, options: { uf: UfCode }) => ReturnType<typeof validateInscricaoEstadual> = validateInscricaoEstadual,\n): string {\n const generator = GENERATORS[uf];\n\n for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {\n const candidate = generator(rng);\n if (validate(candidate, { uf }).ok) {\n return candidate;\n }\n }\n\n return IE_GENERATE_FALLBACKS[uf];\n}\n\nexport function isSupportedGenerateUf(uf: string): uf is UfCode {\n return (IE_SUPPORTED_UFS as readonly string[]).includes(uf);\n}\n\n/** @internal Test hooks for IE generator branches. */\nexport const __generateIeTesting = {\n fallback: (uf: UfCode) => IE_GENERATE_FALLBACKS[uf],\n generateWithAlwaysInvalidValidation: (uf: UfCode, rng: RandomSource) =>\n generateInscricaoEstadualValue(uf, rng, () => ({\n ok: false,\n code: 'INVALID_CHECK_DIGIT',\n message: 'forced invalid for test',\n })),\n};\n","/**\n * Synthetic Título de Eleitor generation — reuses TSE modulo 11 helpers (BR-GENERATE-001).\n */\nimport {\n TITULO_ELEITOR_GOLDEN_PRIMARY,\n TITULO_ELEITOR_GOLDEN_SP_SPECIAL,\n TITULO_ELEITOR_SEQUENTIAL_LENGTH,\n TITULO_ELEITOR_UF_BY_CODE,\n} from '../core/titulo-eleitor/constants.js';\nimport { computeTituloEleitorCheckDigits } from '../core/titulo-eleitor/check-digits.js';\nimport { validateTituloEleitor } from '../core/titulo-eleitor/index.js';\nimport type { UfCode } from '../types/validation-result.js';\nimport { hasRepeatedChars, type RandomSource } from './random.js';\n\nconst MAX_ATTEMPTS = 50;\n\nconst TITULO_ELEITOR_CODE_BY_UF = Object.fromEntries(\n Object.entries(TITULO_ELEITOR_UF_BY_CODE).map(([code, uf]) => [uf, Number(code)]),\n) as Record<UfCode, number>;\n\nconst TITULO_GENERATE_FALLBACKS: Partial<Record<UfCode, string>> = {\n SP: TITULO_ELEITOR_GOLDEN_SP_SPECIAL,\n SC: TITULO_ELEITOR_GOLDEN_PRIMARY,\n};\n\nfunction deterministicTituloFallback(uf: UfCode): string {\n const ufCode = TITULO_ELEITOR_CODE_BY_UF[uf];\n const ufDigits = String(ufCode).padStart(2, '0');\n const sequential = '12345678';\n const checkDigits = computeTituloEleitorCheckDigits(sequential, ufDigits, ufCode);\n return `${sequential}${ufDigits}${checkDigits}`;\n}\n\nexport function resolveTituloEleitorUfCode(uf: UfCode): number {\n return TITULO_ELEITOR_CODE_BY_UF[uf];\n}\n\nexport function generateTituloEleitorValue(\n uf: UfCode,\n rng: RandomSource,\n validate: (input: string) => ReturnType<typeof validateTituloEleitor> = validateTituloEleitor,\n): string {\n const ufCode = TITULO_ELEITOR_CODE_BY_UF[uf];\n const ufDigits = String(ufCode).padStart(2, '0');\n\n for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {\n const sequential = rng.digits(TITULO_ELEITOR_SEQUENTIAL_LENGTH);\n if (hasRepeatedChars(sequential)) {\n continue;\n }\n const checkDigits = computeTituloEleitorCheckDigits(sequential, ufDigits, ufCode);\n const candidate = `${sequential}${ufDigits}${checkDigits}`;\n if (validate(candidate).ok) {\n return candidate;\n }\n }\n\n return TITULO_GENERATE_FALLBACKS[uf] ?? deterministicTituloFallback(uf);\n}\n\nexport function isSupportedTituloGenerateUf(uf: string): uf is UfCode {\n return uf in TITULO_ELEITOR_CODE_BY_UF;\n}\n\n/** @internal Test hooks for titulo generator branches. */\nexport const __generateTituloTesting = {\n fallback: (uf: UfCode) => TITULO_GENERATE_FALLBACKS[uf] ?? deterministicTituloFallback(uf),\n generateWithAlwaysInvalidValidation: (uf: UfCode, rng: RandomSource) =>\n generateTituloEleitorValue(uf, rng, () => ({\n ok: false,\n code: 'INVALID_CHECK_DIGIT',\n message: 'forced invalid for test',\n })),\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 { validatePlaca } from '../core/placa/index.js';\nimport { validateTelefone } from '../core/telefone/index.js';\nimport { applyMask } from './apply-mask.js';\nimport { generateCartaoCreditoValue, type GeneratableCardBrand } from './cartao-credito.js';\nimport { generateInscricaoEstadualValue } from './inscricao-estadual.js';\nimport { generateTituloEleitorValue } from './titulo-eleitor.js';\nimport { createRandomSource, hasRepeatedChars, type RandomSource } from './random.js';\nimport type { UfCode } from '../types/validation-result.js';\nimport { formatInscricaoEstadual } from '../core/inscricao-estadual/index.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 | 'inscricao-estadual'\n | 'titulo-eleitor';\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 uf?: UfCode;\n brand?: GeneratableCardBrand;\n};\n\nexport type { GeneratableCardBrand } from './cartao-credito.js';\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, brand?: GeneratableCardBrand): string {\n return generateCartaoCreditoValue(rng, brand);\n}\n\nfunction applyInscricaoEstadualGenerateMask(value: string, uf: UfCode): string {\n const formatted = formatInscricaoEstadual(value, { uf });\n return formatted.ok ? formatted.formatted : value;\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, options.brand);\n break;\n case 'inscricao-estadual': {\n if (!options.uf) {\n throw new Error('UF is required for inscricao-estadual generation');\n }\n value = generateInscricaoEstadualValue(options.uf, rng);\n break;\n }\n case 'titulo-eleitor': {\n if (!options.uf) {\n throw new Error('UF is required for titulo-eleitor generation');\n }\n value = generateTituloEleitorValue(options.uf, rng);\n break;\n }\n default: {\n const _exhaustive: never = type;\n throw new Error(`Unsupported generatable type: ${String(_exhaustive)}`);\n }\n }\n\n if (options.masked && type === 'inscricao-estadual') {\n return applyInscricaoEstadualGenerateMask(value, options.uf!);\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 generateCartaoValueForBrand: (brand: GeneratableCardBrand) => generateCartaoValue(repeatingRng, brand),\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 generateInscricaoEstadualValue: (uf: UfCode) => generateInscricaoEstadualValue(uf, repeatingRng),\n generateTituloEleitorValue: (uf: UfCode) => generateTituloEleitorValue(uf, repeatingRng),\n applyInscricaoEstadualGenerateMask: (value: string, uf: UfCode) =>\n applyInscricaoEstadualGenerateMask(value, uf),\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"]}
import { validateCartaoCredito, applyCartaoCreditoMask } from './chunk-AK5GVYQ5.js';
// src/format/cartao-credito.ts
function formatCartaoCredito(input) {
const result = validateCartaoCredito(input);
if (!result.ok) {
return { ok: false, code: result.code, message: result.message };
}
return { ok: true, formatted: applyCartaoCreditoMask(result.value) };
}
export { formatCartaoCredito };
//# sourceMappingURL=chunk-XW5G2RAL.js.map
//# sourceMappingURL=chunk-XW5G2RAL.js.map
{"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"]}
/**
* Credit card PAN constants — ISO/IEC 7812-1 Annex B (Luhn).
* @see https://www.iso.org/standard/70484.html
* @see docs/use-cases/UC-008-validate-cartao-credito.md
*/
type CardBrand = 'visa' | 'mastercard' | 'amex' | 'elo' | 'hipercard' | 'unknown';
declare const CARTAO_PAN_MIN_LENGTH = 8;
declare const CARTAO_PAN_MAX_LENGTH = 19;
declare const CARTAO_GOLDEN_VISA = "4111111111111111";
declare const CARTAO_GOLDEN_MASTERCARD = "5555555555554444";
declare const CARTAO_GOLDEN_AMEX = "378282246310005";
declare const CARTAO_GOLDEN_LUHN_WALKTHROUGH = "79927398713";
declare const CARTAO_GOLDEN_VISA_MASKED = "4111 1111 1111 1111";
declare const CARTAO_GOLDEN_MIN_LENGTH = "12345674";
declare const CARTAO_OFFICIAL_SOURCE_URL = "https://www.iso.org/standard/70484.html";
declare const CARTAO_IEC_SOURCE_URL = "https://webstore.iec.ch/en/publication/59763";
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 };
+3
-18
import { e as CartaoCreditoValidationResult, F as FormatResult } from './validation-result-BhQE-1_O.js';
export { C as CartaoCredito, D as DocumentFormat, V as ValidationErrorCode } from './validation-result-BhQE-1_O.js';
import { j as CardBrand } from './constants-BqegsAc2.js';
export { C as CARTAO_GOLDEN_AMEX, a as CARTAO_GOLDEN_LUHN_WALKTHROUGH, b as CARTAO_GOLDEN_MASTERCARD, c as CARTAO_GOLDEN_MIN_LENGTH, d as CARTAO_GOLDEN_VISA, e as CARTAO_GOLDEN_VISA_MASKED, f as CARTAO_IEC_SOURCE_URL, g as CARTAO_OFFICIAL_SOURCE_URL, h as CARTAO_PAN_MAX_LENGTH, i as CARTAO_PAN_MIN_LENGTH } from './constants-BqegsAc2.js';
/**
* Credit card PAN constants — ISO/IEC 7812-1 Annex B (Luhn).
* @see https://www.iso.org/standard/70484.html
* @see docs/use-cases/UC-008-validate-cartao-credito.md
*/
type CardBrand = 'visa' | 'mastercard' | 'amex' | 'elo' | 'hipercard' | 'unknown';
declare const CARTAO_PAN_MIN_LENGTH = 8;
declare const CARTAO_PAN_MAX_LENGTH = 19;
declare const CARTAO_GOLDEN_VISA = "4111111111111111";
declare const CARTAO_GOLDEN_MASTERCARD = "5555555555554444";
declare const CARTAO_GOLDEN_AMEX = "378282246310005";
declare const CARTAO_GOLDEN_LUHN_WALKTHROUGH = "79927398713";
declare const CARTAO_GOLDEN_VISA_MASKED = "4111 1111 1111 1111";
declare const CARTAO_GOLDEN_MIN_LENGTH = "12345674";
declare const CARTAO_OFFICIAL_SOURCE_URL = "https://www.iso.org/standard/70484.html";
declare const CARTAO_IEC_SOURCE_URL = "https://webstore.iec.ch/en/publication/59763";
/**
* Best-effort card brand from IIN prefix — non-authoritative (BR-LUHN-005).

@@ -47,2 +32,2 @@ */

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, type CardBrand, CartaoCreditoValidationResult, FormatResult, computeLuhnSum, detectCardBrand, formatCartaoCredito, isValidCartaoCredito, isValidLuhn, passesLuhn, stripCartaoCredito, validateCartaoCredito };
export { CardBrand, CartaoCreditoValidationResult, FormatResult, computeLuhnSum, detectCardBrand, formatCartaoCredito, isValidCartaoCredito, isValidLuhn, passesLuhn, stripCartaoCredito, validateCartaoCredito };
import './chunk-CQPM43VV.js';
export { formatCartaoCredito } from './chunk-XKY2CV3G.js';
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';
export { formatCartaoCredito } from './chunk-XW5G2RAL.js';
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';
import './chunk-MSLJF2FM.js';
//# sourceMappingURL=cartao-credito.js.map
//# sourceMappingURL=cartao-credito.js.map

@@ -1,4 +0,4 @@

export { detect } from './chunk-OCYXNLHO.js';
import './chunk-MLPXW7N2.js';
export { detect } from './chunk-JZNTCZMV.js';
import './chunk-5UL3M7IU.js';
import './chunk-DJUANFIK.js';
import './chunk-3QP6R46N.js';

@@ -12,3 +12,3 @@ import './chunk-Y6IW2LMW.js';

import './chunk-MK7OJUF5.js';
import './chunk-EPKHEW5V.js';
import './chunk-AK5GVYQ5.js';
import './chunk-2JJS46FM.js';

@@ -15,0 +15,0 @@ import './chunk-US4OLTJ2.js';

@@ -1,2 +0,13 @@

type GeneratableDocumentType = 'cpf' | 'cnpj' | 'cep' | 'placa' | 'pis-pasep' | 'renavam' | 'cnh' | 'telefone' | 'cartao-credito';
import { j as CardBrand } from './constants-BqegsAc2.js';
import { U as UfCode } from './validation-result-BhQE-1_O.js';
/**
* Synthetic credit card PAN generation — Luhn + brand IIN prefixes (BR-GENERATE-001).
*/
type GeneratableCardBrand = Exclude<CardBrand, 'unknown'>;
declare const GENERATABLE_CARD_BRANDS: readonly GeneratableCardBrand[];
declare function isGeneratableCardBrand(brand: string): brand is GeneratableCardBrand;
type GeneratableDocumentType = 'cpf' | 'cnpj' | 'cep' | 'placa' | 'pis-pasep' | 'renavam' | 'cnh' | 'telefone' | 'cartao-credito' | 'inscricao-estadual' | 'titulo-eleitor';
type GenerateFormat = 'numeric' | 'alphanumeric' | 'legacy' | 'mercosul' | 'celular' | 'fixo';

@@ -7,5 +18,8 @@ type GenerateOptions = {

seed?: number;
uf?: UfCode;
brand?: GeneratableCardBrand;
};
declare function generate(type: GeneratableDocumentType, options?: GenerateOptions): string;
export { type GeneratableDocumentType, type GenerateFormat, type GenerateOptions, generate };
export { GENERATABLE_CARD_BRANDS, type GeneratableCardBrand, type GeneratableDocumentType, type GenerateFormat, type GenerateOptions, generate, isGeneratableCardBrand };

@@ -1,8 +0,9 @@

export { generate } from './chunk-LGD2JJBZ.js';
export { GENERATABLE_CARD_BRANDS, generate, isGeneratableCardBrand } from './chunk-Q7B5VOPW.js';
import './chunk-CDGRHI7W.js';
import './chunk-WLE2ENQA.js';
import './chunk-G2Y63PIF.js';
import './chunk-KSLDM5AD.js';
import './chunk-IQGRFAQV.js';
import './chunk-G32U6YQ5.js';
import './chunk-XKY2CV3G.js';
import './chunk-XW5G2RAL.js';
import './chunk-ZAUZRIOU.js';

@@ -13,5 +14,8 @@ import './chunk-6QJFMOIX.js';

import './chunk-5UL3M7IU.js';
import './chunk-DJUANFIK.js';
import './chunk-3QP6R46N.js';
import './chunk-Y6IW2LMW.js';
import './chunk-KH7DWOUA.js';
import './chunk-WPL47PWJ.js';
import './chunk-EPKHEW5V.js';
import './chunk-AK5GVYQ5.js';
import './chunk-2JJS46FM.js';

@@ -18,0 +22,0 @@ import './chunk-US4OLTJ2.js';

@@ -17,7 +17,8 @@ export { CNPJ_GOLDEN_ALPHANUMERIC, CNPJ_GOLDEN_ALPHANUMERIC_MASKED, CNPJ_GOLDEN_NUMERIC, CNPJ_GOLDEN_NUMERIC_MASKED, CNPJ_OFFICIAL_SOURCE_URL, detectCnpjFormat, formatCnpj, formatCnpjAlphanumeric, formatCnpjNumeric, isValidCnpj, isValidCnpjAlphanumeric, isValidCnpjNumeric, stripCnpj, validateCnpj } from './cnpj.js';

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';
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';
export { computeLuhnSum, detectCardBrand, formatCartaoCredito, isValidCartaoCredito, isValidLuhn, passesLuhn, stripCartaoCredito, validateCartaoCredito } from './cartao-credito.js';
export { ValidateInscricaoEstadualOptions, formatInscricaoEstadual, getIeOfficialSourceUrl, isValidInscricaoEstadual, stripInscricaoEstadual, validateIeDf, validateIeMt, validateIeSp, validateInscricaoEstadual } from './inscricao-estadual.js';
export { DetectOptions, DetectResult, DetectableDocumentType, detect } from './detect.js';
export { S as SanitizableDocumentType, a as SanitizeOptions, b as SanitizeResult, s as sanitize } from './index-CZLo9YOT.js';
export { GeneratableDocumentType, GenerateOptions, generate } from './generate.js';
export { GENERATABLE_CARD_BRANDS, GeneratableCardBrand, GeneratableDocumentType, GenerateOptions, generate, isGeneratableCardBrand } from './generate.js';
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';

@@ -24,0 +25,0 @@ /**

import './chunk-G24G7WR5.js';
export { sanitize } from './chunk-7ZL7PZII.js';
export { sanitize } from './chunk-CSZCIOGA.js';
import './chunk-ZH4RJNG7.js';
export { formatTituloEleitor } from './chunk-PB4RIS6G.js';
export { generate } from './chunk-LGD2JJBZ.js';
import './chunk-7ULDLG4C.js';
export { GENERATABLE_CARD_BRANDS, generate, isGeneratableCardBrand } from './chunk-Q7B5VOPW.js';
export { formatRenavam } from './chunk-CDGRHI7W.js';
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';
export { formatTelefone } from './chunk-G2Y63PIF.js';
export { formatTituloEleitor } from './chunk-KSLDM5AD.js';
import './chunk-MFNJTAUS.js';

@@ -26,4 +27,4 @@ import './chunk-GVK6IMBF.js';

import './chunk-CQPM43VV.js';
import { formatCartaoCredito } from './chunk-XKY2CV3G.js';
export { formatCartaoCredito } from './chunk-XKY2CV3G.js';
import { formatCartaoCredito } from './chunk-XW5G2RAL.js';
export { formatCartaoCredito } from './chunk-XW5G2RAL.js';
import './chunk-2CNYSY3Z.js';

@@ -40,5 +41,5 @@ import { formatCep } from './chunk-ZAUZRIOU.js';

export { formatCpf } from './chunk-NHLLC6WH.js';
export { detect } from './chunk-OCYXNLHO.js';
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';
export { detect } from './chunk-JZNTCZMV.js';
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';
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';
export { formatInscricaoEstadual, getIeOfficialSourceUrl, isValidInscricaoEstadual, stripInscricaoEstadual, validateIeDf, validateIeMt, validateIeSp, validateInscricaoEstadual } from './chunk-3QP6R46N.js';

@@ -52,3 +53,3 @@ 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';

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';
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';
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';
export { CEP_GOLDEN_PRIMARY, CEP_GOLDEN_PRIMARY_MASKED, CEP_GOLDEN_SECONDARY, CEP_OFFICIAL_SOURCE_URL, isValidCep, validateCep } from './chunk-2JJS46FM.js';

@@ -55,0 +56,0 @@ 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';

@@ -1,1 +0,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"]}
{"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,6 +0,6 @@

export { sanitize } from './chunk-7ZL7PZII.js';
export { sanitize } from './chunk-CSZCIOGA.js';
import './chunk-WLE2ENQA.js';
import './chunk-GVK6IMBF.js';
import './chunk-MLPXW7N2.js';
import './chunk-5UL3M7IU.js';
import './chunk-DJUANFIK.js';
import './chunk-3QP6R46N.js';

@@ -12,3 +12,3 @@ import './chunk-Y6IW2LMW.js';

import './chunk-4W4OKLSZ.js';
import './chunk-EPKHEW5V.js';
import './chunk-AK5GVYQ5.js';
import './chunk-2JJS46FM.js';

@@ -15,0 +15,0 @@ import './chunk-US4OLTJ2.js';

@@ -1,3 +0,4 @@

export { formatTituloEleitor } from './chunk-PB4RIS6G.js';
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';
import './chunk-7ULDLG4C.js';
export { formatTituloEleitor } from './chunk-KSLDM5AD.js';
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';
export { stripTituloEleitor } from './chunk-YYHS5WQN.js';

@@ -4,0 +5,0 @@ import './chunk-4SNBZFS5.js';

{
"name": "@br-validators/core",
"version": "0.12.0-alpha.1",
"version": "0.12.0-alpha.2",
"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,0 +5,0 @@ "license": "MIT",

import { validateRenavam } from './chunk-WLE2ENQA.js';
import { validateTituloEleitor } from './chunk-MLPXW7N2.js';
import { validateTelefone, extractTelefoneDigits, normalizeTelefoneDigits } from './chunk-5UL3M7IU.js';
import { validateInscricaoEstadual } from './chunk-3QP6R46N.js';
import { validateIeSpRural, stripIeSpRural } from './chunk-Y6IW2LMW.js';
import { validateNfeChave } from './chunk-D36RM7OD.js';
import { validatePisPasep } from './chunk-KH7DWOUA.js';
import { validatePlaca } from './chunk-WPL47PWJ.js';
import { validateBoleto } from './chunk-4W4OKLSZ.js';
import { validateCartaoCredito } from './chunk-EPKHEW5V.js';
import { validateCep } from './chunk-2JJS46FM.js';
import { validateCnh } from './chunk-US4OLTJ2.js';
import { stripPlaca } from './chunk-YYHS5WQN.js';
import { validateCnpj } from './chunk-YXELVV37.js';
import { validateCpf } from './chunk-F6PTZY4O.js';
// src/sanitize/fixes.ts
function trimFix(raw) {
const trimmed = raw.trim();
const fixes = [];
if (trimmed !== raw) {
fixes.push("trimmed");
}
return { value: trimmed, fixes };
}
function digitsFix(value, fixes) {
const digits = value.replace(/\D/g, "");
if (digits !== value) {
fixes.push("removed_non_digits");
}
return { value: digits, fixes };
}
function upperAndStripSeparators(value, fixes) {
const upper = value.toUpperCase();
if (upper !== value) {
fixes.push("uppercased");
}
const stripped = upper.replace(/[^A-Z0-9]/g, "");
if (stripped !== upper) {
fixes.push("removed_separators");
}
return { value: stripped, fixes };
}
function placaFix(value, fixes) {
const upper = value.toUpperCase();
if (upper !== value) {
fixes.push("uppercased");
}
if (/[-.\s/]/.test(value)) {
fixes.push("removed_separators");
}
return { value: stripPlaca(upper), fixes };
}
function telefoneFix(value, fixes) {
if (/[\s()-]/.test(value)) {
fixes.push("removed_mask_chars");
}
const digitsOnly = extractTelefoneDigits(value);
const normalized = normalizeTelefoneDigits(value);
if (normalized !== digitsOnly && normalized.length > 0) {
fixes.push("normalized_national");
}
return { value: normalized, fixes };
}
function ieProdutorRuralFix(value, fixes) {
const upper = value.toUpperCase();
if (upper !== value) {
fixes.push("uppercased");
}
if (/^[Pp]/.test(upper)) {
fixes.push("preserved_p_prefix");
}
return { value: stripIeSpRural(upper), fixes };
}
function applyFixes(raw, type) {
const { value: trimmed, fixes } = trimFix(raw);
switch (type) {
case "cpf":
case "cep":
case "pis-pasep":
case "cnh":
case "renavam":
case "nfe-chave":
case "cartao-credito":
case "boleto":
case "titulo-eleitor":
case "inscricao-estadual":
return digitsFix(trimmed, fixes);
case "cnpj":
return upperAndStripSeparators(trimmed, fixes);
case "placa":
return placaFix(trimmed, fixes);
case "telefone":
return telefoneFix(trimmed, fixes);
case "inscricao-estadual-produtor-rural":
return ieProdutorRuralFix(trimmed, fixes);
default: {
const _exhaustive = type;
return { value: _exhaustive, fixes };
}
}
}
// src/sanitize/index.ts
function sanitize(raw, type, options = {}) {
const { value: fixed, fixes } = applyFixes(raw, type);
if (type === "inscricao-estadual" && !options.uf) {
return {
ok: false,
code: "UNSUPPORTED_FORMAT",
message: "UF is required for inscricao-estadual sanitization"
};
}
const validation = validateFixed(fixed, type, options.uf);
if (!validation.ok) {
return { ok: false, code: validation.code, message: validation.message };
}
return { ok: true, value: validation.value, fixes };
}
function validateFixed(value, type, uf) {
switch (type) {
case "cpf": {
const result = validateCpf(value);
return result.ok ? { ok: true, value: result.value } : result;
}
case "cnpj": {
const result = validateCnpj(value);
return result.ok ? { ok: true, value: result.value } : result;
}
case "cep": {
const result = validateCep(value);
return result.ok ? { ok: true, value: result.value } : result;
}
case "placa": {
const result = validatePlaca(value);
return result.ok ? { ok: true, value: result.value } : result;
}
case "pis-pasep": {
const result = validatePisPasep(value);
return result.ok ? { ok: true, value: result.value } : result;
}
case "telefone": {
const result = validateTelefone(value);
return result.ok ? { ok: true, value: result.value } : result;
}
case "cnh": {
const result = validateCnh(value);
return result.ok ? { ok: true, value: result.value } : result;
}
case "renavam": {
const result = validateRenavam(value);
return result.ok ? { ok: true, value: result.value } : result;
}
case "titulo-eleitor": {
const result = validateTituloEleitor(value);
return result.ok ? { ok: true, value: result.value } : result;
}
case "nfe-chave": {
const result = validateNfeChave(value);
return result.ok ? { ok: true, value: result.value } : result;
}
case "boleto": {
const result = validateBoleto(value);
return result.ok ? { ok: true, value: result.value } : result;
}
case "cartao-credito": {
const result = validateCartaoCredito(value);
return result.ok ? { ok: true, value: result.value } : result;
}
case "inscricao-estadual": {
const result = validateInscricaoEstadual(value, { uf });
return result.ok ? { ok: true, value: result.value } : result;
}
case "inscricao-estadual-produtor-rural": {
const result = validateIeSpRural(value);
return result.ok ? { ok: true, value: result.value } : result;
}
default: {
const _exhaustive = type;
return { ok: false, code: "UNSUPPORTED_FORMAT", message: `Unsupported type: ${String(_exhaustive)}` };
}
}
}
export { sanitize };
//# sourceMappingURL=chunk-7ZL7PZII.js.map
//# sourceMappingURL=chunk-7ZL7PZII.js.map
{"version":3,"sources":["../src/sanitize/fixes.ts","../src/sanitize/index.ts"],"names":[],"mappings":"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","file":"chunk-7ZL7PZII.js","sourcesContent":["import { stripCep } from '../strip/cep.js';\nimport { stripCnh } from '../strip/cnh.js';\nimport { stripCnpj } from '../strip/cnpj.js';\nimport { stripCpf } from '../strip/cpf.js';\nimport { stripIeSpRural } from '../strip/inscricao-estadual-produtor-rural.js';\nimport { stripInscricaoEstadual } from '../core/inscricao-estadual/index.js';\nimport { stripNfeChave } from '../strip/nfe-chave.js';\nimport { stripPisPasep } from '../strip/pis-pasep.js';\nimport { stripPlaca } from '../strip/placa.js';\nimport { stripRenavam } from '../strip/renavam.js';\nimport { stripTituloEleitor } from '../strip/titulo-eleitor.js';\nimport { extractTelefoneDigits, normalizeTelefoneDigits } from '../strip/telefone.js';\n\nexport type SanitizableDocumentType =\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\nexport type FixResult = {\n value: string;\n fixes: string[];\n};\n\nfunction trimFix(raw: string): FixResult {\n const trimmed = raw.trim();\n const fixes: string[] = [];\n if (trimmed !== raw) {\n fixes.push('trimmed');\n }\n return { value: trimmed, fixes };\n}\n\nfunction digitsFix(value: string, fixes: string[]): FixResult {\n const digits = value.replace(/\\D/g, '');\n if (digits !== value) {\n fixes.push('removed_non_digits');\n }\n return { value: digits, fixes };\n}\n\nfunction upperAndStripSeparators(value: string, fixes: string[]): FixResult {\n const upper = value.toUpperCase();\n if (upper !== value) {\n fixes.push('uppercased');\n }\n const stripped = upper.replace(/[^A-Z0-9]/g, '');\n if (stripped !== upper) {\n fixes.push('removed_separators');\n }\n return { value: stripped, fixes };\n}\n\nfunction placaFix(value: string, fixes: string[]): FixResult {\n const upper = value.toUpperCase();\n if (upper !== value) {\n fixes.push('uppercased');\n }\n if (/[-.\\s/]/.test(value)) {\n fixes.push('removed_separators');\n }\n return { value: stripPlaca(upper), fixes };\n}\n\nfunction telefoneFix(value: string, fixes: string[]): FixResult {\n if (/[\\s()-]/.test(value)) {\n fixes.push('removed_mask_chars');\n }\n const digitsOnly = extractTelefoneDigits(value);\n const normalized = normalizeTelefoneDigits(value);\n if (normalized !== digitsOnly && normalized.length > 0) {\n fixes.push('normalized_national');\n }\n return { value: normalized, fixes };\n}\n\nfunction ieProdutorRuralFix(value: string, fixes: string[]): FixResult {\n const upper = value.toUpperCase();\n if (upper !== value) {\n fixes.push('uppercased');\n }\n if (/^[Pp]/.test(upper)) {\n fixes.push('preserved_p_prefix');\n }\n return { value: stripIeSpRural(upper), fixes };\n}\n\nexport function applyFixes(raw: string, type: SanitizableDocumentType): FixResult {\n const { value: trimmed, fixes } = trimFix(raw);\n\n switch (type) {\n case 'cpf':\n case 'cep':\n case 'pis-pasep':\n case 'cnh':\n case 'renavam':\n case 'nfe-chave':\n case 'cartao-credito':\n case 'boleto':\n case 'titulo-eleitor':\n case 'inscricao-estadual':\n return digitsFix(trimmed, fixes);\n case 'cnpj':\n return upperAndStripSeparators(trimmed, fixes);\n case 'placa':\n return placaFix(trimmed, fixes);\n case 'telefone':\n return telefoneFix(trimmed, fixes);\n case 'inscricao-estadual-produtor-rural':\n return ieProdutorRuralFix(trimmed, fixes);\n default: {\n const _exhaustive: never = type;\n return { value: _exhaustive, fixes };\n }\n }\n}\n\n/** Validates canonical strip output matches fix pipeline (used in tests). */\nexport function stripForType(value: string, type: SanitizableDocumentType): string {\n switch (type) {\n case 'cpf':\n return stripCpf(value);\n case 'cnpj':\n return stripCnpj(value);\n case 'cep':\n return stripCep(value);\n case 'placa':\n return stripPlaca(value);\n case 'pis-pasep':\n return stripPisPasep(value);\n case 'telefone':\n return normalizeTelefoneDigits(value);\n case 'cnh':\n return stripCnh(value);\n case 'renavam':\n return stripRenavam(value);\n case 'titulo-eleitor':\n return stripTituloEleitor(value);\n case 'nfe-chave':\n return stripNfeChave(value);\n case 'boleto':\n return value.replace(/\\D/g, '');\n case 'cartao-credito':\n return value.replace(/\\D/g, '');\n case 'inscricao-estadual':\n return stripInscricaoEstadual(value);\n case 'inscricao-estadual-produtor-rural':\n return stripIeSpRural(value);\n default: {\n const _exhaustive: never = type;\n return _exhaustive;\n }\n }\n}\n","/**\n * ETL-style document sanitization — applies fixes then validates (BR-SANITIZE-001).\n * @see docs/VALIDATION-RULES.md\n */\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 { validateRenavam } from '../core/renavam/index.js';\nimport { validateTelefone } from '../core/telefone/index.js';\nimport { validateTituloEleitor } from '../core/titulo-eleitor/index.js';\nimport type { UfCode, ValidationErrorCode } from '../types/validation-result.js';\nimport { applyFixes } from './fixes.js';\n\nexport type SanitizableDocumentType =\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\nexport type SanitizeOptions = {\n uf?: UfCode;\n};\n\nexport type SanitizeSuccess = {\n ok: true;\n value: string;\n fixes: string[];\n};\n\nexport type SanitizeFailure = {\n ok: false;\n code: ValidationErrorCode;\n message: string;\n};\n\nexport type SanitizeResult = SanitizeSuccess | SanitizeFailure;\n\nexport type { FixResult } from './fixes.js';\n\ntype ValidateFixedResult =\n | { ok: true; value: string }\n | { ok: false; code: ValidationErrorCode; message: string };\n\nexport function sanitize(\n raw: string,\n type: SanitizableDocumentType,\n options: SanitizeOptions = {},\n): SanitizeResult {\n const { value: fixed, fixes } = applyFixes(raw, type);\n\n if (type === 'inscricao-estadual' && !options.uf) {\n return {\n ok: false,\n code: 'UNSUPPORTED_FORMAT',\n message: 'UF is required for inscricao-estadual sanitization',\n };\n }\n\n const validation = validateFixed(fixed, type, options.uf);\n if (!validation.ok) {\n return { ok: false, code: validation.code, message: validation.message };\n }\n\n return { ok: true, value: validation.value, fixes };\n}\n\nfunction validateFixed(value: string, type: SanitizableDocumentType, uf?: UfCode): ValidateFixedResult {\n switch (type) {\n case 'cpf': {\n const result = validateCpf(value);\n return result.ok ? { ok: true, value: result.value } : result;\n }\n case 'cnpj': {\n const result = validateCnpj(value);\n return result.ok ? { ok: true, value: result.value } : result;\n }\n case 'cep': {\n const result = validateCep(value);\n return result.ok ? { ok: true, value: result.value } : result;\n }\n case 'placa': {\n const result = validatePlaca(value);\n return result.ok ? { ok: true, value: result.value } : result;\n }\n case 'pis-pasep': {\n const result = validatePisPasep(value);\n return result.ok ? { ok: true, value: result.value } : result;\n }\n case 'telefone': {\n const result = validateTelefone(value);\n return result.ok ? { ok: true, value: result.value } : result;\n }\n case 'cnh': {\n const result = validateCnh(value);\n return result.ok ? { ok: true, value: result.value } : result;\n }\n case 'renavam': {\n const result = validateRenavam(value);\n return result.ok ? { ok: true, value: result.value } : result;\n }\n case 'titulo-eleitor': {\n const result = validateTituloEleitor(value);\n return result.ok ? { ok: true, value: result.value } : result;\n }\n case 'nfe-chave': {\n const result = validateNfeChave(value);\n return result.ok ? { ok: true, value: result.value } : result;\n }\n case 'boleto': {\n const result = validateBoleto(value);\n return result.ok ? { ok: true, value: result.value } : result;\n }\n case 'cartao-credito': {\n const result = validateCartaoCredito(value);\n return result.ok ? { ok: true, value: result.value } : result;\n }\n case 'inscricao-estadual': {\n const result = validateInscricaoEstadual(value, { uf: uf as UfCode });\n return result.ok ? { ok: true, value: result.value } : result;\n }\n case 'inscricao-estadual-produtor-rural': {\n const result = validateIeSpRural(value);\n return result.ok ? { ok: true, value: result.value } : result;\n }\n default: {\n const _exhaustive: never = type;\n return { ok: false, code: 'UNSUPPORTED_FORMAT', message: `Unsupported type: ${String(_exhaustive)}` };\n }\n }\n}\n"]}
import { brandCartaoCredito } from './chunk-MSLJF2FM.js';
// src/strip/cartao-credito.ts
function stripCartaoCredito(input) {
return input.replace(/\D/g, "");
}
// src/core/cartao-credito/constants.ts
var CARTAO_PAN_MIN_LENGTH = 8;
var CARTAO_PAN_MAX_LENGTH = 19;
var CARTAO_GOLDEN_VISA = "4111111111111111";
var CARTAO_GOLDEN_MASTERCARD = "5555555555554444";
var CARTAO_GOLDEN_AMEX = "378282246310005";
var CARTAO_GOLDEN_LUHN_WALKTHROUGH = "79927398713";
var CARTAO_GOLDEN_VISA_MASKED = "4111 1111 1111 1111";
var CARTAO_GOLDEN_MIN_LENGTH = "12345674";
var CARTAO_OFFICIAL_SOURCE_URL = "https://www.iso.org/standard/70484.html";
var CARTAO_IEC_SOURCE_URL = "https://webstore.iec.ch/en/publication/59763";
var ELO_IIN_PREFIXES = [
"401178",
"401179",
"431274",
"438935",
"451416",
"457393",
"457631",
"457632",
"504175",
"506699",
"506770",
"509048",
"509049",
"627780",
"636297",
"636368",
"650031",
"650032",
"650033",
"650035",
"650051",
"650405",
"650439",
"650485",
"650486",
"650487",
"650488",
"650489",
"650490",
"650491",
"650492",
"650493",
"650494",
"650495",
"650496",
"650497",
"650498",
"650499",
"651652",
"651653",
"651654",
"651655",
"651656",
"651657",
"651658",
"651659",
"651660",
"655000",
"655001"
];
var HIPERCARD_IIN_PREFIXES = ["606282", "384100"];
// src/core/cartao-credito/detect-brand.ts
function detectCardBrand(strippedPan) {
for (const prefix of ELO_IIN_PREFIXES) {
if (strippedPan.startsWith(prefix)) {
return "elo";
}
}
for (const prefix of HIPERCARD_IIN_PREFIXES) {
if (strippedPan.startsWith(prefix)) {
return "hipercard";
}
}
if (/^3[47]/.test(strippedPan)) {
return "amex";
}
if (/^5[1-5]/.test(strippedPan) || /^2[2-7]/.test(strippedPan)) {
return "mastercard";
}
if (strippedPan.startsWith("4")) {
return "visa";
}
return "unknown";
}
// src/core/cartao-credito/luhn.ts
function computeLuhnSum(pan) {
let sum = 0;
let double = false;
for (let i = pan.length - 1; i >= 0; i--) {
let digit = Number(pan.charAt(i));
if (double) {
digit *= 2;
if (digit > 9) {
digit -= 9;
}
}
sum += digit;
double = !double;
}
return sum;
}
function passesLuhn(pan) {
return computeLuhnSum(pan) % 10 === 0;
}
// src/core/cartao-credito/mask.ts
function applyCartaoCreditoMask(canonical) {
if (canonical.length < CARTAO_PAN_MIN_LENGTH || canonical.length > CARTAO_PAN_MAX_LENGTH) {
throw new Error(`PAN must have between ${CARTAO_PAN_MIN_LENGTH} and ${CARTAO_PAN_MAX_LENGTH} digits to apply mask`);
}
if (canonical.length === 15) {
return `${canonical.slice(0, 4)} ${canonical.slice(4, 10)} ${canonical.slice(10)}`;
}
const groups = [];
for (let i = 0; i < canonical.length; i += 4) {
groups.push(canonical.slice(i, i + 4));
}
return groups.join(" ");
}
// src/core/cartao-credito/index.ts
function failure(code, message) {
return { ok: false, code, message };
}
function hasRepeatedDigits(value) {
const first = value[0];
for (let i = 1; i < value.length; i++) {
if (value[i] !== first) {
return false;
}
}
return true;
}
function validateStructure(input, stripped) {
if (stripped.length === 0) {
return failure("EMPTY_INPUT", "Credit card PAN input is empty");
}
const withoutMask = input.replace(/[\s-]/g, "");
if (/[^0-9]/.test(withoutMask)) {
return failure("INVALID_CHARACTER", "Credit card PAN contains invalid characters");
}
if (stripped.length < CARTAO_PAN_MIN_LENGTH || stripped.length > CARTAO_PAN_MAX_LENGTH) {
return failure(
"INVALID_LENGTH",
`Credit card PAN must have between ${CARTAO_PAN_MIN_LENGTH} and ${CARTAO_PAN_MAX_LENGTH} digits after normalization`
);
}
if (hasRepeatedDigits(stripped)) {
return failure("KNOWN_INVALID_PATTERN", "Credit card PAN with all identical digits is invalid");
}
return null;
}
function isValidLuhn(input) {
const stripped = stripCartaoCredito(input);
if (stripped.length < CARTAO_PAN_MIN_LENGTH || stripped.length > CARTAO_PAN_MAX_LENGTH) {
return false;
}
const withoutMask = input.replace(/[\s-]/g, "");
if (/[^0-9]/.test(withoutMask)) {
return false;
}
return passesLuhn(stripped);
}
function isValidCartaoCredito(input) {
return validateCartaoCredito(input).ok;
}
function validateCartaoCredito(input) {
const stripped = stripCartaoCredito(input);
const structural = validateStructure(input, stripped);
if (structural) {
return structural;
}
if (!passesLuhn(stripped)) {
return failure("INVALID_CHECK_DIGIT", "Credit card PAN check digit is invalid");
}
const brand = detectCardBrand(stripped);
return {
ok: true,
value: brandCartaoCredito(stripped),
format: "cartao-credito",
brand
};
}
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, applyCartaoCreditoMask, computeLuhnSum, detectCardBrand, isValidCartaoCredito, isValidLuhn, passesLuhn, stripCartaoCredito, validateCartaoCredito };
//# sourceMappingURL=chunk-EPKHEW5V.js.map
//# sourceMappingURL=chunk-EPKHEW5V.js.map
{"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"]}
import { formatRenavam } from './chunk-CDGRHI7W.js';
import { computeRenavamCheckDigit, RENAVAM_BASE_LENGTH } from './chunk-WLE2ENQA.js';
import { formatTelefone } from './chunk-G2Y63PIF.js';
import { formatPisPasep } from './chunk-IQGRFAQV.js';
import { formatPlaca } from './chunk-G32U6YQ5.js';
import { formatCartaoCredito } from './chunk-XKY2CV3G.js';
import { formatCep } from './chunk-ZAUZRIOU.js';
import { formatCnh } from './chunk-6QJFMOIX.js';
import { formatCnpj } from './chunk-LYBFUKHR.js';
import { formatCpf } from './chunk-NHLLC6WH.js';
import { ANATEL_DDDS, validateTelefone } from './chunk-5UL3M7IU.js';
import { PIS_PASEP_DV_WEIGHTS, PIS_PASEP_BASE_LENGTH } from './chunk-KH7DWOUA.js';
import { PLACA_LEGACY_PATTERN, PLACA_MERCOSUL_PATTERN, validatePlaca } from './chunk-WPL47PWJ.js';
import { validateCartaoCredito } from './chunk-EPKHEW5V.js';
import { validateCep } from './chunk-2JJS46FM.js';
import { computeCnhCheckDigits, CNH_BASE_LENGTH } from './chunk-US4OLTJ2.js';
import { CNPJ_DV1_WEIGHTS, cnpjCharValue, CNPJ_DV2_WEIGHTS, CNPJ_BASE_LENGTH } from './chunk-YXELVV37.js';
import { CPF_DV1_WEIGHTS, CPF_DV2_WEIGHTS, CPF_BASE_LENGTH } from './chunk-F6PTZY4O.js';
import { computeCheckDigit } from './chunk-OTZHMJYE.js';
// src/generate/apply-mask.ts
function applyMask(type, value) {
switch (type) {
case "cpf": {
const result = formatCpf(value);
return result.ok ? result.formatted : value;
}
case "cnpj": {
const result = formatCnpj(value);
return result.ok ? result.formatted : value;
}
case "cep": {
const result = formatCep(value);
return result.ok ? result.formatted : value;
}
case "placa": {
const result = formatPlaca(value);
return result.ok ? result.formatted : value;
}
case "pis-pasep": {
const result = formatPisPasep(value);
return result.ok ? result.formatted : value;
}
case "renavam": {
const result = formatRenavam(value);
return result.ok ? result.formatted : value;
}
case "cnh": {
const result = formatCnh(value);
return result.ok ? result.formatted : value;
}
case "telefone": {
const result = formatTelefone(value);
return result.ok ? result.formatted : value;
}
case "cartao-credito": {
const result = formatCartaoCredito(value);
return result.ok ? result.formatted : value;
}
default: {
const _exhaustive = type;
return _exhaustive;
}
}
}
// src/generate/random.ts
function mulberry32(seed) {
let state = seed >>> 0;
return () => {
state = state + 1831565813 >>> 0;
let t = state;
t = Math.imul(t ^ t >>> 15, t | 1);
t ^= t + Math.imul(t ^ t >>> 7, t | 61);
return ((t ^ t >>> 14) >>> 0) / 4294967296;
};
}
function createRandomSource(seed) {
const nextFn = seed === void 0 ? () => Math.random() : mulberry32(seed);
return {
next: nextFn,
int(min, max) {
return Math.floor(nextFn() * (max - min + 1)) + min;
},
digit() {
return String(Math.floor(nextFn() * 10));
},
digits(count) {
let out = "";
for (let i = 0; i < count; i++) {
out += this.digit();
}
return out;
},
letter() {
const letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
return letters.charAt(this.int(0, letters.length - 1));
},
pick(items) {
return items[this.int(0, items.length - 1)];
}
};
}
function hasRepeatedChars(value) {
const first = value[0];
for (let i = 1; i < value.length; i++) {
if (value[i] !== first) {
return false;
}
}
return true;
}
function computeLuhnCheckDigit(partial) {
let sum = 0;
let double = true;
for (let i = partial.length - 1; i >= 0; i--) {
let digit = Number(partial.charAt(i));
if (double) {
digit *= 2;
if (digit > 9) {
digit -= 9;
}
}
sum += digit;
double = !double;
}
return String((10 - sum % 10) % 10);
}
// src/generate/index.ts
var CNPJ_ALNUM_CHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var MAX_ATTEMPTS = 50;
function digitValue(char) {
return Number(char);
}
function randomBaseDigits(rng, length) {
for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {
const base = rng.digits(length);
if (!hasRepeatedChars(base)) {
return base;
}
}
return "123456789".slice(0, length).padEnd(length, "1");
}
function randomCnpjAlphanumericBase(rng) {
for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {
let base = "";
for (let i = 0; i < CNPJ_BASE_LENGTH; i++) {
base += CNPJ_ALNUM_CHARS.charAt(rng.int(0, CNPJ_ALNUM_CHARS.length - 1));
}
if (!hasRepeatedChars(base)) {
return base;
}
}
return "12ABC34501DE";
}
function generateCpfValue(rng) {
const base = randomBaseDigits(rng, CPF_BASE_LENGTH);
const dv1 = String(computeCheckDigit(base, CPF_DV1_WEIGHTS, digitValue));
const dv2 = String(computeCheckDigit(base + dv1, CPF_DV2_WEIGHTS, digitValue));
return base + dv1 + dv2;
}
function generateCnpjValue(rng, format) {
if (format === "alphanumeric") {
const base2 = randomCnpjAlphanumericBase(rng);
const dv12 = String(computeCheckDigit(base2, CNPJ_DV1_WEIGHTS, cnpjCharValue));
const dv22 = String(computeCheckDigit(base2 + dv12, CNPJ_DV2_WEIGHTS, cnpjCharValue));
return base2 + dv12 + dv22;
}
const base = randomBaseDigits(rng, CNPJ_BASE_LENGTH);
const dv1 = String(computeCheckDigit(base, CNPJ_DV1_WEIGHTS, digitValue));
const dv2 = String(computeCheckDigit(base + dv1, CNPJ_DV2_WEIGHTS, digitValue));
return base + dv1 + dv2;
}
function generateCepValue(rng) {
for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {
const value = rng.digits(8);
if (value !== "00000000" && validateCep(value).ok) {
return value;
}
}
return "01310100";
}
function generatePlacaValue(rng, format) {
const mode = format === "legacy" ? "legacy" : "mercosul";
for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {
const letters = rng.letter() + rng.letter() + rng.letter();
let candidate;
if (mode === "legacy") {
candidate = letters + rng.digits(4);
if (!PLACA_LEGACY_PATTERN.test(candidate)) {
continue;
}
} else {
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);
if (!PLACA_MERCOSUL_PATTERN.test(candidate)) {
continue;
}
}
if (validatePlaca(candidate).ok) {
return candidate;
}
}
return mode === "legacy" ? "ABC1234" : "ABC1D23";
}
function generatePisValue(rng) {
const base = randomBaseDigits(rng, PIS_PASEP_BASE_LENGTH);
const dv = String(computeCheckDigit(base, PIS_PASEP_DV_WEIGHTS, digitValue));
return base + dv;
}
function generateRenavamValue(rng) {
const base = randomBaseDigits(rng, RENAVAM_BASE_LENGTH);
const dv = String(computeRenavamCheckDigit(base));
return base + dv;
}
function generateCnhValue(rng) {
const base = randomBaseDigits(rng, CNH_BASE_LENGTH);
return base + computeCnhCheckDigits(base);
}
function generateTelefoneValue(rng, format) {
const ddd = rng.pick(ANATEL_DDDS);
const useFixo = format === "fixo";
for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {
const local = useFixo ? String(rng.int(2, 5)) + rng.digits(7) : `9${rng.digits(8)}`;
const candidate = ddd + local;
if (validateTelefone(candidate).ok) {
return candidate;
}
}
return useFixo ? "1133333333" : "11999999999";
}
function generateCartaoValue(rng) {
const length = rng.int(13, 16);
for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {
const partial = rng.digits(length - 1);
if (hasRepeatedChars(partial)) {
continue;
}
const check = computeLuhnCheckDigit(partial);
const candidate = partial + check;
if (validateCartaoCredito(candidate).ok) {
return candidate;
}
}
return "4111111111111111";
}
function generate(type, options = {}) {
const rng = createRandomSource(options.seed);
let value;
switch (type) {
case "cpf":
value = generateCpfValue(rng);
break;
case "cnpj":
value = generateCnpjValue(rng, options.format);
break;
case "cep":
value = generateCepValue(rng);
break;
case "placa":
value = generatePlacaValue(rng, options.format);
break;
case "pis-pasep":
value = generatePisValue(rng);
break;
case "renavam":
value = generateRenavamValue(rng);
break;
case "cnh":
value = generateCnhValue(rng);
break;
case "telefone":
value = generateTelefoneValue(rng, options.format);
break;
case "cartao-credito":
value = generateCartaoValue(rng);
break;
default: {
const _exhaustive = type;
throw new Error(`Unsupported generatable type: ${String(_exhaustive)}`);
}
}
return options.masked ? applyMask(type, value) : value;
}
export { generate };
//# sourceMappingURL=chunk-LGD2JJBZ.js.map
//# sourceMappingURL=chunk-LGD2JJBZ.js.map
{"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"]}
import { stripTituloEleitor } from './chunk-YYHS5WQN.js';
import { weightedSum } from './chunk-OTZHMJYE.js';
import { brandTituloEleitor } from './chunk-MSLJF2FM.js';
// src/core/titulo-eleitor/constants.ts
var TITULO_ELEITOR_DV1_WEIGHTS_8 = [2, 3, 4, 5, 6, 7, 8, 9];
var TITULO_ELEITOR_DV1_WEIGHTS_9 = [9, 2, 3, 4, 5, 6, 7, 8, 9];
var TITULO_ELEITOR_DV2_WEIGHTS = [7, 8, 9];
var TITULO_ELEITOR_SEQUENTIAL_LENGTH = 8;
var TITULO_ELEITOR_SEQUENTIAL_LENGTH_EXTENDED = 9;
var TITULO_ELEITOR_LENGTH = 12;
var TITULO_ELEITOR_LENGTH_EXTENDED = 13;
var TITULO_ELEITOR_MIN_UF_CODE = 1;
var TITULO_ELEITOR_MAX_UF_CODE = 28;
var TITULO_ELEITOR_NUMERIC_PATTERN_12 = /^\d{12}$/;
var TITULO_ELEITOR_NUMERIC_PATTERN_13 = /^\d{13}$/;
var TITULO_ELEITOR_SPECIAL_UF_CODES = [1, 2];
var TITULO_ELEITOR_GOLDEN_PRIMARY = "004356870906";
var TITULO_ELEITOR_GOLDEN_SP_SPECIAL = "000000000116";
var TITULO_ELEITOR_GOLDEN_SP_EXTENDED = "1234567890175";
var TITULO_ELEITOR_GOLDEN_EXTERIOR = "000000012895";
var TITULO_ELEITOR_GOLDEN_MASKED_INPUT = "0043 5687 0906";
var TITULO_ELEITOR_OFFICIAL_SOURCE_URL = "https://www.tse.jus.br/legislacao/compilada/res/1998/resolucao-no-20-132-de-19-de-marco-de-1998";
var TITULO_ELEITOR_NORMATIVE_SECONDARY_URL = "https://www.tse.jus.br/legislacao/compilada/res/2021/resolucao-no-23-659-de-26-de-outubro-de-2021";
var TITULO_ELEITOR_ALGORITHM_WEIGHTS_REF_URL = "https://pt.wikipedia.org/wiki/T%C3%ADtulo_eleitoral#C%C3%A1lculo_do_d%C3%ADgito_verificador";
var TITULO_ELEITOR_ALGORITHM_REF_URL = "http://ghiorzi.org/DVnew.htm#e";
var TITULO_ELEITOR_TSE_PORTAL_URL = "https://www.tse.jus.br/";
var TITULO_ELEITOR_ETITULO_URL = "https://www.tse.jus.br/eleitor/servicos/aplicativo-e-titulo";
var TITULO_ELEITOR_UF_BY_CODE = {
1: "SP",
2: "MG",
3: "RJ",
4: "RS",
5: "BA",
6: "PR",
7: "CE",
8: "PE",
9: "SC",
10: "GO",
11: "MA",
12: "PB",
13: "PA",
14: "ES",
15: "PI",
16: "RN",
17: "AL",
18: "MT",
19: "MS",
20: "DF",
21: "SE",
22: "AM",
23: "RO",
24: "AC",
25: "AP",
26: "RR",
27: "TO"
};
var TITULO_ELEITOR_EXTERIOR_UF_CODE = 28;
// src/core/titulo-eleitor/check-digits.ts
function digitValues(chars) {
const values = [];
for (let i = 0; i < chars.length; i++) {
values.push(Number(chars.charAt(i)));
}
return values;
}
function isSpecialUf(ufCode) {
return TITULO_ELEITOR_SPECIAL_UF_CODES.includes(ufCode);
}
function resolveTituloEleitorCheckDigit(remainder, ufCode) {
if (remainder >= 10) {
return 0;
}
if (remainder === 0 && isSpecialUf(ufCode)) {
return 1;
}
return remainder;
}
function computeTituloEleitorFirstCheckDigit(sequential, ufCode) {
const weights = sequential.length === 8 ? TITULO_ELEITOR_DV1_WEIGHTS_8 : TITULO_ELEITOR_DV1_WEIGHTS_9;
const remainder = weightedSum(digitValues(sequential), weights) % 11;
return resolveTituloEleitorCheckDigit(remainder, ufCode);
}
function computeTituloEleitorSecondCheckDigit(ufDigits, firstDv, ufCode) {
const uf1 = Number(ufDigits.charAt(0));
const uf2 = Number(ufDigits.charAt(1));
const remainder = weightedSum([uf1, uf2, firstDv], TITULO_ELEITOR_DV2_WEIGHTS) % 11;
return resolveTituloEleitorCheckDigit(remainder, ufCode);
}
function computeTituloEleitorCheckDigits(sequential, ufDigits, ufCode) {
const dv1 = computeTituloEleitorFirstCheckDigit(sequential, ufCode);
const dv2 = computeTituloEleitorSecondCheckDigit(ufDigits, dv1, ufCode);
return `${String(dv1)}${String(dv2)}`;
}
// src/core/titulo-eleitor/parse.ts
function parseTituloEleitorParts(stripped) {
if (stripped.length === TITULO_ELEITOR_LENGTH) {
return {
sequential: stripped.slice(0, TITULO_ELEITOR_SEQUENTIAL_LENGTH),
ufDigits: stripped.slice(TITULO_ELEITOR_SEQUENTIAL_LENGTH, TITULO_ELEITOR_LENGTH - 2),
ufCode: Number(stripped.slice(TITULO_ELEITOR_SEQUENTIAL_LENGTH, TITULO_ELEITOR_LENGTH - 2)),
checkDigits: stripped.slice(TITULO_ELEITOR_LENGTH - 2)
};
}
if (stripped.length === TITULO_ELEITOR_LENGTH_EXTENDED) {
const ufDigits = stripped.slice(
TITULO_ELEITOR_SEQUENTIAL_LENGTH_EXTENDED,
TITULO_ELEITOR_SEQUENTIAL_LENGTH_EXTENDED + 2
);
const ufCode = Number(ufDigits);
if (!TITULO_ELEITOR_SPECIAL_UF_CODES.includes(ufCode)) {
return null;
}
return {
sequential: stripped.slice(0, TITULO_ELEITOR_SEQUENTIAL_LENGTH_EXTENDED),
ufDigits,
ufCode,
checkDigits: stripped.slice(TITULO_ELEITOR_LENGTH_EXTENDED - 2)
};
}
return null;
}
// src/core/titulo-eleitor/index.ts
function failure(code, message, ufCode) {
if (ufCode === void 0) {
return { ok: false, code, message };
}
return { ok: false, code, message, ufCode };
}
function hasRepeatedDigits(value) {
const first = value[0];
for (let i = 1; i < value.length; i++) {
if (value[i] !== first) {
return false;
}
}
return true;
}
function isValidUfCode(ufCode) {
return ufCode >= TITULO_ELEITOR_MIN_UF_CODE && ufCode <= TITULO_ELEITOR_MAX_UF_CODE;
}
function resolveUf(ufCode) {
return TITULO_ELEITOR_UF_BY_CODE[ufCode];
}
function validateStructure(input, stripped) {
if (stripped.length === 0) {
return { ok: false, error: failure("EMPTY_INPUT", "T\xEDtulo de Eleitor input is empty") };
}
if (/[^0-9\s]/.test(input.replace(/\s/g, ""))) {
return { ok: false, error: failure("INVALID_CHARACTER", "T\xEDtulo de Eleitor contains invalid characters") };
}
if (stripped.length !== TITULO_ELEITOR_LENGTH && stripped.length !== TITULO_ELEITOR_LENGTH_EXTENDED) {
return {
ok: false,
error: failure(
"INVALID_LENGTH",
`T\xEDtulo de Eleitor must have ${TITULO_ELEITOR_LENGTH} or ${TITULO_ELEITOR_LENGTH_EXTENDED} digits after normalization`
)
};
}
const parts = parseTituloEleitorParts(stripped);
if (!parts) {
return {
ok: false,
error: failure(
"UNSUPPORTED_FORMAT",
`13-digit T\xEDtulo de Eleitor is only valid for SP (01) or MG (02)`
)
};
}
if (!isValidUfCode(parts.ufCode)) {
return {
ok: false,
error: failure(
"KNOWN_INVALID_PATTERN",
`T\xEDtulo de Eleitor UF code ${parts.ufDigits} is not a valid TSE electoral code`,
parts.ufCode
)
};
}
if (hasRepeatedDigits(stripped)) {
return {
ok: false,
error: failure("KNOWN_INVALID_PATTERN", "T\xEDtulo de Eleitor with all identical digits is invalid")
};
}
return { ok: true, parts };
}
function isValidTituloEleitorChecksum(parts) {
const expected = computeTituloEleitorCheckDigits(parts.sequential, parts.ufDigits, parts.ufCode);
return parts.checkDigits === expected;
}
function isValidTituloEleitor(input) {
return validateTituloEleitor(input).ok;
}
function validateTituloEleitor(input) {
const stripped = stripTituloEleitor(input);
const structure = validateStructure(input, stripped);
if (!structure.ok) {
return structure.error;
}
const { parts } = structure;
if (!isValidTituloEleitorChecksum(parts)) {
return failure("INVALID_CHECK_DIGIT", "T\xEDtulo de Eleitor check digits are invalid", parts.ufCode);
}
const uf = resolveUf(parts.ufCode);
const success = {
ok: true,
value: brandTituloEleitor(stripped),
format: "numeric",
ufCode: parts.ufCode
};
if (uf !== void 0) {
success.uf = uf;
} else if (parts.ufCode === TITULO_ELEITOR_EXTERIOR_UF_CODE) {
success.exterior = true;
}
return success;
}
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 };
//# sourceMappingURL=chunk-MLPXW7N2.js.map
//# sourceMappingURL=chunk-MLPXW7N2.js.map
{"version":3,"sources":["../src/core/titulo-eleitor/constants.ts","../src/core/titulo-eleitor/check-digits.ts","../src/core/titulo-eleitor/parse.ts","../src/core/titulo-eleitor/index.ts"],"names":[],"mappings":"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","file":"chunk-MLPXW7N2.js","sourcesContent":["/**\n * Título de Eleitor constants — modulo 11 (TSE Res. 20.132/1998 + algorithm cross-checks).\n * @see https://www.tse.jus.br/legislacao/compilada/res/1998/resolucao-no-20-132-de-19-de-marco-de-1998 — Art. 10 (structure, mod 11)\n * @see https://pt.wikipedia.org/wiki/T%C3%ADtulo_eleitoral#C%C3%A1lculo_do_d%C3%ADgito_verificador — weights + SP/MG rule\n * @see http://ghiorzi.org/DVnew.htm#e — algorithm cross-check\n */\nimport type { UfCode } from '../../types/validation-result.js';\n\nexport const TITULO_ELEITOR_DV1_WEIGHTS_8 = [2, 3, 4, 5, 6, 7, 8, 9] as const;\nexport const TITULO_ELEITOR_DV1_WEIGHTS_9 = [9, 2, 3, 4, 5, 6, 7, 8, 9] as const;\nexport const TITULO_ELEITOR_DV2_WEIGHTS = [7, 8, 9] as const;\nexport const TITULO_ELEITOR_SEQUENTIAL_LENGTH = 8;\nexport const TITULO_ELEITOR_SEQUENTIAL_LENGTH_EXTENDED = 9;\nexport const TITULO_ELEITOR_LENGTH = 12;\nexport const TITULO_ELEITOR_LENGTH_EXTENDED = 13;\nexport const TITULO_ELEITOR_UF_LENGTH = 2;\nexport const TITULO_ELEITOR_DV_LENGTH = 2;\nexport const TITULO_ELEITOR_MIN_UF_CODE = 1;\nexport const TITULO_ELEITOR_MAX_UF_CODE = 28;\nexport const TITULO_ELEITOR_NUMERIC_PATTERN_12 = /^\\d{12}$/;\nexport const TITULO_ELEITOR_NUMERIC_PATTERN_13 = /^\\d{13}$/;\n\n/** TSE UF codes where remainder 0 maps DV to 1 instead of 0. */\nexport const TITULO_ELEITOR_SPECIAL_UF_CODES = [1, 2] as const;\n\n/** Golden primary — SC (UF=09), Wikipedia PT walkthrough. */\nexport const TITULO_ELEITOR_GOLDEN_PRIMARY = '004356870906';\nexport const TITULO_ELEITOR_GOLDEN_SP_SPECIAL = '000000000116';\nexport const TITULO_ELEITOR_GOLDEN_SP_EXTENDED = '1234567890175';\nexport const TITULO_ELEITOR_GOLDEN_EXTERIOR = '000000012895';\nexport const TITULO_ELEITOR_GOLDEN_MASKED_INPUT = '0043 5687 0906';\n\n/** Normative — Resolução TSE 20.132/1998, Art. 10 (8 seq + 2 UF + 2 DV, mod 11). */\nexport const TITULO_ELEITOR_OFFICIAL_SOURCE_URL =\n 'https://www.tse.jus.br/legislacao/compilada/res/1998/resolucao-no-20-132-de-19-de-marco-de-1998';\n\n/** Normative — Resolução TSE 23.659/2021 (Cadastro Eleitoral; confirms UF + DV structure). */\nexport const TITULO_ELEITOR_NORMATIVE_SECONDARY_URL =\n 'https://www.tse.jus.br/legislacao/compilada/res/2021/resolucao-no-23-659-de-26-de-outubro-de-2021';\n\n/**\n * Algorithm weights + SP/MG remainder-zero rule — not in TSE resolution text.\n * Community consensus validated empirically (Wikipedia PT worked example).\n */\nexport const TITULO_ELEITOR_ALGORITHM_WEIGHTS_REF_URL =\n 'https://pt.wikipedia.org/wiki/T%C3%ADtulo_eleitoral#C%C3%A1lculo_do_d%C3%ADgito_verificador';\n\n/** Algorithm cross-check — Ghiorzi DV table. */\nexport const TITULO_ELEITOR_ALGORITHM_REF_URL = 'http://ghiorzi.org/DVnew.htm#e';\n\nexport const TITULO_ELEITOR_TSE_PORTAL_URL = 'https://www.tse.jus.br/';\n\nexport const TITULO_ELEITOR_ETITULO_URL =\n 'https://www.tse.jus.br/eleitor/servicos/aplicativo-e-titulo';\n\n/** TSE electoral UF code → Brazilian UF (28 = exterior / ZZ). */\nexport const TITULO_ELEITOR_UF_BY_CODE: Readonly<Record<number, UfCode>> = {\n 1: 'SP',\n 2: 'MG',\n 3: 'RJ',\n 4: 'RS',\n 5: 'BA',\n 6: 'PR',\n 7: 'CE',\n 8: 'PE',\n 9: 'SC',\n 10: 'GO',\n 11: 'MA',\n 12: 'PB',\n 13: 'PA',\n 14: 'ES',\n 15: 'PI',\n 16: 'RN',\n 17: 'AL',\n 18: 'MT',\n 19: 'MS',\n 20: 'DF',\n 21: 'SE',\n 22: 'AM',\n 23: 'RO',\n 24: 'AC',\n 25: 'AP',\n 26: 'RR',\n 27: 'TO',\n};\n\nexport const TITULO_ELEITOR_EXTERIOR_UF_CODE = 28;\n","/**\n * Título de Eleitor check digits — modulo 11 (TSE / Wikipedia PT + Ghiorzi).\n * @see https://www.tse.jus.br/legislacao/compilada/res/1998/resolucao-no-20-132-de-19-de-marco-de-1998\n * @see https://pt.wikipedia.org/wiki/T%C3%ADtulo_eleitoral#C%C3%A1lculo_do_d%C3%ADgito_verificador\n * @see http://ghiorzi.org/DVnew.htm#e\n */\nimport { weightedSum } from '../cnpj/modulo11.js';\nimport {\n TITULO_ELEITOR_DV1_WEIGHTS_8,\n TITULO_ELEITOR_DV1_WEIGHTS_9,\n TITULO_ELEITOR_DV2_WEIGHTS,\n TITULO_ELEITOR_SPECIAL_UF_CODES,\n} from './constants.js';\n\nfunction digitValues(chars: string): number[] {\n const values: number[] = [];\n for (let i = 0; i < chars.length; i++) {\n values.push(Number(chars.charAt(i)));\n }\n return values;\n}\n\nfunction isSpecialUf(ufCode: number): boolean {\n return (TITULO_ELEITOR_SPECIAL_UF_CODES as readonly number[]).includes(ufCode);\n}\n\nexport function resolveTituloEleitorCheckDigit(remainder: number, ufCode: number): number {\n if (remainder >= 10) {\n return 0;\n }\n if (remainder === 0 && isSpecialUf(ufCode)) {\n return 1;\n }\n return remainder;\n}\n\nexport function computeTituloEleitorFirstCheckDigit(sequential: string, ufCode: number): number {\n const weights =\n sequential.length === 8 ? TITULO_ELEITOR_DV1_WEIGHTS_8 : TITULO_ELEITOR_DV1_WEIGHTS_9;\n const remainder = weightedSum(digitValues(sequential), weights) % 11;\n return resolveTituloEleitorCheckDigit(remainder, ufCode);\n}\n\nexport function computeTituloEleitorSecondCheckDigit(\n ufDigits: string,\n firstDv: number,\n ufCode: number,\n): number {\n const uf1 = Number(ufDigits.charAt(0));\n const uf2 = Number(ufDigits.charAt(1));\n const remainder = weightedSum([uf1, uf2, firstDv], TITULO_ELEITOR_DV2_WEIGHTS) % 11;\n return resolveTituloEleitorCheckDigit(remainder, ufCode);\n}\n\nexport function computeTituloEleitorCheckDigits(\n sequential: string,\n ufDigits: string,\n ufCode: number,\n): string {\n const dv1 = computeTituloEleitorFirstCheckDigit(sequential, ufCode);\n const dv2 = computeTituloEleitorSecondCheckDigit(ufDigits, dv1, ufCode);\n return `${String(dv1)}${String(dv2)}`;\n}\n","import {\n TITULO_ELEITOR_LENGTH,\n TITULO_ELEITOR_LENGTH_EXTENDED,\n TITULO_ELEITOR_SEQUENTIAL_LENGTH,\n TITULO_ELEITOR_SEQUENTIAL_LENGTH_EXTENDED,\n TITULO_ELEITOR_SPECIAL_UF_CODES,\n} from './constants.js';\n\nexport type TituloEleitorParts = {\n sequential: string;\n ufDigits: string;\n ufCode: number;\n checkDigits: string;\n};\n\nexport function parseTituloEleitorParts(stripped: string): TituloEleitorParts | null {\n if (stripped.length === TITULO_ELEITOR_LENGTH) {\n return {\n sequential: stripped.slice(0, TITULO_ELEITOR_SEQUENTIAL_LENGTH),\n ufDigits: stripped.slice(TITULO_ELEITOR_SEQUENTIAL_LENGTH, TITULO_ELEITOR_LENGTH - 2),\n ufCode: Number(stripped.slice(TITULO_ELEITOR_SEQUENTIAL_LENGTH, TITULO_ELEITOR_LENGTH - 2)),\n checkDigits: stripped.slice(TITULO_ELEITOR_LENGTH - 2),\n };\n }\n\n if (stripped.length === TITULO_ELEITOR_LENGTH_EXTENDED) {\n const ufDigits = stripped.slice(\n TITULO_ELEITOR_SEQUENTIAL_LENGTH_EXTENDED,\n TITULO_ELEITOR_SEQUENTIAL_LENGTH_EXTENDED + 2,\n );\n const ufCode = Number(ufDigits);\n if (!(TITULO_ELEITOR_SPECIAL_UF_CODES as readonly number[]).includes(ufCode)) {\n return null;\n }\n return {\n sequential: stripped.slice(0, TITULO_ELEITOR_SEQUENTIAL_LENGTH_EXTENDED),\n ufDigits,\n ufCode,\n checkDigits: stripped.slice(TITULO_ELEITOR_LENGTH_EXTENDED - 2),\n };\n }\n\n return null;\n}\n","/**\n * Título de Eleitor validation — modulo 11 (TSE Res. 20.132/1998 + algorithm cross-checks).\n * @see https://www.tse.jus.br/legislacao/compilada/res/1998/resolucao-no-20-132-de-19-de-marco-de-1998\n * @see https://pt.wikipedia.org/wiki/T%C3%ADtulo_eleitoral#C%C3%A1lculo_do_d%C3%ADgito_verificador\n * @see http://ghiorzi.org/DVnew.htm#e\n */\nimport { stripTituloEleitor } from '../../strip/index.js';\nimport type { TituloEleitorValidationResult, UfCode } from '../../types/validation-result.js';\nimport { brandTituloEleitor } from '../../types/validation-result.js';\nimport { computeTituloEleitorCheckDigits } from './check-digits.js';\nimport {\n TITULO_ELEITOR_EXTERIOR_UF_CODE,\n TITULO_ELEITOR_LENGTH,\n TITULO_ELEITOR_LENGTH_EXTENDED,\n TITULO_ELEITOR_MAX_UF_CODE,\n TITULO_ELEITOR_MIN_UF_CODE,\n TITULO_ELEITOR_UF_BY_CODE,\n} from './constants.js';\nimport { parseTituloEleitorParts } from './parse.js';\n\nexport {\n TITULO_ELEITOR_ALGORITHM_REF_URL,\n TITULO_ELEITOR_ALGORITHM_WEIGHTS_REF_URL,\n TITULO_ELEITOR_DV1_WEIGHTS_8,\n TITULO_ELEITOR_DV1_WEIGHTS_9,\n TITULO_ELEITOR_DV2_WEIGHTS,\n TITULO_ELEITOR_ETITULO_URL,\n TITULO_ELEITOR_EXTERIOR_UF_CODE,\n TITULO_ELEITOR_GOLDEN_EXTERIOR,\n TITULO_ELEITOR_GOLDEN_MASKED_INPUT,\n TITULO_ELEITOR_GOLDEN_PRIMARY,\n TITULO_ELEITOR_GOLDEN_SP_EXTENDED,\n TITULO_ELEITOR_GOLDEN_SP_SPECIAL,\n TITULO_ELEITOR_LENGTH,\n TITULO_ELEITOR_LENGTH_EXTENDED,\n TITULO_ELEITOR_NORMATIVE_SECONDARY_URL,\n TITULO_ELEITOR_NUMERIC_PATTERN_12,\n TITULO_ELEITOR_NUMERIC_PATTERN_13,\n TITULO_ELEITOR_OFFICIAL_SOURCE_URL,\n TITULO_ELEITOR_SEQUENTIAL_LENGTH,\n TITULO_ELEITOR_SEQUENTIAL_LENGTH_EXTENDED,\n TITULO_ELEITOR_SPECIAL_UF_CODES,\n TITULO_ELEITOR_TSE_PORTAL_URL,\n TITULO_ELEITOR_UF_BY_CODE,\n} from './constants.js';\n\ntype FailedResult = Extract<TituloEleitorValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string, ufCode?: number): FailedResult {\n if (ufCode === undefined) {\n return { ok: false, code, message };\n }\n return { ok: false, code, message, ufCode };\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 isValidUfCode(ufCode: number): boolean {\n return ufCode >= TITULO_ELEITOR_MIN_UF_CODE && ufCode <= TITULO_ELEITOR_MAX_UF_CODE;\n}\n\nfunction resolveUf(ufCode: number): UfCode | undefined {\n return TITULO_ELEITOR_UF_BY_CODE[ufCode];\n}\n\ntype StructureResult =\n | { ok: false; error: FailedResult }\n | { ok: true; parts: NonNullable<ReturnType<typeof parseTituloEleitorParts>> };\n\nfunction validateStructure(input: string, stripped: string): StructureResult {\n if (stripped.length === 0) {\n return { ok: false, error: failure('EMPTY_INPUT', 'Título de Eleitor input is empty') };\n }\n\n if (/[^0-9\\s]/.test(input.replace(/\\s/g, ''))) {\n return { ok: false, error: failure('INVALID_CHARACTER', 'Título de Eleitor contains invalid characters') };\n }\n\n if (stripped.length !== TITULO_ELEITOR_LENGTH && stripped.length !== TITULO_ELEITOR_LENGTH_EXTENDED) {\n return {\n ok: false,\n error: failure(\n 'INVALID_LENGTH',\n `Título de Eleitor must have ${TITULO_ELEITOR_LENGTH} or ${TITULO_ELEITOR_LENGTH_EXTENDED} digits after normalization`,\n ),\n };\n }\n\n const parts = parseTituloEleitorParts(stripped);\n if (!parts) {\n return {\n ok: false,\n error: failure(\n 'UNSUPPORTED_FORMAT',\n `13-digit Título de Eleitor is only valid for SP (01) or MG (02)`,\n ),\n };\n }\n\n if (!isValidUfCode(parts.ufCode)) {\n return {\n ok: false,\n error: failure(\n 'KNOWN_INVALID_PATTERN',\n `Título de Eleitor UF code ${parts.ufDigits} is not a valid TSE electoral code`,\n parts.ufCode,\n ),\n };\n }\n\n if (hasRepeatedDigits(stripped)) {\n return {\n ok: false,\n error: failure('KNOWN_INVALID_PATTERN', 'Título de Eleitor with all identical digits is invalid'),\n };\n }\n\n return { ok: true, parts };\n}\n\nfunction isValidTituloEleitorChecksum(parts: {\n sequential: string;\n ufDigits: string;\n ufCode: number;\n checkDigits: string;\n}): boolean {\n const expected = computeTituloEleitorCheckDigits(parts.sequential, parts.ufDigits, parts.ufCode);\n return parts.checkDigits === expected;\n}\n\nexport function isValidTituloEleitor(input: string): boolean {\n return validateTituloEleitor(input).ok;\n}\n\nexport function validateTituloEleitor(input: string): TituloEleitorValidationResult {\n const stripped = stripTituloEleitor(input);\n const structure = validateStructure(input, stripped);\n if (!structure.ok) {\n return structure.error;\n }\n\n const { parts } = structure;\n\n if (!isValidTituloEleitorChecksum(parts)) {\n return failure('INVALID_CHECK_DIGIT', 'Título de Eleitor check digits are invalid', parts.ufCode);\n }\n\n const uf = resolveUf(parts.ufCode);\n const success: Extract<TituloEleitorValidationResult, { ok: true }> = {\n ok: true,\n value: brandTituloEleitor(stripped),\n format: 'numeric',\n ufCode: parts.ufCode,\n };\n if (uf !== undefined) {\n success.uf = uf;\n } else if (parts.ufCode === TITULO_ELEITOR_EXTERIOR_UF_CODE) {\n success.exterior = true;\n }\n return success;\n}\n"]}
import { validateTituloEleitor } from './chunk-MLPXW7N2.js';
import { validateTelefone } from './chunk-5UL3M7IU.js';
import { validateInscricaoEstadual } from './chunk-3QP6R46N.js';
import { isSpRuralIeInput, validateIeProdutorRural } from './chunk-Y6IW2LMW.js';
import { validateNfeChave, NFE_CHAVE_LENGTH } from './chunk-D36RM7OD.js';
import { validatePisPasep } from './chunk-KH7DWOUA.js';
import { validatePlaca, PLACA_LENGTH } from './chunk-WPL47PWJ.js';
import { validateBoleto, detectBoletoInputKind } from './chunk-4W4OKLSZ.js';
import { validateBrCode } from './chunk-WCQUQ2WX.js';
import { validatePixKey } from './chunk-MK7OJUF5.js';
import { validateCartaoCredito, CARTAO_PAN_MIN_LENGTH, CARTAO_PAN_MAX_LENGTH } from './chunk-EPKHEW5V.js';
import { validateCep } from './chunk-2JJS46FM.js';
import { validateCnh } from './chunk-US4OLTJ2.js';
import { validateCnpj, CNPJ_LENGTH } from './chunk-YXELVV37.js';
import { validateCpf } from './chunk-F6PTZY4O.js';
// src/detect/helpers.ts
function stripDigits(input) {
return input.replace(/\D/g, "");
}
function stripAlnumUpper(input) {
return input.replace(/[^A-Za-z0-9]/g, "").toUpperCase();
}
function hasLetters(input) {
return /[A-Za-z]/.test(input);
}
function looksLikeBrCode(input) {
const trimmed = input.trim();
return trimmed.startsWith("00020") && trimmed.length > 20;
}
function looksLikeBoleto(input) {
const kind = detectBoletoInputKind(input);
return kind === "linha-digitavel" || kind === "codigo-barras";
}
function isBoletoArrecadacao(input) {
return detectBoletoInputKind(input) === "arrecadacao";
}
function looksLikeNfeChave(input) {
const digits = stripDigits(input);
return digits.length === NFE_CHAVE_LENGTH && /^\d+$/.test(digits);
}
function looksLikeCnpjNumeric(input) {
const digits = stripDigits(input);
return digits.length === CNPJ_LENGTH && /^\d+$/.test(digits);
}
function looksLikeCnpjAlphanumeric(input) {
const stripped = stripAlnumUpper(input);
return stripped.length === CNPJ_LENGTH && hasLetters(input);
}
function looksLikeElevenDigits(input) {
const digits = stripDigits(input);
return digits.length === 11 && /^\d+$/.test(digits);
}
function looksLikeTituloEleitor(input) {
const digits = stripDigits(input);
return digits.length === 12 && /^\d+$/.test(digits);
}
function looksLikeCep(input) {
const digits = stripDigits(input);
return digits.length === 8 && /^\d+$/.test(digits);
}
function looksLikePlaca(input) {
const stripped = stripAlnumUpper(input);
return stripped.length === PLACA_LENGTH && /^[A-Z0-9]+$/.test(stripped);
}
function looksLikeCartao(input) {
const withoutMask = input.replace(/[\s-]/g, "");
if (/[^0-9]/.test(withoutMask)) {
return false;
}
const digits = stripDigits(input);
return digits.length >= CARTAO_PAN_MIN_LENGTH && digits.length <= CARTAO_PAN_MAX_LENGTH;
}
function looksLikeIe(input, uf) {
if (!uf) {
return false;
}
if (uf === "SP" && isSpRuralIeInput(input)) {
return true;
}
const digits = stripDigits(input);
return digits.length >= 8 && digits.length <= 14;
}
function looksLikePix(input) {
const trimmed = input.trim();
if (trimmed.includes("@")) {
return true;
}
if (/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(trimmed)) {
return true;
}
if (/^\+?\d/.test(trimmed)) {
const digits = stripDigits(trimmed);
return digits.length === 11 || digits.length === 14;
}
return false;
}
function looksLikeTelefone(input) {
const digits = stripDigits(input);
return digits.length >= 10 && digits.length <= 13;
}
// src/detect/index.ts
function success(type, value, format, meta) {
return { type, ok: true, value, ...format ? { format } : {}, ...meta ? { meta } : {} };
}
function tryValidators(attempts) {
for (const attempt of attempts) {
const result = attempt();
if (result) {
return result;
}
}
return null;
}
var CANDIDATES = [
{
canTry: (raw) => looksLikeBoleto(raw) && !isBoletoArrecadacao(raw),
detect: (raw) => {
const result = validateBoleto(raw);
if (!result.ok) {
return null;
}
return success("boleto", result.value, result.format, {
inputKind: result.inputKind,
situacao: result.situacao
});
}
},
{
canTry: (raw) => looksLikeNfeChave(raw),
detect: (raw) => {
const result = validateNfeChave(raw);
if (!result.ok) {
return null;
}
return success("nfe-chave", result.value, result.format, {
parsed: result.parsed,
uf: result.uf
});
}
},
{
canTry: (raw) => looksLikeBrCode(raw),
detect: (raw) => {
const result = validateBrCode(raw);
if (!result.ok) {
return null;
}
return success("brcode", result.value, result.format, {
merchantName: result.merchantName,
merchantCity: result.merchantCity,
pixKey: result.pixKey,
pixKeyType: result.pixKeyType
});
}
},
{
canTry: (raw) => looksLikeCnpjAlphanumeric(raw),
detect: (raw) => {
const result = validateCnpj(raw);
if (!result.ok) {
return null;
}
return success("cnpj", result.value, result.format);
}
},
{
canTry: (raw) => looksLikeCnpjNumeric(raw),
detect: (raw) => {
const result = validateCnpj(raw);
if (!result.ok) {
return null;
}
return success("cnpj", result.value, result.format);
}
},
{
canTry: (raw) => looksLikeElevenDigits(raw),
detect: (raw) => tryValidators([
() => {
const result = validateCpf(raw);
return result.ok ? success("cpf", result.value, result.format) : null;
},
() => {
const result = validateCnh(raw);
return result.ok ? success("cnh", result.value, result.format) : null;
},
() => {
const result = validatePisPasep(raw);
return result.ok ? success("pis-pasep", result.value, result.format) : null;
}
])
},
{
canTry: (raw) => looksLikeTituloEleitor(raw),
detect: (raw) => {
const result = validateTituloEleitor(raw);
if (!result.ok) {
return null;
}
return success("titulo-eleitor", result.value, result.format, {
ufCode: result.ufCode,
...result.uf ? { uf: result.uf } : {},
...result.exterior ? { exterior: result.exterior } : {}
});
}
},
{
canTry: (raw) => looksLikeCep(raw),
detect: (raw) => {
const result = validateCep(raw);
if (!result.ok) {
return null;
}
return success("cep", result.value, result.format);
}
},
{
canTry: (raw) => looksLikePlaca(raw),
detect: (raw) => {
const result = validatePlaca(raw);
if (!result.ok) {
return null;
}
return success("placa", result.value, result.format);
}
},
{
canTry: (raw) => looksLikePix(raw),
detect: (raw) => {
const result = validatePixKey(raw);
if (!result.ok) {
return null;
}
return success("pix", result.value, result.format, { keyType: result.keyType });
}
},
{
canTry: (raw) => looksLikeTelefone(raw),
detect: (raw) => {
const result = validateTelefone(raw);
if (!result.ok) {
return null;
}
return success("telefone", result.value, result.format, { tipo: result.tipo });
}
},
{
canTry: (raw) => looksLikeCartao(raw),
detect: (raw) => {
const result = validateCartaoCredito(raw);
if (!result.ok) {
return null;
}
return success("cartao-credito", result.value, result.format, { brand: result.brand });
}
},
{
canTry: (raw, options) => looksLikeIe(raw, options.uf),
detect: (raw, options) => {
const uf = options.uf;
if (uf === "SP" && isSpRuralIeInput(raw)) {
const result2 = validateIeProdutorRural(uf, raw);
if (!result2.ok) {
return null;
}
return success("inscricao-estadual-produtor-rural", result2.value, result2.format, { uf: result2.uf });
}
const result = validateInscricaoEstadual(raw, { uf });
if (!result.ok) {
return null;
}
return success("inscricao-estadual", result.value, result.format, { uf: result.uf });
}
}
];
function detect(raw, options = {}) {
const trimmed = raw.trim();
if (trimmed.length === 0) {
return {
type: "unknown",
ok: false,
code: "EMPTY_INPUT",
message: "Input is empty"
};
}
for (const candidate of CANDIDATES) {
if (!candidate.canTry(trimmed, options)) {
continue;
}
const result = candidate.detect(trimmed, options);
if (result?.ok) {
return result;
}
}
return {
type: "unknown",
ok: false,
code: "UNSUPPORTED_FORMAT",
message: options.uf ? "No supported document type matched the input" : "No supported document type matched the input; provide options.uf for Inscri\xE7\xE3o Estadual detection"
};
}
export { detect };
//# sourceMappingURL=chunk-OCYXNLHO.js.map
//# sourceMappingURL=chunk-OCYXNLHO.js.map
{"version":3,"sources":["../src/detect/helpers.ts","../src/detect/index.ts"],"names":["result"],"mappings":"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","file":"chunk-OCYXNLHO.js","sourcesContent":["import { BOLETO_CODIGO_BARRAS_LENGTH, BOLETO_LINHA_LENGTH } from '../core/boleto/constants.js';\nimport { CARTAO_PAN_MAX_LENGTH, CARTAO_PAN_MIN_LENGTH } from '../core/cartao-credito/constants.js';\nimport { CNPJ_LENGTH } from '../core/cnpj/constants.js';\nimport { NFE_CHAVE_LENGTH } from '../core/nfe-chave/constants.js';\nimport { PLACA_LENGTH } from '../core/placa/constants.js';\nimport { detectBoletoInputKind } from '../core/boleto/detect.js';\nimport { isSpRuralIeInput } from '../core/inscricao-estadual/sp-rural.js';\n\nexport function stripDigits(input: string): string {\n return input.replace(/\\D/g, '');\n}\n\nexport function stripAlnumUpper(input: string): string {\n return input.replace(/[^A-Za-z0-9]/g, '').toUpperCase();\n}\n\nexport function hasLetters(input: string): boolean {\n return /[A-Za-z]/.test(input);\n}\n\nexport function looksLikeBrCode(input: string): boolean {\n const trimmed = input.trim();\n return trimmed.startsWith('00020') && trimmed.length > 20;\n}\n\nexport function looksLikeBoleto(input: string): boolean {\n const kind = detectBoletoInputKind(input);\n return kind === 'linha-digitavel' || kind === 'codigo-barras';\n}\n\nexport function isBoletoArrecadacao(input: string): boolean {\n return detectBoletoInputKind(input) === 'arrecadacao';\n}\n\nexport function looksLikeNfeChave(input: string): boolean {\n const digits = stripDigits(input);\n return digits.length === NFE_CHAVE_LENGTH && /^\\d+$/.test(digits);\n}\n\nexport function looksLikeCnpjNumeric(input: string): boolean {\n const digits = stripDigits(input);\n return digits.length === CNPJ_LENGTH && /^\\d+$/.test(digits);\n}\n\nexport function looksLikeCnpjAlphanumeric(input: string): boolean {\n const stripped = stripAlnumUpper(input);\n return stripped.length === CNPJ_LENGTH && hasLetters(input);\n}\n\nexport function looksLikeElevenDigits(input: string): boolean {\n const digits = stripDigits(input);\n return digits.length === 11 && /^\\d+$/.test(digits);\n}\n\nexport function looksLikeTituloEleitor(input: string): boolean {\n const digits = stripDigits(input);\n return digits.length === 12 && /^\\d+$/.test(digits);\n}\n\nexport function looksLikeCep(input: string): boolean {\n const digits = stripDigits(input);\n return digits.length === 8 && /^\\d+$/.test(digits);\n}\n\nexport function looksLikePlaca(input: string): boolean {\n const stripped = stripAlnumUpper(input);\n return stripped.length === PLACA_LENGTH && /^[A-Z0-9]+$/.test(stripped);\n}\n\nexport function looksLikeCartao(input: string): boolean {\n const withoutMask = input.replace(/[\\s-]/g, '');\n if (/[^0-9]/.test(withoutMask)) {\n return false;\n }\n const digits = stripDigits(input);\n return digits.length >= CARTAO_PAN_MIN_LENGTH && digits.length <= CARTAO_PAN_MAX_LENGTH;\n}\n\nexport function looksLikeIe(input: string, uf?: string): boolean {\n if (!uf) {\n return false;\n }\n if (uf === 'SP' && isSpRuralIeInput(input)) {\n return true;\n }\n const digits = stripDigits(input);\n return digits.length >= 8 && digits.length <= 14;\n}\n\nexport function looksLikePix(input: string): boolean {\n const trimmed = input.trim();\n if (trimmed.includes('@')) {\n return true;\n }\n if (/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(trimmed)) {\n return true;\n }\n if (/^\\+?\\d/.test(trimmed)) {\n const digits = stripDigits(trimmed);\n return digits.length === 11 || digits.length === 14;\n }\n return false;\n}\n\nexport function looksLikeTelefone(input: string): boolean {\n const digits = stripDigits(input);\n return digits.length >= 10 && digits.length <= 13;\n}\n\nexport {\n BOLETO_CODIGO_BARRAS_LENGTH,\n BOLETO_LINHA_LENGTH,\n};\n","/**\n * Unified document type detection — delegates to existing validators (BR-DETECT-001).\n * @see docs/VALIDATION-RULES.md\n */\nimport { validateBoleto } from '../core/boleto/index.js';\nimport { validateBrCode } from '../core/brcode/index.js';\nimport { validateCartaoCredito } from '../core/cartao-credito/index.js';\nimport { validateCep } from '../core/cep/index.js';\nimport { validateCnh } from '../core/cnh/index.js';\nimport { validateCnpj } from '../core/cnpj/index.js';\nimport { validateCpf } from '../core/cpf/index.js';\nimport { validateInscricaoEstadual } from '../core/inscricao-estadual/index.js';\nimport { validateIeProdutorRural } from '../core/inscricao-estadual/validate-produtor-rural.js';\nimport { isSpRuralIeInput } from '../core/inscricao-estadual/sp-rural.js';\nimport { validateNfeChave } from '../core/nfe-chave/index.js';\nimport { validatePisPasep } from '../core/pis-pasep/index.js';\nimport { validatePlaca } from '../core/placa/index.js';\nimport { validatePixKey } from '../core/pix/index.js';\nimport { validateTelefone } from '../core/telefone/index.js';\nimport { validateTituloEleitor } from '../core/titulo-eleitor/index.js';\nimport {\n isBoletoArrecadacao,\n looksLikeBoleto,\n looksLikeBrCode,\n looksLikeCartao,\n looksLikeCep,\n looksLikeCnpjAlphanumeric,\n looksLikeCnpjNumeric,\n looksLikeElevenDigits,\n looksLikeIe,\n looksLikeNfeChave,\n looksLikePix,\n looksLikePlaca,\n looksLikeTelefone,\n looksLikeTituloEleitor,\n} from './helpers.js';\nimport type { DocumentFormat, UfCode, ValidationErrorCode } from '../types/validation-result.js';\n\nexport type DetectableDocumentType =\n | 'cpf'\n | 'cnpj'\n | 'cep'\n | 'placa'\n | 'pis-pasep'\n | 'pix'\n | 'telefone'\n | 'boleto'\n | 'cartao-credito'\n | 'cnh'\n | 'renavam'\n | 'nfe-chave'\n | 'titulo-eleitor'\n | 'inscricao-estadual'\n | 'inscricao-estadual-produtor-rural'\n | 'brcode'\n | 'unknown';\n\nexport type DetectOptions = {\n uf?: UfCode;\n};\n\nexport type DetectSuccess = {\n type: DetectableDocumentType;\n ok: true;\n value: string;\n format?: DocumentFormat;\n meta?: Record<string, unknown>;\n};\n\nexport type DetectFailure = {\n type: DetectableDocumentType;\n ok: false;\n code: ValidationErrorCode;\n message: string;\n};\n\nexport type DetectResult = DetectSuccess | DetectFailure;\n\ntype Candidate = {\n canTry: (raw: string, options: DetectOptions) => boolean;\n detect: (raw: string, options: DetectOptions) => DetectResult | null;\n};\n\n/** @internal Test hook for success result branches. */\nexport function buildDetectSuccess(\n type: DetectableDocumentType,\n value: string,\n format?: DocumentFormat,\n meta?: Record<string, unknown>,\n): DetectResult {\n return success(type, value, format, meta);\n}\n\nfunction success(\n type: DetectableDocumentType,\n value: string,\n format?: DocumentFormat,\n meta?: Record<string, unknown>,\n): DetectResult {\n return { type, ok: true, value, ...(format ? { format } : {}), ...(meta ? { meta } : {}) };\n}\n\nfunction tryValidators(attempts: Array<() => DetectResult | null>): DetectResult | null {\n for (const attempt of attempts) {\n const result = attempt();\n if (result) {\n return result;\n }\n }\n return null;\n}\n\nconst CANDIDATES: Candidate[] = [\n {\n canTry: (raw) => looksLikeBoleto(raw) && !isBoletoArrecadacao(raw),\n detect: (raw) => {\n const result = validateBoleto(raw);\n if (!result.ok) {\n return null;\n }\n return success('boleto', result.value, result.format, {\n inputKind: result.inputKind,\n situacao: result.situacao,\n });\n },\n },\n {\n canTry: (raw) => looksLikeNfeChave(raw),\n detect: (raw) => {\n const result = validateNfeChave(raw);\n if (!result.ok) {\n return null;\n }\n return success('nfe-chave', result.value, result.format, {\n parsed: result.parsed,\n uf: result.uf,\n });\n },\n },\n {\n canTry: (raw) => looksLikeBrCode(raw),\n detect: (raw) => {\n const result = validateBrCode(raw);\n if (!result.ok) {\n return null;\n }\n return success('brcode', result.value, result.format, {\n merchantName: result.merchantName,\n merchantCity: result.merchantCity,\n pixKey: result.pixKey,\n pixKeyType: result.pixKeyType,\n });\n },\n },\n {\n canTry: (raw) => looksLikeCnpjAlphanumeric(raw),\n detect: (raw) => {\n const result = validateCnpj(raw);\n if (!result.ok) {\n return null;\n }\n return success('cnpj', result.value, result.format);\n },\n },\n {\n canTry: (raw) => looksLikeCnpjNumeric(raw),\n detect: (raw) => {\n const result = validateCnpj(raw);\n if (!result.ok) {\n return null;\n }\n return success('cnpj', result.value, result.format);\n },\n },\n {\n canTry: (raw) => looksLikeElevenDigits(raw),\n detect: (raw) =>\n tryValidators([\n () => {\n const result = validateCpf(raw);\n return result.ok ? success('cpf', result.value, result.format) : null;\n },\n () => {\n const result = validateCnh(raw);\n return result.ok ? success('cnh', result.value, result.format) : null;\n },\n () => {\n const result = validatePisPasep(raw);\n return result.ok ? success('pis-pasep', result.value, result.format) : null;\n },\n ]),\n },\n {\n canTry: (raw) => looksLikeTituloEleitor(raw),\n detect: (raw) => {\n const result = validateTituloEleitor(raw);\n if (!result.ok) {\n return null;\n }\n return success('titulo-eleitor', result.value, result.format, {\n ufCode: result.ufCode,\n ...(result.uf ? { uf: result.uf } : {}),\n ...(result.exterior ? { exterior: result.exterior } : {}),\n });\n },\n },\n {\n canTry: (raw) => looksLikeCep(raw),\n detect: (raw) => {\n const result = validateCep(raw);\n if (!result.ok) {\n return null;\n }\n return success('cep', result.value, result.format);\n },\n },\n {\n canTry: (raw) => looksLikePlaca(raw),\n detect: (raw) => {\n const result = validatePlaca(raw);\n if (!result.ok) {\n return null;\n }\n return success('placa', result.value, result.format);\n },\n },\n {\n canTry: (raw) => looksLikePix(raw),\n detect: (raw) => {\n const result = validatePixKey(raw);\n if (!result.ok) {\n return null;\n }\n return success('pix', result.value, result.format, { keyType: result.keyType });\n },\n },\n {\n canTry: (raw) => looksLikeTelefone(raw),\n detect: (raw) => {\n const result = validateTelefone(raw);\n if (!result.ok) {\n return null;\n }\n return success('telefone', result.value, result.format, { tipo: result.tipo });\n },\n },\n {\n canTry: (raw) => looksLikeCartao(raw),\n detect: (raw) => {\n const result = validateCartaoCredito(raw);\n if (!result.ok) {\n return null;\n }\n return success('cartao-credito', result.value, result.format, { brand: result.brand });\n },\n },\n {\n canTry: (raw, options) => looksLikeIe(raw, options.uf),\n detect: (raw, options) => {\n const uf = options.uf as UfCode;\n if (uf === 'SP' && isSpRuralIeInput(raw)) {\n const result = validateIeProdutorRural(uf, raw);\n if (!result.ok) {\n return null;\n }\n return success('inscricao-estadual-produtor-rural', result.value, result.format, { uf: result.uf });\n }\n const result = validateInscricaoEstadual(raw, { uf });\n if (!result.ok) {\n return null;\n }\n return success('inscricao-estadual', result.value, result.format, { uf: result.uf });\n },\n },\n];\n\nexport function detect(raw: string, options: DetectOptions = {}): DetectResult {\n const trimmed = raw.trim();\n if (trimmed.length === 0) {\n return {\n type: 'unknown',\n ok: false,\n code: 'EMPTY_INPUT',\n message: 'Input is empty',\n };\n }\n\n for (const candidate of CANDIDATES) {\n if (!candidate.canTry(trimmed, options)) {\n continue;\n }\n const result = candidate.detect(trimmed, options);\n if (result?.ok) {\n return result;\n }\n }\n\n return {\n type: 'unknown',\n ok: false,\n code: 'UNSUPPORTED_FORMAT',\n message: options.uf\n ? 'No supported document type matched the input'\n : 'No supported document type matched the input; provide options.uf for Inscrição Estadual detection',\n };\n}\n"]}
import { validateTituloEleitor, TITULO_ELEITOR_NUMERIC_PATTERN_12, TITULO_ELEITOR_NUMERIC_PATTERN_13, TITULO_ELEITOR_LENGTH, TITULO_ELEITOR_LENGTH_EXTENDED } from './chunk-MLPXW7N2.js';
// src/core/titulo-eleitor/mask.ts
function applyTituloEleitorMask(canonical) {
if (TITULO_ELEITOR_NUMERIC_PATTERN_12.test(canonical)) {
return `${canonical.slice(0, 4)} ${canonical.slice(4, 8)} ${canonical.slice(8)}`;
}
if (TITULO_ELEITOR_NUMERIC_PATTERN_13.test(canonical)) {
return `${canonical.slice(0, 5)} ${canonical.slice(5, 9)} ${canonical.slice(9)}`;
}
throw new Error(
`T\xEDtulo de Eleitor must have exactly ${TITULO_ELEITOR_LENGTH} or ${TITULO_ELEITOR_LENGTH_EXTENDED} digits to format`
);
}
// src/format/titulo-eleitor.ts
function formatTituloEleitor(input) {
const result = validateTituloEleitor(input);
if (!result.ok) {
return { ok: false, code: result.code, message: result.message };
}
return { ok: true, formatted: applyTituloEleitorMask(result.value) };
}
export { formatTituloEleitor };
//# sourceMappingURL=chunk-PB4RIS6G.js.map
//# sourceMappingURL=chunk-PB4RIS6G.js.map
{"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-PB4RIS6G.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"]}
import { validateCartaoCredito, applyCartaoCreditoMask } from './chunk-EPKHEW5V.js';
// src/format/cartao-credito.ts
function formatCartaoCredito(input) {
const result = validateCartaoCredito(input);
if (!result.ok) {
return { ok: false, code: result.code, message: result.message };
}
return { ok: true, formatted: applyCartaoCreditoMask(result.value) };
}
export { formatCartaoCredito };
//# sourceMappingURL=chunk-XKY2CV3G.js.map
//# sourceMappingURL=chunk-XKY2CV3G.js.map
{"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"]}