{"_id":"@core-tecnologias-empresariales/core-formatter","name":"@core-tecnologias-empresariales/core-formatter","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@core-tecnologias-empresariales/core-formatter","version":"0.1.0","description":"Formateo e internacionalización de valores (números, moneda, fechas, teléfonos, identificadores fiscales, unidades) para el ecosistema Core Tecnología Empresarial, parametrizado por país/locale — nunca funciones fijas por país.","license":"UNLICENSED","publishConfig":{"access":"public"},"type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":"./dist/index.js"},"dependencies":{"libphonenumber-js":"^1.11.0"},"devDependencies":{"typescript":"^5.7.0","@types/node":"^20.14.0"},"scripts":{"build":"tsc -p tsconfig.json","test":"tsc -p tsconfig.json && node --test dist"},"_id":"@core-tecnologias-empresariales/core-formatter@0.1.0","_integrity":"sha512-H8QhtXY9mrtifqW15FvH5fuk1xJMEMutmbYKT1kzdndyjOSgQKFebOTXAB7jRs0bNRQFS4iCyGMPtKuIPMt1DQ==","_resolved":"C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\b714c78de0d0b1950bff881c9a7f58de\\core-tecnologias-empresariales-core-formatter-0.1.0.tgz","_from":"file:core-tecnologias-empresariales-core-formatter-0.1.0.tgz","_nodeVersion":"20.20.0","_npmVersion":"11.11.0","dist":{"integrity":"sha512-H8QhtXY9mrtifqW15FvH5fuk1xJMEMutmbYKT1kzdndyjOSgQKFebOTXAB7jRs0bNRQFS4iCyGMPtKuIPMt1DQ==","shasum":"98f8a205c5f043647d5e5e1ce4f0810068ea7f03","tarball":"https://registry.npmjs.org/@core-tecnologias-empresariales/core-formatter/-/core-formatter-0.1.0.tgz","fileCount":53,"unpackedSize":84573,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC5lorE3qqimJehuICj103RUAQfRcVvWucFsElzD++kuwIhAIlN37mVzTWuR04pb9o6UIrrMzQjGxVMNaAhijWmCeCD"}]},"_npmUser":{"name":"balamchac","email":"marcelosazop@gmail.com"},"directories":{},"maintainers":[{"name":"balamchac","email":"marcelosazop@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/core-formatter_0.1.0_1788109332319_0.16128031964235445"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-30T17:02:12.018Z","0.1.0":"2026-08-30T17:02:12.478Z","modified":"2026-08-30T17:02:12.703Z"},"maintainers":[{"name":"balamchac","email":"marcelosazop@gmail.com"}],"description":"Formateo e internacionalización de valores (números, moneda, fechas, teléfonos, identificadores fiscales, unidades) para el ecosistema Core Tecnología Empresarial, parametrizado por país/locale — nunca funciones fijas por país.","license":"UNLICENSED","readme":"# @core-tecnologias-empresariales/core-formatter\n\nFormateo e internacionalización de valores (números, moneda, fechas, teléfonos, identificadores fiscales, unidades) para el ecosistema Core Tecnología Empresarial — API única y parametrizable por país/locale, nunca funciones fijas por país (`formatCLP()`, `formatChileDate()`, etc.).\n\n## Para qué sirve\n\n`CorePyme`, `Core Tributario`, `Core Contador`, `CoreEmpresas`, backend o frontend: cualquier producto Core que necesite mostrarle un número/fecha/moneda/teléfono a un usuario final, respetando su país/locale/timezone, sin reimplementar las reglas de cada país.\n\n## Para qué NO sirve\n\nNo calcula tributación, no valida documentos SII, no valida dígitos verificadores en profundidad — sólo formatea. Eso pertenece a dominios específicos (Core Tributario, un validador especializado).\n\n## Instalación\n\n```bash\npnpm add @core-tecnologias-empresariales/core-formatter\n```\n\n## Uso\n\n```ts\nimport { formatter } from \"@core-tecnologias-empresariales/core-formatter\";\n\nformatter.currency(1250000, { country: \"CL\" }); // \"$1.250.000\"\nformatter.currency(1250000, { country: \"US\" }); // \"$1,250,000.00\"\nformatter.date(new Date(), { country: \"CL\", style: \"long\" }); // \"30 de agosto de 2026\"\nformatter.taxId(\"123456785\", { country: \"CL\" }); // \"12.345.678-5\"\nformatter.phone(\"+56912345678\", { country: \"CL\" }); // \"+56 912345678\"\nformatter.list([\"Ventas\", \"Inventario\", \"Clientes\"], { locale: \"es-CL\" }); // \"Ventas, Inventario y Clientes\"\nformatter.mask(\"123456789\", { visibleStart: 3, visibleEnd: 2 }); // \"123****89\"\n```\n\n## Cobertura mundial (no sólo Latinoamérica)\n\n- **`country()` / nombre de país** — CUALQUIER código ISO 3166-1 alpha-2 del mundo, vía `Intl.DisplayNames` (CLDR real, sin lista manual).\n- **`currency()` / moneda** — ~246 territorios con su ISO 4217 real, tabla generada desde el dataset público `mledoze/countries` (no es una dependencia en tiempo de ejecución — se extrajo una sola vez, para no arrastrar los ~5 MB de banderas/mapas del paquete completo a un formatter que también corre en frontend).\n- **`locale()` / `timezone`** — curado sólo para ~65 mercados reales (no existe una fuente estándar única de \"el locale/timezone por defecto de un país\"; países multilingües o con varios husos son ambiguos por diseño). Fuera de esa tabla, `locale()` pide el valor explícito en vez de adivinar — extensible con `registerCountry()`.\n- **`taxIdType()`** — nunca lanza: para un país sin tipo curado, devuelve un genérico honesto (`\"Tax ID\"` + el nombre real del país) en vez de fingir una sigla no verificada.\n- **`phone()`** — cualquier país soportado por `libphonenumber-js` (el mismo dataset que usa `libphonenumber` de Google).\n\n## API\n\nConvención uniforme `formatter.<tipo>(value, options)`:\n\n`number` · `compact` · `percent` · `currency` · `currencySymbol` · `currencyName` · `date` · `time` · `dateTime` · `relativeDate` · `taxId` · `taxIdType` · `phone` · `isValidPhone` · `postalCode` · `weight` · `distance` · `volume` · `temperature` · `fileSize` · `duration` · `boolean` · `list` · `mask` · `country` · `locale` · `registerCountry`\n\nTodas aceptan `{ country?, locale?, timezone? }` (país/locale/timezone son conceptos independientes — nunca se asume `country → currency` ni `country → locale`).\n\n## Errores\n\n`InvalidCountryError` (código no es ISO 3166-1 válido) · `InvalidCurrencyError` · `InvalidLocaleError` (país sin locale curado y sin `locale` explícito) · `InvalidTaxIdError` · `UnsupportedFormatError`.\n\n## Valores vacíos\n\n`null`/`undefined` en cualquier `format*` numérico/fecha devuelve `\"—\"` por defecto, configurable con `emptyValue`.\n\n## Deferido (fuera de esta pasada)\n\n- `numberToWords`, `address` — no estaban en la lista de prioridad MVP del spec original.\n- `Intl.DurationFormat` para `duration({ style: \"long\" })` con locale real — no disponible todavía en todos los runtimes de Node que soporta el proyecto; hoy es español fijo.\n- Formato propio de `taxId()`/`postalCode()` más allá de Chile/EE.UU./Brasil — se agrega cuando un producto Core lo necesite de verdad, no por adelantado.\n\n## Seguridad\n\nNo almacena secretos ni credenciales. No envía datos a servicios externos — todo el procesamiento es local (`Intl`, tablas estáticas, `libphonenumber-js`).\n","readmeFilename":"README.md","_rev":"1-e198462413ed6eac9bc8d38ef54c0d4d"}