doxa-maps/library/data
Doxa Maps 725467a9de Country names in the reader's language, for all 242
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.
2026-09-27 04:14:31 +00:00
..
countries.json Regions: one rollup, ported from theirs, instead of two copies 2026-09-24 04:01:34 +00:00
country-posters.json Regions: expand a region to its country posters, reusing the shared wall 2026-09-24 04:26:29 +00:00
iso-numeric-to-alpha2.json doxa-maps — portable bundler for embeddable JAMstack maps 2026-09-10 01:53:07 +00:00
iso3-to-alpha2.json Country names in the reader's language, for all 242 2026-09-27 04:14:31 +00:00
langFamilyByIso.json doxa-maps — portable bundler for embeddable JAMstack maps 2026-09-10 01:53:07 +00:00
langFamilyByLanguage.json doxa-maps — portable bundler for embeddable JAMstack maps 2026-09-10 01:53:07 +00:00
README.md docs: simplify all folder READMEs (what's here + graphic + link); migrate complex reference to docs/architecture/{data-sources,i18n,components,app-wrappers,poster-generation}.md 2026-09-11 18:50:31 +00:00

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"). Derives languageFamily when the API returns null for imb_language_family. English labels only.
  • langFamilyByIso.json — ISO 639-3 code → family ("afr": "Indo-European"). Used first, because the API localizes language labels but primary_language.value (the ISO code) is stable across locales. Generated by joining langFamilyByLanguage.json onto 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.