bend_puzzle/scripts/fetch-flag-assets.mjs

32 lines
2.3 KiB
JavaScript
Raw Permalink Normal View History

2026-07-30 15:13:53 +09:00
import fs from 'node:fs/promises';
import path from 'node:path';
import {fileURLToPath} from 'node:url';
const root=path.resolve(path.dirname(fileURLToPath(import.meta.url)),'..');
const output=path.join(root,'assets','flags');
const regions=`AC AD AE AF AG AI AL AM AO AQ AR AS AT AU AW AX AZ BA BB BD BE BF BG BH BI BJ BL BM BN BO BQ BR BS BT BV BW BY BZ CA CC CD CF CG CH CI CK CL CM CN CO CP CQ CR CU CV CW CX CY CZ DE DG DJ DK DM DO DZ EA EC EE EG EH ER ES ET EU FI FJ FK FM FO FR GA GB GD GE GF GG GH GI GL GM GN GP GQ GR GS GT GU GW GY HK HM HN HR HT HU IC ID IE IL IM IN IO IQ IR IS IT JE JM JO JP KE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS LT LU LV LY MA MC MD ME MF MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ NA NC NE NF NG NI NL NO NP NR NU NZ OM PA PE PF PG PH PK PL PM PN PR PS PT PW PY QA RE RO RS RU RW SA SB SC SD SE SG SH SI SJ SK SL SM SN SO SR SS ST SV SX SY SZ TA TC TD TF TG TH TJ TK TL TM TN TO TR TT TV TW TZ UA UG UM UN US UY UZ VA VC VE VG VI VN VU WF WS XK YE YT ZA ZM ZW`.split(' ');
const subdivisionKeys=[
'1f3f4-e0067-e0062-e0065-e006e-e0067-e007f',
'1f3f4-e0067-e0062-e0073-e0063-e0074-e007f',
'1f3f4-e0067-e0062-e0077-e006c-e0073-e007f'
];
const regionKey=code=>[...code].map(letter=>(0x1f1e6+letter.charCodeAt(0)-65).toString(16)).join('-');
const keys=[...regions.map(regionKey),...subdivisionKeys];
const base='https://cdn.jsdelivr.net/gh/jdecked/twemoji@latest';
await fs.mkdir(output,{recursive:true});
const failures=[];
for(let offset=0;offset<keys.length;offset+=24){
await Promise.all(keys.slice(offset,offset+24).map(async key=>{
try{
const response=await fetch(`${base}/assets/svg/${key}.svg`);
if(!response.ok)throw new Error(`${response.status} ${response.statusText}`);
await fs.writeFile(path.join(output,`${key}.svg`),Buffer.from(await response.arrayBuffer()));
}catch(error){failures.push(`${key}: ${error.message}`)}
}));
}
const licenseResponse=await fetch(`${base}/LICENSE-GRAPHICS`);
if(!licenseResponse.ok)throw new Error(`Twemoji license download failed: ${licenseResponse.status}`);
await fs.writeFile(path.join(output,'LICENSE-TWEMOJI.txt'),await licenseResponse.text(),'utf8');
if(failures.length)throw new Error(`Flag downloads failed:\n${failures.join('\n')}`);
console.log(`Downloaded ${keys.length} Twemoji flag SVG assets.`);