Files
2026-05-27 23:29:53 +01:00

54 lines
2.2 KiB
Markdown

# Spec: @suaveplan/locale-data
**Package:** `@suaveplan/locale-data`
**Domain:** `universal/i18n/locale-data`
**Version:** `0.1.0`
**Status:** Published
## Overview
Static ISO 3166-1 country data (209 entries) and ISO 639-1 language data (130+ entries) with
typed lookup functions, OTel instrumentation, and Zod schemas.
## Requirements
### Countries
- `getCountry(code: string): CountryItem` — O(1) lookup; throws `LocaleDataError(COUNTRY.NOT_FOUND)` for unknown codes.
- `getAllCountries(): Record<string, CountryItem>` — returns same reference each call.
- `getCountriesByContinent(continent: string): CountryItem[]` — filters by 2-letter continent code.
- `getCountriesByCurrency(currency: string): CountryItem[]` — splits comma-separated currency fields.
- OTel counter: `locale_data.country.lookups` with `result: "found" | "not_found"`.
### Languages
- `getLanguages(): Record<string, LanguageItem>` — returns same reference each call.
- `getLanguage(code: string): LanguageItem` — O(1) lookup; throws `LocaleDataError(LANGUAGE.NOT_FOUND)`.
- `getRtlLanguages(): readonly string[]` — returns RTL language code list.
- `isRtlLanguage(code: string): boolean` — BCP-47 aware; strips subtags before checking.
- OTel counter: `locale_data.language.lookups` with `result: "found" | "not_found"`.
### Errors
- `LOCALE_DATA_CODES` — `defineCodes("LOCALE_DATA", ["COUNTRY.NOT_FOUND", "LANGUAGE.NOT_FOUND"])`.
- `LocaleDataError extends SuaveplanError<LocaleDataCode>`.
### Types / Schemas
- `CountryItemSchema` (Zod) — 9 fields: name, native, phone, continent, capital, currency, languages[], emoji, emojiU.
- `LanguageItemSchema` (Zod) — 2 fields: name, native.
- `CountryCodeSchema` — `z.string().length(2).toUpperCase()`.
- `LanguageCodeSchema` — `z.string().min(2).max(3).toLowerCase()`.
## Data Coverage
- **Countries:** 209 ISO 3166-1 alpha-2 entries, 7 continent codes.
- **Languages:** 130+ ISO 639-1 entries, 15 RTL codes (`ar`, `az`, `ba`, `dv`, `fa`, `he`, `iu`, `ks`, `ku`, `ps`, `sd`, `sr`, `tg`, `ur`, `yi`).
## Quality Gates
- 100% Istanbul coverage (all 4 thresholds)
- 100% docs coverage (6/6 implementation files)
- Biome lint clean
- TypeScript clean