@hebcal/geo-sqlite 5.10.5 → 5.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -3
- package/bin/make-test-dbs +1 -1
- package/dist/build-geonames-sqlite.d.ts +28 -0
- package/dist/build-geonames-sqlite.js +309 -0
- package/dist/build-geonames-sqlite.js.map +1 -0
- package/dist/city2geonameid.json.d.ts +490 -0
- package/dist/city2geonameid.json.js +490 -0
- package/dist/city2geonameid.json.js.map +1 -0
- package/dist/geodb.d.ts +87 -0
- package/dist/geodb.js +451 -0
- package/dist/geodb.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +4 -1483
- package/dist/index.js.map +1 -0
- package/dist/make-zips-sqlite.d.ts +6 -0
- package/dist/make-zips-sqlite.js +15 -0
- package/dist/make-zips-sqlite.js.map +1 -0
- package/dist/munge.d.ts +6 -0
- package/dist/munge.js +13 -0
- package/dist/munge.js.map +1 -0
- package/dist/pkgVersion.d.ts +1 -0
- package/dist/pkgVersion.js +3 -0
- package/dist/pkgVersion.js.map +1 -0
- package/package.json +26 -30
- package/geo-sqlite.d.ts +0 -161
package/dist/geodb.js
ADDED
|
@@ -0,0 +1,451 @@
|
|
|
1
|
+
import { DatabaseSync } from 'node:sqlite';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import QuickLRU from 'quick-lru';
|
|
4
|
+
import { Location } from '@hebcal/core';
|
|
5
|
+
import { stateNames } from '@hebcal/cities';
|
|
6
|
+
import { transliterate } from 'transliteration';
|
|
7
|
+
import city2geonameid from './city2geonameid.json.js';
|
|
8
|
+
import { munge } from './munge.js';
|
|
9
|
+
import { version } from './pkgVersion.js';
|
|
10
|
+
const GEONAME_SQL = `SELECT
|
|
11
|
+
g.name as name,
|
|
12
|
+
g.asciiname as asciiname,
|
|
13
|
+
g.country as cc,
|
|
14
|
+
c.country as country,
|
|
15
|
+
a.asciiname as admin1,
|
|
16
|
+
g.latitude as latitude,
|
|
17
|
+
g.longitude as longitude,
|
|
18
|
+
g.population as population,
|
|
19
|
+
g.gtopo30 as elevation,
|
|
20
|
+
g.timezone as timezone
|
|
21
|
+
FROM geoname g
|
|
22
|
+
LEFT JOIN country c on g.country = c.iso
|
|
23
|
+
LEFT JOIN admin1 a on g.country||'.'||g.admin1 = a.key
|
|
24
|
+
WHERE g.geonameid = ?
|
|
25
|
+
`;
|
|
26
|
+
const GEONAME_ALL_SQL = `SELECT
|
|
27
|
+
g.geonameid as geonameid,
|
|
28
|
+
g.name as name,
|
|
29
|
+
g.asciiname as asciiname,
|
|
30
|
+
g.country as cc,
|
|
31
|
+
c.country as country,
|
|
32
|
+
a.asciiname as admin1,
|
|
33
|
+
g.latitude as latitude,
|
|
34
|
+
g.longitude as longitude,
|
|
35
|
+
g.population as population,
|
|
36
|
+
g.gtopo30 as elevation,
|
|
37
|
+
g.timezone as timezone
|
|
38
|
+
FROM geoname g
|
|
39
|
+
LEFT JOIN country c on g.country = c.iso
|
|
40
|
+
LEFT JOIN admin1 a on g.country||'.'||g.admin1 = a.key
|
|
41
|
+
`;
|
|
42
|
+
const ZIPCODE_SQL = `SELECT ZipCode,CityMixedCase,State,Latitude,Longitude,Elevation,
|
|
43
|
+
TimeZone,DayLightSaving,Population
|
|
44
|
+
FROM ZIPCodes_Primary WHERE ZipCode = ?`;
|
|
45
|
+
const ZIPCODE_ALL_SQL = `SELECT ZipCode,CityMixedCase,State,Latitude,Longitude,Elevation,
|
|
46
|
+
TimeZone,DayLightSaving,Population
|
|
47
|
+
FROM ZIPCodes_Primary`;
|
|
48
|
+
const ZIP_COMPLETE_SQL = `SELECT ZipCode,CityMixedCase,State,Latitude,Longitude,TimeZone,DayLightSaving,Population
|
|
49
|
+
FROM ZIPCodes_Primary
|
|
50
|
+
WHERE ZipCode >= ? AND ZipCode < ?
|
|
51
|
+
ORDER BY Population DESC
|
|
52
|
+
LIMIT 10`;
|
|
53
|
+
const ZIP_FULLTEXT_COMPLETE_SQL = `SELECT ZipCode
|
|
54
|
+
FROM ZIPCodes_CityFullText5
|
|
55
|
+
WHERE ZIPCodes_CityFullText5 MATCH ?
|
|
56
|
+
ORDER BY Population DESC
|
|
57
|
+
LIMIT 20`;
|
|
58
|
+
const GEONAME_COMPLETE_SQL = `SELECT geonameid, longname, city, admin1, country
|
|
59
|
+
FROM geoname_fulltext
|
|
60
|
+
WHERE geoname_fulltext MATCH ?
|
|
61
|
+
ORDER BY population DESC
|
|
62
|
+
LIMIT 20`;
|
|
63
|
+
/** Wrapper around sqlite databases */
|
|
64
|
+
export class GeoDb {
|
|
65
|
+
logger;
|
|
66
|
+
zipsDb;
|
|
67
|
+
geonamesDb;
|
|
68
|
+
/** @internal */
|
|
69
|
+
zipCache;
|
|
70
|
+
/** @internal */
|
|
71
|
+
geonamesCache;
|
|
72
|
+
legacyCities;
|
|
73
|
+
countryNames;
|
|
74
|
+
zipStmt;
|
|
75
|
+
geonamesStmt;
|
|
76
|
+
zipCompStmt;
|
|
77
|
+
geonamesCompStmt;
|
|
78
|
+
zipFulltextCompStmt;
|
|
79
|
+
constructor(logger, zipsFilename, geonamesFilename, options) {
|
|
80
|
+
this.logger = logger;
|
|
81
|
+
if (logger)
|
|
82
|
+
logger.info(`GeoDb: opening ${zipsFilename}...`);
|
|
83
|
+
if (!existsSync(zipsFilename)) {
|
|
84
|
+
throw new Error(`GeoDb: ${zipsFilename} does not exist`);
|
|
85
|
+
}
|
|
86
|
+
this.zipsDb = new DatabaseSync(zipsFilename);
|
|
87
|
+
if (logger)
|
|
88
|
+
logger.info(`GeoDb: opening ${geonamesFilename}...`);
|
|
89
|
+
if (!existsSync(geonamesFilename)) {
|
|
90
|
+
throw new Error(`GeoDb: ${geonamesFilename} does not exist`);
|
|
91
|
+
}
|
|
92
|
+
this.geonamesDb = new DatabaseSync(geonamesFilename);
|
|
93
|
+
this.zipStmt = this.zipsDb.prepare(ZIPCODE_SQL);
|
|
94
|
+
const zipsCacheSize = options?.zipsCacheSize || 150;
|
|
95
|
+
this.zipCache = new QuickLRU({
|
|
96
|
+
maxSize: zipsCacheSize,
|
|
97
|
+
});
|
|
98
|
+
this.geonamesStmt = this.geonamesDb.prepare(GEONAME_SQL);
|
|
99
|
+
const geonamesCacheSize = options?.geonamesCacheSize || 750;
|
|
100
|
+
this.geonamesCache = new QuickLRU({
|
|
101
|
+
maxSize: geonamesCacheSize,
|
|
102
|
+
});
|
|
103
|
+
this.legacyCities = new Map();
|
|
104
|
+
for (const [name, id] of Object.entries(city2geonameid)) {
|
|
105
|
+
this.legacyCities.set(munge(name), id);
|
|
106
|
+
}
|
|
107
|
+
const stmt = this.geonamesDb.prepare("SELECT ISO, Country FROM country WHERE Country <> ''");
|
|
108
|
+
const rows = stmt.all();
|
|
109
|
+
const map = new Map();
|
|
110
|
+
for (const row of rows) {
|
|
111
|
+
map.set(row.ISO, row.Country);
|
|
112
|
+
}
|
|
113
|
+
this.countryNames = map;
|
|
114
|
+
if (logger)
|
|
115
|
+
logger.info(`GeoDb: ${map.size} countries, ${this.legacyCities.size} legacy cities`);
|
|
116
|
+
}
|
|
117
|
+
/** Closes database handles */
|
|
118
|
+
close() {
|
|
119
|
+
this.zipsDb.close();
|
|
120
|
+
this.geonamesDb.close();
|
|
121
|
+
}
|
|
122
|
+
/** @private */
|
|
123
|
+
static munge(s) {
|
|
124
|
+
return munge(s);
|
|
125
|
+
}
|
|
126
|
+
lookupZip(zip) {
|
|
127
|
+
const zip5 = zip.trim().substring(0, 5);
|
|
128
|
+
const found = this.zipCache.get(zip5);
|
|
129
|
+
if (found !== undefined)
|
|
130
|
+
return found;
|
|
131
|
+
const result = this.zipStmt.get(zip5);
|
|
132
|
+
if (!result) {
|
|
133
|
+
if (this.logger)
|
|
134
|
+
this.logger.warn(`GeoDb: unknown zipcode=${zip5}`);
|
|
135
|
+
this.zipCache.set(zip5, null);
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
result.ZipCode = String(zip5);
|
|
139
|
+
const location = this.makeZipLocation(result);
|
|
140
|
+
this.zipCache.set(zip5, location);
|
|
141
|
+
return location;
|
|
142
|
+
}
|
|
143
|
+
/** @private */
|
|
144
|
+
makeZipLocation(result) {
|
|
145
|
+
const zip = result.ZipCode;
|
|
146
|
+
const tz = result.TimeZone;
|
|
147
|
+
const tzid = Location.getUsaTzid(result.State, +tz, result.DayLightSaving);
|
|
148
|
+
const cityDescr = `${result.CityMixedCase}, ${result.State} ${zip}`;
|
|
149
|
+
const elevation = result?.Elevation > 0 ? result.Elevation : 0;
|
|
150
|
+
const location = new Location(result.Latitude, result.Longitude, false, tzid, cityDescr, 'US', zip, elevation);
|
|
151
|
+
location.admin1 = location.state = result.State;
|
|
152
|
+
location.stateName = stateNames[location.state];
|
|
153
|
+
location.geo = 'zip';
|
|
154
|
+
location.zip = zip;
|
|
155
|
+
location.population = result.Population;
|
|
156
|
+
return location;
|
|
157
|
+
}
|
|
158
|
+
lookupGeoname(geonameid) {
|
|
159
|
+
geonameid = +geonameid;
|
|
160
|
+
if (!geonameid)
|
|
161
|
+
return null;
|
|
162
|
+
if (geonameid === 293396) {
|
|
163
|
+
geonameid = 293397;
|
|
164
|
+
}
|
|
165
|
+
const found = this.geonamesCache.get(geonameid);
|
|
166
|
+
if (found !== undefined)
|
|
167
|
+
return found;
|
|
168
|
+
const result = this.geonamesStmt.get(geonameid);
|
|
169
|
+
if (!result) {
|
|
170
|
+
if (this.logger)
|
|
171
|
+
this.logger.warn(`GeoDb: unknown geonameid=${geonameid}`);
|
|
172
|
+
this.geonamesCache.set(geonameid, null);
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
const location = this.makeGeonameLocation(geonameid, result);
|
|
176
|
+
this.geonamesCache.set(geonameid, location);
|
|
177
|
+
return location;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Convenience wrapper of the `transliterate` function from `transliteration` npm package.
|
|
181
|
+
* Transliterate the string `source` and return the result.
|
|
182
|
+
*/
|
|
183
|
+
static transliterate(source, options) {
|
|
184
|
+
return transliterate(source, options);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Builds a city description from geonameid string components
|
|
188
|
+
* @param cityName e.g. 'Tel Aviv' or 'Chicago'
|
|
189
|
+
* @param admin1 e.g. 'England' or 'Massachusetts'
|
|
190
|
+
* @param countryName full country name, e.g. 'Israel' or 'United States'
|
|
191
|
+
*/
|
|
192
|
+
static geonameCityDescr(cityName, admin1, countryName) {
|
|
193
|
+
if (countryName === 'United States')
|
|
194
|
+
countryName = 'USA';
|
|
195
|
+
if (countryName === 'United Kingdom')
|
|
196
|
+
countryName = 'UK';
|
|
197
|
+
let cityDescr = cityName;
|
|
198
|
+
if (countryName !== 'Israel' && admin1 && !admin1.includes(cityName)) {
|
|
199
|
+
const tlitCityName = transliterate(cityName);
|
|
200
|
+
const tlitAdmin1 = transliterate(admin1);
|
|
201
|
+
if (!tlitAdmin1.includes(tlitCityName)) {
|
|
202
|
+
cityDescr += ', ' + admin1;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
if (countryName) {
|
|
206
|
+
cityDescr += ', ' + countryName;
|
|
207
|
+
}
|
|
208
|
+
return cityDescr;
|
|
209
|
+
}
|
|
210
|
+
/** @private */
|
|
211
|
+
makeGeonameLocation(geonameid, result) {
|
|
212
|
+
const country = result.country || '';
|
|
213
|
+
const admin1 = result.admin1 || '';
|
|
214
|
+
const cityDescr = GeoDb.geonameCityDescr(result.name, admin1, country);
|
|
215
|
+
const elevation = result?.elevation && result.elevation > 0 ? result.elevation : 0;
|
|
216
|
+
const location = new Location(result.latitude, result.longitude, result.cc === 'IL', result.timezone, cityDescr, result.cc, geonameid, elevation);
|
|
217
|
+
location.geo = 'geoname';
|
|
218
|
+
location.geonameid = geonameid;
|
|
219
|
+
location.asciiname = result.asciiname;
|
|
220
|
+
if (admin1) {
|
|
221
|
+
location.admin1 = admin1;
|
|
222
|
+
}
|
|
223
|
+
if (result.population) {
|
|
224
|
+
location.population = result.population;
|
|
225
|
+
}
|
|
226
|
+
return location;
|
|
227
|
+
}
|
|
228
|
+
lookupLegacyCity(cityName) {
|
|
229
|
+
const name = munge(cityName);
|
|
230
|
+
const geonameid = this.legacyCities.get(name);
|
|
231
|
+
if (geonameid) {
|
|
232
|
+
return this.lookupGeoname(geonameid);
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
const location = Location.lookup(cityName);
|
|
236
|
+
if (location) {
|
|
237
|
+
return location;
|
|
238
|
+
}
|
|
239
|
+
if (this.logger)
|
|
240
|
+
this.logger.warn(`GeoDb: unknown city=${cityName}`);
|
|
241
|
+
return null;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
/** @private */
|
|
245
|
+
static zipResultToObj(res) {
|
|
246
|
+
const obj = {
|
|
247
|
+
id: String(res.ZipCode),
|
|
248
|
+
value: `${res.CityMixedCase}, ${res.State} ${res.ZipCode}`,
|
|
249
|
+
admin1: res.State,
|
|
250
|
+
asciiname: res.CityMixedCase,
|
|
251
|
+
country: 'United States',
|
|
252
|
+
cc: 'US',
|
|
253
|
+
latitude: res.Latitude,
|
|
254
|
+
longitude: res.Longitude,
|
|
255
|
+
timezone: Location.getUsaTzid(res.State, +res.TimeZone, res.DayLightSaving),
|
|
256
|
+
population: res.Population,
|
|
257
|
+
geo: 'zip',
|
|
258
|
+
};
|
|
259
|
+
if (res.Elevation && res.Elevation > 0) {
|
|
260
|
+
obj.elevation = res.Elevation;
|
|
261
|
+
}
|
|
262
|
+
return obj;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Generates autocomplete results based on a query string
|
|
266
|
+
*/
|
|
267
|
+
autoComplete(qraw, latlong = false) {
|
|
268
|
+
qraw = qraw.trim();
|
|
269
|
+
if (qraw.length === 0) {
|
|
270
|
+
return [];
|
|
271
|
+
}
|
|
272
|
+
const firstCharCode = qraw.charCodeAt(0);
|
|
273
|
+
if (firstCharCode >= 48 && firstCharCode <= 57) {
|
|
274
|
+
// special-case PK query instead of full-table scan
|
|
275
|
+
if (GeoDb.is5DigitZip(qraw)) {
|
|
276
|
+
const loc = this.lookupZip(qraw);
|
|
277
|
+
return loc ? [GeoDb.zipLocToAutocomplete(loc)] : [];
|
|
278
|
+
}
|
|
279
|
+
if (!this.zipCompStmt) {
|
|
280
|
+
this.zipCompStmt = this.zipsDb.prepare(ZIP_COMPLETE_SQL);
|
|
281
|
+
}
|
|
282
|
+
// this is a ZIP code prefix, a string with 1-4 digits
|
|
283
|
+
const zipA = qraw.substring(0, 5);
|
|
284
|
+
const zipB = zipA === '9' ? 'A' : String(+zipA + 1).padStart(zipA.length, '0');
|
|
285
|
+
return this.zipCompStmt.all(zipA, zipB).map(GeoDb.zipResultToObj);
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
if (!this.geonamesCompStmt) {
|
|
289
|
+
this.geonamesCompStmt = this.geonamesDb.prepare(GEONAME_COMPLETE_SQL);
|
|
290
|
+
}
|
|
291
|
+
qraw = qraw.replaceAll('"', '""');
|
|
292
|
+
const geoRows0 = this.geonamesCompStmt.all(`{longname} : "${qraw}" *`);
|
|
293
|
+
const ids = new Set();
|
|
294
|
+
const geoRows = [];
|
|
295
|
+
for (const row of geoRows0) {
|
|
296
|
+
const id = row.geonameid;
|
|
297
|
+
if (!ids.has(id)) {
|
|
298
|
+
ids.add(id);
|
|
299
|
+
geoRows.push(row);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
const geoMatches = geoRows.map(res => {
|
|
303
|
+
const loc = this.lookupGeoname(res.geonameid);
|
|
304
|
+
return this.geonameLocToAutocomplete(loc, res);
|
|
305
|
+
});
|
|
306
|
+
if (!this.zipFulltextCompStmt) {
|
|
307
|
+
this.zipFulltextCompStmt = this.zipsDb.prepare(ZIP_FULLTEXT_COMPLETE_SQL);
|
|
308
|
+
}
|
|
309
|
+
const zipRows = this.zipFulltextCompStmt.all(`{longname} : "${qraw}" *`);
|
|
310
|
+
const zipMatches = zipRows.map(res => {
|
|
311
|
+
const loc = this.lookupZip(res.ZipCode);
|
|
312
|
+
return GeoDb.zipLocToAutocomplete(loc);
|
|
313
|
+
});
|
|
314
|
+
const values = this.mergeZipGeo(zipMatches, geoMatches);
|
|
315
|
+
values.sort((a, b) => (b.population ?? 0) - (a.population ?? 0));
|
|
316
|
+
const topN = values.slice(0, 12);
|
|
317
|
+
if (!latlong) {
|
|
318
|
+
for (const val of topN) {
|
|
319
|
+
delete val.latitude;
|
|
320
|
+
delete val.longitude;
|
|
321
|
+
delete val.timezone;
|
|
322
|
+
delete val.population;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
return topN;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
/** @private */
|
|
329
|
+
geonameLocToAutocomplete(loc, res) {
|
|
330
|
+
const cc = loc.getCountryCode();
|
|
331
|
+
const country = res.country || this.countryNames.get(cc) || '';
|
|
332
|
+
const admin1 = loc.admin1 || '';
|
|
333
|
+
const obj = {
|
|
334
|
+
id: res.geonameid,
|
|
335
|
+
value: loc.getName(),
|
|
336
|
+
admin1,
|
|
337
|
+
country,
|
|
338
|
+
cc,
|
|
339
|
+
latitude: loc.latitude,
|
|
340
|
+
longitude: loc.longitude,
|
|
341
|
+
timezone: loc.getTzid(),
|
|
342
|
+
geo: 'geoname',
|
|
343
|
+
};
|
|
344
|
+
if (loc.population) {
|
|
345
|
+
obj.population = loc.population;
|
|
346
|
+
}
|
|
347
|
+
if (res.city !== loc.asciiname) {
|
|
348
|
+
obj.name = res.city;
|
|
349
|
+
}
|
|
350
|
+
if (loc.asciiname) {
|
|
351
|
+
obj.asciiname = loc.asciiname;
|
|
352
|
+
}
|
|
353
|
+
if (country) {
|
|
354
|
+
obj.country = country;
|
|
355
|
+
}
|
|
356
|
+
if (admin1) {
|
|
357
|
+
obj.admin1 = admin1;
|
|
358
|
+
}
|
|
359
|
+
return obj;
|
|
360
|
+
}
|
|
361
|
+
/** @private */
|
|
362
|
+
static zipLocToAutocomplete(loc) {
|
|
363
|
+
return {
|
|
364
|
+
id: loc.zip,
|
|
365
|
+
value: loc.getName(),
|
|
366
|
+
admin1: loc.admin1,
|
|
367
|
+
asciiname: loc.getShortName(),
|
|
368
|
+
country: 'United States',
|
|
369
|
+
cc: 'US',
|
|
370
|
+
latitude: loc.latitude,
|
|
371
|
+
longitude: loc.longitude,
|
|
372
|
+
timezone: loc.getTzid(),
|
|
373
|
+
population: loc.population,
|
|
374
|
+
geo: 'zip',
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* GeoNames matches takes priority over USA ZIP code matches
|
|
379
|
+
* @private
|
|
380
|
+
*/
|
|
381
|
+
mergeZipGeo(zipMatches, geoMatches) {
|
|
382
|
+
const zlen = zipMatches.length;
|
|
383
|
+
const glen = geoMatches.length;
|
|
384
|
+
if (zlen && !glen) {
|
|
385
|
+
return zipMatches;
|
|
386
|
+
}
|
|
387
|
+
else if (glen && !zlen) {
|
|
388
|
+
return geoMatches;
|
|
389
|
+
}
|
|
390
|
+
const map = new Map();
|
|
391
|
+
for (const obj of zipMatches) {
|
|
392
|
+
const key = [obj.asciiname, stateNames[obj.admin1 ?? ''], obj.cc].join('|');
|
|
393
|
+
if (!map.has(key)) {
|
|
394
|
+
map.set(key, obj);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
for (const obj of geoMatches) {
|
|
398
|
+
const key = [obj.asciiname, obj.admin1, obj.cc].join('|');
|
|
399
|
+
map.set(key, obj);
|
|
400
|
+
}
|
|
401
|
+
return Array.from(map.values());
|
|
402
|
+
}
|
|
403
|
+
/** Reads entire ZIP database and caches in-memory */
|
|
404
|
+
cacheZips() {
|
|
405
|
+
const start = Date.now();
|
|
406
|
+
const stmt = this.zipsDb.prepare(ZIPCODE_ALL_SQL);
|
|
407
|
+
const rows = stmt.all();
|
|
408
|
+
this.zipCache = new Map(); // replace QuickLRU
|
|
409
|
+
for (const row of rows) {
|
|
410
|
+
const location = this.makeZipLocation(row);
|
|
411
|
+
this.zipCache.set(row.ZipCode, location);
|
|
412
|
+
}
|
|
413
|
+
const end = Date.now();
|
|
414
|
+
if (this.logger)
|
|
415
|
+
this.logger.info(`GeoDb: cached ${rows.length} ZIP codes in ${end - start}ms`);
|
|
416
|
+
}
|
|
417
|
+
/** Reads entire geonames database and caches in-memory */
|
|
418
|
+
cacheGeonames() {
|
|
419
|
+
const start = Date.now();
|
|
420
|
+
const stmt = this.geonamesDb.prepare(GEONAME_ALL_SQL);
|
|
421
|
+
const rows = stmt.all();
|
|
422
|
+
this.geonamesCache = new Map(); // replace QuickLRU
|
|
423
|
+
for (const row of rows) {
|
|
424
|
+
const location = this.makeGeonameLocation(row.geonameid, row);
|
|
425
|
+
this.geonamesCache.set(row.geonameid, location);
|
|
426
|
+
}
|
|
427
|
+
const end = Date.now();
|
|
428
|
+
if (this.logger)
|
|
429
|
+
this.logger.info(`GeoDb: cached ${rows.length} geonames in ${end - start}ms`);
|
|
430
|
+
}
|
|
431
|
+
/** Returns the version of the GeoDb package */
|
|
432
|
+
static version() {
|
|
433
|
+
return version;
|
|
434
|
+
}
|
|
435
|
+
static is5DigitZip(str) {
|
|
436
|
+
if (typeof str !== 'string') {
|
|
437
|
+
return false;
|
|
438
|
+
}
|
|
439
|
+
const s = str.trim();
|
|
440
|
+
if (s.length < 5) {
|
|
441
|
+
return false;
|
|
442
|
+
}
|
|
443
|
+
for (let i = 0; i < 5; i++) {
|
|
444
|
+
if (s.charCodeAt(i) > 57 || s.charCodeAt(i) < 48) {
|
|
445
|
+
return false;
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
return true;
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
//# sourceMappingURL=geodb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geodb.js","sourceRoot":"","sources":["../src/geodb.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { GeoDb } from './geodb.js';
|
|
2
|
+
export type { AutoComplete, GeoDbOptions } from './geodb.js';
|
|
3
|
+
export { buildGeonamesSqlite } from './build-geonames-sqlite.js';
|
|
4
|
+
export type { BuildGeonamesSqliteOptions } from './build-geonames-sqlite.js';
|
|
5
|
+
export { makeZipsSqlite } from './make-zips-sqlite.js';
|