UNPKG

zaperson

Version:

A lib for parsing, formatting, and validating Brazilian phone numbers.

519 lines (515 loc) 12.5 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/index.ts var index_exports = {}; __export(index_exports, { Zaperson: () => Zaperson }); module.exports = __toCommonJS(index_exports); // src/data/ddd.ts var dddInfo = [ { ddd: "11" /* DDD_11 */, state: "S\xE3o Paulo", uf: "SP", region: "Regi\xE3o Metropolitana de S\xE3o Paulo/Regi\xE3o Metropolitana de Jundia\xED/Regi\xE3o Geogr\xE1fica Imediata de Bragan\xE7a Paulista" }, { ddd: "12" /* DDD_12 */, state: "S\xE3o Paulo", uf: "SP", region: "Regi\xE3o Metropolitana do Vale do Para\xEDba e Litoral Norte" }, { ddd: "13" /* DDD_13 */, state: "S\xE3o Paulo", uf: "SP", region: "Regi\xE3o Metropolitana da Baixada Santista/Vale do Ribeira" }, { ddd: "14" /* DDD_14 */, state: "S\xE3o Paulo", uf: "SP", region: "Avar\xE9/Bauru/Botucatu/Ja\xFA/Lins/Mar\xEDlia/Ourinhos" }, { ddd: "15" /* DDD_15 */, state: "S\xE3o Paulo", uf: "SP", region: "Itapetininga/Itapeva/Sorocaba/Tatu\xED" }, { ddd: "16" /* DDD_16 */, state: "S\xE3o Paulo", uf: "SP", region: "Araraquara/Franca/Jaboticabal/Ribeir\xE3o Preto/S\xE3o Carlos/Sert\xE3ozinho" }, { ddd: "17" /* DDD_17 */, state: "S\xE3o Paulo", uf: "SP", region: "Barretos/Catanduva/Fernand\xF3polis/Jales/S\xE3o Jos\xE9 do Rio Preto/Votuporanga" }, { ddd: "18" /* DDD_18 */, state: "S\xE3o Paulo", uf: "SP", region: "Andradina/Ara\xE7atuba/Assis/Birigui/Dracena/Presidente Prudente" }, { ddd: "19" /* DDD_19 */, state: "S\xE3o Paulo", uf: "SP", region: "Americana/Campinas/Limeira/Piracicaba/Rio Claro/S\xE3o Jo\xE3o da Boa Vista" }, { ddd: "21" /* DDD_21 */, state: "Rio de Janeiro", uf: "RJ", region: "Rio de Janeiro e Regi\xE3o Metropolitana/Teres\xF3polis" }, { ddd: "22" /* DDD_22 */, state: "Rio de Janeiro", uf: "RJ", region: "Cabo Frio/Campos dos Goytacazes/Itaperuna/Maca\xE9/Nova Friburgo" }, { ddd: "24" /* DDD_24 */, state: "Rio de Janeiro", uf: "RJ", region: "Angra dos Reis/Petr\xF3polis/Volta Redonda/Pira\xED" }, { ddd: "27" /* DDD_27 */, state: "Esp\xEDrito Santo", uf: "ES", region: "Vit\xF3ria e Regi\xE3o Metropolitana/Colatina/Linhares/Santa Maria de Jetib\xE1" }, { ddd: "28" /* DDD_28 */, state: "Esp\xEDrito Santo", uf: "ES", region: "Cachoeiro de Itapemirim/Castelo/Itapemirim/Marata\xEDzes" }, { ddd: "31" /* DDD_31 */, state: "Minas Gerais", uf: "MG", region: "Belo Horizonte e Regi\xE3o Metropolitana/Conselheiro Lafaiete/Ipatinga/Vi\xE7osa" }, { ddd: "32" /* DDD_32 */, state: "Minas Gerais", uf: "MG", region: "Barbacena/Juiz de Fora/Muria\xE9/S\xE3o Jo\xE3o del-Rei/Ub\xE1" }, { ddd: "33" /* DDD_33 */, state: "Minas Gerais", uf: "MG", region: "Almenara/Caratinga/Governador Valadares/Manhua\xE7u/Te\xF3filo Otoni" }, { ddd: "34" /* DDD_34 */, state: "Minas Gerais", uf: "MG", region: "Araguari/Arax\xE1/Patos de Minas/Uberl\xE2ndia/Uberaba" }, { ddd: "35" /* DDD_35 */, state: "Minas Gerais", uf: "MG", region: "Alfenas/Guaxup\xE9/Lavras/Po\xE7os de Caldas/Pouso Alegre/Varginha" }, { ddd: "37" /* DDD_37 */, state: "Minas Gerais", uf: "MG", region: "Bom Despacho/Divin\xF3polis/Formiga/Ita\xFAna/Par\xE1 de Minas" }, { ddd: "38" /* DDD_38 */, state: "Minas Gerais", uf: "MG", region: "Curvelo/Diamantina/Montes Claros/Pirapora/Una\xED" }, { ddd: "41" /* DDD_41 */, state: "Paran\xE1", uf: "PR", region: "Curitiba e Regi\xE3o Metropolitana" }, { ddd: "42" /* DDD_42 */, state: "Paran\xE1", uf: "PR", region: "Ponta Grossa/Guarapuava" }, { ddd: "43" /* DDD_43 */, state: "Paran\xE1", uf: "PR", region: "Apucarana/Londrina" }, { ddd: "44" /* DDD_44 */, state: "Paran\xE1", uf: "PR", region: "Maring\xE1/Campo Mour\xE3o/Umuarama" }, { ddd: "45" /* DDD_45 */, state: "Paran\xE1", uf: "PR", region: "Cascavel/Foz do Igua\xE7u" }, { ddd: "46" /* DDD_46 */, state: "Paran\xE1", uf: "PR", region: "Francisco Beltr\xE3o/Pato Branco" }, { ddd: "47" /* DDD_47 */, state: "Santa Catarina", uf: "SC", region: "Balne\xE1rio Cambori\xFA/Blumenau/Itaja\xED/Joinville" }, { ddd: "48" /* DDD_48 */, state: "Santa Catarina", uf: "SC", region: "Florian\xF3polis e Regi\xE3o Metropolitana/Crici\xFAma" }, { ddd: "49" /* DDD_49 */, state: "Santa Catarina", uf: "SC", region: "Ca\xE7ador/Chapec\xF3/Conc\xF3rdia/Lages" }, { ddd: "51" /* DDD_51 */, state: "Rio Grande do Sul", uf: "RS", region: "Porto Alegre e Regi\xE3o Metropolitana/Santa Cruz do Sul/Litoral Norte" }, { ddd: "53" /* DDD_53 */, state: "Rio Grande do Sul", uf: "RS", region: "Pelotas/Rio Grande" }, { ddd: "54" /* DDD_54 */, state: "Rio Grande do Sul", uf: "RS", region: "Caxias do Sul/Passo Fundo" }, { ddd: "55" /* DDD_55 */, state: "Rio Grande do Sul", uf: "RS", region: "Santa Maria/Santana do Livramento/Santo \xC2ngelo/Uruguaiana" }, { ddd: "61" /* DDD_61 */, state: "Distrito Federal/Goi\xE1s", uf: "DF", region: "Abrang\xEAncia em todo o Distrito Federal e alguns munic\xEDpios da Regi\xE3o Integrada de Desenvolvimento do Distrito Federal e Entorno" }, { ddd: "62" /* DDD_62 */, state: "Goi\xE1s", uf: "GO", region: "Goi\xE2nia e Regi\xE3o Metropolitana/An\xE1polis/Niquel\xE2ndia/Porangatu" }, { ddd: "63" /* DDD_63 */, state: "Tocantins", uf: "TO", region: "Todo estado" }, { ddd: "64" /* DDD_64 */, state: "Goi\xE1s", uf: "GO", region: "Caldas Novas/Catal\xE3o/Itumbiara/Rio Verde" }, { ddd: "65" /* DDD_65 */, state: "Mato Grosso", uf: "MT", region: "Cuiab\xE1 e Regi\xE3o Metropolitana" }, { ddd: "66" /* DDD_66 */, state: "Mato Grosso", uf: "MT", region: "Rondon\xF3polis/Sinop" }, { ddd: "67" /* DDD_67 */, state: "Mato Grosso do Sul", uf: "MS", region: "Todo estado" }, { ddd: "68" /* DDD_68 */, state: "Acre", uf: "AC", region: "Todo estado" }, { ddd: "69" /* DDD_69 */, state: "Rond\xF4nia", uf: "RO", region: "Todo estado" }, { ddd: "71" /* DDD_71 */, state: "Bahia", uf: "BA", region: "Salvador e Regi\xE3o Metropolitana" }, { ddd: "73" /* DDD_73 */, state: "Bahia", uf: "BA", region: "Eun\xE1polis/Ilh\xE9us/Porto Seguro/Teixeira de Freitas" }, { ddd: "74" /* DDD_74 */, state: "Bahia", uf: "BA", region: "Irec\xEA/Jacobina/Juazeiro/Xique-Xique" }, { ddd: "75" /* DDD_75 */, state: "Bahia", uf: "BA", region: "Alagoinhas/Feira de Santana/Paulo Afonso/Valen\xE7a" }, { ddd: "77" /* DDD_77 */, state: "Bahia", uf: "BA", region: "Barreiras/Bom Jesus da Lapa/Guanambi/Vit\xF3ria da Conquista" }, { ddd: "79" /* DDD_79 */, state: "Sergipe", uf: "SE", region: "Todo estado" }, { ddd: "81" /* DDD_81 */, state: "Pernambuco", uf: "PE", region: "Recife e Regi\xE3o Metropolitana/Caruaru" }, { ddd: "82" /* DDD_82 */, state: "Alagoas", uf: "AL", region: "Todo estado" }, { ddd: "83" /* DDD_83 */, state: "Para\xEDba", uf: "PB", region: "Todo estado" }, { ddd: "84" /* DDD_84 */, state: "Rio Grande do Norte", uf: "RN", region: "Todo estado" }, { ddd: "85" /* DDD_85 */, state: "Cear\xE1", uf: "CE", region: "Fortaleza e Regi\xE3o Metropolitana" }, { ddd: "86" /* DDD_86 */, state: "Piau\xED", uf: "PI", region: "Teresina e alguns munic\xEDpios da Regi\xE3o Integrada de Desenvolvimento da Grande Teresina/Parna\xEDba" }, { ddd: "87" /* DDD_87 */, state: "Pernambuco", uf: "PE", region: "Garanhuns/Petrolina/Salgueiro/Serra Talhada" }, { ddd: "88" /* DDD_88 */, state: "Cear\xE1", uf: "CE", region: "Juazeiro do Norte/Sobral" }, { ddd: "89" /* DDD_89 */, state: "Piau\xED", uf: "PI", region: "Picos/Floriano" }, { ddd: "91" /* DDD_91 */, state: "Par\xE1", uf: "PA", region: "Bel\xE9m e Regi\xE3o Metropolitana" }, { ddd: "92" /* DDD_92 */, state: "Amazonas", uf: "AM", region: "Manaus e Regi\xE3o Metropolitana/Parintins" }, { ddd: "93" /* DDD_93 */, state: "Par\xE1", uf: "PA", region: "Santar\xE9m/Altamira" }, { ddd: "94" /* DDD_94 */, state: "Par\xE1", uf: "PA", region: "Marab\xE1" }, { ddd: "95" /* DDD_95 */, state: "Roraima", uf: "RR", region: "Todo estado" }, { ddd: "96" /* DDD_96 */, state: "Amap\xE1", uf: "AP", region: "Todo estado" }, { ddd: "97" /* DDD_97 */, state: "Amazonas", uf: "AM", region: "Abrang\xEAncia no interior do estado" }, { ddd: "98" /* DDD_98 */, state: "Maranh\xE3o", uf: "MA", region: "S\xE3o Lu\xEDs e Regi\xE3o Metropolitana" }, { ddd: "99" /* DDD_99 */, state: "Maranh\xE3o", uf: "MA", region: "Caxias/Cod\xF3/Imperatriz" } ]; // src/index.ts var Zaperson = class { constructor(config) { this.config = config; this.dddDatabase = dddInfo; } parse(number) { var _a; const strigNumber = number.toString(); let parsedNumber = strigNumber.replace(/\D/g, ""); let hasDDI = false; const numberLen = parsedNumber.length; if (!numberLen) { throw new Error("Number string is empty"); } if (numberLen < 10) { throw new Error( "Number string length is invalid. DDD may be not include" ); } if (numberLen > 13) { throw new Error("Number string length is too long"); } if ((numberLen === 12 || numberLen === 13) && !parsedNumber.startsWith("55")) { throw new Error("Number string is not a Brazilian number"); } if ((numberLen === 12 || numberLen === 13) && parsedNumber.startsWith("55")) { hasDDI = true; } if (!hasDDI) { parsedNumber = `55${parsedNumber}`; } if ((_a = this.config) == null ? void 0 : _a.validateDDD) { const ddd = this.getDDD(parsedNumber); if (!this.isValidDDD(ddd)) { throw new Error("Invalid DDD code"); } } return parsedNumber; } humanize(number) { const parsedNumber = this.parse(number); const ddi = this.getDDI(parsedNumber); const ddd = this.getDDD(parsedNumber); const prefix = parsedNumber.slice(4, 9); const lineNumber = parsedNumber.slice(9); return `+${ddi} ${ddd} ${prefix}-${lineNumber}`; } info(number) { const parsedNumber = this.parse(number); const ddd = this.getDDD(parsedNumber); const dddData = this.dddDatabase.find((dddInfo2) => dddInfo2.ddd === ddd); if (!dddData) { throw new Error("DDD not found in database"); } return { number: parsedNumber, formattedNumber: this.humanize(parsedNumber), ddi: this.getDDI(parsedNumber), ddd: dddData.ddd, location: dddData }; } validate(number) { try { this.parse(number); return true; } catch (error) { return false; } } isValidDDD(ddd) { const dddData = this.dddDatabase.find((dddInfo2) => dddInfo2.ddd === ddd); return !!dddData; } getDDD(number) { return number.slice(2, 4); } getDDI(number) { return number.slice(0, 2); } }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { Zaperson });