text-to-map 1.1.46 → 1.1.47

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.
Files changed (97) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +69 -69
  3. package/dist/bin/address-points.d.ts +1 -1
  4. package/dist/bin/address-points.js +16 -16
  5. package/dist/bin/cities.d.ts +1 -1
  6. package/dist/bin/cities.js +10 -10
  7. package/dist/bin/clear-all.d.ts +1 -1
  8. package/dist/bin/clear-all.js +13 -13
  9. package/dist/bin/constants.d.ts +2 -2
  10. package/dist/bin/constants.js +4 -4
  11. package/dist/bin/generate-syntax-diagrams.d.ts +1 -1
  12. package/dist/bin/generate-syntax-diagrams.js +20 -20
  13. package/dist/bin/init-db.d.ts +1 -1
  14. package/dist/bin/init-db.js +8 -8
  15. package/dist/bin/knex.d.ts +1 -1
  16. package/dist/bin/knex.js +10 -10
  17. package/dist/bin/parse-ordinance.d.ts +1 -1
  18. package/dist/bin/parse-ordinance.js +74 -74
  19. package/dist/bin/polygons.d.ts +1 -1
  20. package/dist/bin/polygons.js +27 -27
  21. package/dist/bin/regions.d.ts +1 -1
  22. package/dist/bin/regions.js +10 -10
  23. package/dist/bin/schools.d.ts +1 -1
  24. package/dist/bin/schools.js +10 -10
  25. package/dist/bin/streets.d.ts +1 -1
  26. package/dist/bin/streets.js +19 -19
  27. package/dist/bin/sync-all.d.ts +1 -1
  28. package/dist/bin/sync-all.js +4 -4
  29. package/dist/db/address-points.d.ts +59 -59
  30. package/dist/db/address-points.js +401 -399
  31. package/dist/db/cities.d.ts +7 -7
  32. package/dist/db/cities.js +95 -95
  33. package/dist/db/db.d.ts +37 -37
  34. package/dist/db/db.js +191 -191
  35. package/dist/db/founders.d.ts +14 -14
  36. package/dist/db/founders.js +461 -461
  37. package/dist/db/meta.d.ts +4 -4
  38. package/dist/db/meta.js +26 -26
  39. package/dist/db/migrations/20230704125715_initial.js +304 -304
  40. package/dist/db/migrations/20230731232915_city_positions.js +13 -13
  41. package/dist/db/migrations/20240106224603_city_polygon.js +11 -11
  42. package/dist/db/migrations/20240320200534_district_polygon.js +11 -11
  43. package/dist/db/migrations/20250316162700_kindergartens.js +12 -12
  44. package/dist/db/regions.d.ts +31 -31
  45. package/dist/db/regions.js +81 -81
  46. package/dist/db/schools.d.ts +7 -7
  47. package/dist/db/schools.js +95 -95
  48. package/dist/db/street-sync.d.ts +6 -6
  49. package/dist/db/street-sync.js +22 -22
  50. package/dist/db/sync-log.d.ts +9 -9
  51. package/dist/db/sync-log.js +66 -66
  52. package/dist/db/types.d.ts +59 -59
  53. package/dist/db/types.js +26 -26
  54. package/dist/index.d.ts +23 -23
  55. package/dist/index.js +32 -32
  56. package/dist/open-data-sync/address-points.d.ts +2 -2
  57. package/dist/open-data-sync/address-points.js +68 -68
  58. package/dist/open-data-sync/cities.d.ts +2 -2
  59. package/dist/open-data-sync/cities.js +32 -32
  60. package/dist/open-data-sync/common.d.ts +2 -2
  61. package/dist/open-data-sync/common.js +22 -22
  62. package/dist/open-data-sync/regions.d.ts +2 -2
  63. package/dist/open-data-sync/regions.js +37 -37
  64. package/dist/open-data-sync/schools.d.ts +3 -3
  65. package/dist/open-data-sync/schools.js +207 -207
  66. package/dist/open-data-sync/streets.d.ts +2 -2
  67. package/dist/open-data-sync/streets.js +132 -132
  68. package/dist/smd-to-csv/json-to-csv.d.ts +1 -1
  69. package/dist/smd-to-csv/json-to-csv.js +154 -154
  70. package/dist/smd-to-csv/ordinance-to-csv-rules.d.ts +1 -1
  71. package/dist/smd-to-csv/ordinance-to-csv-rules.js +23 -23
  72. package/dist/smd-to-csv/txt-to-json.d.ts +1 -1
  73. package/dist/smd-to-csv/txt-to-json.js +92 -92
  74. package/dist/souradnice.csv +6260 -6260
  75. package/dist/street-markdown/municipality.d.ts +11 -11
  76. package/dist/street-markdown/municipality.js +116 -116
  77. package/dist/street-markdown/polygons.d.ts +7 -7
  78. package/dist/street-markdown/polygons.js +261 -261
  79. package/dist/street-markdown/roman-numerals.d.ts +1 -1
  80. package/dist/street-markdown/roman-numerals.js +68 -68
  81. package/dist/street-markdown/smd-line-parser.d.ts +4 -4
  82. package/dist/street-markdown/smd-line-parser.js +40 -40
  83. package/dist/street-markdown/smd-parser.d.ts +23 -23
  84. package/dist/street-markdown/smd-parser.js +393 -393
  85. package/dist/street-markdown/smd.d.ts +24 -24
  86. package/dist/street-markdown/smd.js +440 -440
  87. package/dist/street-markdown/token-definition.d.ts +25 -25
  88. package/dist/street-markdown/token-definition.js +168 -168
  89. package/dist/street-markdown/types.d.ts +148 -148
  90. package/dist/street-markdown/types.js +13 -13
  91. package/dist/utils/atom.d.ts +2 -2
  92. package/dist/utils/atom.js +57 -57
  93. package/dist/utils/helpers.d.ts +28 -28
  94. package/dist/utils/helpers.js +176 -176
  95. package/dist/utils/jtsk2wgs84.d.ts +17 -17
  96. package/dist/utils/jtsk2wgs84.js +82 -82
  97. package/package.json +109 -109
@@ -1,7 +1,7 @@
1
- import { FeatureCollection } from "@turf/helpers";
2
- import { PolygonsByCodes } from "./types";
3
- export declare const insertCityPositions: (data: string[][]) => Promise<number>;
4
- export declare const insertCities: (buffer: string[][]) => Promise<number>;
5
- export declare const setCityPolygonGeojson: (code: string, polygon: FeatureCollection, districtsPolygon?: FeatureCollection) => Promise<void>;
6
- export declare const getCityPolygons: (cityCodes: Set<number>) => Promise<PolygonsByCodes>;
7
- export declare const getDistrictPolygons: (districtCodes: Set<number>) => Promise<PolygonsByCodes>;
1
+ import { FeatureCollection } from "@turf/helpers";
2
+ import { PolygonsByCodes } from "./types";
3
+ export declare const insertCityPositions: (data: string[][]) => Promise<number>;
4
+ export declare const insertCities: (buffer: string[][]) => Promise<number>;
5
+ export declare const setCityPolygonGeojson: (code: string, polygon: FeatureCollection, districtsPolygon?: FeatureCollection) => Promise<void>;
6
+ export declare const getCityPolygons: (cityCodes: Set<number>) => Promise<PolygonsByCodes>;
7
+ export declare const getDistrictPolygons: (districtCodes: Set<number>) => Promise<PolygonsByCodes>;
package/dist/db/cities.js CHANGED
@@ -1,95 +1,95 @@
1
- import chunk from "lodash/chunk";
2
- import { extractKeyValuesPairs, getKnexDb, insertMultipleRows, rawQuery, } from "./db";
3
- const citiesColumn = {
4
- cityName: 0,
5
- cityCode: 1,
6
- countyName: 2,
7
- countyCode: 3,
8
- regionName: 4,
9
- regionCode: 5,
10
- postalCode: 6,
11
- latitude: 7,
12
- longitude: 8,
13
- };
14
- export const insertCityPositions = async (data) => {
15
- let changes = 0;
16
- // cities are most likely already inserted, but in case they're not,
17
- // we need to insert them before updating them with region data
18
- changes += await insertCities(data);
19
- const prev = changes;
20
- for (const arrayChunk of chunk(data, 1000)) {
21
- const queries = [];
22
- for (const row of arrayChunk) {
23
- queries.push(rawQuery(`UPDATE city SET wgs84_latitude = ?, wgs84_longitude = ? WHERE code = ?`, [
24
- row[citiesColumn.latitude],
25
- row[citiesColumn.longitude],
26
- row[citiesColumn.cityCode],
27
- ]));
28
- }
29
- await Promise.all(queries);
30
- changes += queries.length;
31
- console.log(`Done ${changes - prev} / ${data.length} rows...`);
32
- }
33
- return changes;
34
- };
35
- export const insertCities = async (buffer) => {
36
- return await insertMultipleRows(extractKeyValuesPairs(buffer, citiesColumn.cityCode, [
37
- citiesColumn.cityName,
38
- ]), "city", ["code", "name"]);
39
- };
40
- export const setCityPolygonGeojson = async (code, polygon, districtsPolygon) => {
41
- await getKnexDb()
42
- .from("city")
43
- .update({
44
- polygon_geojson: JSON.stringify(polygon),
45
- ...(districtsPolygon
46
- ? { districts_polygon_geojson: JSON.stringify(districtsPolygon) }
47
- : {}),
48
- })
49
- .where({ code });
50
- };
51
- export const getCityPolygons = async (cityCodes) => {
52
- if (cityCodes.size === 0) {
53
- return {};
54
- }
55
- const cityRows = await getKnexDb()
56
- .from("city")
57
- .select("code", "polygon_geojson")
58
- .whereIn("code", Array.from(cityCodes));
59
- return cityRows.reduce((acc, row) => {
60
- acc[row.code] = JSON.parse(row.polygon_geojson);
61
- return acc;
62
- }, {});
63
- };
64
- export const getDistrictPolygons = async (districtCodes) => {
65
- if (districtCodes.size === 0) {
66
- return {};
67
- }
68
- const cityCodes = (await getKnexDb()
69
- .from("city_district")
70
- .select("city_code")
71
- .whereIn("code", Array.from(districtCodes))
72
- .groupBy("city_code")).map((row) => row.city_code);
73
- const cityRows = await getKnexDb()
74
- .from("city")
75
- .select("code", "districts_polygon_geojson")
76
- .whereIn("code", cityCodes);
77
- const districtPolygons = {};
78
- for (const row of cityRows) {
79
- if (row.districts_polygon_geojson) {
80
- const polygons = JSON.parse(row.districts_polygon_geojson);
81
- for (const feature of polygons.features) {
82
- if (districtCodes.has(Number(feature.properties.KOD))) {
83
- districtPolygons[feature.properties.KOD] = {
84
- type: "FeatureCollection",
85
- features: [
86
- { ...feature, properties: { code: feature.properties.KOD } },
87
- ],
88
- };
89
- }
90
- }
91
- }
92
- }
93
- return districtPolygons;
94
- };
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2l0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RiL2NpdGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxjQUFjLENBQUM7QUFDakMsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixTQUFTLEVBQ1Qsa0JBQWtCLEVBQ2xCLFFBQVEsR0FDVCxNQUFNLE1BQU0sQ0FBQztBQUlkLE1BQU0sWUFBWSxHQUFHO0lBQ25CLFFBQVEsRUFBRSxDQUFDO0lBQ1gsUUFBUSxFQUFFLENBQUM7SUFDWCxVQUFVLEVBQUUsQ0FBQztJQUNiLFVBQVUsRUFBRSxDQUFDO0lBQ2IsVUFBVSxFQUFFLENBQUM7SUFDYixVQUFVLEVBQUUsQ0FBQztJQUNiLFVBQVUsRUFBRSxDQUFDO0lBQ2IsUUFBUSxFQUFFLENBQUM7SUFDWCxTQUFTLEVBQUUsQ0FBQztDQUNiLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxLQUFLLEVBQ3RDLElBQWdCLEVBQ0MsRUFBRTtJQUNuQixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFFaEIsb0VBQW9FO0lBQ3BFLCtEQUErRDtJQUMvRCxPQUFPLElBQUksTUFBTSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDO0lBRXJCLEtBQUssTUFBTSxVQUFVLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRTtRQUMxQyxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbkIsS0FBSyxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUU7WUFDNUIsT0FBTyxDQUFDLElBQUksQ0FDVixRQUFRLENBQ04sd0VBQXdFLEVBQ3hFO2dCQUNFLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO2dCQUMxQixHQUFHLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQztnQkFDM0IsR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFR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MkJBQTJCLENBQUM7U0FDM0MsT0FBTyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUU5QixNQUFNLGdCQUFnQixHQUFvQixFQUFFLENBQUM7SUFDN0MsS0FBSyxNQUFNLEdBQUcsSUFBSSxRQUFRLEVBQUU7UUFDMUIsSUFBSSxHQUFHLENBQUMseUJBQXlCLEVBQUU7WUFDakMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDekIsR0FBRyxDQUFDLHlCQUF5QixDQUNlLENBQUM7WUFDL0MsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFO2dCQUN2QyxJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDckQsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRzt3QkFDekMsSUFBSSxFQUFFLG1CQUFtQjt3QkFDekIsUUFBUSxFQUFFOzRCQUNSLEVBQUUsR0FBRyxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUU7eUJBQzdEO3FCQUNGLENBQUM7aUJBQ0g7YUFDRjtTQUNGO0tBQ0Y7SUFFRCxPQUFPLGdCQUFnQixDQUFDO0FBQzFCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaHVuayBmcm9tIFwibG9kYXNoL2NodW5rXCI7XHJcbmltcG9ydCB7XHJcbiAgZXh0cmFjdEtleVZhbHVlc1BhaXJzLFxyXG4gIGdldEtuZXhEYixcclxuICBpbnNlcnRNdWx0aXBsZVJvd3MsXHJcbiAgcmF3UXVlcnksXHJcbn0gZnJvbSBcIi4vZGJcIjtcclxuaW1wb3J0IHsgRmVhdHVyZUNvbGxlY3Rpb24sIE11bHRpUG9seWdvbiwgUG9seWdvbiB9IGZyb20gXCJAdHVyZi9oZWxwZXJzXCI7XHJcbmltcG9ydCB7IFBvbHlnb25zQnlDb2RlcyB9IGZyb20gXCIuL3R5cGVzXCI7XHJcblxyXG5jb25zdCBjaXRpZXNDb2x1bW4gPSB7XHJcbiAgY2l0eU5hbWU6IDAsXHJcbiAgY2l0eUNvZGU6IDEsXHJcbiAgY291bnR5TmFtZTogMixcclxuICBjb3VudHlDb2RlOiAzLFxyXG4gIHJlZ2lvbk5hbWU6IDQsXHJcbiAgcmVnaW9uQ29kZTogNSxcclxuICBwb3N0YWxDb2RlOiA2LFxyXG4gIGxhdGl0dWRlOiA3LFxyXG4gIGxvbmdpdHVkZTogOCxcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpbnNlcnRDaXR5UG9zaXRpb25zID0gYXN5bmMgKFxyXG4gIGRhdGE6IHN0cmluZ1tdW11cclxuKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICBsZXQgY2hhbmdlcyA9IDA7XHJcblxyXG4gIC8vIGNpdGllcyBhcmUgbW9zdCBsaWtlbHkgYWxyZWFkeSBpbnNlcnRlZCwgYnV0IGluIGNhc2UgdGhleSdyZSBub3QsXHJcbiAgLy8gd2UgbmVlZCB0byBpbnNlcnQgdGhlbSBiZWZvcmUgdXBkYXRpbmcgdGhlbSB3aXRoIHJlZ2lvbiBkYXRhXHJcbiAgY2hhbmdlcyArPSBhd2FpdCBpbnNlcnRDaXRpZXMoZGF0YSk7XHJcbiAgY29uc3QgcHJldiA9IGNoYW5nZXM7XHJcblxyXG4gIGZvciAoY29uc3QgYXJyYXlDaHVuayBvZiBjaHVuayhkYXRhLCAxMDAwKSkge1xyXG4gICAgY29uc3QgcXVlcmllcyA9IFtdO1xyXG4gICAgZm9yIChjb25zdCByb3cgb2YgYXJyYXlDaHVuaykge1xyXG4gICAgICBxdWVyaWVzLnB1c2goXHJcbiAgICAgICAgcmF3UXVlcnkoXHJcbiAgICAgICAgICBgVVBEQVRFIGNpdHkgU0VUIHdnczg0X2xhdGl0dWRlID0gPywgd2dzODRfbG9uZ2l0dWRlID0gPyBXSEVSRSBjb2RlID0gP2AsXHJcbiAgICAgICAgICBbXHJcbiAgICAgICAgICAgIHJvd1tjaXRpZXNDb2x1bW4ubGF0aXR1ZGVdLFxyXG4gICAgICAgICAgICByb3dbY2l0aWVzQ29sdW1uLmxvbmdpdHVkZV0sXHJcbiAgICAgICAgICAgIHJvd1tjaXRpZXNDb2x1bW4uY2l0eUNvZGVdLFxyXG4gICAgICAgICAgXVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGF3YWl0IFByb21pc2UuYWxsKHF1ZXJpZXMpO1xyXG4gICAgY2hhbmdlcyArPSBxdWVyaWVzLmxlbmd0aDtcclxuICAgIGNvbnNvbGUubG9nKGBEb25lICR7Y2hhbmdlcyAtIHByZXZ9IC8gJHtkYXRhLmxlbmd0aH0gcm93cy4uLmApO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGNoYW5nZXM7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaW5zZXJ0Q2l0aWVzID0gYXN5bmMgKGJ1ZmZlcjogc3RyaW5nW11bXSk6IFByb21pc2U8bnVtYmVyPiA9PiB7XHJcbiAgcmV0dXJuIGF3YWl0IGluc2VydE11bHRpcGxlUm93cyhcclxuICAgIGV4dHJhY3RLZXlWYWx1ZXNQYWlycyhidWZmZXIsIGNpdGllc0NvbHVtbi5jaXR5Q29kZSwgW1xyXG4gICAgICBjaXRpZXNDb2x1bW4uY2l0eU5hbWUsXHJcbiAgICBdKSxcclxuICAgIFwiY2l0eVwiLFxyXG4gICAgW1wiY29kZVwiLCBcIm5hbWVcIl1cclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IHNldENpdHlQb2x5Z29uR2VvanNvbiA9IGFzeW5jIChcclxuICBjb2RlOiBzdHJpbmcsXHJcbiAgcG9seWdvbjogRmVhdHVyZUNvbGxlY3Rpb24sXHJcbiAgZGlzdHJpY3RzUG9seWdvbj86IEZlYXR1cmVDb2xsZWN0aW9uXHJcbik6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gIGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAuZnJvbShcImNpdHlcIilcclxuICAgIC51cGRhdGUoe1xyXG4gICAgICBwb2x5Z29uX2dlb2pzb246IEpTT04uc3RyaW5naWZ5KHBvbHlnb24pLFxyXG4gICAgICAuLi4oZGlzdHJpY3RzUG9seWdvblxyXG4gICAgICAgID8geyBkaXN0cmljdHNfcG9seWdvbl9nZW9qc29uOiBKU09OLnN0cmluZ2lmeShkaXN0cmljdHNQb2x5Z29uKSB9XHJcbiAgICAgICAgOiB7fSksXHJcbiAgICB9KVxyXG4gICAgLndoZXJlKHsgY29kZSB9KTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBnZXRDaXR5UG9seWdvbnMgPSBhc3luYyAoXHJcbiAgY2l0eUNvZGVzOiBTZXQ8bnVtYmVyPlxyXG4pOiBQcm9taXNlPFBvbHlnb25zQnlDb2Rlcz4gPT4ge1xyXG4gIGlmIChjaXR5Q29kZXMuc2l6ZSA9PT0gMCkge1xyXG4gICAgcmV0dXJuIHt9O1xyXG4gIH1cclxuICBjb25zdCBjaXR5Um93cyA9IGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAuZnJvbShcImNpdHlcIilcclxuICAgIC5zZWxlY3QoXCJjb2RlXCIsIFwicG9seWdvbl9nZW9qc29uXCIpXHJcbiAgICAud2hlcmVJbihcImNvZGVcIiwgQXJyYXkuZnJvbShjaXR5Q29kZXMpKTtcclxuXHJcbiAgcmV0dXJuIGNpdHlSb3dzLnJlZHVjZSgoYWNjLCByb3cpID0+IHtcclxuICAgIGFjY1tyb3cuY29kZV0gPSBKU09OLnBhcnNlKHJvdy5wb2x5Z29uX2dlb2pzb24pO1xyXG4gICAgcmV0dXJuIGFjYztcclxuICB9LCB7fSk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RGlzdHJpY3RQb2x5Z29ucyA9IGFzeW5jIChcclxuICBkaXN0cmljdENvZGVzOiBTZXQ8bnVtYmVyPlxyXG4pOiBQcm9taXNlPFBvbHlnb25zQnlDb2Rlcz4gPT4ge1xyXG4gIGlmIChkaXN0cmljdENvZGVzLnNpemUgPT09IDApIHtcclxuICAgIHJldHVybiB7fTtcclxuICB9XHJcbiAgY29uc3QgY2l0eUNvZGVzID0gKFxyXG4gICAgYXdhaXQgZ2V0S25leERiKClcclxuICAgICAgLmZyb20oXCJjaXR5X2Rpc3RyaWN0XCIpXHJcbiAgICAgIC5zZWxlY3QoXCJjaXR5X2NvZGVcIilcclxuICAgICAgLndoZXJlSW4oXCJjb2RlXCIsIEFycmF5LmZyb20oZGlzdHJpY3RDb2RlcykpXHJcbiAgICAgIC5ncm91cEJ5KFwiY2l0eV9jb2RlXCIpXHJcbiAgKS5tYXAoKHJvdykgPT4gcm93LmNpdHlfY29kZSk7XHJcblxyXG4gIGNvbnN0IGNpdHlSb3dzID0gYXdhaXQgZ2V0S25leERiKClcclxuICAgIC5mcm9tKFwiY2l0eVwiKVxyXG4gICAgLnNlbGVjdChcImNvZGVcIiwgXCJkaXN0cmljdHNfcG9seWdvbl9nZW9qc29uXCIpXHJcbiAgICAud2hlcmVJbihcImNvZGVcIiwgY2l0eUNvZGVzKTtcclxuXHJcbiAgY29uc3QgZGlzdHJpY3RQb2x5Z29uczogUG9seWdvbnNCeUNvZGVzID0ge307XHJcbiAgZm9yIChjb25zdCByb3cgb2YgY2l0eVJvd3MpIHtcclxuICAgIGlmIChyb3cuZGlzdHJpY3RzX3BvbHlnb25fZ2VvanNvbikge1xyXG4gICAgICBjb25zdCBwb2x5Z29ucyA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgcm93LmRpc3RyaWN0c19wb2x5Z29uX2dlb2pzb25cclxuICAgICAgKSBhcyBGZWF0dXJlQ29sbGVjdGlvbjxQb2x5Z29uIHwgTXVsdGlQb2x5Z29uPjtcclxuICAgICAgZm9yIChjb25zdCBmZWF0dXJlIG9mIHBvbHlnb25zLmZlYXR1cmVzKSB7XHJcbiAgICAgICAgaWYgKGRpc3RyaWN0Q29kZXMuaGFzKE51bWJlcihmZWF0dXJlLnByb3BlcnRpZXMuS09EKSkpIHtcclxuICAgICAgICAgIGRpc3RyaWN0UG9seWdvbnNbZmVhdHVyZS5wcm9wZXJ0aWVzLktPRF0gPSB7XHJcbiAgICAgICAgICAgIHR5cGU6IFwiRmVhdHVyZUNvbGxlY3Rpb25cIixcclxuICAgICAgICAgICAgZmVhdHVyZXM6IFtcclxuICAgICAgICAgICAgICB7IC4uLmZlYXR1cmUsIHByb3BlcnRpZXM6IHsgY29kZTogZmVhdHVyZS5wcm9wZXJ0aWVzLktPRCB9IH0sXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGRpc3RyaWN0UG9seWdvbnM7XHJcbn07XHJcbiJdfQ==
1
+ import chunk from "lodash/chunk";
2
+ import { extractKeyValuesPairs, getKnexDb, insertMultipleRows, rawQuery, } from "./db";
3
+ const citiesColumn = {
4
+ cityName: 0,
5
+ cityCode: 1,
6
+ countyName: 2,
7
+ countyCode: 3,
8
+ regionName: 4,
9
+ regionCode: 5,
10
+ postalCode: 6,
11
+ latitude: 7,
12
+ longitude: 8,
13
+ };
14
+ export const insertCityPositions = async (data) => {
15
+ let changes = 0;
16
+ // cities are most likely already inserted, but in case they're not,
17
+ // we need to insert them before updating them with region data
18
+ changes += await insertCities(data);
19
+ const prev = changes;
20
+ for (const arrayChunk of chunk(data, 1000)) {
21
+ const queries = [];
22
+ for (const row of arrayChunk) {
23
+ queries.push(rawQuery(`UPDATE city SET wgs84_latitude = ?, wgs84_longitude = ? WHERE code = ?`, [
24
+ row[citiesColumn.latitude],
25
+ row[citiesColumn.longitude],
26
+ row[citiesColumn.cityCode],
27
+ ]));
28
+ }
29
+ await Promise.all(queries);
30
+ changes += queries.length;
31
+ console.log(`Done ${changes - prev} / ${data.length} rows...`);
32
+ }
33
+ return changes;
34
+ };
35
+ export const insertCities = async (buffer) => {
36
+ return await insertMultipleRows(extractKeyValuesPairs(buffer, citiesColumn.cityCode, [
37
+ citiesColumn.cityName,
38
+ ]), "city", ["code", "name"]);
39
+ };
40
+ export const setCityPolygonGeojson = async (code, polygon, districtsPolygon) => {
41
+ await getKnexDb()
42
+ .from("city")
43
+ .update({
44
+ polygon_geojson: JSON.stringify(polygon),
45
+ ...(districtsPolygon
46
+ ? { districts_polygon_geojson: JSON.stringify(districtsPolygon) }
47
+ : {}),
48
+ })
49
+ .where({ code });
50
+ };
51
+ export const getCityPolygons = async (cityCodes) => {
52
+ if (cityCodes.size === 0) {
53
+ return {};
54
+ }
55
+ const cityRows = await getKnexDb()
56
+ .from("city")
57
+ .select("code", "polygon_geojson")
58
+ .whereIn("code", Array.from(cityCodes));
59
+ return cityRows.reduce((acc, row) => {
60
+ acc[row.code] = JSON.parse(row.polygon_geojson);
61
+ return acc;
62
+ }, {});
63
+ };
64
+ export const getDistrictPolygons = async (districtCodes) => {
65
+ if (districtCodes.size === 0) {
66
+ return {};
67
+ }
68
+ const cityCodes = (await getKnexDb()
69
+ .from("city_district")
70
+ .select("city_code")
71
+ .whereIn("code", Array.from(districtCodes))
72
+ .groupBy("city_code")).map((row) => row.city_code);
73
+ const cityRows = await getKnexDb()
74
+ .from("city")
75
+ .select("code", "districts_polygon_geojson")
76
+ .whereIn("code", cityCodes);
77
+ const districtPolygons = {};
78
+ for (const row of cityRows) {
79
+ if (row.districts_polygon_geojson) {
80
+ const polygons = JSON.parse(row.districts_polygon_geojson);
81
+ for (const feature of polygons.features) {
82
+ if (districtCodes.has(Number(feature.properties.KOD))) {
83
+ districtPolygons[feature.properties.KOD] = {
84
+ type: "FeatureCollection",
85
+ features: [
86
+ { ...feature, properties: { code: feature.properties.KOD } },
87
+ ],
88
+ };
89
+ }
90
+ }
91
+ }
92
+ }
93
+ return districtPolygons;
94
+ };
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2l0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RiL2NpdGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxjQUFjLENBQUM7QUFDakMsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixTQUFTLEVBQ1Qsa0JBQWtCLEVBQ2xCLFFBQVEsR0FDVCxNQUFNLE1BQU0sQ0FBQztBQUlkLE1BQU0sWUFBWSxHQUFHO0lBQ25CLFFBQVEsRUFBRSxDQUFDO0lBQ1gsUUFBUSxFQUFFLENBQUM7SUFDWCxVQUFVLEVBQUUsQ0FBQztJQUNiLFVBQVUsRUFBRSxDQUFDO0lBQ2IsVUFBVSxFQUFFLENBQUM7SUFDYixVQUFVLEVBQUUsQ0FBQztJQUNiLFVBQVUsRUFBRSxDQUFDO0lBQ2IsUUFBUSxFQUFFLENBQUM7SUFDWCxTQUFTLEVBQUUsQ0FBQztDQUNiLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxLQUFLLEVBQ3RDLElBQWdCLEVBQ0MsRUFBRTtJQUNuQixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFFaEIsb0VBQW9FO0lBQ3BFLCtEQUErRDtJQUMvRCxPQUFPLElBQUksTUFBTSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDO0lBRXJCLEtBQUssTUFBTSxVQUFVLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRTtRQUMxQyxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbkIsS0FBSyxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUU7WUFDNUIsT0FBTyxDQUFDLElBQUksQ0FDVixRQUFRLENBQ04sd0VBQXdFLEVBQ3hFO2dCQUNFLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO2dCQUMxQixHQUFHLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQztnQkFDM0IsR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFR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MkJBQTJCLENBQUM7U0FDM0MsT0FBTyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUU5QixNQUFNLGdCQUFnQixHQUFvQixFQUFFLENBQUM7SUFDN0MsS0FBSyxNQUFNLEdBQUcsSUFBSSxRQUFRLEVBQUU7UUFDMUIsSUFBSSxHQUFHLENBQUMseUJBQXlCLEVBQUU7WUFDakMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDekIsR0FBRyxDQUFDLHlCQUF5QixDQUNlLENBQUM7WUFDL0MsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFO2dCQUN2QyxJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDckQsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRzt3QkFDekMsSUFBSSxFQUFFLG1CQUFtQjt3QkFDekIsUUFBUSxFQUFFOzRCQUNSLEVBQUUsR0FBRyxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUU7eUJBQzdEO3FCQUNGLENBQUM7aUJBQ0g7YUFDRjtTQUNGO0tBQ0Y7SUFFRCxPQUFPLGdCQUFnQixDQUFDO0FBQzFCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaHVuayBmcm9tIFwibG9kYXNoL2NodW5rXCI7XG5pbXBvcnQge1xuICBleHRyYWN0S2V5VmFsdWVzUGFpcnMsXG4gIGdldEtuZXhEYixcbiAgaW5zZXJ0TXVsdGlwbGVSb3dzLFxuICByYXdRdWVyeSxcbn0gZnJvbSBcIi4vZGJcIjtcbmltcG9ydCB7IEZlYXR1cmVDb2xsZWN0aW9uLCBNdWx0aVBvbHlnb24sIFBvbHlnb24gfSBmcm9tIFwiQHR1cmYvaGVscGVyc1wiO1xuaW1wb3J0IHsgUG9seWdvbnNCeUNvZGVzIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuY29uc3QgY2l0aWVzQ29sdW1uID0ge1xuICBjaXR5TmFtZTogMCxcbiAgY2l0eUNvZGU6IDEsXG4gIGNvdW50eU5hbWU6IDIsXG4gIGNvdW50eUNvZGU6IDMsXG4gIHJlZ2lvbk5hbWU6IDQsXG4gIHJlZ2lvbkNvZGU6IDUsXG4gIHBvc3RhbENvZGU6IDYsXG4gIGxhdGl0dWRlOiA3LFxuICBsb25naXR1ZGU6IDgsXG59O1xuXG5leHBvcnQgY29uc3QgaW5zZXJ0Q2l0eVBvc2l0aW9ucyA9IGFzeW5jIChcbiAgZGF0YTogc3RyaW5nW11bXVxuKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgbGV0IGNoYW5nZXMgPSAwO1xuXG4gIC8vIGNpdGllcyBhcmUgbW9zdCBsaWtlbHkgYWxyZWFkeSBpbnNlcnRlZCwgYnV0IGluIGNhc2UgdGhleSdyZSBub3QsXG4gIC8vIHdlIG5lZWQgdG8gaW5zZXJ0IHRoZW0gYmVmb3JlIHVwZGF0aW5nIHRoZW0gd2l0aCByZWdpb24gZGF0YVxuICBjaGFuZ2VzICs9IGF3YWl0IGluc2VydENpdGllcyhkYXRhKTtcbiAgY29uc3QgcHJldiA9IGNoYW5nZXM7XG5cbiAgZm9yIChjb25zdCBhcnJheUNodW5rIG9mIGNodW5rKGRhdGEsIDEwMDApKSB7XG4gICAgY29uc3QgcXVlcmllcyA9IFtdO1xuICAgIGZvciAoY29uc3Qgcm93IG9mIGFycmF5Q2h1bmspIHtcbiAgICAgIHF1ZXJpZXMucHVzaChcbiAgICAgICAgcmF3UXVlcnkoXG4gICAgICAgICAgYFVQREFURSBjaXR5IFNFVCB3Z3M4NF9sYXRpdHVkZSA9ID8sIHdnczg0X2xvbmdpdHVkZSA9ID8gV0hFUkUgY29kZSA9ID9gLFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIHJvd1tjaXRpZXNDb2x1bW4ubGF0aXR1ZGVdLFxuICAgICAgICAgICAgcm93W2NpdGllc0NvbHVtbi5sb25naXR1ZGVdLFxuICAgICAgICAgICAgcm93W2NpdGllc0NvbHVtbi5jaXR5Q29kZV0sXG4gICAgICAgICAgXVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICBhd2FpdCBQcm9taXNlLmFsbChxdWVyaWVzKTtcbiAgICBjaGFuZ2VzICs9IHF1ZXJpZXMubGVuZ3RoO1xuICAgIGNvbnNvbGUubG9nKGBEb25lICR7Y2hhbmdlcyAtIHByZXZ9IC8gJHtkYXRhLmxlbmd0aH0gcm93cy4uLmApO1xuICB9XG5cbiAgcmV0dXJuIGNoYW5nZXM7XG59O1xuXG5leHBvcnQgY29uc3QgaW5zZXJ0Q2l0aWVzID0gYXN5bmMgKGJ1ZmZlcjogc3RyaW5nW11bXSk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIHJldHVybiBhd2FpdCBpbnNlcnRNdWx0aXBsZVJvd3MoXG4gICAgZXh0cmFjdEtleVZhbHVlc1BhaXJzKGJ1ZmZlciwgY2l0aWVzQ29sdW1uLmNpdHlDb2RlLCBbXG4gICAgICBjaXRpZXNDb2x1bW4uY2l0eU5hbWUsXG4gICAgXSksXG4gICAgXCJjaXR5XCIsXG4gICAgW1wiY29kZVwiLCBcIm5hbWVcIl1cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRDaXR5UG9seWdvbkdlb2pzb24gPSBhc3luYyAoXG4gIGNvZGU6IHN0cmluZyxcbiAgcG9seWdvbjogRmVhdHVyZUNvbGxlY3Rpb24sXG4gIGRpc3RyaWN0c1BvbHlnb24/OiBGZWF0dXJlQ29sbGVjdGlvblxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGF3YWl0IGdldEtuZXhEYigpXG4gICAgLmZyb20oXCJjaXR5XCIpXG4gICAgLnVwZGF0ZSh7XG4gICAgICBwb2x5Z29uX2dlb2pzb246IEpTT04uc3RyaW5naWZ5KHBvbHlnb24pLFxuICAgICAgLi4uKGRpc3RyaWN0c1BvbHlnb25cbiAgICAgICAgPyB7IGRpc3RyaWN0c19wb2x5Z29uX2dlb2pzb246IEpTT04uc3RyaW5naWZ5KGRpc3RyaWN0c1BvbHlnb24pIH1cbiAgICAgICAgOiB7fSksXG4gICAgfSlcbiAgICAud2hlcmUoeyBjb2RlIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENpdHlQb2x5Z29ucyA9IGFzeW5jIChcbiAgY2l0eUNvZGVzOiBTZXQ8bnVtYmVyPlxuKTogUHJvbWlzZTxQb2x5Z29uc0J5Q29kZXM+ID0+IHtcbiAgaWYgKGNpdHlDb2Rlcy5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIGNvbnN0IGNpdHlSb3dzID0gYXdhaXQgZ2V0S25leERiKClcbiAgICAuZnJvbShcImNpdHlcIilcbiAgICAuc2VsZWN0KFwiY29kZVwiLCBcInBvbHlnb25fZ2VvanNvblwiKVxuICAgIC53aGVyZUluKFwiY29kZVwiLCBBcnJheS5mcm9tKGNpdHlDb2RlcykpO1xuXG4gIHJldHVybiBjaXR5Um93cy5yZWR1Y2UoKGFjYywgcm93KSA9PiB7XG4gICAgYWNjW3Jvdy5jb2RlXSA9IEpTT04ucGFyc2Uocm93LnBvbHlnb25fZ2VvanNvbik7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERpc3RyaWN0UG9seWdvbnMgPSBhc3luYyAoXG4gIGRpc3RyaWN0Q29kZXM6IFNldDxudW1iZXI+XG4pOiBQcm9taXNlPFBvbHlnb25zQnlDb2Rlcz4gPT4ge1xuICBpZiAoZGlzdHJpY3RDb2Rlcy5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIGNvbnN0IGNpdHlDb2RlcyA9IChcbiAgICBhd2FpdCBnZXRLbmV4RGIoKVxuICAgICAgLmZyb20oXCJjaXR5X2Rpc3RyaWN0XCIpXG4gICAgICAuc2VsZWN0KFwiY2l0eV9jb2RlXCIpXG4gICAgICAud2hlcmVJbihcImNvZGVcIiwgQXJyYXkuZnJvbShkaXN0cmljdENvZGVzKSlcbiAgICAgIC5ncm91cEJ5KFwiY2l0eV9jb2RlXCIpXG4gICkubWFwKChyb3cpID0+IHJvdy5jaXR5X2NvZGUpO1xuXG4gIGNvbnN0IGNpdHlSb3dzID0gYXdhaXQgZ2V0S25leERiKClcbiAgICAuZnJvbShcImNpdHlcIilcbiAgICAuc2VsZWN0KFwiY29kZVwiLCBcImRpc3RyaWN0c19wb2x5Z29uX2dlb2pzb25cIilcbiAgICAud2hlcmVJbihcImNvZGVcIiwgY2l0eUNvZGVzKTtcblxuICBjb25zdCBkaXN0cmljdFBvbHlnb25zOiBQb2x5Z29uc0J5Q29kZXMgPSB7fTtcbiAgZm9yIChjb25zdCByb3cgb2YgY2l0eVJvd3MpIHtcbiAgICBpZiAocm93LmRpc3RyaWN0c19wb2x5Z29uX2dlb2pzb24pIHtcbiAgICAgIGNvbnN0IHBvbHlnb25zID0gSlNPTi5wYXJzZShcbiAgICAgICAgcm93LmRpc3RyaWN0c19wb2x5Z29uX2dlb2pzb25cbiAgICAgICkgYXMgRmVhdHVyZUNvbGxlY3Rpb248UG9seWdvbiB8IE11bHRpUG9seWdvbj47XG4gICAgICBmb3IgKGNvbnN0IGZlYXR1cmUgb2YgcG9seWdvbnMuZmVhdHVyZXMpIHtcbiAgICAgICAgaWYgKGRpc3RyaWN0Q29kZXMuaGFzKE51bWJlcihmZWF0dXJlLnByb3BlcnRpZXMuS09EKSkpIHtcbiAgICAgICAgICBkaXN0cmljdFBvbHlnb25zW2ZlYXR1cmUucHJvcGVydGllcy5LT0RdID0ge1xuICAgICAgICAgICAgdHlwZTogXCJGZWF0dXJlQ29sbGVjdGlvblwiLFxuICAgICAgICAgICAgZmVhdHVyZXM6IFtcbiAgICAgICAgICAgICAgeyAuLi5mZWF0dXJlLCBwcm9wZXJ0aWVzOiB7IGNvZGU6IGZlYXR1cmUucHJvcGVydGllcy5LT0QgfSB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRpc3RyaWN0UG9seWdvbnM7XG59O1xuIl19
package/dist/db/db.d.ts CHANGED
@@ -1,37 +1,37 @@
1
- import { Knex } from "knex";
2
- interface DbConfig {
3
- dbType: SupportedDbType;
4
- pgConnectionString?: string;
5
- mysqlConnectionString?: string;
6
- initFilePath: string;
7
- filePath?: string;
8
- verbose: boolean;
9
- }
10
- export declare enum SupportedDbType {
11
- sqlite = "sqlite",
12
- postgres = "postgres",
13
- mysql = "mysql"
14
- }
15
- export declare const getKnexDb: (config?: Partial<DbConfig>) => Knex;
16
- export declare const isPostgres: (knex: Knex) => boolean;
17
- export declare const isSqlite: (knex: Knex) => boolean;
18
- export declare const isMysql: (knex: Knex) => boolean;
19
- export declare const initDb: (config?: Partial<DbConfig>) => Promise<Knex>;
20
- export declare const clearDb: (config?: Partial<DbConfig>) => Promise<Knex>;
21
- export declare const disconnectKnex: () => Promise<void>;
22
- export declare const nonEmptyOrNull: (value: string) => string | null;
23
- export declare const rawQuery: (query: string, ...bindings: readonly Knex.RawBinding[]) => Promise<any[]>;
24
- /**
25
- * Efficiently insert multiple rows. If preventDuplicatesByFirstColumn is true, the first
26
- * column should be unique (PK or UNIQUE).
27
- */
28
- export declare const insertMultipleRows: (rows: string[][], table: string, columnNames: string[], preventDuplicates?: boolean) => Promise<number>;
29
- /**
30
- * Insert a single row and return the autoincremented ID.
31
- */
32
- export declare const insertAutoincrementRow: (row: any[], table: string, columnNames: string[]) => Promise<number | null>;
33
- export declare const deleteMultipleRowsKnex: (keys: string[], table: string, keyColumnName: string) => Promise<void>;
34
- export declare const generatePlaceholders: (n: number) => string;
35
- export declare const generate2DPlaceholders: (inner: number, outer: number) => string;
36
- export declare const extractKeyValuesPairs: (array: string[][], keyIndex: number, valuesIndices: number[]) => string[][];
37
- export {};
1
+ import { Knex } from "knex";
2
+ interface DbConfig {
3
+ dbType: SupportedDbType;
4
+ pgConnectionString?: string;
5
+ mysqlConnectionString?: string;
6
+ initFilePath: string;
7
+ filePath?: string;
8
+ verbose: boolean;
9
+ }
10
+ export declare enum SupportedDbType {
11
+ sqlite = "sqlite",
12
+ postgres = "postgres",
13
+ mysql = "mysql"
14
+ }
15
+ export declare const getKnexDb: (config?: Partial<DbConfig>) => Knex;
16
+ export declare const isPostgres: (knex: Knex) => boolean;
17
+ export declare const isSqlite: (knex: Knex) => boolean;
18
+ export declare const isMysql: (knex: Knex) => boolean;
19
+ export declare const initDb: (config?: Partial<DbConfig>) => Promise<Knex>;
20
+ export declare const clearDb: (config?: Partial<DbConfig>) => Promise<Knex>;
21
+ export declare const disconnectKnex: () => Promise<void>;
22
+ export declare const nonEmptyOrNull: (value: string) => string | null;
23
+ export declare const rawQuery: (query: string, ...bindings: readonly Knex.RawBinding[]) => Promise<any[]>;
24
+ /**
25
+ * Efficiently insert multiple rows. If preventDuplicatesByFirstColumn is true, the first
26
+ * column should be unique (PK or UNIQUE).
27
+ */
28
+ export declare const insertMultipleRows: (rows: string[][], table: string, columnNames: string[], preventDuplicates?: boolean) => Promise<number>;
29
+ /**
30
+ * Insert a single row and return the autoincremented ID.
31
+ */
32
+ export declare const insertAutoincrementRow: (row: any[], table: string, columnNames: string[]) => Promise<number | null>;
33
+ export declare const deleteMultipleRowsKnex: (keys: string[], table: string, keyColumnName: string) => Promise<void>;
34
+ export declare const generatePlaceholders: (n: number) => string;
35
+ export declare const generate2DPlaceholders: (inner: number, outer: number) => string;
36
+ export declare const extractKeyValuesPairs: (array: string[][], keyIndex: number, valuesIndices: number[]) => string[][];
37
+ export {};