Skip to content

Commit 24b84f3

Browse files
committed
Adds bin/make-test-dbs, a Node.js script that builds geonames.sqlite3 and
zips.sqlite3 without downloading anything from geonames.org. It uses cities-patch.txt as the main geonames data source along with minimal fixture files in test/fixtures/ covering all 60 countries and 141 admin1 regions referenced by cities-patch.txt. test/fixtures/countryInfo.txt - 60 countries (19-field TSV, geonames format) test/fixtures/admin1CodesASCII.txt - 141 admin1 regions (4-field TSV)
1 parent 332c489 commit 24b84f3

File tree

7 files changed

+505
-662
lines changed

7 files changed

+505
-662
lines changed

bin/make-test-dbs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#!/usr/bin/env node
2+
3+
// Builds geonames.sqlite3 and zips.sqlite3 for testing without downloading
4+
// from geonames.org. Uses cities-patch.txt as the main geonames data source
5+
// and minimal fixture files bundled in this repo.
6+
7+
import {buildGeonamesSqlite, makeZipsSqlite} from '@hebcal/geo-sqlite';
8+
import {pino} from 'pino';
9+
import {statSync} from 'fs';
10+
import path from 'path';
11+
12+
const outDir = process.cwd();
13+
const repoDir = path.join(outDir, 'node_modules/@hebcal/geo-sqlite');
14+
15+
const population = process.env.POPULATION ? +process.env.POPULATION : 0;
16+
17+
const logger = pino({
18+
level: 'info',
19+
transport: {
20+
target: 'pino-pretty',
21+
options: {translateTime: 'SYS:standard', ignore: 'pid,hostname'},
22+
},
23+
});
24+
25+
const geonamesDb = path.join(outDir, 'geonames.sqlite3');
26+
const zipsDb = path.join(outDir, 'zips.sqlite3');
27+
28+
await buildGeonamesSqlite({
29+
dbFilename: geonamesDb,
30+
countryInfotxt: path.join(repoDir, 'test/fixtures/countryInfo.txt'),
31+
cities5000txt: path.join(repoDir, 'cities-patch.txt'),
32+
citiesPatch: '/dev/null',
33+
admin1CodesASCIItxt: path.join(repoDir, 'test/fixtures/admin1CodesASCII.txt'),
34+
ILtxt: '/dev/null',
35+
ILalternate: '/dev/null',
36+
population,
37+
logger,
38+
});
39+
40+
makeZipsSqlite(
41+
zipsDb,
42+
path.join(repoDir, 'zips-dummy.sql'),
43+
);
44+
45+
const geoStat = statSync(geonamesDb);
46+
const zipStat = statSync(zipsDb);
47+
logger.info(`${geonamesDb}: ${(geoStat.size / 1024).toFixed(1)}K`);
48+
logger.info(`${zipsDb}: ${(zipStat.size / 1024).toFixed(1)}K`);

0 commit comments

Comments
 (0)