flag-resizer 0.0.1 → 0.0.3
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/ATTRIBUTION.txt +27 -2
- package/CHANGELOG.md +19 -1
- package/LICENSE-GRAPHICS +40 -2
- package/README.md +80 -23
- package/dist/generator.js +260 -2
- package/dist/generator.js.map +1 -1
- package/dist/index.d.ts +258 -0
- package/dist/index.d.ts.map +1 -1
- package/flags/ar-a.svg +75 -0
- package/flags/ar-b.svg +164 -0
- package/flags/ar-c.svg +653 -0
- package/flags/ar-d.svg +862 -0
- package/flags/ar-e.svg +35 -0
- package/flags/ar-f.svg +67 -0
- package/flags/ar-g.svg +74 -0
- package/flags/ar-h.svg +83 -0
- package/flags/ar-j.svg +228 -0
- package/flags/ar-k.svg +242 -0
- package/flags/ar-l.svg +1232 -0
- package/flags/ar-m.svg +810 -0
- package/flags/ar-n.svg +14 -0
- package/flags/ar-p.svg +257 -0
- package/flags/ar-q.svg +70 -0
- package/flags/ar-r.svg +26 -0
- package/flags/ar-s.svg +173 -0
- package/flags/ar-t.svg +24 -0
- package/flags/ar-u.svg +70 -0
- package/flags/ar-v.svg +21 -0
- package/flags/ar-w.svg +232 -0
- package/flags/ar-x.svg +22 -0
- package/flags/ar-y.svg +302 -0
- package/flags/ar-z.svg +173 -0
- package/flags/at-1.svg +214 -0
- package/flags/at-2.svg +495 -0
- package/flags/at-3.svg +189 -0
- package/flags/at-4.svg +109 -0
- package/flags/at-5.svg +69 -0
- package/flags/at-6.svg +12 -0
- package/flags/at-7.svg +320 -0
- package/flags/at-8.svg +217 -0
- package/flags/at-9.svg +92 -0
- package/flags/br-ac.svg +14 -0
- package/flags/br-al.svg +413 -0
- package/flags/br-am.svg +41 -0
- package/flags/br-ap.svg +22 -0
- package/flags/br-ba.svg +16 -0
- package/flags/br-ce.svg +88 -0
- package/flags/br-df.svg +15 -0
- package/flags/br-es.svg +23 -0
- package/flags/br-go.svg +17 -0
- package/flags/br-ma.svg +31 -0
- package/flags/br-mg.svg +29 -0
- package/flags/br-ms.svg +25 -0
- package/flags/br-mt.svg +24 -0
- package/flags/br-pa.svg +38 -0
- package/flags/br-pb.svg +15 -0
- package/flags/br-pe.svg +20 -0
- package/flags/br-pi.svg +36 -0
- package/flags/br-pr.svg +37 -0
- package/flags/br-rj.svg +357 -0
- package/flags/br-rn.svg +12 -0
- package/flags/br-ro.svg +17 -0
- package/flags/br-rr.svg +19 -0
- package/flags/br-rs.svg +103 -0
- package/flags/br-sc.svg +369 -0
- package/flags/br-se.svg +15 -0
- package/flags/br-sp.svg +36 -0
- package/flags/br-to.svg +19 -0
- package/flags/ch-ag.svg +13 -0
- package/flags/ch-ai.svg +13 -0
- package/flags/ch-ar.svg +13 -0
- package/flags/ch-be.svg +31 -0
- package/flags/ch-bl.svg +46 -0
- package/flags/ch-bs.svg +13 -0
- package/flags/ch-fr.svg +13 -0
- package/flags/ch-ge.svg +181 -0
- package/flags/ch-gl.svg +13 -0
- package/flags/ch-gr.svg +14 -0
- package/flags/ch-ju.svg +39 -0
- package/flags/ch-lu.svg +13 -0
- package/flags/ch-ne.svg +15 -0
- package/flags/ch-nw.svg +29 -0
- package/flags/ch-ow.svg +14 -0
- package/flags/ch-sg.svg +18 -0
- package/flags/ch-sh.svg +45 -0
- package/flags/ch-so.svg +13 -0
- package/flags/ch-sz.svg +13 -0
- package/flags/ch-tg.svg +47 -0
- package/flags/ch-ti.svg +13 -0
- package/flags/ch-ur.svg +176 -0
- package/flags/ch-vd.svg +43 -0
- package/flags/ch-vs.svg +45 -0
- package/flags/ch-zg.svg +15 -0
- package/flags/ch-zh.svg +13 -0
- package/flags/co-ama.svg +25 -0
- package/flags/co-ant.svg +16 -0
- package/flags/co-ara.svg +13 -0
- package/flags/co-atl.svg +13 -0
- package/flags/co-bol.svg +14 -0
- package/flags/co-boy.svg +39 -0
- package/flags/co-cal.svg +13 -0
- package/flags/co-caq.svg +39 -0
- package/flags/co-cas.svg +26 -0
- package/flags/co-cau.svg +13 -0
- package/flags/co-ces.svg +13 -0
- package/flags/co-cho.svg +14 -0
- package/flags/co-cor.svg +14 -0
- package/flags/co-cun.svg +287 -0
- package/flags/co-dc.svg +27 -0
- package/flags/co-gua.svg +14 -0
- package/flags/co-guv.svg +367 -0
- package/flags/co-hui.svg +22 -0
- package/flags/co-lag.svg +13 -0
- package/flags/co-mag.svg +34 -0
- package/flags/co-met.svg +13 -0
- package/flags/co-nar.svg +13 -0
- package/flags/co-nsa.svg +29 -0
- package/flags/co-put.svg +14 -0
- package/flags/co-qui.svg +14 -0
- package/flags/co-ris.svg +38 -0
- package/flags/co-san.svg +103 -0
- package/flags/co-sap.svg +13 -0
- package/flags/co-suc.svg +648 -0
- package/flags/co-tol.svg +13 -0
- package/flags/co-vac.svg +14 -0
- package/flags/co-vau.svg +14 -0
- package/flags/co-vid.svg +13 -0
- package/flags/gr-69.svg +59 -0
- package/flags/gr-a.svg +18 -0
- package/flags/gr-b.svg +18 -0
- package/flags/gr-c.svg +18 -0
- package/flags/it-21.svg +123 -0
- package/flags/it-23.svg +13 -0
- package/flags/it-25.svg +13 -0
- package/flags/it-32.svg +58 -0
- package/flags/it-34.svg +406 -0
- package/flags/it-36.svg +343 -0
- package/flags/it-42.svg +141 -0
- package/flags/it-45.svg +213 -0
- package/flags/it-52.svg +913 -0
- package/flags/it-55.svg +71 -0
- package/flags/it-57.svg +128 -0
- package/flags/it-62.svg +12 -0
- package/flags/it-65.svg +20 -0
- package/flags/it-67.svg +160 -0
- package/flags/it-72.svg +86 -0
- package/flags/it-75.svg +16 -0
- package/flags/it-77.svg +93 -0
- package/flags/it-78.svg +68 -0
- package/flags/it-82.svg +132 -0
- package/flags/it-88.svg +285 -0
- package/flags/jp-01.svg +26 -0
- package/flags/jp-02.svg +60 -0
- package/flags/jp-03.svg +15 -0
- package/flags/jp-04.svg +14 -0
- package/flags/jp-05.svg +13 -0
- package/flags/jp-06.svg +13 -0
- package/flags/jp-07.svg +17 -0
- package/flags/jp-08.svg +13 -0
- package/flags/jp-09.svg +17 -0
- package/flags/jp-10.svg +30 -0
- package/flags/jp-11.svg +20 -0
- package/flags/jp-12.svg +14 -0
- package/flags/jp-13.svg +21 -0
- package/flags/jp-14.svg +13 -0
- package/flags/jp-15.svg +13 -0
- package/flags/jp-16.svg +30 -0
- package/flags/jp-17.svg +36 -0
- package/flags/jp-18.svg +13 -0
- package/flags/jp-19.svg +22 -0
- package/flags/jp-20.svg +14 -0
- package/flags/jp-21.svg +40 -0
- package/flags/jp-22.svg +13 -0
- package/flags/jp-23.svg +53 -0
- package/flags/jp-24.svg +14 -0
- package/flags/jp-25.svg +13 -0
- package/flags/jp-26.svg +33 -0
- package/flags/jp-27.svg +20 -0
- package/flags/jp-28.svg +12 -0
- package/flags/jp-29.svg +17 -0
- package/flags/jp-30.svg +13 -0
- package/flags/jp-31.svg +13 -0
- package/flags/jp-32.svg +17 -0
- package/flags/jp-33.svg +23 -0
- package/flags/jp-34.svg +13 -0
- package/flags/jp-35.svg +13 -0
- package/flags/jp-36.svg +20 -0
- package/flags/jp-37.svg +19 -0
- package/flags/jp-38.svg +12 -0
- package/flags/jp-39.svg +13 -0
- package/flags/jp-40.svg +28 -0
- package/flags/jp-41.svg +22 -0
- package/flags/jp-42.svg +14 -0
- package/flags/jp-43.svg +13 -0
- package/flags/jp-44.svg +19 -0
- package/flags/jp-45.svg +12 -0
- package/flags/jp-46.svg +16 -0
- package/flags/jp-47.svg +15 -0
- package/flags/mx-agu.svg +942 -0
- package/flags/mx-bcn.svg +265 -0
- package/flags/mx-bcs.svg +200 -0
- package/flags/mx-cam.svg +3954 -0
- package/flags/mx-chh.svg +154 -0
- package/flags/mx-chp.svg +12 -0
- package/flags/mx-cmx.svg +12 -0
- package/flags/mx-coa.svg +1013 -0
- package/flags/mx-col.svg +1073 -0
- package/flags/mx-dur.svg +1022 -0
- package/flags/mx-gro.svg +135 -0
- package/flags/mx-gua.svg +1579 -0
- package/flags/mx-hid.svg +1442 -0
- package/flags/mx-jal.svg +65 -0
- package/flags/mx-mex.svg +560 -0
- package/flags/mx-mic.svg +3815 -0
- package/flags/mx-mor.svg +136 -0
- package/flags/mx-nay.svg +2206 -0
- package/flags/mx-nle.svg +133 -0
- package/flags/mx-oax.svg +3301 -0
- package/flags/mx-pue.svg +469 -0
- package/flags/mx-que.svg +1323 -0
- package/flags/mx-roo.svg +368 -0
- package/flags/mx-sin.svg +12 -0
- package/flags/mx-slp.svg +244 -0
- package/flags/mx-son.svg +467 -0
- package/flags/mx-tab.svg +275 -0
- package/flags/mx-tam.svg +236 -0
- package/flags/mx-tla.svg +634 -0
- package/flags/mx-ver.svg +561 -0
- package/flags/mx-yuc.svg +21 -0
- package/flags/mx-zac.svg +1285 -0
- package/flags/pl-02.svg +70 -0
- package/flags/pl-04.svg +14 -0
- package/flags/pl-06.svg +277 -0
- package/flags/pl-08.svg +44 -0
- package/flags/pl-10.svg +12 -0
- package/flags/pl-12.svg +70 -0
- package/flags/pl-14.svg +33 -0
- package/flags/pl-16.svg +27 -0
- package/flags/pl-18.svg +36 -0
- package/flags/pl-20.svg +15 -0
- package/flags/pl-22.svg +145 -0
- package/flags/pl-24.svg +34 -0
- package/flags/pl-26.svg +236 -0
- package/flags/pl-28.svg +88 -0
- package/flags/pl-30.svg +159 -0
- package/flags/pl-32.svg +109 -0
- package/flags/pt-01.svg +8 -0
- package/flags/pt-02.svg +10291 -0
- package/flags/pt-03.svg +8 -0
- package/flags/pt-04.svg +8 -0
- package/flags/pt-05.svg +8 -0
- package/flags/pt-06.svg +8 -0
- package/flags/pt-07.svg +8 -0
- package/flags/pt-08.svg +8 -0
- package/flags/pt-09.svg +8 -0
- package/flags/pt-10.svg +8 -0
- package/flags/pt-11.svg +1233 -0
- package/flags/pt-12.svg +1 -0
- package/flags/pt-13.svg +8 -0
- package/flags/pt-14.svg +8 -0
- package/flags/pt-15.svg +8 -0
- package/flags/pt-16.svg +8 -0
- package/flags/pt-17.svg +8 -0
- package/flags/pt-18.svg +8 -0
- package/flags/pt-20.svg +239 -0
- package/flags/pt-30.svg +16 -0
- package/package.json +1 -1
package/dist/generator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","names":[],"sources":["../src/data/flags.ts","../src/errors.ts","../src/config.ts","../src/generated-typescript.ts","../src/generator.ts"],"sourcesContent":["// Display names follow FlagCDN where available and the sourced ISO 3166-2\n// manifests for additional subdivisions.\nexport const FLAGS = {\n ac: 'Ascension Island',\n ad: 'Andorra',\n ae: 'United Arab Emirates',\n af: 'Afghanistan',\n ag: 'Antigua and Barbuda',\n ai: 'Anguilla',\n al: 'Albania',\n am: 'Armenia',\n ao: 'Angola',\n aq: 'Antarctica',\n ar: 'Argentina',\n as: 'American Samoa',\n at: 'Austria',\n au: 'Australia',\n 'au-act': 'Australian Capital Territory',\n 'au-nsw': 'New South Wales',\n 'au-nt': 'Northern Territory',\n 'au-qld': 'Queensland',\n 'au-sa': 'South Australia',\n 'au-tas': 'Tasmania',\n 'au-vic': 'Victoria',\n 'au-wa': 'Western Australia',\n aw: 'Aruba',\n ax: 'Åland Islands',\n az: 'Azerbaijan',\n ba: 'Bosnia and Herzegovina',\n bb: 'Barbados',\n bd: 'Bangladesh',\n be: 'Belgium',\n bf: 'Burkina Faso',\n bg: 'Bulgaria',\n bh: 'Bahrain',\n bi: 'Burundi',\n bj: 'Benin',\n bl: 'Saint Barthélemy',\n bm: 'Bermuda',\n bn: 'Brunei',\n bo: 'Bolivia',\n bq: 'Caribbean Netherlands',\n br: 'Brazil',\n bs: 'Bahamas',\n bt: 'Bhutan',\n bv: 'Bouvet Island',\n bw: 'Botswana',\n by: 'Belarus',\n bz: 'Belize',\n ca: 'Canada',\n 'ca-ab': 'Alberta',\n 'ca-bc': 'British Columbia',\n 'ca-mb': 'Manitoba',\n 'ca-nb': 'New Brunswick',\n 'ca-nl': 'Newfoundland and Labrador',\n 'ca-ns': 'Nova Scotia',\n 'ca-nt': 'Northwest Territories',\n 'ca-nu': 'Nunavut',\n 'ca-on': 'Ontario',\n 'ca-pe': 'Prince Edward Island',\n 'ca-qc': 'Quebec',\n 'ca-sk': 'Saskatchewan',\n 'ca-yt': 'Yukon',\n cc: 'Cocos (Keeling) Islands',\n cd: 'DR Congo',\n cf: 'Central African Republic',\n cg: 'Republic of the Congo',\n ch: 'Switzerland',\n ci: \"Côte d'Ivoire (Ivory Coast)\",\n ck: 'Cook Islands',\n cl: 'Chile',\n cm: 'Cameroon',\n cn: 'China',\n co: 'Colombia',\n cp: 'Clipperton Island',\n cq: 'Sark',\n cr: 'Costa Rica',\n cu: 'Cuba',\n cv: 'Cape Verde',\n cw: 'Curaçao',\n cx: 'Christmas Island',\n cy: 'Cyprus',\n cz: 'Czechia',\n de: 'Germany',\n 'de-bb': 'Brandenburg',\n 'de-be': 'Berlin',\n 'de-bw': 'Baden-Württemberg',\n 'de-by': 'Bavaria',\n 'de-hb': 'Bremen',\n 'de-he': 'Hesse',\n 'de-hh': 'Hamburg',\n 'de-mv': 'Mecklenburg-Western Pomerania',\n 'de-ni': 'Lower Saxony',\n 'de-nw': 'North Rhine-Westphalia',\n 'de-rp': 'Rhineland-Palatinate',\n 'de-sh': 'Schleswig-Holstein',\n 'de-sl': 'Saarland',\n 'de-sn': 'Saxony',\n 'de-st': 'Saxony-Anhalt',\n 'de-th': 'Thuringia',\n dg: 'Diego Garcia',\n dj: 'Djibouti',\n dk: 'Denmark',\n dm: 'Dominica',\n do: 'Dominican Republic',\n dz: 'Algeria',\n ea: 'Ceuta & Melilla',\n ec: 'Ecuador',\n ee: 'Estonia',\n eg: 'Egypt',\n eh: 'Western Sahara',\n er: 'Eritrea',\n es: 'Spain',\n 'es-an': 'Andalusia',\n 'es-ar': 'Aragon',\n 'es-as': 'Asturias',\n 'es-cb': 'Cantabria',\n 'es-ce': 'Ceuta',\n 'es-cl': 'Castile and León',\n 'es-cm': 'Castilla-La Mancha',\n 'es-cn': 'Canary Islands',\n 'es-ct': 'Catalonia',\n 'es-ex': 'Extremadura',\n 'es-ga': 'Galicia',\n 'es-ib': 'Balearic Islands',\n 'es-mc': 'Region of Murcia',\n 'es-md': 'Community of Madrid',\n 'es-ml': 'Melilla',\n 'es-nc': 'Navarre',\n 'es-pv': 'Basque Country',\n 'es-ri': 'La Rioja',\n 'es-vc': 'Valencian Community',\n et: 'Ethiopia',\n eu: 'European Union',\n fi: 'Finland',\n fj: 'Fiji',\n fk: 'Falkland Islands',\n fm: 'Micronesia',\n fo: 'Faroe Islands',\n fr: 'France',\n ga: 'Gabon',\n gb: 'United Kingdom',\n 'gb-eng': 'England',\n 'gb-nir': 'Northern Ireland',\n 'gb-sct': 'Scotland',\n 'gb-wls': 'Wales',\n gd: 'Grenada',\n ge: 'Georgia',\n gf: 'French Guiana',\n gg: 'Guernsey',\n gh: 'Ghana',\n gi: 'Gibraltar',\n gl: 'Greenland',\n gm: 'Gambia',\n gn: 'Guinea',\n gp: 'Guadeloupe',\n gq: 'Equatorial Guinea',\n gr: 'Greece',\n gs: 'South Georgia',\n gt: 'Guatemala',\n gu: 'Guam',\n gw: 'Guinea-Bissau',\n gy: 'Guyana',\n hk: 'Hong Kong',\n hm: 'Heard Island and McDonald Islands',\n hn: 'Honduras',\n hr: 'Croatia',\n ht: 'Haiti',\n hu: 'Hungary',\n ic: 'Canary Islands',\n id: 'Indonesia',\n ie: 'Ireland',\n il: 'Israel',\n im: 'Isle of Man',\n in: 'India',\n io: 'British Indian Ocean Territory',\n iq: 'Iraq',\n ir: 'Iran',\n is: 'Iceland',\n it: 'Italy',\n je: 'Jersey',\n jm: 'Jamaica',\n jo: 'Jordan',\n jp: 'Japan',\n ke: 'Kenya',\n kg: 'Kyrgyzstan',\n kh: 'Cambodia',\n ki: 'Kiribati',\n km: 'Comoros',\n kn: 'Saint Kitts and Nevis',\n kp: 'North Korea',\n kr: 'South Korea',\n kw: 'Kuwait',\n ky: 'Cayman Islands',\n kz: 'Kazakhstan',\n la: 'Laos',\n lb: 'Lebanon',\n lc: 'Saint Lucia',\n li: 'Liechtenstein',\n lk: 'Sri Lanka',\n lr: 'Liberia',\n ls: 'Lesotho',\n lt: 'Lithuania',\n lu: 'Luxembourg',\n lv: 'Latvia',\n ly: 'Libya',\n ma: 'Morocco',\n mc: 'Monaco',\n md: 'Moldova',\n me: 'Montenegro',\n mf: 'Saint Martin',\n mg: 'Madagascar',\n mh: 'Marshall Islands',\n mk: 'North Macedonia',\n ml: 'Mali',\n mm: 'Myanmar',\n mn: 'Mongolia',\n mo: 'Macau',\n mp: 'Northern Mariana Islands',\n mq: 'Martinique',\n mr: 'Mauritania',\n ms: 'Montserrat',\n mt: 'Malta',\n mu: 'Mauritius',\n mv: 'Maldives',\n mw: 'Malawi',\n mx: 'Mexico',\n my: 'Malaysia',\n mz: 'Mozambique',\n na: 'Namibia',\n nc: 'New Caledonia',\n ne: 'Niger',\n nf: 'Norfolk Island',\n ng: 'Nigeria',\n ni: 'Nicaragua',\n nl: 'Netherlands',\n no: 'Norway',\n np: 'Nepal',\n nr: 'Nauru',\n nu: 'Niue',\n nz: 'New Zealand',\n om: 'Oman',\n pa: 'Panama',\n pe: 'Peru',\n pf: 'French Polynesia',\n pg: 'Papua New Guinea',\n ph: 'Philippines',\n pk: 'Pakistan',\n pl: 'Poland',\n pm: 'Saint Pierre and Miquelon',\n pn: 'Pitcairn Islands',\n pr: 'Puerto Rico',\n ps: 'Palestine',\n pt: 'Portugal',\n pw: 'Palau',\n py: 'Paraguay',\n qa: 'Qatar',\n re: 'Réunion',\n ro: 'Romania',\n rs: 'Serbia',\n ru: 'Russia',\n rw: 'Rwanda',\n sa: 'Saudi Arabia',\n sb: 'Solomon Islands',\n sc: 'Seychelles',\n sd: 'Sudan',\n se: 'Sweden',\n sg: 'Singapore',\n sh: 'Saint Helena, Ascension and Tristan da Cunha',\n si: 'Slovenia',\n sj: 'Svalbard and Jan Mayen',\n sk: 'Slovakia',\n sl: 'Sierra Leone',\n sm: 'San Marino',\n sn: 'Senegal',\n so: 'Somalia',\n sr: 'Suriname',\n ss: 'South Sudan',\n st: 'São Tomé and Príncipe',\n sv: 'El Salvador',\n sx: 'Sint Maarten',\n sy: 'Syria',\n sz: 'Eswatini (Swaziland)',\n ta: 'Tristan da Cunha',\n tc: 'Turks and Caicos Islands',\n td: 'Chad',\n tf: 'French Southern and Antarctic Lands',\n tg: 'Togo',\n th: 'Thailand',\n tj: 'Tajikistan',\n tk: 'Tokelau',\n tl: 'Timor-Leste',\n tm: 'Turkmenistan',\n tn: 'Tunisia',\n to: 'Tonga',\n tr: 'Turkey',\n tt: 'Trinidad and Tobago',\n tv: 'Tuvalu',\n tw: 'Taiwan',\n tz: 'Tanzania',\n ua: 'Ukraine',\n ug: 'Uganda',\n um: 'United States Minor Outlying Islands',\n un: 'United Nations',\n us: 'United States',\n 'us-ak': 'Alaska',\n 'us-al': 'Alabama',\n 'us-ar': 'Arkansas',\n 'us-az': 'Arizona',\n 'us-ca': 'California',\n 'us-co': 'Colorado',\n 'us-ct': 'Connecticut',\n 'us-de': 'Delaware',\n 'us-fl': 'Florida',\n 'us-ga': 'Georgia',\n 'us-hi': 'Hawaii',\n 'us-ia': 'Iowa',\n 'us-id': 'Idaho',\n 'us-il': 'Illinois',\n 'us-in': 'Indiana',\n 'us-ks': 'Kansas',\n 'us-ky': 'Kentucky',\n 'us-la': 'Louisiana',\n 'us-ma': 'Massachusetts',\n 'us-md': 'Maryland',\n 'us-me': 'Maine',\n 'us-mi': 'Michigan',\n 'us-mn': 'Minnesota',\n 'us-mo': 'Missouri',\n 'us-ms': 'Mississippi',\n 'us-mt': 'Montana',\n 'us-nc': 'North Carolina',\n 'us-nd': 'North Dakota',\n 'us-ne': 'Nebraska',\n 'us-nh': 'New Hampshire',\n 'us-nj': 'New Jersey',\n 'us-nm': 'New Mexico',\n 'us-nv': 'Nevada',\n 'us-ny': 'New York',\n 'us-oh': 'Ohio',\n 'us-ok': 'Oklahoma',\n 'us-or': 'Oregon',\n 'us-pa': 'Pennsylvania',\n 'us-ri': 'Rhode Island',\n 'us-sc': 'South Carolina',\n 'us-sd': 'South Dakota',\n 'us-tn': 'Tennessee',\n 'us-tx': 'Texas',\n 'us-ut': 'Utah',\n 'us-va': 'Virginia',\n 'us-vt': 'Vermont',\n 'us-wa': 'Washington',\n 'us-wi': 'Wisconsin',\n 'us-wv': 'West Virginia',\n 'us-wy': 'Wyoming',\n uy: 'Uruguay',\n uz: 'Uzbekistan',\n va: 'Vatican City (Holy See)',\n vc: 'Saint Vincent and the Grenadines',\n ve: 'Venezuela',\n vg: 'British Virgin Islands',\n vi: 'United States Virgin Islands',\n vn: 'Vietnam',\n vu: 'Vanuatu',\n wf: 'Wallis and Futuna',\n ws: 'Samoa',\n xk: 'Kosovo',\n ye: 'Yemen',\n yt: 'Mayotte',\n za: 'South Africa',\n zm: 'Zambia',\n zw: 'Zimbabwe',\n} as const;\n\nexport type CountryCode = keyof typeof FLAGS;\n\nexport const COUNTRY_CODES = Object.keys(FLAGS) as CountryCode[];\n","export class FlagResizerError extends Error {\n public override readonly name = 'FlagResizerError';\n\n public constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n }\n}\n","import path from 'node:path';\n\nimport { loadConfig } from 'c12';\nimport { z } from 'zod';\n\nimport { COUNTRY_CODES, FLAGS, type CountryCode } from './data/flags.js';\nimport { FlagResizerError } from './errors.js';\nimport type {\n FlagFormat,\n FlagFilterValue,\n FlagResizerConfig,\n GenerateOptions,\n ProfileConfig,\n ResolvedConfiguration,\n ResolvedProfileConfig,\n} from './types.js';\n\nconst countryCodeSchema = z.enum(COUNTRY_CODES as [CountryCode, ...CountryCode[]]);\nconst filterPatternSchema = z\n .string()\n .regex(/^(?=.*\\*)[a-z*]+(?:-[a-z*]+)*$/u, 'must be a lowercase flag code or a pattern using \"*\"');\nconst filterValueSchema = z.union([countryCodeSchema, filterPatternSchema]);\nconst formatSchema = z.enum(['png', 'webp']);\nconst sizeSchema = z.tuple([\n z.number().int().positive('width must be a positive integer'),\n z.number().int().positive('height must be a positive integer'),\n]);\nconst formatOutputSchema = z\n .object({\n dir: z.string().trim().min(1),\n publicPath: z.string().trim().min(1),\n })\n .strict();\nconst profileSchema = z\n .object({\n filter: z\n .object({\n type: z.enum(['whitelist', 'blacklist']),\n values: z.array(filterValueSchema),\n })\n .strict(),\n sizes: z.array(sizeSchema).min(1),\n quality: z.number().int().min(1).max(100),\n formats: z.array(formatSchema).min(1),\n output: z\n .object({\n png: formatOutputSchema.optional(),\n webp: formatOutputSchema.optional(),\n ts: z.string().trim().min(1),\n })\n .strict(),\n })\n .strict();\nconst configSchema = z.record(z.string().trim().min(1), profileSchema);\n\ninterface LoadedConfig {\n raw: unknown;\n baseDir: string;\n configFile?: string;\n}\n\nexport function defineConfig<const T extends FlagResizerConfig>(config: T): T {\n return config;\n}\n\nfunction formatValidationError(error: z.ZodError): string {\n return error.issues\n .map((issue) => {\n const location = issue.path.length > 0 ? issue.path.join('.') : 'config';\n const received = issue.code === 'invalid_value' ? ` (${String(issue.input)})` : '';\n return `${location}: ${issue.message}${received}`;\n })\n .join('\\n');\n}\n\nfunction preflightFormatTypos(raw: unknown): void {\n if (typeof raw !== 'object' || raw === null) return;\n\n for (const [profileName, value] of Object.entries(raw)) {\n if (typeof value !== 'object' || value === null) continue;\n const formats: unknown = Reflect.get(value, 'formats');\n if (Array.isArray(formats) && formats.includes('wepb')) {\n throw new FlagResizerError(\n `Profile \"${profileName}\" contains format \"wepb\". Did you mean \"webp\"?`,\n );\n }\n }\n}\n\nfunction normalizePublicPath(publicPath: string): string {\n const normalized = publicPath.replace(/\\/+$/u, '');\n return normalized === '' ? '/' : normalized;\n}\n\nfunction assertUniqueValues(profileName: string, profile: ProfileConfig): void {\n const formats = new Set(profile.formats);\n if (formats.size !== profile.formats.length) {\n throw new FlagResizerError(`Profile \"${profileName}\" contains duplicate formats.`);\n }\n\n const sizes = new Set(profile.sizes.map(([width, height]) => `${width}x${height}`));\n if (sizes.size !== profile.sizes.length) {\n throw new FlagResizerError(`Profile \"${profileName}\" contains duplicate sizes.`);\n }\n\n const countries = new Set(profile.filter.values);\n if (countries.size !== profile.filter.values.length) {\n throw new FlagResizerError(`Profile \"${profileName}\" contains duplicate filter values.`);\n }\n}\n\nfunction assertConsistentRatio(profileName: string, profile: ProfileConfig): void {\n const first = profile.sizes[0];\n if (!first) return;\n\n const [baseWidth, baseHeight] = first;\n for (const [width, height] of profile.sizes.slice(1)) {\n if (width * baseHeight !== height * baseWidth) {\n throw new FlagResizerError(\n `Profile \"${profileName}\" mixes aspect ratios: ${baseWidth}x${baseHeight} and ${width}x${height}.`,\n );\n }\n }\n}\n\nfunction matchesFilterValue(code: CountryCode, value: FlagFilterValue): boolean {\n if (!value.includes('*')) return code === value;\n return new RegExp(`^${value.split('*').join('.*')}$`, 'u').test(code);\n}\n\nfunction assertFilterValuesMatch(profileName: string, profile: ProfileConfig): void {\n for (const value of profile.filter.values) {\n if (!COUNTRY_CODES.some((code) => matchesFilterValue(code, value))) {\n throw new FlagResizerError(\n `Profile \"${profileName}\" contains filter pattern \"${value}\" that matches no bundled flags.`,\n );\n }\n }\n}\n\nfunction selectCountries(profile: ProfileConfig): readonly CountryCode[] {\n return COUNTRY_CODES.filter((code) => {\n const matches = profile.filter.values.some((value) => matchesFilterValue(code, value));\n return profile.filter.type === 'whitelist' ? matches : !matches;\n });\n}\n\nfunction resolveProfile(\n name: string,\n profile: ProfileConfig,\n baseDir: string,\n): ResolvedProfileConfig {\n assertUniqueValues(name, profile);\n assertConsistentRatio(name, profile);\n assertFilterValuesMatch(name, profile);\n\n for (const format of profile.formats) {\n if (!profile.output[format]) {\n throw new FlagResizerError(\n `Profile \"${name}\" enables \"${format}\" but output.${format} is missing.`,\n );\n }\n }\n\n return {\n ...profile,\n name,\n countries: selectCountries(profile),\n output: {\n ...(profile.output.png\n ? {\n png: {\n dir: path.resolve(baseDir, profile.output.png.dir),\n publicPath: normalizePublicPath(profile.output.png.publicPath),\n },\n }\n : {}),\n ...(profile.output.webp\n ? {\n webp: {\n dir: path.resolve(baseDir, profile.output.webp.dir),\n publicPath: normalizePublicPath(profile.output.webp.publicPath),\n },\n }\n : {}),\n ts: path.resolve(baseDir, profile.output.ts),\n },\n };\n}\n\nfunction profileTargets(profile: ResolvedProfileConfig): Iterable<string> {\n const targets: string[] = [profile.output.ts];\n\n for (const format of profile.formats) {\n const output = profile.output[format];\n if (!output) continue;\n for (const [width, height] of profile.sizes) {\n for (const code of profile.countries) {\n targets.push(path.join(output.dir, `${width}x${height}`, `${code}.${format}`));\n }\n }\n }\n\n return targets;\n}\n\nfunction assertNoTargetCollisions(profiles: readonly ResolvedProfileConfig[]): void {\n const owners = new Map<string, string>();\n\n for (const profile of profiles) {\n for (const target of profileTargets(profile)) {\n const owner = owners.get(target);\n if (owner) {\n throw new FlagResizerError(\n `Profiles \"${owner}\" and \"${profile.name}\" both generate ${target}.`,\n );\n }\n owners.set(target, profile.name);\n }\n }\n}\n\nasync function loadRawConfiguration(options: GenerateOptions): Promise<LoadedConfig> {\n const cwd = path.resolve(options.cwd ?? process.cwd());\n if ('config' in options) {\n return { raw: options.config, baseDir: cwd };\n }\n\n const requestedFile = options.configFile ? path.resolve(cwd, options.configFile) : undefined;\n\n try {\n const result = await loadConfig({\n name: 'flag-resizer',\n cwd,\n ...(requestedFile ? { configFile: requestedFile } : {}),\n configFileRequired: true,\n rcFile: false,\n globalRc: false,\n packageJson: false,\n dotenv: false,\n envName: false,\n extend: false,\n });\n const discoveredFile =\n typeof result.configFile === 'string' ? path.resolve(result.configFile) : requestedFile;\n\n return {\n raw: result.config,\n baseDir: discoveredFile ? path.dirname(discoveredFile) : cwd,\n ...(discoveredFile ? { configFile: discoveredFile } : {}),\n };\n } catch (error) {\n const target = requestedFile ?? path.join(cwd, 'flag-resizer.config.*');\n throw new FlagResizerError(`Unable to load flag-resizer configuration from ${target}.`, {\n cause: error,\n });\n }\n}\n\nexport async function resolveConfiguration(\n options: GenerateOptions,\n): Promise<ResolvedConfiguration> {\n const loaded = await loadRawConfiguration(options);\n preflightFormatTypos(loaded.raw);\n\n const parsed = configSchema.safeParse(loaded.raw);\n if (!parsed.success) {\n throw new FlagResizerError(\n `Invalid flag-resizer configuration:\\n${formatValidationError(parsed.error)}`,\n );\n }\n\n const entries = Object.entries(parsed.data);\n if (entries.length === 0) {\n throw new FlagResizerError('The configuration must contain at least one profile.');\n }\n\n const allProfiles = entries.map(([name, profile]) =>\n resolveProfile(name, profile as ProfileConfig, loaded.baseDir),\n );\n assertNoTargetCollisions(allProfiles);\n\n const requested = options.profiles;\n const selected =\n requested && requested.length > 0\n ? requested.map((name) => {\n const profile = allProfiles.find((candidate) => candidate.name === name);\n if (!profile) {\n throw new FlagResizerError(\n `Unknown profile \"${name}\". Available profiles: ${allProfiles\n .map((candidate) => candidate.name)\n .join(', ')}.`,\n );\n }\n return profile;\n })\n : allProfiles;\n\n if (new Set(selected.map((profile) => profile.name)).size !== selected.length) {\n throw new FlagResizerError('A profile was selected more than once.');\n }\n\n return {\n baseDir: loaded.baseDir,\n profiles: selected,\n ...(loaded.configFile ? { configFile: loaded.configFile } : {}),\n };\n}\n\nexport function getCountryName(code: CountryCode): string {\n return FLAGS[code];\n}\n\nexport function isFlagFormat(value: string): value is FlagFormat {\n return value === 'png' || value === 'webp';\n}\n","import { FLAGS } from './data/flags.js';\nimport type { FlagFormat, ResolvedProfileConfig } from './types.js';\n\nfunction quote(value: string): string {\n return JSON.stringify(value);\n}\n\nfunction propertyKey(value: string): string {\n return /^[A-Za-z_$][\\w$]*$/u.test(value) ? value : quote(value);\n}\n\nexport function createTypeScriptManifest(profile: ResolvedProfileConfig): string {\n const flags = profile.countries\n .map((code) => ` ${propertyKey(code)}: ${quote(FLAGS[code])},`)\n .join('\\n');\n const sizes = profile.sizes.map(([width, height]) => `${width}x${height}`);\n const sizeValues = sizes.map((size) => ` ${quote(size)},`).join('\\n');\n const dimensions = profile.sizes\n .map(\n ([width, height]) =>\n ` ${quote(`${width}x${height}`)}: { width: ${width}, height: ${height} },`,\n )\n .join('\\n');\n const formats = profile.formats.map((format) => ` ${quote(format)},`).join('\\n');\n const publicPaths = profile.formats\n .map((format: FlagFormat) => {\n const output = profile.output[format];\n if (!output) throw new Error(`Missing resolved output for ${format}.`);\n return ` ${format}: ${quote(output.publicPath)},`;\n })\n .join('\\n');\n\n return `/**\n * Generated by script 🍺\n * Do not edit manually.\n */\n\nexport const FLAGS = {\n${flags}\n} as const;\n\nexport type CountryCode = keyof typeof FLAGS;\n\nexport const FLAG_SIZES = [\n${sizeValues}\n] as const;\n\nexport type FlagSize = (typeof FLAG_SIZES)[number];\n\nexport const FLAG_DIMENSIONS = {\n${dimensions}\n} as const satisfies Record<FlagSize, { width: number; height: number }>;\n\nexport const FLAG_FORMATS = [\n${formats}\n] as const;\n\nexport type FlagFormat = (typeof FLAG_FORMATS)[number];\n\nexport const FLAG_PUBLIC_PATHS = {\n${publicPaths}\n} as const satisfies Record<FlagFormat, string>;\n\nexport function getFlagPath(\n code: CountryCode,\n size: FlagSize,\n format: FlagFormat,\n): string {\n const publicPath = FLAG_PUBLIC_PATHS[format];\n const basePath = publicPath === '/' ? '' : publicPath;\n return \\`\\${basePath}/\\${size}/\\${code}.\\${format}\\`;\n}\n`;\n}\n","import {\n access,\n copyFile,\n mkdir,\n mkdtemp,\n readFile,\n rename,\n rm,\n rmdir,\n stat,\n unlink,\n writeFile,\n} from 'node:fs/promises';\nimport { availableParallelism } from 'node:os';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { randomUUID } from 'node:crypto';\n\nimport sharp from 'sharp';\n\nimport { resolveConfiguration } from './config.js';\nimport type { CountryCode } from './data/flags.js';\nimport { FlagResizerError } from './errors.js';\nimport { createTypeScriptManifest } from './generated-typescript.js';\nimport type {\n FlagFormat,\n GenerateOptions,\n GenerationResult,\n ProfileGenerationResult,\n ResolvedProfileConfig,\n} from './types.js';\n\nconst PACKAGE_ROOT = fileURLToPath(new URL('../', import.meta.url));\nconst FLAGS_DIRECTORY = path.join(PACKAGE_ROOT, 'flags');\nconst ATTRIBUTION_FILE = path.join(PACKAGE_ROOT, 'ATTRIBUTION.txt');\nconst GRAPHICS_LICENSE_FILE = path.join(PACKAGE_ROOT, 'LICENSE-GRAPHICS');\nconst MANIFEST_VERSION = 1;\n\ntype ManagedFileKind = 'attribution' | 'image' | 'license' | 'typescript';\ntype FileStatus = 'created' | 'updated' | 'unchanged';\n\ninterface ManagedFile {\n root: string;\n relativePath: string;\n kind: ManagedFileKind;\n}\n\ninterface ProfileManifest {\n files: ManagedFile[];\n}\n\ninterface ManagedManifest {\n version: typeof MANIFEST_VERSION;\n profiles: Record<string, ProfileManifest>;\n}\n\ninterface PlannedFile {\n entry: ManagedFile;\n target: string;\n image: boolean;\n createContent: () => Promise<Buffer>;\n}\n\ninterface GenerationPlan {\n tasks: PlannedFile[];\n filesByProfile: Map<string, ManagedFile[]>;\n imageCountByProfile: Map<string, number>;\n}\n\nfunction emptyManifest(): ManagedManifest {\n return { version: MANIFEST_VERSION, profiles: {} };\n}\n\nfunction entryTarget(entry: ManagedFile): string {\n return path.resolve(entry.root, entry.relativePath);\n}\n\nfunction entryKey(entry: ManagedFile): string {\n return entryTarget(entry);\n}\n\nfunction assertSafeManagedFile(entry: ManagedFile): void {\n if (!path.isAbsolute(entry.root)) {\n throw new FlagResizerError('The managed manifest contains a non-absolute output root.');\n }\n if (path.isAbsolute(entry.relativePath) || entry.relativePath.includes('\\0')) {\n throw new FlagResizerError('The managed manifest contains an unsafe file path.');\n }\n\n const target = entryTarget(entry);\n const relative = path.relative(entry.root, target);\n if (relative === '' || relative === '..' || relative.startsWith(`..${path.sep}`)) {\n throw new FlagResizerError('The managed manifest contains a path outside its output root.');\n }\n\n const portable = entry.relativePath.split(path.sep).join('/');\n const valid =\n (entry.kind === 'attribution' && portable === 'ATTRIBUTION.txt') ||\n (entry.kind === 'license' && portable === 'LICENSE-GRAPHICS') ||\n (entry.kind === 'typescript' && /^[^/]+\\.ts$/u.test(portable)) ||\n (entry.kind === 'image' &&\n /^[1-9]\\d*x[1-9]\\d*\\/(?:[a-z]{2}|au-(?:act|nsw|nt|qld|sa|tas|vic|wa)|ca-(?:ab|bc|mb|nb|nl|ns|nt|nu|on|pe|qc|sk|yt)|de-(?:bb|be|bw|by|hb|he|hh|mv|ni|nw|rp|sh|sl|sn|st|th)|es-(?:an|ar|as|cb|ce|cl|cm|cn|ct|ex|ga|ib|mc|md|ml|nc|pv|ri|vc)|gb-(?:eng|nir|sct|wls)|us-(?:ak|al|ar|az|ca|co|ct|de|fl|ga|hi|ia|id|il|in|ks|ky|la|ma|md|me|mi|mn|mo|ms|mt|nc|nd|ne|nh|nj|nm|nv|ny|oh|ok|or|pa|ri|sc|sd|tn|tx|ut|va|vt|wa|wi|wv|wy))\\.(?:png|webp)$/u.test(\n portable,\n ));\n\n if (!valid) {\n throw new FlagResizerError(\n `The managed manifest contains an invalid ${entry.kind} path: ${entry.relativePath}.`,\n );\n }\n}\n\nfunction managedFile(target: string, root: string, kind: ManagedFileKind): ManagedFile {\n const entry = {\n root: path.resolve(root),\n relativePath: path.relative(path.resolve(root), path.resolve(target)),\n kind,\n };\n assertSafeManagedFile(entry);\n return entry;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction parseManifest(value: unknown): ManagedManifest {\n if (!isRecord(value) || value['version'] !== MANIFEST_VERSION || !isRecord(value['profiles'])) {\n throw new FlagResizerError('The managed manifest has an unsupported or invalid structure.');\n }\n\n const profiles: Record<string, ProfileManifest> = {};\n for (const [profileName, profileValue] of Object.entries(value['profiles'])) {\n if (!isRecord(profileValue) || !Array.isArray(profileValue['files'])) {\n throw new FlagResizerError(`The manifest entry for profile \"${profileName}\" is invalid.`);\n }\n\n const files = profileValue['files'].map((file): ManagedFile => {\n if (\n !isRecord(file) ||\n typeof file['root'] !== 'string' ||\n typeof file['relativePath'] !== 'string' ||\n !['attribution', 'image', 'license', 'typescript'].includes(String(file['kind']))\n ) {\n throw new FlagResizerError(\n `The manifest contains an invalid file owned by profile \"${profileName}\".`,\n );\n }\n const entry: ManagedFile = {\n root: file['root'],\n relativePath: file['relativePath'],\n kind: file['kind'] as ManagedFileKind,\n };\n assertSafeManagedFile(entry);\n return entry;\n });\n profiles[profileName] = { files };\n }\n\n return { version: MANIFEST_VERSION, profiles };\n}\n\nasync function pathExists(file: string): Promise<boolean> {\n try {\n await access(file);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function readManifest(file: string): Promise<ManagedManifest> {\n try {\n return parseManifest(JSON.parse(await readFile(file, 'utf8')) as unknown);\n } catch (error) {\n if (isRecord(error) && error['code'] === 'ENOENT') {\n return emptyManifest();\n }\n if (error instanceof FlagResizerError) throw error;\n throw new FlagResizerError(`Unable to read managed manifest ${file}.`, { cause: error });\n }\n}\n\nfunction resolveConcurrency(value: number | undefined): number {\n if (value !== undefined && (!Number.isInteger(value) || value < 1)) {\n throw new FlagResizerError('concurrency must be a positive integer.');\n }\n return value ?? Math.max(1, Math.min(8, availableParallelism()));\n}\n\nasync function runBounded<T>(\n items: readonly T[],\n concurrency: number,\n worker: (item: T, index: number) => Promise<void>,\n): Promise<void> {\n let nextIndex = 0;\n\n async function runWorker(): Promise<void> {\n while (nextIndex < items.length) {\n const index = nextIndex;\n nextIndex += 1;\n const item = items[index];\n if (item) await worker(item, index);\n }\n }\n\n await Promise.all(\n Array.from({ length: Math.min(concurrency, Math.max(1, items.length)) }, runWorker),\n );\n}\n\nfunction svgDensity(width: number, height: number): number {\n const scale = Math.max(width, height) / 36;\n return Math.max(72, Math.ceil(scale * 72));\n}\n\nasync function createImage(\n svg: Buffer,\n width: number,\n height: number,\n format: FlagFormat,\n quality: number,\n): Promise<Buffer> {\n const pipeline = sharp(svg, { density: svgDensity(width, height) })\n .resize(width, height, {\n fit: 'cover',\n position: 'centre',\n })\n .ensureAlpha();\n\n if (format === 'png') {\n return pipeline\n .png({\n quality,\n compressionLevel: 9,\n adaptiveFiltering: true,\n effort: 7,\n })\n .toBuffer();\n }\n\n return pipeline.webp({ quality, effort: 4 }).toBuffer();\n}\n\nfunction addProfileFile(\n filesByProfile: Map<string, ManagedFile[]>,\n profileName: string,\n entry: ManagedFile,\n): void {\n const entries = filesByProfile.get(profileName) ?? [];\n entries.push(entry);\n filesByProfile.set(profileName, entries);\n}\n\nfunction createGenerationPlan(profiles: readonly ResolvedProfileConfig[]): GenerationPlan {\n const taskByTarget = new Map<string, PlannedFile>();\n const filesByProfile = new Map<string, ManagedFile[]>();\n const imageCountByProfile = new Map<string, number>();\n const svgCache = new Map<CountryCode, Promise<Buffer>>();\n let attributionContent: Promise<Buffer> | undefined;\n let licenseContent: Promise<Buffer> | undefined;\n\n const readSvg = (code: CountryCode): Promise<Buffer> => {\n let content = svgCache.get(code);\n if (!content) {\n content = readFile(path.join(FLAGS_DIRECTORY, `${code}.svg`));\n svgCache.set(code, content);\n }\n return content;\n };\n\n const register = (\n profileName: string,\n entry: ManagedFile,\n image: boolean,\n createContent: () => Promise<Buffer>,\n ): void => {\n const target = entryTarget(entry);\n if (!taskByTarget.has(target)) {\n taskByTarget.set(target, { entry, target, image, createContent });\n }\n addProfileFile(filesByProfile, profileName, entry);\n };\n\n for (const profile of profiles) {\n const typeScriptEntry = managedFile(\n profile.output.ts,\n path.dirname(profile.output.ts),\n 'typescript',\n );\n register(profile.name, typeScriptEntry, false, () =>\n Promise.resolve(Buffer.from(createTypeScriptManifest(profile))),\n );\n\n let imageCount = 0;\n for (const format of profile.formats) {\n const output = profile.output[format];\n if (!output) {\n throw new FlagResizerError(\n `Profile \"${profile.name}\" has no resolved output for ${format}.`,\n );\n }\n\n const attributionEntry = managedFile(\n path.join(output.dir, 'ATTRIBUTION.txt'),\n output.dir,\n 'attribution',\n );\n register(profile.name, attributionEntry, false, () => {\n attributionContent ??= readFile(ATTRIBUTION_FILE);\n return attributionContent;\n });\n\n const licenseEntry = managedFile(\n path.join(output.dir, 'LICENSE-GRAPHICS'),\n output.dir,\n 'license',\n );\n register(profile.name, licenseEntry, false, () => {\n licenseContent ??= readFile(GRAPHICS_LICENSE_FILE);\n return licenseContent;\n });\n\n for (const [width, height] of profile.sizes) {\n for (const code of profile.countries) {\n const target = path.join(output.dir, `${width}x${height}`, `${code}.${format}`);\n const entry = managedFile(target, output.dir, 'image');\n register(profile.name, entry, true, async () =>\n createImage(await readSvg(code), width, height, format, profile.quality),\n );\n imageCount += 1;\n }\n }\n }\n imageCountByProfile.set(profile.name, imageCount);\n }\n\n return {\n tasks: [...taskByTarget.values()].sort((left, right) =>\n left.target.localeCompare(right.target),\n ),\n filesByProfile,\n imageCountByProfile,\n };\n}\n\nasync function buffersEqual(file: string, expected: Buffer): Promise<boolean> {\n try {\n const currentStat = await stat(file);\n if (currentStat.size !== expected.byteLength) return false;\n return (await readFile(file)).equals(expected);\n } catch (error) {\n if (isRecord(error) && error['code'] === 'ENOENT') return false;\n throw error;\n }\n}\n\nasync function writeStagedFile(target: string, staged: string): Promise<void> {\n await mkdir(path.dirname(target), { recursive: true });\n const temporaryTarget = path.join(\n path.dirname(target),\n `.${path.basename(target)}.${process.pid}.${randomUUID()}.tmp`,\n );\n\n try {\n await copyFile(staged, temporaryTarget);\n await rename(temporaryTarget, target);\n } finally {\n await rm(temporaryTarget, { force: true });\n }\n}\n\nasync function writeAtomic(target: string, content: string): Promise<void> {\n await mkdir(path.dirname(target), { recursive: true });\n const temporaryTarget = path.join(\n path.dirname(target),\n `.${path.basename(target)}.${process.pid}.${randomUUID()}.tmp`,\n );\n\n try {\n await writeFile(temporaryTarget, content);\n await rename(temporaryTarget, target);\n } finally {\n await rm(temporaryTarget, { force: true });\n }\n}\n\nasync function removeEmptyParents(start: string, root: string): Promise<void> {\n let directory = path.resolve(start);\n const resolvedRoot = path.resolve(root);\n\n while (directory !== resolvedRoot) {\n const relative = path.relative(resolvedRoot, directory);\n if (relative === '..' || relative.startsWith(`..${path.sep}`)) return;\n try {\n await rmdir(directory);\n } catch {\n return;\n }\n directory = path.dirname(directory);\n }\n}\n\nasync function pruneFile(entry: ManagedFile): Promise<boolean> {\n assertSafeManagedFile(entry);\n const target = entryTarget(entry);\n try {\n await unlink(target);\n await removeEmptyParents(path.dirname(target), entry.root);\n return true;\n } catch (error) {\n if (isRecord(error) && error['code'] === 'ENOENT') return false;\n throw new FlagResizerError(`Unable to remove stale generated file ${target}.`, {\n cause: error,\n });\n }\n}\n\nfunction sortedManifest(manifest: ManagedManifest): ManagedManifest {\n return {\n version: MANIFEST_VERSION,\n profiles: Object.fromEntries(\n Object.entries(manifest.profiles)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([profileName, profile]) => [\n profileName,\n {\n files: [...profile.files].sort((left, right) =>\n entryTarget(left).localeCompare(entryTarget(right)),\n ),\n },\n ]),\n ),\n };\n}\n\nfunction nextManifest(\n previous: ManagedManifest,\n plan: GenerationPlan,\n selectedProfiles: readonly ResolvedProfileConfig[],\n fullRun: boolean,\n): ManagedManifest {\n const profiles: Record<string, ProfileManifest> = fullRun ? {} : { ...previous.profiles };\n for (const profile of selectedProfiles) {\n profiles[profile.name] = { files: plan.filesByProfile.get(profile.name) ?? [] };\n }\n return sortedManifest({ version: MANIFEST_VERSION, profiles });\n}\n\nfunction staleEntries(previous: ManagedManifest, next: ManagedManifest): ManagedFile[] {\n const retainedTargets = new Set(\n Object.values(next.profiles).flatMap((profile) => profile.files.map(entryKey)),\n );\n const stale = new Map<string, ManagedFile>();\n\n for (const profile of Object.values(previous.profiles)) {\n for (const entry of profile.files) {\n const target = entryKey(entry);\n if (!retainedTargets.has(target)) stale.set(target, entry);\n }\n }\n return [...stale.values()];\n}\n\nfunction removedOwnershipCount(\n previous: ManagedManifest,\n next: ManagedManifest,\n profileName: string,\n): number {\n const nextFiles = new Set((next.profiles[profileName]?.files ?? []).map(entryKey));\n return (previous.profiles[profileName]?.files ?? []).filter(\n (entry) => !nextFiles.has(entryKey(entry)),\n ).length;\n}\n\nexport async function generate(options: GenerateOptions = {}): Promise<GenerationResult> {\n const started = performance.now();\n const concurrency = resolveConcurrency(options.concurrency);\n const resolved = await resolveConfiguration(options);\n const manifestFile = path.join(resolved.baseDir, '.flag-resizer', 'manifest.json');\n const previousManifest = await readManifest(manifestFile);\n const plan = createGenerationPlan(resolved.profiles);\n const fullRun = !options.profiles || options.profiles.length === 0;\n const manifest = nextManifest(previousManifest, plan, resolved.profiles, fullRun);\n const stale = staleEntries(previousManifest, manifest);\n const statuses = new Map<string, FileStatus>();\n const dryRun = options.dryRun ?? false;\n\n if (dryRun) {\n await runBounded(plan.tasks, concurrency, async (task) => {\n statuses.set(task.target, (await pathExists(task.target)) ? 'updated' : 'created');\n });\n } else {\n const stagingDirectory = await mkdtemp(path.join(os.tmpdir(), 'flag-resizer-'));\n const stagedFiles = new Map<string, string>();\n\n try {\n await runBounded(plan.tasks, concurrency, async (task, index) => {\n const content = await task.createContent();\n const exists = await pathExists(task.target);\n if (exists && (await buffersEqual(task.target, content))) {\n statuses.set(task.target, 'unchanged');\n return;\n }\n\n statuses.set(task.target, exists ? 'updated' : 'created');\n const staged = path.join(stagingDirectory, String(index));\n await writeFile(staged, content);\n stagedFiles.set(task.target, staged);\n });\n\n for (const task of plan.tasks) {\n const staged = stagedFiles.get(task.target);\n if (staged) await writeStagedFile(task.target, staged);\n }\n\n for (const entry of stale) await pruneFile(entry);\n await writeAtomic(manifestFile, `${JSON.stringify(manifest, null, 2)}\\n`);\n } catch (error) {\n throw new FlagResizerError('Flag generation failed before the manifest was committed.', {\n cause: error,\n });\n } finally {\n await rm(stagingDirectory, { recursive: true, force: true });\n }\n }\n\n const profiles: ProfileGenerationResult[] = resolved.profiles.map((profile) => {\n const entries = plan.filesByProfile.get(profile.name) ?? [];\n const counts = { created: 0, updated: 0, unchanged: 0 };\n for (const entry of entries) {\n const status = statuses.get(entryTarget(entry));\n if (status) counts[status] += 1;\n }\n\n return {\n name: profile.name,\n countries: profile.countries.length,\n images: plan.imageCountByProfile.get(profile.name) ?? 0,\n sizes: profile.sizes,\n formats: profile.formats,\n outputDirectories: Object.fromEntries(\n profile.formats.map((format) => [format, profile.output[format]?.dir]),\n ),\n ...counts,\n removed: removedOwnershipCount(previousManifest, manifest, profile.name),\n typeScriptFile: profile.output.ts,\n };\n });\n\n return {\n dryRun,\n durationMs: Math.round(performance.now() - started),\n ...(resolved.configFile ? { configFile: resolved.configFile } : {}),\n manifestFile,\n profiles,\n };\n}\n"],"mappings":";;;;;;;;;AAEA,MAAa,QAAQ;CACnB,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,UAAU;CACV,UAAU;CACV,SAAS;CACT,UAAU;CACV,SAAS;CACT,UAAU;CACV,UAAU;CACV,SAAS;CACT,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,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"}
|
|
1
|
+
{"version":3,"file":"generator.js","names":[],"sources":["../src/data/flags.ts","../src/errors.ts","../src/config.ts","../src/generated-typescript.ts","../src/generator.ts"],"sourcesContent":["// Display names follow FlagCDN where available and the sourced ISO 3166-2\n// manifests for additional subdivisions.\nexport const FLAGS = {\n ac: 'Ascension Island',\n ad: 'Andorra',\n ae: 'United Arab Emirates',\n af: 'Afghanistan',\n ag: 'Antigua and Barbuda',\n ai: 'Anguilla',\n al: 'Albania',\n am: 'Armenia',\n ao: 'Angola',\n aq: 'Antarctica',\n ar: 'Argentina',\n 'ar-a': 'Salta',\n 'ar-b': 'Buenos Aires',\n 'ar-c': 'Autonomous City of Buenos Aires',\n 'ar-d': 'San Luis',\n 'ar-e': 'Entre Ríos',\n 'ar-f': 'La Rioja',\n 'ar-g': 'Santiago del Estero',\n 'ar-h': 'Chaco',\n 'ar-j': 'San Juan',\n 'ar-k': 'Catamarca',\n 'ar-l': 'La Pampa',\n 'ar-m': 'Mendoza',\n 'ar-n': 'Misiones',\n 'ar-p': 'Formosa',\n 'ar-q': 'Neuquén',\n 'ar-r': 'Río Negro',\n 'ar-s': 'Santa Fe',\n 'ar-t': 'Tucumán',\n 'ar-u': 'Chubut',\n 'ar-v': 'Tierra del Fuego',\n 'ar-w': 'Corrientes',\n 'ar-x': 'Córdoba',\n 'ar-y': 'Jujuy',\n 'ar-z': 'Santa Cruz',\n as: 'American Samoa',\n at: 'Austria',\n 'at-1': 'Burgenland',\n 'at-2': 'Carinthia',\n 'at-3': 'Lower Austria',\n 'at-4': 'Upper Austria',\n 'at-5': 'Salzburg',\n 'at-6': 'Styria',\n 'at-7': 'Tyrol',\n 'at-8': 'Vorarlberg',\n 'at-9': 'Vienna',\n au: 'Australia',\n 'au-act': 'Australian Capital Territory',\n 'au-nsw': 'New South Wales',\n 'au-nt': 'Northern Territory',\n 'au-qld': 'Queensland',\n 'au-sa': 'South Australia',\n 'au-tas': 'Tasmania',\n 'au-vic': 'Victoria',\n 'au-wa': 'Western Australia',\n aw: 'Aruba',\n ax: 'Åland Islands',\n az: 'Azerbaijan',\n ba: 'Bosnia and Herzegovina',\n bb: 'Barbados',\n bd: 'Bangladesh',\n be: 'Belgium',\n bf: 'Burkina Faso',\n bg: 'Bulgaria',\n bh: 'Bahrain',\n bi: 'Burundi',\n bj: 'Benin',\n bl: 'Saint Barthélemy',\n bm: 'Bermuda',\n bn: 'Brunei',\n bo: 'Bolivia',\n bq: 'Caribbean Netherlands',\n br: 'Brazil',\n 'br-ac': 'Acre',\n 'br-al': 'Alagoas',\n 'br-am': 'Amazonas',\n 'br-ap': 'Amapá',\n 'br-ba': 'Bahia',\n 'br-ce': 'Ceará',\n 'br-df': 'Federal District',\n 'br-es': 'Espírito Santo',\n 'br-go': 'Goiás',\n 'br-ma': 'Maranhão',\n 'br-mg': 'Minas Gerais',\n 'br-ms': 'Mato Grosso do Sul',\n 'br-mt': 'Mato Grosso',\n 'br-pa': 'Pará',\n 'br-pb': 'Paraíba',\n 'br-pe': 'Pernambuco',\n 'br-pi': 'Piauí',\n 'br-pr': 'Paraná',\n 'br-rj': 'Rio de Janeiro',\n 'br-rn': 'Rio Grande do Norte',\n 'br-ro': 'Rondônia',\n 'br-rr': 'Roraima',\n 'br-rs': 'Rio Grande do Sul',\n 'br-sc': 'Santa Catarina',\n 'br-se': 'Sergipe',\n 'br-sp': 'São Paulo',\n 'br-to': 'Tocantins',\n bs: 'Bahamas',\n bt: 'Bhutan',\n bv: 'Bouvet Island',\n bw: 'Botswana',\n by: 'Belarus',\n bz: 'Belize',\n ca: 'Canada',\n 'ca-ab': 'Alberta',\n 'ca-bc': 'British Columbia',\n 'ca-mb': 'Manitoba',\n 'ca-nb': 'New Brunswick',\n 'ca-nl': 'Newfoundland and Labrador',\n 'ca-ns': 'Nova Scotia',\n 'ca-nt': 'Northwest Territories',\n 'ca-nu': 'Nunavut',\n 'ca-on': 'Ontario',\n 'ca-pe': 'Prince Edward Island',\n 'ca-qc': 'Quebec',\n 'ca-sk': 'Saskatchewan',\n 'ca-yt': 'Yukon',\n cc: 'Cocos (Keeling) Islands',\n cd: 'DR Congo',\n cf: 'Central African Republic',\n cg: 'Republic of the Congo',\n ch: 'Switzerland',\n 'ch-ag': 'Aargau',\n 'ch-ai': 'Appenzell Innerrhoden',\n 'ch-ar': 'Appenzell Ausserrhoden',\n 'ch-be': 'Bern',\n 'ch-bl': 'Basel-Landschaft',\n 'ch-bs': 'Basel-Stadt',\n 'ch-fr': 'Fribourg',\n 'ch-ge': 'Genève',\n 'ch-gl': 'Glarus',\n 'ch-gr': 'Graubünden',\n 'ch-ju': 'Jura',\n 'ch-lu': 'Luzern',\n 'ch-ne': 'Neuchâtel',\n 'ch-nw': 'Nidwalden',\n 'ch-ow': 'Obwalden',\n 'ch-sg': 'Sankt Gallen',\n 'ch-sh': 'Schaffhausen',\n 'ch-so': 'Solothurn',\n 'ch-sz': 'Schwyz',\n 'ch-tg': 'Thurgau',\n 'ch-ti': 'Ticino',\n 'ch-ur': 'Uri',\n 'ch-vd': 'Vaud',\n 'ch-vs': 'Valais',\n 'ch-zg': 'Zug',\n 'ch-zh': 'Zürich',\n ci: \"Côte d'Ivoire (Ivory Coast)\",\n ck: 'Cook Islands',\n cl: 'Chile',\n cm: 'Cameroon',\n cn: 'China',\n co: 'Colombia',\n 'co-ama': 'Amazonas',\n 'co-ant': 'Antioquia',\n 'co-ara': 'Arauca',\n 'co-atl': 'Atlántico',\n 'co-bol': 'Bolívar',\n 'co-boy': 'Boyacá',\n 'co-cal': 'Caldas',\n 'co-caq': 'Caquetá',\n 'co-cas': 'Casanare',\n 'co-cau': 'Cauca',\n 'co-ces': 'Cesar',\n 'co-cho': 'Chocó',\n 'co-cor': 'Córdoba',\n 'co-cun': 'Cundinamarca',\n 'co-dc': 'Capital District of Bogotá',\n 'co-gua': 'Guainía',\n 'co-guv': 'Guaviare',\n 'co-hui': 'Huila',\n 'co-lag': 'La Guajira',\n 'co-mag': 'Magdalena',\n 'co-met': 'Meta',\n 'co-nar': 'Nariño',\n 'co-nsa': 'Norte de Santander',\n 'co-put': 'Putumayo',\n 'co-qui': 'Quindío',\n 'co-ris': 'Risaralda',\n 'co-san': 'Santander',\n 'co-sap': 'San Andrés, Providencia and Santa Catalina',\n 'co-suc': 'Sucre',\n 'co-tol': 'Tolima',\n 'co-vac': 'Valle del Cauca',\n 'co-vau': 'Vaupés',\n 'co-vid': 'Vichada',\n cp: 'Clipperton Island',\n cq: 'Sark',\n cr: 'Costa Rica',\n cu: 'Cuba',\n cv: 'Cape Verde',\n cw: 'Curaçao',\n cx: 'Christmas Island',\n cy: 'Cyprus',\n cz: 'Czechia',\n de: 'Germany',\n 'de-bb': 'Brandenburg',\n 'de-be': 'Berlin',\n 'de-bw': 'Baden-Württemberg',\n 'de-by': 'Bavaria',\n 'de-hb': 'Bremen',\n 'de-he': 'Hesse',\n 'de-hh': 'Hamburg',\n 'de-mv': 'Mecklenburg-Western Pomerania',\n 'de-ni': 'Lower Saxony',\n 'de-nw': 'North Rhine-Westphalia',\n 'de-rp': 'Rhineland-Palatinate',\n 'de-sh': 'Schleswig-Holstein',\n 'de-sl': 'Saarland',\n 'de-sn': 'Saxony',\n 'de-st': 'Saxony-Anhalt',\n 'de-th': 'Thuringia',\n dg: 'Diego Garcia',\n dj: 'Djibouti',\n dk: 'Denmark',\n dm: 'Dominica',\n do: 'Dominican Republic',\n dz: 'Algeria',\n ea: 'Ceuta & Melilla',\n ec: 'Ecuador',\n ee: 'Estonia',\n eg: 'Egypt',\n eh: 'Western Sahara',\n er: 'Eritrea',\n es: 'Spain',\n 'es-an': 'Andalusia',\n 'es-ar': 'Aragon',\n 'es-as': 'Asturias',\n 'es-cb': 'Cantabria',\n 'es-ce': 'Ceuta',\n 'es-cl': 'Castile and León',\n 'es-cm': 'Castilla-La Mancha',\n 'es-cn': 'Canary Islands',\n 'es-ct': 'Catalonia',\n 'es-ex': 'Extremadura',\n 'es-ga': 'Galicia',\n 'es-ib': 'Balearic Islands',\n 'es-mc': 'Region of Murcia',\n 'es-md': 'Community of Madrid',\n 'es-ml': 'Melilla',\n 'es-nc': 'Navarre',\n 'es-pv': 'Basque Country',\n 'es-ri': 'La Rioja',\n 'es-vc': 'Valencian Community',\n et: 'Ethiopia',\n eu: 'European Union',\n fi: 'Finland',\n fj: 'Fiji',\n fk: 'Falkland Islands',\n fm: 'Micronesia',\n fo: 'Faroe Islands',\n fr: 'France',\n ga: 'Gabon',\n gb: 'United Kingdom',\n 'gb-eng': 'England',\n 'gb-nir': 'Northern Ireland',\n 'gb-sct': 'Scotland',\n 'gb-wls': 'Wales',\n gd: 'Grenada',\n ge: 'Georgia',\n gf: 'French Guiana',\n gg: 'Guernsey',\n gh: 'Ghana',\n gi: 'Gibraltar',\n gl: 'Greenland',\n gm: 'Gambia',\n gn: 'Guinea',\n gp: 'Guadeloupe',\n gq: 'Equatorial Guinea',\n gr: 'Greece',\n 'gr-69': 'Mount Athos',\n 'gr-a': 'Eastern Macedonia and Thrace',\n 'gr-b': 'Central Macedonia',\n 'gr-c': 'Western Macedonia',\n gs: 'South Georgia',\n gt: 'Guatemala',\n gu: 'Guam',\n gw: 'Guinea-Bissau',\n gy: 'Guyana',\n hk: 'Hong Kong',\n hm: 'Heard Island and McDonald Islands',\n hn: 'Honduras',\n hr: 'Croatia',\n ht: 'Haiti',\n hu: 'Hungary',\n ic: 'Canary Islands',\n id: 'Indonesia',\n ie: 'Ireland',\n il: 'Israel',\n im: 'Isle of Man',\n in: 'India',\n io: 'British Indian Ocean Territory',\n iq: 'Iraq',\n ir: 'Iran',\n is: 'Iceland',\n it: 'Italy',\n 'it-21': 'Piedmont',\n 'it-23': 'Aosta Valley',\n 'it-25': 'Lombardy',\n 'it-32': 'Trentino-South Tyrol',\n 'it-34': 'Veneto',\n 'it-36': 'Friuli–Venezia Giulia',\n 'it-42': 'Liguria',\n 'it-45': 'Emilia-Romagna',\n 'it-52': 'Tuscany',\n 'it-55': 'Umbria',\n 'it-57': 'Marche',\n 'it-62': 'Lazio',\n 'it-65': 'Abruzzo',\n 'it-67': 'Molise',\n 'it-72': 'Campania',\n 'it-75': 'Apulia',\n 'it-77': 'Basilicata',\n 'it-78': 'Calabria',\n 'it-82': 'Sicily',\n 'it-88': 'Sardinia',\n je: 'Jersey',\n jm: 'Jamaica',\n jo: 'Jordan',\n jp: 'Japan',\n 'jp-01': 'Hokkaido',\n 'jp-02': 'Aomori',\n 'jp-03': 'Iwate',\n 'jp-04': 'Miyagi',\n 'jp-05': 'Akita',\n 'jp-06': 'Yamagata',\n 'jp-07': 'Fukushima',\n 'jp-08': 'Ibaraki',\n 'jp-09': 'Tochigi',\n 'jp-10': 'Gunma',\n 'jp-11': 'Saitama',\n 'jp-12': 'Chiba',\n 'jp-13': 'Tokyo',\n 'jp-14': 'Kanagawa',\n 'jp-15': 'Niigata',\n 'jp-16': 'Toyama',\n 'jp-17': 'Ishikawa',\n 'jp-18': 'Fukui',\n 'jp-19': 'Yamanashi',\n 'jp-20': 'Nagano',\n 'jp-21': 'Gifu',\n 'jp-22': 'Shizuoka',\n 'jp-23': 'Aichi',\n 'jp-24': 'Mie',\n 'jp-25': 'Shiga',\n 'jp-26': 'Kyoto',\n 'jp-27': 'Osaka',\n 'jp-28': 'Hyogo',\n 'jp-29': 'Nara',\n 'jp-30': 'Wakayama',\n 'jp-31': 'Tottori',\n 'jp-32': 'Shimane',\n 'jp-33': 'Okayama',\n 'jp-34': 'Hiroshima',\n 'jp-35': 'Yamaguchi',\n 'jp-36': 'Tokushima',\n 'jp-37': 'Kagawa',\n 'jp-38': 'Ehime',\n 'jp-39': 'Kochi',\n 'jp-40': 'Fukuoka',\n 'jp-41': 'Saga',\n 'jp-42': 'Nagasaki',\n 'jp-43': 'Kumamoto',\n 'jp-44': 'Oita',\n 'jp-45': 'Miyazaki',\n 'jp-46': 'Kagoshima',\n 'jp-47': 'Okinawa',\n ke: 'Kenya',\n kg: 'Kyrgyzstan',\n kh: 'Cambodia',\n ki: 'Kiribati',\n km: 'Comoros',\n kn: 'Saint Kitts and Nevis',\n kp: 'North Korea',\n kr: 'South Korea',\n kw: 'Kuwait',\n ky: 'Cayman Islands',\n kz: 'Kazakhstan',\n la: 'Laos',\n lb: 'Lebanon',\n lc: 'Saint Lucia',\n li: 'Liechtenstein',\n lk: 'Sri Lanka',\n lr: 'Liberia',\n ls: 'Lesotho',\n lt: 'Lithuania',\n lu: 'Luxembourg',\n lv: 'Latvia',\n ly: 'Libya',\n ma: 'Morocco',\n mc: 'Monaco',\n md: 'Moldova',\n me: 'Montenegro',\n mf: 'Saint Martin',\n mg: 'Madagascar',\n mh: 'Marshall Islands',\n mk: 'North Macedonia',\n ml: 'Mali',\n mm: 'Myanmar',\n mn: 'Mongolia',\n mo: 'Macau',\n mp: 'Northern Mariana Islands',\n mq: 'Martinique',\n mr: 'Mauritania',\n ms: 'Montserrat',\n mt: 'Malta',\n mu: 'Mauritius',\n mv: 'Maldives',\n mw: 'Malawi',\n mx: 'Mexico',\n 'mx-agu': 'Aguascalientes',\n 'mx-bcn': 'Baja California',\n 'mx-bcs': 'Baja California Sur',\n 'mx-cam': 'Campeche',\n 'mx-chh': 'Chihuahua',\n 'mx-chp': 'Chiapas',\n 'mx-cmx': 'Mexico City',\n 'mx-coa': 'Coahuila',\n 'mx-col': 'Colima',\n 'mx-dur': 'Durango',\n 'mx-gro': 'Guerrero',\n 'mx-gua': 'Guanajuato',\n 'mx-hid': 'Hidalgo',\n 'mx-jal': 'Jalisco',\n 'mx-mex': 'State of Mexico',\n 'mx-mic': 'Michoacán',\n 'mx-mor': 'Morelos',\n 'mx-nay': 'Nayarit',\n 'mx-nle': 'Nuevo León',\n 'mx-oax': 'Oaxaca',\n 'mx-pue': 'Puebla',\n 'mx-que': 'Querétaro',\n 'mx-roo': 'Quintana Roo',\n 'mx-sin': 'Sinaloa',\n 'mx-slp': 'San Luis Potosí',\n 'mx-son': 'Sonora',\n 'mx-tab': 'Tabasco',\n 'mx-tam': 'Tamaulipas',\n 'mx-tla': 'Tlaxcala',\n 'mx-ver': 'Veracruz',\n 'mx-yuc': 'Yucatán',\n 'mx-zac': 'Zacatecas',\n my: 'Malaysia',\n mz: 'Mozambique',\n na: 'Namibia',\n nc: 'New Caledonia',\n ne: 'Niger',\n nf: 'Norfolk Island',\n ng: 'Nigeria',\n ni: 'Nicaragua',\n nl: 'Netherlands',\n no: 'Norway',\n np: 'Nepal',\n nr: 'Nauru',\n nu: 'Niue',\n nz: 'New Zealand',\n om: 'Oman',\n pa: 'Panama',\n pe: 'Peru',\n pf: 'French Polynesia',\n pg: 'Papua New Guinea',\n ph: 'Philippines',\n pk: 'Pakistan',\n pl: 'Poland',\n 'pl-02': 'Lower Silesia',\n 'pl-04': 'Kuyavia-Pomerania',\n 'pl-06': 'Lublin',\n 'pl-08': 'Lubusz',\n 'pl-10': 'Łódź',\n 'pl-12': 'Lesser Poland',\n 'pl-14': 'Masovia',\n 'pl-16': 'Opole',\n 'pl-18': 'Subcarpathia',\n 'pl-20': 'Podlaskie',\n 'pl-22': 'Pomerania',\n 'pl-24': 'Silesia',\n 'pl-26': 'Holy Cross',\n 'pl-28': 'Warmia-Masuria',\n 'pl-30': 'Greater Poland',\n 'pl-32': 'West Pomerania',\n pm: 'Saint Pierre and Miquelon',\n pn: 'Pitcairn Islands',\n pr: 'Puerto Rico',\n ps: 'Palestine',\n pt: 'Portugal',\n 'pt-01': 'Aveiro',\n 'pt-02': 'Beja',\n 'pt-03': 'Braga',\n 'pt-04': 'Bragança',\n 'pt-05': 'Castelo Branco',\n 'pt-06': 'Coimbra',\n 'pt-07': 'Évora',\n 'pt-08': 'Faro',\n 'pt-09': 'Guarda',\n 'pt-10': 'Leiria',\n 'pt-11': 'Lisbon',\n 'pt-12': 'Portalegre',\n 'pt-13': 'Porto',\n 'pt-14': 'Santarém',\n 'pt-15': 'Setúbal',\n 'pt-16': 'Viana do Castelo',\n 'pt-17': 'Vila Real',\n 'pt-18': 'Viseu',\n 'pt-20': 'Azores',\n 'pt-30': 'Madeira',\n pw: 'Palau',\n py: 'Paraguay',\n qa: 'Qatar',\n re: 'Réunion',\n ro: 'Romania',\n rs: 'Serbia',\n ru: 'Russia',\n rw: 'Rwanda',\n sa: 'Saudi Arabia',\n sb: 'Solomon Islands',\n sc: 'Seychelles',\n sd: 'Sudan',\n se: 'Sweden',\n sg: 'Singapore',\n sh: 'Saint Helena, Ascension and Tristan da Cunha',\n si: 'Slovenia',\n sj: 'Svalbard and Jan Mayen',\n sk: 'Slovakia',\n sl: 'Sierra Leone',\n sm: 'San Marino',\n sn: 'Senegal',\n so: 'Somalia',\n sr: 'Suriname',\n ss: 'South Sudan',\n st: 'São Tomé and Príncipe',\n sv: 'El Salvador',\n sx: 'Sint Maarten',\n sy: 'Syria',\n sz: 'Eswatini (Swaziland)',\n ta: 'Tristan da Cunha',\n tc: 'Turks and Caicos Islands',\n td: 'Chad',\n tf: 'French Southern and Antarctic Lands',\n tg: 'Togo',\n th: 'Thailand',\n tj: 'Tajikistan',\n tk: 'Tokelau',\n tl: 'Timor-Leste',\n tm: 'Turkmenistan',\n tn: 'Tunisia',\n to: 'Tonga',\n tr: 'Turkey',\n tt: 'Trinidad and Tobago',\n tv: 'Tuvalu',\n tw: 'Taiwan',\n tz: 'Tanzania',\n ua: 'Ukraine',\n ug: 'Uganda',\n um: 'United States Minor Outlying Islands',\n un: 'United Nations',\n us: 'United States',\n 'us-ak': 'Alaska',\n 'us-al': 'Alabama',\n 'us-ar': 'Arkansas',\n 'us-az': 'Arizona',\n 'us-ca': 'California',\n 'us-co': 'Colorado',\n 'us-ct': 'Connecticut',\n 'us-de': 'Delaware',\n 'us-fl': 'Florida',\n 'us-ga': 'Georgia',\n 'us-hi': 'Hawaii',\n 'us-ia': 'Iowa',\n 'us-id': 'Idaho',\n 'us-il': 'Illinois',\n 'us-in': 'Indiana',\n 'us-ks': 'Kansas',\n 'us-ky': 'Kentucky',\n 'us-la': 'Louisiana',\n 'us-ma': 'Massachusetts',\n 'us-md': 'Maryland',\n 'us-me': 'Maine',\n 'us-mi': 'Michigan',\n 'us-mn': 'Minnesota',\n 'us-mo': 'Missouri',\n 'us-ms': 'Mississippi',\n 'us-mt': 'Montana',\n 'us-nc': 'North Carolina',\n 'us-nd': 'North Dakota',\n 'us-ne': 'Nebraska',\n 'us-nh': 'New Hampshire',\n 'us-nj': 'New Jersey',\n 'us-nm': 'New Mexico',\n 'us-nv': 'Nevada',\n 'us-ny': 'New York',\n 'us-oh': 'Ohio',\n 'us-ok': 'Oklahoma',\n 'us-or': 'Oregon',\n 'us-pa': 'Pennsylvania',\n 'us-ri': 'Rhode Island',\n 'us-sc': 'South Carolina',\n 'us-sd': 'South Dakota',\n 'us-tn': 'Tennessee',\n 'us-tx': 'Texas',\n 'us-ut': 'Utah',\n 'us-va': 'Virginia',\n 'us-vt': 'Vermont',\n 'us-wa': 'Washington',\n 'us-wi': 'Wisconsin',\n 'us-wv': 'West Virginia',\n 'us-wy': 'Wyoming',\n uy: 'Uruguay',\n uz: 'Uzbekistan',\n va: 'Vatican City (Holy See)',\n vc: 'Saint Vincent and the Grenadines',\n ve: 'Venezuela',\n vg: 'British Virgin Islands',\n vi: 'United States Virgin Islands',\n vn: 'Vietnam',\n vu: 'Vanuatu',\n wf: 'Wallis and Futuna',\n ws: 'Samoa',\n xk: 'Kosovo',\n ye: 'Yemen',\n yt: 'Mayotte',\n za: 'South Africa',\n zm: 'Zambia',\n zw: 'Zimbabwe',\n} as const;\n\nexport type CountryCode = keyof typeof FLAGS;\n\nexport const COUNTRY_CODES = Object.keys(FLAGS) as CountryCode[];\n","export class FlagResizerError extends Error {\n public override readonly name = 'FlagResizerError';\n\n public constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n }\n}\n","import path from 'node:path';\n\nimport { loadConfig } from 'c12';\nimport { z } from 'zod';\n\nimport { COUNTRY_CODES, FLAGS, type CountryCode } from './data/flags.js';\nimport { FlagResizerError } from './errors.js';\nimport type {\n FlagFormat,\n FlagFilterValue,\n FlagResizerConfig,\n GenerateOptions,\n ProfileConfig,\n ResolvedConfiguration,\n ResolvedProfileConfig,\n} from './types.js';\n\nconst countryCodeSchema = z.enum(COUNTRY_CODES as [CountryCode, ...CountryCode[]]);\nconst filterPatternSchema = z\n .string()\n .regex(/^(?=.*\\*)[a-z*]+(?:-[a-z*]+)*$/u, 'must be a lowercase flag code or a pattern using \"*\"');\nconst filterValueSchema = z.union([countryCodeSchema, filterPatternSchema]);\nconst formatSchema = z.enum(['png', 'webp']);\nconst sizeSchema = z.tuple([\n z.number().int().positive('width must be a positive integer'),\n z.number().int().positive('height must be a positive integer'),\n]);\nconst formatOutputSchema = z\n .object({\n dir: z.string().trim().min(1),\n publicPath: z.string().trim().min(1),\n })\n .strict();\nconst profileSchema = z\n .object({\n filter: z\n .object({\n type: z.enum(['whitelist', 'blacklist']),\n values: z.array(filterValueSchema),\n })\n .strict(),\n sizes: z.array(sizeSchema).min(1),\n quality: z.number().int().min(1).max(100),\n formats: z.array(formatSchema).min(1),\n output: z\n .object({\n png: formatOutputSchema.optional(),\n webp: formatOutputSchema.optional(),\n ts: z.string().trim().min(1),\n })\n .strict(),\n })\n .strict();\nconst configSchema = z.record(z.string().trim().min(1), profileSchema);\n\ninterface LoadedConfig {\n raw: unknown;\n baseDir: string;\n configFile?: string;\n}\n\nexport function defineConfig<const T extends FlagResizerConfig>(config: T): T {\n return config;\n}\n\nfunction formatValidationError(error: z.ZodError): string {\n return error.issues\n .map((issue) => {\n const location = issue.path.length > 0 ? issue.path.join('.') : 'config';\n const received = issue.code === 'invalid_value' ? ` (${String(issue.input)})` : '';\n return `${location}: ${issue.message}${received}`;\n })\n .join('\\n');\n}\n\nfunction preflightFormatTypos(raw: unknown): void {\n if (typeof raw !== 'object' || raw === null) return;\n\n for (const [profileName, value] of Object.entries(raw)) {\n if (typeof value !== 'object' || value === null) continue;\n const formats: unknown = Reflect.get(value, 'formats');\n if (Array.isArray(formats) && formats.includes('wepb')) {\n throw new FlagResizerError(\n `Profile \"${profileName}\" contains format \"wepb\". Did you mean \"webp\"?`,\n );\n }\n }\n}\n\nfunction normalizePublicPath(publicPath: string): string {\n const normalized = publicPath.replace(/\\/+$/u, '');\n return normalized === '' ? '/' : normalized;\n}\n\nfunction assertUniqueValues(profileName: string, profile: ProfileConfig): void {\n const formats = new Set(profile.formats);\n if (formats.size !== profile.formats.length) {\n throw new FlagResizerError(`Profile \"${profileName}\" contains duplicate formats.`);\n }\n\n const sizes = new Set(profile.sizes.map(([width, height]) => `${width}x${height}`));\n if (sizes.size !== profile.sizes.length) {\n throw new FlagResizerError(`Profile \"${profileName}\" contains duplicate sizes.`);\n }\n\n const countries = new Set(profile.filter.values);\n if (countries.size !== profile.filter.values.length) {\n throw new FlagResizerError(`Profile \"${profileName}\" contains duplicate filter values.`);\n }\n}\n\nfunction assertConsistentRatio(profileName: string, profile: ProfileConfig): void {\n const first = profile.sizes[0];\n if (!first) return;\n\n const [baseWidth, baseHeight] = first;\n for (const [width, height] of profile.sizes.slice(1)) {\n if (width * baseHeight !== height * baseWidth) {\n throw new FlagResizerError(\n `Profile \"${profileName}\" mixes aspect ratios: ${baseWidth}x${baseHeight} and ${width}x${height}.`,\n );\n }\n }\n}\n\nfunction matchesFilterValue(code: CountryCode, value: FlagFilterValue): boolean {\n if (!value.includes('*')) return code === value;\n return new RegExp(`^${value.split('*').join('.*')}$`, 'u').test(code);\n}\n\nfunction assertFilterValuesMatch(profileName: string, profile: ProfileConfig): void {\n for (const value of profile.filter.values) {\n if (!COUNTRY_CODES.some((code) => matchesFilterValue(code, value))) {\n throw new FlagResizerError(\n `Profile \"${profileName}\" contains filter pattern \"${value}\" that matches no bundled flags.`,\n );\n }\n }\n}\n\nfunction selectCountries(profile: ProfileConfig): readonly CountryCode[] {\n return COUNTRY_CODES.filter((code) => {\n const matches = profile.filter.values.some((value) => matchesFilterValue(code, value));\n return profile.filter.type === 'whitelist' ? matches : !matches;\n });\n}\n\nfunction resolveProfile(\n name: string,\n profile: ProfileConfig,\n baseDir: string,\n): ResolvedProfileConfig {\n assertUniqueValues(name, profile);\n assertConsistentRatio(name, profile);\n assertFilterValuesMatch(name, profile);\n\n for (const format of profile.formats) {\n if (!profile.output[format]) {\n throw new FlagResizerError(\n `Profile \"${name}\" enables \"${format}\" but output.${format} is missing.`,\n );\n }\n }\n\n return {\n ...profile,\n name,\n countries: selectCountries(profile),\n output: {\n ...(profile.output.png\n ? {\n png: {\n dir: path.resolve(baseDir, profile.output.png.dir),\n publicPath: normalizePublicPath(profile.output.png.publicPath),\n },\n }\n : {}),\n ...(profile.output.webp\n ? {\n webp: {\n dir: path.resolve(baseDir, profile.output.webp.dir),\n publicPath: normalizePublicPath(profile.output.webp.publicPath),\n },\n }\n : {}),\n ts: path.resolve(baseDir, profile.output.ts),\n },\n };\n}\n\nfunction profileTargets(profile: ResolvedProfileConfig): Iterable<string> {\n const targets: string[] = [profile.output.ts];\n\n for (const format of profile.formats) {\n const output = profile.output[format];\n if (!output) continue;\n for (const [width, height] of profile.sizes) {\n for (const code of profile.countries) {\n targets.push(path.join(output.dir, `${width}x${height}`, `${code}.${format}`));\n }\n }\n }\n\n return targets;\n}\n\nfunction assertNoTargetCollisions(profiles: readonly ResolvedProfileConfig[]): void {\n const owners = new Map<string, string>();\n\n for (const profile of profiles) {\n for (const target of profileTargets(profile)) {\n const owner = owners.get(target);\n if (owner) {\n throw new FlagResizerError(\n `Profiles \"${owner}\" and \"${profile.name}\" both generate ${target}.`,\n );\n }\n owners.set(target, profile.name);\n }\n }\n}\n\nasync function loadRawConfiguration(options: GenerateOptions): Promise<LoadedConfig> {\n const cwd = path.resolve(options.cwd ?? process.cwd());\n if ('config' in options) {\n return { raw: options.config, baseDir: cwd };\n }\n\n const requestedFile = options.configFile ? path.resolve(cwd, options.configFile) : undefined;\n\n try {\n const result = await loadConfig({\n name: 'flag-resizer',\n cwd,\n ...(requestedFile ? { configFile: requestedFile } : {}),\n configFileRequired: true,\n rcFile: false,\n globalRc: false,\n packageJson: false,\n dotenv: false,\n envName: false,\n extend: false,\n });\n const discoveredFile =\n typeof result.configFile === 'string' ? path.resolve(result.configFile) : requestedFile;\n\n return {\n raw: result.config,\n baseDir: discoveredFile ? path.dirname(discoveredFile) : cwd,\n ...(discoveredFile ? { configFile: discoveredFile } : {}),\n };\n } catch (error) {\n const target = requestedFile ?? path.join(cwd, 'flag-resizer.config.*');\n throw new FlagResizerError(`Unable to load flag-resizer configuration from ${target}.`, {\n cause: error,\n });\n }\n}\n\nexport async function resolveConfiguration(\n options: GenerateOptions,\n): Promise<ResolvedConfiguration> {\n const loaded = await loadRawConfiguration(options);\n preflightFormatTypos(loaded.raw);\n\n const parsed = configSchema.safeParse(loaded.raw);\n if (!parsed.success) {\n throw new FlagResizerError(\n `Invalid flag-resizer configuration:\\n${formatValidationError(parsed.error)}`,\n );\n }\n\n const entries = Object.entries(parsed.data);\n if (entries.length === 0) {\n throw new FlagResizerError('The configuration must contain at least one profile.');\n }\n\n const allProfiles = entries.map(([name, profile]) =>\n resolveProfile(name, profile as ProfileConfig, loaded.baseDir),\n );\n assertNoTargetCollisions(allProfiles);\n\n const requested = options.profiles;\n const selected =\n requested && requested.length > 0\n ? requested.map((name) => {\n const profile = allProfiles.find((candidate) => candidate.name === name);\n if (!profile) {\n throw new FlagResizerError(\n `Unknown profile \"${name}\". Available profiles: ${allProfiles\n .map((candidate) => candidate.name)\n .join(', ')}.`,\n );\n }\n return profile;\n })\n : allProfiles;\n\n if (new Set(selected.map((profile) => profile.name)).size !== selected.length) {\n throw new FlagResizerError('A profile was selected more than once.');\n }\n\n return {\n baseDir: loaded.baseDir,\n profiles: selected,\n ...(loaded.configFile ? { configFile: loaded.configFile } : {}),\n };\n}\n\nexport function getCountryName(code: CountryCode): string {\n return FLAGS[code];\n}\n\nexport function isFlagFormat(value: string): value is FlagFormat {\n return value === 'png' || value === 'webp';\n}\n","import { FLAGS } from './data/flags.js';\nimport type { FlagFormat, ResolvedProfileConfig } from './types.js';\n\nfunction quote(value: string): string {\n return JSON.stringify(value);\n}\n\nfunction propertyKey(value: string): string {\n return /^[A-Za-z_$][\\w$]*$/u.test(value) ? value : quote(value);\n}\n\nexport function createTypeScriptManifest(profile: ResolvedProfileConfig): string {\n const flags = profile.countries\n .map((code) => ` ${propertyKey(code)}: ${quote(FLAGS[code])},`)\n .join('\\n');\n const sizes = profile.sizes.map(([width, height]) => `${width}x${height}`);\n const sizeValues = sizes.map((size) => ` ${quote(size)},`).join('\\n');\n const dimensions = profile.sizes\n .map(\n ([width, height]) =>\n ` ${quote(`${width}x${height}`)}: { width: ${width}, height: ${height} },`,\n )\n .join('\\n');\n const formats = profile.formats.map((format) => ` ${quote(format)},`).join('\\n');\n const publicPaths = profile.formats\n .map((format: FlagFormat) => {\n const output = profile.output[format];\n if (!output) throw new Error(`Missing resolved output for ${format}.`);\n return ` ${format}: ${quote(output.publicPath)},`;\n })\n .join('\\n');\n\n return `/**\n * Generated by script 🍺\n * Do not edit manually.\n */\n\nexport const FLAGS = {\n${flags}\n} as const;\n\nexport type CountryCode = keyof typeof FLAGS;\n\nexport const FLAG_SIZES = [\n${sizeValues}\n] as const;\n\nexport type FlagSize = (typeof FLAG_SIZES)[number];\n\nexport const FLAG_DIMENSIONS = {\n${dimensions}\n} as const satisfies Record<FlagSize, { width: number; height: number }>;\n\nexport const FLAG_FORMATS = [\n${formats}\n] as const;\n\nexport type FlagFormat = (typeof FLAG_FORMATS)[number];\n\nexport const FLAG_PUBLIC_PATHS = {\n${publicPaths}\n} as const satisfies Record<FlagFormat, string>;\n\nexport function getFlagPath(\n code: CountryCode,\n size: FlagSize,\n format: FlagFormat,\n): string {\n const publicPath: string = FLAG_PUBLIC_PATHS[format];\n const basePath = publicPath === '/' ? '' : publicPath;\n return \\`\\${basePath}/\\${size}/\\${code}.\\${format}\\`;\n}\n`;\n}\n","import {\n access,\n copyFile,\n mkdir,\n mkdtemp,\n readFile,\n rename,\n rm,\n rmdir,\n stat,\n unlink,\n writeFile,\n} from 'node:fs/promises';\nimport { availableParallelism } from 'node:os';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { randomUUID } from 'node:crypto';\n\nimport sharp from 'sharp';\n\nimport { resolveConfiguration } from './config.js';\nimport type { CountryCode } from './data/flags.js';\nimport { FlagResizerError } from './errors.js';\nimport { createTypeScriptManifest } from './generated-typescript.js';\nimport type {\n FlagFormat,\n GenerateOptions,\n GenerationResult,\n ProfileGenerationResult,\n ResolvedProfileConfig,\n} from './types.js';\n\nconst PACKAGE_ROOT = fileURLToPath(new URL('../', import.meta.url));\nconst FLAGS_DIRECTORY = path.join(PACKAGE_ROOT, 'flags');\nconst ATTRIBUTION_FILE = path.join(PACKAGE_ROOT, 'ATTRIBUTION.txt');\nconst GRAPHICS_LICENSE_FILE = path.join(PACKAGE_ROOT, 'LICENSE-GRAPHICS');\nconst MANIFEST_VERSION = 1;\n\ntype ManagedFileKind = 'attribution' | 'image' | 'license' | 'typescript';\ntype FileStatus = 'created' | 'updated' | 'unchanged';\n\ninterface ManagedFile {\n root: string;\n relativePath: string;\n kind: ManagedFileKind;\n}\n\ninterface ProfileManifest {\n files: ManagedFile[];\n}\n\ninterface ManagedManifest {\n version: typeof MANIFEST_VERSION;\n profiles: Record<string, ProfileManifest>;\n}\n\ninterface PlannedFile {\n entry: ManagedFile;\n target: string;\n image: boolean;\n createContent: () => Promise<Buffer>;\n}\n\ninterface GenerationPlan {\n tasks: PlannedFile[];\n filesByProfile: Map<string, ManagedFile[]>;\n imageCountByProfile: Map<string, number>;\n}\n\nfunction emptyManifest(): ManagedManifest {\n return { version: MANIFEST_VERSION, profiles: {} };\n}\n\nfunction entryTarget(entry: ManagedFile): string {\n return path.resolve(entry.root, entry.relativePath);\n}\n\nfunction entryKey(entry: ManagedFile): string {\n return entryTarget(entry);\n}\n\nfunction assertSafeManagedFile(entry: ManagedFile): void {\n if (!path.isAbsolute(entry.root)) {\n throw new FlagResizerError('The managed manifest contains a non-absolute output root.');\n }\n if (path.isAbsolute(entry.relativePath) || entry.relativePath.includes('\\0')) {\n throw new FlagResizerError('The managed manifest contains an unsafe file path.');\n }\n\n const target = entryTarget(entry);\n const relative = path.relative(entry.root, target);\n if (relative === '' || relative === '..' || relative.startsWith(`..${path.sep}`)) {\n throw new FlagResizerError('The managed manifest contains a path outside its output root.');\n }\n\n const portable = entry.relativePath.split(path.sep).join('/');\n const valid =\n (entry.kind === 'attribution' && portable === 'ATTRIBUTION.txt') ||\n (entry.kind === 'license' && portable === 'LICENSE-GRAPHICS') ||\n (entry.kind === 'typescript' && /^[^/]+\\.ts$/u.test(portable)) ||\n (entry.kind === 'image' &&\n /^[1-9]\\d*x[1-9]\\d*\\/(?:[a-z]{2}|ar-(?:[a-h]|[j-n]|[p-z])|at-[1-9]|au-(?:act|nsw|nt|qld|sa|tas|vic|wa)|br-(?:ac|al|am|ap|ba|ce|df|es|go|ma|mg|ms|mt|pa|pb|pe|pi|pr|rj|rn|ro|rr|rs|sc|se|sp|to)|ca-(?:ab|bc|mb|nb|nl|ns|nt|nu|on|pe|qc|sk|yt)|ch-(?:ag|ai|ar|be|bl|bs|fr|ge|gl|gr|ju|lu|ne|nw|ow|sg|sh|so|sz|tg|ti|ur|vd|vs|zg|zh)|co-(?:ama|ant|ara|atl|bol|boy|cal|caq|cas|cau|ces|cho|cor|cun|dc|gua|guv|hui|lag|mag|met|nar|nsa|put|qui|ris|san|sap|suc|tol|vac|vau|vid)|de-(?:bb|be|bw|by|hb|he|hh|mv|ni|nw|rp|sh|sl|sn|st|th)|es-(?:an|ar|as|cb|ce|cl|cm|cn|ct|ex|ga|ib|mc|md|ml|nc|pv|ri|vc)|gb-(?:eng|nir|sct|wls)|gr-(?:69|a|b|c)|it-(?:21|23|25|32|34|36|42|45|52|55|57|62|65|67|72|75|77|78|82|88)|jp-(?:0[1-9]|[1-3]\\d|4[0-7])|mx-(?:agu|bcn|bcs|cam|chh|chp|cmx|coa|col|dur|gro|gua|hid|jal|mex|mic|mor|nay|nle|oax|pue|que|roo|sin|slp|son|tab|tam|tla|ver|yuc|zac)|pl-(?:02|04|06|08|10|12|14|16|18|20|22|24|26|28|30|32)|pt-(?:0[1-9]|1[0-8]|20|30)|us-(?:ak|al|ar|az|ca|co|ct|de|fl|ga|hi|ia|id|il|in|ks|ky|la|ma|md|me|mi|mn|mo|ms|mt|nc|nd|ne|nh|nj|nm|nv|ny|oh|ok|or|pa|ri|sc|sd|tn|tx|ut|va|vt|wa|wi|wv|wy))\\.(?:png|webp)$/u.test(\n portable,\n ));\n\n if (!valid) {\n throw new FlagResizerError(\n `The managed manifest contains an invalid ${entry.kind} path: ${entry.relativePath}.`,\n );\n }\n}\n\nfunction managedFile(target: string, root: string, kind: ManagedFileKind): ManagedFile {\n const entry = {\n root: path.resolve(root),\n relativePath: path.relative(path.resolve(root), path.resolve(target)),\n kind,\n };\n assertSafeManagedFile(entry);\n return entry;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction parseManifest(value: unknown): ManagedManifest {\n if (!isRecord(value) || value['version'] !== MANIFEST_VERSION || !isRecord(value['profiles'])) {\n throw new FlagResizerError('The managed manifest has an unsupported or invalid structure.');\n }\n\n const profiles: Record<string, ProfileManifest> = {};\n for (const [profileName, profileValue] of Object.entries(value['profiles'])) {\n if (!isRecord(profileValue) || !Array.isArray(profileValue['files'])) {\n throw new FlagResizerError(`The manifest entry for profile \"${profileName}\" is invalid.`);\n }\n\n const files = profileValue['files'].map((file): ManagedFile => {\n if (\n !isRecord(file) ||\n typeof file['root'] !== 'string' ||\n typeof file['relativePath'] !== 'string' ||\n !['attribution', 'image', 'license', 'typescript'].includes(String(file['kind']))\n ) {\n throw new FlagResizerError(\n `The manifest contains an invalid file owned by profile \"${profileName}\".`,\n );\n }\n const entry: ManagedFile = {\n root: file['root'],\n relativePath: file['relativePath'],\n kind: file['kind'] as ManagedFileKind,\n };\n assertSafeManagedFile(entry);\n return entry;\n });\n profiles[profileName] = { files };\n }\n\n return { version: MANIFEST_VERSION, profiles };\n}\n\nasync function pathExists(file: string): Promise<boolean> {\n try {\n await access(file);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function readManifest(file: string): Promise<ManagedManifest> {\n try {\n return parseManifest(JSON.parse(await readFile(file, 'utf8')) as unknown);\n } catch (error) {\n if (isRecord(error) && error['code'] === 'ENOENT') {\n return emptyManifest();\n }\n if (error instanceof FlagResizerError) throw error;\n throw new FlagResizerError(`Unable to read managed manifest ${file}.`, { cause: error });\n }\n}\n\nfunction resolveConcurrency(value: number | undefined): number {\n if (value !== undefined && (!Number.isInteger(value) || value < 1)) {\n throw new FlagResizerError('concurrency must be a positive integer.');\n }\n return value ?? Math.max(1, Math.min(8, availableParallelism()));\n}\n\nasync function runBounded<T>(\n items: readonly T[],\n concurrency: number,\n worker: (item: T, index: number) => Promise<void>,\n): Promise<void> {\n let nextIndex = 0;\n\n async function runWorker(): Promise<void> {\n while (nextIndex < items.length) {\n const index = nextIndex;\n nextIndex += 1;\n const item = items[index];\n if (item) await worker(item, index);\n }\n }\n\n await Promise.all(\n Array.from({ length: Math.min(concurrency, Math.max(1, items.length)) }, runWorker),\n );\n}\n\nfunction svgDensity(width: number, height: number): number {\n const scale = Math.max(width, height) / 36;\n return Math.max(72, Math.ceil(scale * 72));\n}\n\nasync function createImage(\n svg: Buffer,\n width: number,\n height: number,\n format: FlagFormat,\n quality: number,\n): Promise<Buffer> {\n const pipeline = sharp(svg, { density: svgDensity(width, height) })\n .resize(width, height, {\n fit: 'cover',\n position: 'centre',\n })\n .ensureAlpha();\n\n if (format === 'png') {\n return pipeline\n .png({\n quality,\n compressionLevel: 9,\n adaptiveFiltering: true,\n effort: 7,\n })\n .toBuffer();\n }\n\n return pipeline.webp({ quality, effort: 4 }).toBuffer();\n}\n\nfunction addProfileFile(\n filesByProfile: Map<string, ManagedFile[]>,\n profileName: string,\n entry: ManagedFile,\n): void {\n const entries = filesByProfile.get(profileName) ?? [];\n entries.push(entry);\n filesByProfile.set(profileName, entries);\n}\n\nfunction createGenerationPlan(profiles: readonly ResolvedProfileConfig[]): GenerationPlan {\n const taskByTarget = new Map<string, PlannedFile>();\n const filesByProfile = new Map<string, ManagedFile[]>();\n const imageCountByProfile = new Map<string, number>();\n const svgCache = new Map<CountryCode, Promise<Buffer>>();\n let attributionContent: Promise<Buffer> | undefined;\n let licenseContent: Promise<Buffer> | undefined;\n\n const readSvg = (code: CountryCode): Promise<Buffer> => {\n let content = svgCache.get(code);\n if (!content) {\n content = readFile(path.join(FLAGS_DIRECTORY, `${code}.svg`));\n svgCache.set(code, content);\n }\n return content;\n };\n\n const register = (\n profileName: string,\n entry: ManagedFile,\n image: boolean,\n createContent: () => Promise<Buffer>,\n ): void => {\n const target = entryTarget(entry);\n if (!taskByTarget.has(target)) {\n taskByTarget.set(target, { entry, target, image, createContent });\n }\n addProfileFile(filesByProfile, profileName, entry);\n };\n\n for (const profile of profiles) {\n const typeScriptEntry = managedFile(\n profile.output.ts,\n path.dirname(profile.output.ts),\n 'typescript',\n );\n register(profile.name, typeScriptEntry, false, () =>\n Promise.resolve(Buffer.from(createTypeScriptManifest(profile))),\n );\n\n let imageCount = 0;\n for (const format of profile.formats) {\n const output = profile.output[format];\n if (!output) {\n throw new FlagResizerError(\n `Profile \"${profile.name}\" has no resolved output for ${format}.`,\n );\n }\n\n const attributionEntry = managedFile(\n path.join(output.dir, 'ATTRIBUTION.txt'),\n output.dir,\n 'attribution',\n );\n register(profile.name, attributionEntry, false, () => {\n attributionContent ??= readFile(ATTRIBUTION_FILE);\n return attributionContent;\n });\n\n const licenseEntry = managedFile(\n path.join(output.dir, 'LICENSE-GRAPHICS'),\n output.dir,\n 'license',\n );\n register(profile.name, licenseEntry, false, () => {\n licenseContent ??= readFile(GRAPHICS_LICENSE_FILE);\n return licenseContent;\n });\n\n for (const [width, height] of profile.sizes) {\n for (const code of profile.countries) {\n const target = path.join(output.dir, `${width}x${height}`, `${code}.${format}`);\n const entry = managedFile(target, output.dir, 'image');\n register(profile.name, entry, true, async () =>\n createImage(await readSvg(code), width, height, format, profile.quality),\n );\n imageCount += 1;\n }\n }\n }\n imageCountByProfile.set(profile.name, imageCount);\n }\n\n return {\n tasks: [...taskByTarget.values()].sort((left, right) =>\n left.target.localeCompare(right.target),\n ),\n filesByProfile,\n imageCountByProfile,\n };\n}\n\nasync function buffersEqual(file: string, expected: Buffer): Promise<boolean> {\n try {\n const currentStat = await stat(file);\n if (currentStat.size !== expected.byteLength) return false;\n return (await readFile(file)).equals(expected);\n } catch (error) {\n if (isRecord(error) && error['code'] === 'ENOENT') return false;\n throw error;\n }\n}\n\nasync function writeStagedFile(target: string, staged: string): Promise<void> {\n await mkdir(path.dirname(target), { recursive: true });\n const temporaryTarget = path.join(\n path.dirname(target),\n `.${path.basename(target)}.${process.pid}.${randomUUID()}.tmp`,\n );\n\n try {\n await copyFile(staged, temporaryTarget);\n await rename(temporaryTarget, target);\n } finally {\n await rm(temporaryTarget, { force: true });\n }\n}\n\nasync function writeAtomic(target: string, content: string): Promise<void> {\n await mkdir(path.dirname(target), { recursive: true });\n const temporaryTarget = path.join(\n path.dirname(target),\n `.${path.basename(target)}.${process.pid}.${randomUUID()}.tmp`,\n );\n\n try {\n await writeFile(temporaryTarget, content);\n await rename(temporaryTarget, target);\n } finally {\n await rm(temporaryTarget, { force: true });\n }\n}\n\nasync function removeEmptyParents(start: string, root: string): Promise<void> {\n let directory = path.resolve(start);\n const resolvedRoot = path.resolve(root);\n\n while (directory !== resolvedRoot) {\n const relative = path.relative(resolvedRoot, directory);\n if (relative === '..' || relative.startsWith(`..${path.sep}`)) return;\n try {\n await rmdir(directory);\n } catch {\n return;\n }\n directory = path.dirname(directory);\n }\n}\n\nasync function pruneFile(entry: ManagedFile): Promise<boolean> {\n assertSafeManagedFile(entry);\n const target = entryTarget(entry);\n try {\n await unlink(target);\n await removeEmptyParents(path.dirname(target), entry.root);\n return true;\n } catch (error) {\n if (isRecord(error) && error['code'] === 'ENOENT') return false;\n throw new FlagResizerError(`Unable to remove stale generated file ${target}.`, {\n cause: error,\n });\n }\n}\n\nfunction sortedManifest(manifest: ManagedManifest): ManagedManifest {\n return {\n version: MANIFEST_VERSION,\n profiles: Object.fromEntries(\n Object.entries(manifest.profiles)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([profileName, profile]) => [\n profileName,\n {\n files: [...profile.files].sort((left, right) =>\n entryTarget(left).localeCompare(entryTarget(right)),\n ),\n },\n ]),\n ),\n };\n}\n\nfunction nextManifest(\n previous: ManagedManifest,\n plan: GenerationPlan,\n selectedProfiles: readonly ResolvedProfileConfig[],\n fullRun: boolean,\n): ManagedManifest {\n const profiles: Record<string, ProfileManifest> = fullRun ? {} : { ...previous.profiles };\n for (const profile of selectedProfiles) {\n profiles[profile.name] = { files: plan.filesByProfile.get(profile.name) ?? [] };\n }\n return sortedManifest({ version: MANIFEST_VERSION, profiles });\n}\n\nfunction staleEntries(previous: ManagedManifest, next: ManagedManifest): ManagedFile[] {\n const retainedTargets = new Set(\n Object.values(next.profiles).flatMap((profile) => profile.files.map(entryKey)),\n );\n const stale = new Map<string, ManagedFile>();\n\n for (const profile of Object.values(previous.profiles)) {\n for (const entry of profile.files) {\n const target = entryKey(entry);\n if (!retainedTargets.has(target)) stale.set(target, entry);\n }\n }\n return [...stale.values()];\n}\n\nfunction removedOwnershipCount(\n previous: ManagedManifest,\n next: ManagedManifest,\n profileName: string,\n): number {\n const nextFiles = new Set((next.profiles[profileName]?.files ?? []).map(entryKey));\n return (previous.profiles[profileName]?.files ?? []).filter(\n (entry) => !nextFiles.has(entryKey(entry)),\n ).length;\n}\n\nexport async function generate(options: GenerateOptions = {}): Promise<GenerationResult> {\n const started = performance.now();\n const concurrency = resolveConcurrency(options.concurrency);\n const resolved = await resolveConfiguration(options);\n const manifestFile = path.join(resolved.baseDir, '.flag-resizer', 'manifest.json');\n const previousManifest = await readManifest(manifestFile);\n const plan = createGenerationPlan(resolved.profiles);\n const fullRun = !options.profiles || options.profiles.length === 0;\n const manifest = nextManifest(previousManifest, plan, resolved.profiles, fullRun);\n const stale = staleEntries(previousManifest, manifest);\n const statuses = new Map<string, FileStatus>();\n const dryRun = options.dryRun ?? false;\n\n if (dryRun) {\n await runBounded(plan.tasks, concurrency, async (task) => {\n statuses.set(task.target, (await pathExists(task.target)) ? 'updated' : 'created');\n });\n } else {\n const stagingDirectory = await mkdtemp(path.join(os.tmpdir(), 'flag-resizer-'));\n const stagedFiles = new Map<string, string>();\n\n try {\n await runBounded(plan.tasks, concurrency, async (task, index) => {\n const content = await task.createContent();\n const exists = await pathExists(task.target);\n if (exists && (await buffersEqual(task.target, content))) {\n statuses.set(task.target, 'unchanged');\n return;\n }\n\n statuses.set(task.target, exists ? 'updated' : 'created');\n const staged = path.join(stagingDirectory, String(index));\n await writeFile(staged, content);\n stagedFiles.set(task.target, staged);\n });\n\n for (const task of plan.tasks) {\n const staged = stagedFiles.get(task.target);\n if (staged) await writeStagedFile(task.target, staged);\n }\n\n for (const entry of stale) await pruneFile(entry);\n await writeAtomic(manifestFile, `${JSON.stringify(manifest, null, 2)}\\n`);\n } catch (error) {\n throw new FlagResizerError('Flag generation failed before the manifest was committed.', {\n cause: error,\n });\n } finally {\n await rm(stagingDirectory, { recursive: true, force: true });\n }\n }\n\n const profiles: ProfileGenerationResult[] = resolved.profiles.map((profile) => {\n const entries = plan.filesByProfile.get(profile.name) ?? [];\n const counts = { created: 0, updated: 0, unchanged: 0 };\n for (const entry of entries) {\n const status = statuses.get(entryTarget(entry));\n if (status) counts[status] += 1;\n }\n\n return {\n name: profile.name,\n countries: profile.countries.length,\n images: plan.imageCountByProfile.get(profile.name) ?? 0,\n sizes: profile.sizes,\n formats: profile.formats,\n outputDirectories: Object.fromEntries(\n profile.formats.map((format) => [format, profile.output[format]?.dir]),\n ),\n ...counts,\n removed: removedOwnershipCount(previousManifest, manifest, profile.name),\n typeScriptFile: profile.output.ts,\n };\n });\n\n return {\n dryRun,\n durationMs: Math.round(performance.now() - started),\n ...(resolved.configFile ? { configFile: resolved.configFile } : {}),\n manifestFile,\n profiles,\n };\n}\n"],"mappings":";;;;;;;;;AAEA,MAAa,QAAQ;CACnB,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,IAAI;CACJ,IAAI;CACJ,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,IAAI;CACJ,UAAU;CACV,UAAU;CACV,SAAS;CACT,UAAU;CACV,SAAS;CACT,UAAU;CACV,UAAU;CACV,SAAS;CACT,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,SAAS;CACT,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,SAAS;CACT,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,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"}
|