african-states-and-tribes 2.0.0 → 2.1.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/EXAMPLES.md +261 -0
- package/MODULAR_IMPORTS.md +162 -0
- package/README.md +83 -1
- package/dist/{AO-KTWONNYZ.mjs → AO-3WUV6HS7.mjs} +1 -1
- package/dist/{BF-O7TBSCCA.mjs → BF-GZ45LRSN.mjs} +1 -1
- package/dist/{BI-DLK4YMGO.mjs → BI-3GCTK7CF.mjs} +1 -1
- package/dist/{BJ-PNML7KGU.mjs → BJ-4AJ2EFGG.mjs} +1 -1
- package/dist/{BW-CNU7L4NH.mjs → BW-AN7LIVOT.mjs} +1 -1
- package/dist/{CD-3L2NXQVL.mjs → CD-JYCWONXN.mjs} +1 -1
- package/dist/{CF-ESX77N6V.mjs → CF-L6ZKGUE2.mjs} +1 -1
- package/dist/{CG-VO3X7LDQ.mjs → CG-L6Q7VBRE.mjs} +1 -1
- package/dist/{CI-GS6CFDT3.mjs → CI-OKLEG4C6.mjs} +1 -1
- package/dist/{CM-BTFLGGR5.mjs → CM-5U7UTSLM.mjs} +1 -1
- package/dist/{CV-UT67RQS3.mjs → CV-J3IWNECL.mjs} +1 -1
- package/dist/{DJ-ZMQOBOIG.mjs → DJ-WPIJRNWE.mjs} +1 -1
- package/dist/{DZ-LPE6ZB5C.mjs → DZ-ONSX7GR6.mjs} +1 -1
- package/dist/{EG-SP5CNNNV.mjs → EG-CBFPAFSO.mjs} +1 -1
- package/dist/{ER-UP22LPAH.mjs → ER-UC5TZBXK.mjs} +1 -1
- package/dist/{ET-OBCUOADT.mjs → ET-HXCBRBHN.mjs} +1 -1
- package/dist/{GA-MAVC3U4Q.mjs → GA-T5YWU36U.mjs} +1 -1
- package/dist/{GH-6ZWTNM6E.mjs → GH-BMJZWTWI.mjs} +1 -1
- package/dist/{GM-3TYRGF43.mjs → GM-R3VSEPTK.mjs} +1 -1
- package/dist/{GN-J26OKD3H.mjs → GN-DRGVYDMG.mjs} +1 -1
- package/dist/{GQ-TVJPRBZ4.mjs → GQ-SMAK7YCQ.mjs} +1 -1
- package/dist/{GW-BXXBSDB3.mjs → GW-DQPA4VJE.mjs} +1 -1
- package/dist/{KE-FR37ZDM6.mjs → KE-DMP37VDP.mjs} +3 -3
- package/dist/{KM-2T7XZQOW.mjs → KM-3F2KE6ER.mjs} +1 -1
- package/dist/{LR-SDYDWBD2.mjs → LR-D67J6ITO.mjs} +1 -1
- package/dist/{LS-WW7EJFSS.mjs → LS-QWKN3I62.mjs} +1 -1
- package/dist/{LY-GLNCPO5D.mjs → LY-WJBKPKU2.mjs} +1 -1
- package/dist/{MA-4JTQR5LC.mjs → MA-WRX5RCS2.mjs} +1 -1
- package/dist/{MG-V4B3MJ27.mjs → MG-R72YT5VK.mjs} +1 -1
- package/dist/{ML-5UC2UZFE.mjs → ML-VUAFPT44.mjs} +1 -1
- package/dist/{MR-V7C27OIX.mjs → MR-2E64EHZB.mjs} +1 -1
- package/dist/{MU-2QTJWWOZ.mjs → MU-6FUJYQWD.mjs} +1 -1
- package/dist/{MW-QHGL2IKS.mjs → MW-HRW5OHWN.mjs} +1 -1
- package/dist/{MZ-5UZ67NUU.mjs → MZ-3U5UXS5E.mjs} +1 -1
- package/dist/{NA-5VDTGOMK.mjs → NA-XWIW6OOU.mjs} +1 -1
- package/dist/{NE-ZOWNVUFW.mjs → NE-ELKMBL7S.mjs} +1 -1
- package/dist/{NG-RETX6WJ4.mjs → NG-4CWXAYHN.mjs} +2 -2
- package/dist/{RW-GQU5ZEII.mjs → RW-HNJ52BFQ.mjs} +1 -1
- package/dist/{SC-SY5UMMU2.mjs → SC-3DSRWYFW.mjs} +1 -1
- package/dist/{SD-GZVFH7EN.mjs → SD-WB6ISMGF.mjs} +1 -1
- package/dist/{SL-G6OQ2OKF.mjs → SL-4COV24SC.mjs} +1 -1
- package/dist/{SN-KDIN2VHE.mjs → SN-64VQKOL2.mjs} +1 -1
- package/dist/{SO-OYCQEJXC.mjs → SO-HMRU3XDI.mjs} +1 -1
- package/dist/{SS-VC4OP4LH.mjs → SS-TXIVIGCJ.mjs} +1 -1
- package/dist/{ST-W5CRCMYC.mjs → ST-VPGLJ6S4.mjs} +1 -1
- package/dist/{SZ-WPJM53Q7.mjs → SZ-4MEBFNNW.mjs} +1 -1
- package/dist/{TD-LC3R4NYM.mjs → TD-MV3TL2LQ.mjs} +1 -1
- package/dist/{TG-4GRO64UZ.mjs → TG-QLZJRIDX.mjs} +1 -1
- package/dist/{TN-KWXKNLDT.mjs → TN-ZRJRJMOM.mjs} +1 -1
- package/dist/{TZ-MR6WGF2A.mjs → TZ-D53PSFSF.mjs} +1 -1
- package/dist/{UG-UNMXRIJ5.mjs → UG-YVEGQ67T.mjs} +1 -1
- package/dist/{ZA-RNKH3KHE.mjs → ZA-QQ6HKOFU.mjs} +1 -1
- package/dist/{ZM-KVDEVKJK.mjs → ZM-KORM3A4T.mjs} +1 -1
- package/dist/{ZW-EFGG3D6Y.mjs → ZW-WH4BPDKQ.mjs} +1 -1
- package/dist/ao-BN_SJunv.d.mts +387 -0
- package/dist/ao-BN_SJunv.d.ts +387 -0
- package/dist/bf-Dqj39McS.d.mts +279 -0
- package/dist/bf-Dqj39McS.d.ts +279 -0
- package/dist/bi-Ba4A32Yt.d.mts +369 -0
- package/dist/bi-Ba4A32Yt.d.ts +369 -0
- package/dist/bj-fY_W6yBo.d.mts +255 -0
- package/dist/bj-fY_W6yBo.d.ts +255 -0
- package/dist/bw-OCC9w3C4.d.mts +243 -0
- package/dist/bw-OCC9w3C4.d.ts +243 -0
- package/dist/cd-Cpxf_ikm.d.mts +495 -0
- package/dist/cd-Cpxf_ikm.d.ts +495 -0
- package/dist/cf-CrFP7Drd.d.mts +423 -0
- package/dist/cf-CrFP7Drd.d.ts +423 -0
- package/dist/cg-BYxWa6m4.d.mts +279 -0
- package/dist/cg-BYxWa6m4.d.ts +279 -0
- package/dist/chunk-24IV36BQ.mjs +44 -0
- package/dist/chunk-2JSSOTED.mjs +44 -0
- package/dist/chunk-32VQ7KYH.mjs +44 -0
- package/dist/chunk-4RK2CGMU.mjs +44 -0
- package/dist/chunk-55XYJJC6.mjs +44 -0
- package/dist/chunk-5AECN3B2.mjs +1365 -0
- package/dist/chunk-5U5QABNG.mjs +44 -0
- package/dist/chunk-6X3JIUEO.mjs +15 -0
- package/dist/chunk-7D7GXZ7C.mjs +44 -0
- package/dist/chunk-A6XUT3BK.mjs +44 -0
- package/dist/chunk-ADPF6UU2.mjs +44 -0
- package/dist/chunk-BM2DB2IJ.mjs +44 -0
- package/dist/chunk-BNE6IOV4.mjs +44 -0
- package/dist/chunk-C5WTTTBO.mjs +44 -0
- package/dist/chunk-CMCGO53E.mjs +44 -0
- package/dist/chunk-CNXFY74C.mjs +44 -0
- package/dist/chunk-DEZJOYAK.mjs +44 -0
- package/dist/chunk-DSDBWR43.mjs +44 -0
- package/dist/chunk-E5UEB6IB.mjs +44 -0
- package/dist/chunk-EFVKVDU6.mjs +44 -0
- package/dist/chunk-F2MVYZIC.mjs +44 -0
- package/dist/chunk-F5MLJ47Q.mjs +44 -0
- package/dist/chunk-FS65WXD5.mjs +44 -0
- package/dist/chunk-FT3QWXGX.mjs +44 -0
- package/dist/chunk-GALD3KIZ.mjs +44 -0
- package/dist/chunk-GRFQFN2V.mjs +44 -0
- package/dist/chunk-H7CBD2RQ.mjs +44 -0
- package/dist/chunk-HKUC56VX.mjs +44 -0
- package/dist/chunk-ILJYIAIQ.mjs +44 -0
- package/dist/chunk-IXXGIOE5.mjs +44 -0
- package/dist/chunk-J52IN2GT.mjs +44 -0
- package/dist/chunk-JRCVMTYP.mjs +44 -0
- package/dist/chunk-KJGX4DA7.mjs +44 -0
- package/dist/chunk-KV35J3OC.mjs +44 -0
- package/dist/chunk-LD4KKW4K.mjs +44 -0
- package/dist/chunk-LFHXGI7U.mjs +44 -0
- package/dist/chunk-LMVVJ5K4.mjs +44 -0
- package/dist/chunk-LNDPDKVK.mjs +44 -0
- package/dist/chunk-LW5ZKSQJ.mjs +44 -0
- package/dist/chunk-OAHXYNQF.mjs +44 -0
- package/dist/chunk-QKFXNE45.mjs +44 -0
- package/dist/chunk-R6M3OJ43.mjs +44 -0
- package/dist/chunk-SUPWL4GX.mjs +44 -0
- package/dist/chunk-TJZLVPTQ.mjs +44 -0
- package/dist/chunk-UD2BPOD5.mjs +44 -0
- package/dist/chunk-UW3ZFE2X.mjs +44 -0
- package/dist/chunk-V4PVQKP6.mjs +44 -0
- package/dist/chunk-VDMRWF3T.mjs +44 -0
- package/dist/chunk-VHZOL65Z.mjs +44 -0
- package/dist/chunk-WP2RKQ3V.mjs +44 -0
- package/dist/chunk-XCYPHKIQ.mjs +44 -0
- package/dist/chunk-XLX4VLR6.mjs +44 -0
- package/dist/chunk-XR7X4QMD.mjs +44 -0
- package/dist/chunk-Y6AB3PCO.mjs +44 -0
- package/dist/chunk-YERFHYYM.mjs +44 -0
- package/dist/chunk-YSETRABU.mjs +44 -0
- package/dist/ci-C4EwPqRx.d.mts +333 -0
- package/dist/ci-C4EwPqRx.d.ts +333 -0
- package/dist/cm-DFrkXf2R.d.mts +243 -0
- package/dist/cm-DFrkXf2R.d.ts +243 -0
- package/dist/countries/ao.d.mts +1 -0
- package/dist/countries/ao.d.ts +1 -0
- package/dist/countries/ao.js +1622 -0
- package/dist/countries/ao.mjs +12 -0
- package/dist/countries/bf.d.mts +1 -0
- package/dist/countries/bf.d.ts +1 -0
- package/dist/countries/bf.js +1562 -0
- package/dist/countries/bf.mjs +12 -0
- package/dist/countries/bi.d.mts +1 -0
- package/dist/countries/bi.d.ts +1 -0
- package/dist/countries/bi.js +1612 -0
- package/dist/countries/bi.mjs +12 -0
- package/dist/countries/bj.d.mts +1 -0
- package/dist/countries/bj.d.ts +1 -0
- package/dist/countries/bj.js +1550 -0
- package/dist/countries/bj.mjs +12 -0
- package/dist/countries/bw.d.mts +1 -0
- package/dist/countries/bw.d.ts +1 -0
- package/dist/countries/bw.js +1542 -0
- package/dist/countries/bw.mjs +12 -0
- package/dist/countries/cd.d.mts +1 -0
- package/dist/countries/cd.d.ts +1 -0
- package/dist/countries/cd.js +1682 -0
- package/dist/countries/cd.mjs +12 -0
- package/dist/countries/cf.d.mts +1 -0
- package/dist/countries/cf.d.ts +1 -0
- package/dist/countries/cf.js +1642 -0
- package/dist/countries/cf.mjs +12 -0
- package/dist/countries/cg.d.mts +1 -0
- package/dist/countries/cg.d.ts +1 -0
- package/dist/countries/cg.js +1562 -0
- package/dist/countries/cg.mjs +12 -0
- package/dist/countries/ci.d.mts +1 -0
- package/dist/countries/ci.d.ts +1 -0
- package/dist/countries/ci.js +1592 -0
- package/dist/countries/ci.mjs +12 -0
- package/dist/countries/cm.d.mts +1 -0
- package/dist/countries/cm.d.ts +1 -0
- package/dist/countries/cm.js +1542 -0
- package/dist/countries/cm.mjs +12 -0
- package/dist/countries/cv.d.mts +1 -0
- package/dist/countries/cv.d.ts +1 -0
- package/dist/countries/cv.js +1672 -0
- package/dist/countries/cv.mjs +12 -0
- package/dist/countries/dj.d.mts +1 -0
- package/dist/countries/dj.d.ts +1 -0
- package/dist/countries/dj.js +1482 -0
- package/dist/countries/dj.mjs +12 -0
- package/dist/countries/dz.d.mts +1 -0
- package/dist/countries/dz.d.ts +1 -0
- package/dist/countries/dz.js +1964 -0
- package/dist/countries/dz.mjs +12 -0
- package/dist/countries/eg.d.mts +1 -0
- package/dist/countries/eg.d.ts +1 -0
- package/dist/countries/eg.js +1718 -0
- package/dist/countries/eg.mjs +12 -0
- package/dist/countries/er.d.mts +1 -0
- package/dist/countries/er.d.ts +1 -0
- package/dist/countries/er.js +1502 -0
- package/dist/countries/er.mjs +12 -0
- package/dist/countries/et.d.mts +1 -0
- package/dist/countries/et.d.ts +1 -0
- package/dist/countries/et.js +1542 -0
- package/dist/countries/et.mjs +12 -0
- package/dist/countries/ga.d.mts +1 -0
- package/dist/countries/ga.d.ts +1 -0
- package/dist/countries/ga.js +1532 -0
- package/dist/countries/ga.mjs +12 -0
- package/dist/countries/gh.d.mts +1 -0
- package/dist/countries/gh.d.ts +1 -0
- package/dist/countries/gh.js +1602 -0
- package/dist/countries/gh.mjs +12 -0
- package/dist/countries/gm.d.mts +1 -0
- package/dist/countries/gm.d.ts +1 -0
- package/dist/countries/gm.js +1512 -0
- package/dist/countries/gm.mjs +12 -0
- package/dist/countries/gn.d.mts +1 -0
- package/dist/countries/gn.d.ts +1 -0
- package/dist/countries/gn.js +1522 -0
- package/dist/countries/gn.mjs +12 -0
- package/dist/countries/gq.d.mts +1 -0
- package/dist/countries/gq.d.ts +1 -0
- package/dist/countries/gq.js +1492 -0
- package/dist/countries/gq.mjs +12 -0
- package/dist/countries/gw.d.mts +1 -0
- package/dist/countries/gw.d.ts +1 -0
- package/dist/countries/gw.js +1532 -0
- package/dist/countries/gw.mjs +12 -0
- package/dist/countries/index.d.mts +54 -0
- package/dist/countries/index.d.ts +54 -0
- package/dist/countries/index.js +13136 -0
- package/dist/countries/index.mjs +220 -0
- package/dist/countries/ke.d.mts +1 -0
- package/dist/countries/ke.d.ts +1 -0
- package/dist/countries/ke.js +1762 -0
- package/dist/countries/ke.mjs +12 -0
- package/dist/countries/km.d.mts +1 -0
- package/dist/countries/km.d.ts +1 -0
- package/dist/countries/km.js +1472 -0
- package/dist/countries/km.mjs +12 -0
- package/dist/countries/lr.d.mts +1 -0
- package/dist/countries/lr.d.ts +1 -0
- package/dist/countries/lr.js +1592 -0
- package/dist/countries/lr.mjs +12 -0
- package/dist/countries/ls.d.mts +1 -0
- package/dist/countries/ls.d.ts +1 -0
- package/dist/countries/ls.js +1542 -0
- package/dist/countries/ls.mjs +12 -0
- package/dist/countries/ly.d.mts +1 -0
- package/dist/countries/ly.d.ts +1 -0
- package/dist/countries/ly.js +1582 -0
- package/dist/countries/ly.mjs +12 -0
- package/dist/countries/ma.d.mts +1 -0
- package/dist/countries/ma.d.ts +1 -0
- package/dist/countries/ma.js +1572 -0
- package/dist/countries/ma.mjs +12 -0
- package/dist/countries/mg.d.mts +1 -0
- package/dist/countries/mg.d.ts +1 -0
- package/dist/countries/mg.js +1502 -0
- package/dist/countries/mg.mjs +12 -0
- package/dist/countries/ml.d.mts +1 -0
- package/dist/countries/ml.d.ts +1 -0
- package/dist/countries/ml.js +1632 -0
- package/dist/countries/ml.mjs +12 -0
- package/dist/countries/mr.d.mts +1 -0
- package/dist/countries/mr.d.ts +1 -0
- package/dist/countries/mr.js +1592 -0
- package/dist/countries/mr.mjs +12 -0
- package/dist/countries/mu.d.mts +1 -0
- package/dist/countries/mu.d.ts +1 -0
- package/dist/countries/mu.js +1542 -0
- package/dist/countries/mu.mjs +12 -0
- package/dist/countries/mw.d.mts +1 -0
- package/dist/countries/mw.d.ts +1 -0
- package/dist/countries/mw.js +1662 -0
- package/dist/countries/mw.mjs +12 -0
- package/dist/countries/mz.d.mts +1 -0
- package/dist/countries/mz.d.ts +1 -0
- package/dist/countries/mz.js +1552 -0
- package/dist/countries/mz.mjs +12 -0
- package/dist/countries/na.d.mts +1 -0
- package/dist/countries/na.d.ts +1 -0
- package/dist/countries/na.js +1582 -0
- package/dist/countries/na.mjs +12 -0
- package/dist/countries/ne.d.mts +1 -0
- package/dist/countries/ne.d.ts +1 -0
- package/dist/countries/ne.js +1522 -0
- package/dist/countries/ne.mjs +12 -0
- package/dist/countries/ng.d.mts +1 -0
- package/dist/countries/ng.d.ts +1 -0
- package/dist/countries/ng.js +3061 -0
- package/dist/countries/ng.mjs +12 -0
- package/dist/countries/rw.d.mts +1 -0
- package/dist/countries/rw.d.ts +1 -0
- package/dist/countries/rw.js +1487 -0
- package/dist/countries/rw.mjs +12 -0
- package/dist/countries/sc.d.mts +1 -0
- package/dist/countries/sc.d.ts +1 -0
- package/dist/countries/sc.js +1702 -0
- package/dist/countries/sc.mjs +12 -0
- package/dist/countries/sd.d.mts +1 -0
- package/dist/countries/sd.d.ts +1 -0
- package/dist/countries/sd.js +1622 -0
- package/dist/countries/sd.mjs +12 -0
- package/dist/countries/sl.d.mts +1 -0
- package/dist/countries/sl.d.ts +1 -0
- package/dist/countries/sl.js +1502 -0
- package/dist/countries/sl.mjs +12 -0
- package/dist/countries/sn.d.mts +1 -0
- package/dist/countries/sn.d.ts +1 -0
- package/dist/countries/sn.js +1582 -0
- package/dist/countries/sn.mjs +12 -0
- package/dist/countries/so.d.mts +1 -0
- package/dist/countries/so.d.ts +1 -0
- package/dist/countries/so.js +1622 -0
- package/dist/countries/so.mjs +12 -0
- package/dist/countries/ss.d.mts +1 -0
- package/dist/countries/ss.d.ts +1 -0
- package/dist/countries/ss.js +1439 -0
- package/dist/countries/ss.mjs +12 -0
- package/dist/countries/st.d.mts +1 -0
- package/dist/countries/st.d.ts +1 -0
- package/dist/countries/st.js +1462 -0
- package/dist/countries/st.mjs +12 -0
- package/dist/countries/sz.d.mts +1 -0
- package/dist/countries/sz.d.ts +1 -0
- package/dist/countries/sz.js +1502 -0
- package/dist/countries/sz.mjs +12 -0
- package/dist/countries/td.d.mts +1 -0
- package/dist/countries/td.d.ts +1 -0
- package/dist/countries/td.js +1673 -0
- package/dist/countries/td.mjs +12 -0
- package/dist/countries/tg.d.mts +1 -0
- package/dist/countries/tg.d.ts +1 -0
- package/dist/countries/tg.js +1492 -0
- package/dist/countries/tg.mjs +12 -0
- package/dist/countries/tn.d.mts +1 -0
- package/dist/countries/tn.d.ts +1 -0
- package/dist/countries/tn.js +1945 -0
- package/dist/countries/tn.mjs +12 -0
- package/dist/countries/tz.d.mts +1 -0
- package/dist/countries/tz.d.ts +1 -0
- package/dist/countries/tz.js +1652 -0
- package/dist/countries/tz.mjs +12 -0
- package/dist/countries/ug.d.mts +1 -0
- package/dist/countries/ug.d.ts +1 -0
- package/dist/countries/ug.js +1832 -0
- package/dist/countries/ug.mjs +12 -0
- package/dist/countries/za.d.mts +1 -0
- package/dist/countries/za.d.ts +1 -0
- package/dist/countries/za.js +1532 -0
- package/dist/countries/za.mjs +12 -0
- package/dist/countries/zm.d.mts +1 -0
- package/dist/countries/zm.d.ts +1 -0
- package/dist/countries/zm.js +1542 -0
- package/dist/countries/zm.mjs +12 -0
- package/dist/countries/zw.d.mts +1 -0
- package/dist/countries/zw.d.ts +1 -0
- package/dist/countries/zw.js +1542 -0
- package/dist/countries/zw.mjs +12 -0
- package/dist/cv-CtibnUiy.d.mts +477 -0
- package/dist/cv-CtibnUiy.d.ts +477 -0
- package/dist/dj-BQlP5JJi.d.mts +135 -0
- package/dist/dj-BQlP5JJi.d.ts +135 -0
- package/dist/dz-BOMFyjje.d.mts +991 -0
- package/dist/dz-BOMFyjje.d.ts +991 -0
- package/dist/eg-PBCrCZ6T.d.mts +549 -0
- package/dist/eg-PBCrCZ6T.d.ts +549 -0
- package/dist/er-5zA2hEWZ.d.mts +171 -0
- package/dist/er-5zA2hEWZ.d.ts +171 -0
- package/dist/et-BDJKxIIa.d.mts +237 -0
- package/dist/et-BDJKxIIa.d.ts +237 -0
- package/dist/ga-Cc-q2sgL.d.mts +225 -0
- package/dist/ga-Cc-q2sgL.d.ts +225 -0
- package/dist/gh-DmDOd5ct.d.mts +351 -0
- package/dist/gh-DmDOd5ct.d.ts +351 -0
- package/dist/gm-D0b9dn3Y.d.mts +189 -0
- package/dist/gm-D0b9dn3Y.d.ts +189 -0
- package/dist/gn-BJptW1BM.d.mts +207 -0
- package/dist/gn-BJptW1BM.d.ts +207 -0
- package/dist/gq-BeMrVbTH.d.mts +153 -0
- package/dist/gq-BeMrVbTH.d.ts +153 -0
- package/dist/gw-CZCuWEUw.d.mts +225 -0
- package/dist/gw-CZCuWEUw.d.ts +225 -0
- package/dist/index.d.mts +43 -1
- package/dist/index.d.ts +43 -1
- package/dist/index.js +37 -7
- package/dist/index.mjs +88 -1418
- package/dist/ke-BBmGgMWl.d.mts +639 -0
- package/dist/ke-BBmGgMWl.d.ts +639 -0
- package/dist/km-3puK4Scm.d.mts +117 -0
- package/dist/km-3puK4Scm.d.ts +117 -0
- package/dist/lr-BBOmopNl.d.mts +327 -0
- package/dist/lr-BBOmopNl.d.ts +327 -0
- package/dist/ls-CdxRNwoL.d.mts +243 -0
- package/dist/ls-CdxRNwoL.d.ts +243 -0
- package/dist/ly-Bllzpebp.d.mts +315 -0
- package/dist/ly-Bllzpebp.d.ts +315 -0
- package/dist/ma-C4oUSDzO.d.mts +297 -0
- package/dist/ma-C4oUSDzO.d.ts +297 -0
- package/dist/mg-BG0omeiq.d.mts +171 -0
- package/dist/mg-BG0omeiq.d.ts +171 -0
- package/dist/ml-C4YwmTOg.d.mts +405 -0
- package/dist/ml-C4YwmTOg.d.ts +405 -0
- package/dist/mr-S9qYSgqU.d.mts +333 -0
- package/dist/mr-S9qYSgqU.d.ts +333 -0
- package/dist/mu-CfWnCIpO.d.mts +63 -0
- package/dist/mu-CfWnCIpO.d.ts +63 -0
- package/dist/mw-DLdVyy4w.d.mts +459 -0
- package/dist/mw-DLdVyy4w.d.ts +459 -0
- package/dist/mz-8gAPay7-.d.mts +261 -0
- package/dist/mz-8gAPay7-.d.ts +261 -0
- package/dist/na-BBfqqruE.d.mts +315 -0
- package/dist/na-BBfqqruE.d.ts +315 -0
- package/dist/ne-D02x884b.d.mts +207 -0
- package/dist/ne-D02x884b.d.ts +207 -0
- package/dist/ng-ByrcukXA.d.mts +729 -0
- package/dist/ng-ByrcukXA.d.ts +729 -0
- package/dist/rw-C_8vnNs_.d.mts +143 -0
- package/dist/rw-C_8vnNs_.d.ts +143 -0
- package/dist/sc-4eJgrGsN.d.mts +531 -0
- package/dist/sc-4eJgrGsN.d.ts +531 -0
- package/dist/sd-Ba0Glc9g.d.mts +387 -0
- package/dist/sd-Ba0Glc9g.d.ts +387 -0
- package/dist/sl-DARwWL4M.d.mts +171 -0
- package/dist/sl-DARwWL4M.d.ts +171 -0
- package/dist/sn-Cg4GW7Q-.d.mts +315 -0
- package/dist/sn-Cg4GW7Q-.d.ts +315 -0
- package/dist/so-CecZZSsk.d.mts +387 -0
- package/dist/so-CecZZSsk.d.ts +387 -0
- package/dist/ss-CVBT7yYs.d.mts +63 -0
- package/dist/ss-CVBT7yYs.d.ts +63 -0
- package/dist/st-EOo_jDus.d.mts +99 -0
- package/dist/st-EOo_jDus.d.ts +99 -0
- package/dist/sz-LbYDA00P.d.mts +171 -0
- package/dist/sz-LbYDA00P.d.ts +171 -0
- package/dist/td-xhT3S_h2.d.mts +459 -0
- package/dist/td-xhT3S_h2.d.ts +459 -0
- package/dist/tg-TXAqBUFn.d.mts +153 -0
- package/dist/tg-TXAqBUFn.d.ts +153 -0
- package/dist/tn-Dhzs1vda.d.mts +495 -0
- package/dist/tn-Dhzs1vda.d.ts +495 -0
- package/dist/tz-CWrcjdIl.d.mts +441 -0
- package/dist/tz-CWrcjdIl.d.ts +441 -0
- package/dist/ug-CFvVIavv.d.mts +765 -0
- package/dist/ug-CFvVIavv.d.ts +765 -0
- package/dist/za-DO6TQB4z.d.mts +225 -0
- package/dist/za-DO6TQB4z.d.ts +225 -0
- package/dist/zm-DHXyd4jg.d.mts +243 -0
- package/dist/zm-DHXyd4jg.d.ts +243 -0
- package/dist/zw-BdKdGHba.d.mts +243 -0
- package/dist/zw-BdKdGHba.d.ts +243 -0
- package/jest.config.js +11 -0
- package/package.json +291 -4
- package/dist/chunk-4UEJOM6W.mjs +0 -9
package/EXAMPLES.md
ADDED
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
# Usage Examples
|
|
2
|
+
|
|
3
|
+
This file contains practical examples demonstrating how to use the modular imports feature.
|
|
4
|
+
|
|
5
|
+
## Example 1: Single Country Application
|
|
6
|
+
|
|
7
|
+
If your application only needs data for Nigeria:
|
|
8
|
+
|
|
9
|
+
```javascript
|
|
10
|
+
// Before (loads all 54 countries - ~337KB)
|
|
11
|
+
import { getCountry, getCountryStates } from 'african-states-and-tribes';
|
|
12
|
+
|
|
13
|
+
const nigeria = await getCountry('NG');
|
|
14
|
+
const states = await getCountryStates('NG');
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
```javascript
|
|
18
|
+
// After (loads only Nigeria - ~69KB, 79% smaller!)
|
|
19
|
+
import { getCountry, getStates } from 'african-states-and-tribes/countries/ng';
|
|
20
|
+
|
|
21
|
+
const nigeria = await getCountry();
|
|
22
|
+
const states = await getStates();
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**Bundle size savings: ~268KB (79% reduction)**
|
|
26
|
+
|
|
27
|
+
## Example 2: Multi-Country Regional App
|
|
28
|
+
|
|
29
|
+
Building an app for West African countries:
|
|
30
|
+
|
|
31
|
+
```javascript
|
|
32
|
+
// Import only the countries you need
|
|
33
|
+
import * as nigeria from 'african-states-and-tribes/countries/ng';
|
|
34
|
+
import * as ghana from 'african-states-and-tribes/countries/gh';
|
|
35
|
+
import * as senegal from 'african-states-and-tribes/countries/sn';
|
|
36
|
+
import * as ivoryCoast from 'african-states-and-tribes/countries/ci';
|
|
37
|
+
|
|
38
|
+
// Use them
|
|
39
|
+
const countries = await Promise.all([
|
|
40
|
+
nigeria.getCountry(),
|
|
41
|
+
ghana.getCountry(),
|
|
42
|
+
senegal.getCountry(),
|
|
43
|
+
ivoryCoast.getCountry()
|
|
44
|
+
]);
|
|
45
|
+
|
|
46
|
+
console.log(`Loaded ${countries.length} West African countries`);
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**Bundle size: ~150KB vs 337KB (55% smaller)**
|
|
50
|
+
|
|
51
|
+
## Example 3: Country Selector with Lazy Loading
|
|
52
|
+
|
|
53
|
+
Load country data only when selected by the user:
|
|
54
|
+
|
|
55
|
+
```javascript
|
|
56
|
+
async function loadCountryData(countryCode) {
|
|
57
|
+
const lowerCode = countryCode.toLowerCase();
|
|
58
|
+
|
|
59
|
+
try {
|
|
60
|
+
// Dynamically import only when needed
|
|
61
|
+
const countryModule = await import(`african-states-and-tribes/countries/${lowerCode}`);
|
|
62
|
+
const data = await countryModule.getCountryAndStates();
|
|
63
|
+
return data;
|
|
64
|
+
} catch (error) {
|
|
65
|
+
console.error(`Failed to load data for ${countryCode}:`, error);
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Usage in a UI
|
|
71
|
+
selectElement.addEventListener('change', async (e) => {
|
|
72
|
+
const countryCode = e.target.value;
|
|
73
|
+
const data = await loadCountryData(countryCode);
|
|
74
|
+
displayCountryData(data);
|
|
75
|
+
});
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Initial bundle: ~5KB, loads country data on demand**
|
|
79
|
+
|
|
80
|
+
## Example 4: React Component with Code Splitting
|
|
81
|
+
|
|
82
|
+
```jsx
|
|
83
|
+
import { useState, useEffect } from 'react';
|
|
84
|
+
|
|
85
|
+
function CountryDetails({ countryCode }) {
|
|
86
|
+
const [countryData, setCountryData] = useState(null);
|
|
87
|
+
const [loading, setLoading] = useState(true);
|
|
88
|
+
|
|
89
|
+
useEffect(() => {
|
|
90
|
+
async function loadData() {
|
|
91
|
+
setLoading(true);
|
|
92
|
+
try {
|
|
93
|
+
// Dynamic import with code splitting
|
|
94
|
+
const module = await import(
|
|
95
|
+
`african-states-and-tribes/countries/${countryCode.toLowerCase()}`
|
|
96
|
+
);
|
|
97
|
+
const data = await module.getCountryAndStates();
|
|
98
|
+
setCountryData(data);
|
|
99
|
+
} catch (error) {
|
|
100
|
+
console.error('Error loading country data:', error);
|
|
101
|
+
} finally {
|
|
102
|
+
setLoading(false);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
loadData();
|
|
107
|
+
}, [countryCode]);
|
|
108
|
+
|
|
109
|
+
if (loading) return <div>Loading...</div>;
|
|
110
|
+
if (!countryData) return <div>Error loading data</div>;
|
|
111
|
+
|
|
112
|
+
return (
|
|
113
|
+
<div>
|
|
114
|
+
<h1>{countryData.name}</h1>
|
|
115
|
+
<p>Capital: {countryData.capitalCity}</p>
|
|
116
|
+
<p>Currency: {countryData.currency}</p>
|
|
117
|
+
<h2>States/Regions</h2>
|
|
118
|
+
<ul>
|
|
119
|
+
{countryData.states.map(state => (
|
|
120
|
+
<li key={state.stateCode}>{state.name}</li>
|
|
121
|
+
))}
|
|
122
|
+
</ul>
|
|
123
|
+
</div>
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Example 5: Next.js with Server-Side Rendering
|
|
129
|
+
|
|
130
|
+
```javascript
|
|
131
|
+
// pages/countries/[code].js
|
|
132
|
+
import { getCountry, getStates } from 'african-states-and-tribes/countries/ng';
|
|
133
|
+
|
|
134
|
+
export async function getServerSideProps({ params }) {
|
|
135
|
+
// Import the specific country module
|
|
136
|
+
const countryModule = await import(
|
|
137
|
+
`african-states-and-tribes/countries/${params.code}`
|
|
138
|
+
);
|
|
139
|
+
|
|
140
|
+
const country = await countryModule.getCountry();
|
|
141
|
+
const states = await countryModule.getStates();
|
|
142
|
+
|
|
143
|
+
return {
|
|
144
|
+
props: {
|
|
145
|
+
country,
|
|
146
|
+
states
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
export default function CountryPage({ country, states }) {
|
|
152
|
+
return (
|
|
153
|
+
<div>
|
|
154
|
+
<h1>{country.name}</h1>
|
|
155
|
+
<h2>States/Regions: {states.length}</h2>
|
|
156
|
+
{/* ... */}
|
|
157
|
+
</div>
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Example 6: Using Named Exports
|
|
163
|
+
|
|
164
|
+
```javascript
|
|
165
|
+
// Import multiple countries via the countries index
|
|
166
|
+
import {
|
|
167
|
+
nigeria,
|
|
168
|
+
kenya,
|
|
169
|
+
southAfrica
|
|
170
|
+
} from 'african-states-and-tribes/countries';
|
|
171
|
+
|
|
172
|
+
// Use them
|
|
173
|
+
const [ng, ke, za] = await Promise.all([
|
|
174
|
+
nigeria.getCountryAndStates(),
|
|
175
|
+
kenya.getCountryAndStates(),
|
|
176
|
+
southAfrica.getCountryAndStates()
|
|
177
|
+
]);
|
|
178
|
+
|
|
179
|
+
console.log(`${ng.name}: ${ng.states.length} states`);
|
|
180
|
+
console.log(`${ke.name}: ${ke.states.length} counties`);
|
|
181
|
+
console.log(`${za.name}: ${za.states.length} provinces`);
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
## Example 7: TypeScript with Type Safety
|
|
185
|
+
|
|
186
|
+
```typescript
|
|
187
|
+
import {
|
|
188
|
+
getCountry,
|
|
189
|
+
getStates,
|
|
190
|
+
getCountryAndStates
|
|
191
|
+
} from 'african-states-and-tribes/countries/ng';
|
|
192
|
+
|
|
193
|
+
// Types are automatically inferred
|
|
194
|
+
const country = await getCountry();
|
|
195
|
+
// Type: { name: string; countryCode: string; capitalCity: string; ... }
|
|
196
|
+
|
|
197
|
+
const states = await getStates();
|
|
198
|
+
// Type: Array<{ name: string; stateCode: string; tribes: string[]; ... }>
|
|
199
|
+
|
|
200
|
+
const data = await getCountryAndStates();
|
|
201
|
+
// Type: { ..., states: Array<...> }
|
|
202
|
+
|
|
203
|
+
// Use with type annotations
|
|
204
|
+
function displayCountry(data: Awaited<ReturnType<typeof getCountry>>) {
|
|
205
|
+
console.log(`${data.name} - ${data.capitalCity}`);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
displayCountry(country);
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
## Example 8: Migration Path
|
|
212
|
+
|
|
213
|
+
Gradually migrate from default imports to modular imports:
|
|
214
|
+
|
|
215
|
+
```javascript
|
|
216
|
+
// Phase 1: Current code (no changes needed)
|
|
217
|
+
import { getCountry } from 'african-states-and-tribes';
|
|
218
|
+
const nigeria = await getCountry('NG');
|
|
219
|
+
|
|
220
|
+
// Phase 2: Identify which countries you actually use
|
|
221
|
+
// Update code to use modular imports for those countries
|
|
222
|
+
import { getCountry as getNigeria } from 'african-states-and-tribes/countries/ng';
|
|
223
|
+
import { getCountry as getKenya } from 'african-states-and-tribes/countries/ke';
|
|
224
|
+
|
|
225
|
+
const nigeria = await getNigeria();
|
|
226
|
+
const kenya = await getKenya();
|
|
227
|
+
|
|
228
|
+
// Phase 3: Use modular imports throughout
|
|
229
|
+
import * as ng from 'african-states-and-tribes/countries/ng';
|
|
230
|
+
import * as ke from 'african-states-and-tribes/countries/ke';
|
|
231
|
+
|
|
232
|
+
const nigeriaData = await ng.getCountryAndStates();
|
|
233
|
+
const kenyaData = await ke.getCountryAndStates();
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## Bundle Size Comparison
|
|
237
|
+
|
|
238
|
+
Real-world measurements from the library:
|
|
239
|
+
|
|
240
|
+
| Import Method | Bundle Size | Savings |
|
|
241
|
+
|--------------|-------------|---------|
|
|
242
|
+
| Default (all countries) | 337 KB | - |
|
|
243
|
+
| Single country (modular) | ~44 KB avg | ~79% |
|
|
244
|
+
| 3 countries (modular) | ~132 KB | ~61% |
|
|
245
|
+
| 5 countries (modular) | ~220 KB | ~35% |
|
|
246
|
+
|
|
247
|
+
## Best Practices
|
|
248
|
+
|
|
249
|
+
1. **Use modular imports when possible**: If you know which countries your app needs, always use modular imports to reduce bundle size.
|
|
250
|
+
|
|
251
|
+
2. **Lazy load when appropriate**: For user-selectable countries, use dynamic imports to load data only when needed.
|
|
252
|
+
|
|
253
|
+
3. **Keep backward compatibility**: The default imports still work perfectly for tools, scripts, or apps that need all countries.
|
|
254
|
+
|
|
255
|
+
4. **Consider your use case**:
|
|
256
|
+
- Single country app? → Use modular import
|
|
257
|
+
- Multiple known countries? → Use multiple modular imports
|
|
258
|
+
- User-selected country? → Use dynamic imports
|
|
259
|
+
- Need all countries? → Use default imports
|
|
260
|
+
|
|
261
|
+
5. **Monitor your bundle**: Use tools like webpack-bundle-analyzer to verify your actual bundle size after implementing modular imports.
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# Modular Imports Guide
|
|
2
|
+
|
|
3
|
+
This guide explains how to use modular imports to optimize your bundle size.
|
|
4
|
+
|
|
5
|
+
## Why Modular Imports?
|
|
6
|
+
|
|
7
|
+
By default, importing from `african-states-and-tribes` loads data for all 54 African countries, which increases your bundle size. With modular imports, you can import only the specific countries you need, significantly reducing your application's bundle size.
|
|
8
|
+
|
|
9
|
+
## Bundle Size Comparison
|
|
10
|
+
|
|
11
|
+
- **Default import (all countries)**: ~832KB of data files
|
|
12
|
+
- **Modular import (single country)**: ~5-30KB per country (varies by country)
|
|
13
|
+
|
|
14
|
+
**Example savings:** If you only need Nigeria data, you save ~800KB+ of unnecessary data!
|
|
15
|
+
|
|
16
|
+
## How to Use Modular Imports
|
|
17
|
+
|
|
18
|
+
### Import a Specific Country
|
|
19
|
+
|
|
20
|
+
```javascript
|
|
21
|
+
// Import only Nigeria
|
|
22
|
+
import { getCountry, getStates, getCountryAndStates } from 'african-states-and-tribes/countries/ng';
|
|
23
|
+
|
|
24
|
+
// Get country metadata
|
|
25
|
+
const nigeria = await getCountry();
|
|
26
|
+
|
|
27
|
+
// Get states/tribes data
|
|
28
|
+
const states = await getStates();
|
|
29
|
+
|
|
30
|
+
// Get everything together
|
|
31
|
+
const nigeriaWithStates = await getCountryAndStates();
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Import Multiple Countries
|
|
35
|
+
|
|
36
|
+
```javascript
|
|
37
|
+
// Import multiple specific countries
|
|
38
|
+
import * as nigeria from 'african-states-and-tribes/countries/ng';
|
|
39
|
+
import * as kenya from 'african-states-and-tribes/countries/ke';
|
|
40
|
+
import * as ghana from 'african-states-and-tribes/countries/gh';
|
|
41
|
+
|
|
42
|
+
const nigerianStates = await nigeria.getStates();
|
|
43
|
+
const kenyanStates = await kenya.getStates();
|
|
44
|
+
const ghanaianStates = await ghana.getStates();
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Import All Countries via Named Exports
|
|
48
|
+
|
|
49
|
+
If you want to use multiple countries but still want tree-shaking support:
|
|
50
|
+
|
|
51
|
+
```javascript
|
|
52
|
+
import { nigeria, kenya, ghana } from 'african-states-and-tribes/countries';
|
|
53
|
+
|
|
54
|
+
const nigeriaData = await nigeria.getCountry();
|
|
55
|
+
const kenyaData = await kenya.getCountry();
|
|
56
|
+
const ghanaData = await ghana.getCountry();
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Available Country Codes
|
|
60
|
+
|
|
61
|
+
Each country is available as a lowercase 2-letter ISO code:
|
|
62
|
+
|
|
63
|
+
| Code | Country | Code | Country | Code | Country |
|
|
64
|
+
|------|---------|------|---------|------|---------|
|
|
65
|
+
| `ao` | Angola | `na` | Namibia | `ss` | South Sudan |
|
|
66
|
+
| `bf` | Burkina Faso | `ne` | Niger | `st` | Sao Tome and Principe |
|
|
67
|
+
| `bi` | Burundi | `ng` | Nigeria | `sz` | Eswatini |
|
|
68
|
+
| `bj` | Benin | `rw` | Rwanda | `td` | Chad |
|
|
69
|
+
| `bw` | Botswana | `sc` | Seychelles | `tg` | Togo |
|
|
70
|
+
| `cd` | DR Congo | `sd` | Sudan | `tn` | Tunisia |
|
|
71
|
+
| `cf` | Central African Republic | `sl` | Sierra Leone | `tz` | Tanzania |
|
|
72
|
+
| `cg` | Republic of Congo | `sn` | Senegal | `ug` | Uganda |
|
|
73
|
+
| `ci` | Ivory Coast | `so` | Somalia | `za` | South Africa |
|
|
74
|
+
| `cm` | Cameroon | `zm` | Zambia | | |
|
|
75
|
+
| `cv` | Cape Verde | `zw` | Zimbabwe | | |
|
|
76
|
+
| `dj` | Djibouti | `eg` | Egypt | | |
|
|
77
|
+
| `dz` | Algeria | `er` | Eritrea | | |
|
|
78
|
+
| `et` | Ethiopia | `ga` | Gabon | | |
|
|
79
|
+
| `gh` | Ghana | `gm` | Gambia | | |
|
|
80
|
+
| `gn` | Guinea | `gq` | Equatorial Guinea | | |
|
|
81
|
+
| `gw` | Guinea-Bissau | `ke` | Kenya | | |
|
|
82
|
+
| `km` | Comoros | `lr` | Liberia | | |
|
|
83
|
+
| `ls` | Lesotho | `ly` | Libya | | |
|
|
84
|
+
| `ma` | Morocco | `mg` | Madagascar | | |
|
|
85
|
+
| `ml` | Mali | `mr` | Mauritania | | |
|
|
86
|
+
| `mu` | Mauritius | `mw` | Malawi | | |
|
|
87
|
+
| `mz` | Mozambique | | | | |
|
|
88
|
+
|
|
89
|
+
## API Reference
|
|
90
|
+
|
|
91
|
+
Each country module exports three functions:
|
|
92
|
+
|
|
93
|
+
### `getCountry()`
|
|
94
|
+
|
|
95
|
+
Returns the country's metadata (name, capital, currency, etc.) without states/tribes data.
|
|
96
|
+
|
|
97
|
+
```javascript
|
|
98
|
+
const country = await getCountry();
|
|
99
|
+
// Returns: { name, countryCode, capitalCity, currency, ... }
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### `getStates()`
|
|
103
|
+
|
|
104
|
+
Returns only the states/tribes data for the country.
|
|
105
|
+
|
|
106
|
+
```javascript
|
|
107
|
+
const states = await getStates();
|
|
108
|
+
// Returns: [{ name, stateCode, tribes, subdivisions, ... }, ...]
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### `getCountryAndStates()`
|
|
112
|
+
|
|
113
|
+
Returns the country metadata with embedded states/tribes data.
|
|
114
|
+
|
|
115
|
+
```javascript
|
|
116
|
+
const countryWithStates = await getCountryAndStates();
|
|
117
|
+
// Returns: { name, countryCode, ..., states: [...] }
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## TypeScript Support
|
|
121
|
+
|
|
122
|
+
All modular imports include full TypeScript type definitions:
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
import { getCountry, getStates, getCountryAndStates } from 'african-states-and-tribes/countries/ng';
|
|
126
|
+
|
|
127
|
+
// Types are automatically inferred
|
|
128
|
+
const country = await getCountry(); // Type: Country
|
|
129
|
+
const states = await getStates(); // Type: State[]
|
|
130
|
+
const data = await getCountryAndStates(); // Type: CountryWithStates
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Migration from Default Imports
|
|
134
|
+
|
|
135
|
+
If you're currently using the default import and want to migrate to modular imports:
|
|
136
|
+
|
|
137
|
+
### Before (Default Import)
|
|
138
|
+
|
|
139
|
+
```javascript
|
|
140
|
+
import { getCountry, getCountryStates } from 'african-states-and-tribes';
|
|
141
|
+
|
|
142
|
+
const nigeria = await getCountry('NG');
|
|
143
|
+
const states = await getCountryStates('NG');
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### After (Modular Import)
|
|
147
|
+
|
|
148
|
+
```javascript
|
|
149
|
+
import { getCountry, getStates } from 'african-states-and-tribes/countries/ng';
|
|
150
|
+
|
|
151
|
+
const nigeria = await getCountry(); // No need to pass country code
|
|
152
|
+
const states = await getStates(); // No need to pass country code
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Backward Compatibility
|
|
156
|
+
|
|
157
|
+
The default imports are still fully supported and work exactly as before. You can gradually migrate to modular imports without breaking existing code.
|
|
158
|
+
|
|
159
|
+
```javascript
|
|
160
|
+
// Still works perfectly
|
|
161
|
+
import { getCountries, getCountry, getCountryStates } from 'african-states-and-tribes';
|
|
162
|
+
```
|
package/README.md
CHANGED
|
@@ -21,12 +21,53 @@ The library includes country-level metadata (such as name, capital, currency, ph
|
|
|
21
21
|
|
|
22
22
|
✅ Simple, modular, and TypeScript-friendly
|
|
23
23
|
|
|
24
|
+
✅ **NEW:** Modular imports — import only specific countries to reduce bundle size
|
|
25
|
+
|
|
24
26
|
|
|
25
27
|
# Install
|
|
26
28
|
`npm i african-states-and-tribes`
|
|
27
29
|
|
|
30
|
+
# 📚 Documentation
|
|
31
|
+
|
|
32
|
+
- [Modular Imports Guide](./MODULAR_IMPORTS.md) - Complete guide on using modular imports to optimize bundle size
|
|
33
|
+
- [Usage Examples](./EXAMPLES.md) - Real-world examples and use cases
|
|
34
|
+
|
|
28
35
|
# Usage
|
|
29
36
|
|
|
37
|
+
## 🎯 Modular Imports (Recommended for Bundle Size Optimization)
|
|
38
|
+
|
|
39
|
+
Import only the countries you need to keep your bundle size minimal:
|
|
40
|
+
|
|
41
|
+
```js
|
|
42
|
+
// Import specific country
|
|
43
|
+
import { getCountry, getStates, getCountryAndStates } from 'african-states-and-tribes/countries/ng';
|
|
44
|
+
|
|
45
|
+
// Get Nigeria data
|
|
46
|
+
const nigeria = await getCountry();
|
|
47
|
+
console.log(nigeria); // { name: 'Nigeria', countryCode: 'NG', ... }
|
|
48
|
+
|
|
49
|
+
// Get Nigeria states/tribes
|
|
50
|
+
const states = await getStates();
|
|
51
|
+
console.log(states); // [{ name: 'Abia', tribes: ['Igbo'], ... }, ...]
|
|
52
|
+
|
|
53
|
+
// Get Nigeria with states
|
|
54
|
+
const nigeriaWithStates = await getCountryAndStates();
|
|
55
|
+
console.log(nigeriaWithStates); // { name: 'Nigeria', states: [...], ... }
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Bundle Size Benefits:**
|
|
59
|
+
- Default import (all countries): **~337KB**
|
|
60
|
+
- Single country (modular): **~44KB average** (87% smaller!)
|
|
61
|
+
- Multiple countries scale linearly
|
|
62
|
+
|
|
63
|
+
See [EXAMPLES.md](./EXAMPLES.md) for more use cases including React, Next.js, and lazy loading.
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
**Available country codes for modular imports:**
|
|
67
|
+
`ao`, `bf`, `bi`, `bj`, `bw`, `cd`, `cf`, `cg`, `ci`, `cm`, `cv`, `dj`, `dz`, `eg`, `er`, `et`, `ga`, `gh`, `gm`, `gn`, `gq`, `gw`, `ke`, `km`, `lr`, `ls`, `ly`, `ma`, `mg`, `ml`, `mr`, `mu`, `mw`, `mz`, `na`, `ne`, `ng`, `rw`, `sc`, `sd`, `sl`, `sn`, `so`, `ss`, `st`, `sz`, `td`, `tg`, `tn`, `tz`, `ug`, `za`, `zm`, `zw`
|
|
68
|
+
|
|
69
|
+
## 📦 Default Usage (All Countries)
|
|
70
|
+
|
|
30
71
|
- ES6 Module usage
|
|
31
72
|
|
|
32
73
|
```js
|
|
@@ -291,6 +332,47 @@ The library includes country-level metadata (such as name, capital, currency, ph
|
|
|
291
332
|
]
|
|
292
333
|
```
|
|
293
334
|
|
|
335
|
+
- **Get a Tribe Region**
|
|
336
|
+
|
|
337
|
+
```js
|
|
338
|
+
import { getTribeRegion } from 'african-states-and-tribes'
|
|
339
|
+
|
|
340
|
+
getTribeRegion("Yoruba").then(regions =>{
|
|
341
|
+
console.log(regions)
|
|
342
|
+
})
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
Output:
|
|
346
|
+
|
|
347
|
+
```
|
|
348
|
+
[
|
|
349
|
+
{
|
|
350
|
+
capitalCity: 'Kandi',
|
|
351
|
+
country: 'Benin',
|
|
352
|
+
countryCode: 'BJ',
|
|
353
|
+
geoPoliticalZone: '',
|
|
354
|
+
location: 'North East',
|
|
355
|
+
name: 'Alibori',
|
|
356
|
+
stateCode: '',
|
|
357
|
+
subdivisions: [],
|
|
358
|
+
tribes: ['Bariba', 'Boko', 'Dendi (Songhai)', 'Fulani', 'Gurma', 'Kyenga', 'Mokole Yoruba'],
|
|
359
|
+
type: 'department'
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
capitalCity: 'Allada',
|
|
363
|
+
country: 'Benin',
|
|
364
|
+
countryCode: 'BJ',
|
|
365
|
+
geoPoliticalZone: '',
|
|
366
|
+
location: 'South Centre',
|
|
367
|
+
name: 'Atlantique',
|
|
368
|
+
stateCode: '',
|
|
369
|
+
subdivisions: [],
|
|
370
|
+
tribes: [ 'Adja (Aja)', 'Ayizo', 'Tofin', 'Fon (Dahomey)', 'Yoruba' ],
|
|
371
|
+
type: 'department'
|
|
372
|
+
},
|
|
373
|
+
...
|
|
374
|
+
]
|
|
375
|
+
```
|
|
294
376
|
|
|
295
377
|
Notes
|
|
296
378
|
- All functions are asynchronous – you must use await or .then()
|
|
@@ -326,4 +408,4 @@ The library includes country-level metadata (such as name, capital, currency, ph
|
|
|
326
408
|
- https://www.vanguardngr.com/2017/05/full-list-of-all-371-tribes-in-nigeria-states-where-they-originate/
|
|
327
409
|
- https://euaa.europa.eu/
|
|
328
410
|
- https://www.citypopulation.de/
|
|
329
|
-
- https://www.odsef.fss.ulaval.ca/sites/odsef.fss.ulaval.ca/files/odsef_assani_web.pdf
|
|
411
|
+
- https://www.odsef.fss.ulaval.ca/sites/odsef.fss.ulaval.ca/files/odsef_assani_web.pdf
|