@johnmorrisdotca/kuni 0.0.0-stage → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/LICENSE +21 -0
- package/NOTICE.md +127 -0
- package/README.md +396 -2
- package/dist/codes.cjs +289 -0
- package/dist/codes.d.cts +6 -0
- package/dist/codes.d.ts +6 -0
- package/dist/codes.js +261 -0
- package/dist/index.cjs +725 -0
- package/dist/index.d.cts +24 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.js +686 -0
- package/dist/load.cjs +512 -0
- package/dist/load.d.cts +5 -0
- package/dist/load.d.ts +5 -0
- package/dist/load.js +475 -0
- package/dist/subdivisions/ad.cjs +7 -0
- package/dist/subdivisions/ad.d.cts +5 -0
- package/dist/subdivisions/ad.d.ts +5 -0
- package/dist/subdivisions/ad.js +7 -0
- package/dist/subdivisions/ae.cjs +7 -0
- package/dist/subdivisions/ae.d.cts +5 -0
- package/dist/subdivisions/ae.d.ts +5 -0
- package/dist/subdivisions/ae.js +7 -0
- package/dist/subdivisions/af.cjs +34 -0
- package/dist/subdivisions/af.d.cts +5 -0
- package/dist/subdivisions/af.d.ts +5 -0
- package/dist/subdivisions/af.js +34 -0
- package/dist/subdivisions/ag.cjs +8 -0
- package/dist/subdivisions/ag.d.cts +5 -0
- package/dist/subdivisions/ag.d.ts +5 -0
- package/dist/subdivisions/ag.js +8 -0
- package/dist/subdivisions/al.cjs +12 -0
- package/dist/subdivisions/al.d.cts +5 -0
- package/dist/subdivisions/al.d.ts +5 -0
- package/dist/subdivisions/al.js +12 -0
- package/dist/subdivisions/am.cjs +11 -0
- package/dist/subdivisions/am.d.cts +5 -0
- package/dist/subdivisions/am.d.ts +5 -0
- package/dist/subdivisions/am.js +11 -0
- package/dist/subdivisions/ao.cjs +18 -0
- package/dist/subdivisions/ao.d.cts +5 -0
- package/dist/subdivisions/ao.d.ts +5 -0
- package/dist/subdivisions/ao.js +18 -0
- package/dist/subdivisions/ar.cjs +24 -0
- package/dist/subdivisions/ar.d.cts +5 -0
- package/dist/subdivisions/ar.d.ts +5 -0
- package/dist/subdivisions/ar.js +24 -0
- package/dist/subdivisions/at.cjs +9 -0
- package/dist/subdivisions/at.d.cts +5 -0
- package/dist/subdivisions/at.d.ts +5 -0
- package/dist/subdivisions/at.js +9 -0
- package/dist/subdivisions/au.cjs +8 -0
- package/dist/subdivisions/au.d.cts +5 -0
- package/dist/subdivisions/au.d.ts +5 -0
- package/dist/subdivisions/au.js +8 -0
- package/dist/subdivisions/az.cjs +78 -0
- package/dist/subdivisions/az.d.cts +5 -0
- package/dist/subdivisions/az.d.ts +5 -0
- package/dist/subdivisions/az.js +78 -0
- package/dist/subdivisions/ba.cjs +3 -0
- package/dist/subdivisions/ba.d.cts +5 -0
- package/dist/subdivisions/ba.d.ts +5 -0
- package/dist/subdivisions/ba.js +3 -0
- package/dist/subdivisions/bb.cjs +11 -0
- package/dist/subdivisions/bb.d.cts +5 -0
- package/dist/subdivisions/bb.d.ts +5 -0
- package/dist/subdivisions/bb.js +11 -0
- package/dist/subdivisions/bd.cjs +72 -0
- package/dist/subdivisions/bd.d.cts +5 -0
- package/dist/subdivisions/bd.d.ts +5 -0
- package/dist/subdivisions/bd.js +72 -0
- package/dist/subdivisions/be.cjs +13 -0
- package/dist/subdivisions/be.d.cts +5 -0
- package/dist/subdivisions/be.d.ts +5 -0
- package/dist/subdivisions/be.js +13 -0
- package/dist/subdivisions/bf.cjs +58 -0
- package/dist/subdivisions/bf.d.cts +5 -0
- package/dist/subdivisions/bf.d.ts +5 -0
- package/dist/subdivisions/bf.js +58 -0
- package/dist/subdivisions/bg.cjs +28 -0
- package/dist/subdivisions/bg.d.cts +5 -0
- package/dist/subdivisions/bg.d.ts +5 -0
- package/dist/subdivisions/bg.js +28 -0
- package/dist/subdivisions/bh.cjs +4 -0
- package/dist/subdivisions/bh.d.cts +5 -0
- package/dist/subdivisions/bh.d.ts +5 -0
- package/dist/subdivisions/bh.js +4 -0
- package/dist/subdivisions/bi.cjs +18 -0
- package/dist/subdivisions/bi.d.cts +5 -0
- package/dist/subdivisions/bi.d.ts +5 -0
- package/dist/subdivisions/bi.js +18 -0
- package/dist/subdivisions/bj.cjs +12 -0
- package/dist/subdivisions/bj.d.cts +5 -0
- package/dist/subdivisions/bj.d.ts +5 -0
- package/dist/subdivisions/bj.js +12 -0
- package/dist/subdivisions/bn.cjs +4 -0
- package/dist/subdivisions/bn.d.cts +5 -0
- package/dist/subdivisions/bn.d.ts +5 -0
- package/dist/subdivisions/bn.js +4 -0
- package/dist/subdivisions/bo.cjs +9 -0
- package/dist/subdivisions/bo.d.cts +5 -0
- package/dist/subdivisions/bo.d.ts +5 -0
- package/dist/subdivisions/bo.js +9 -0
- package/dist/subdivisions/bq.cjs +3 -0
- package/dist/subdivisions/bq.d.cts +5 -0
- package/dist/subdivisions/bq.d.ts +5 -0
- package/dist/subdivisions/bq.js +3 -0
- package/dist/subdivisions/br.cjs +27 -0
- package/dist/subdivisions/br.d.cts +5 -0
- package/dist/subdivisions/br.d.ts +5 -0
- package/dist/subdivisions/br.js +27 -0
- package/dist/subdivisions/bs.cjs +32 -0
- package/dist/subdivisions/bs.d.cts +5 -0
- package/dist/subdivisions/bs.d.ts +5 -0
- package/dist/subdivisions/bs.js +32 -0
- package/dist/subdivisions/bt.cjs +20 -0
- package/dist/subdivisions/bt.d.cts +5 -0
- package/dist/subdivisions/bt.d.ts +5 -0
- package/dist/subdivisions/bt.js +20 -0
- package/dist/subdivisions/bw.cjs +16 -0
- package/dist/subdivisions/bw.d.cts +5 -0
- package/dist/subdivisions/bw.d.ts +5 -0
- package/dist/subdivisions/bw.js +16 -0
- package/dist/subdivisions/by.cjs +7 -0
- package/dist/subdivisions/by.d.cts +5 -0
- package/dist/subdivisions/by.d.ts +5 -0
- package/dist/subdivisions/by.js +7 -0
- package/dist/subdivisions/bz.cjs +6 -0
- package/dist/subdivisions/bz.d.cts +5 -0
- package/dist/subdivisions/bz.d.ts +5 -0
- package/dist/subdivisions/bz.js +6 -0
- package/dist/subdivisions/ca.cjs +13 -0
- package/dist/subdivisions/ca.d.cts +5 -0
- package/dist/subdivisions/ca.d.ts +5 -0
- package/dist/subdivisions/ca.js +13 -0
- package/dist/subdivisions/cd.cjs +26 -0
- package/dist/subdivisions/cd.d.cts +5 -0
- package/dist/subdivisions/cd.d.ts +5 -0
- package/dist/subdivisions/cd.js +26 -0
- package/dist/subdivisions/cf.cjs +17 -0
- package/dist/subdivisions/cf.d.cts +5 -0
- package/dist/subdivisions/cf.d.ts +5 -0
- package/dist/subdivisions/cf.js +17 -0
- package/dist/subdivisions/cg.cjs +12 -0
- package/dist/subdivisions/cg.d.cts +5 -0
- package/dist/subdivisions/cg.d.ts +5 -0
- package/dist/subdivisions/cg.js +12 -0
- package/dist/subdivisions/ch.cjs +26 -0
- package/dist/subdivisions/ch.d.cts +5 -0
- package/dist/subdivisions/ch.d.ts +5 -0
- package/dist/subdivisions/ch.js +26 -0
- package/dist/subdivisions/ci.cjs +14 -0
- package/dist/subdivisions/ci.d.cts +5 -0
- package/dist/subdivisions/ci.d.ts +5 -0
- package/dist/subdivisions/ci.js +14 -0
- package/dist/subdivisions/cl.cjs +16 -0
- package/dist/subdivisions/cl.d.cts +5 -0
- package/dist/subdivisions/cl.d.ts +5 -0
- package/dist/subdivisions/cl.js +16 -0
- package/dist/subdivisions/cm.cjs +10 -0
- package/dist/subdivisions/cm.d.cts +5 -0
- package/dist/subdivisions/cm.d.ts +5 -0
- package/dist/subdivisions/cm.js +10 -0
- package/dist/subdivisions/cn.cjs +34 -0
- package/dist/subdivisions/cn.d.cts +5 -0
- package/dist/subdivisions/cn.d.ts +5 -0
- package/dist/subdivisions/cn.js +34 -0
- package/dist/subdivisions/co.cjs +33 -0
- package/dist/subdivisions/co.d.cts +5 -0
- package/dist/subdivisions/co.d.ts +5 -0
- package/dist/subdivisions/co.js +33 -0
- package/dist/subdivisions/cr.cjs +7 -0
- package/dist/subdivisions/cr.d.cts +5 -0
- package/dist/subdivisions/cr.d.ts +5 -0
- package/dist/subdivisions/cr.js +7 -0
- package/dist/subdivisions/cu.cjs +16 -0
- package/dist/subdivisions/cu.d.cts +5 -0
- package/dist/subdivisions/cu.d.ts +5 -0
- package/dist/subdivisions/cu.js +16 -0
- package/dist/subdivisions/cv.cjs +24 -0
- package/dist/subdivisions/cv.d.cts +5 -0
- package/dist/subdivisions/cv.d.ts +5 -0
- package/dist/subdivisions/cv.js +24 -0
- package/dist/subdivisions/cy.cjs +6 -0
- package/dist/subdivisions/cy.d.cts +5 -0
- package/dist/subdivisions/cy.d.ts +5 -0
- package/dist/subdivisions/cy.js +6 -0
- package/dist/subdivisions/cz.cjs +90 -0
- package/dist/subdivisions/cz.d.cts +5 -0
- package/dist/subdivisions/cz.d.ts +5 -0
- package/dist/subdivisions/cz.js +90 -0
- package/dist/subdivisions/de.cjs +16 -0
- package/dist/subdivisions/de.d.cts +5 -0
- package/dist/subdivisions/de.d.ts +5 -0
- package/dist/subdivisions/de.js +16 -0
- package/dist/subdivisions/dj.cjs +6 -0
- package/dist/subdivisions/dj.d.cts +5 -0
- package/dist/subdivisions/dj.d.ts +5 -0
- package/dist/subdivisions/dj.js +6 -0
- package/dist/subdivisions/dk.cjs +5 -0
- package/dist/subdivisions/dk.d.cts +5 -0
- package/dist/subdivisions/dk.d.ts +5 -0
- package/dist/subdivisions/dk.js +5 -0
- package/dist/subdivisions/dm.cjs +10 -0
- package/dist/subdivisions/dm.d.cts +5 -0
- package/dist/subdivisions/dm.d.ts +5 -0
- package/dist/subdivisions/dm.js +10 -0
- package/dist/subdivisions/do.cjs +42 -0
- package/dist/subdivisions/do.d.cts +5 -0
- package/dist/subdivisions/do.d.ts +5 -0
- package/dist/subdivisions/do.js +42 -0
- package/dist/subdivisions/dz.cjs +58 -0
- package/dist/subdivisions/dz.d.cts +5 -0
- package/dist/subdivisions/dz.d.ts +5 -0
- package/dist/subdivisions/dz.js +58 -0
- package/dist/subdivisions/ec.cjs +24 -0
- package/dist/subdivisions/ec.d.cts +5 -0
- package/dist/subdivisions/ec.d.ts +5 -0
- package/dist/subdivisions/ec.js +24 -0
- package/dist/subdivisions/ee.cjs +94 -0
- package/dist/subdivisions/ee.d.cts +5 -0
- package/dist/subdivisions/ee.d.ts +5 -0
- package/dist/subdivisions/ee.js +94 -0
- package/dist/subdivisions/eg.cjs +27 -0
- package/dist/subdivisions/eg.d.cts +5 -0
- package/dist/subdivisions/eg.d.ts +5 -0
- package/dist/subdivisions/eg.js +27 -0
- package/dist/subdivisions/er.cjs +6 -0
- package/dist/subdivisions/er.d.cts +5 -0
- package/dist/subdivisions/er.d.ts +5 -0
- package/dist/subdivisions/er.js +6 -0
- package/dist/subdivisions/es.cjs +69 -0
- package/dist/subdivisions/es.d.cts +5 -0
- package/dist/subdivisions/es.d.ts +5 -0
- package/dist/subdivisions/es.js +69 -0
- package/dist/subdivisions/et.cjs +13 -0
- package/dist/subdivisions/et.d.cts +5 -0
- package/dist/subdivisions/et.d.ts +5 -0
- package/dist/subdivisions/et.js +13 -0
- package/dist/subdivisions/fi.cjs +19 -0
- package/dist/subdivisions/fi.d.cts +5 -0
- package/dist/subdivisions/fi.d.ts +5 -0
- package/dist/subdivisions/fi.js +19 -0
- package/dist/subdivisions/fj.cjs +19 -0
- package/dist/subdivisions/fj.d.cts +5 -0
- package/dist/subdivisions/fj.d.ts +5 -0
- package/dist/subdivisions/fj.js +19 -0
- package/dist/subdivisions/fm.cjs +4 -0
- package/dist/subdivisions/fm.d.cts +5 -0
- package/dist/subdivisions/fm.d.ts +5 -0
- package/dist/subdivisions/fm.js +4 -0
- package/dist/subdivisions/fr.cjs +124 -0
- package/dist/subdivisions/fr.d.cts +5 -0
- package/dist/subdivisions/fr.d.ts +5 -0
- package/dist/subdivisions/fr.js +124 -0
- package/dist/subdivisions/ga.cjs +9 -0
- package/dist/subdivisions/ga.d.cts +5 -0
- package/dist/subdivisions/ga.d.ts +5 -0
- package/dist/subdivisions/ga.js +9 -0
- package/dist/subdivisions/gb.cjs +221 -0
- package/dist/subdivisions/gb.d.cts +5 -0
- package/dist/subdivisions/gb.d.ts +5 -0
- package/dist/subdivisions/gb.js +221 -0
- package/dist/subdivisions/gd.cjs +7 -0
- package/dist/subdivisions/gd.d.cts +5 -0
- package/dist/subdivisions/gd.d.ts +5 -0
- package/dist/subdivisions/gd.js +7 -0
- package/dist/subdivisions/ge.cjs +12 -0
- package/dist/subdivisions/ge.d.cts +5 -0
- package/dist/subdivisions/ge.d.ts +5 -0
- package/dist/subdivisions/ge.js +12 -0
- package/dist/subdivisions/gh.cjs +16 -0
- package/dist/subdivisions/gh.d.cts +5 -0
- package/dist/subdivisions/gh.d.ts +5 -0
- package/dist/subdivisions/gh.js +16 -0
- package/dist/subdivisions/gl.cjs +5 -0
- package/dist/subdivisions/gl.d.cts +5 -0
- package/dist/subdivisions/gl.d.ts +5 -0
- package/dist/subdivisions/gl.js +5 -0
- package/dist/subdivisions/gm.cjs +6 -0
- package/dist/subdivisions/gm.d.cts +5 -0
- package/dist/subdivisions/gm.d.ts +5 -0
- package/dist/subdivisions/gm.js +6 -0
- package/dist/subdivisions/gn.cjs +41 -0
- package/dist/subdivisions/gn.d.cts +5 -0
- package/dist/subdivisions/gn.d.ts +5 -0
- package/dist/subdivisions/gn.js +41 -0
- package/dist/subdivisions/gq.cjs +10 -0
- package/dist/subdivisions/gq.d.cts +5 -0
- package/dist/subdivisions/gq.d.ts +5 -0
- package/dist/subdivisions/gq.js +10 -0
- package/dist/subdivisions/gr.cjs +14 -0
- package/dist/subdivisions/gr.d.cts +5 -0
- package/dist/subdivisions/gr.d.ts +5 -0
- package/dist/subdivisions/gr.js +14 -0
- package/dist/subdivisions/gt.cjs +22 -0
- package/dist/subdivisions/gt.d.cts +5 -0
- package/dist/subdivisions/gt.d.ts +5 -0
- package/dist/subdivisions/gt.js +22 -0
- package/dist/subdivisions/gw.cjs +12 -0
- package/dist/subdivisions/gw.d.cts +5 -0
- package/dist/subdivisions/gw.d.ts +5 -0
- package/dist/subdivisions/gw.js +12 -0
- package/dist/subdivisions/gy.cjs +10 -0
- package/dist/subdivisions/gy.d.cts +5 -0
- package/dist/subdivisions/gy.d.ts +5 -0
- package/dist/subdivisions/gy.js +10 -0
- package/dist/subdivisions/hn.cjs +18 -0
- package/dist/subdivisions/hn.d.cts +5 -0
- package/dist/subdivisions/hn.d.ts +5 -0
- package/dist/subdivisions/hn.js +18 -0
- package/dist/subdivisions/hr.cjs +21 -0
- package/dist/subdivisions/hr.d.cts +5 -0
- package/dist/subdivisions/hr.d.ts +5 -0
- package/dist/subdivisions/hr.js +21 -0
- package/dist/subdivisions/ht.cjs +10 -0
- package/dist/subdivisions/ht.d.cts +5 -0
- package/dist/subdivisions/ht.d.ts +5 -0
- package/dist/subdivisions/ht.js +10 -0
- package/dist/subdivisions/hu.cjs +43 -0
- package/dist/subdivisions/hu.d.cts +5 -0
- package/dist/subdivisions/hu.d.ts +5 -0
- package/dist/subdivisions/hu.js +43 -0
- package/dist/subdivisions/id.cjs +45 -0
- package/dist/subdivisions/id.d.cts +5 -0
- package/dist/subdivisions/id.d.ts +5 -0
- package/dist/subdivisions/id.js +45 -0
- package/dist/subdivisions/ie.cjs +30 -0
- package/dist/subdivisions/ie.d.cts +5 -0
- package/dist/subdivisions/ie.d.ts +5 -0
- package/dist/subdivisions/ie.js +30 -0
- package/dist/subdivisions/il.cjs +6 -0
- package/dist/subdivisions/il.d.cts +5 -0
- package/dist/subdivisions/il.d.ts +5 -0
- package/dist/subdivisions/il.js +6 -0
- package/dist/subdivisions/in.cjs +36 -0
- package/dist/subdivisions/in.d.cts +5 -0
- package/dist/subdivisions/in.d.ts +5 -0
- package/dist/subdivisions/in.js +36 -0
- package/dist/subdivisions/iq.cjs +19 -0
- package/dist/subdivisions/iq.d.cts +5 -0
- package/dist/subdivisions/iq.d.ts +5 -0
- package/dist/subdivisions/iq.js +19 -0
- package/dist/subdivisions/ir.cjs +31 -0
- package/dist/subdivisions/ir.d.cts +5 -0
- package/dist/subdivisions/ir.d.ts +5 -0
- package/dist/subdivisions/ir.js +31 -0
- package/dist/subdivisions/is.cjs +72 -0
- package/dist/subdivisions/is.d.cts +5 -0
- package/dist/subdivisions/is.d.ts +5 -0
- package/dist/subdivisions/is.js +72 -0
- package/dist/subdivisions/it.cjs +126 -0
- package/dist/subdivisions/it.d.cts +5 -0
- package/dist/subdivisions/it.d.ts +5 -0
- package/dist/subdivisions/it.js +126 -0
- package/dist/subdivisions/jm.cjs +14 -0
- package/dist/subdivisions/jm.d.cts +5 -0
- package/dist/subdivisions/jm.d.ts +5 -0
- package/dist/subdivisions/jm.js +14 -0
- package/dist/subdivisions/jo.cjs +12 -0
- package/dist/subdivisions/jo.d.cts +5 -0
- package/dist/subdivisions/jo.d.ts +5 -0
- package/dist/subdivisions/jo.js +12 -0
- package/dist/subdivisions/jp.cjs +47 -0
- package/dist/subdivisions/jp.d.cts +5 -0
- package/dist/subdivisions/jp.d.ts +5 -0
- package/dist/subdivisions/jp.js +47 -0
- package/dist/subdivisions/ke.cjs +47 -0
- package/dist/subdivisions/ke.d.cts +5 -0
- package/dist/subdivisions/ke.d.ts +5 -0
- package/dist/subdivisions/ke.js +47 -0
- package/dist/subdivisions/kg.cjs +9 -0
- package/dist/subdivisions/kg.d.cts +5 -0
- package/dist/subdivisions/kg.d.ts +5 -0
- package/dist/subdivisions/kg.js +9 -0
- package/dist/subdivisions/kh.cjs +25 -0
- package/dist/subdivisions/kh.d.cts +5 -0
- package/dist/subdivisions/kh.d.ts +5 -0
- package/dist/subdivisions/kh.js +25 -0
- package/dist/subdivisions/ki.cjs +3 -0
- package/dist/subdivisions/ki.d.cts +5 -0
- package/dist/subdivisions/ki.d.ts +5 -0
- package/dist/subdivisions/ki.js +3 -0
- package/dist/subdivisions/km.cjs +3 -0
- package/dist/subdivisions/km.d.cts +5 -0
- package/dist/subdivisions/km.d.ts +5 -0
- package/dist/subdivisions/km.js +3 -0
- package/dist/subdivisions/kn.cjs +16 -0
- package/dist/subdivisions/kn.d.cts +5 -0
- package/dist/subdivisions/kn.d.ts +5 -0
- package/dist/subdivisions/kn.js +16 -0
- package/dist/subdivisions/kp.cjs +13 -0
- package/dist/subdivisions/kp.d.cts +5 -0
- package/dist/subdivisions/kp.d.ts +5 -0
- package/dist/subdivisions/kp.js +13 -0
- package/dist/subdivisions/kr.cjs +17 -0
- package/dist/subdivisions/kr.d.cts +5 -0
- package/dist/subdivisions/kr.d.ts +5 -0
- package/dist/subdivisions/kr.js +17 -0
- package/dist/subdivisions/kw.cjs +6 -0
- package/dist/subdivisions/kw.d.cts +5 -0
- package/dist/subdivisions/kw.d.ts +5 -0
- package/dist/subdivisions/kw.js +6 -0
- package/dist/subdivisions/kz.cjs +20 -0
- package/dist/subdivisions/kz.d.cts +5 -0
- package/dist/subdivisions/kz.d.ts +5 -0
- package/dist/subdivisions/kz.js +20 -0
- package/dist/subdivisions/la.cjs +18 -0
- package/dist/subdivisions/la.d.cts +5 -0
- package/dist/subdivisions/la.d.ts +5 -0
- package/dist/subdivisions/la.js +18 -0
- package/dist/subdivisions/lb.cjs +8 -0
- package/dist/subdivisions/lb.d.cts +5 -0
- package/dist/subdivisions/lb.d.ts +5 -0
- package/dist/subdivisions/lb.js +8 -0
- package/dist/subdivisions/lc.cjs +10 -0
- package/dist/subdivisions/lc.d.cts +5 -0
- package/dist/subdivisions/lc.d.ts +5 -0
- package/dist/subdivisions/lc.js +10 -0
- package/dist/subdivisions/li.cjs +11 -0
- package/dist/subdivisions/li.d.cts +5 -0
- package/dist/subdivisions/li.d.ts +5 -0
- package/dist/subdivisions/li.js +11 -0
- package/dist/subdivisions/lk.cjs +34 -0
- package/dist/subdivisions/lk.d.cts +5 -0
- package/dist/subdivisions/lk.d.ts +5 -0
- package/dist/subdivisions/lk.js +34 -0
- package/dist/subdivisions/lr.cjs +15 -0
- package/dist/subdivisions/lr.d.cts +5 -0
- package/dist/subdivisions/lr.d.ts +5 -0
- package/dist/subdivisions/lr.js +15 -0
- package/dist/subdivisions/ls.cjs +10 -0
- package/dist/subdivisions/ls.d.cts +5 -0
- package/dist/subdivisions/ls.d.ts +5 -0
- package/dist/subdivisions/ls.js +10 -0
- package/dist/subdivisions/lt.cjs +70 -0
- package/dist/subdivisions/lt.d.cts +5 -0
- package/dist/subdivisions/lt.d.ts +5 -0
- package/dist/subdivisions/lt.js +70 -0
- package/dist/subdivisions/lu.cjs +12 -0
- package/dist/subdivisions/lu.d.cts +5 -0
- package/dist/subdivisions/lu.d.ts +5 -0
- package/dist/subdivisions/lu.js +12 -0
- package/dist/subdivisions/lv.cjs +43 -0
- package/dist/subdivisions/lv.d.cts +5 -0
- package/dist/subdivisions/lv.d.ts +5 -0
- package/dist/subdivisions/lv.js +43 -0
- package/dist/subdivisions/ly.cjs +22 -0
- package/dist/subdivisions/ly.d.cts +5 -0
- package/dist/subdivisions/ly.d.ts +5 -0
- package/dist/subdivisions/ly.js +22 -0
- package/dist/subdivisions/ma.cjs +87 -0
- package/dist/subdivisions/ma.d.cts +5 -0
- package/dist/subdivisions/ma.d.ts +5 -0
- package/dist/subdivisions/ma.js +87 -0
- package/dist/subdivisions/mc.cjs +17 -0
- package/dist/subdivisions/mc.d.cts +5 -0
- package/dist/subdivisions/mc.d.ts +5 -0
- package/dist/subdivisions/mc.js +17 -0
- package/dist/subdivisions/md.cjs +37 -0
- package/dist/subdivisions/md.d.cts +5 -0
- package/dist/subdivisions/md.d.ts +5 -0
- package/dist/subdivisions/md.js +37 -0
- package/dist/subdivisions/me.cjs +25 -0
- package/dist/subdivisions/me.d.cts +5 -0
- package/dist/subdivisions/me.d.ts +5 -0
- package/dist/subdivisions/me.js +25 -0
- package/dist/subdivisions/mg.cjs +6 -0
- package/dist/subdivisions/mg.d.cts +5 -0
- package/dist/subdivisions/mg.d.ts +5 -0
- package/dist/subdivisions/mg.js +6 -0
- package/dist/subdivisions/mh.cjs +26 -0
- package/dist/subdivisions/mh.d.cts +5 -0
- package/dist/subdivisions/mh.d.ts +5 -0
- package/dist/subdivisions/mh.js +26 -0
- package/dist/subdivisions/mk.cjs +80 -0
- package/dist/subdivisions/mk.d.cts +5 -0
- package/dist/subdivisions/mk.d.ts +5 -0
- package/dist/subdivisions/mk.js +80 -0
- package/dist/subdivisions/ml.cjs +11 -0
- package/dist/subdivisions/ml.d.cts +5 -0
- package/dist/subdivisions/ml.d.ts +5 -0
- package/dist/subdivisions/ml.js +11 -0
- package/dist/subdivisions/mm.cjs +15 -0
- package/dist/subdivisions/mm.d.cts +5 -0
- package/dist/subdivisions/mm.d.ts +5 -0
- package/dist/subdivisions/mm.js +15 -0
- package/dist/subdivisions/mn.cjs +22 -0
- package/dist/subdivisions/mn.d.cts +5 -0
- package/dist/subdivisions/mn.d.ts +5 -0
- package/dist/subdivisions/mn.js +22 -0
- package/dist/subdivisions/mr.cjs +15 -0
- package/dist/subdivisions/mr.d.cts +5 -0
- package/dist/subdivisions/mr.d.ts +5 -0
- package/dist/subdivisions/mr.js +15 -0
- package/dist/subdivisions/mt.cjs +68 -0
- package/dist/subdivisions/mt.d.cts +5 -0
- package/dist/subdivisions/mt.d.ts +5 -0
- package/dist/subdivisions/mt.js +68 -0
- package/dist/subdivisions/mu.cjs +12 -0
- package/dist/subdivisions/mu.d.cts +5 -0
- package/dist/subdivisions/mu.d.ts +5 -0
- package/dist/subdivisions/mu.js +12 -0
- package/dist/subdivisions/mv.cjs +21 -0
- package/dist/subdivisions/mv.d.cts +5 -0
- package/dist/subdivisions/mv.d.ts +5 -0
- package/dist/subdivisions/mv.js +21 -0
- package/dist/subdivisions/mw.cjs +31 -0
- package/dist/subdivisions/mw.d.cts +5 -0
- package/dist/subdivisions/mw.d.ts +5 -0
- package/dist/subdivisions/mw.js +31 -0
- package/dist/subdivisions/mx.cjs +32 -0
- package/dist/subdivisions/mx.d.cts +5 -0
- package/dist/subdivisions/mx.d.ts +5 -0
- package/dist/subdivisions/mx.js +32 -0
- package/dist/subdivisions/my.cjs +16 -0
- package/dist/subdivisions/my.d.cts +5 -0
- package/dist/subdivisions/my.d.ts +5 -0
- package/dist/subdivisions/my.js +16 -0
- package/dist/subdivisions/mz.cjs +11 -0
- package/dist/subdivisions/mz.d.cts +5 -0
- package/dist/subdivisions/mz.d.ts +5 -0
- package/dist/subdivisions/mz.js +11 -0
- package/dist/subdivisions/na.cjs +14 -0
- package/dist/subdivisions/na.d.cts +5 -0
- package/dist/subdivisions/na.d.ts +5 -0
- package/dist/subdivisions/na.js +14 -0
- package/dist/subdivisions/ne.cjs +8 -0
- package/dist/subdivisions/ne.d.cts +5 -0
- package/dist/subdivisions/ne.d.ts +5 -0
- package/dist/subdivisions/ne.js +8 -0
- package/dist/subdivisions/ng.cjs +37 -0
- package/dist/subdivisions/ng.d.cts +5 -0
- package/dist/subdivisions/ng.d.ts +5 -0
- package/dist/subdivisions/ng.js +37 -0
- package/dist/subdivisions/ni.cjs +17 -0
- package/dist/subdivisions/ni.d.cts +5 -0
- package/dist/subdivisions/ni.d.ts +5 -0
- package/dist/subdivisions/ni.js +17 -0
- package/dist/subdivisions/nl.cjs +18 -0
- package/dist/subdivisions/nl.d.cts +5 -0
- package/dist/subdivisions/nl.d.ts +5 -0
- package/dist/subdivisions/nl.js +18 -0
- package/dist/subdivisions/no.cjs +13 -0
- package/dist/subdivisions/no.d.cts +5 -0
- package/dist/subdivisions/no.d.ts +5 -0
- package/dist/subdivisions/no.js +13 -0
- package/dist/subdivisions/np.cjs +7 -0
- package/dist/subdivisions/np.d.cts +5 -0
- package/dist/subdivisions/np.d.ts +5 -0
- package/dist/subdivisions/np.js +7 -0
- package/dist/subdivisions/nr.cjs +14 -0
- package/dist/subdivisions/nr.d.cts +5 -0
- package/dist/subdivisions/nr.d.ts +5 -0
- package/dist/subdivisions/nr.js +14 -0
- package/dist/subdivisions/nz.cjs +17 -0
- package/dist/subdivisions/nz.d.cts +5 -0
- package/dist/subdivisions/nz.d.ts +5 -0
- package/dist/subdivisions/nz.js +17 -0
- package/dist/subdivisions/om.cjs +11 -0
- package/dist/subdivisions/om.d.cts +5 -0
- package/dist/subdivisions/om.d.ts +5 -0
- package/dist/subdivisions/om.js +11 -0
- package/dist/subdivisions/pa.cjs +14 -0
- package/dist/subdivisions/pa.d.cts +5 -0
- package/dist/subdivisions/pa.d.ts +5 -0
- package/dist/subdivisions/pa.js +14 -0
- package/dist/subdivisions/pe.cjs +26 -0
- package/dist/subdivisions/pe.d.cts +5 -0
- package/dist/subdivisions/pe.d.ts +5 -0
- package/dist/subdivisions/pe.js +26 -0
- package/dist/subdivisions/pg.cjs +22 -0
- package/dist/subdivisions/pg.d.cts +5 -0
- package/dist/subdivisions/pg.d.ts +5 -0
- package/dist/subdivisions/pg.js +22 -0
- package/dist/subdivisions/ph.cjs +99 -0
- package/dist/subdivisions/ph.d.cts +5 -0
- package/dist/subdivisions/ph.d.ts +5 -0
- package/dist/subdivisions/ph.js +99 -0
- package/dist/subdivisions/pk.cjs +7 -0
- package/dist/subdivisions/pk.d.cts +5 -0
- package/dist/subdivisions/pk.d.ts +5 -0
- package/dist/subdivisions/pk.js +7 -0
- package/dist/subdivisions/pl.cjs +16 -0
- package/dist/subdivisions/pl.d.cts +5 -0
- package/dist/subdivisions/pl.d.ts +5 -0
- package/dist/subdivisions/pl.js +16 -0
- package/dist/subdivisions/ps.cjs +16 -0
- package/dist/subdivisions/ps.d.cts +5 -0
- package/dist/subdivisions/ps.d.ts +5 -0
- package/dist/subdivisions/ps.js +16 -0
- package/dist/subdivisions/pt.cjs +20 -0
- package/dist/subdivisions/pt.d.cts +5 -0
- package/dist/subdivisions/pt.d.ts +5 -0
- package/dist/subdivisions/pt.js +20 -0
- package/dist/subdivisions/pw.cjs +16 -0
- package/dist/subdivisions/pw.d.cts +5 -0
- package/dist/subdivisions/pw.d.ts +5 -0
- package/dist/subdivisions/pw.js +16 -0
- package/dist/subdivisions/py.cjs +18 -0
- package/dist/subdivisions/py.d.cts +5 -0
- package/dist/subdivisions/py.d.ts +5 -0
- package/dist/subdivisions/py.js +18 -0
- package/dist/subdivisions/qa.cjs +8 -0
- package/dist/subdivisions/qa.d.cts +5 -0
- package/dist/subdivisions/qa.d.ts +5 -0
- package/dist/subdivisions/qa.js +8 -0
- package/dist/subdivisions/ro.cjs +42 -0
- package/dist/subdivisions/ro.d.cts +5 -0
- package/dist/subdivisions/ro.d.ts +5 -0
- package/dist/subdivisions/ro.js +42 -0
- package/dist/subdivisions/rs.cjs +32 -0
- package/dist/subdivisions/rs.d.cts +5 -0
- package/dist/subdivisions/rs.d.ts +5 -0
- package/dist/subdivisions/rs.js +32 -0
- package/dist/subdivisions/ru.cjs +83 -0
- package/dist/subdivisions/ru.d.cts +5 -0
- package/dist/subdivisions/ru.d.ts +5 -0
- package/dist/subdivisions/ru.js +83 -0
- package/dist/subdivisions/rw.cjs +5 -0
- package/dist/subdivisions/rw.d.cts +5 -0
- package/dist/subdivisions/rw.d.ts +5 -0
- package/dist/subdivisions/rw.js +5 -0
- package/dist/subdivisions/sa.cjs +13 -0
- package/dist/subdivisions/sa.d.cts +5 -0
- package/dist/subdivisions/sa.d.ts +5 -0
- package/dist/subdivisions/sa.js +13 -0
- package/dist/subdivisions/sb.cjs +10 -0
- package/dist/subdivisions/sb.d.cts +5 -0
- package/dist/subdivisions/sb.d.ts +5 -0
- package/dist/subdivisions/sb.js +10 -0
- package/dist/subdivisions/sc.cjs +27 -0
- package/dist/subdivisions/sc.d.cts +5 -0
- package/dist/subdivisions/sc.d.ts +5 -0
- package/dist/subdivisions/sc.js +27 -0
- package/dist/subdivisions/sd.cjs +18 -0
- package/dist/subdivisions/sd.d.cts +5 -0
- package/dist/subdivisions/sd.d.ts +5 -0
- package/dist/subdivisions/sd.js +18 -0
- package/dist/subdivisions/se.cjs +21 -0
- package/dist/subdivisions/se.d.cts +5 -0
- package/dist/subdivisions/se.d.ts +5 -0
- package/dist/subdivisions/se.js +21 -0
- package/dist/subdivisions/sg.cjs +5 -0
- package/dist/subdivisions/sg.d.cts +5 -0
- package/dist/subdivisions/sg.d.ts +5 -0
- package/dist/subdivisions/sg.js +5 -0
- package/dist/subdivisions/sh.cjs +3 -0
- package/dist/subdivisions/sh.d.cts +5 -0
- package/dist/subdivisions/sh.d.ts +5 -0
- package/dist/subdivisions/sh.js +3 -0
- package/dist/subdivisions/si.cjs +212 -0
- package/dist/subdivisions/si.d.cts +5 -0
- package/dist/subdivisions/si.d.ts +5 -0
- package/dist/subdivisions/si.js +212 -0
- package/dist/subdivisions/sk.cjs +8 -0
- package/dist/subdivisions/sk.d.cts +5 -0
- package/dist/subdivisions/sk.d.ts +5 -0
- package/dist/subdivisions/sk.js +8 -0
- package/dist/subdivisions/sl.cjs +5 -0
- package/dist/subdivisions/sl.d.cts +5 -0
- package/dist/subdivisions/sl.d.ts +5 -0
- package/dist/subdivisions/sl.js +5 -0
- package/dist/subdivisions/sm.cjs +9 -0
- package/dist/subdivisions/sm.d.cts +5 -0
- package/dist/subdivisions/sm.d.ts +5 -0
- package/dist/subdivisions/sm.js +9 -0
- package/dist/subdivisions/sn.cjs +14 -0
- package/dist/subdivisions/sn.d.cts +5 -0
- package/dist/subdivisions/sn.d.ts +5 -0
- package/dist/subdivisions/sn.js +14 -0
- package/dist/subdivisions/so.cjs +18 -0
- package/dist/subdivisions/so.d.cts +5 -0
- package/dist/subdivisions/so.d.ts +5 -0
- package/dist/subdivisions/so.js +18 -0
- package/dist/subdivisions/sr.cjs +10 -0
- package/dist/subdivisions/sr.d.cts +5 -0
- package/dist/subdivisions/sr.d.ts +5 -0
- package/dist/subdivisions/sr.js +10 -0
- package/dist/subdivisions/ss.cjs +10 -0
- package/dist/subdivisions/ss.d.cts +5 -0
- package/dist/subdivisions/ss.d.ts +5 -0
- package/dist/subdivisions/ss.js +10 -0
- package/dist/subdivisions/st.cjs +7 -0
- package/dist/subdivisions/st.d.cts +5 -0
- package/dist/subdivisions/st.d.ts +5 -0
- package/dist/subdivisions/st.js +7 -0
- package/dist/subdivisions/sv.cjs +14 -0
- package/dist/subdivisions/sv.d.cts +5 -0
- package/dist/subdivisions/sv.d.ts +5 -0
- package/dist/subdivisions/sv.js +14 -0
- package/dist/subdivisions/sy.cjs +14 -0
- package/dist/subdivisions/sy.d.cts +5 -0
- package/dist/subdivisions/sy.d.ts +5 -0
- package/dist/subdivisions/sy.js +14 -0
- package/dist/subdivisions/sz.cjs +4 -0
- package/dist/subdivisions/sz.d.cts +5 -0
- package/dist/subdivisions/sz.d.ts +5 -0
- package/dist/subdivisions/sz.js +4 -0
- package/dist/subdivisions/td.cjs +23 -0
- package/dist/subdivisions/td.d.cts +5 -0
- package/dist/subdivisions/td.d.ts +5 -0
- package/dist/subdivisions/td.js +23 -0
- package/dist/subdivisions/tg.cjs +5 -0
- package/dist/subdivisions/tg.d.cts +5 -0
- package/dist/subdivisions/tg.d.ts +5 -0
- package/dist/subdivisions/tg.js +5 -0
- package/dist/subdivisions/th.cjs +78 -0
- package/dist/subdivisions/th.d.cts +5 -0
- package/dist/subdivisions/th.d.ts +5 -0
- package/dist/subdivisions/th.js +78 -0
- package/dist/subdivisions/tj.cjs +5 -0
- package/dist/subdivisions/tj.d.cts +5 -0
- package/dist/subdivisions/tj.d.ts +5 -0
- package/dist/subdivisions/tj.js +5 -0
- package/dist/subdivisions/tl.cjs +13 -0
- package/dist/subdivisions/tl.d.cts +5 -0
- package/dist/subdivisions/tl.d.ts +5 -0
- package/dist/subdivisions/tl.js +13 -0
- package/dist/subdivisions/tm.cjs +6 -0
- package/dist/subdivisions/tm.d.cts +5 -0
- package/dist/subdivisions/tm.d.ts +5 -0
- package/dist/subdivisions/tm.js +6 -0
- package/dist/subdivisions/tn.cjs +24 -0
- package/dist/subdivisions/tn.d.cts +5 -0
- package/dist/subdivisions/tn.d.ts +5 -0
- package/dist/subdivisions/tn.js +24 -0
- package/dist/subdivisions/to.cjs +5 -0
- package/dist/subdivisions/to.d.cts +5 -0
- package/dist/subdivisions/to.d.ts +5 -0
- package/dist/subdivisions/to.js +5 -0
- package/dist/subdivisions/tr.cjs +81 -0
- package/dist/subdivisions/tr.d.cts +5 -0
- package/dist/subdivisions/tr.d.ts +5 -0
- package/dist/subdivisions/tr.js +81 -0
- package/dist/subdivisions/tt.cjs +15 -0
- package/dist/subdivisions/tt.d.cts +5 -0
- package/dist/subdivisions/tt.d.ts +5 -0
- package/dist/subdivisions/tt.js +15 -0
- package/dist/subdivisions/tv.cjs +8 -0
- package/dist/subdivisions/tv.d.cts +5 -0
- package/dist/subdivisions/tv.d.ts +5 -0
- package/dist/subdivisions/tv.js +8 -0
- package/dist/subdivisions/tw.cjs +22 -0
- package/dist/subdivisions/tw.d.cts +5 -0
- package/dist/subdivisions/tw.d.ts +5 -0
- package/dist/subdivisions/tw.js +22 -0
- package/dist/subdivisions/tz.cjs +31 -0
- package/dist/subdivisions/tz.d.cts +5 -0
- package/dist/subdivisions/tz.d.ts +5 -0
- package/dist/subdivisions/tz.js +31 -0
- package/dist/subdivisions/ua.cjs +27 -0
- package/dist/subdivisions/ua.d.cts +5 -0
- package/dist/subdivisions/ua.d.ts +5 -0
- package/dist/subdivisions/ua.js +27 -0
- package/dist/subdivisions/ug.cjs +139 -0
- package/dist/subdivisions/ug.d.cts +5 -0
- package/dist/subdivisions/ug.d.ts +5 -0
- package/dist/subdivisions/ug.js +139 -0
- package/dist/subdivisions/um.cjs +9 -0
- package/dist/subdivisions/um.d.cts +5 -0
- package/dist/subdivisions/um.d.ts +5 -0
- package/dist/subdivisions/um.js +9 -0
- package/dist/subdivisions/us.cjs +57 -0
- package/dist/subdivisions/us.d.cts +5 -0
- package/dist/subdivisions/us.d.ts +5 -0
- package/dist/subdivisions/us.js +57 -0
- package/dist/subdivisions/uy.cjs +19 -0
- package/dist/subdivisions/uy.d.cts +5 -0
- package/dist/subdivisions/uy.d.ts +5 -0
- package/dist/subdivisions/uy.js +19 -0
- package/dist/subdivisions/uz.cjs +14 -0
- package/dist/subdivisions/uz.d.cts +5 -0
- package/dist/subdivisions/uz.d.ts +5 -0
- package/dist/subdivisions/uz.js +14 -0
- package/dist/subdivisions/vc.cjs +6 -0
- package/dist/subdivisions/vc.d.cts +5 -0
- package/dist/subdivisions/vc.d.ts +5 -0
- package/dist/subdivisions/vc.js +6 -0
- package/dist/subdivisions/ve.cjs +25 -0
- package/dist/subdivisions/ve.d.cts +5 -0
- package/dist/subdivisions/ve.d.ts +5 -0
- package/dist/subdivisions/ve.js +25 -0
- package/dist/subdivisions/vn.cjs +63 -0
- package/dist/subdivisions/vn.d.cts +5 -0
- package/dist/subdivisions/vn.d.ts +5 -0
- package/dist/subdivisions/vn.js +63 -0
- package/dist/subdivisions/vu.cjs +6 -0
- package/dist/subdivisions/vu.d.cts +5 -0
- package/dist/subdivisions/vu.d.ts +5 -0
- package/dist/subdivisions/vu.js +6 -0
- package/dist/subdivisions/wf.cjs +3 -0
- package/dist/subdivisions/wf.d.cts +5 -0
- package/dist/subdivisions/wf.d.ts +5 -0
- package/dist/subdivisions/wf.js +3 -0
- package/dist/subdivisions/ws.cjs +11 -0
- package/dist/subdivisions/ws.d.cts +5 -0
- package/dist/subdivisions/ws.d.ts +5 -0
- package/dist/subdivisions/ws.js +11 -0
- package/dist/subdivisions/ye.cjs +22 -0
- package/dist/subdivisions/ye.d.cts +5 -0
- package/dist/subdivisions/ye.d.ts +5 -0
- package/dist/subdivisions/ye.js +22 -0
- package/dist/subdivisions/za.cjs +9 -0
- package/dist/subdivisions/za.d.cts +5 -0
- package/dist/subdivisions/za.d.ts +5 -0
- package/dist/subdivisions/za.js +9 -0
- package/dist/subdivisions/zm.cjs +10 -0
- package/dist/subdivisions/zm.d.cts +5 -0
- package/dist/subdivisions/zm.d.ts +5 -0
- package/dist/subdivisions/zm.js +10 -0
- package/dist/subdivisions/zw.cjs +10 -0
- package/dist/subdivisions/zw.d.cts +5 -0
- package/dist/subdivisions/zw.d.ts +5 -0
- package/dist/subdivisions/zw.js +10 -0
- package/dist/subdivisions.cjs +7130 -0
- package/dist/subdivisions.d.cts +20 -0
- package/dist/subdivisions.d.ts +20 -0
- package/dist/subdivisions.js +7096 -0
- package/dist/types-8MxnNg63.d.cts +50 -0
- package/dist/types-8MxnNg63.d.ts +50 -0
- package/dist/types-C9xWMvFc.d.cts +17 -0
- package/dist/types-C9xWMvFc.d.ts +17 -0
- package/package.json +144 -4
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project are written here. The format follows
|
|
4
|
+
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project uses
|
|
5
|
+
[Semantic Versioning](https://semver.org/).
|
|
6
|
+
|
|
7
|
+
## [Unreleased]
|
|
8
|
+
|
|
9
|
+
## [1.0.0] - 2026-10-09
|
|
10
|
+
|
|
11
|
+
The first version: every country and its subdivisions, with ISO 3166 codes and names in English and Japanese.
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- **`@johnmorrisdotca/kuni`**: the 250 countries (the 249 ISO 3166-1 codes and Kosovo, XK, as a user-assigned code), each with alpha-2, alpha-3 and numeric codes, its name in English and Japanese from Unicode CLDR 48.2, CLDR's short and variant forms, its own name, a reading in hiragana for a Japanese name written in kanji, its flag, continent and UN M49 subregion, calling code, currencies, top-level domain, capital, IANA time zones, languages and the kind of place its subdivisions are. Lookups: `country` (alpha-2 in either case, alpha-3 or numeric), `countries` (in code, English or Japanese order), `countryByName` (a name in either language, a short name, the country's own name or an alias such as Holland, UK, Burma or 米国), `countryName`, `flag`, `continentName`, `subregionName`, `fold` and `isCountryCode`.
|
|
16
|
+
- **`/codes`**: the 250 codes alone, `COUNTRY_CODES`, `isCountryCode` and the `CountryCode` type, about 2 KB.
|
|
17
|
+
- **`/subdivisions/<code>`**: one country's subdivisions as a list, one entry for each of the 200 countries that have them (Japan's 47 prefectures are under 3 KB).
|
|
18
|
+
- **`/subdivisions`**: all 5,046 ISO 3166-2 subdivisions (3,590 at the first level, the rest below it, such as France's departments inside its regions), each with its code, short code, level, parent, kind of place, English name, Japanese name or `null`, and for Japan's prefectures a reading. Lookups: `subdivisions` (by level), `allSubdivisions`, `subdivision`, `subdivisionByShortCode`, `subdivisionByName` and `subdivisionsByName` (English or Japanese, with or without the word for its kind, オンタリオ for オンタリオ州), and `subdivisionTypeLabel` (都, 道, 府 and 県 for Japan; 州 for Canada's provinces).
|
|
19
|
+
- **`/load`**: `loadSubdivisions(code)`, one dynamic import for each country, so a page loads only the countries somebody picks.
|
|
20
|
+
- Japanese names for 3,523 of the 3,590 first-level subdivisions (3,387 from CLDR, 41 written by hand where CLDR's is wrong or out of date, 95 from Wikidata where CLDR has none) and 4,747 of all 5,046; the rest are `null`, never an English name copied in. CLDR's trailing brackets that tell a place from one of the same name elsewhere (セント・ポール (ドミニカ国), バリンゴ (カウンティ), 江原道 (北)) are taken off, 115 of them, and listed in `docs/name-rules.md`. The 46 hand-written names (`JA_NAME_OVERRIDES`: parishes as 教区, Ukraine's Japanese forms of 2022, places renamed since, Latvian spellings and others) are listed with their reasons in `docs/disagreements.md`, with the questions left for a native reader of Japanese. `docs/ja-gaps.md` lists the gaps.
|
|
21
|
+
- ESM and CommonJS builds with types for both, `sideEffects: false`, no runtime dependencies, and no use of `Intl`, so a server and a browser give the same names.
|
|
22
|
+
- `pnpm data` builds the data from inputs committed under `data-sources/` (CLDR's subdivision files, IANA's zone.tab and TLD list, a Wikidata snapshot), checked by SHA-256, with no network; `pnpm data:fetch` and `pnpm data:wikidata` refresh them.
|
|
23
|
+
- A demo with three panels (find a country, the subdivisions of a country, look up a code) in English and Japanese, an API reference page, browser tests at a phone's width and a desk's, and the README's pictures taken from it.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 John Morris
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/NOTICE.md
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Notice: the data's licences
|
|
2
|
+
|
|
3
|
+
The code of this package is under the MIT licence (see [LICENSE](LICENSE)). The data in `src/data/` (and
|
|
4
|
+
`dist/`) is made from other people's work under their terms, which travel with it. Each data file opens with
|
|
5
|
+
lines saying what it was made from, and `data-sources/sources.json` records every downloaded input with its
|
|
6
|
+
address, the day it was read and its SHA-256.
|
|
7
|
+
|
|
8
|
+
| What | Made from | Terms |
|
|
9
|
+
| --- | --- | --- |
|
|
10
|
+
| Country names in English and Japanese, their short and variant forms, alpha-3 and numeric codes, currencies, UN M49 continents and subregions | Unicode CLDR 48.2 (`cldr-localenames-full` and `cldr-core` 48.2.0 on npm) | Unicode-3.0, below |
|
|
11
|
+
| Subdivision codes, English and Japanese names, the levels they are at and what they are inside | Unicode CLDR 48.2 (`common/subdivisions/en.xml`, `ja.xml`, `common/validity/subdivision.xml` at the tag `release-48-2`, and `cldr-core`'s `subdivisionContainment.json` and `aliases.json`) | Unicode-3.0, below |
|
|
12
|
+
| Japanese names of the subdivisions CLDR has none for, the kana readings of Japan's prefectures, calling codes, and what kind of place each subdivision is | Wikidata, the snapshot `data-sources/wikidata-2026-10-09.json` | CC0, below |
|
|
13
|
+
| Each country's own name, capital, continent and languages, and the calling code where Wikidata has none | countries-list 3.4.1 by Annexare Studio | MIT, below |
|
|
14
|
+
| Time zones | IANA time zone database 2026e, `zone.tab` | Public domain |
|
|
15
|
+
| Country-code top-level domains | IANA's list of top-level domains (version 2026100900) | A list of facts, published by IANA |
|
|
16
|
+
| The aliases ("Holland", "UK", 米国), the readings of country names written in kanji, Hokkaido's and Fukuoka's readings, and the Japanese words for kinds of place the build looks for | Written for this package, in `scripts/data-config.ts` | MIT |
|
|
17
|
+
|
|
18
|
+
## Unicode CLDR
|
|
19
|
+
|
|
20
|
+
The country and subdivision names, codes and regions are from the Unicode Common Locale Data Repository
|
|
21
|
+
(https://cldr.unicode.org/). Its licence (https://www.unicode.org/license.txt, read on 2026-10-09) asks that
|
|
22
|
+
this notice appear with all copies of the data or in its documentation:
|
|
23
|
+
|
|
24
|
+
```text
|
|
25
|
+
UNICODE LICENSE V3
|
|
26
|
+
|
|
27
|
+
COPYRIGHT AND PERMISSION NOTICE
|
|
28
|
+
|
|
29
|
+
Copyright © 2004-2026 Unicode, Inc.
|
|
30
|
+
|
|
31
|
+
NOTICE TO USER: Carefully read the following legal agreement. BY
|
|
32
|
+
DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR
|
|
33
|
+
SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE
|
|
34
|
+
TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT
|
|
35
|
+
DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.
|
|
36
|
+
|
|
37
|
+
Permission is hereby granted, free of charge, to any person obtaining a
|
|
38
|
+
copy of data files and any associated documentation (the "Data Files") or
|
|
39
|
+
software and any associated documentation (the "Software") to deal in the
|
|
40
|
+
Data Files or Software without restriction, including without limitation
|
|
41
|
+
the rights to use, copy, modify, merge, publish, distribute, and/or sell
|
|
42
|
+
copies of the Data Files or Software, and to permit persons to whom the
|
|
43
|
+
Data Files or Software are furnished to do so, provided that either (a)
|
|
44
|
+
this copyright and permission notice appear with all copies of the Data
|
|
45
|
+
Files or Software, or (b) this copyright and permission notice appear in
|
|
46
|
+
associated Documentation.
|
|
47
|
+
|
|
48
|
+
THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
|
|
49
|
+
KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
50
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
|
|
51
|
+
THIRD PARTY RIGHTS.
|
|
52
|
+
|
|
53
|
+
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE
|
|
54
|
+
BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,
|
|
55
|
+
OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
|
56
|
+
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
|
57
|
+
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA
|
|
58
|
+
FILES OR SOFTWARE.
|
|
59
|
+
|
|
60
|
+
Except as contained in this notice, the name of a copyright holder shall
|
|
61
|
+
not be used in advertising or otherwise to promote the sale, use or other
|
|
62
|
+
dealings in these Data Files or Software without prior written
|
|
63
|
+
authorization of the copyright holder.
|
|
64
|
+
|
|
65
|
+
SPDX-License-Identifier: Unicode-3.0
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**What was changed.** Names are kept as CLDR writes them, made NFC with full-width Latin letters and digits made
|
|
69
|
+
ordinary and spaces tidied, and with the superscript digit CLDR adds to tell two places of the same name apart
|
|
70
|
+
(Île-de-France²) taken off. Codes CLDR retires because the place has a country code of its own (US-PR beside PR)
|
|
71
|
+
are kept, as ISO 3166-2 keeps them, with the country's names. Where CLDR's Japanese name and Wikidata's differ,
|
|
72
|
+
CLDR's is kept; [docs/disagreements.md](docs/disagreements.md) lists them.
|
|
73
|
+
|
|
74
|
+
## Wikidata
|
|
75
|
+
|
|
76
|
+
Wikidata's structured data is released under the Creative Commons CC0 License
|
|
77
|
+
(https://www.wikidata.org/wiki/Wikidata:Licensing, read on 2026-10-09): no permission is needed and no credit is
|
|
78
|
+
required. It is credited here anyway. The two queries are written in the snapshot file itself. A Japanese label
|
|
79
|
+
is used only when CLDR has no Japanese name, when every current item for the code agrees on it, and when it is
|
|
80
|
+
written in Japanese with no bracketed explanation; a reading only when Wikidata gives exactly one for the same
|
|
81
|
+
name. Kinds of place are read from the English labels of the classes an item is an instance of.
|
|
82
|
+
|
|
83
|
+
## countries-list
|
|
84
|
+
|
|
85
|
+
```text
|
|
86
|
+
The MIT License (MIT)
|
|
87
|
+
|
|
88
|
+
Copyright (c) 2014 Annexare Studio
|
|
89
|
+
|
|
90
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
91
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
92
|
+
in the Software without restriction, including without limitation the rights
|
|
93
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
94
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
95
|
+
furnished to do so, subject to the following conditions:
|
|
96
|
+
|
|
97
|
+
The above copyright notice and this permission notice shall be included in all
|
|
98
|
+
copies or substantial portions of the Software.
|
|
99
|
+
|
|
100
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
101
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
102
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
103
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
104
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
105
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
106
|
+
SOFTWARE.```
|
|
107
|
+
|
|
108
|
+
From https://github.com/annexare/Countries, version 3.4.1 on npm. Its own name (`native`), capital, continent and
|
|
109
|
+
languages are used as they are; its calling code only where Wikidata has none.
|
|
110
|
+
|
|
111
|
+
## IANA
|
|
112
|
+
|
|
113
|
+
`zone.tab` is from the IANA time zone database, which is in the public domain. The list of top-level domains is
|
|
114
|
+
published by IANA at https://data.iana.org/TLD/tlds-alpha-by-domain.txt; only which two-letter domains exist is
|
|
115
|
+
read from it.
|
|
116
|
+
|
|
117
|
+
## Not carried
|
|
118
|
+
|
|
119
|
+
No geometry, population, area or other figure, so no database with a share-alike condition is carried: the
|
|
120
|
+
richer country datasets under ODbL (mledoze/countries, REST Countries) and the GPL `country-state-city` were
|
|
121
|
+
looked at and deliberately not used. GeoNames was not used either: its codes are not ISO 3166-2, and its licence
|
|
122
|
+
asks for attribution on every use.
|
|
123
|
+
|
|
124
|
+
## Made with
|
|
125
|
+
|
|
126
|
+
`scripts/build-data.ts` reads the inputs with Node alone. `cldr-core`, `cldr-localenames-full` and
|
|
127
|
+
`countries-list` are development dependencies of the build only: the package depends on nothing at run time.
|
package/README.md
CHANGED
|
@@ -1,3 +1,397 @@
|
|
|
1
|
-
|
|
1
|
+
<h1 align="center">Kuni <sub>国</sub></h1>
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<p align="center"><strong>Kuni 国: every country and its states, provinces and prefectures, with ISO 3166 codes and names in English and Japanese.</strong><br>
|
|
4
|
+
A typed, zero-dependency dataset from Unicode CLDR and Wikidata, loaded one country at a time, for JavaScript and TypeScript. Look up a country or a region by code or by what somebody typed, in either language, and load only the countries you need.</p>
|
|
5
|
+
|
|
6
|
+
<p align="center" lang="ja">世界の国と、州・県・省などの行政区画を、ISO 3166のコードと英語・日本語の名前で収めた、依存パッケージのないTypeScriptデータセット。</p>
|
|
7
|
+
|
|
8
|
+
<p align="center">
|
|
9
|
+
<a href="https://github.com/johnmorrisdotca/kuni/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/johnmorrisdotca/kuni/actions/workflows/ci.yml/badge.svg"></a>
|
|
10
|
+
<a href="https://www.npmjs.com/package/@johnmorrisdotca/kuni"><img alt="npm" src="https://img.shields.io/npm/v/@johnmorrisdotca/kuni?color=2f5d4a"></a>
|
|
11
|
+
<a href="./LICENSE"><img alt="MIT licence" src="https://img.shields.io/badge/licence-MIT-2f5d4a"></a>
|
|
12
|
+
<img alt="No dependencies" src="https://img.shields.io/badge/dependencies-0-2f5d4a">
|
|
13
|
+
<img alt="TypeScript" src="https://img.shields.io/badge/types-TypeScript-3178c6">
|
|
14
|
+
</p>
|
|
15
|
+
|
|
16
|
+
<p align="center"><a href="https://johnmorrisdotca.github.io/kuni/"><strong>Try it →</strong></a> · <a href="https://johnmorrisdotca.github.io/kuni/api.html">API reference</a></p>
|
|
17
|
+
|
|
18
|
+
<table align="center">
|
|
19
|
+
<tr>
|
|
20
|
+
<td align="center" valign="top">
|
|
21
|
+
<picture>
|
|
22
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/johnmorrisdotca/kuni/main/docs/images/hero-desk-dark.webp">
|
|
23
|
+
<img src="https://raw.githubusercontent.com/johnmorrisdotca/kuni/main/docs/images/hero-desk-light.webp" alt="The demo on a desk, in English: the header with its language chooser, the API reference link, five cloth patches and the Help switch, then three panels. Find a country shows ドイツ typed in and its answer: the German flag, DE, DEU and 276, Germany, ドイツ, Deutschland, Europe, Berlin, +49, EUR, .de, two time zones, and 16 states. Subdivisions of a country shows Japan picked and a table of its prefectures with code, English and Japanese name, from JP-01 Hokkaidō 北海道, and the line 47 subdivisions; the main kind is prefecture. Look up a code begins below with JP-13 typed in." width="600">
|
|
24
|
+
</picture>
|
|
25
|
+
<br><em>The demo on a desk: a country found by its Japanese name, and Japan's prefectures loaded on demand.</em>
|
|
26
|
+
</td>
|
|
27
|
+
<td align="center" valign="top">
|
|
28
|
+
<picture>
|
|
29
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/johnmorrisdotca/kuni/main/docs/images/hero-phone-dark.webp">
|
|
30
|
+
<img src="https://raw.githubusercontent.com/johnmorrisdotca/kuni/main/docs/images/hero-phone-light.webp" alt="The demo on a phone, in Japanese: the header, its language chooser, patches and buttons, then the first panel, 国を探す, with ドイツ typed in, its row of examples, and the start of its answer, the German flag and DE, DEU, 276" width="190">
|
|
31
|
+
</picture>
|
|
32
|
+
<br><em>On a phone, in Japanese, in the device's light or dark.</em>
|
|
33
|
+
</td>
|
|
34
|
+
</tr>
|
|
35
|
+
</table>
|
|
36
|
+
|
|
37
|
+
Kuni is the country list every site ends up keeping for itself, kept once, with what a form, a profile page or a map quiz asks of it: the 250 countries with their ISO 3166-1 codes, and their 5,046 ISO 3166-2 subdivisions (Japan's prefectures, the American states, Canada's provinces and territories, France's regions and departments), each named in English and in Japanese. The names are Unicode CLDR's, with Wikidata filling the gaps, so they are the same on a server and in a browser, which `Intl.DisplayNames` is not. It looks a country up by what somebody typed (Holland, USA, どいつ, 米国) and a region by its code or its name. It works in [the demo](https://johnmorrisdotca.github.io/kuni/) with nothing to install.
|
|
38
|
+
|
|
39
|
+
## In 30 seconds
|
|
40
|
+
|
|
41
|
+
```sh
|
|
42
|
+
npm install @johnmorrisdotca/kuni
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
```ts
|
|
46
|
+
import { country, countryByName, countryName } from "@johnmorrisdotca/kuni";
|
|
47
|
+
|
|
48
|
+
countryByName("ドイツ")?.alpha2; // "DE"; "Germany", "どいつ" and "Deutschland" find it too
|
|
49
|
+
countryByName("Holland")?.name.ja; // "オランダ"
|
|
50
|
+
countryName("US", "ja", { short: true }); // "アメリカ"
|
|
51
|
+
country("JP")?.callingCode; // "+81"
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
One country's subdivisions are an entry of their own, so a page that needs Japan's prefectures carries Japan's and no other:
|
|
55
|
+
|
|
56
|
+
```ts
|
|
57
|
+
import prefectures from "@johnmorrisdotca/kuni/subdivisions/jp";
|
|
58
|
+
|
|
59
|
+
prefectures.length; // 47
|
|
60
|
+
prefectures[12]; // { code: "JP-13", name: { en: "Tokyo", ja: "東京都" }, reading: "とうきょうと", type: "metropolis", ... }
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Install the scoped name: the unscoped `kuni` on npm is somebody else's package.
|
|
64
|
+
|
|
65
|
+
## Who it is for
|
|
66
|
+
|
|
67
|
+
- **Forms and profiles** that ask where somebody lives: a country select in either language, a state or prefecture select under it, and a free-text box whose "UK" or "Holland" still resolves to a code.
|
|
68
|
+
- **Sites rendered on a server and hydrated in a browser**, where `Intl.DisplayNames` spells some countries differently in Node and in Chromium and the page does not match itself.
|
|
69
|
+
- **Japanese-language pages** that need アメリカ合衆国 and オンタリオ州, the four kinds of Japanese prefecture (都道府県), and prefecture readings in kana.
|
|
70
|
+
- **Maps, quizzes and data pipelines** that join their own figures to a country or a region by its ISO code.
|
|
71
|
+
|
|
72
|
+
## Features
|
|
73
|
+
|
|
74
|
+
- **Every country.** The 249 ISO 3166-1 codes and Kosovo (XK, user-assigned), each with alpha-2, alpha-3 and numeric codes, its flag, continent, UN M49 subregion, calling code, currencies, top-level domain, capital, time zones and languages.
|
|
75
|
+
- **Every subdivision.** 5,046 ISO 3166-2 codes in 200 countries: 3,590 at the first level and 1,456 below it (France's departments in its regions, England's councils in England), each with its level and parent.
|
|
76
|
+
- **English and Japanese names** from Unicode CLDR 48.2, with CLDR's short forms (UK, アメリカ) and variants (Ivory Coast, 象牙海岸). Japanese names for 3,523 of the 3,590 first-level subdivisions, and `null` for the rest, never a guess.
|
|
77
|
+
- **Found by what somebody typed.** Case, accents, full-width letters, half-width kana and hiragana or katakana are folded away, and the aliases people use (Holland, UK, Burma, 米国) are known.
|
|
78
|
+
- **Kinds of place**: prefecture, state, province, region and some thirty more, read from Wikidata, with the Japanese word for each (県, 州, 省) where a country's names agree on one.
|
|
79
|
+
- **Small where it matters.** The countries and lookups are about 57 KB (19 KB gzipped); one country's subdivisions are their own entry (Japan's 47, 2.9 KB) or a dynamic import.
|
|
80
|
+
- **Typed, frozen, pure and the same everywhere.** ESM and CommonJS, types for both, no dependencies, no network and no `Intl`.
|
|
81
|
+
|
|
82
|
+
## Use it in your project
|
|
83
|
+
|
|
84
|
+
### Install
|
|
85
|
+
|
|
86
|
+
```sh
|
|
87
|
+
npm install @johnmorrisdotca/kuni
|
|
88
|
+
# or: pnpm add @johnmorrisdotca/kuni
|
|
89
|
+
# or: yarn add @johnmorrisdotca/kuni
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
It ships ES modules and CommonJS, with types for both and `sideEffects: false`. CommonJS is there because Node scripts and some packages that will read it (an address parser among them) want `require`; the rest of the family is ES modules only.
|
|
93
|
+
|
|
94
|
+
### The entry points
|
|
95
|
+
|
|
96
|
+
| Entry | What it carries | Size (ESM) |
|
|
97
|
+
| --- | --- | --- |
|
|
98
|
+
| `@johnmorrisdotca/kuni` | The 250 countries and the country lookups | 57 KB, 19 KB gzipped |
|
|
99
|
+
| `@johnmorrisdotca/kuni/codes` | The 250 codes and `isCountryCode`, nothing else | 2 KB |
|
|
100
|
+
| `@johnmorrisdotca/kuni/subdivisions/<code>` | One country's subdivisions, every level (`/subdivisions/jp`, `/subdivisions/us`, lower case) | 1 to 13 KB; Japan 2.9 KB |
|
|
101
|
+
| `@johnmorrisdotca/kuni/load` | `loadSubdivisions(code)`, one dynamic import per country | 11 KB, then the country's own file |
|
|
102
|
+
| `@johnmorrisdotca/kuni/subdivisions` | All 5,046 subdivisions and the subdivision lookups | 216 KB, 85 KB gzipped |
|
|
103
|
+
|
|
104
|
+
### 1. The countries
|
|
105
|
+
|
|
106
|
+
```ts
|
|
107
|
+
import { countries, country, countryByName } from "@johnmorrisdotca/kuni";
|
|
108
|
+
|
|
109
|
+
country("jp"); // alpha-2 in either case, "JPN" or "392" too
|
|
110
|
+
countryByName("cote d'ivoire"); // Côte d'Ivoire, CI
|
|
111
|
+
countries({ order: "ja" }); // in Japanese order, by reading where a name is in kanji
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### 2. One country's subdivisions
|
|
115
|
+
|
|
116
|
+
```ts
|
|
117
|
+
import states from "@johnmorrisdotca/kuni/subdivisions/us";
|
|
118
|
+
// const { SUBDIVISIONS } = require("@johnmorrisdotca/kuni/subdivisions/us");
|
|
119
|
+
|
|
120
|
+
states.filter((one) => one.type === "state").length; // 50; DC and the six outlying areas make 57
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### 3. Loaded when they are wanted
|
|
124
|
+
|
|
125
|
+
```ts
|
|
126
|
+
import { loadSubdivisions } from "@johnmorrisdotca/kuni/load";
|
|
127
|
+
|
|
128
|
+
const regions = await loadSubdivisions(form.country); // [] for a country with none, null for a code that is not one
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### 4. Every subdivision, on a server
|
|
132
|
+
|
|
133
|
+
```ts
|
|
134
|
+
import { subdivision, subdivisionByName, subdivisions, subdivisionTypeLabel } from "@johnmorrisdotca/kuni/subdivisions";
|
|
135
|
+
|
|
136
|
+
subdivisionByName("オンタリオ州", { country: "CA" })?.code; // "CA-ON"
|
|
137
|
+
subdivisions("FR")?.length; // 26 regions and overseas parts
|
|
138
|
+
subdivisions("FR", { level: "all" })?.length; // 124, with the departments
|
|
139
|
+
subdivisionTypeLabel("JP-13", "ja"); // "都"
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### In a page, with no bundler
|
|
143
|
+
|
|
144
|
+
```html
|
|
145
|
+
<script type="module">
|
|
146
|
+
import { countryByName } from "https://cdn.jsdelivr.net/npm/@johnmorrisdotca/kuni@1/dist/index.js";
|
|
147
|
+
console.log(countryByName("Holland")?.name.ja); // オランダ
|
|
148
|
+
</script>
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## Examples
|
|
152
|
+
|
|
153
|
+
### A country select, in either language
|
|
154
|
+
|
|
155
|
+
```ts
|
|
156
|
+
import { countries } from "@johnmorrisdotca/kuni";
|
|
157
|
+
|
|
158
|
+
const options = (lang: "en" | "ja") =>
|
|
159
|
+
countries({ order: lang }).map((one) => ({ value: one.alpha2, label: `${one.flag} ${one.name[lang]}` }));
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### A state or prefecture select that follows it
|
|
163
|
+
|
|
164
|
+
```ts
|
|
165
|
+
import { loadSubdivisions } from "@johnmorrisdotca/kuni/load";
|
|
166
|
+
|
|
167
|
+
async function regionOptions(countryCode: string, lang: "en" | "ja") {
|
|
168
|
+
const list = (await loadSubdivisions(countryCode)) ?? [];
|
|
169
|
+
return list.filter((one) => one.level === 1).map((one) => ({ value: one.code, label: one.name[lang] ?? one.name.en }));
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
The Japanese name is `null` where no source has one, so the fallback to English is the page's choice, made in the open.
|
|
174
|
+
|
|
175
|
+
### What somebody typed into a free-text country box
|
|
176
|
+
|
|
177
|
+
```ts
|
|
178
|
+
import { countryByName } from "@johnmorrisdotca/kuni";
|
|
179
|
+
|
|
180
|
+
for (const typed of ["UK", "the Netherlands", "USA", "どいつ", "Burma", "Narnia"]) {
|
|
181
|
+
console.log(typed, countryByName(typed)?.alpha2 ?? "(keep their words, no flag)");
|
|
182
|
+
}
|
|
183
|
+
// UK GB · the Netherlands NL · USA US · どいつ DE · Burma MM · Narnia (keep their words, no flag)
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### A name that is two places
|
|
187
|
+
|
|
188
|
+
```ts
|
|
189
|
+
import { subdivisionByName, subdivisionsByName } from "@johnmorrisdotca/kuni/subdivisions";
|
|
190
|
+
|
|
191
|
+
subdivisionByName("Punjab"); // null: it is in India and in Pakistan
|
|
192
|
+
subdivisionsByName("Punjab").map((one) => one.code); // ["IN-PB", "PK-PB"]
|
|
193
|
+
subdivisionByName("Punjab", { country: "PK" })?.code; // "PK-PB"
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## API
|
|
197
|
+
|
|
198
|
+
The [API reference](https://johnmorrisdotca.github.io/kuni/api.html) lists every export of every entry point with its signature and its comment. It is made from the source by `pnpm site`, so it cannot fall behind the code.
|
|
199
|
+
|
|
200
|
+
| Entry | Exports |
|
|
201
|
+
| --- | --- |
|
|
202
|
+
| `@johnmorrisdotca/kuni` | `country`, `countries`, `countryByName`, `countryName`, `flag`, `continentName`, `subregionName`, `fold`, `isCountryCode`, `COUNTRY_CODES`, `CONTINENTS`, `LANGUAGES`, `VERSION`, and the types `Country`, `CountryCode`, `Continent`, `Language`, `CountriesOptions`, `CountryOrder`, `CountryNameOptions`, `Subdivision` and `SubdivisionType` |
|
|
203
|
+
| `@johnmorrisdotca/kuni/codes` | `COUNTRY_CODES`, `isCountryCode` and the type `CountryCode` |
|
|
204
|
+
| `@johnmorrisdotca/kuni/subdivisions` | `subdivisions`, `allSubdivisions`, `subdivision`, `subdivisionByShortCode`, `subdivisionByName`, `subdivisionsByName`, `subdivisionTypeLabel`, `SUBDIVISION_TYPES`, and the types `Subdivision`, `SubdivisionType`, `Level`, `SubdivisionsOptions` and `SubdivisionByNameOptions` |
|
|
205
|
+
| `@johnmorrisdotca/kuni/subdivisions/<code>` | the country's list as the default export and as `SUBDIVISIONS` |
|
|
206
|
+
| `@johnmorrisdotca/kuni/load` | `loadSubdivisions` and the type `Subdivision` |
|
|
207
|
+
|
|
208
|
+
A country:
|
|
209
|
+
|
|
210
|
+
```ts
|
|
211
|
+
interface Country {
|
|
212
|
+
alpha2: string; // "JP"
|
|
213
|
+
alpha3: string; // "JPN"
|
|
214
|
+
numeric: string; // "392"
|
|
215
|
+
kind: "iso" | "user"; // "user" for Kosovo, XK
|
|
216
|
+
name: { en: string; ja: string; local?: string }; // local: its own name, "Deutschland"
|
|
217
|
+
shortName?: { en?: string; ja?: string }; // "UK", アメリカ
|
|
218
|
+
reading?: string; // hiragana, where the Japanese name is in kanji: "にほん"
|
|
219
|
+
flag: string; // the flag emoji
|
|
220
|
+
continent: "AF" | "AN" | "AS" | "EU" | "NA" | "OC" | "SA";
|
|
221
|
+
subregion?: string; // UN M49: "030", Eastern Asia
|
|
222
|
+
callingCode?: string; // "+81"; "+1" for every member of the North American plan
|
|
223
|
+
currency?: string[]; // ["JPY"]
|
|
224
|
+
tld?: string; // "jp"; "uk" for GB
|
|
225
|
+
capital?: { en: string };
|
|
226
|
+
zones?: string[]; // ["Asia/Tokyo"]
|
|
227
|
+
languages?: string[]; // ["ja"]
|
|
228
|
+
subdivisionType?: SubdivisionType; // "prefecture"
|
|
229
|
+
aliases?: string[]; // other names it goes by
|
|
230
|
+
}
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
A subdivision:
|
|
234
|
+
|
|
235
|
+
```ts
|
|
236
|
+
interface Subdivision {
|
|
237
|
+
code: string; // "JP-13", always the full ISO 3166-2 code
|
|
238
|
+
country: string; // "JP"
|
|
239
|
+
shortCode: string; // "13"
|
|
240
|
+
type: SubdivisionType | null; // "metropolis"; null where no source says
|
|
241
|
+
level: 1 | 2 | 3;
|
|
242
|
+
parent?: string; // "FR-IDF" for FR-75C, below the first level
|
|
243
|
+
name: { en: string; ja: string | null };
|
|
244
|
+
reading?: string; // Japan's prefectures: "とうきょうと"
|
|
245
|
+
}
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
Every function is pure and every object it hands out is frozen. A code or a name that is not one gives `null` (or an empty list), never a near miss.
|
|
249
|
+
|
|
250
|
+
## Theming
|
|
251
|
+
|
|
252
|
+
None, on purpose: Kuni is data and lookups, with no colours, markup or styles, so a page built on it looks however the page looks. The demo is the worked example: its panels are drawn by [`demo/demo.js`](./demo/demo.js) and [`demo/kuni.css`](./demo/kuni.css), over the family's shared stylesheet.
|
|
253
|
+
|
|
254
|
+
## Limits
|
|
255
|
+
|
|
256
|
+
| Limit | Value | Where |
|
|
257
|
+
| --- | --- | --- |
|
|
258
|
+
| Countries | 250: the 249 ISO 3166-1 codes and XK | `COUNTRY_CODES` |
|
|
259
|
+
| Subdivisions | 5,046 in 200 countries; 3,590 at level 1, 1,456 at level 2, none at level 3 | `allSubdivisions` |
|
|
260
|
+
| Japanese names of subdivisions | 3,523 of 3,590 at level 1 (3,387 from CLDR, 41 written by hand, 95 from Wikidata); 4,747 of all 5,046 | `name.ja`, [docs/ja-gaps.md](./docs/ja-gaps.md) |
|
|
261
|
+
| Kinds of place | known for 4,739 of 5,046; the rest are `null` | `type` |
|
|
262
|
+
| Readings in kana | Japan's 47 prefectures, and the 53 country names written with kanji | `reading` |
|
|
263
|
+
| Languages | English and Japanese | `LANGUAGES` |
|
|
264
|
+
|
|
265
|
+
Not here: cities, postal codes, coordinates, outlines, populations, and names in other languages. CLDR marks nearly all of its Japanese subdivision names "provisional"; where Wikidata names a place differently, CLDR's name is kept and the difference listed in [docs/disagreements.md](./docs/disagreements.md) (234 of 4,322 compared) for review. CLDR's trailing brackets (セント・ポール (ドミニカ国), バリンゴ (カウンティ)) are taken off by a rule listed in [docs/name-rules.md](./docs/name-rules.md), and 46 names a reviewer found wrong or out of date are written by hand, with their reasons, in [docs/disagreements.md](./docs/disagreements.md).
|
|
266
|
+
|
|
267
|
+
## Accessibility
|
|
268
|
+
|
|
269
|
+
Kuni draws nothing: it gives a page names, codes and readings, so what it can do for accessibility is give names a screen reader can say and a person can find by typing.
|
|
270
|
+
|
|
271
|
+
- **Names in the reader's language.** Every country and nearly every first-level subdivision has a Japanese name, and Japan's prefectures and the kanji country names have readings in hiragana, for furigana or for a screen reader.
|
|
272
|
+
- **Forgiving search.** A person who types in kana, in full-width letters or without accents still finds the place.
|
|
273
|
+
- **Flags are never the only label.** A flag is an emoji that many screen readers say only as two letters; the demo always writes the name beside it.
|
|
274
|
+
- **In the demo**, every panel is a labelled region, each box has a label, the answers are `aria-live`, the list of subdivisions is a real table with column headers, every control is at least 44 pixels square, and the page fits a phone at 390 pixels.
|
|
275
|
+
- **Not yet.** The demo's colours have not been measured against WCAG contrast ratios, and its Japanese has not been read by a native reader (see [Languages](#languages)).
|
|
276
|
+
|
|
277
|
+
## Browser and runtime support
|
|
278
|
+
|
|
279
|
+
The package is data and plain functions, so it runs anywhere JavaScript does: any browser with ES2022 and Unicode property escapes in regular expressions, and Node. Building it from source and running its data scripts needs Node 24 or later, which runs TypeScript as it is; CI tests on Node 24 on Linux, macOS and Windows. The demo is played in a real Chromium at a phone's width (with touch) and a desk's, and in WebKit at a phone's width.
|
|
280
|
+
|
|
281
|
+
## Languages
|
|
282
|
+
|
|
283
|
+
Every name is in English and Japanese. The country names, the subdivision names and the kinds of place in Japanese come from Unicode CLDR and Wikidata. A few strings are written for this package: the aliases (米国, 英国, 豪州), the readings of the 53 country names written with kanji and of two prefectures, the Japanese type words the build looks for, and the demo's own words. The subdivision names have been read through by a strong, but not a native, reader of Japanese, who corrected 46 of them (listed in [docs/disagreements.md](./docs/disagreements.md), with six questions left open). **Japanese: included; not yet reviewed by a native reader. Corrections welcome.** Every line of the demo is listed beside its English in [docs/strings-ja.md](./docs/strings-ja.md), and there is an [issue template](https://github.com/johnmorrisdotca/kuni/issues/new?template=fix-a-translation.md) for fixing a name or a line.
|
|
284
|
+
|
|
285
|
+
## Roadmap
|
|
286
|
+
|
|
287
|
+
Not here yet, and each welcome as an [issue](https://github.com/johnmorrisdotca/kuni/issues):
|
|
288
|
+
|
|
289
|
+
- Names in other languages, from CLDR, as an entry per language (`/names/<locale>`).
|
|
290
|
+
- Each subdivision's name in its own language and script (Wikidata P1705).
|
|
291
|
+
- The Japanese names CLDR and Wikidata both lack (listed in [docs/ja-gaps.md](./docs/ja-gaps.md)), when a source has them.
|
|
292
|
+
|
|
293
|
+
Left out on purpose: geometry and coordinates (see [Chizu](https://github.com/johnmorrisdotca/chizu)), and any data under a share-alike or GPL licence.
|
|
294
|
+
|
|
295
|
+
## Architecture
|
|
296
|
+
|
|
297
|
+
```text
|
|
298
|
+
src/
|
|
299
|
+
├── index.ts the main entry: the countries and their lookups
|
|
300
|
+
├── codes.ts the "/codes" entry: the codes alone
|
|
301
|
+
├── subdivisions.ts the "/subdivisions" entry: every subdivision and its lookups
|
|
302
|
+
├── load.ts the "/load" entry: one country's subdivisions by dynamic import
|
|
303
|
+
├── fold.ts folding what somebody typed: case, accents, width, kana
|
|
304
|
+
├── rows.ts turning the data's compact rows into objects
|
|
305
|
+
├── types.ts the shapes of a country and a subdivision, and the kinds of place
|
|
306
|
+
├── version.ts the package's version
|
|
307
|
+
├── data/ written by scripts/build-data.ts: countries, codes, and a file per country
|
|
308
|
+
└── subdivisions/ written by scripts/build-data.ts: the "/subdivisions/<code>" entries
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
`scripts/build-data.ts` (`pnpm data`) makes `src/data/` from the inputs in `data-sources/` and three npm packages, with no network, and checks every input's SHA-256 first; run twice, it leaves the tree as it was. `scripts/data-config.ts` holds the few things written by hand. Tests sit beside the code (`*.test.ts`). `scripts/` also builds the demo and its API page and checks the package as npm packs it; `demo/` is the page and `e2e/` its browser tests.
|
|
312
|
+
|
|
313
|
+
## Data and licences
|
|
314
|
+
|
|
315
|
+
| What | From | Licence |
|
|
316
|
+
| --- | --- | --- |
|
|
317
|
+
| Country names, short and variant forms, codes, currencies, continents and subregions | Unicode CLDR 48.2 (`cldr-core`, `cldr-localenames-full`) | Unicode-3.0 |
|
|
318
|
+
| Subdivision codes, names, levels and parents | Unicode CLDR 48.2 (`common/subdivisions`, validity and containment) | Unicode-3.0 |
|
|
319
|
+
| Japanese names CLDR lacks, prefecture readings, calling codes, kinds of place | Wikidata, a snapshot of 2026-10-09 | CC0 |
|
|
320
|
+
| Own names, capitals, continents, languages | countries-list 3.4.1 | MIT |
|
|
321
|
+
| Time zones and top-level domains | IANA tzdb 2026e `zone.tab`, IANA's TLD list | Public domain; a list of facts |
|
|
322
|
+
| Aliases, a few readings and 46 corrected Japanese subdivision names | written for this package | MIT |
|
|
323
|
+
|
|
324
|
+
[NOTICE.md](./NOTICE.md) carries the Unicode licence text and says what was changed, and [data-sources/README.md](./data-sources/README.md) says where every input came from and how to refresh it. Nothing under ODbL, CC BY-SA or the GPL is used, so the dataset is shipped under MIT with those notices.
|
|
325
|
+
|
|
326
|
+
## The name
|
|
327
|
+
|
|
328
|
+
*Kuni* (国) is Japanese for "country": a nation, as in 国境 (*kokkyō*, a border) and 外国 (*gaikoku*, abroad). It is also the old word for a province, the 国 of Japan's former provinces (武蔵国, *Musashi no kuni*), and, in お国はどちらですか, "where are you from?", the place somebody calls home. The one word covers both halves of the data: the countries, and the regions inside them. ([Wiktionary: 国](https://en.wiktionary.org/wiki/国), which gives "country, nation" and "province".)
|
|
329
|
+
|
|
330
|
+
## Where it comes from, and where it is used
|
|
331
|
+
|
|
332
|
+
Kuni was written because several sites by the same author each kept their own country list: codes typed out by hand, names from `Intl.DisplayNames` that differed between the server and the browser, a few dozen aliases, and three separate tables of Japan's prefectures. It is the one list they can share.
|
|
333
|
+
|
|
334
|
+
### Used by
|
|
335
|
+
|
|
336
|
+
Nothing yet: it is new. Using Kuni in something? Open an *Add my project* issue and we will add you.
|
|
337
|
+
|
|
338
|
+
### The family
|
|
339
|
+
|
|
340
|
+
Kuni is not yet in the family's shared list (the template every demo's header and footer read), which is changed in every repository at once; until it is, its demo adds itself at the end. The list as it will be:
|
|
341
|
+
|
|
342
|
+
Kuni is one of twenty-five packages, each made for the same site, each at
|
|
343
|
+
[github.com/johnmorrisdotca](https://github.com/johnmorrisdotca). The code of every one is MIT.
|
|
344
|
+
|
|
345
|
+
- [Korokoro](https://github.com/johnmorrisdotca/korokoro) (コロコロ): dice, with notation, exact odds, real sounds and the dice of many games. [Demo](https://johnmorrisdotca.github.io/korokoro/).
|
|
346
|
+
- [Kyuubu](https://github.com/johnmorrisdotca/kyuubu) (キューブ): a turning cube for the browser, 2×2 to 7×7, with record solves to replay. [Demo](https://johnmorrisdotca.github.io/kyuubu/).
|
|
347
|
+
- [Hitotsu](https://github.com/johnmorrisdotca/hitotsu) (一つ): a colour-card shedding game for two to eight, with the house rules people play. [Demo](https://johnmorrisdotca.github.io/hitotsu/).
|
|
348
|
+
- [Toranpu](https://github.com/johnmorrisdotca/toranpu) (トランプ): a deck of playing cards, card games with computer players, and solitaires. [Demo](https://johnmorrisdotca.github.io/toranpu/).
|
|
349
|
+
- [Tane](https://github.com/johnmorrisdotca/tane) (種): seeded random numbers and daily seeds, the same in every browser and on every server. [Demo](https://johnmorrisdotca.github.io/tane/).
|
|
350
|
+
- [Narabe](https://github.com/johnmorrisdotca/narabe) (並べ): one rules engine for abstract board games, from gomoku and Reversi to Go and checkers. [Demo](https://johnmorrisdotca.github.io/narabe/).
|
|
351
|
+
- [Tenka](https://github.com/johnmorrisdotca/tenka) (天下): world conquest for two to six, on a map of the real world. [Demo](https://johnmorrisdotca.github.io/tenka/).
|
|
352
|
+
- [Kumimoji](https://github.com/johnmorrisdotca/kumimoji) (組み文字): a crossword tile race, in English and Japanese kana. [Demo](https://johnmorrisdotca.github.io/kumimoji/).
|
|
353
|
+
- [Tsunagi](https://github.com/johnmorrisdotca/tsunagi) (繋ぎ): a line-joining logic puzzle whose every level has exactly one answer. [Demo](https://johnmorrisdotca.github.io/tsunagi/).
|
|
354
|
+
- [Jarajara](https://github.com/johnmorrisdotca/jarajara) (ジャラジャラ): mahjong tiles drawn as SVG, stacked layouts, and the matching solitaire Awase. [Demo](https://johnmorrisdotca.github.io/jarajara/).
|
|
355
|
+
- [Suido](https://github.com/johnmorrisdotca/suido) (水道): a pipe puzzle: turn the pieces until the water reaches every drain. [Demo](https://johnmorrisdotca.github.io/suido/).
|
|
356
|
+
- [Domino](https://github.com/johnmorrisdotca/domino) (ドミノ): dominoes and Mexican Train. [Demo](https://johnmorrisdotca.github.io/domino/).
|
|
357
|
+
- [Kotoba](https://github.com/johnmorrisdotca/kotoba) (言葉): word lists and word-game rules in English, French, German and Japanese. [Demo](https://johnmorrisdotca.github.io/kotoba/).
|
|
358
|
+
- [Sugoroku](https://github.com/johnmorrisdotca/sugoroku) (双六): backgammon and its variants, with the doubling cube and match play. [Demo](https://johnmorrisdotca.github.io/sugoroku/).
|
|
359
|
+
- [Kazu](https://github.com/johnmorrisdotca/kazu) (数): grid number puzzles: Sudoku and its variants, Futoshiki and Skyscrapers. [Demo](https://johnmorrisdotca.github.io/kazu/).
|
|
360
|
+
- [Meikyuu](https://github.com/johnmorrisdotca/meikyuu) (迷宮): mazes on squares, hexagons, triangles and circles, made from a seed and drawn through with a finger or the mouse. [Demo](https://johnmorrisdotca.github.io/meikyuu/).
|
|
361
|
+
- [Hikidashi](https://github.com/johnmorrisdotca/hikidashi) (引き出し): a drawer of small Japanese text tools: era dates, kanji numerals, readings and sentence difficulty. [Demo](https://johnmorrisdotca.github.io/hikidashi/).
|
|
362
|
+
- [Chizu](https://github.com/johnmorrisdotca/chizu) (地図): maps of the world and of countries' regions, in English and Japanese, with a quiz and callouts. [Demo](https://johnmorrisdotca.github.io/chizu/).
|
|
363
|
+
- [Bushu](https://github.com/johnmorrisdotca/bushu) (部首): find a kanji by the parts it is made of. [Demo](https://johnmorrisdotca.github.io/bushu/).
|
|
364
|
+
- [Tobiishi](https://github.com/johnmorrisdotca/tobiishi) (飛び石): peg solitaire with nine boards and seeded solvable challenges. [Demo](https://johnmorrisdotca.github.io/tobiishi/).
|
|
365
|
+
- [Jirai](https://github.com/johnmorrisdotca/jirai) (地雷): minesweeper on shaped grids with verified no-guess boards. [Demo](https://johnmorrisdotca.github.io/jirai/).
|
|
366
|
+
- [Gunjin](https://github.com/johnmorrisdotca/gunjin) (軍人): five hidden-rank strategy games with pass-the-device play. [Demo](https://johnmorrisdotca.github.io/gunjin/).
|
|
367
|
+
- [Karakuri](https://github.com/johnmorrisdotca/karakuri) (からくり): eight hyper-casual puzzle games, some of them physics: draw a shield, pull pins, cut ropes, slide blocks, pour tubes. [Demo](https://johnmorrisdotca.github.io/karakuri/).
|
|
368
|
+
- [Houseki](https://github.com/johnmorrisdotca/houseki) (宝石): gem and stone matching puzzles: falling triplets, stone collapse, colour chains and gem swap. [Demo](https://johnmorrisdotca.github.io/houseki/).
|
|
369
|
+
- [Kuni](https://github.com/johnmorrisdotca/kuni) (国): every country and its subdivisions, with ISO 3166 codes and names in English and Japanese. [Demo](https://johnmorrisdotca.github.io/kuni/).
|
|
370
|
+
|
|
371
|
+
**This package is Kuni.** The demos of all twenty-five share one header and footer, so each links the rest.
|
|
372
|
+
|
|
373
|
+
## Development
|
|
374
|
+
|
|
375
|
+
```sh
|
|
376
|
+
pnpm install
|
|
377
|
+
pnpm check # lint, types, build, every test (sizes included), and the packed package
|
|
378
|
+
pnpm test:package # pack, install and import it as somebody who installed it would
|
|
379
|
+
pnpm test:demo # build the demo and play it in a real browser, at a phone's width and a desk's
|
|
380
|
+
pnpm site # build the demo into site/, as the Pages workflow publishes it
|
|
381
|
+
pnpm screenshots:readme # take the README's pictures from the built demo, in light and dark
|
|
382
|
+
pnpm data # rebuild src/data/ from data-sources/ (no network)
|
|
383
|
+
pnpm data:report # the coverage, and docs/ja-gaps.md
|
|
384
|
+
pnpm docs:make # rewrite docs/strings-ja.md after changing a word of the demo
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
## Contributing
|
|
388
|
+
|
|
389
|
+
See [CONTRIBUTING.md](./CONTRIBUTING.md); the commands are under [Development](#development), and the rules for the data are in its own section. Please follow the [code of conduct](./CODE_OF_CONDUCT.md). A security concern is for the [security policy](./SECURITY.md), not a public issue.
|
|
390
|
+
|
|
391
|
+
## Changes
|
|
392
|
+
|
|
393
|
+
See [CHANGELOG.md](./CHANGELOG.md). The first version is 1.0.0.
|
|
394
|
+
|
|
395
|
+
## Licence
|
|
396
|
+
|
|
397
|
+
MIT, © John Morris. The data is made from Unicode CLDR (Unicode-3.0), Wikidata (CC0), countries-list (MIT) and IANA (public domain), credited with their terms in [NOTICE.md](./NOTICE.md), which ships with the package.
|