@hebcal/geo-sqlite 3.4.1 → 3.5.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/dist/index.js +33 -30
- package/dist/index.mjs +28 -25
- package/package.json +15 -15
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @hebcal/geo-sqlite v3.
|
|
1
|
+
/*! @hebcal/geo-sqlite v3.5.0 */
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
@@ -74,11 +74,11 @@ class GeoDb {
|
|
|
74
74
|
constructor(logger, zipsFilename, geonamesFilename) {
|
|
75
75
|
this.logger = logger;
|
|
76
76
|
if (logger) logger.info(`GeoDb: opening ${zipsFilename}...`);
|
|
77
|
-
this.zipsDb = new Database__default[
|
|
77
|
+
this.zipsDb = new Database__default["default"](zipsFilename, {
|
|
78
78
|
fileMustExist: true
|
|
79
79
|
});
|
|
80
80
|
if (logger) logger.info(`GeoDb: opening ${geonamesFilename}...`);
|
|
81
|
-
this.geonamesDb = new Database__default[
|
|
81
|
+
this.geonamesDb = new Database__default["default"](geonamesFilename, {
|
|
82
82
|
fileMustExist: true
|
|
83
83
|
});
|
|
84
84
|
this.zipStmt = this.zipsDb.prepare(ZIPCODE_SQL);
|
|
@@ -253,6 +253,7 @@ class GeoDb {
|
|
|
253
253
|
this.geonamesCompStmt = this.geonamesDb.prepare(GEONAME_COMPLETE_SQL);
|
|
254
254
|
}
|
|
255
255
|
|
|
256
|
+
qraw = qraw.replace(/\"/g, '""');
|
|
256
257
|
return this.geonamesCompStmt.all(`"${qraw}*"`).map(res => {
|
|
257
258
|
const country = res.country || '';
|
|
258
259
|
const admin1 = res.admin1 || '';
|
|
@@ -315,13 +316,6 @@ class GeoDb {
|
|
|
315
316
|
|
|
316
317
|
}
|
|
317
318
|
|
|
318
|
-
const logger = pino__default['default']({
|
|
319
|
-
// level: argv.quiet ? 'warn' : 'info',
|
|
320
|
-
prettyPrint: {
|
|
321
|
-
translateTime: true,
|
|
322
|
-
ignore: 'pid,hostname'
|
|
323
|
-
}
|
|
324
|
-
});
|
|
325
319
|
/**
|
|
326
320
|
* Builds `geonames.sqlite3` from files downloaded from geonames.org
|
|
327
321
|
* @param {string} dbFilename
|
|
@@ -333,9 +327,16 @@ const logger = pino__default['default']({
|
|
|
333
327
|
*/
|
|
334
328
|
|
|
335
329
|
async function buildGeonamesSqlite(dbFilename, countryInfotxt, cities5000txt, citiesPatch, admin1CodesASCIItxt, ILtxt) {
|
|
336
|
-
const
|
|
330
|
+
const logger = pino__default["default"]({
|
|
331
|
+
// level: argv.quiet ? 'warn' : 'info',
|
|
332
|
+
prettyPrint: {
|
|
333
|
+
translateTime: true,
|
|
334
|
+
ignore: 'pid,hostname'
|
|
335
|
+
}
|
|
336
|
+
});
|
|
337
|
+
const db = new Database__default["default"](dbFilename);
|
|
337
338
|
db.pragma('journal_mode = MEMORY');
|
|
338
|
-
doSql(db, `DROP TABLE IF EXISTS country`, `CREATE TABLE country (
|
|
339
|
+
doSql(logger, db, `DROP TABLE IF EXISTS country`, `CREATE TABLE country (
|
|
339
340
|
ISO TEXT PRIMARY KEY,
|
|
340
341
|
ISO3 TEXT NOT NULL,
|
|
341
342
|
IsoNumeric TEXT NOT NULL,
|
|
@@ -356,8 +357,8 @@ async function buildGeonamesSqlite(dbFilename, countryInfotxt, cities5000txt, ci
|
|
|
356
357
|
neighbours TEXT NOT NULL,
|
|
357
358
|
EquivalentFipsCode TEXT NOT NULL
|
|
358
359
|
);`);
|
|
359
|
-
await doFile(db, countryInfotxt, 'country', 19);
|
|
360
|
-
doSql(db, `DROP TABLE IF EXISTS geoname`, `CREATE TABLE geoname (
|
|
360
|
+
await doFile(logger, db, countryInfotxt, 'country', 19);
|
|
361
|
+
doSql(logger, db, `DROP TABLE IF EXISTS geoname`, `CREATE TABLE geoname (
|
|
361
362
|
geonameid int PRIMARY KEY,
|
|
362
363
|
name nvarchar(200),
|
|
363
364
|
asciiname nvarchar(200),
|
|
@@ -377,28 +378,28 @@ async function buildGeonamesSqlite(dbFilename, countryInfotxt, cities5000txt, ci
|
|
|
377
378
|
gtopo30 int,
|
|
378
379
|
timezone nvarchar(40),
|
|
379
380
|
moddate date);`);
|
|
380
|
-
await doFile(db, cities5000txt, 'geoname', 19);
|
|
381
|
-
await doFile(db, citiesPatch, 'geoname', 19);
|
|
382
|
-
await doFile(db, ILtxt, 'geoname', 19, a => {
|
|
381
|
+
await doFile(logger, db, cities5000txt, 'geoname', 19);
|
|
382
|
+
await doFile(logger, db, citiesPatch, 'geoname', 19);
|
|
383
|
+
await doFile(logger, db, ILtxt, 'geoname', 19, a => {
|
|
383
384
|
return a[6] == 'P' && (a[7] == 'PPL' || a[7] == 'STLMT');
|
|
384
385
|
});
|
|
385
|
-
doSql(db, `DROP TABLE IF EXISTS admin1`, `CREATE TABLE admin1 (
|
|
386
|
+
doSql(logger, db, `DROP TABLE IF EXISTS admin1`, `CREATE TABLE admin1 (
|
|
386
387
|
key TEXT PRIMARY KEY,
|
|
387
388
|
name nvarchar(200) NOT NULL,
|
|
388
389
|
asciiname nvarchar(200) NOT NULL,
|
|
389
390
|
geonameid int NOT NULL
|
|
390
391
|
);`);
|
|
391
|
-
await doFile(db, admin1CodesASCIItxt, 'admin1', 4); // fix inconsistencies with the USA capitol
|
|
392
|
+
await doFile(logger, db, admin1CodesASCIItxt, 'admin1', 4); // fix inconsistencies with the USA capitol
|
|
392
393
|
|
|
393
|
-
doSql(db, `UPDATE geoname
|
|
394
|
+
doSql(logger, db, `UPDATE geoname
|
|
394
395
|
SET name = 'Washington, D.C.', asciiname = 'Washington, D.C.'
|
|
395
396
|
WHERE geonameid = 4140963;`, `UPDATE admin1
|
|
396
397
|
SET name = 'Washington, D.C.', asciiname = 'Washington, D.C.'
|
|
397
398
|
WHERE key = 'US.DC';`);
|
|
398
|
-
doSql(db, `DROP TABLE IF EXISTS geoname_he`, `CREATE TABLE geoname_he AS SELECT * FROM geoname LIMIT 0`);
|
|
399
|
-
await doFile(db, ILtxt, 'geoname_he', 19, filterPlacesHebrew);
|
|
400
|
-
doSql(db, `update admin1 set name='',asciiname='' where key like 'PS.%';`, `update country set country = '' where iso = 'PS';`, `delete from geoname where geonameid = 7303419;`);
|
|
401
|
-
doSql(db, `DROP TABLE IF EXISTS geoname_fulltext`, `CREATE VIRTUAL TABLE geoname_fulltext
|
|
399
|
+
doSql(logger, db, `DROP TABLE IF EXISTS geoname_he`, `CREATE TABLE geoname_he AS SELECT * FROM geoname LIMIT 0`);
|
|
400
|
+
await doFile(logger, db, ILtxt, 'geoname_he', 19, filterPlacesHebrew);
|
|
401
|
+
doSql(logger, db, `update admin1 set name='',asciiname='' where key like 'PS.%';`, `update country set country = '' where iso = 'PS';`, `delete from geoname where geonameid = 7303419;`);
|
|
402
|
+
doSql(logger, db, `DROP TABLE IF EXISTS geoname_fulltext`, `CREATE VIRTUAL TABLE geoname_fulltext
|
|
402
403
|
USING fts3(geonameid int, longname text,
|
|
403
404
|
asciiname text, admin1 text, country text,
|
|
404
405
|
population int, latitude real, longitude real, timezone text
|
|
@@ -453,7 +454,7 @@ function filterPlacesHebrew(a) {
|
|
|
453
454
|
const firstchar = name[0];
|
|
454
455
|
|
|
455
456
|
if (firstchar >= '\u05D0' && firstchar <= '\u05EA') {
|
|
456
|
-
a[1] = name; // replace 'name' field with Hebrew
|
|
457
|
+
a[1] = core.Locale.hebrewStripNikkud(name); // replace 'name' field with Hebrew
|
|
457
458
|
|
|
458
459
|
return true;
|
|
459
460
|
}
|
|
@@ -462,18 +463,20 @@ function filterPlacesHebrew(a) {
|
|
|
462
463
|
return false;
|
|
463
464
|
}
|
|
464
465
|
/**
|
|
466
|
+
* @param {pino.Logger} logger
|
|
465
467
|
* @param {Database} db
|
|
466
468
|
* @param {...string} sqls
|
|
467
469
|
*/
|
|
468
470
|
|
|
469
471
|
|
|
470
|
-
function doSql(db, ...sqls) {
|
|
472
|
+
function doSql(logger, db, ...sqls) {
|
|
471
473
|
for (let i = 0; i < sqls.length; i++) {
|
|
472
474
|
logger.info(sqls[i]);
|
|
473
475
|
db.exec(sqls[i]);
|
|
474
476
|
}
|
|
475
477
|
}
|
|
476
478
|
/**
|
|
479
|
+
* @param {pino.Logger} logger
|
|
477
480
|
* @param {Database} db
|
|
478
481
|
* @param {string} infile
|
|
479
482
|
* @param {string} tableName
|
|
@@ -482,7 +485,7 @@ function doSql(db, ...sqls) {
|
|
|
482
485
|
*/
|
|
483
486
|
|
|
484
487
|
|
|
485
|
-
async function doFile(db, infile, tableName, expectedFields, callback) {
|
|
488
|
+
async function doFile(logger, db, infile, tableName, expectedFields, callback) {
|
|
486
489
|
logger.info(`${infile} => ${tableName}`);
|
|
487
490
|
db.exec('BEGIN');
|
|
488
491
|
let sql = `INSERT OR IGNORE INTO ${tableName} VALUES (?`;
|
|
@@ -496,8 +499,8 @@ async function doFile(db, infile, tableName, expectedFields, callback) {
|
|
|
496
499
|
const stmt = db.prepare(sql);
|
|
497
500
|
return new Promise((resolve, reject) => {
|
|
498
501
|
try {
|
|
499
|
-
const rl = readline__default[
|
|
500
|
-
input: fs__default[
|
|
502
|
+
const rl = readline__default["default"].createInterface({
|
|
503
|
+
input: fs__default["default"].createReadStream(infile),
|
|
501
504
|
crlfDelay: Infinity
|
|
502
505
|
});
|
|
503
506
|
let num = 0;
|
|
@@ -531,7 +534,7 @@ async function doFile(db, infile, tableName, expectedFields, callback) {
|
|
|
531
534
|
logger.info(`Inserted ${accepted} / ${num} into ${tableName} from ${infile}`);
|
|
532
535
|
db.exec('COMMIT');
|
|
533
536
|
});
|
|
534
|
-
return resolve(events__default[
|
|
537
|
+
return resolve(events__default["default"].once(rl, 'close'));
|
|
535
538
|
} catch (err) {
|
|
536
539
|
logger.error(err);
|
|
537
540
|
return reject(err);
|
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
/*! @hebcal/geo-sqlite v3.
|
|
1
|
+
/*! @hebcal/geo-sqlite v3.5.0 */
|
|
2
2
|
import Database from 'better-sqlite3';
|
|
3
|
-
import { Location } from '@hebcal/core';
|
|
3
|
+
import { Location, Locale } from '@hebcal/core';
|
|
4
4
|
import pino from 'pino';
|
|
5
5
|
import events from 'events';
|
|
6
6
|
import fs from 'fs';
|
|
@@ -241,6 +241,7 @@ class GeoDb {
|
|
|
241
241
|
this.geonamesCompStmt = this.geonamesDb.prepare(GEONAME_COMPLETE_SQL);
|
|
242
242
|
}
|
|
243
243
|
|
|
244
|
+
qraw = qraw.replace(/\"/g, '""');
|
|
244
245
|
return this.geonamesCompStmt.all(`"${qraw}*"`).map(res => {
|
|
245
246
|
const country = res.country || '';
|
|
246
247
|
const admin1 = res.admin1 || '';
|
|
@@ -303,13 +304,6 @@ class GeoDb {
|
|
|
303
304
|
|
|
304
305
|
}
|
|
305
306
|
|
|
306
|
-
const logger = pino({
|
|
307
|
-
// level: argv.quiet ? 'warn' : 'info',
|
|
308
|
-
prettyPrint: {
|
|
309
|
-
translateTime: true,
|
|
310
|
-
ignore: 'pid,hostname'
|
|
311
|
-
}
|
|
312
|
-
});
|
|
313
307
|
/**
|
|
314
308
|
* Builds `geonames.sqlite3` from files downloaded from geonames.org
|
|
315
309
|
* @param {string} dbFilename
|
|
@@ -321,9 +315,16 @@ const logger = pino({
|
|
|
321
315
|
*/
|
|
322
316
|
|
|
323
317
|
async function buildGeonamesSqlite(dbFilename, countryInfotxt, cities5000txt, citiesPatch, admin1CodesASCIItxt, ILtxt) {
|
|
318
|
+
const logger = pino({
|
|
319
|
+
// level: argv.quiet ? 'warn' : 'info',
|
|
320
|
+
prettyPrint: {
|
|
321
|
+
translateTime: true,
|
|
322
|
+
ignore: 'pid,hostname'
|
|
323
|
+
}
|
|
324
|
+
});
|
|
324
325
|
const db = new Database(dbFilename);
|
|
325
326
|
db.pragma('journal_mode = MEMORY');
|
|
326
|
-
doSql(db, `DROP TABLE IF EXISTS country`, `CREATE TABLE country (
|
|
327
|
+
doSql(logger, db, `DROP TABLE IF EXISTS country`, `CREATE TABLE country (
|
|
327
328
|
ISO TEXT PRIMARY KEY,
|
|
328
329
|
ISO3 TEXT NOT NULL,
|
|
329
330
|
IsoNumeric TEXT NOT NULL,
|
|
@@ -344,8 +345,8 @@ async function buildGeonamesSqlite(dbFilename, countryInfotxt, cities5000txt, ci
|
|
|
344
345
|
neighbours TEXT NOT NULL,
|
|
345
346
|
EquivalentFipsCode TEXT NOT NULL
|
|
346
347
|
);`);
|
|
347
|
-
await doFile(db, countryInfotxt, 'country', 19);
|
|
348
|
-
doSql(db, `DROP TABLE IF EXISTS geoname`, `CREATE TABLE geoname (
|
|
348
|
+
await doFile(logger, db, countryInfotxt, 'country', 19);
|
|
349
|
+
doSql(logger, db, `DROP TABLE IF EXISTS geoname`, `CREATE TABLE geoname (
|
|
349
350
|
geonameid int PRIMARY KEY,
|
|
350
351
|
name nvarchar(200),
|
|
351
352
|
asciiname nvarchar(200),
|
|
@@ -365,28 +366,28 @@ async function buildGeonamesSqlite(dbFilename, countryInfotxt, cities5000txt, ci
|
|
|
365
366
|
gtopo30 int,
|
|
366
367
|
timezone nvarchar(40),
|
|
367
368
|
moddate date);`);
|
|
368
|
-
await doFile(db, cities5000txt, 'geoname', 19);
|
|
369
|
-
await doFile(db, citiesPatch, 'geoname', 19);
|
|
370
|
-
await doFile(db, ILtxt, 'geoname', 19, a => {
|
|
369
|
+
await doFile(logger, db, cities5000txt, 'geoname', 19);
|
|
370
|
+
await doFile(logger, db, citiesPatch, 'geoname', 19);
|
|
371
|
+
await doFile(logger, db, ILtxt, 'geoname', 19, a => {
|
|
371
372
|
return a[6] == 'P' && (a[7] == 'PPL' || a[7] == 'STLMT');
|
|
372
373
|
});
|
|
373
|
-
doSql(db, `DROP TABLE IF EXISTS admin1`, `CREATE TABLE admin1 (
|
|
374
|
+
doSql(logger, db, `DROP TABLE IF EXISTS admin1`, `CREATE TABLE admin1 (
|
|
374
375
|
key TEXT PRIMARY KEY,
|
|
375
376
|
name nvarchar(200) NOT NULL,
|
|
376
377
|
asciiname nvarchar(200) NOT NULL,
|
|
377
378
|
geonameid int NOT NULL
|
|
378
379
|
);`);
|
|
379
|
-
await doFile(db, admin1CodesASCIItxt, 'admin1', 4); // fix inconsistencies with the USA capitol
|
|
380
|
+
await doFile(logger, db, admin1CodesASCIItxt, 'admin1', 4); // fix inconsistencies with the USA capitol
|
|
380
381
|
|
|
381
|
-
doSql(db, `UPDATE geoname
|
|
382
|
+
doSql(logger, db, `UPDATE geoname
|
|
382
383
|
SET name = 'Washington, D.C.', asciiname = 'Washington, D.C.'
|
|
383
384
|
WHERE geonameid = 4140963;`, `UPDATE admin1
|
|
384
385
|
SET name = 'Washington, D.C.', asciiname = 'Washington, D.C.'
|
|
385
386
|
WHERE key = 'US.DC';`);
|
|
386
|
-
doSql(db, `DROP TABLE IF EXISTS geoname_he`, `CREATE TABLE geoname_he AS SELECT * FROM geoname LIMIT 0`);
|
|
387
|
-
await doFile(db, ILtxt, 'geoname_he', 19, filterPlacesHebrew);
|
|
388
|
-
doSql(db, `update admin1 set name='',asciiname='' where key like 'PS.%';`, `update country set country = '' where iso = 'PS';`, `delete from geoname where geonameid = 7303419;`);
|
|
389
|
-
doSql(db, `DROP TABLE IF EXISTS geoname_fulltext`, `CREATE VIRTUAL TABLE geoname_fulltext
|
|
387
|
+
doSql(logger, db, `DROP TABLE IF EXISTS geoname_he`, `CREATE TABLE geoname_he AS SELECT * FROM geoname LIMIT 0`);
|
|
388
|
+
await doFile(logger, db, ILtxt, 'geoname_he', 19, filterPlacesHebrew);
|
|
389
|
+
doSql(logger, db, `update admin1 set name='',asciiname='' where key like 'PS.%';`, `update country set country = '' where iso = 'PS';`, `delete from geoname where geonameid = 7303419;`);
|
|
390
|
+
doSql(logger, db, `DROP TABLE IF EXISTS geoname_fulltext`, `CREATE VIRTUAL TABLE geoname_fulltext
|
|
390
391
|
USING fts3(geonameid int, longname text,
|
|
391
392
|
asciiname text, admin1 text, country text,
|
|
392
393
|
population int, latitude real, longitude real, timezone text
|
|
@@ -441,7 +442,7 @@ function filterPlacesHebrew(a) {
|
|
|
441
442
|
const firstchar = name[0];
|
|
442
443
|
|
|
443
444
|
if (firstchar >= '\u05D0' && firstchar <= '\u05EA') {
|
|
444
|
-
a[1] = name; // replace 'name' field with Hebrew
|
|
445
|
+
a[1] = Locale.hebrewStripNikkud(name); // replace 'name' field with Hebrew
|
|
445
446
|
|
|
446
447
|
return true;
|
|
447
448
|
}
|
|
@@ -450,18 +451,20 @@ function filterPlacesHebrew(a) {
|
|
|
450
451
|
return false;
|
|
451
452
|
}
|
|
452
453
|
/**
|
|
454
|
+
* @param {pino.Logger} logger
|
|
453
455
|
* @param {Database} db
|
|
454
456
|
* @param {...string} sqls
|
|
455
457
|
*/
|
|
456
458
|
|
|
457
459
|
|
|
458
|
-
function doSql(db, ...sqls) {
|
|
460
|
+
function doSql(logger, db, ...sqls) {
|
|
459
461
|
for (let i = 0; i < sqls.length; i++) {
|
|
460
462
|
logger.info(sqls[i]);
|
|
461
463
|
db.exec(sqls[i]);
|
|
462
464
|
}
|
|
463
465
|
}
|
|
464
466
|
/**
|
|
467
|
+
* @param {pino.Logger} logger
|
|
465
468
|
* @param {Database} db
|
|
466
469
|
* @param {string} infile
|
|
467
470
|
* @param {string} tableName
|
|
@@ -470,7 +473,7 @@ function doSql(db, ...sqls) {
|
|
|
470
473
|
*/
|
|
471
474
|
|
|
472
475
|
|
|
473
|
-
async function doFile(db, infile, tableName, expectedFields, callback) {
|
|
476
|
+
async function doFile(logger, db, infile, tableName, expectedFields, callback) {
|
|
474
477
|
logger.info(`${infile} => ${tableName}`);
|
|
475
478
|
db.exec('BEGIN');
|
|
476
479
|
let sql = `INSERT OR IGNORE INTO ${tableName} VALUES (?`;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hebcal/geo-sqlite",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.5.0",
|
|
4
4
|
"author": "Michael J. Radwin (https://github.com/mjradwin)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"hebcal"
|
|
@@ -28,10 +28,10 @@
|
|
|
28
28
|
"geo-sqlite.d.ts"
|
|
29
29
|
],
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@hebcal/core": "^3.
|
|
32
|
-
"better-sqlite3": "^7.
|
|
33
|
-
"pino": "^6.
|
|
34
|
-
"pino-pretty": "^
|
|
31
|
+
"@hebcal/core": "^3.32.0",
|
|
32
|
+
"better-sqlite3": "^7.4.6",
|
|
33
|
+
"pino": "^7.6.2",
|
|
34
|
+
"pino-pretty": "^7.3.0"
|
|
35
35
|
},
|
|
36
36
|
"scripts": {
|
|
37
37
|
"build": "rollup -c",
|
|
@@ -59,20 +59,20 @@
|
|
|
59
59
|
},
|
|
60
60
|
"license": "BSD-2-Clause",
|
|
61
61
|
"devDependencies": {
|
|
62
|
-
"@ava/babel": "^
|
|
63
|
-
"@babel/core": "^7.
|
|
62
|
+
"@ava/babel": "^2.0.0",
|
|
63
|
+
"@babel/core": "^7.16.7",
|
|
64
64
|
"@babel/polyfill": "^7.12.1",
|
|
65
|
-
"@babel/preset-env": "^7.
|
|
66
|
-
"@babel/register": "^7.
|
|
65
|
+
"@babel/preset-env": "^7.16.7",
|
|
66
|
+
"@babel/register": "^7.16.7",
|
|
67
67
|
"@rollup/plugin-babel": "^5.3.0",
|
|
68
|
-
"@rollup/plugin-commonjs": "^
|
|
68
|
+
"@rollup/plugin-commonjs": "^21.0.1",
|
|
69
69
|
"@rollup/plugin-json": "^4.1.0",
|
|
70
|
-
"@rollup/plugin-node-resolve": "^
|
|
70
|
+
"@rollup/plugin-node-resolve": "^13.1.3",
|
|
71
71
|
"ava": "^3.15.0",
|
|
72
|
-
"eslint": "^
|
|
72
|
+
"eslint": "^8.6.0",
|
|
73
73
|
"eslint-config-google": "^0.14.0",
|
|
74
|
-
"jsdoc": "^3.6.
|
|
75
|
-
"jsdoc-to-markdown": "^
|
|
76
|
-
"rollup": "^2.
|
|
74
|
+
"jsdoc": "^3.6.7",
|
|
75
|
+
"jsdoc-to-markdown": "^7.1.0",
|
|
76
|
+
"rollup": "^2.63.0"
|
|
77
77
|
}
|
|
78
78
|
}
|