Our data speaks ISO alpha-3. Intl.DisplayNames('region') takes alpha-2 or
UN M49 and NOT alpha-3, so every country name was stuck in English for want
of the join.
Vendored CLDR cldr-core 48.2.2 (Unicode-3.0, 36KB, sha256 and source URL
recorded in library/vendor/cldr/README.md). No npm dependency: a package
would pull the whole supplemental tree and make a shipped data file depend
on an install step, where a vendored copy lets the generator reproduce the
map offline -- which is the point of vendoring rather than merely having a
copy.
generate-iso3-to-alpha2.mjs joins it against the 242 codes in
countries.json and GRADES ITS OWN OUTPUT, writing nothing on failure: 242
coverage, injectivity, two-letter well-formedness, and that each documented
exception is still needed. KOS -> XK is the only exception -- Kosovo has no
ISO 3166-1 assignment, so no refresh will ever supply it, and XK is the
user-assigned code CLDR itself uses in locale ids. It is recorded with its
reason instead of patched into the vendored bytes.
countryName(iso3, locale) falls back localized name -> canonical English
name -> the code. Intl.DisplayNames THROWS on a missing or malformed code
rather than returning null, so the guard is checked before asking; the
probe demonstrates that throw rather than asserting it in a comment. An
unassigned-but-well-formed region returns the input unchanged, so that case
falls back instead of rendering "DE" as a name.
THE RESEARCH SPINE MAP IS NOT TOUCHED. iso3-to-iso2.json is a different
file with a different job -- the 176-country spine that drives the data
fetches -- and expanding it is a Driver decision, not a side effect of
adding country names. The generator cross-checks it and REPORTS
disagreements without rewriting. There are none: CLDR independently agrees
with all 176 values, including the two corrected this session.
Also fixes a duplicate "check:religion-label-not-value" key in
package.json, left by a merge. JSON keeps the last, so one description was
silently dead and check:doc-scripts could not see it; bun's parser warned.
The surviving entry absorbs the only fact the dead one carried, the two
library sites by name.
|
||
|---|---|---|
| .. | ||
| countries.json | ||
| country-posters.json | ||
| iso-numeric-to-alpha2.json | ||
| iso3-to-alpha2.json | ||
| langFamilyByIso.json | ||
| langFamilyByLanguage.json | ||
| README.md | ||
library/data/ — static lookup tables
Small JSON tables inlined into any bundle that imports them (eager JSON imports, no runtime fetch).
Import as @map/data/<file>.json.
langFamilyByLanguage.json— language label → family ("Telugu": "Dravidian"). DeriveslanguageFamilywhen the API returnsnullforimb_language_family. English labels only.langFamilyByIso.json— ISO 639-3 code → family ("afr": "Indo-European"). Used first, because the API localizes language labels butprimary_language.value(the ISO code) is stable across locales. Generated by joininglangFamilyByLanguage.jsononto EN API rows by ISO code; there is no regeneration script — re-run that join against a fresh EN pull if the language set changes.iso-numeric-to-alpha2.json— ISO 3166-1 numeric → alpha-2 ("840": "US"). For joining numeric-keyed geodata (world-atlas TopoJSON) to alpha-2 records. No code consumers yet — kept as a ready lookup.
Consumers of the language tables: composables/useMapData.js, useDoxaSearch.js, useMapLayers.js,
legends/useLanguageFamilyLegendData.js.