import fs from 'fs'; import { pipeline } from 'stream/promises'; import { join } from 'path'; import unzipper from 'unzipper'; const GEONAMES_DUMP = 'https://download.geonames.org/export/dump/allCountries.zip'; async function workDirectory() { const path = await fs.promises.mkdtemp(join(process.cwd(), '.gntmp-')); return { path, remove: async () => { await fs.promises.rm(path, { recursive: true, force: true }); }, }; } async function downloadGeodump({ path }) { const outfile = join(path, 'out.txt'); const httpStream = await fetch(GEONAMES_DUMP); pipeline(httpStream.body, unzipper.Extract({ path })); return outfile; } async function test() { const wd = await workDirectory(); await downloadGeodump(wd); } test().catch(console.error);