text-to-map 1.1.42 → 1.1.44
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/bin/clear-all.js +3 -3
- package/dist/bin/streets.js +5 -2
- package/dist/db/schools.js +43 -27
- package/dist/db/street-sync.d.ts +1 -0
- package/dist/db/street-sync.js +4 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +4 -6
- package/dist/open-data-sync/address-points.js +2 -2
- package/dist/open-data-sync/schools.d.ts +1 -1
- package/dist/open-data-sync/schools.js +129 -233
- package/dist/open-data-sync/streets.d.ts +1 -1
- package/dist/open-data-sync/streets.js +8 -3
- package/dist/utils/helpers.d.ts +2 -2
- package/dist/utils/helpers.js +3 -3
- package/package.json +7 -5
package/dist/bin/clear-all.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { clearDb, disconnectKnex } from "../db/db";
|
|
2
|
-
import {
|
|
2
|
+
import { deleteSchoolsJsonldFile } from "../open-data-sync/schools";
|
|
3
3
|
import { defaultBinOptions } from "./constants";
|
|
4
4
|
async function main() {
|
|
5
5
|
console.log("Clearing all data...");
|
|
6
6
|
await clearDb();
|
|
7
7
|
console.log("DB cleared. Now deleting schools XML file...");
|
|
8
|
-
|
|
8
|
+
deleteSchoolsJsonldFile(defaultBinOptions);
|
|
9
9
|
await disconnectKnex();
|
|
10
10
|
console.log("Everything cleared, ready for a new sync.");
|
|
11
11
|
}
|
|
12
12
|
main();
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xlYXItYWxsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi9jbGVhci1hbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWhELEtBQUssVUFBVSxJQUFJO0lBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUNwQyxNQUFNLE9BQU8sRUFBRSxDQUFDO0lBQ2hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsOENBQThDLENBQUMsQ0FBQztJQUM1RCx1QkFBdUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sY0FBYyxFQUFFLENBQUM7SUFDdkIsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFFRCxJQUFJLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNsZWFyRGIsIGRpc2Nvbm5lY3RLbmV4IH0gZnJvbSBcIi4uL2RiL2RiXCI7XHJcbmltcG9ydCB7IGRlbGV0ZVNjaG9vbHNKc29ubGRGaWxlIH0gZnJvbSBcIi4uL29wZW4tZGF0YS1zeW5jL3NjaG9vbHNcIjtcclxuaW1wb3J0IHsgZGVmYXVsdEJpbk9wdGlvbnMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcclxuXHJcbmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XHJcbiAgY29uc29sZS5sb2coXCJDbGVhcmluZyBhbGwgZGF0YS4uLlwiKTtcclxuICBhd2FpdCBjbGVhckRiKCk7XHJcbiAgY29uc29sZS5sb2coXCJEQiBjbGVhcmVkLiBOb3cgZGVsZXRpbmcgc2Nob29scyBYTUwgZmlsZS4uLlwiKTtcclxuICBkZWxldGVTY2hvb2xzSnNvbmxkRmlsZShkZWZhdWx0QmluT3B0aW9ucyk7XHJcbiAgYXdhaXQgZGlzY29ubmVjdEtuZXgoKTtcclxuICBjb25zb2xlLmxvZyhcIkV2ZXJ5dGhpbmcgY2xlYXJlZCwgcmVhZHkgZm9yIGEgbmV3IHN5bmMuXCIpO1xyXG59XHJcblxyXG5tYWluKCk7XHJcbiJdfQ==
|
package/dist/bin/streets.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { downloadAndImportStreets } from "../open-data-sync/streets";
|
|
2
2
|
import { defaultBinOptions } from "./constants";
|
|
3
|
+
// Parse command line arguments
|
|
4
|
+
const args = process.argv.slice(2);
|
|
5
|
+
const noCache = args.includes('--no-cache');
|
|
3
6
|
console.time("downloadAndImportAllStreets");
|
|
4
|
-
downloadAndImportStreets(defaultBinOptions)
|
|
7
|
+
downloadAndImportStreets(defaultBinOptions, noCache)
|
|
5
8
|
.then(() => {
|
|
6
9
|
console.timeEnd("downloadAndImportAllStreets");
|
|
7
10
|
})
|
|
@@ -13,4 +16,4 @@ downloadAndImportStreets(defaultBinOptions)
|
|
|
13
16
|
console.log(error);
|
|
14
17
|
}
|
|
15
18
|
});
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWV0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vc3RyZWV0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsK0JBQStCO0FBQy9CLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7QUFFNUMsT0FBTyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQztLQUNqRCxJQUFJLENBQUMsR0FBRyxFQUFFO0lBQ1QsT0FBTyxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0FBQ2pELENBQUMsQ0FBQztLQUNELEtBQUssQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO0lBQ3BCLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUNqQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDakM7U0FBTTtRQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDcEI7QUFDSCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRvd25sb2FkQW5kSW1wb3J0U3RyZWV0cyB9IGZyb20gXCIuLi9vcGVuLWRhdGEtc3luYy9zdHJlZXRzXCI7XHJcbmltcG9ydCB7IGRlZmF1bHRCaW5PcHRpb25zIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XHJcblxyXG4vLyBQYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzXHJcbmNvbnN0IGFyZ3MgPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMik7XHJcbmNvbnN0IG5vQ2FjaGUgPSBhcmdzLmluY2x1ZGVzKCctLW5vLWNhY2hlJyk7XHJcblxyXG5jb25zb2xlLnRpbWUoXCJkb3dubG9hZEFuZEltcG9ydEFsbFN0cmVldHNcIik7XHJcbmRvd25sb2FkQW5kSW1wb3J0U3RyZWV0cyhkZWZhdWx0QmluT3B0aW9ucywgbm9DYWNoZSlcclxuICAudGhlbigoKSA9PiB7XHJcbiAgICBjb25zb2xlLnRpbWVFbmQoXCJkb3dubG9hZEFuZEltcG9ydEFsbFN0cmVldHNcIik7XHJcbiAgfSlcclxuICAuY2F0Y2goKGVycm9yOiBhbnkpID0+IHtcclxuICAgIGlmIChlcnJvci5oYXNPd25Qcm9wZXJ0eShcInN0YWNrXCIpKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yLCBlcnJvci5zdGFjayk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICB9XHJcbiAgfSk7XHJcbiJdfQ==
|
package/dist/db/schools.js
CHANGED
|
@@ -1,26 +1,18 @@
|
|
|
1
1
|
import { wholeLineError } from "../street-markdown/smd";
|
|
2
2
|
import { findClosestString } from "../utils/helpers";
|
|
3
3
|
import { getKnexDb, insertMultipleRows } from "./db";
|
|
4
|
+
const BATCH_SIZE = 500;
|
|
4
5
|
export const insertSchools = async (schools) => {
|
|
5
6
|
const knex = getKnexDb();
|
|
6
7
|
const uniqueSchools = filterOutDuplicates(schools);
|
|
7
|
-
|
|
8
|
-
const
|
|
8
|
+
// Fetch all existing schools with their current location in one query
|
|
9
|
+
const existing = await knex("school")
|
|
9
10
|
.leftJoin("school_location", "school.izo", "school_location.school_izo")
|
|
10
|
-
.
|
|
11
|
-
|
|
12
|
-
const toInsert = uniqueSchools.filter((
|
|
13
|
-
const toUpdate = uniqueSchools.filter((
|
|
14
|
-
|
|
15
|
-
...toInsert,
|
|
16
|
-
...toUpdate.filter((school) => schoolsWithoutLocationIzos.includes(school.izo)),
|
|
17
|
-
];
|
|
18
|
-
for (const school of toUpdate) {
|
|
19
|
-
await knex.from("school").where("izo", school.izo).update({
|
|
20
|
-
name: school.name,
|
|
21
|
-
capacity: school.capacity,
|
|
22
|
-
});
|
|
23
|
-
}
|
|
11
|
+
.select("school.izo", "school.name", "school.capacity", "school_location.address_point_id");
|
|
12
|
+
const existingMap = new Map(existing.map((r) => [r.izo, r]));
|
|
13
|
+
const toInsert = uniqueSchools.filter((s) => !existingMap.has(s.izo));
|
|
14
|
+
const toUpdate = uniqueSchools.filter((s) => existingMap.has(s.izo));
|
|
15
|
+
// --- Insert new schools ---
|
|
24
16
|
const insertedSchools = await insertMultipleRows(toInsert.map((school) => [
|
|
25
17
|
school.izo,
|
|
26
18
|
school.redizo,
|
|
@@ -28,20 +20,44 @@ export const insertSchools = async (schools) => {
|
|
|
28
20
|
school.capacity.toString(),
|
|
29
21
|
school.type.toString(),
|
|
30
22
|
]), "school", ["izo", "redizo", "name", "capacity", "type"]);
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
.
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
23
|
+
// --- Update existing schools (name + capacity) in batches ---
|
|
24
|
+
const toUpdateFields = toUpdate.filter((s) => {
|
|
25
|
+
const row = existingMap.get(s.izo);
|
|
26
|
+
return row.name !== s.name || Number(row.capacity) !== s.capacity;
|
|
27
|
+
});
|
|
28
|
+
for (let i = 0; i < toUpdateFields.length; i += BATCH_SIZE) {
|
|
29
|
+
const batch = toUpdateFields.slice(i, i + BATCH_SIZE);
|
|
30
|
+
await Promise.all(batch.map((s) => knex("school").where("izo", s.izo).update({ name: s.name, capacity: s.capacity })));
|
|
31
|
+
}
|
|
32
|
+
// --- Handle locations ---
|
|
33
|
+
// New schools and existing schools without any location need an insert
|
|
34
|
+
const toInsertLocation = [
|
|
35
|
+
...toInsert,
|
|
36
|
+
...toUpdate.filter((s) => existingMap.get(s.izo).address_point_id === null),
|
|
37
|
+
].filter((s) => s.locations.length > 0);
|
|
38
|
+
// Existing schools whose first location changed need a delete + insert
|
|
39
|
+
// Guard against reordering: only update if the old RUIAN is gone entirely from the new locations
|
|
40
|
+
const toUpdateLocation = toUpdate.filter((s) => {
|
|
41
|
+
const row = existingMap.get(s.izo);
|
|
42
|
+
const newRuians = s.locations.map((l) => l.addressPointId);
|
|
43
|
+
return (row.address_point_id !== null &&
|
|
44
|
+
newRuians.length > 0 &&
|
|
45
|
+
!newRuians.includes(row.address_point_id));
|
|
46
|
+
});
|
|
47
|
+
// Delete outdated locations in batches
|
|
48
|
+
for (let i = 0; i < toUpdateLocation.length; i += BATCH_SIZE) {
|
|
49
|
+
const batch = toUpdateLocation.slice(i, i + BATCH_SIZE);
|
|
50
|
+
await knex("school_location")
|
|
51
|
+
.whereIn("school_izo", batch.map((s) => s.izo))
|
|
52
|
+
.delete();
|
|
53
|
+
}
|
|
37
54
|
let insertedLocations = 0;
|
|
38
|
-
|
|
39
|
-
for (const location of locations) {
|
|
55
|
+
for (const school of [...toInsertLocation, ...toUpdateLocation]) {
|
|
40
56
|
try {
|
|
41
|
-
insertedLocations += await insertMultipleRows([
|
|
57
|
+
insertedLocations += await insertMultipleRows([[school.izo, school.locations[0].addressPointId.toString()]], "school_location", ["school_izo", "address_point_id"], true);
|
|
42
58
|
}
|
|
43
59
|
catch (error) {
|
|
44
|
-
console.log(`Cannot add location with RUIAN code ${
|
|
60
|
+
console.log(`Cannot add location with RUIAN code ${school.locations[0].addressPointId} (school IZO = ${school.izo}): code does not exist.`);
|
|
45
61
|
}
|
|
46
62
|
}
|
|
47
63
|
return insertedSchools + insertedLocations;
|
|
@@ -76,4 +92,4 @@ const filterOutDuplicates = (schools) => {
|
|
|
76
92
|
return !duplicate;
|
|
77
93
|
});
|
|
78
94
|
};
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nob29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYi9zY2hvb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3JELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxLQUFLLEVBQUUsT0FBaUIsRUFBbUIsRUFBRTtJQUN4RSxNQUFNLElBQUksR0FBRyxTQUFTLEVBQUUsQ0FBQztJQUV6QixNQUFNLGFBQWEsR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuRCxNQUFNLFdBQVcsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQy9ELENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUNqQixDQUFDO0lBQ0YsTUFBTSwwQkFBMEIsR0FBRyxDQUNqQyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDakIsUUFBUSxDQUFDLGlCQUFpQixFQUFFLFlBQVksRUFBRSw0QkFBNEIsQ0FBQztTQUN2RSxTQUFTLENBQUMsNEJBQTRCLENBQUM7U0FDdkMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUN4QixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXhCLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQ25DLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUM5QyxDQUFD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QztRQUN2QixPQUFPLENBQUMsU0FBUyxDQUFDO0lBQ3BCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgd2hvbGVMaW5lRXJyb3IgfSBmcm9tIFwiLi4vc3RyZWV0LW1hcmtkb3duL3NtZFwiO1xyXG5pbXBvcnQgeyBTbWRFcnJvciB9IGZyb20gXCIuLi9zdHJlZXQtbWFya2Rvd24vdHlwZXNcIjtcclxuaW1wb3J0IHsgZmluZENsb3Nlc3RTdHJpbmcgfSBmcm9tIFwiLi4vdXRpbHMvaGVscGVyc1wiO1xyXG5pbXBvcnQgeyBnZXRLbmV4RGIsIGluc2VydE11bHRpcGxlUm93cyB9IGZyb20gXCIuL2RiXCI7XHJcbmltcG9ydCB7IFNjaG9vbCB9IGZyb20gXCIuL3R5cGVzXCI7XHJcblxyXG5leHBvcnQgY29uc3QgaW5zZXJ0U2Nob29scyA9IGFzeW5jIChzY2hvb2xzOiBTY2hvb2xbXSk6IFByb21pc2U8bnVtYmVyPiA9PiB7XHJcbiAgY29uc3Qga25leCA9IGdldEtuZXhEYigpO1xyXG5cclxuICBjb25zdCB1bmlxdWVTY2hvb2xzID0gZmlsdGVyT3V0RHVwbGljYXRlcyhzY2hvb2xzKTtcclxuICBjb25zdCBleGlzdGluZ0l6byA9IChhd2FpdCBrbmV4LnNlbGVjdChcIml6b1wiKS5mcm9tKFwic2Nob29sXCIpKS5tYXAoXHJcbiAgICAocm93KSA9PiByb3cuaXpvXHJcbiAgKTtcclxuICBjb25zdCBzY2hvb2xzV2l0aG91dExvY2F0aW9uSXpvcyA9IChcclxuICAgIGF3YWl0IGtuZXgoXCJzY2hvb2xcIilcclxuICAgICAgLmxlZnRKb2luKFwic2Nob29sX2xvY2F0aW9uXCIsIFwic2Nob29sLml6b1wiLCBcInNjaG9vbF9sb2NhdGlvbi5zY2hvb2xfaXpvXCIpXHJcbiAgICAgIC53aGVyZU51bGwoXCJzY2hvb2xfbG9jYXRpb24uc2Nob29sX2l6b1wiKVxyXG4gICAgICAuc2VsZWN0KFwic2Nob29sLml6b1wiKVxyXG4gICkubWFwKChyb3cpID0+IHJvdy5pem8pO1xyXG5cclxuICBjb25zdCB0b0luc2VydCA9IHVuaXF1ZVNjaG9vbHMuZmlsdGVyKFxyXG4gICAgKHNjaG9vbCkgPT4gIWV4aXN0aW5nSXpvLmluY2x1ZGVzKHNjaG9vbC5pem8pXHJcbiAgKTtcclxuICBjb25zdCB0b1VwZGF0ZSA9IHVuaXF1ZVNjaG9vbHMuZmlsdGVyKChzY2hvb2wpID0+XHJcbiAgICBleGlzdGluZ0l6by5pbmNsdWRlcyhzY2hvb2wuaXpvKVxyXG4gICk7XHJcbiAgY29uc3QgdG9JbnNlcnRMb2NhdGlvbiA9IFtcclxuICAgIC4uLnRvSW5zZXJ0LFxyXG4gICAgLi4udG9VcGRhdGUuZmlsdGVyKChzY2hvb2wpID0+XHJcbiAgICAgIHNjaG9vbHNXaXRob3V0TG9jYXRpb25Jem9zLmluY2x1ZGVzKHNjaG9vbC5pem8pXHJcbiAgICApLFxyXG4gIF07XHJcblxyXG4gIGZvciAoY29uc3Qgc2Nob29sIG9mIHRvVXBkYXRlKSB7XHJcbiAgICBhd2FpdCBrbmV4LmZyb20oXCJzY2hvb2xcIikud2hlcmUoXCJpem9cIiwgc2Nob29sLml6bykudXBkYXRlKHtcclxuICAgICAgbmFtZTogc2Nob29sLm5hbWUsXHJcbiAgICAgIGNhcGFjaXR5OiBzY2hvb2wuY2FwYWNpdHksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGluc2VydGVkU2Nob29scyA9IGF3YWl0IGluc2VydE11bHRpcGxlUm93cyhcclxuICAgIHRvSW5zZXJ0Lm1hcCgoc2Nob29sKSA9PiBbXHJcbiAgICAgIHNjaG9vbC5pem8sXHJcbiAgICAgIHNjaG9vbC5yZWRpem8sXHJcbiAgICAgIHNjaG9vbC5uYW1lLFxyXG4gICAgICBzY2hvb2wuY2FwYWNpdHkudG9TdHJpbmcoKSxcclxuICAgICAgc2Nob29sLnR5cGUudG9TdHJpbmcoKSxcclxuICAgIF0pLFxyXG4gICAgXCJzY2hvb2xcIixcclxuICAgIFtcIml6b1wiLCBcInJlZGl6b1wiLCBcIm5hbWVcIiwgXCJjYXBhY2l0eVwiLCBcInR5cGVcIl1cclxuICApO1xyXG5cclxuICBjb25zdCBsb2NhdGlvbnMgPSB0b0luc2VydExvY2F0aW9uXHJcbiAgICAuZmlsdGVyKChzY2hvb2wpID0+IHNjaG9vbC5sb2NhdGlvbnMubGVuZ3RoID4gMClcclxuICAgIC5tYXAoKHNjaG9vbCkgPT4gW1xyXG4gICAgICBzY2hvb2wuaXpvLFxyXG4gICAgICBzY2hvb2wubG9jYXRpb25zWzBdLmFkZHJlc3NQb2ludElkLnRvU3RyaW5nKCksIC8vIGFkZCBvbmx5IGZpcnN0IGxvY2F0aW9uXHJcbiAgICBdKTtcclxuXHJcbiAgbGV0IGluc2VydGVkTG9jYXRpb25zID0gMDtcclxuXHJcbiAgLy8gcGx1cyBmaWx0ZXIgb3V0IGR1cGxpY2F0ZSBsb2NhdGlvbnMgKHNhbWUgYWRkcmVzcyBpZCArIGl6bylcclxuICBmb3IgKGNvbnN0IGxvY2F0aW9uIG9mIGxvY2F0aW9ucykge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaW5zZXJ0ZWRMb2NhdGlvbnMgKz0gYXdhaXQgaW5zZXJ0TXVsdGlwbGVSb3dzKFxyXG4gICAgICAgIFtsb2NhdGlvbl0sXHJcbiAgICAgICAgXCJzY2hvb2xfbG9jYXRpb25cIixcclxuICAgICAgICBbXCJzY2hvb2xfaXpvXCIsIFwiYWRkcmVzc19wb2ludF9pZFwiXSxcclxuICAgICAgICB0cnVlXHJcbiAgICAgICk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICBgQ2Fubm90IGFkZCBsb2NhdGlvbiB3aXRoIFJVSUFOIGNvZGUgJHtsb2NhdGlvblsxXX0gKHNjaG9vbCBJWk8gPSAke2xvY2F0aW9uWzBdfSk6IGNvZGUgZG9lcyBub3QgZXhpc3QuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGluc2VydGVkU2Nob29scyArIGluc2VydGVkTG9jYXRpb25zO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGZpbmRTY2hvb2wgPSAoXHJcbiAgbmFtZTogc3RyaW5nLFxyXG4gIHNjaG9vbHM6IFNjaG9vbFtdLFxyXG4gIG1heERpc3RhbmNlPzogbnVtYmVyXHJcbik6IHsgc2Nob29sOiBTY2hvb2wgfCBudWxsOyBlcnJvcnM6IFNtZEVycm9yW10gfSA9PiB7XHJcbiAgaWYgKHNjaG9vbHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzY2hvb2w6IG51bGwsXHJcbiAgICAgIGVycm9yczogW3dob2xlTGluZUVycm9yKFwiQWt0dcOhbG7DrSB6xZlpem92YXRlbCBuZW3DoSDFvsOhZG7DqSDFoWtvbHkuXCIsIG5hbWUpXSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjb25zdCBlcnJvcnM6IFNtZEVycm9yW10gPSBbXTtcclxuXHJcbiAgY29uc3QgZXhhY3RTY2hvb2wgPSBzY2hvb2xzLmZpbmQoKHNjaG9vbCkgPT4gc2Nob29sLm5hbWUgPT09IG5hbWUpO1xyXG4gIGlmIChleGFjdFNjaG9vbCkge1xyXG4gICAgcmV0dXJuIHsgc2Nob29sOiBleGFjdFNjaG9vbCwgZXJyb3JzIH07XHJcbiAgfVxyXG5cclxuICBjb25zdCBuYW1lc0xpc3QgPSBzY2hvb2xzLm1hcCgoc2Nob29sKSA9PiBzY2hvb2wubmFtZSk7XHJcbiAgY29uc3QgYmVzdE1hdGNoID0gZmluZENsb3Nlc3RTdHJpbmcobmFtZSwgbmFtZXNMaXN0LCBtYXhEaXN0YW5jZSk7XHJcbiAgaWYgKGJlc3RNYXRjaCA9PT0gbnVsbCkge1xyXG4gICAgZXJyb3JzLnB1c2god2hvbGVMaW5lRXJyb3IoYMWga29sYSBzIG7DoXp2ZW0gJyR7bmFtZX0nIG5lZXhpc3R1amUuYCwgbmFtZSkpO1xyXG4gICAgcmV0dXJuIHsgc2Nob29sOiBudWxsLCBlcnJvcnMgfTtcclxuICB9XHJcbiAgY29uc3QgY2xvc2VzdFNjaG9vbCA9IHNjaG9vbHMuZmluZCgoc2Nob29sKSA9PiBiZXN0TWF0Y2ggPT09IHNjaG9vbC5uYW1lKTtcclxuXHJcbiAgZXJyb3JzLnB1c2goXHJcbiAgICB3aG9sZUxpbmVFcnJvcihcclxuICAgICAgYMWga29sYSBzIG7DoXp2ZW0gJyR7bmFtZX0nIG5lZXhpc3R1amUsIG15c2xlbGkganN0ZSAnJHtiZXN0TWF0Y2h9Jz9gLFxyXG4gICAgICBuYW1lXHJcbiAgICApXHJcbiAgKTtcclxuXHJcbiAgcmV0dXJuIHsgc2Nob29sOiBjbG9zZXN0U2Nob29sLCBlcnJvcnMgfTtcclxufTtcclxuXHJcbmNvbnN0IGZpbHRlck91dER1cGxpY2F0ZXMgPSAoc2Nob29sczogU2Nob29sW10pOiBTY2hvb2xbXSA9PiB7XHJcbiAgY29uc3QgaXpvU2V0ID0gbmV3IFNldCgpO1xyXG4gIHJldHVybiBzY2hvb2xzLmZpbHRlcigoc2Nob29sKSA9PiB7XHJcbiAgICBjb25zdCBkdXBsaWNhdGUgPSBpem9TZXQuaGFzKHNjaG9vbC5pem8pO1xyXG4gICAgaXpvU2V0LmFkZChzY2hvb2wuaXpvKTtcclxuICAgIHJldHVybiAhZHVwbGljYXRlO1xyXG4gIH0pO1xyXG59O1xyXG4iXX0=
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nob29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYi9zY2hvb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3JELE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUV2QixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxFQUFFLE9BQWlCLEVBQW1CLEVBQUU7SUFDeEUsTUFBTSxJQUFJLEdBQUcsU0FBUyxFQUFFLENBQUM7SUFFekIsTUFBTSxhQUFhLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFbkQsc0VBQXNFO0lBQ3RFLE1BQU0sUUFBUSxHQUNaLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUNqQixRQUFRLENBQUMsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLDRCQUE0QixDQUFDO1NBQ3ZFLE1BQU0sQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLGtDQUFrQyxDQUFDLENBQUM7SUFFaEcsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU3RCxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEUsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMs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RUYsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLE9BQWlCLEVBQVksRUFBRTtJQUMxRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQy9CLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLE9BQU8sQ0FBQyxTQUFTLENBQUM7SUFDcEIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB3aG9sZUxpbmVFcnJvciB9IGZyb20gXCIuLi9zdHJlZXQtbWFya2Rvd24vc21kXCI7XHJcbmltcG9ydCB7IFNtZEVycm9yIH0gZnJvbSBcIi4uL3N0cmVldC1tYXJrZG93bi90eXBlc1wiO1xyXG5pbXBvcnQgeyBmaW5kQ2xvc2VzdFN0cmluZyB9IGZyb20gXCIuLi91dGlscy9oZWxwZXJzXCI7XHJcbmltcG9ydCB7IGdldEtuZXhEYiwgaW5zZXJ0TXVsdGlwbGVSb3dzIH0gZnJvbSBcIi4vZGJcIjtcclxuaW1wb3J0IHsgU2Nob29sIH0gZnJvbSBcIi4vdHlwZXNcIjtcclxuXHJcbmNvbnN0IEJBVENIX1NJWkUgPSA1MDA7XHJcblxyXG5leHBvcnQgY29uc3QgaW5zZXJ0U2Nob29scyA9IGFzeW5jIChzY2hvb2xzOiBTY2hvb2xbXSk6IFByb21pc2U8bnVtYmVyPiA9PiB7XHJcbiAgY29uc3Qga25leCA9IGdldEtuZXhEYigpO1xyXG5cclxuICBjb25zdCB1bmlxdWVTY2hvb2xzID0gZmlsdGVyT3V0RHVwbGljYXRlcyhzY2hvb2xzKTtcclxuXHJcbiAgLy8gRmV0Y2ggYWxsIGV4aXN0aW5nIHNjaG9vbHMgd2l0aCB0aGVpciBjdXJyZW50IGxvY2F0aW9uIGluIG9uZSBxdWVyeVxyXG4gIGNvbnN0IGV4aXN0aW5nOiB7IGl6bzogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IGNhcGFjaXR5OiBudW1iZXI7IGFkZHJlc3NfcG9pbnRfaWQ6IG51bWJlciB8IG51bGwgfVtdID1cclxuICAgIGF3YWl0IGtuZXgoXCJzY2hvb2xcIilcclxuICAgICAgLmxlZnRKb2luKFwic2Nob29sX2xvY2F0aW9uXCIsIFwic2Nob29sLml6b1wiLCBcInNjaG9vbF9sb2NhdGlvbi5zY2hvb2xfaXpvXCIpXHJcbiAgICAgIC5zZWxlY3QoXCJzY2hvb2wuaXpvXCIsIFwic2Nob29sLm5hbWVcIiwgXCJzY2hvb2wuY2FwYWNpdHlcIiwgXCJzY2hvb2xfbG9jYXRpb24uYWRkcmVzc19wb2ludF9pZFwiKTtcclxuXHJcbiAgY29uc3QgZXhpc3RpbmdNYXAgPSBuZXcgTWFwKGV4aXN0aW5nLm1hcCgocikgPT4gW3IuaXpvLCByXSkpO1xyXG5cclxuICBjb25zdCB0b0luc2VydCA9IHVuaXF1ZVNjaG9vbHMuZmlsdGVyKChzKSA9PiAhZXhpc3RpbmdNYXAuaGFzKHMuaXpvKSk7XHJcbiAgY29uc3QgdG9VcGRhdGUgPSB1bmlxdWVTY2hvb2xzLmZpbHRlcigocykgPT4gZXhpc3RpbmdNYXAuaGFzKHMuaXpvKSk7XHJcblxyXG4gIC8vIC0tLSBJbnNlcnQgbmV3IHNjaG9vbHMgLS0tXHJcbiAgY29uc3QgaW5zZXJ0ZWRTY2hvb2xzID0gYXdhaXQgaW5zZXJ0TXVsdGlwbGVSb3dzKFxyXG4gICAgdG9JbnNlcnQubWFwKChzY2hvb2wpID0+IFtcclxuICAgICAgc2Nob29sLml6byxcclxuICAgICAgc2Nob29sLnJlZGl6byxcclxuICAgICAgc2Nob29sLm5hbWUsXHJcbiAgICAgIHNjaG9vbC5jYXBhY2l0eS50b1N0cmluZygpLFxyXG4gICAgICBzY2hvb2wudHlwZS50b1N0cmluZygpLFxyXG4gICAgXSksXHJcbiAgICBcInNjaG9vbFwiLFxyXG4gICAgW1wiaXpvXCIsIFwicmVkaXpvXCIsIFwibmFtZVwiLCBcImNhcGFjaXR5XCIsIFwidHlwZVwiXVxyXG4gICk7XHJcblxyXG4gIC8vIC0tLSBVcGRhdGUgZXhpc3Rpbmcgc2Nob29scyAobmFtZSArIGNhcGFjaXR5KSBpbiBiYXRjaGVzIC0tLVxyXG4gIGNvbnN0IHRvVXBkYXRlRmllbGRzID0gdG9VcGRhdGUuZmlsdGVyKChzKSA9PiB7XHJcbiAgICBjb25zdCByb3cgPSBleGlzdGluZ01hcC5nZXQocy5pem8pO1xyXG4gICAgcmV0dXJuIHJvdy5uYW1lICE9PSBzLm5hbWUgfHwgTnVtYmVyKHJvdy5jYXBhY2l0eSkgIT09IHMuY2FwYWNpdHk7XHJcbiAgfSk7XHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdG9VcGRhdGVGaWVsZHMubGVuZ3RoOyBpICs9IEJBVENIX1NJWkUpIHtcclxuICAgIGNvbnN0IGJhdGNoID0gdG9VcGRhdGVGaWVsZHMuc2xpY2UoaSwgaSArIEJBVENIX1NJWkUpO1xyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgIGJhdGNoLm1hcCgocykgPT5cclxuICAgICAgICBrbmV4KFwic2Nob29sXCIpLndoZXJlKFwiaXpvXCIsIHMuaXpvKS51cGRhdGUoeyBuYW1lOiBzLm5hbWUsIGNhcGFjaXR5OiBzLmNhcGFjaXR5IH0pXHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0gSGFuZGxlIGxvY2F0aW9ucyAtLS1cclxuICAvLyBOZXcgc2Nob29scyBhbmQgZXhpc3Rpbmcgc2Nob29scyB3aXRob3V0IGFueSBsb2NhdGlvbiBuZWVkIGFuIGluc2VydFxyXG4gIGNvbnN0IHRvSW5zZXJ0TG9jYXRpb24gPSBbXHJcbiAgICAuLi50b0luc2VydCxcclxuICAgIC4uLnRvVXBkYXRlLmZpbHRlcigocykgPT4gZXhpc3RpbmdNYXAuZ2V0KHMuaXpvKS5hZGRyZXNzX3BvaW50X2lkID09PSBudWxsKSxcclxuICBdLmZpbHRlcigocykgPT4gcy5sb2NhdGlvbnMubGVuZ3RoID4gMCk7XHJcblxyXG4gIC8vIEV4aXN0aW5nIHNjaG9vbHMgd2hvc2UgZmlyc3QgbG9jYXRpb24gY2hhbmdlZCBuZWVkIGEgZGVsZXRlICsgaW5zZXJ0XHJcbiAgLy8gR3VhcmQgYWdhaW5zdCByZW9yZGVyaW5nOiBvbmx5IHVwZGF0ZSBpZiB0aGUgb2xkIFJVSUFOIGlzIGdvbmUgZW50aXJlbHkgZnJvbSB0aGUgbmV3IGxvY2F0aW9uc1xyXG4gIGNvbnN0IHRvVXBkYXRlTG9jYXRpb24gPSB0b1VwZGF0ZS5maWx0ZXIoKHMpID0+IHtcclxuICAgIGNvbnN0IHJvdyA9IGV4aXN0aW5nTWFwLmdldChzLml6byk7XHJcbiAgICBjb25zdCBuZXdSdWlhbnMgPSBzLmxvY2F0aW9ucy5tYXAoKGwpID0+IGwuYWRkcmVzc1BvaW50SWQpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgcm93LmFkZHJlc3NfcG9pbnRfaWQgIT09IG51bGwgJiZcclxuICAgICAgbmV3UnVpYW5zLmxlbmd0aCA+IDAgJiZcclxuICAgICAgIW5ld1J1aWFucy5pbmNsdWRlcyhyb3cuYWRkcmVzc19wb2ludF9pZClcclxuICAgICk7XHJcbiAgfSk7XHJcblxyXG4gIC8vIERlbGV0ZSBvdXRkYXRlZCBsb2NhdGlvbnMgaW4gYmF0Y2hlc1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdG9VcGRhdGVMb2NhdGlvbi5sZW5ndGg7IGkgKz0gQkFUQ0hfU0laRSkge1xyXG4gICAgY29uc3QgYmF0Y2ggPSB0b1VwZGF0ZUxvY2F0aW9uLnNsaWNlKGksIGkgKyBCQVRDSF9TSVpFKTtcclxuICAgIGF3YWl0IGtuZXgoXCJzY2hvb2xfbG9jYXRpb25cIilcclxuICAgICAgLndoZXJlSW4oXHJcbiAgICAgICAgXCJzY2hvb2xfaXpvXCIsXHJcbiAgICAgICAgYmF0Y2gubWFwKChzKSA9PiBzLml6bylcclxuICAgICAgKVxyXG4gICAgICAuZGVsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBsZXQgaW5zZXJ0ZWRMb2NhdGlvbnMgPSAwO1xyXG5cclxuICBmb3IgKGNvbnN0IHNjaG9vbCBvZiBbLi4udG9JbnNlcnRMb2NhdGlvbiwgLi4udG9VcGRhdGVMb2NhdGlvbl0pIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGluc2VydGVkTG9jYXRpb25zICs9IGF3YWl0IGluc2VydE11bHRpcGxlUm93cyhcclxuICAgICAgICBbW3NjaG9vbC5pem8sIHNjaG9vbC5sb2NhdGlvbnNbMF0uYWRkcmVzc1BvaW50SWQudG9TdHJpbmcoKV1dLFxyXG4gICAgICAgIFwic2Nob29sX2xvY2F0aW9uXCIsXHJcbiAgICAgICAgW1wic2Nob29sX2l6b1wiLCBcImFkZHJlc3NfcG9pbnRfaWRcIl0sXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgICApO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgYENhbm5vdCBhZGQgbG9jYXRpb24gd2l0aCBSVUlBTiBjb2RlICR7c2Nob29sLmxvY2F0aW9uc1swXS5hZGRyZXNzUG9pbnRJZH0gKHNjaG9vbCBJWk8gPSAke3NjaG9vbC5pem99KTogY29kZSBkb2VzIG5vdCBleGlzdC5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gaW5zZXJ0ZWRTY2hvb2xzICsgaW5zZXJ0ZWRMb2NhdGlvbnM7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZmluZFNjaG9vbCA9IChcclxuICBuYW1lOiBzdHJpbmcsXHJcbiAgc2Nob29sczogU2Nob29sW10sXHJcbiAgbWF4RGlzdGFuY2U/OiBudW1iZXJcclxuKTogeyBzY2hvb2w6IFNjaG9vbCB8IG51bGw7IGVycm9yczogU21kRXJyb3JbXSB9ID0+IHtcclxuICBpZiAoc2Nob29scy5sZW5ndGggPT09IDApIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHNjaG9vbDogbnVsbCxcclxuICAgICAgZXJyb3JzOiBbd2hvbGVMaW5lRXJyb3IoXCJBa3R1w6FsbsOtIHrFmWl6b3ZhdGVsIG5lbcOhIMW+w6FkbsOpIMWha29seS5cIiwgbmFtZSldLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGVycm9yczogU21kRXJyb3JbXSA9IFtdO1xyXG5cclxuICBjb25zdCBleGFjdFNjaG9vbCA9IHNjaG9vbHMuZmluZCgoc2Nob29sKSA9PiBzY2hvb2wubmFtZSA9PT0gbmFtZSk7XHJcbiAgaWYgKGV4YWN0U2Nob29sKSB7XHJcbiAgICByZXR1cm4geyBzY2hvb2w6IGV4YWN0U2Nob29sLCBlcnJvcnMgfTtcclxuICB9XHJcblxyXG4gIGNvbnN0IG5hbWVzTGlzdCA9IHNjaG9vbHMubWFwKChzY2hvb2wpID0+IHNjaG9vbC5uYW1lKTtcclxuICBjb25zdCBiZXN0TWF0Y2ggPSBmaW5kQ2xvc2VzdFN0cmluZyhuYW1lLCBuYW1lc0xpc3QsIG1heERpc3RhbmNlKTtcclxuICBpZiAoYmVzdE1hdGNoID09PSBudWxsKSB7XHJcbiAgICBlcnJvcnMucHVzaCh3aG9sZUxpbmVFcnJvcihgxaBrb2xhIHMgbsOhenZlbSAnJHtuYW1lfScgbmVleGlzdHVqZS5gLCBuYW1lKSk7XHJcbiAgICByZXR1cm4geyBzY2hvb2w6IG51bGwsIGVycm9ycyB9O1xyXG4gIH1cclxuICBjb25zdCBjbG9zZXN0U2Nob29sID0gc2Nob29scy5maW5kKChzY2hvb2wpID0+IGJlc3RNYXRjaCA9PT0gc2Nob29sLm5hbWUpO1xyXG5cclxuICBlcnJvcnMucHVzaChcclxuICAgIHdob2xlTGluZUVycm9yKFxyXG4gICAgICBgxaBrb2xhIHMgbsOhenZlbSAnJHtuYW1lfScgbmVleGlzdHVqZSwgbXlzbGVsaSBqc3RlICcke2Jlc3RNYXRjaH0nP2AsXHJcbiAgICAgIG5hbWVcclxuICAgIClcclxuICApO1xyXG5cclxuICByZXR1cm4geyBzY2hvb2w6IGNsb3Nlc3RTY2hvb2wsIGVycm9ycyB9O1xyXG59O1xyXG5cclxuY29uc3QgZmlsdGVyT3V0RHVwbGljYXRlcyA9IChzY2hvb2xzOiBTY2hvb2xbXSk6IFNjaG9vbFtdID0+IHtcclxuICBjb25zdCBpem9TZXQgPSBuZXcgU2V0KCk7XHJcbiAgcmV0dXJuIHNjaG9vbHMuZmlsdGVyKChzY2hvb2wpID0+IHtcclxuICAgIGNvbnN0IGR1cGxpY2F0ZSA9IGl6b1NldC5oYXMoc2Nob29sLml6byk7XHJcbiAgICBpem9TZXQuYWRkKHNjaG9vbC5pem8pO1xyXG4gICAgcmV0dXJuICFkdXBsaWNhdGU7XHJcbiAgfSk7XHJcbn07XHJcbiJdfQ==
|
package/dist/db/street-sync.d.ts
CHANGED
|
@@ -3,3 +3,4 @@ export declare const setStreetAsSynced: (streetFeedUrl: string) => Promise<void>
|
|
|
3
3
|
export declare const getAllSyncedStreets: () => Promise<Set<string>>;
|
|
4
4
|
export declare const deleteStreets: (streetUrls: string[]) => Promise<void>;
|
|
5
5
|
export declare const insertStreetsFromDbf: (data: DbfStreet[]) => Promise<number>;
|
|
6
|
+
export declare const clearStreetSyncTable: () => Promise<void>;
|
package/dist/db/street-sync.js
CHANGED
|
@@ -16,4 +16,7 @@ export const deleteStreets = async (streetUrls) => {
|
|
|
16
16
|
export const insertStreetsFromDbf = async (data) => {
|
|
17
17
|
return await insertMultipleRows(data.map((street) => [street.KOD, street.OBEC_KOD, street.NAZEV]), "street", ["code", "city_code", "name"]);
|
|
18
18
|
};
|
|
19
|
-
|
|
19
|
+
export const clearStreetSyncTable = async () => {
|
|
20
|
+
await getKnexDb()("street_sync").del();
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWV0LXN5bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGIvc3RyZWV0LXN5bmMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixTQUFTLEVBQ1Qsa0JBQWtCLEVBQ25CLE1BQU0sTUFBTSxDQUFDO0FBR2QsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxFQUNwQyxhQUFxQixFQUNOLEVBQUU7SUFDakIsTUFBTSxTQUFTLEVBQUUsQ0FBQyxhQUFhLENBQUM7U0FDN0IsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxDQUFDO1NBQ25DLFVBQVUsQ0FBQyxVQUFVLENBQUM7U0FDdEIsTUFBTSxFQUFFLENBQUM7QUFDZCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxLQUFLLElBQTBCLEVBQUU7SUFDbEUsT0FBTyxJQUFJLEdBQUcsQ0FDWixNQUFNLFNBQVMsRUFBRSxDQUFDLGFBQWEsQ0FBQztTQUM3QixNQUFNLENBQUMsVUFBVSxDQUFDO1NBQ2xCLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQ25ELENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxFQUFFLFVBQW9CLEVBQWlCLEVBQUU7SUFDekUsTUFBTSxzQkFBc0IsQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3RFLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLEtBQUssRUFDdkMsSUFBaUIsRUFDQSxFQUFFO0lBQ25CLE9BQU8sTUFBTSxrQkFBa0IsQ0FDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ2pFLFFBQVEsRUFDUixDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQzlCLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxLQUFLLElBQW1CLEVBQUU7SUFDNUQsTUFBTSxTQUFTLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN6QyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIGRlbGV0ZU11bHRpcGxlUm93c0tuZXgsXHJcbiAgZ2V0S25leERiLFxyXG4gIGluc2VydE11bHRpcGxlUm93c1xyXG59IGZyb20gXCIuL2RiXCI7XHJcbmltcG9ydCB7IERiZlN0cmVldCB9IGZyb20gXCIuL3R5cGVzXCI7XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0U3RyZWV0QXNTeW5jZWQgPSBhc3luYyAoXHJcbiAgc3RyZWV0RmVlZFVybDogc3RyaW5nXHJcbik6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gIGF3YWl0IGdldEtuZXhEYigpKFwic3RyZWV0X3N5bmNcIilcclxuICAgIC5pbnNlcnQoeyBmZWVkX3VybDogc3RyZWV0RmVlZFVybCB9KVxyXG4gICAgLm9uQ29uZmxpY3QoXCJmZWVkX3VybFwiKVxyXG4gICAgLmlnbm9yZSgpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldEFsbFN5bmNlZFN0cmVldHMgPSBhc3luYyAoKTogUHJvbWlzZTxTZXQ8c3RyaW5nPj4gPT4ge1xyXG4gIHJldHVybiBuZXcgU2V0PHN0cmluZz4oXHJcbiAgICBhd2FpdCBnZXRLbmV4RGIoKShcInN0cmVldF9zeW5jXCIpXHJcbiAgICAgIC5zZWxlY3QoXCJmZWVkX3VybFwiKVxyXG4gICAgICAudGhlbigocm93cykgPT4gcm93cy5tYXAoKHJvdykgPT4gcm93LmZlZWRfdXJsKSlcclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGRlbGV0ZVN0cmVldHMgPSBhc3luYyAoc3RyZWV0VXJsczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+ID0+IHtcclxuICBhd2FpdCBkZWxldGVNdWx0aXBsZVJvd3NLbmV4KHN0cmVldFVybHMsIFwic3RyZWV0X3N5bmNcIiwgXCJmZWVkX3VybFwiKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpbnNlcnRTdHJlZXRzRnJvbURiZiA9IGFzeW5jIChcclxuICBkYXRhOiBEYmZTdHJlZXRbXVxyXG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gIHJldHVybiBhd2FpdCBpbnNlcnRNdWx0aXBsZVJvd3MoXHJcbiAgICBkYXRhLm1hcCgoc3RyZWV0KSA9PiBbc3RyZWV0LktPRCwgc3RyZWV0Lk9CRUNfS09ELCBzdHJlZXQuTkFaRVZdKSxcclxuICAgIFwic3RyZWV0XCIsXHJcbiAgICBbXCJjb2RlXCIsIFwiY2l0eV9jb2RlXCIsIFwibmFtZVwiXVxyXG4gICk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgY2xlYXJTdHJlZXRTeW5jVGFibGUgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgYXdhaXQgZ2V0S25leERiKCkoXCJzdHJlZXRfc3luY1wiKS5kZWwoKTtcclxufTtcclxuIl19
|
package/dist/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { downloadAndImportAddressPoints } from "./open-data-sync/address-points"
|
|
|
3
3
|
import { importCities } from "./open-data-sync/cities";
|
|
4
4
|
import { downloadAndImportRegions } from "./open-data-sync/regions";
|
|
5
5
|
import { downloadAndImportSchools } from "./open-data-sync/schools";
|
|
6
|
+
import { downloadAndImportStreets } from "./open-data-sync/streets";
|
|
6
7
|
import { municipalitiesToPolygons } from "./street-markdown/polygons";
|
|
7
8
|
import { OpenDataSyncOptionsPartial } from "./utils/helpers";
|
|
8
9
|
export * from "./street-markdown/smd";
|
|
@@ -19,4 +20,4 @@ export * from "./street-markdown/types";
|
|
|
19
20
|
* ```
|
|
20
21
|
*/
|
|
21
22
|
export declare function downloadAndImportEverything(options?: OpenDataSyncOptionsPartial, syncStreets?: boolean): Promise<void>;
|
|
22
|
-
export { clearDb, downloadAndImportAddressPoints, downloadAndImportRegions, downloadAndImportSchools, importCities, municipalitiesToPolygons, initDb, };
|
|
23
|
+
export { clearDb, downloadAndImportAddressPoints, downloadAndImportRegions, downloadAndImportSchools, downloadAndImportStreets, importCities, municipalitiesToPolygons, initDb, };
|
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@ import { downloadAndImportAddressPoints } from "./open-data-sync/address-points"
|
|
|
3
3
|
import { importCities } from "./open-data-sync/cities";
|
|
4
4
|
import { downloadAndImportRegions } from "./open-data-sync/regions";
|
|
5
5
|
import { downloadAndImportSchools } from "./open-data-sync/schools";
|
|
6
|
-
|
|
6
|
+
import { downloadAndImportStreets } from "./open-data-sync/streets";
|
|
7
7
|
import { municipalitiesToPolygons } from "./street-markdown/polygons";
|
|
8
8
|
export * from "./street-markdown/smd";
|
|
9
9
|
export * from "./street-markdown/types";
|
|
@@ -25,10 +25,8 @@ export async function downloadAndImportEverything(options = {}, syncStreets = tr
|
|
|
25
25
|
await downloadAndImportRegions(options);
|
|
26
26
|
await importCities(options);
|
|
27
27
|
if (syncStreets) {
|
|
28
|
-
|
|
28
|
+
await downloadAndImportStreets(options);
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
|
-
export { clearDb, downloadAndImportAddressPoints, downloadAndImportRegions, downloadAndImportSchools,
|
|
32
|
-
|
|
33
|
-
importCities, municipalitiesToPolygons, initDb, };
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDMUMsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BFLHVFQUF1RTtBQUN2RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUd0RSxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMseUJBQXlCLENBQUM7QUFFeEM7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsMkJBQTJCLENBQy9DLFVBQXNDLEVBQUUsRUFDeEMsY0FBdUIsSUFBSTtJQUUzQixNQUFNLE1BQU0sRUFBRSxDQUFDO0lBQ2YsTUFBTSw4QkFBOEIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxNQUFNLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEMsTUFBTSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUIsSUFBSSxXQUFXLEVBQUU7UUFDZiwyQ0FBMkM7S0FDNUM7QUFDSCxDQUFDO0FBRUQsT0FBTyxFQUNMLE9BQU8sRUFDUCw4QkFBOEIsRUFDOUIsd0JBQXdCLEVBQ3hCLHdCQUF3QjtBQUN4Qiw0QkFBNEI7QUFDNUIsWUFBWSxFQUNaLHdCQUF3QixFQUN4QixNQUFNLEdBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNsZWFyRGIsIGluaXREYiB9IGZyb20gXCIuL2RiL2RiXCI7XHJcbmltcG9ydCB7IGRvd25sb2FkQW5kSW1wb3J0QWRkcmVzc1BvaW50cyB9IGZyb20gXCIuL29wZW4tZGF0YS1zeW5jL2FkZHJlc3MtcG9pbnRzXCI7XHJcbmltcG9ydCB7IGltcG9ydENpdGllcyB9IGZyb20gXCIuL29wZW4tZGF0YS1zeW5jL2NpdGllc1wiO1xyXG5pbXBvcnQgeyBkb3dubG9hZEFuZEltcG9ydFJlZ2lvbnMgfSBmcm9tIFwiLi9vcGVuLWRhdGEtc3luYy9yZWdpb25zXCI7XHJcbmltcG9ydCB7IGRvd25sb2FkQW5kSW1wb3J0U2Nob29scyB9IGZyb20gXCIuL29wZW4tZGF0YS1zeW5jL3NjaG9vbHNcIjtcclxuLy8gaW1wb3J0IHsgZG93bmxvYWRBbmRJbXBvcnRTdHJlZXRzIH0gZnJvbSBcIi4vb3Blbi1kYXRhLXN5bmMvc3RyZWV0c1wiO1xyXG5pbXBvcnQgeyBtdW5pY2lwYWxpdGllc1RvUG9seWdvbnMgfSBmcm9tIFwiLi9zdHJlZXQtbWFya2Rvd24vcG9seWdvbnNcIjtcclxuaW1wb3J0IHsgT3BlbkRhdGFTeW5jT3B0aW9uc1BhcnRpYWwgfSBmcm9tIFwiLi91dGlscy9oZWxwZXJzXCI7XHJcblxyXG5leHBvcnQgKiBmcm9tIFwiLi9zdHJlZXQtbWFya2Rvd24vc21kXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL3N0cmVldC1tYXJrZG93bi90eXBlc1wiO1xyXG5cclxuLyoqXHJcbiAqIERvd25sb2FkIGFuZCBpbXBvcnQgYWxsIG9wZW4gZGF0YSB0byBTUUxpdGUgREIuIFRoZSBEQiBmaWxlIHdpbGwgYmUgbG9jYXRlZFxyXG4gKiBpbiB0aGUgYGRhdGFEaXJgIGZvbGRlci5cclxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHN5bmNcclxuICogQHBhcmFtIHN5bmNTdHJlZXRzIFN0cmVldHMgc3luYyB0YWtlcyBhcm91bmQgMSBob3VyLCBzbyBpdCBtaWdodCBiZSBza2lwcGVkLlxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGltcG9ydCB7IGRvd25sb2FkQW5kSW1wb3J0RXZlcnl0aGluZyB9IGZyb20gXCJ0ZXh0LXRvLW1hcFwiO1xyXG4gKlxyXG4gKiBhd2FpdCBkb3dubG9hZEFuZEltcG9ydEV2ZXJ5dGhpbmcoeyB0bXBEaXI6IFwiLi90bXBcIiwgZGF0YURpcjogXCIuL2RhdGFcIiB9KTtcclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG93bmxvYWRBbmRJbXBvcnRFdmVyeXRoaW5nKFxyXG4gIG9wdGlvbnM6IE9wZW5EYXRhU3luY09wdGlvbnNQYXJ0aWFsID0ge30sXHJcbiAgc3luY1N0cmVldHM6IGJvb2xlYW4gPSB0cnVlXHJcbikge1xyXG4gIGF3YWl0IGluaXREYigpO1xyXG4gIGF3YWl0IGRvd25sb2FkQW5kSW1wb3J0QWRkcmVzc1BvaW50cyhvcHRpb25zKTtcclxuICBhd2FpdCBkb3dubG9hZEFuZEltcG9ydFNjaG9vbHMob3B0aW9ucyk7XHJcbiAgYXdhaXQgZG93bmxvYWRBbmRJbXBvcnRSZWdpb25zKG9wdGlvbnMpO1xyXG4gIGF3YWl0IGltcG9ydENpdGllcyhvcHRpb25zKTtcclxuICBpZiAoc3luY1N0cmVldHMpIHtcclxuICAgIC8vIGF3YWl0IGRvd25sb2FkQW5kSW1wb3J0U3RyZWV0cyhvcHRpb25zKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCB7XHJcbiAgY2xlYXJEYixcclxuICBkb3dubG9hZEFuZEltcG9ydEFkZHJlc3NQb2ludHMsXHJcbiAgZG93bmxvYWRBbmRJbXBvcnRSZWdpb25zLFxyXG4gIGRvd25sb2FkQW5kSW1wb3J0U2Nob29scyxcclxuICAvLyBkb3dubG9hZEFuZEltcG9ydFN0cmVldHMsXHJcbiAgaW1wb3J0Q2l0aWVzLFxyXG4gIG11bmljaXBhbGl0aWVzVG9Qb2x5Z29ucyxcclxuICBpbml0RGIsXHJcbn07XHJcbiJdfQ==
|
|
31
|
+
export { clearDb, downloadAndImportAddressPoints, downloadAndImportRegions, downloadAndImportSchools, downloadAndImportStreets, importCities, municipalitiesToPolygons, initDb, };
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDMUMsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBR3RFLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx5QkFBeUIsQ0FBQztBQUV4Qzs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSwyQkFBMkIsQ0FDL0MsVUFBc0MsRUFBRSxFQUN4QyxjQUF1QixJQUFJO0lBRTNCLE1BQU0sTUFBTSxFQUFFLENBQUM7SUFDZixNQUFNLDhCQUE4QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlDLE1BQU0sd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEMsTUFBTSx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxNQUFNLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QixJQUFJLFdBQVcsRUFBRTtRQUNmLE1BQU0sd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDekM7QUFDSCxDQUFDO0FBRUQsT0FBTyxFQUNMLE9BQU8sRUFDUCw4QkFBOEIsRUFDOUIsd0JBQXdCLEVBQ3hCLHdCQUF3QixFQUN4Qix3QkFBd0IsRUFDeEIsWUFBWSxFQUNaLHdCQUF3QixFQUN4QixNQUFNLEdBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNsZWFyRGIsIGluaXREYiB9IGZyb20gXCIuL2RiL2RiXCI7XHJcbmltcG9ydCB7IGRvd25sb2FkQW5kSW1wb3J0QWRkcmVzc1BvaW50cyB9IGZyb20gXCIuL29wZW4tZGF0YS1zeW5jL2FkZHJlc3MtcG9pbnRzXCI7XHJcbmltcG9ydCB7IGltcG9ydENpdGllcyB9IGZyb20gXCIuL29wZW4tZGF0YS1zeW5jL2NpdGllc1wiO1xyXG5pbXBvcnQgeyBkb3dubG9hZEFuZEltcG9ydFJlZ2lvbnMgfSBmcm9tIFwiLi9vcGVuLWRhdGEtc3luYy9yZWdpb25zXCI7XHJcbmltcG9ydCB7IGRvd25sb2FkQW5kSW1wb3J0U2Nob29scyB9IGZyb20gXCIuL29wZW4tZGF0YS1zeW5jL3NjaG9vbHNcIjtcclxuaW1wb3J0IHsgZG93bmxvYWRBbmRJbXBvcnRTdHJlZXRzIH0gZnJvbSBcIi4vb3Blbi1kYXRhLXN5bmMvc3RyZWV0c1wiO1xyXG5pbXBvcnQgeyBtdW5pY2lwYWxpdGllc1RvUG9seWdvbnMgfSBmcm9tIFwiLi9zdHJlZXQtbWFya2Rvd24vcG9seWdvbnNcIjtcclxuaW1wb3J0IHsgT3BlbkRhdGFTeW5jT3B0aW9uc1BhcnRpYWwgfSBmcm9tIFwiLi91dGlscy9oZWxwZXJzXCI7XHJcblxyXG5leHBvcnQgKiBmcm9tIFwiLi9zdHJlZXQtbWFya2Rvd24vc21kXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL3N0cmVldC1tYXJrZG93bi90eXBlc1wiO1xyXG5cclxuLyoqXHJcbiAqIERvd25sb2FkIGFuZCBpbXBvcnQgYWxsIG9wZW4gZGF0YSB0byBTUUxpdGUgREIuIFRoZSBEQiBmaWxlIHdpbGwgYmUgbG9jYXRlZFxyXG4gKiBpbiB0aGUgYGRhdGFEaXJgIGZvbGRlci5cclxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHN5bmNcclxuICogQHBhcmFtIHN5bmNTdHJlZXRzIFN0cmVldHMgc3luYyB0YWtlcyBhcm91bmQgMSBob3VyLCBzbyBpdCBtaWdodCBiZSBza2lwcGVkLlxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGltcG9ydCB7IGRvd25sb2FkQW5kSW1wb3J0RXZlcnl0aGluZyB9IGZyb20gXCJ0ZXh0LXRvLW1hcFwiO1xyXG4gKlxyXG4gKiBhd2FpdCBkb3dubG9hZEFuZEltcG9ydEV2ZXJ5dGhpbmcoeyB0bXBEaXI6IFwiLi90bXBcIiwgZGF0YURpcjogXCIuL2RhdGFcIiB9KTtcclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG93bmxvYWRBbmRJbXBvcnRFdmVyeXRoaW5nKFxyXG4gIG9wdGlvbnM6IE9wZW5EYXRhU3luY09wdGlvbnNQYXJ0aWFsID0ge30sXHJcbiAgc3luY1N0cmVldHM6IGJvb2xlYW4gPSB0cnVlXHJcbikge1xyXG4gIGF3YWl0IGluaXREYigpO1xyXG4gIGF3YWl0IGRvd25sb2FkQW5kSW1wb3J0QWRkcmVzc1BvaW50cyhvcHRpb25zKTtcclxuICBhd2FpdCBkb3dubG9hZEFuZEltcG9ydFNjaG9vbHMob3B0aW9ucyk7XHJcbiAgYXdhaXQgZG93bmxvYWRBbmRJbXBvcnRSZWdpb25zKG9wdGlvbnMpO1xyXG4gIGF3YWl0IGltcG9ydENpdGllcyhvcHRpb25zKTtcclxuICBpZiAoc3luY1N0cmVldHMpIHtcclxuICAgIGF3YWl0IGRvd25sb2FkQW5kSW1wb3J0U3RyZWV0cyhvcHRpb25zKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCB7XHJcbiAgY2xlYXJEYixcclxuICBkb3dubG9hZEFuZEltcG9ydEFkZHJlc3NQb2ludHMsXHJcbiAgZG93bmxvYWRBbmRJbXBvcnRSZWdpb25zLFxyXG4gIGRvd25sb2FkQW5kSW1wb3J0U2Nob29scyxcclxuICBkb3dubG9hZEFuZEltcG9ydFN0cmVldHMsXHJcbiAgaW1wb3J0Q2l0aWVzLFxyXG4gIG11bmljaXBhbGl0aWVzVG9Qb2x5Z29ucyxcclxuICBpbml0RGIsXHJcbn07XHJcbiJdfQ==
|
|
@@ -61,8 +61,8 @@ export const downloadAndImportAddressPoints = async (options = {}) => {
|
|
|
61
61
|
const completeOptions = prepareOptions(options);
|
|
62
62
|
const datasetFeedLink = await getLatestUrlFromAtomFeed(completeOptions.addressPointsAtomUrl);
|
|
63
63
|
const zipUrl = await getLatestUrlFromAtomFeed(datasetFeedLink);
|
|
64
|
-
|
|
64
|
+
await downloadAndUnzip(zipUrl, completeOptions);
|
|
65
65
|
await importDataToDb(completeOptions);
|
|
66
66
|
});
|
|
67
67
|
};
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy1wb2ludHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3Blbi1kYXRhLXN5bmMvYWRkcmVzcy1wb2ludHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sU0FBUyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDOUUsT0FBTyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sS0FBSyxNQUFNLFlBQVksQ0FBQztBQUMvQixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEtBQUssTUFBTSxjQUFjLENBQUM7QUFDakMsT0FBTyxFQUNMLG1CQUFtQixFQUNuQiw2QkFBNkIsR0FDOUIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBR0wsY0FBYyxHQUNmLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV2QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUM7QUFFM0IsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLEVBQzVCLEdBQVcsRUFDWCxPQUE0QixFQUNiLEVBQUU7SUFDakIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFFM0UsT0FBTyxDQUFDLEdBQUcsQ0FBQywwREFBMEQsQ0FBQyxDQUFDO0lB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QUMsTUFBTSxDQUFDLENBQUM7SUFFNUMsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQ0FBMEMsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNqRSxDQUFDLENBQUM7QUFFRixNQUFNLG1CQUFtQixHQUFHLENBQUMsT0FBNEIsRUFBRSxFQUFFLENBQzNELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBRTNELE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLEtBQUssRUFDakQsVUFBc0MsRUFBRSxFQUN6QixFQUFFO0lBQ2pCLE1BQU0sV0FBVyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3ZELE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxNQUFNLGVBQWUsR0FBRyxNQUFNLHdCQUF3QixDQUNwRCxlQUFlLENBQUMsb0JBQW9CLENBQ3JDLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxNQUFNLHdCQUF3QixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sZ0JBQWdCLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3hDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEFkbVppcCBmcm9tIFwiYWRtLXppcFwiO1xyXG5pbXBvcnQgeyBwYXJzZSB9IGZyb20gXCJjc3YtcGFyc2VcIjtcclxuaW1wb3J0IHsgY3JlYXRlUmVhZFN0cmVhbSwgY3JlYXRlV3JpdGVTdHJlYW0sIHJlYWRkaXJTeW5jLCBybVN5bmMgfSBmcm9tIFwiZnNcIjtcclxuaW1wb3J0IGljb252IGZyb20gXCJpY29udi1saXRlXCI7XHJcbmltcG9ydCBmZXRjaCBmcm9tIFwibm9kZS1mZXRjaFwiO1xyXG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcInBhdGhcIjtcclxuaW1wb3J0IHsgcGlwZWxpbmUgfSBmcm9tIFwic3RyZWFtL3Byb21pc2VzXCI7XHJcbmltcG9ydCBjaHVuayBmcm9tIFwibG9kYXNoL2NodW5rXCI7XHJcbmltcG9ydCB7XHJcbiAgY29tbWl0QWRkcmVzc1BvaW50cyxcclxuICByZW1vdmVEZXByZWNhdGVkQWRkcmVzc1BvaW50cyxcclxufSBmcm9tIFwiLi4vZGIvYWRkcmVzcy1wb2ludHNcIjtcclxuaW1wb3J0IHsgU3luY1BhcnQgfSBmcm9tIFwiLi4vZGIvdHlwZXNcIjtcclxuaW1wb3J0IHsgZ2V0TGF0ZXN0VXJsRnJvbUF0b21GZWVkIH0gZnJvbSBcIi4uL3V0aWxzL2F0b21cIjtcclxuaW1wb3J0IHtcclxuICBPcGVuRGF0YVN5bmNPcHRpb25zLFxyXG4gIE9wZW5EYXRhU3luY09wdGlvbnNQYXJ0aWFsLFxyXG4gIHByZXBhcmVPcHRpb25zLFxyXG59IGZyb20gXCIuLi91dGlscy9oZWxwZXJzXCI7XHJcbmltcG9ydCB7IHJ1blN5bmNQYXJ0IH0gZnJvbSBcIi4vY29tbW9uXCI7XHJcblxyXG5jb25zdCBtYXhCdWZmZXJTaXplID0gMTAwMDtcclxuXHJcbmNvbnN0IGRvd25sb2FkQW5kVW56aXAgPSBhc3luYyAoXHJcbiAgdXJsOiBzdHJpbmcsXHJcbiAgb3B0aW9uczogT3BlbkRhdGFTeW5jT3B0aW9uc1xyXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcclxuICBjb25zdCB6aXBGaWxlUGF0aCA9IGpvaW4ob3B0aW9ucy50bXBEaXIsIG9wdGlvbnMuYWRkcmVzc1BvaW50c1ppcEZpbGVOYW1lKTtcclxuXHJcbiAgY29uc29sZS5sb2coXCJEb3dubG9hZGluZyBhIGxhcmdlIFpJUCBmaWxlIHdpdGggUlVJQU4gZGF0YSAofjY1IE1CKS4uLlwiKTtcclxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCk7XHJcbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgIGBUaGUgWklQIGZpbGUgY291bGQgbm90IGJlIGRvd25sb2FkZWQuIEhUVFAgQ29kZTogJHtyZXNwb25zZS5zdGF0dXN9YFxyXG4gICAgKTtcclxuICB9XHJcbiAgYXdhaXQgcGlwZWxpbmUocmVzcG9uc2UuYm9keSwgY3JlYXRlV3JpdGVTdHJlYW0oemlwRmlsZVBhdGgpKTtcclxuXHJcbiAgY29uc29sZS5sb2coXCJGaW5pc2hlZCBkb3dubG9hZGluZy5cIik7XHJcbiAgY29uc3QgemlwID0gbmV3IEFkbVppcCh6aXBGaWxlUGF0aCk7XHJcblxyXG4gIGNvbnNvbGUubG9nKGBTdGFydGluZyB0byB1bnppcCBDU1YgZmlsZXMgdG8gJyR7b3B0aW9ucy50bXBEaXJ9J2ApO1xyXG4gIHppcC5leHRyYWN0QWxsVG8ob3B0aW9ucy50bXBEaXIsIHRydWUpO1xyXG4gIGNvbnNvbGUubG9nKFwiVW56aXAgY29tcGxldGVkLlwiKTtcclxuXHJcbiAgcm1TeW5jKHppcEZpbGVQYXRoKTtcclxuICBjb25zb2xlLmxvZyhcIlJlbW92ZWQgdGhlIFpJUCBmaWxlLlwiKTtcclxufTtcclxuXHJcbmNvbnN0IGltcG9ydERhdGFUb0RiID0gYXN5bmMgKG9wdGlvbnM6IE9wZW5EYXRhU3luY09wdGlvbnMpID0+IHtcclxuICBjb25zdCBleHRyYWN0aW9uRm9sZGVyID0gZ2V0RXh0cmFjdGlvbkZvbGRlcihvcHRpb25zKTtcclxuXHJcbiAgY29uc3QgZmlsZXMgPSByZWFkZGlyU3luYyhleHRyYWN0aW9uRm9sZGVyKTtcclxuXHJcbiAgbGV0IHRvdGFsID0gMDtcclxuICBsZXQgbmV4dCA9IDA7XHJcblxyXG4gIGNvbnNvbGUubG9nKFxyXG4gICAgXCJJbml0aWF0aW5nIGltcG9ydCBvZiBSVUlBTiBkYXRhIHRvIHNlYXJjaCBEQiAofjMgbWlsbGlvbiByb3dzIHRvIGJlIGltcG9ydGVkKS5cIlxyXG4gICk7XHJcblxyXG4gIGNvbnN0IGFsbElkcyA9IG5ldyBTZXQ8bnVtYmVyPigpO1xyXG5cclxuICBmb3IgKGNvbnN0IFtpLCBmaWxlXSBvZiBmaWxlcy5lbnRyaWVzKCkpIHtcclxuICAgIGNvbnN0IHJvd3M6IHN0cmluZ1tdW10gPSBbXTtcclxuICAgIGNvbnN0IHBhcnNlU3RyZWFtID0gcGFyc2UoeyBkZWxpbWl0ZXI6IFwiO1wiLCBmcm9tTGluZTogMiB9KS5vbihcclxuICAgICAgXCJkYXRhXCIsXHJcbiAgICAgIGFzeW5jIChkYXRhKSA9PiB7XHJcbiAgICAgICAgcm93cy5wdXNoKGRhdGEpO1xyXG4gICAgICAgIGFsbElkcy5hZGQocGFyc2VJbnQoZGF0YVswXSkpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGF3YWl0IHBpcGVsaW5lKFxyXG4gICAgICBjcmVhdGVSZWFkU3RyZWFtKGpvaW4oZXh0cmFjdGlvbkZvbGRlciwgZmlsZSkpLFxyXG4gICAgICBpY29udi5kZWNvZGVTdHJlYW0oXCJ3aW4xMjUwXCIpLFxyXG4gICAgICBwYXJzZVN0cmVhbVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBjaHVua3MgPSBjaHVuayhyb3dzLCBtYXhCdWZmZXJTaXplKTtcclxuXHJcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgY2h1bmtzLm1hcChhc3luYyAoY2h1bmspID0+IHtcclxuICAgICAgICB0b3RhbCArPSBhd2FpdCBjb21taXRBZGRyZXNzUG9pbnRzKGNodW5rKTtcclxuXHJcbiAgICAgICAgaWYgKHRvdGFsIC0gbmV4dCA+PSAxMDAwMDApIHtcclxuICAgICAgICAgIG5leHQgKz0gMTAwMDAwO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coYFRvdGFsIGltcG9ydGVkIHJvd3M6ICR7bmV4dH1gKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKGAke2kgKyAxfS8ke2ZpbGVzLmxlbmd0aH0gZmlsZXMgaW1wb3J0ZWQuYCk7XHJcbiAgfVxyXG5cclxuICBhd2FpdCByZW1vdmVEZXByZWNhdGVkQWRkcmVzc1BvaW50cyhhbGxJZHMpO1xyXG5cclxuICBjb25zb2xlLmxvZyhgSW1wb3J0IGNvbXBsZXRlZC4gVG90YWwgaW1wb3J0ZWQgcm93czogJHt0b3RhbH1gKTtcclxufTtcclxuXHJcbmNvbnN0IGdldEV4dHJhY3Rpb25Gb2xkZXIgPSAob3B0aW9uczogT3BlbkRhdGFTeW5jT3B0aW9ucykgPT5cclxuICBqb2luKG9wdGlvbnMudG1wRGlyLCBvcHRpb25zLmFkZHJlc3NQb2ludHNDc3ZGb2xkZXJOYW1lKTtcclxuXHJcbmV4cG9ydCBjb25zdCBkb3dubG9hZEFuZEltcG9ydEFkZHJlc3NQb2ludHMgPSBhc3luYyAoXHJcbiAgb3B0aW9uczogT3BlbkRhdGFTeW5jT3B0aW9uc1BhcnRpYWwgPSB7fVxyXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcclxuICBhd2FpdCBydW5TeW5jUGFydChTeW5jUGFydC5BZGRyZXNzUG9pbnRzLCBbXSwgYXN5bmMgKCkgPT4ge1xyXG4gICAgY29uc3QgY29tcGxldGVPcHRpb25zID0gcHJlcGFyZU9wdGlvbnMob3B0aW9ucyk7XHJcbiAgICBjb25zdCBkYXRhc2V0RmVlZExpbmsgPSBhd2FpdCBnZXRMYXRlc3RVcmxGcm9tQXRvbUZlZWQoXHJcbiAgICAgIGNvbXBsZXRlT3B0aW9ucy5hZGRyZXNzUG9pbnRzQXRvbVVybFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHppcFVybCA9IGF3YWl0IGdldExhdGVzdFVybEZyb21BdG9tRmVlZChkYXRhc2V0RmVlZExpbmspO1xyXG4gICAgYXdhaXQgZG93bmxvYWRBbmRVbnppcCh6aXBVcmwsIGNvbXBsZXRlT3B0aW9ucyk7XHJcbiAgICBhd2FpdCBpbXBvcnREYXRhVG9EYihjb21wbGV0ZU9wdGlvbnMpO1xyXG4gIH0pO1xyXG59O1xyXG4iXX0=
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { OpenDataSyncOptionsPartial } from "../utils/helpers";
|
|
2
2
|
export declare const downloadAndImportSchools: (options?: OpenDataSyncOptionsPartial, saveFoundersToCsv?: boolean, saveSchoolsWithoutRuianToCsv?: boolean) => Promise<void>;
|
|
3
|
-
export declare const
|
|
3
|
+
export declare const deleteSchoolsJsonldFile: (options?: OpenDataSyncOptionsPartial) => void;
|
|
@@ -1,40 +1,28 @@
|
|
|
1
1
|
import { createReadStream, createWriteStream, existsSync, rmSync } from "fs";
|
|
2
2
|
import fetch from "node-fetch";
|
|
3
3
|
import { join } from "path";
|
|
4
|
-
import
|
|
4
|
+
import parser from "stream-json";
|
|
5
|
+
import Pick from "stream-json/filters/Pick";
|
|
6
|
+
import StreamArray from "stream-json/streamers/StreamArray";
|
|
5
7
|
import { pipeline } from "stream/promises";
|
|
6
8
|
import { insertFounders } from "../db/founders";
|
|
7
9
|
import { insertSchools } from "../db/schools";
|
|
10
|
+
import { getKnexDb } from "../db/db";
|
|
8
11
|
import { MunicipalityType, SchoolType, SyncPart, } from "../db/types";
|
|
9
12
|
import { prepareOptions, } from "../utils/helpers";
|
|
10
13
|
import { runSyncPart } from "./common";
|
|
11
|
-
const
|
|
12
|
-
if (existsSync(
|
|
14
|
+
const downloadJsonld = async (options) => {
|
|
15
|
+
if (existsSync(getJsonldFilePath(options))) {
|
|
13
16
|
return;
|
|
14
17
|
}
|
|
15
|
-
console.log("Downloading a large
|
|
16
|
-
const response = await fetch(options.
|
|
18
|
+
console.log("Downloading a large JSON-LD file with school data...");
|
|
19
|
+
const response = await fetch(options.schoolsJsonldUrl);
|
|
17
20
|
if (response.status !== 200) {
|
|
18
|
-
throw new Error(`The
|
|
21
|
+
throw new Error(`The JSON-LD file could not be downloaded. HTTP Code: ${response.status}`);
|
|
19
22
|
}
|
|
20
|
-
await pipeline(response.body, createWriteStream(
|
|
23
|
+
await pipeline(response.body, createWriteStream(getJsonldFilePath(options)));
|
|
21
24
|
console.log("Finished downloading.");
|
|
22
25
|
};
|
|
23
|
-
var XMLState;
|
|
24
|
-
(function (XMLState) {
|
|
25
|
-
XMLState[XMLState["None"] = 0] = "None";
|
|
26
|
-
XMLState[XMLState["RedIzo"] = 1] = "RedIzo";
|
|
27
|
-
XMLState[XMLState["SchoolName"] = 2] = "SchoolName";
|
|
28
|
-
XMLState[XMLState["Izo"] = 3] = "Izo";
|
|
29
|
-
XMLState[XMLState["Ico"] = 4] = "Ico";
|
|
30
|
-
XMLState[XMLState["SchoolType"] = 5] = "SchoolType";
|
|
31
|
-
XMLState[XMLState["Capacity"] = 6] = "Capacity";
|
|
32
|
-
XMLState[XMLState["RuianCode"] = 7] = "RuianCode";
|
|
33
|
-
XMLState[XMLState["Address"] = 8] = "Address";
|
|
34
|
-
XMLState[XMLState["FounderName"] = 9] = "FounderName";
|
|
35
|
-
XMLState[XMLState["FounderType"] = 10] = "FounderType";
|
|
36
|
-
XMLState[XMLState["FounderIco"] = 11] = "FounderIco";
|
|
37
|
-
})(XMLState || (XMLState = {}));
|
|
38
26
|
const SCHOOL_TYPE_KINDERGARTEN = "A00";
|
|
39
27
|
const SCHOOL_TYPE_ELEMENTARY = "B00";
|
|
40
28
|
const getCorrectFounderType = (founderType) => {
|
|
@@ -47,219 +35,97 @@ const getMunicipalityType = (founderType) => {
|
|
|
47
35
|
? MunicipalityType.District
|
|
48
36
|
: MunicipalityType.Other;
|
|
49
37
|
};
|
|
50
|
-
const
|
|
51
|
-
let currentSchools;
|
|
52
|
-
let currentRedizo;
|
|
53
|
-
let currentName;
|
|
54
|
-
let currentIzo;
|
|
55
|
-
let currentIco;
|
|
56
|
-
let currentType = null;
|
|
57
|
-
let currentCapacity;
|
|
58
|
-
let currentLocations = [];
|
|
59
|
-
let state = XMLState.None;
|
|
60
|
-
let currentFounders = [];
|
|
61
|
-
let currentFounderIco;
|
|
62
|
-
let currentFounderName;
|
|
63
|
-
let currentFounderType;
|
|
64
|
-
let isRuianCodeSet = false;
|
|
65
|
-
let isRuianCodeMissing = false;
|
|
66
|
-
let currentAddress = [];
|
|
38
|
+
const processSchoolRegisterJsonld = async (options) => {
|
|
67
39
|
const founders = new Map();
|
|
68
40
|
const schools = [];
|
|
69
41
|
const schoolsWithoutRuian = [];
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
case "ZrizNazev":
|
|
107
|
-
state = XMLState.FounderName;
|
|
108
|
-
break;
|
|
109
|
-
case "ZrizPravniForma":
|
|
110
|
-
state = XMLState.FounderType;
|
|
111
|
-
break;
|
|
112
|
-
case "MistoAdresa1":
|
|
113
|
-
case "MistoAdresa2":
|
|
114
|
-
case "MistoAdresa3":
|
|
115
|
-
state = XMLState.Address;
|
|
116
|
-
break;
|
|
117
|
-
case "ZrizDatumNarozeni":
|
|
118
|
-
case "ZrizICO":
|
|
119
|
-
state = XMLState.FounderIco;
|
|
120
|
-
break;
|
|
42
|
+
const stream = createReadStream(getJsonldFilePath(options))
|
|
43
|
+
.pipe(parser())
|
|
44
|
+
.pipe(new Pick({ filter: "list" }))
|
|
45
|
+
.pipe(new StreamArray());
|
|
46
|
+
for await (const { value: entity } of stream) {
|
|
47
|
+
const redizo = entity.redIzo ?? "";
|
|
48
|
+
const ico = entity.ico ?? "";
|
|
49
|
+
const entityName = entity.uplnyNazev ?? "";
|
|
50
|
+
const currentSchools = [];
|
|
51
|
+
for (const school of entity.skolyAZarizeni ?? []) {
|
|
52
|
+
const type = school.druh === SCHOOL_TYPE_KINDERGARTEN
|
|
53
|
+
? SchoolType.Kindergarten
|
|
54
|
+
: school.druh === SCHOOL_TYPE_ELEMENTARY
|
|
55
|
+
? SchoolType.Elementary
|
|
56
|
+
: null;
|
|
57
|
+
if (type === null)
|
|
58
|
+
continue;
|
|
59
|
+
const capacityEntry = school.kapacity?.find((k) => k.mernaJednotka === "01") ??
|
|
60
|
+
school.kapacity?.[0];
|
|
61
|
+
const capacity = capacityEntry?.nejvyssiPovolenyPocet ?? 0;
|
|
62
|
+
const allPlaces = school.mistaVyuky ?? [];
|
|
63
|
+
const locationsWithRuian = allPlaces.filter((p) => p.adresa?.kodRUIAN != null);
|
|
64
|
+
// Prefer the main building (IDmista matches school IZO), fall back to first available
|
|
65
|
+
const mainPlace = locationsWithRuian.find((p) => p.IDmista === school.izo) ??
|
|
66
|
+
locationsWithRuian[0];
|
|
67
|
+
const locations = mainPlace
|
|
68
|
+
? [{ addressPointId: mainPlace.adresa.kodRUIAN }]
|
|
69
|
+
: [];
|
|
70
|
+
if (!mainPlace && allPlaces.length > 0) {
|
|
71
|
+
const addr = allPlaces[0].adresa ?? {};
|
|
72
|
+
const addressParts = [
|
|
73
|
+
addr.ulice,
|
|
74
|
+
addr.cisloDomovni?.toString(),
|
|
75
|
+
addr.obec,
|
|
76
|
+
].filter(Boolean);
|
|
77
|
+
schoolsWithoutRuian.push({ izo: school.izo, address: addressParts, type });
|
|
121
78
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
ico: currentIco,
|
|
151
|
-
name: currentName,
|
|
152
|
-
type: "224", // s.r.o (not all are those, but we don't need to differentiate here)
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
else {
|
|
156
|
-
currentFounders.push({
|
|
157
|
-
ico: currentFounderIco,
|
|
158
|
-
name: currentFounderName,
|
|
159
|
-
type: getCorrectFounderType(currentFounderType),
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
currentFounderIco = "";
|
|
163
|
-
currentFounderName = "";
|
|
164
|
-
currentFounderType = "";
|
|
165
|
-
break;
|
|
166
|
-
case "SkolaZarizeni":
|
|
167
|
-
if (currentType !== null) {
|
|
168
|
-
currentSchools.push({
|
|
169
|
-
izo: currentIzo,
|
|
170
|
-
name: currentName,
|
|
171
|
-
redizo: currentRedizo,
|
|
172
|
-
capacity: currentCapacity,
|
|
173
|
-
type: currentType,
|
|
174
|
-
locations: currentLocations,
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
currentLocations = [];
|
|
178
|
-
currentType = null;
|
|
179
|
-
break;
|
|
180
|
-
case "SkolaMistoVykonuCinnosti":
|
|
181
|
-
if (isRuianCodeMissing) {
|
|
182
|
-
schoolsWithoutRuian.push({
|
|
183
|
-
izo: currentIzo,
|
|
184
|
-
address: currentAddress,
|
|
185
|
-
type: currentType,
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
break;
|
|
189
|
-
case "MistoRUAINKod":
|
|
190
|
-
isRuianCodeMissing = !isRuianCodeSet;
|
|
191
|
-
case "RedPlnyNazev":
|
|
192
|
-
case "RedIzo":
|
|
193
|
-
case "ICO":
|
|
194
|
-
case "IZO":
|
|
195
|
-
case "SkolaDruhTyp":
|
|
196
|
-
case "SkolaKapacita":
|
|
197
|
-
case "ZrizNazev":
|
|
198
|
-
case "ZrizICO":
|
|
199
|
-
case "ZrizDatumNarozeni":
|
|
200
|
-
case "ZrizPravniForma":
|
|
201
|
-
case "MistoAdresa1":
|
|
202
|
-
case "MistoAdresa2":
|
|
203
|
-
case "MistoAdresa3":
|
|
204
|
-
state = XMLState.None;
|
|
205
|
-
break;
|
|
79
|
+
currentSchools.push({
|
|
80
|
+
izo: school.izo,
|
|
81
|
+
name: entityName || school.uplnyNazev || "",
|
|
82
|
+
redizo,
|
|
83
|
+
capacity,
|
|
84
|
+
type,
|
|
85
|
+
locations,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
schools.push(...currentSchools);
|
|
89
|
+
for (const z of entity.zrizovatele ?? []) {
|
|
90
|
+
let founderIco;
|
|
91
|
+
let founderName;
|
|
92
|
+
let founderType;
|
|
93
|
+
if (z.druhOsoby === "PO") {
|
|
94
|
+
founderIco = z.Ico ?? "";
|
|
95
|
+
founderName = z.nazevOsoby ?? "";
|
|
96
|
+
founderType = getCorrectFounderType(z.pravniForma ?? "");
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
founderIco = z.datumNarozeni ?? "";
|
|
100
|
+
founderName = z.nazevOsoby ?? "";
|
|
101
|
+
founderType = getCorrectFounderType("");
|
|
102
|
+
}
|
|
103
|
+
if (founderIco === "" || founderName === "") {
|
|
104
|
+
founderIco = ico;
|
|
105
|
+
founderName = entityName;
|
|
106
|
+
founderType = "224";
|
|
206
107
|
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
currentIco = text;
|
|
220
|
-
break;
|
|
221
|
-
case XMLState.SchoolType:
|
|
222
|
-
if (text === SCHOOL_TYPE_KINDERGARTEN) {
|
|
223
|
-
currentType = SchoolType.Kindergarten;
|
|
224
|
-
}
|
|
225
|
-
else if (text === SCHOOL_TYPE_ELEMENTARY) {
|
|
226
|
-
currentType = SchoolType.Elementary;
|
|
227
|
-
}
|
|
228
|
-
break;
|
|
229
|
-
case XMLState.RuianCode:
|
|
230
|
-
isRuianCodeSet = true;
|
|
231
|
-
currentLocations.push({
|
|
232
|
-
addressPointId: parseInt(text),
|
|
108
|
+
if (currentSchools.length > 0) {
|
|
109
|
+
const key = founderName + founderIco;
|
|
110
|
+
if (founders.has(key)) {
|
|
111
|
+
founders.get(key).schools.push(...currentSchools);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
founders.set(key, {
|
|
115
|
+
name: founderName,
|
|
116
|
+
ico: founderIco,
|
|
117
|
+
originalType: parseInt(founderType),
|
|
118
|
+
municipalityType: getMunicipalityType(founderType),
|
|
119
|
+
schools: [...currentSchools],
|
|
233
120
|
});
|
|
234
|
-
|
|
235
|
-
case XMLState.Address:
|
|
236
|
-
currentAddress.push(text);
|
|
237
|
-
break;
|
|
238
|
-
case XMLState.FounderName:
|
|
239
|
-
currentFounderName = text;
|
|
240
|
-
break;
|
|
241
|
-
case XMLState.FounderIco:
|
|
242
|
-
currentFounderIco = text;
|
|
243
|
-
break;
|
|
244
|
-
case XMLState.FounderType:
|
|
245
|
-
currentFounderType = text;
|
|
246
|
-
break;
|
|
247
|
-
case XMLState.Capacity:
|
|
248
|
-
currentCapacity = parseInt(text);
|
|
249
|
-
break;
|
|
121
|
+
}
|
|
250
122
|
}
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
.on("end", resolve);
|
|
254
|
-
// wanted to use 'await pipeline(createReadStream(getXmlFilePath(options)), saxStream)'
|
|
255
|
-
// but the program would quit spontaneously after finishing stream - using Promise instead.
|
|
256
|
-
createReadStream(getXmlFilePath(options)).pipe(saxStream);
|
|
257
|
-
});
|
|
258
|
-
await streamPromise;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
259
125
|
return { schools, founders, schoolsWithoutRuian };
|
|
260
126
|
};
|
|
261
127
|
const importDataToDb = async (options, saveFoundersToCsv = false, saveSchoolsWithoutRuianToCsv = false) => {
|
|
262
|
-
const { schools, founders, schoolsWithoutRuian } = await
|
|
128
|
+
const { schools, founders, schoolsWithoutRuian } = await processSchoolRegisterJsonld(options);
|
|
263
129
|
if (saveFoundersToCsv) {
|
|
264
130
|
const csvFile = "founders.csv";
|
|
265
131
|
if (existsSync(csvFile)) {
|
|
@@ -288,24 +154,54 @@ const importDataToDb = async (options, saveFoundersToCsv = false, saveSchoolsWit
|
|
|
288
154
|
});
|
|
289
155
|
csv.end();
|
|
290
156
|
}
|
|
157
|
+
const knex = getKnexDb();
|
|
158
|
+
const schoolsBefore = (await knex("school").count("izo as count").first()).count;
|
|
159
|
+
const foundersBefore = (await knex("founder").count("id as count").first()).count;
|
|
160
|
+
// Compute change stats before inserting (uses same logic as insertSchools)
|
|
161
|
+
const existingSnap = await knex("school")
|
|
162
|
+
.leftJoin("school_location", "school.izo", "school_location.school_izo")
|
|
163
|
+
.select("school.izo", "school.name", "school.capacity", "school_location.address_point_id");
|
|
164
|
+
const existingSnapMap = new Map(existingSnap.map((r) => [r.izo, r]));
|
|
165
|
+
const statsFieldUpdates = schools.filter((s) => {
|
|
166
|
+
const row = existingSnapMap.get(s.izo);
|
|
167
|
+
return row && (row.name !== s.name || row.capacity !== s.capacity);
|
|
168
|
+
}).length;
|
|
169
|
+
const statsLocationUpdates = schools.filter((s) => {
|
|
170
|
+
const row = existingSnapMap.get(s.izo);
|
|
171
|
+
const newRuians = s.locations.map((l) => l.addressPointId);
|
|
172
|
+
return row && row.address_point_id !== null && newRuians.length > 0 && !newRuians.includes(row.address_point_id);
|
|
173
|
+
}).length;
|
|
291
174
|
await insertSchools(schools);
|
|
292
175
|
await insertFounders(Array.from(founders.values()));
|
|
176
|
+
const schoolsAfter = (await knex("school").count("izo as count").first()).count;
|
|
177
|
+
const foundersAfter = (await knex("founder").count("id as count").first()).count;
|
|
178
|
+
const kindergartens = schools.filter((s) => s.type === SchoolType.Kindergarten).length;
|
|
179
|
+
const elementary = schools.filter((s) => s.type === SchoolType.Elementary).length;
|
|
180
|
+
console.log(`\n=== School sync statistics ===`);
|
|
181
|
+
console.log(`Schools parsed: ${schools.length} (${kindergartens} kindergartens, ${elementary} elementary)`);
|
|
182
|
+
console.log(`Founders parsed: ${founders.size}`);
|
|
183
|
+
console.log(`New schools inserted: ${schoolsAfter - schoolsBefore}`);
|
|
184
|
+
console.log(`New founders inserted: ${foundersAfter - foundersBefore}`);
|
|
185
|
+
console.log(`Field updates: ${statsFieldUpdates} (name/capacity changed)`);
|
|
186
|
+
console.log(`Location updates: ${statsLocationUpdates} (first location changed)`);
|
|
187
|
+
console.log(`Total schools in DB: ${schoolsAfter}`);
|
|
188
|
+
console.log(`Total founders in DB: ${foundersAfter}`);
|
|
293
189
|
};
|
|
294
|
-
const
|
|
295
|
-
return join(options.tmpDir, options.
|
|
190
|
+
const getJsonldFilePath = (options) => {
|
|
191
|
+
return join(options.tmpDir, options.schoolsJsonldFileName);
|
|
296
192
|
};
|
|
297
193
|
export const downloadAndImportSchools = async (options = {}, saveFoundersToCsv = false, saveSchoolsWithoutRuianToCsv = false) => {
|
|
298
194
|
await runSyncPart(SyncPart.Schools, [SyncPart.AddressPoints], async () => {
|
|
299
195
|
const runOptions = prepareOptions(options);
|
|
300
|
-
await
|
|
196
|
+
await downloadJsonld(runOptions);
|
|
301
197
|
await importDataToDb(runOptions, saveFoundersToCsv, saveSchoolsWithoutRuianToCsv);
|
|
302
|
-
|
|
198
|
+
deleteSchoolsJsonldFile(runOptions);
|
|
303
199
|
});
|
|
304
200
|
};
|
|
305
|
-
export const
|
|
201
|
+
export const deleteSchoolsJsonldFile = (options = {}) => {
|
|
306
202
|
const runOptions = prepareOptions(options);
|
|
307
|
-
if (existsSync(
|
|
308
|
-
rmSync(
|
|
203
|
+
if (existsSync(getJsonldFilePath(runOptions))) {
|
|
204
|
+
rmSync(getJsonldFilePath(runOptions));
|
|
309
205
|
}
|
|
310
206
|
};
|
|
311
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nob29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVuLWRhdGEtc3luYy9zY2hvb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzdFLE9BQU8sS0FBSyxNQUFNLFlBQVksQ0FBQztBQUMvQixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVCLE9BQU8sR0FBWSxNQUFNLEtBQUssQ0FBQztBQUUvQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxFQUVMLGdCQUFnQixFQUdoQixVQUFVLEVBQ1YsUUFBUSxHQUNULE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFHTCxjQUFjLEdBQ2YsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXZDLE1BQU0sV0FBVyxHQUFHLEtBQUssRUFBRSxPQUE0QixFQUFpQixFQUFFO0lBQ3hFLElBQUksVUFBVSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO1FBQ3ZDLE9BQU87S0FDUjtJQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsa0RBQWtELENBQUMsQ0FBQztJQUNoRSxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDcEQsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRTtRQUMzQixNQUFNLElBQUksS0FBSyxDQUNiLG9EQUFvRCxRQUFRLENBQUMsTUFBTSxFQUFFLENBQ3RFLENBQUM7S0FD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bEMsVUFBc0MsRUFBRSxFQUN4QyxFQUFFO0lBQ0YsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTNDLElBQUksVUFBVSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFO1FBQzFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztLQUNwQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVJlYWRTdHJlYW0sIGNyZWF0ZVdyaXRlU3RyZWFtLCBleGlzdHNTeW5jLCBybVN5bmMgfSBmcm9tIFwiZnNcIjtcclxuaW1wb3J0IGZldGNoIGZyb20gXCJub2RlLWZldGNoXCI7XHJcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwicGF0aFwiO1xyXG5pbXBvcnQgc2F4LCB7IFRhZyB9IGZyb20gXCJzYXhcIjtcclxuXHJcbmltcG9ydCB7IHBpcGVsaW5lIH0gZnJvbSBcInN0cmVhbS9wcm9taXNlc1wiO1xyXG5pbXBvcnQgeyBpbnNlcnRGb3VuZGVycyB9IGZyb20gXCIuLi9kYi9mb3VuZGVyc1wiO1xyXG5pbXBvcnQgeyBpbnNlcnRTY2hvb2xzIH0gZnJvbSBcIi4uL2RiL3NjaG9vbHNcIjtcclxuaW1wb3J0IHtcclxuICBGb3VuZGVyLFxyXG4gIE11bmljaXBhbGl0eVR5cGUsXHJcbiAgU2Nob29sLFxyXG4gIFNjaG9vbExvY2F0aW9uLFxyXG4gIFNjaG9vbFR5cGUsXHJcbiAgU3luY1BhcnQsXHJcbn0gZnJvbSBcIi4uL2RiL3R5cGVzXCI7XHJcbmltcG9ydCB7XHJcbiAgT3BlbkRhdGFTeW5jT3B0aW9ucyxcclxuICBPcGVuRGF0YVN5bmNPcHRpb25zUGFydGlhbCxcclxuICBwcmVwYXJlT3B0aW9ucyxcclxufSBmcm9tIFwiLi4vdXRpbHMvaGVscGVyc1wiO1xyXG5pbXBvcnQgeyBydW5TeW5jUGFydCB9IGZyb20gXCIuL2NvbW1vblwiO1xyXG5cclxuY29uc3QgZG93bmxvYWRYbWwgPSBhc3luYyAob3B0aW9uczogT3BlbkRhdGFTeW5jT3B0aW9ucyk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gIGlmIChleGlzdHNTeW5jKGdldFhtbEZpbGVQYXRoKG9wdGlvbnMpKSkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgY29uc29sZS5sb2coXCJEb3dubG9hZGluZyBhIGxhcmdlIFhNTCBmaWxlIHdpdGggc2Nob29sIGRhdGEuLi5cIik7XHJcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChvcHRpb25zLnNjaG9vbHNYbWxVcmwpO1xyXG4gIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICBgVGhlIFhNTCBmaWxlIGNvdWxkIG5vdCBiZSBkb3dubG9hZGVkLiBIVFRQIENvZGU6ICR7cmVzcG9uc2Uuc3RhdHVzfWBcclxuICAgICk7XHJcbiAgfVxyXG4gIGF3YWl0IHBpcGVsaW5lKHJlc3BvbnNlLmJvZHksIGNyZWF0ZVdyaXRlU3RyZWFtKGdldFhtbEZpbGVQYXRoKG9wdGlvbnMpKSk7XHJcbiAgY29uc29sZS5sb2coXCJGaW5pc2hlZCBkb3dubG9hZGluZy5cIik7XHJcbn07XHJcblxyXG5lbnVtIFhNTFN0YXRlIHtcclxuICBOb25lLFxyXG4gIFJlZEl6byxcclxuICBTY2hvb2xOYW1lLFxyXG4gIEl6byxcclxuICBJY28sXHJcbiAgU2Nob29sVHlwZSxcclxuICBDYXBhY2l0eSxcclxuICBSdWlhbkNvZGUsXHJcbiAgQWRkcmVzcyxcclxuICBGb3VuZGVyTmFtZSxcclxuICBGb3VuZGVyVHlwZSxcclxuICBGb3VuZGVySWNvLFxyXG59XHJcblxyXG5jb25zdCBTQ0hPT0xfVFlQRV9LSU5ERVJHQVJURU4gPSBcIkEwMFwiO1xyXG5jb25zdCBTQ0hPT0xfVFlQRV9FTEVNRU5UQVJZID0gXCJCMDBcIjtcclxuXHJcbmNvbnN0IGdldENvcnJlY3RGb3VuZGVyVHlwZSA9IChmb3VuZGVyVHlwZTogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICByZXR1cm4gZm91bmRlclR5cGUgPT09IFwiXCIgPyBcIjEwMVwiIDogZm91bmRlclR5cGU7XHJcbn07XHJcblxyXG5jb25zdCBnZXRNdW5pY2lwYWxpdHlUeXBlID0gKGZvdW5kZXJUeXBlOiBzdHJpbmcpOiBNdW5pY2lwYWxpdHlUeXBlID0+IHtcclxuICByZXR1cm4gZm91bmRlclR5cGUgPT09IFwiMjYxXCJcclxuICAgID8gTXVuaWNpcGFsaXR5VHlwZS5DaXR5XHJcbiAgICA6IGZvdW5kZXJUeXBlID09PSBcIjI2M1wiXHJcbiAgICA/IE11bmljaXBhbGl0eVR5cGUuRGlzdHJpY3RcclxuICAgIDogTXVuaWNpcGFsaXR5VHlwZS5PdGhlcjtcclxufTtcclxuXHJcbnR5cGUgU2Nob29sQWRkcmVzcyA9IHtcclxuICBpem86IHN0cmluZztcclxuICBhZGRyZXNzOiBzdHJpbmdbXTtcclxuICB0eXBlOiBTY2hvb2xUeXBlO1xyXG59O1xyXG5cclxuY29uc3QgcHJvY2Vzc1NjaG9vbFJlZ2lzdGVyWG1sID0gYXN5bmMgKFxyXG4gIG9wdGlvbnM6IE9wZW5EYXRhU3luY09wdGlvbnNcclxuKTogUHJvbWlzZTx7XHJcbiAgc2Nob29sczogU2Nob29sW107XHJcbiAgZm91bmRlcnM6IE1hcDxzdHJpbmcsIEZvdW5kZXI+O1xyXG4gIHNjaG9vbHNXaXRob3V0UnVpYW46IFNjaG9vbEFkZHJlc3NbXTtcclxufT4gPT4ge1xyXG4gIGxldCBjdXJyZW50U2Nob29sczogU2Nob29sW107XHJcbiAgbGV0IGN1cnJlbnRSZWRpem86IHN0cmluZztcclxuICBsZXQgY3VycmVudE5hbWU6IHN0cmluZztcclxuICBsZXQgY3VycmVudEl6bzogc3RyaW5nO1xyXG4gIGxldCBjdXJyZW50SWNvOiBzdHJpbmc7XHJcbiAgbGV0IGN1cnJlbnRUeXBlOiBTY2hvb2xUeXBlIHwgbnVsbCA9IG51bGw7XHJcbiAgbGV0IGN1cnJlbnRDYXBhY2l0eTogbnVtYmVyO1xyXG4gIGxldCBjdXJyZW50TG9jYXRpb25zOiBTY2hvb2xMb2NhdGlvbltdID0gW107XHJcbiAgbGV0IHN0YXRlOiBYTUxTdGF0ZSA9IFhNTFN0YXRlLk5vbmU7XHJcbiAgbGV0IGN1cnJlbnRGb3VuZGVycyA9IFtdO1xyXG4gIGxldCBjdXJyZW50Rm91bmRlckljbzogc3RyaW5nO1xyXG4gIGxldCBjdXJyZW50Rm91bmRlck5hbWU6IHN0cmluZztcclxuICBsZXQgY3VycmVudEZvdW5kZXJUeXBlOiBzdHJpbmc7XHJcbiAgbGV0IGlzUnVpYW5Db2RlU2V0ID0gZmFsc2U7XHJcbiAgbGV0IGlzUnVpYW5Db2RlTWlzc2luZyA9IGZhbHNlO1xyXG4gIGxldCBjdXJyZW50QWRkcmVzcyA9IFtdO1xyXG4gIGNvbnN0IGZvdW5kZXJzID0gbmV3IE1hcDxzdHJpbmcsIEZvdW5kZXI+KCk7XHJcbiAgY29uc3Qgc2Nob29sczogU2Nob29sW10gPSBbXTtcclxuICBjb25zdCBzY2hvb2xzV2l0aG91dFJ1aWFuOiBTY2hvb2xBZGRyZXNzW10gPSBbXTtcclxuXHJcbiAgY29uc3Qgc3RyZWFtUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgIGNvbnN0IHNheFN0cmVhbSA9IHNheFxyXG4gICAgICAuY3JlYXRlU3RyZWFtKHRydWUpXHJcbiAgICAgIC5vbihcIm9wZW50YWdcIiwgKHRhZzogVGFnKSA9PiB7XHJcbiAgICAgICAgc3dpdGNoICh0YWcubmFtZSkge1xyXG4gICAgICAgICAgY2FzZSBcIlByYXZuaVN1Ympla3RcIjpcclxuICAgICAgICAgICAgY3VycmVudFNjaG9vbHMgPSBbXTtcclxuICAgICAgICAgICAgY3VycmVudFJlZGl6byA9IFwiXCI7XHJcbiAgICAgICAgICAgIGN1cnJlbnROYW1lID0gXCJcIjtcclxuICAgICAgICAgICAgY3VycmVudEl6byA9IFwiXCI7XHJcbiAgICAgICAgICAgIGN1cnJlbnRDYXBhY2l0eSA9IDA7XHJcbiAgICAgICAgICAgIGlzUnVpYW5Db2RlTWlzc2luZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgXCJSZWRJem9cIjpcclxuICAgICAgICAgICAgc3RhdGUgPSBYTUxTdGF0ZS5SZWRJem87XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcIlJlZFBsbnlOYXpldlwiOlxyXG4gICAgICAgICAgICBzdGF0ZSA9IFhNTFN0YXRlLlNjaG9vbE5hbWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcIklaT1wiOlxyXG4gICAgICAgICAgICBzdGF0ZSA9IFhNTFN0YXRlLkl6bztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFwiSUNPXCI6XHJcbiAgICAgICAgICAgIHN0YXRlID0gWE1MU3RhdGUuSWNvO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgXCJTa29sYURydWhUeXBcIjpcclxuICAgICAgICAgICAgc3RhdGUgPSBYTUxTdGF0ZS5TY2hvb2xUeXBlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgXCJTa29sYUthcGFjaXRhXCI6XHJcbiAgICAgICAgICAgIHN0YXRlID0gWE1MU3RhdGUuQ2FwYWNpdHk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcIk1pc3RvUlVBSU5Lb2RcIjpcclxuICAgICAgICAgICAgaXNSdWlhbkNvZGVTZXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgY3VycmVudEFkZHJlc3MgPSBbXTtcclxuICAgICAgICAgICAgc3RhdGUgPSBYTUxTdGF0ZS5SdWlhbkNvZGU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcIlpyaXpOYXpldlwiOlxyXG4gICAgICAgICAgICBzdGF0ZSA9IFhNTFN0YXRlLkZvdW5kZXJOYW1lO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgXCJacml6UHJhdm5pRm9ybWFcIjpcclxuICAgICAgICAgICAgc3RhdGUgPSBYTUxTdGF0ZS5Gb3VuZGVyVHlwZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFwiTWlzdG9BZHJlc2ExXCI6XHJcbiAgICAgICAgICBjYXNlIFwiTWlzdG9BZHJlc2EyXCI6XHJcbiAgICAgICAgICBjYXNlIFwiTWlzdG9BZHJlc2EzXCI6XHJcbiAgICAgICAgICAgIHN0YXRlID0gWE1MU3RhdGUuQWRkcmVzcztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFwiWnJpekRhdHVtTmFyb3plbmlcIjpcclxuICAgICAgICAgIGNhc2UgXCJacml6SUNPXCI6XHJcbiAgICAgICAgICAgIHN0YXRlID0gWE1MU3RhdGUuRm91bmRlckljbztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAub24oXCJjbG9zZXRhZ1wiLCAodGFnTmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgc3dpdGNoICh0YWdOYW1lKSB7XHJcbiAgICAgICAgICBjYXNlIFwiUHJhdm5pU3ViamVrdFwiOlxyXG4gICAgICAgICAgICBpZiAoY3VycmVudFNjaG9vbHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIHNjaG9vbHMucHVzaCguLi5jdXJyZW50U2Nob29scyk7XHJcbiAgICAgICAgICAgICAgY3VycmVudEZvdW5kZXJzLmZvckVhY2goKGZvdW5kZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGZvdW5kZXIubmFtZSArIGZvdW5kZXIuaWNvO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kZXJzLmhhcyhrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGZvdW5kZXJzLmdldChrZXkpLnNjaG9vbHMucHVzaCguLi5jdXJyZW50U2Nob29scyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBmb3VuZGVycy5zZXQoa2V5LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogZm91bmRlci5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGljbzogZm91bmRlci5pY28sXHJcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxUeXBlOiBmb3VuZGVyLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgbXVuaWNpcGFsaXR5VHlwZTogZ2V0TXVuaWNpcGFsaXR5VHlwZShmb3VuZGVyLnR5cGUpLFxyXG4gICAgICAgICAgICAgICAgICAgIHNjaG9vbHM6IFsuLi5jdXJyZW50U2Nob29sc10sXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGN1cnJlbnRJY28gPSBcIlwiO1xyXG4gICAgICAgICAgICBjdXJyZW50Rm91bmRlcnMgPSBbXTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBcIlpyaXpvdmF0ZWxcIjpcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRGb3VuZGVySWNvID09PSBcIlwiIHx8IGN1cnJlbnRGb3VuZGVyTmFtZSA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICAgIGN1cnJlbnRGb3VuZGVycy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGljbzogY3VycmVudEljbyxcclxuICAgICAgICAgICAgICAgIG5hbWU6IGN1cnJlbnROYW1lLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogXCIyMjRcIiwgLy8gcy5yLm8gKG5vdCBhbGwgYXJlIHRob3NlLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBkaWZmZXJlbnRpYXRlIGhlcmUpXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY3VycmVudEZvdW5kZXJzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgaWNvOiBjdXJyZW50Rm91bmRlckljbyxcclxuICAgICAgICAgICAgICAgIG5hbWU6IGN1cnJlbnRGb3VuZGVyTmFtZSxcclxuICAgICAgICAgICAgICAgIHR5cGU6IGdldENvcnJlY3RGb3VuZGVyVHlwZShjdXJyZW50Rm91bmRlclR5cGUpLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGN1cnJlbnRGb3VuZGVySWNvID0gXCJcIjtcclxuICAgICAgICAgICAgY3VycmVudEZvdW5kZXJOYW1lID0gXCJcIjtcclxuICAgICAgICAgICAgY3VycmVudEZvdW5kZXJUeXBlID0gXCJcIjtcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcIlNrb2xhWmFyaXplbmlcIjpcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRUeXBlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgY3VycmVudFNjaG9vbHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBpem86IGN1cnJlbnRJem8sXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBjdXJyZW50TmFtZSxcclxuICAgICAgICAgICAgICAgIHJlZGl6bzogY3VycmVudFJlZGl6byxcclxuICAgICAgICAgICAgICAgIGNhcGFjaXR5OiBjdXJyZW50Q2FwYWNpdHksXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBjdXJyZW50VHlwZSxcclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uczogY3VycmVudExvY2F0aW9ucyxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjdXJyZW50TG9jYXRpb25zID0gW107XHJcbiAgICAgICAgICAgIGN1cnJlbnRUeXBlID0gbnVsbDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFwiU2tvbGFNaXN0b1Z5a29udUNpbm5vc3RpXCI6XHJcbiAgICAgICAgICAgIGlmIChpc1J1aWFuQ29kZU1pc3NpbmcpIHtcclxuICAgICAgICAgICAgICBzY2hvb2xzV2l0aG91dFJ1aWFuLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgaXpvOiBjdXJyZW50SXpvLFxyXG4gICAgICAgICAgICAgICAgYWRkcmVzczogY3VycmVudEFkZHJlc3MsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBjdXJyZW50VHlwZSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgXCJNaXN0b1JVQUlOS29kXCI6XHJcbiAgICAgICAgICAgIGlzUnVpYW5Db2RlTWlzc2luZyA9ICFpc1J1aWFuQ29kZVNldDtcclxuICAgICAgICAgIGNhc2UgXCJSZWRQbG55TmF6ZXZcIjpcclxuICAgICAgICAgIGNhc2UgXCJSZWRJem9cIjpcclxuICAgICAgICAgIGNhc2UgXCJJQ09cIjpcclxuICAgICAgICAgIGNhc2UgXCJJWk9cIjpcclxuICAgICAgICAgIGNhc2UgXCJTa29sYURydWhUeXBcIjpcclxuICAgICAgICAgIGNhc2UgXCJTa29sYUthcGFjaXRhXCI6XHJcbiAgICAgICAgICBjYXNlIFwiWnJpek5hemV2XCI6XHJcbiAgICAgICAgICBjYXNlIFwiWnJpeklDT1wiOlxyXG4gICAgICAgICAgY2FzZSBcIlpyaXpEYXR1bU5hcm96ZW5pXCI6XHJcbiAgICAgICAgICBjYXNlIFwiWnJpelByYXZuaUZvcm1hXCI6XHJcbiAgICAgICAgICBjYXNlIFwiTWlzdG9BZHJlc2ExXCI6XHJcbiAgICAgICAgICBjYXNlIFwiTWlzdG9BZHJlc2EyXCI6XHJcbiAgICAgICAgICBjYXNlIFwiTWlzdG9BZHJlc2EzXCI6XHJcbiAgICAgICAgICAgIHN0YXRlID0gWE1MU3RhdGUuTm9uZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAub24oXCJ0ZXh0XCIsICh0ZXh0OiBzdHJpbmcpID0+IHtcclxuICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAgICAgICBjYXNlIFhNTFN0YXRlLlJlZEl6bzpcclxuICAgICAgICAgICAgY3VycmVudFJlZGl6byA9IHRleHQ7XHJcbiAgICAgICAgICBjYXNlIFhNTFN0YXRlLlNjaG9vbE5hbWU6XHJcbiAgICAgICAgICAgIGN1cnJlbnROYW1lID0gdGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFhNTFN0YXRlLkl6bzpcclxuICAgICAgICAgICAgY3VycmVudEl6byA9IHRleHQ7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBYTUxTdGF0ZS5JY286XHJcbiAgICAgICAgICAgIGN1cnJlbnRJY28gPSB0ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgWE1MU3RhdGUuU2Nob29sVHlwZTpcclxuICAgICAgICAgICAgaWYgKHRleHQgPT09IFNDSE9PTF9UWVBFX0tJTkRFUkdBUlRFTikge1xyXG4gICAgICAgICAgICAgIGN1cnJlbnRUeXBlID0gU2Nob29sVHlwZS5LaW5kZXJnYXJ0ZW47XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGV4dCA9PT0gU0NIT09MX1RZUEVfRUxFTUVOVEFSWSkge1xyXG4gICAgICAgICAgICAgIGN1cnJlbnRUeXBlID0gU2Nob29sVHlwZS5FbGVtZW50YXJ5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBYTUxTdGF0ZS5SdWlhbkNvZGU6XHJcbiAgICAgICAgICAgIGlzUnVpYW5Db2RlU2V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgY3VycmVudExvY2F0aW9ucy5wdXNoKHtcclxuICAgICAgICAgICAgICBhZGRyZXNzUG9pbnRJZDogcGFyc2VJbnQodGV4dCksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgWE1MU3RhdGUuQWRkcmVzczpcclxuICAgICAgICAgICAgY3VycmVudEFkZHJlc3MucHVzaCh0ZXh0KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFhNTFN0YXRlLkZvdW5kZXJOYW1lOlxyXG4gICAgICAgICAgICBjdXJyZW50Rm91bmRlck5hbWUgPSB0ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgWE1MU3RhdGUuRm91bmRlckljbzpcclxuICAgICAgICAgICAgY3VycmVudEZvdW5kZXJJY28gPSB0ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgWE1MU3RhdGUuRm91bmRlclR5cGU6XHJcbiAgICAgICAgICAgIGN1cnJlbnRGb3VuZGVyVHlwZSA9IHRleHQ7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBYTUxTdGF0ZS5DYXBhY2l0eTpcclxuICAgICAgICAgICAgY3VycmVudENhcGFjaXR5ID0gcGFyc2VJbnQodGV4dCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLm9uKFwiZXJyb3JcIiwgcmVqZWN0KVxyXG4gICAgICAub24oXCJlbmRcIiwgcmVzb2x2ZSk7XHJcblxyXG4gICAgLy8gd2FudGVkIHRvIHVzZSAnYXdhaXQgcGlwZWxpbmUoY3JlYXRlUmVhZFN0cmVhbShnZXRYbWxGaWxlUGF0aChvcHRpb25zKSksIHNheFN0cmVhbSknXHJcbiAgICAvLyBidXQgdGhlIHByb2dyYW0gd291bGQgcXVpdCBzcG9udGFuZW91c2x5IGFmdGVyIGZpbmlzaGluZyBzdHJlYW0gLSB1c2luZyBQcm9taXNlIGluc3RlYWQuXHJcbiAgICBjcmVhdGVSZWFkU3RyZWFtKGdldFhtbEZpbGVQYXRoKG9wdGlvbnMpKS5waXBlKHNheFN0cmVhbSk7XHJcbiAgfSk7XHJcblxyXG4gIGF3YWl0IHN0cmVhbVByb21pc2U7XHJcblxyXG4gIHJldHVybiB7IHNjaG9vbHMsIGZvdW5kZXJzLCBzY2hvb2xzV2l0aG91dFJ1aWFuIH07XHJcbn07XHJcblxyXG5jb25zdCBpbXBvcnREYXRhVG9EYiA9IGFzeW5jIChcclxuICBvcHRpb25zOiBPcGVuRGF0YVN5bmNPcHRpb25zLFxyXG4gIHNhdmVGb3VuZGVyc1RvQ3N2OiBib29sZWFuID0gZmFsc2UsXHJcbiAgc2F2ZVNjaG9vbHNXaXRob3V0UnVpYW5Ub0NzdjogYm9vbGVhbiA9IGZhbHNlXHJcbikgPT4ge1xyXG4gIGNvbnN0IHsgc2Nob29scywgZm91bmRlcnMsIHNjaG9vbHNXaXRob3V0UnVpYW4gfSA9XHJcbiAgICBhd2FpdCBwcm9jZXNzU2Nob29sUmVnaXN0ZXJYbWwob3B0aW9ucyk7XHJcblxyXG4gIGlmIChzYXZlRm91bmRlcnNUb0Nzdikge1xyXG4gICAgY29uc3QgY3N2RmlsZSA9IFwiZm91bmRlcnMuY3N2XCI7XHJcblxyXG4gICAgaWYgKGV4aXN0c1N5bmMoY3N2RmlsZSkpIHtcclxuICAgICAgcm1TeW5jKGNzdkZpbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBjc3YgPSBjcmVhdGVXcml0ZVN0cmVhbShjc3ZGaWxlLCB7XHJcbiAgICAgIGZsYWdzOiBcImFcIixcclxuICAgIH0pO1xyXG4gICAgY3N2LndyaXRlKFwiScSMTztaxZlpem92YXRlbDtQcsOhdm7DrSBmb3JtYTtQb8SNZXQgxaFrb2w7xaBrb2x5XFxuXCIpO1xyXG4gICAgZm91bmRlcnMuZm9yRWFjaCgoZm91bmRlcikgPT4ge1xyXG4gICAgICBjc3Yud3JpdGUoXHJcbiAgICAgICAgYCMke2ZvdW5kZXIuaWNvfTske2ZvdW5kZXIubmFtZX07JHtmb3VuZGVyLm9yaWdpbmFsVHlwZX07JHtcclxuICAgICAgICAgIGZvdW5kZXIuc2Nob29scy5sZW5ndGhcclxuICAgICAgICB9OyR7Zm91bmRlci5zY2hvb2xzLm1hcCgoc2Nob29sKSA9PiBzY2hvb2wubmFtZSkuam9pbihcIi0tLVwiKX1cXG5gXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIGNzdi5lbmQoKTtcclxuICB9XHJcblxyXG4gIGlmIChzYXZlU2Nob29sc1dpdGhvdXRSdWlhblRvQ3N2KSB7XHJcbiAgICBjb25zdCBjc3ZGaWxlID0gXCJzY2hvb2xzV2l0aG91dFJ1aWFuLmNzdlwiO1xyXG5cclxuICAgIGlmIChleGlzdHNTeW5jKGNzdkZpbGUpKSB7XHJcbiAgICAgIHJtU3luYyhjc3ZGaWxlKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgY3N2ID0gY3JlYXRlV3JpdGVTdHJlYW0oY3N2RmlsZSwge1xyXG4gICAgICBmbGFnczogXCJhXCIsXHJcbiAgICB9KTtcclxuICAgIGNzdi53cml0ZShcIklaTztKZSBtYXRlxZlza8OhO0plIHrDoWtsYWRuw607YWRyZXNhMTthZHJlc2EyO2FkcmVzYTNcXG5cIik7XHJcbiAgICBzY2hvb2xzV2l0aG91dFJ1aWFuLmZvckVhY2goKHNjaG9vbEFkZHJlc3MpID0+IHtcclxuICAgICAgY3N2LndyaXRlKFxyXG4gICAgICAgIGAjJHtzY2hvb2xBZGRyZXNzLml6b307JHtcclxuICAgICAgICAgIHNjaG9vbEFkZHJlc3MudHlwZSA9PT0gU2Nob29sVHlwZS5LaW5kZXJnYXJ0ZW4gPyBcIlRSVUVcIiA6IFwiRkFMU0VcIlxyXG4gICAgICAgIH07JHtcclxuICAgICAgICAgIHNjaG9vbEFkZHJlc3MudHlwZSA9PT0gU2Nob29sVHlwZS5FbGVtZW50YXJ5ID8gXCJUUlVFXCIgOiBcIkZBTFNFXCJcclxuICAgICAgICB9OyR7c2Nob29sQWRkcmVzcy5hZGRyZXNzLmpvaW4oXCI7XCIpfVxcbmBcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gICAgY3N2LmVuZCgpO1xyXG4gIH1cclxuXHJcbiAgYXdhaXQgaW5zZXJ0U2Nob29scyhzY2hvb2xzKTtcclxuXHJcbiAgYXdhaXQgaW5zZXJ0Rm91bmRlcnMoQXJyYXkuZnJvbShmb3VuZGVycy52YWx1ZXMoKSkpO1xyXG59O1xyXG5cclxuY29uc3QgZ2V0WG1sRmlsZVBhdGggPSAob3B0aW9uczogT3BlbkRhdGFTeW5jT3B0aW9uc1BhcnRpYWwpOiBzdHJpbmcgPT4ge1xyXG4gIHJldHVybiBqb2luKG9wdGlvbnMudG1wRGlyLCBvcHRpb25zLnNjaG9vbHNYbWxGaWxlTmFtZSk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZG93bmxvYWRBbmRJbXBvcnRTY2hvb2xzID0gYXN5bmMgKFxyXG4gIG9wdGlvbnM6IE9wZW5EYXRhU3luY09wdGlvbnNQYXJ0aWFsID0ge30sXHJcbiAgc2F2ZUZvdW5kZXJzVG9Dc3Y6IGJvb2xlYW4gPSBmYWxzZSxcclxuICBzYXZlU2Nob29sc1dpdGhvdXRSdWlhblRvQ3N2OiBib29sZWFuID0gZmFsc2VcclxuKSA9PiB7XHJcbiAgYXdhaXQgcnVuU3luY1BhcnQoU3luY1BhcnQuU2Nob29scywgW1N5bmNQYXJ0LkFkZHJlc3NQb2ludHNdLCBhc3luYyAoKSA9PiB7XHJcbiAgICBjb25zdCBydW5PcHRpb25zID0gcHJlcGFyZU9wdGlvbnMob3B0aW9ucyk7XHJcblxyXG4gICAgYXdhaXQgZG93bmxvYWRYbWwocnVuT3B0aW9ucyk7XHJcbiAgICBhd2FpdCBpbXBvcnREYXRhVG9EYihcclxuICAgICAgcnVuT3B0aW9ucyxcclxuICAgICAgc2F2ZUZvdW5kZXJzVG9Dc3YsXHJcbiAgICAgIHNhdmVTY2hvb2xzV2l0aG91dFJ1aWFuVG9Dc3ZcclxuICAgICk7XHJcbiAgICBkZWxldGVTY2hvb2xzWG1sRmlsZShydW5PcHRpb25zKTtcclxuICB9KTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBkZWxldGVTY2hvb2xzWG1sRmlsZSA9IChcclxuICBvcHRpb25zOiBPcGVuRGF0YVN5bmNPcHRpb25zUGFydGlhbCA9IHt9XHJcbikgPT4ge1xyXG4gIGNvbnN0IHJ1bk9wdGlvbnMgPSBwcmVwYXJlT3B0aW9ucyhvcHRpb25zKTtcclxuXHJcbiAgaWYgKGV4aXN0c1N5bmMoZ2V0WG1sRmlsZVBhdGgocnVuT3B0aW9ucykpKSB7XHJcbiAgICBybVN5bmMoZ2V0WG1sRmlsZVBhdGgocnVuT3B0aW9ucykpO1xyXG4gIH1cclxufTtcclxuIl19
|
|
207
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nob29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVuLWRhdGEtc3luYy9zY2hvb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzdFLE9BQU8sS0FBSyxNQUFNLFlBQVksQ0FBQztBQUMvQixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVCLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLElBQUksTUFBTSwwQkFBMEIsQ0FBQztBQUM1QyxPQUFPLFdBQVcsTUFBTSxtQ0FBbUMsQ0FBQztBQUU1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNyQyxPQUFPLEVBRUwsZ0JBQWdCLEVBR2hCLFVBQVUsRUFDVixRQUFRLEdBQ1QsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUdMLGNBQWMsR0FDZixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFdkMsTUFBTSxjQUFjLEdBQUcsS0FBSyxFQUFFLE9BQTRCLEVBQWlCLEVBQUU7SUFDM0UsSUFBSSxVQUFVLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtRQUMxQyxPQUFPO0tBQ1I7SUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7SUFDcEUsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENB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QixFQUNqQiw0QkFBNEIsQ0FDN0IsQ0FBQztRQUNGLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3RDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FDckMsVUFBc0MsRUFBRSxFQUN4QyxFQUFFO0lBQ0YsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTNDLElBQUksVUFBVSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUU7UUFDN0MsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7S0FDdkM7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVSZWFkU3RyZWFtLCBjcmVhdGVXcml0ZVN0cmVhbSwgZXhpc3RzU3luYywgcm1TeW5jIH0gZnJvbSBcImZzXCI7XHJcbmltcG9ydCBmZXRjaCBmcm9tIFwibm9kZS1mZXRjaFwiO1xyXG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcInBhdGhcIjtcclxuaW1wb3J0IHBhcnNlciBmcm9tIFwic3RyZWFtLWpzb25cIjtcclxuaW1wb3J0IFBpY2sgZnJvbSBcInN0cmVhbS1qc29uL2ZpbHRlcnMvUGlja1wiO1xyXG5pbXBvcnQgU3RyZWFtQXJyYXkgZnJvbSBcInN0cmVhbS1qc29uL3N0cmVhbWVycy9TdHJlYW1BcnJheVwiO1xyXG5cclxuaW1wb3J0IHsgcGlwZWxpbmUgfSBmcm9tIFwic3RyZWFtL3Byb21pc2VzXCI7XHJcbmltcG9ydCB7IGluc2VydEZvdW5kZXJzIH0gZnJvbSBcIi4uL2RiL2ZvdW5kZXJzXCI7XHJcbmltcG9ydCB7IGluc2VydFNjaG9vbHMgfSBmcm9tIFwiLi4vZGIvc2Nob29sc1wiO1xyXG5pbXBvcnQgeyBnZXRLbmV4RGIgfSBmcm9tIFwiLi4vZGIvZGJcIjtcclxuaW1wb3J0IHtcclxuICBGb3VuZGVyLFxyXG4gIE11bmljaXBhbGl0eVR5cGUsXHJcbiAgU2Nob29sLFxyXG4gIFNjaG9vbExvY2F0aW9uLFxyXG4gIFNjaG9vbFR5cGUsXHJcbiAgU3luY1BhcnQsXHJcbn0gZnJvbSBcIi4uL2RiL3R5cGVzXCI7XHJcbmltcG9ydCB7XHJcbiAgT3BlbkRhdGFTeW5jT3B0aW9ucyxcclxuICBPcGVuRGF0YVN5bmNPcHRpb25zUGFydGlhbCxcclxuICBwcmVwYXJlT3B0aW9ucyxcclxufSBmcm9tIFwiLi4vdXRpbHMvaGVscGVyc1wiO1xyXG5pbXBvcnQgeyBydW5TeW5jUGFydCB9IGZyb20gXCIuL2NvbW1vblwiO1xyXG5cclxuY29uc3QgZG93bmxvYWRKc29ubGQgPSBhc3luYyAob3B0aW9uczogT3BlbkRhdGFTeW5jT3B0aW9ucyk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gIGlmIChleGlzdHNTeW5jKGdldEpzb25sZEZpbGVQYXRoKG9wdGlvbnMpKSkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgY29uc29sZS5sb2coXCJEb3dubG9hZGluZyBhIGxhcmdlIEpTT04tTEQgZmlsZSB3aXRoIHNjaG9vbCBkYXRhLi4uXCIpO1xyXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gob3B0aW9ucy5zY2hvb2xzSnNvbmxkVXJsKTtcclxuICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgYFRoZSBKU09OLUxEIGZpbGUgY291bGQgbm90IGJlIGRvd25sb2FkZWQuIEhUVFAgQ29kZTogJHtyZXNwb25zZS5zdGF0dXN9YFxyXG4gICAgKTtcclxuICB9XHJcbiAgYXdhaXQgcGlwZWxpbmUocmVzcG9uc2UuYm9keSwgY3JlYXRlV3JpdGVTdHJlYW0oZ2V0SnNvbmxkRmlsZVBhdGgob3B0aW9ucykpKTtcclxuICBjb25zb2xlLmxvZyhcIkZpbmlzaGVkIGRvd25sb2FkaW5nLlwiKTtcclxufTtcclxuXHJcbmNvbnN0IFNDSE9PTF9UWVBFX0tJTkRFUkdBUlRFTiA9IFwiQTAwXCI7XHJcbmNvbnN0IFNDSE9PTF9UWVBFX0VMRU1FTlRBUlkgPSBcIkIwMFwiO1xyXG5cclxuY29uc3QgZ2V0Q29ycmVjdEZvdW5kZXJUeXBlID0gKGZvdW5kZXJUeXBlOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIHJldHVybiBmb3VuZGVyVHlwZSA9PT0gXCJcIiA/IFwiMTAxXCIgOiBmb3VuZGVyVHlwZTtcclxufTtcclxuXHJcbmNvbnN0IGdldE11bmljaXBhbGl0eVR5cGUgPSAoZm91bmRlclR5cGU6IHN0cmluZyk6IE11bmljaXBhbGl0eVR5cGUgPT4ge1xyXG4gIHJldHVybiBmb3VuZGVyVHlwZSA9PT0gXCIyNjFcIlxyXG4gICAgPyBNdW5pY2lwYWxpdHlUeXBlLkNpdHlcclxuICAgIDogZm91bmRlclR5cGUgPT09IFwiMjYzXCJcclxuICAgID8gTXVuaWNpcGFsaXR5VHlwZS5EaXN0cmljdFxyXG4gICAgOiBNdW5pY2lwYWxpdHlUeXBlLk90aGVyO1xyXG59O1xyXG5cclxudHlwZSBTY2hvb2xBZGRyZXNzID0ge1xyXG4gIGl6bzogc3RyaW5nO1xyXG4gIGFkZHJlc3M6IHN0cmluZ1tdO1xyXG4gIHR5cGU6IFNjaG9vbFR5cGU7XHJcbn07XHJcblxyXG5jb25zdCBwcm9jZXNzU2Nob29sUmVnaXN0ZXJKc29ubGQgPSBhc3luYyAoXHJcbiAgb3B0aW9uczogT3BlbkRhdGFTeW5jT3B0aW9uc1xyXG4pOiBQcm9taXNlPHtcclxuICBzY2hvb2xzOiBTY2hvb2xbXTtcclxuICBmb3VuZGVyczogTWFwPHN0cmluZywgRm91bmRlcj47XHJcbiAgc2Nob29sc1dpdGhvdXRSdWlhbjogU2Nob29sQWRkcmVzc1tdO1xyXG59PiA9PiB7XHJcbiAgY29uc3QgZm91bmRlcnMgPSBuZXcgTWFwPHN0cmluZywgRm91bmRlcj4oKTtcclxuICBjb25zdCBzY2hvb2xzOiBTY2hvb2xbXSA9IFtdO1xyXG4gIGNvbnN0IHNjaG9vbHNXaXRob3V0UnVpYW46IFNjaG9vbEFkZHJlc3NbXSA9IFtdO1xyXG5cclxuICBjb25zdCBzdHJlYW0gPSBjcmVhdGVSZWFkU3RyZWFtKGdldEpzb25sZEZpbGVQYXRoKG9wdGlvbnMpKVxyXG4gICAgLnBpcGUocGFyc2VyKCkpXHJcbiAgICAucGlwZShuZXcgUGljayh7IGZpbHRlcjogXCJsaXN0XCIgfSkpXHJcbiAgICAucGlwZShuZXcgU3RyZWFtQXJyYXkoKSk7XHJcblxyXG4gIGZvciBhd2FpdCAoY29uc3QgeyB2YWx1ZTogZW50aXR5IH0gb2Ygc3RyZWFtKSB7XHJcbiAgICBjb25zdCByZWRpem86IHN0cmluZyA9IGVudGl0eS5yZWRJem8gPz8gXCJcIjtcclxuICAgIGNvbnN0IGljbzogc3RyaW5nID0gZW50aXR5LmljbyA/PyBcIlwiO1xyXG4gICAgY29uc3QgZW50aXR5TmFtZTogc3RyaW5nID0gZW50aXR5LnVwbG55TmF6ZXYgPz8gXCJcIjtcclxuICAgIGNvbnN0IGN1cnJlbnRTY2hvb2xzOiBTY2hvb2xbXSA9IFtdO1xyXG5cclxuICAgIGZvciAoY29uc3Qgc2Nob29sIG9mIGVudGl0eS5za29seUFaYXJpemVuaSA/PyBbXSkge1xyXG4gICAgICBjb25zdCB0eXBlID1cclxuICAgICAgICBzY2hvb2wuZHJ1aCA9PT0gU0NIT09MX1RZUEVfS0lOREVSR0FSVEVOXHJcbiAgICAgICAgICA/IFNjaG9vbFR5cGUuS2luZGVyZ2FydGVuXHJcbiAgICAgICAgICA6IHNjaG9vbC5kcnVoID09PSBTQ0hPT0xfVFlQRV9FTEVNRU5UQVJZXHJcbiAgICAgICAgICA/IFNjaG9vbFR5cGUuRWxlbWVudGFyeVxyXG4gICAgICAgICAgOiBudWxsO1xyXG5cclxuICAgICAgaWYgKHR5cGUgPT09IG51bGwpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgY29uc3QgY2FwYWNpdHlFbnRyeSA9XHJcbiAgICAgICAgc2Nob29sLmthcGFjaXR5Py5maW5kKChrKSA9PiBrLm1lcm5hSmVkbm90a2EgPT09IFwiMDFcIikgPz9cclxuICAgICAgICBzY2hvb2wua2FwYWNpdHk/LlswXTtcclxuICAgICAgY29uc3QgY2FwYWNpdHk6IG51bWJlciA9IGNhcGFjaXR5RW50cnk/Lm5lanZ5c3NpUG92b2xlbnlQb2NldCA/PyAwO1xyXG4gICAgICBjb25zdCBhbGxQbGFjZXMgPSBzY2hvb2wubWlzdGFWeXVreSA/PyBbXTtcclxuICAgICAgY29uc3QgbG9jYXRpb25zV2l0aFJ1aWFuID0gYWxsUGxhY2VzLmZpbHRlcihcclxuICAgICAgICAocCkgPT4gcC5hZHJlc2E/LmtvZFJVSUFOICE9IG51bGxcclxuICAgICAgKTtcclxuICAgICAgLy8gUHJlZmVyIHRoZSBtYWluIGJ1aWxkaW5nIChJRG1pc3RhIG1hdGNoZXMgc2Nob29sIElaTyksIGZhbGwgYmFjayB0byBmaXJzdCBhdmFpbGFibGVcclxuICAgICAgY29uc3QgbWFpblBsYWNlID1cclxuICAgICAgICBsb2NhdGlvbnNXaXRoUnVpYW4uZmluZCgocCkgPT4gcC5JRG1pc3RhID09PSBzY2hvb2wuaXpvKSA/P1xyXG4gICAgICAgIGxvY2F0aW9uc1dpdGhSdWlhblswXTtcclxuXHJcbiAgICAgIGNvbnN0IGxvY2F0aW9uczogU2Nob29sTG9jYXRpb25bXSA9IG1haW5QbGFjZVxyXG4gICAgICAgID8gW3sgYWRkcmVzc1BvaW50SWQ6IG1haW5QbGFjZS5hZHJlc2Eua29kUlVJQU4gfV1cclxuICAgICAgICA6IFtdO1xyXG5cclxuICAgICAgaWYgKCFtYWluUGxhY2UgJiYgYWxsUGxhY2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBhZGRyID0gYWxsUGxhY2VzWzBdLmFkcmVzYSA/PyB7fTtcclxuICAgICAgICBjb25zdCBhZGRyZXNzUGFydHMgPSBbXHJcbiAgICAgICAgICBhZGRyLnVsaWNlLFxyXG4gICAgICAgICAgYWRkci5jaXNsb0RvbW92bmk/LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICBhZGRyLm9iZWMsXHJcbiAgICAgICAgXS5maWx0ZXIoQm9vbGVhbik7XHJcbiAgICAgICAgc2Nob29sc1dpdGhvdXRSdWlhbi5wdXNoKHsgaXpvOiBzY2hvb2wuaXpvLCBhZGRyZXNzOiBhZGRyZXNzUGFydHMsIHR5cGUgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGN1cnJlbnRTY2hvb2xzLnB1c2goe1xyXG4gICAgICAgIGl6bzogc2Nob29sLml6byxcclxuICAgICAgICBuYW1lOiBlbnRpdHlOYW1lIHx8IHNjaG9vbC51cGxueU5hemV2IHx8IFwiXCIsXHJcbiAgICAgICAgcmVkaXpvLFxyXG4gICAgICAgIGNhcGFjaXR5LFxyXG4gICAgICAgIHR5cGUsXHJcbiAgICAgICAgbG9jYXRpb25zLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzY2hvb2xzLnB1c2goLi4uY3VycmVudFNjaG9vbHMpO1xyXG5cclxuICAgIGZvciAoY29uc3QgeiBvZiBlbnRpdHkuenJpem92YXRlbGUgPz8gW10pIHtcclxuICAgICAgbGV0IGZvdW5kZXJJY286IHN0cmluZztcclxuICAgICAgbGV0IGZvdW5kZXJOYW1lOiBzdHJpbmc7XHJcbiAgICAgIGxldCBmb3VuZGVyVHlwZTogc3RyaW5nO1xyXG5cclxuICAgICAgaWYgKHouZHJ1aE9zb2J5ID09PSBcIlBPXCIpIHtcclxuICAgICAgICBmb3VuZGVySWNvID0gei5JY28gPz8gXCJcIjtcclxuICAgICAgICBmb3VuZGVyTmFtZSA9IHoubmF6ZXZPc29ieSA/PyBcIlwiO1xyXG4gICAgICAgIGZvdW5kZXJUeXBlID0gZ2V0Q29ycmVjdEZvdW5kZXJUeXBlKHoucHJhdm5pRm9ybWEgPz8gXCJcIik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZm91bmRlckljbyA9IHouZGF0dW1OYXJvemVuaSA/PyBcIlwiO1xyXG4gICAgICAgIGZvdW5kZXJOYW1lID0gei5uYXpldk9zb2J5ID8/IFwiXCI7XHJcbiAgICAgICAgZm91bmRlclR5cGUgPSBnZXRDb3JyZWN0Rm91bmRlclR5cGUoXCJcIik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChmb3VuZGVySWNvID09PSBcIlwiIHx8IGZvdW5kZXJOYW1lID09PSBcIlwiKSB7XHJcbiAgICAgICAgZm91bmRlckljbyA9IGljbztcclxuICAgICAgICBmb3VuZGVyTmFtZSA9IGVudGl0eU5hbWU7XHJcbiAgICAgICAgZm91bmRlclR5cGUgPSBcIjIyNFwiO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY3VycmVudFNjaG9vbHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IGZvdW5kZXJOYW1lICsgZm91bmRlckljbztcclxuICAgICAgICBpZiAoZm91bmRlcnMuaGFzKGtleSkpIHtcclxuICAgICAgICAgIGZvdW5kZXJzLmdldChrZXkpLnNjaG9vbHMucHVzaCguLi5jdXJyZW50U2Nob29scyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGZvdW5kZXJzLnNldChrZXksIHtcclxuICAgICAgICAgICAgbmFtZTogZm91bmRlck5hbWUsXHJcbiAgICAgICAgICAgIGljbzogZm91bmRlckljbyxcclxuICAgICAgICAgICAgb3JpZ2luYWxUeXBlOiBwYXJzZUludChmb3VuZGVyVHlwZSksXHJcbiAgICAgICAgICAgIG11bmljaXBhbGl0eVR5cGU6IGdldE11bmljaXBhbGl0eVR5cGUoZm91bmRlclR5cGUpLFxyXG4gICAgICAgICAgICBzY2hvb2xzOiBbLi4uY3VycmVudFNjaG9vbHNdLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4geyBzY2hvb2xzLCBmb3VuZGVycywgc2Nob29sc1dpdGhvdXRSdWlhbiB9O1xyXG59O1xyXG5cclxuY29uc3QgaW1wb3J0RGF0YVRvRGIgPSBhc3luYyAoXHJcbiAgb3B0aW9uczogT3BlbkRhdGFTeW5jT3B0aW9ucyxcclxuICBzYXZlRm91bmRlcnNUb0NzdjogYm9vbGVhbiA9IGZhbHNlLFxyXG4gIHNhdmVTY2hvb2xzV2l0aG91dFJ1aWFuVG9Dc3Y6IGJvb2xlYW4gPSBmYWxzZVxyXG4pID0+IHtcclxuICBjb25zdCB7IHNjaG9vbHMsIGZvdW5kZXJzLCBzY2hvb2xzV2l0aG91dFJ1aWFuIH0gPVxyXG4gICAgYXdhaXQgcHJvY2Vzc1NjaG9vbFJlZ2lzdGVySnNvbmxkKG9wdGlvbnMpO1xyXG5cclxuICBpZiAoc2F2ZUZvdW5kZXJzVG9Dc3YpIHtcclxuICAgIGNvbnN0IGNzdkZpbGUgPSBcImZvdW5kZXJzLmNzdlwiO1xyXG5cclxuICAgIGlmIChleGlzdHNTeW5jKGNzdkZpbGUpKSB7XHJcbiAgICAgIHJtU3luYyhjc3ZGaWxlKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgY3N2ID0gY3JlYXRlV3JpdGVTdHJlYW0oY3N2RmlsZSwge1xyXG4gICAgICBmbGFnczogXCJhXCIsXHJcbiAgICB9KTtcclxuICAgIGNzdi53cml0ZShcIknEjE87WsWZaXpvdmF0ZWw7UHLDoXZuw60gZm9ybWE7UG/EjWV0IMWha29sO8Wga29seVxcblwiKTtcclxuICAgIGZvdW5kZXJzLmZvckVhY2goKGZvdW5kZXIpID0+IHtcclxuICAgICAgY3N2LndyaXRlKFxyXG4gICAgICAgIGAjJHtmb3VuZGVyLmljb307JHtmb3VuZGVyLm5hbWV9OyR7Zm91bmRlci5vcmlnaW5hbFR5cGV9OyR7XHJcbiAgICAgICAgICBmb3VuZGVyLnNjaG9vbHMubGVuZ3RoXHJcbiAgICAgICAgfTske2ZvdW5kZXIuc2Nob29scy5tYXAoKHNjaG9vbCkgPT4gc2Nob29sLm5hbWUpLmpvaW4oXCItLS1cIil9XFxuYFxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgICBjc3YuZW5kKCk7XHJcbiAgfVxyXG5cclxuICBpZiAoc2F2ZVNjaG9vbHNXaXRob3V0UnVpYW5Ub0Nzdikge1xyXG4gICAgY29uc3QgY3N2RmlsZSA9IFwic2Nob29sc1dpdGhvdXRSdWlhbi5jc3ZcIjtcclxuXHJcbiAgICBpZiAoZXhpc3RzU3luYyhjc3ZGaWxlKSkge1xyXG4gICAgICBybVN5bmMoY3N2RmlsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGNzdiA9IGNyZWF0ZVdyaXRlU3RyZWFtKGNzdkZpbGUsIHtcclxuICAgICAgZmxhZ3M6IFwiYVwiLFxyXG4gICAgfSk7XHJcbiAgICBjc3Yud3JpdGUoXCJJWk87SmUgbWF0ZcWZc2vDoTtKZSB6w6FrbGFkbsOtO2FkcmVzYTE7YWRyZXNhMjthZHJlc2EzXFxuXCIpO1xyXG4gICAgc2Nob29sc1dpdGhvdXRSdWlhbi5mb3JFYWNoKChzY2hvb2xBZGRyZXNzKSA9PiB7XHJcbiAgICAgIGNzdi53cml0ZShcclxuICAgICAgICBgIyR7c2Nob29sQWRkcmVzcy5pem99OyR7XHJcbiAgICAgICAgICBzY2hvb2xBZGRyZXNzLnR5cGUgPT09IFNjaG9vbFR5cGUuS2luZGVyZ2FydGVuID8gXCJUUlVFXCIgOiBcIkZBTFNFXCJcclxuICAgICAgICB9OyR7XHJcbiAgICAgICAgICBzY2hvb2xBZGRyZXNzLnR5cGUgPT09IFNjaG9vbFR5cGUuRWxlbWVudGFyeSA/IFwiVFJVRVwiIDogXCJGQUxTRVwiXHJcbiAgICAgICAgfTske3NjaG9vbEFkZHJlc3MuYWRkcmVzcy5qb2luKFwiO1wiKX1cXG5gXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIGNzdi5lbmQoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGtuZXggPSBnZXRLbmV4RGIoKTtcclxuICBjb25zdCBzY2hvb2xzQmVmb3JlID0gKGF3YWl0IGtuZXgoXCJzY2hvb2xcIikuY291bnQoXCJpem8gYXMgY291bnRcIikuZmlyc3QoKSkuY291bnQgYXMgbnVtYmVyO1xyXG4gIGNvbnN0IGZvdW5kZXJzQmVmb3JlID0gKGF3YWl0IGtuZXgoXCJmb3VuZGVyXCIpLmNvdW50KFwiaWQgYXMgY291bnRcIikuZmlyc3QoKSkuY291bnQgYXMgbnVtYmVyO1xyXG5cclxuICAvLyBDb21wdXRlIGNoYW5nZSBzdGF0cyBiZWZvcmUgaW5zZXJ0aW5nICh1c2VzIHNhbWUgbG9naWMgYXMgaW5zZXJ0U2Nob29scylcclxuICBjb25zdCBleGlzdGluZ1NuYXA6IHsgaXpvOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgY2FwYWNpdHk6IG51bWJlcjsgYWRkcmVzc19wb2ludF9pZDogbnVtYmVyIHwgbnVsbCB9W10gPVxyXG4gICAgYXdhaXQga25leChcInNjaG9vbFwiKVxyXG4gICAgICAubGVmdEpvaW4oXCJzY2hvb2xfbG9jYXRpb25cIiwgXCJzY2hvb2wuaXpvXCIsIFwic2Nob29sX2xvY2F0aW9uLnNjaG9vbF9pem9cIilcclxuICAgICAgLnNlbGVjdChcInNjaG9vbC5pem9cIiwgXCJzY2hvb2wubmFtZVwiLCBcInNjaG9vbC5jYXBhY2l0eVwiLCBcInNjaG9vbF9sb2NhdGlvbi5hZGRyZXNzX3BvaW50X2lkXCIpO1xyXG4gIGNvbnN0IGV4aXN0aW5nU25hcE1hcCA9IG5ldyBNYXAoZXhpc3RpbmdTbmFwLm1hcCgocikgPT4gW3IuaXpvLCByXSkpO1xyXG4gIGNvbnN0IHN0YXRzRmllbGRVcGRhdGVzID0gc2Nob29scy5maWx0ZXIoKHMpID0+IHtcclxuICAgIGNvbnN0IHJvdyA9IGV4aXN0aW5nU25hcE1hcC5nZXQocy5pem8pO1xyXG4gICAgcmV0dXJuIHJvdyAmJiAocm93Lm5hbWUgIT09IHMubmFtZSB8fCByb3cuY2FwYWNpdHkgIT09IHMuY2FwYWNpdHkpO1xyXG4gIH0pLmxlbmd0aDtcclxuICBjb25zdCBzdGF0c0xvY2F0aW9uVXBkYXRlcyA9IHNjaG9vbHMuZmlsdGVyKChzKSA9PiB7XHJcbiAgICBjb25zdCByb3cgPSBleGlzdGluZ1NuYXBNYXAuZ2V0KHMuaXpvKTtcclxuICAgIGNvbnN0IG5ld1J1aWFucyA9IHMubG9jYXRpb25zLm1hcCgobCkgPT4gbC5hZGRyZXNzUG9pbnRJZCk7XHJcbiAgICByZXR1cm4gcm93ICYmIHJvdy5hZGRyZXNzX3BvaW50X2lkICE9PSBudWxsICYmIG5ld1J1aWFucy5sZW5ndGggPiAwICYmICFuZXdSdWlhbnMuaW5jbHVkZXMocm93LmFkZHJlc3NfcG9pbnRfaWQpO1xyXG4gIH0pLmxlbmd0aDtcclxuXHJcbiAgYXdhaXQgaW5zZXJ0U2Nob29scyhzY2hvb2xzKTtcclxuICBhd2FpdCBpbnNlcnRGb3VuZGVycyhBcnJheS5mcm9tKGZvdW5kZXJzLnZhbHVlcygpKSk7XHJcblxyXG4gIGNvbnN0IHNjaG9vbHNBZnRlciA9IChhd2FpdCBrbmV4KFwic2Nob29sXCIpLmNvdW50KFwiaXpvIGFzIGNvdW50XCIpLmZpcnN0KCkpLmNvdW50IGFzIG51bWJlcjtcclxuICBjb25zdCBmb3VuZGVyc0FmdGVyID0gKGF3YWl0IGtuZXgoXCJmb3VuZGVyXCIpLmNvdW50KFwiaWQgYXMgY291bnRcIikuZmlyc3QoKSkuY291bnQgYXMgbnVtYmVyO1xyXG5cclxuICBjb25zdCBraW5kZXJnYXJ0ZW5zID0gc2Nob29scy5maWx0ZXIoKHMpID0+IHMudHlwZSA9PT0gU2Nob29sVHlwZS5LaW5kZXJnYXJ0ZW4pLmxlbmd0aDtcclxuICBjb25zdCBlbGVtZW50YXJ5ID0gc2Nob29scy5maWx0ZXIoKHMpID0+IHMudHlwZSA9PT0gU2Nob29sVHlwZS5FbGVtZW50YXJ5KS5sZW5ndGg7XHJcblxyXG4gIGNvbnNvbGUubG9nKGBcXG49PT0gU2Nob29sIHN5bmMgc3RhdGlzdGljcyA9PT1gKTtcclxuICBjb25zb2xlLmxvZyhgU2Nob29scyBwYXJzZWQ6ICAgICAgICAgJHtzY2hvb2xzLmxlbmd0aH0gKCR7a2luZGVyZ2FydGVuc30ga2luZGVyZ2FydGVucywgJHtlbGVtZW50YXJ5fSBlbGVtZW50YXJ5KWApO1xyXG4gIGNvbnNvbGUubG9nKGBGb3VuZGVycyBwYXJzZWQ6ICAgICAgICAke2ZvdW5kZXJzLnNpemV9YCk7XHJcbiAgY29uc29sZS5sb2coYE5ldyBzY2hvb2xzIGluc2VydGVkOiAgICR7c2Nob29sc0FmdGVyIC0gc2Nob29sc0JlZm9yZX1gKTtcclxuICBjb25zb2xlLmxvZyhgTmV3IGZvdW5kZXJzIGluc2VydGVkOiAgJHtmb3VuZGVyc0FmdGVyIC0gZm91bmRlcnNCZWZvcmV9YCk7XHJcbiAgY29uc29sZS5sb2coYEZpZWxkIHVwZGF0ZXM6ICAgICAgICAgICR7c3RhdHNGaWVsZFVwZGF0ZXN9IChuYW1lL2NhcGFjaXR5IGNoYW5nZWQpYCk7XHJcbiAgY29uc29sZS5sb2coYExvY2F0aW9uIHVwZGF0ZXM6ICAgICAgICR7c3RhdHNMb2NhdGlvblVwZGF0ZXN9IChmaXJzdCBsb2NhdGlvbiBjaGFuZ2VkKWApO1xyXG4gIGNvbnNvbGUubG9nKGBUb3RhbCBzY2hvb2xzIGluIERCOiAgICAke3NjaG9vbHNBZnRlcn1gKTtcclxuICBjb25zb2xlLmxvZyhgVG90YWwgZm91bmRlcnMgaW4gREI6ICAgJHtmb3VuZGVyc0FmdGVyfWApO1xyXG59O1xyXG5cclxuY29uc3QgZ2V0SnNvbmxkRmlsZVBhdGggPSAob3B0aW9uczogT3BlbkRhdGFTeW5jT3B0aW9uc1BhcnRpYWwpOiBzdHJpbmcgPT4ge1xyXG4gIHJldHVybiBqb2luKG9wdGlvbnMudG1wRGlyLCBvcHRpb25zLnNjaG9vbHNKc29ubGRGaWxlTmFtZSk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZG93bmxvYWRBbmRJbXBvcnRTY2hvb2xzID0gYXN5bmMgKFxyXG4gIG9wdGlvbnM6IE9wZW5EYXRhU3luY09wdGlvbnNQYXJ0aWFsID0ge30sXHJcbiAgc2F2ZUZvdW5kZXJzVG9Dc3Y6IGJvb2xlYW4gPSBmYWxzZSxcclxuICBzYXZlU2Nob29sc1dpdGhvdXRSdWlhblRvQ3N2OiBib29sZWFuID0gZmFsc2VcclxuKSA9PiB7XHJcbiAgYXdhaXQgcnVuU3luY1BhcnQoU3luY1BhcnQuU2Nob29scywgW1N5bmNQYXJ0LkFkZHJlc3NQb2ludHNdLCBhc3luYyAoKSA9PiB7XHJcbiAgICBjb25zdCBydW5PcHRpb25zID0gcHJlcGFyZU9wdGlvbnMob3B0aW9ucyk7XHJcblxyXG4gICAgYXdhaXQgZG93bmxvYWRKc29ubGQocnVuT3B0aW9ucyk7XHJcbiAgICBhd2FpdCBpbXBvcnREYXRhVG9EYihcclxuICAgICAgcnVuT3B0aW9ucyxcclxuICAgICAgc2F2ZUZvdW5kZXJzVG9Dc3YsXHJcbiAgICAgIHNhdmVTY2hvb2xzV2l0aG91dFJ1aWFuVG9Dc3ZcclxuICAgICk7XHJcbiAgICBkZWxldGVTY2hvb2xzSnNvbmxkRmlsZShydW5PcHRpb25zKTtcclxuICB9KTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBkZWxldGVTY2hvb2xzSnNvbmxkRmlsZSA9IChcclxuICBvcHRpb25zOiBPcGVuRGF0YVN5bmNPcHRpb25zUGFydGlhbCA9IHt9XHJcbikgPT4ge1xyXG4gIGNvbnN0IHJ1bk9wdGlvbnMgPSBwcmVwYXJlT3B0aW9ucyhvcHRpb25zKTtcclxuXHJcbiAgaWYgKGV4aXN0c1N5bmMoZ2V0SnNvbmxkRmlsZVBhdGgocnVuT3B0aW9ucykpKSB7XHJcbiAgICBybVN5bmMoZ2V0SnNvbmxkRmlsZVBhdGgocnVuT3B0aW9ucykpO1xyXG4gIH1cclxufTtcclxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { OpenDataSyncOptionsPartial } from "../utils/helpers";
|
|
2
|
-
export declare const downloadAndImportStreets: (options?: OpenDataSyncOptionsPartial) => Promise<void>;
|
|
2
|
+
export declare const downloadAndImportStreets: (options?: OpenDataSyncOptionsPartial, noCache?: boolean) => Promise<void>;
|
|
@@ -7,7 +7,7 @@ import ShpToGeoJson from "shp-to-geojson";
|
|
|
7
7
|
import { pipeline } from "stream/promises";
|
|
8
8
|
import { coordEach } from "@turf/meta";
|
|
9
9
|
import { setCityPolygonGeojson } from "../db/cities";
|
|
10
|
-
import { deleteStreets, getAllSyncedStreets, insertStreetsFromDbf, setStreetAsSynced, } from "../db/street-sync";
|
|
10
|
+
import { clearStreetSyncTable, deleteStreets, getAllSyncedStreets, insertStreetsFromDbf, setStreetAsSynced, } from "../db/street-sync";
|
|
11
11
|
import { SyncPart } from "../db/types";
|
|
12
12
|
import { getAllUrlsFromAtomFeed, getLatestUrlFromAtomFeed, } from "../utils/atom";
|
|
13
13
|
import { prepareOptions, } from "../utils/helpers";
|
|
@@ -70,11 +70,16 @@ const importDataToDb = async ({ streetData, cityCode, polygonData, districtsPoly
|
|
|
70
70
|
await setCityPolygonGeojson(cityCode, polygonData, districtsPolygonData);
|
|
71
71
|
};
|
|
72
72
|
const attempts = 5;
|
|
73
|
-
export const downloadAndImportStreets = async (options = {}) => {
|
|
73
|
+
export const downloadAndImportStreets = async (options = {}, noCache = false) => {
|
|
74
74
|
await runSyncPart(SyncPart.Streets, [SyncPart.AddressPoints], async () => {
|
|
75
75
|
console.log("Starting to download and import streets. This takes up to 1 hour.");
|
|
76
76
|
const completeOptions = prepareOptions(options);
|
|
77
77
|
prepareFolders(completeOptions);
|
|
78
|
+
// Clear street sync table if no-cache flag is set
|
|
79
|
+
if (noCache) {
|
|
80
|
+
console.log("Clearing street sync cache...");
|
|
81
|
+
await clearStreetSyncTable();
|
|
82
|
+
}
|
|
78
83
|
const allDatasetFeedLinks = await getAllUrlsFromAtomFeed(completeOptions.streetsAtomUrl);
|
|
79
84
|
console.log(`Total of ${allDatasetFeedLinks.length} links to ZIP files.`);
|
|
80
85
|
const syncedStreetLinks = await getAllSyncedStreets();
|
|
@@ -124,4 +129,4 @@ export const downloadAndImportStreets = async (options = {}) => {
|
|
|
124
129
|
const wait = async (ms) => {
|
|
125
130
|
await new Promise((resolve) => setTimeout(resolve, ms));
|
|
126
131
|
};
|
|
127
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWV0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVuLWRhdGEtc3luYy9zdHJlZXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLFNBQVMsQ0FBQztBQUU3QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDdEUsT0FBTyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sUUFBUSxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVCLE9BQU8sWUFBWSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUczQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixvQkFBb0IsRUFDcEIsaUJBQWlCLEdBQ2xCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFhLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRCxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHdCQUF3QixHQUN6QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsY0FBYyxHQUNmLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxVQUFVLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV2QyxNQUFNLGNBQWMsR0FBRyxDQUFDLE9BQTRCLEVBQUUsRUFBRTtJQUN0RCxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxV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QUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEFkbVppcCBmcm9tIFwiYWRtLXppcFwiO1xyXG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tIFwiYnVmZmVyXCI7XHJcbmltcG9ydCB7IGNyZWF0ZVdyaXRlU3RyZWFtLCBleGlzdHNTeW5jLCBta2RpclN5bmMsIHJtU3luYyB9IGZyb20gXCJmc1wiO1xyXG5pbXBvcnQgZmV0Y2ggZnJvbSBcIm5vZGUtZmV0Y2hcIjtcclxuaW1wb3J0IHBhcnNlREJGIGZyb20gXCJwYXJzZWRiZlwiO1xyXG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcInBhdGhcIjtcclxuaW1wb3J0IFNocFRvR2VvSnNvbiBmcm9tIFwic2hwLXRvLWdlb2pzb25cIjtcclxuaW1wb3J0IHsgcGlwZWxpbmUgfSBmcm9tIFwic3RyZWFtL3Byb21pc2VzXCI7XHJcblxyXG5pbXBvcnQgeyBGZWF0dXJlQ29sbGVjdGlvbiB9IGZyb20gXCJAdHVyZi9oZWxwZXJzXCI7XHJcbmltcG9ydCB7IGNvb3JkRWFjaCB9IGZyb20gXCJAdHVyZi9tZXRhXCI7XHJcbmltcG9ydCB7IHNldENpdHlQb2x5Z29uR2VvanNvbiB9IGZyb20gXCIuLi9kYi9jaXRpZXNcIjtcclxuaW1wb3J0IHtcclxuICBkZWxldGVTdHJlZXRzLFxyXG4gIGdldEFsbFN5bmNlZFN0cmVldHMsXHJcbiAgaW5zZXJ0U3RyZWV0c0Zyb21EYmYsXHJcbiAgc2V0U3RyZWV0QXNTeW5jZWQsXHJcbn0gZnJvbSBcIi4uL2RiL3N0cmVldC1zeW5jXCI7XHJcbmltcG9ydCB7IERiZlN0cmVldCwgU3luY1BhcnQgfSBmcm9tIFwiLi4vZGIvdHlwZXNcIjtcclxuaW1wb3J0IHtcclxuICBnZXRBbGxVcmxzRnJvbUF0b21GZWVkLFxyXG4gIGdldExhdGVzdFVybEZyb21BdG9tRmVlZCxcclxufSBmcm9tIFwiLi4vdXRpbHMvYXRvbVwiO1xyXG5pbXBvcnQge1xyXG4gIE9wZW5EYXRhU3luY09wdGlvbnMsXHJcbiAgT3BlbkRhdGFTeW5jT3B0aW9uc1BhcnRpYWwsXHJcbiAgcHJlcGFyZU9wdGlvbnMsXHJcbn0gZnJvbSBcIi4uL3V0aWxzL2hlbHBlcnNcIjtcclxuaW1wb3J0IGp0c2syd2dzODQgZnJvbSBcIi4uL3V0aWxzL2p0c2syd2dzODRcIjtcclxuaW1wb3J0IHsgcnVuU3luY1BhcnQgfSBmcm9tIFwiLi9jb21tb25cIjtcclxuXHJcbmNvbnN0IHByZXBhcmVGb2xkZXJzID0gKG9wdGlvbnM6IE9wZW5EYXRhU3luY09wdGlvbnMpID0+IHtcclxuICBjb25zdCB0ZW1wRm9sZGVyID0gZ2V0VGVtcEZvbGRlcihvcHRpb25zKTtcclxuICBpZiAoIWV4aXN0c1N5bmModGVtcEZvbGRlcikpIHtcclxuICAgIG1rZGlyU3luYyh0ZW1wRm9sZGVyKTtcclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBnZXRUZW1wRm9sZGVyID0gKG9wdGlvbnM6IE9wZW5EYXRhU3luY09wdGlvbnMpID0+IHtcclxuICByZXR1cm4gam9pbihvcHRpb25zLnRtcERpciwgb3B0aW9ucy5zdHJlZXRaaXBGb2xkZXJOYW1lKTtcclxufTtcclxuXHJcbmNvbnN0IGRvd25sb2FkWmlwQW5kUGFyc2VGaWxlcyA9IGFzeW5jIChcclxuICB1cmw6IHN0cmluZyxcclxuICBpbmRleDogbnVtYmVyLFxyXG4gIG9wdGlvbnM6IE9wZW5EYXRhU3luY09wdGlvbnNcclxuKTogUHJvbWlzZTx7XHJcbiAgc3RyZWV0RGF0YTogRGJmU3RyZWV0W107XHJcbiAgcG9seWdvbkRhdGE6IEZlYXR1cmVDb2xsZWN0aW9uO1xyXG4gIGRpc3RyaWN0c1BvbHlnb25EYXRhPzogRmVhdHVyZUNvbGxlY3Rpb247XHJcbiAgY2l0eUNvZGU6IHN0cmluZztcclxufT4gPT4ge1xyXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsKTtcclxuICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgYFRoZSBaSVAgZmlsZSBmcm9tICcke3VybH0nIGNvdWxkIG5vdCBiZSBkb3dubG9hZGVkLiBIVFRQIENvZGU6ICR7cmVzcG9uc2Uuc3RhdHVzfWBcclxuICAgICk7XHJcbiAgfVxyXG4gIGNvbnN0IHppcEZpbGVQYXRoID0gam9pbihnZXRUZW1wRm9sZGVyKG9wdGlvbnMpLCBgc3RyZWV0JHtpbmRleH0uemlwYCk7XHJcbiAgYXdhaXQgcGlwZWxpbmUocmVzcG9uc2UuYm9keSwgY3JlYXRlV3JpdGVTdHJlYW0oemlwRmlsZVBhdGgpKTtcclxuXHJcbiAgY29uc3QgemlwID0gbmV3IEFkbVppcCh6aXBGaWxlUGF0aCk7XHJcbiAgY29uc3QgZm9sZGVyTmFtZSA9IHppcC5nZXRFbnRyaWVzKClbMF0uZW50cnlOYW1lO1xyXG4gIGNvbnN0IGNpdHlDb2RlID0gZm9sZGVyTmFtZS5zdWJzdHJpbmcoMCwgNik7XHJcbiAgY29uc3QgZGJmRW50cnlOYW1lID0gYCR7Zm9sZGVyTmFtZX0ke29wdGlvbnMuc3RyZWV0RGJmRmlsZU5hbWV9YDtcclxuICBjb25zdCBzdHJlZXREYXRhID0gcGFyc2VEQkYoemlwLmdldEVudHJ5KGRiZkVudHJ5TmFtZSkuZ2V0RGF0YSgpLCBcIndpbjEyNTBcIik7XHJcblxyXG4gIGNvbnN0IHNocEVudHJ5TmFtZSA9IGAke2ZvbGRlck5hbWV9JHtvcHRpb25zLnBvbHlnb25TaHBGaWxlTmFtZX1gO1xyXG4gIGNvbnN0IHBvbHlnb25EYXRhID0gY29udmVydFNocFRvR2VvSnNvbih6aXAuZ2V0RW50cnkoc2hwRW50cnlOYW1lKS5nZXREYXRhKCkpO1xyXG5cclxuICBjb25zdCBkaXN0cmljdFNocEVudHJ5TmFtZSA9IGAke2ZvbGRlck5hbWV9JHtvcHRpb25zLmRpc3RyaWN0UG9seWdvblNocEZpbGVOYW1lfWA7XHJcbiAgY29uc3QgZGlzdHJpY3RTaHBFbnRyeSA9IHppcC5nZXRFbnRyeShkaXN0cmljdFNocEVudHJ5TmFtZSk7XHJcblxyXG4gIGxldCBkaXN0cmljdHNQb2x5Z29uRGF0YTogRmVhdHVyZUNvbGxlY3Rpb24gPSB1bmRlZmluZWQ7XHJcbiAgaWYgKGRpc3RyaWN0U2hwRW50cnkgIT09IG51bGwpIHtcclxuICAgIGNvbnN0IGRpc3RyaWN0RGJmRW50cnlOYW1lID0gYCR7Zm9sZGVyTmFtZX0ke29wdGlvbnMuZGlzdHJpY3RQb2x5Z29uRGJmRmlsZU5hbWV9YDtcclxuICAgIGRpc3RyaWN0c1BvbHlnb25EYXRhID0gY29udmVydFNocFRvR2VvSnNvbihcclxuICAgICAgZGlzdHJpY3RTaHBFbnRyeS5nZXREYXRhKCksXHJcbiAgICAgIHppcC5nZXRFbnRyeShkaXN0cmljdERiZkVudHJ5TmFtZSkuZ2V0RGF0YSgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcm1TeW5jKHppcEZpbGVQYXRoKTtcclxuICByZXR1cm4geyBzdHJlZXREYXRhLCBwb2x5Z29uRGF0YSwgZGlzdHJpY3RzUG9seWdvbkRhdGEsIGNpdHlDb2RlIH07XHJcbn07XHJcblxyXG5jb25zdCBjb252ZXJ0U2hwVG9HZW9Kc29uID0gKFxyXG4gIHNocEJ1ZmZlcjogQnVmZmVyLFxyXG4gIGRiZkJ1ZmZlcj86IEJ1ZmZlclxyXG4pOiBGZWF0dXJlQ29sbGVjdGlvbiA9PiB7XHJcbiAgY29uc3Qgc2hwID0gbmV3IFNocFRvR2VvSnNvbih7XHJcbiAgICBhcnJheWJ1ZmZlcnM6IHtcclxuICAgICAgc2hwQnVmZmVyLFxyXG4gICAgICAuLi4oZGJmQnVmZmVyID8geyBkYmZCdWZmZXIgfSA6IHt9KSxcclxuICAgIH0sXHJcbiAgfSk7XHJcbiAgY29uc3QgZ2VvSnNvbiA9IHNocC5nZXRHZW9Kc29uKCk7XHJcbiAgZGVsZXRlIGdlb0pzb24uYmJveDtcclxuXHJcbiAgY29vcmRFYWNoKGdlb0pzb24sIChjdXJyZW50Q29vcmQpID0+IHtcclxuICAgIGNvbnN0IFt5LCB4XSA9IGN1cnJlbnRDb29yZDtcclxuICAgIGNvbnN0IHsgbGF0LCBsb24gfSA9IGp0c2syd2dzODQoLXgsIC15KTtcclxuICAgIGN1cnJlbnRDb29yZFswXSA9IGxvbjtcclxuICAgIGN1cnJlbnRDb29yZFsxXSA9IGxhdDtcclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIGdlb0pzb247XHJcbn07XHJcblxyXG5jb25zdCBpbXBvcnREYXRhVG9EYiA9IGFzeW5jICh7XHJcbiAgc3RyZWV0RGF0YSxcclxuICBjaXR5Q29kZSxcclxuICBwb2x5Z29uRGF0YSxcclxuICBkaXN0cmljdHNQb2x5Z29uRGF0YSxcclxufToge1xyXG4gIHN0cmVldERhdGE6IERiZlN0cmVldFtdO1xyXG4gIGNpdHlDb2RlOiBzdHJpbmc7XHJcbiAgcG9seWdvbkRhdGE6IEZlYXR1cmVDb2xsZWN0aW9uO1xyXG4gIGRpc3RyaWN0c1BvbHlnb25EYXRhPzogRmVhdHVyZUNvbGxlY3Rpb247XHJcbn0pID0+IHtcclxuICBpZiAoc3RyZWV0RGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICBhd2FpdCBpbnNlcnRTdHJlZXRzRnJvbURiZihzdHJlZXREYXRhKTtcclxuICB9XHJcbiAgYXdhaXQgc2V0Q2l0eVBvbHlnb25HZW9qc29uKGNpdHlDb2RlLCBwb2x5Z29uRGF0YSwgZGlzdHJpY3RzUG9seWdvbkRhdGEpO1xyXG59O1xyXG5cclxuY29uc3QgYXR0ZW1wdHMgPSA1O1xyXG5cclxuZXhwb3J0IGNvbnN0IGRvd25sb2FkQW5kSW1wb3J0U3RyZWV0cyA9IGFzeW5jIChcclxuICBvcHRpb25zOiBPcGVuRGF0YVN5bmNPcHRpb25zUGFydGlhbCA9IHt9XHJcbik6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gIGF3YWl0IHJ1blN5bmNQYXJ0KFN5bmNQYXJ0LlN0cmVldHMsIFtTeW5jUGFydC5BZGRyZXNzUG9pbnRzXSwgYXN5bmMgKCkgPT4ge1xyXG4gICAgY29uc29sZS5sb2coXHJcbiAgICAgIFwiU3RhcnRpbmcgdG8gZG93bmxvYWQgYW5kIGltcG9ydCBzdHJlZXRzLiBUaGlzIHRha2VzIHVwIHRvIDEgaG91ci5cIlxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBjb21wbGV0ZU9wdGlvbnMgPSBwcmVwYXJlT3B0aW9ucyhvcHRpb25zKTtcclxuICAgIHByZXBhcmVGb2xkZXJzKGNvbXBsZXRlT3B0aW9ucyk7XHJcblxyXG4gICAgY29uc3QgYWxsRGF0YXNldEZlZWRMaW5rcyA9IGF3YWl0IGdldEFsbFVybHNGcm9tQXRvbUZlZWQoXHJcbiAgICAgIGNvbXBsZXRlT3B0aW9ucy5zdHJlZXRzQXRvbVVybFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhgVG90YWwgb2YgJHthbGxEYXRhc2V0RmVlZExpbmtzLmxlbmd0aH0gbGlua3MgdG8gWklQIGZpbGVzLmApO1xyXG5cclxuICAgIGNvbnN0IHN5bmNlZFN0cmVldExpbmtzID0gYXdhaXQgZ2V0QWxsU3luY2VkU3RyZWV0cygpO1xyXG5cclxuICAgIGNvbnN0IHRvRGVsZXRlOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgLy8gcmVtb3ZlIGFsbCBkZXByZWNhdGVkIGxpbmtzIChub3QgaW4gdGhlIG5ldyBsaXN0KVxyXG4gICAgc3luY2VkU3RyZWV0TGlua3MuZm9yRWFjaCgobGluaykgPT4ge1xyXG4gICAgICBpZiAoIWFsbERhdGFzZXRGZWVkTGlua3MuaW5jbHVkZXMobGluaykpIHtcclxuICAgICAgICB0b0RlbGV0ZS5wdXNoKGxpbmspO1xyXG4gICAgICAgIGRlbGV0ZSBzeW5jZWRTdHJlZXRMaW5rc1tsaW5rXTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgYXdhaXQgZGVsZXRlU3RyZWV0cyh0b0RlbGV0ZSk7XHJcblxyXG4gICAgbGV0IGRvbmUgPSBzeW5jZWRTdHJlZXRMaW5rcy5zaXplO1xyXG4gICAgY29uc29sZS5sb2coYFRvdGFsIG9mICR7ZG9uZX0gbGlua3MgdG8gWklQIGZpbGVzIGFscmVhZHkgc3RvcmVkLmApO1xyXG5cclxuICAgIC8vIGdldCBhbGwgbGlua3Mgbm90IHlldCBzdG9yZWRcclxuICAgIGNvbnN0IG5ld0xpbmtzID0gYWxsRGF0YXNldEZlZWRMaW5rcy5maWx0ZXIoXHJcbiAgICAgIChsaW5rKSA9PiAhc3luY2VkU3RyZWV0TGlua3MuaGFzKGxpbmspXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBkZWxheSA9IDA7XHJcbiAgICBjb25zb2xlLmxvZyhgTG9hZGluZyAke25ld0xpbmtzLmxlbmd0aH0gbmV3IGxpbmtzIHRvIFpJUCBmaWxlcy5gKTtcclxuICAgIGZvciAoY29uc3QgbGluayBvZiBuZXdMaW5rcykge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dGVtcHRzOyBpKyspIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgemlwTGluayA9IGF3YWl0IGdldExhdGVzdFVybEZyb21BdG9tRmVlZChsaW5rKTtcclxuICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBkb3dubG9hZFppcEFuZFBhcnNlRmlsZXMoXHJcbiAgICAgICAgICAgIHppcExpbmssXHJcbiAgICAgICAgICAgIGRvbmUsXHJcbiAgICAgICAgICAgIGNvbXBsZXRlT3B0aW9uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGF3YWl0IGltcG9ydERhdGFUb0RiKGRhdGEpO1xyXG4gICAgICAgICAgYXdhaXQgc2V0U3RyZWV0QXNTeW5jZWQobGluayk7XHJcblxyXG4gICAgICAgICAgZG9uZSsrO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRlZCBsaW5rczogJHtkb25lfS8ke2FsbERhdGFzZXRGZWVkTGlua3MubGVuZ3RofWApO1xyXG4gICAgICAgICAgYXdhaXQgd2FpdChkZWxheSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgaWYgKGkgPCBhdHRlbXB0cyAtIDEpIHtcclxuICAgICAgICAgICAgZGVsYXkgKz0gMTAwOyAvLyBpZiBlcnJvciBvY2N1cmVkLCBpdCBpcyBsaWtlbHkgdG8gcmVwZWF0IHNvIHdlIHdhaXQgYSBiaXQgbG9uZ2VyXHJcbiAgICAgICAgICAgIGNvbnN0IHdhaXRUaW1lID0gKGkgKyAxKSAqIDM7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAgICAgYEVycm9yIGNvbm5lY3RpbmcgdG8gQ1VaSyBzZXJ2ZXJzLCByZXRyeWluZyBpbiAke3dhaXRUaW1lfSBzZWNvbmRzLi4uYFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgIGF3YWl0IHdhaXQod2FpdFRpbWUgKiAxMDAwKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG59O1xyXG5cclxuY29uc3Qgd2FpdCA9IGFzeW5jIChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcclxufTtcclxuIl19
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWV0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVuLWRhdGEtc3luYy9zdHJlZXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLFNBQVMsQ0FBQztBQUU3QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDdEUsT0FBTyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sUUFBUSxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVCLE9BQU8sWUFBWSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUczQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLGFBQWEsRUFDYixtQkFBbUIsRUFDbkIsb0JBQW9CLEVBQ3BCLGlCQUFpQixHQUNsQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBYSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEQsT0FBTyxFQUNMLHNCQUFzQixFQUN0Qix3QkFBd0IsR0FDekIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUdMLGNBQWMsR0FDZixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sVUFBVSxNQUFNLHFCQUFxQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFdkMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxPQUE0QixFQUFFLEVBQUU7SUFDdEQsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFDLElBQUksQ0FB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QyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLElBQUksR0FBRyxLQUFLLEVBQUUsRUFBVSxFQUFpQixFQUFFO0lBQy9DLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQWRtWmlwIGZyb20gXCJhZG0temlwXCI7XHJcbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gXCJidWZmZXJcIjtcclxuaW1wb3J0IHsgY3JlYXRlV3JpdGVTdHJlYW0sIGV4aXN0c1N5bmMsIG1rZGlyU3luYywgcm1TeW5jIH0gZnJvbSBcImZzXCI7XHJcbmltcG9ydCBmZXRjaCBmcm9tIFwibm9kZS1mZXRjaFwiO1xyXG5pbXBvcnQgcGFyc2VEQkYgZnJvbSBcInBhcnNlZGJmXCI7XHJcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwicGF0aFwiO1xyXG5pbXBvcnQgU2hwVG9HZW9Kc29uIGZyb20gXCJzaHAtdG8tZ2VvanNvblwiO1xyXG5pbXBvcnQgeyBwaXBlbGluZSB9IGZyb20gXCJzdHJlYW0vcHJvbWlzZXNcIjtcclxuXHJcbmltcG9ydCB7IEZlYXR1cmVDb2xsZWN0aW9uIH0gZnJvbSBcIkB0dXJmL2hlbHBlcnNcIjtcclxuaW1wb3J0IHsgY29vcmRFYWNoIH0gZnJvbSBcIkB0dXJmL21ldGFcIjtcclxuaW1wb3J0IHsgc2V0Q2l0eVBvbHlnb25HZW9qc29uIH0gZnJvbSBcIi4uL2RiL2NpdGllc1wiO1xyXG5pbXBvcnQge1xyXG4gIGNsZWFyU3RyZWV0U3luY1RhYmxlLFxyXG4gIGRlbGV0ZVN0cmVldHMsXHJcbiAgZ2V0QWxsU3luY2VkU3RyZWV0cyxcclxuICBpbnNlcnRTdHJlZXRzRnJvbURiZixcclxuICBzZXRTdHJlZXRBc1N5bmNlZCxcclxufSBmcm9tIFwiLi4vZGIvc3RyZWV0LXN5bmNcIjtcclxuaW1wb3J0IHsgRGJmU3RyZWV0LCBTeW5jUGFydCB9IGZyb20gXCIuLi9kYi90eXBlc1wiO1xyXG5pbXBvcnQge1xyXG4gIGdldEFsbFVybHNGcm9tQXRvbUZlZWQsXHJcbiAgZ2V0TGF0ZXN0VXJsRnJvbUF0b21GZWVkLFxyXG59IGZyb20gXCIuLi91dGlscy9hdG9tXCI7XHJcbmltcG9ydCB7XHJcbiAgT3BlbkRhdGFTeW5jT3B0aW9ucyxcclxuICBPcGVuRGF0YVN5bmNPcHRpb25zUGFydGlhbCxcclxuICBwcmVwYXJlT3B0aW9ucyxcclxufSBmcm9tIFwiLi4vdXRpbHMvaGVscGVyc1wiO1xyXG5pbXBvcnQganRzazJ3Z3M4NCBmcm9tIFwiLi4vdXRpbHMvanRzazJ3Z3M4NFwiO1xyXG5pbXBvcnQgeyBydW5TeW5jUGFydCB9IGZyb20gXCIuL2NvbW1vblwiO1xyXG5cclxuY29uc3QgcHJlcGFyZUZvbGRlcnMgPSAob3B0aW9uczogT3BlbkRhdGFTeW5jT3B0aW9ucykgPT4ge1xyXG4gIGNvbnN0IHRlbXBGb2xkZXIgPSBnZXRUZW1wRm9sZGVyKG9wdGlvbnMpO1xyXG4gIGlmICghZXhpc3RzU3luYyh0ZW1wRm9sZGVyKSkge1xyXG4gICAgbWtkaXJTeW5jKHRlbXBGb2xkZXIpO1xyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IGdldFRlbXBGb2xkZXIgPSAob3B0aW9uczogT3BlbkRhdGFTeW5jT3B0aW9ucykgPT4ge1xyXG4gIHJldHVybiBqb2luKG9wdGlvbnMudG1wRGlyLCBvcHRpb25zLnN0cmVldFppcEZvbGRlck5hbWUpO1xyXG59O1xyXG5cclxuY29uc3QgZG93bmxvYWRaaXBBbmRQYXJzZUZpbGVzID0gYXN5bmMgKFxyXG4gIHVybDogc3RyaW5nLFxyXG4gIGluZGV4OiBudW1iZXIsXHJcbiAgb3B0aW9uczogT3BlbkRhdGFTeW5jT3B0aW9uc1xyXG4pOiBQcm9taXNlPHtcclxuICBzdHJlZXREYXRhOiBEYmZTdHJlZXRbXTtcclxuICBwb2x5Z29uRGF0YTogRmVhdHVyZUNvbGxlY3Rpb247XHJcbiAgZGlzdHJpY3RzUG9seWdvbkRhdGE/OiBGZWF0dXJlQ29sbGVjdGlvbjtcclxuICBjaXR5Q29kZTogc3RyaW5nO1xyXG59PiA9PiB7XHJcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwpO1xyXG4gIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICBgVGhlIFpJUCBmaWxlIGZyb20gJyR7dXJsfScgY291bGQgbm90IGJlIGRvd25sb2FkZWQuIEhUVFAgQ29kZTogJHtyZXNwb25zZS5zdGF0dXN9YFxyXG4gICAgKTtcclxuICB9XHJcbiAgY29uc3QgemlwRmlsZVBhdGggPSBqb2luKGdldFRlbXBGb2xkZXIob3B0aW9ucyksIGBzdHJlZXQke2luZGV4fS56aXBgKTtcclxuICBhd2FpdCBwaXBlbGluZShyZXNwb25zZS5ib2R5LCBjcmVhdGVXcml0ZVN0cmVhbSh6aXBGaWxlUGF0aCkpO1xyXG5cclxuICBjb25zdCB6aXAgPSBuZXcgQWRtWmlwKHppcEZpbGVQYXRoKTtcclxuICBjb25zdCBmb2xkZXJOYW1lID0gemlwLmdldEVudHJpZXMoKVswXS5lbnRyeU5hbWU7XHJcbiAgY29uc3QgY2l0eUNvZGUgPSBmb2xkZXJOYW1lLnN1YnN0cmluZygwLCA2KTtcclxuICBjb25zdCBkYmZFbnRyeU5hbWUgPSBgJHtmb2xkZXJOYW1lfSR7b3B0aW9ucy5zdHJlZXREYmZGaWxlTmFtZX1gO1xyXG4gIGNvbnN0IHN0cmVldERhdGEgPSBwYXJzZURCRjxEYmZTdHJlZXQ+KFxyXG4gICAgemlwLmdldEVudHJ5KGRiZkVudHJ5TmFtZSkuZ2V0RGF0YSgpLFxyXG4gICAgXCJ3aW4xMjUwXCJcclxuICApO1xyXG5cclxuICBjb25zdCBzaHBFbnRyeU5hbWUgPSBgJHtmb2xkZXJOYW1lfSR7b3B0aW9ucy5wb2x5Z29uU2hwRmlsZU5hbWV9YDtcclxuICBjb25zdCBwb2x5Z29uRGF0YSA9IGNvbnZlcnRTaHBUb0dlb0pzb24oemlwLmdldEVudHJ5KHNocEVudHJ5TmFtZSkuZ2V0RGF0YSgpKTtcclxuXHJcbiAgY29uc3QgZGlzdHJpY3RTaHBFbnRyeU5hbWUgPSBgJHtmb2xkZXJOYW1lfSR7b3B0aW9ucy5kaXN0cmljdFBvbHlnb25TaHBGaWxlTmFtZX1gO1xyXG4gIGNvbnN0IGRpc3RyaWN0U2hwRW50cnkgPSB6aXAuZ2V0RW50cnkoZGlzdHJpY3RTaHBFbnRyeU5hbWUpO1xyXG5cclxuICBsZXQgZGlzdHJpY3RzUG9seWdvbkRhdGE6IEZlYXR1cmVDb2xsZWN0aW9uID0gdW5kZWZpbmVkO1xyXG4gIGlmIChkaXN0cmljdFNocEVudHJ5ICE9PSBudWxsKSB7XHJcbiAgICBjb25zdCBkaXN0cmljdERiZkVudHJ5TmFtZSA9IGAke2ZvbGRlck5hbWV9JHtvcHRpb25zLmRpc3RyaWN0UG9seWdvbkRiZkZpbGVOYW1lfWA7XHJcbiAgICBkaXN0cmljdHNQb2x5Z29uRGF0YSA9IGNvbnZlcnRTaHBUb0dlb0pzb24oXHJcbiAgICAgIGRpc3RyaWN0U2hwRW50cnkuZ2V0RGF0YSgpLFxyXG4gICAgICB6aXAuZ2V0RW50cnkoZGlzdHJpY3REYmZFbnRyeU5hbWUpLmdldERhdGEoKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJtU3luYyh6aXBGaWxlUGF0aCk7XHJcbiAgcmV0dXJuIHsgc3RyZWV0RGF0YSwgcG9seWdvbkRhdGEsIGRpc3RyaWN0c1BvbHlnb25EYXRhLCBjaXR5Q29kZSB9O1xyXG59O1xyXG5cclxuY29uc3QgY29udmVydFNocFRvR2VvSnNvbiA9IChcclxuICBzaHBCdWZmZXI6IEJ1ZmZlcixcclxuICBkYmZCdWZmZXI/OiBCdWZmZXJcclxuKTogRmVhdHVyZUNvbGxlY3Rpb24gPT4ge1xyXG4gIGNvbnN0IHNocCA9IG5ldyBTaHBUb0dlb0pzb24oe1xyXG4gICAgYXJyYXlidWZmZXJzOiB7XHJcbiAgICAgIHNocEJ1ZmZlcixcclxuICAgICAgLi4uKGRiZkJ1ZmZlciA/IHsgZGJmQnVmZmVyIH0gOiB7fSksXHJcbiAgICB9LFxyXG4gIH0pO1xyXG4gIGNvbnN0IGdlb0pzb24gPSBzaHAuZ2V0R2VvSnNvbigpO1xyXG4gIGRlbGV0ZSBnZW9Kc29uLmJib3g7XHJcblxyXG4gIGNvb3JkRWFjaChnZW9Kc29uIGFzIGFueSwgKGN1cnJlbnRDb29yZCkgPT4ge1xyXG4gICAgY29uc3QgW3ksIHhdID0gY3VycmVudENvb3JkO1xyXG4gICAgY29uc3QgeyBsYXQsIGxvbiB9ID0ganRzazJ3Z3M4NCgteCwgLXkpO1xyXG4gICAgY3VycmVudENvb3JkWzBdID0gbG9uO1xyXG4gICAgY3VycmVudENvb3JkWzFdID0gbGF0O1xyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gZ2VvSnNvbiBhcyBGZWF0dXJlQ29sbGVjdGlvbjtcclxufTtcclxuXHJcbmNvbnN0IGltcG9ydERhdGFUb0RiID0gYXN5bmMgKHtcclxuICBzdHJlZXREYXRhLFxyXG4gIGNpdHlDb2RlLFxyXG4gIHBvbHlnb25EYXRhLFxyXG4gIGRpc3RyaWN0c1BvbHlnb25EYXRhLFxyXG59OiB7XHJcbiAgc3RyZWV0RGF0YTogRGJmU3RyZWV0W107XHJcbiAgY2l0eUNvZGU6IHN0cmluZztcclxuICBwb2x5Z29uRGF0YTogRmVhdHVyZUNvbGxlY3Rpb247XHJcbiAgZGlzdHJpY3RzUG9seWdvbkRhdGE/OiBGZWF0dXJlQ29sbGVjdGlvbjtcclxufSkgPT4ge1xyXG4gIGlmIChzdHJlZXREYXRhLmxlbmd0aCA+IDApIHtcclxuICAgIGF3YWl0IGluc2VydFN0cmVldHNGcm9tRGJmKHN0cmVldERhdGEpO1xyXG4gIH1cclxuICBhd2FpdCBzZXRDaXR5UG9seWdvbkdlb2pzb24oY2l0eUNvZGUsIHBvbHlnb25EYXRhLCBkaXN0cmljdHNQb2x5Z29uRGF0YSk7XHJcbn07XHJcblxyXG5jb25zdCBhdHRlbXB0cyA9IDU7XHJcblxyXG5leHBvcnQgY29uc3QgZG93bmxvYWRBbmRJbXBvcnRTdHJlZXRzID0gYXN5bmMgKFxyXG4gIG9wdGlvbnM6IE9wZW5EYXRhU3luY09wdGlvbnNQYXJ0aWFsID0ge30sXHJcbiAgbm9DYWNoZTogYm9vbGVhbiA9IGZhbHNlXHJcbik6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gIGF3YWl0IHJ1blN5bmNQYXJ0KFN5bmNQYXJ0LlN0cmVldHMsIFtTeW5jUGFydC5BZGRyZXNzUG9pbnRzXSwgYXN5bmMgKCkgPT4ge1xyXG4gICAgY29uc29sZS5sb2coXHJcbiAgICAgIFwiU3RhcnRpbmcgdG8gZG93bmxvYWQgYW5kIGltcG9ydCBzdHJlZXRzLiBUaGlzIHRha2VzIHVwIHRvIDEgaG91ci5cIlxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBjb21wbGV0ZU9wdGlvbnMgPSBwcmVwYXJlT3B0aW9ucyhvcHRpb25zKTtcclxuICAgIHByZXBhcmVGb2xkZXJzKGNvbXBsZXRlT3B0aW9ucyk7XHJcblxyXG4gICAgLy8gQ2xlYXIgc3RyZWV0IHN5bmMgdGFibGUgaWYgbm8tY2FjaGUgZmxhZyBpcyBzZXRcclxuICAgIGlmIChub0NhY2hlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQ2xlYXJpbmcgc3RyZWV0IHN5bmMgY2FjaGUuLi5cIik7XHJcbiAgICAgIGF3YWl0IGNsZWFyU3RyZWV0U3luY1RhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYWxsRGF0YXNldEZlZWRMaW5rcyA9IGF3YWl0IGdldEFsbFVybHNGcm9tQXRvbUZlZWQoXHJcbiAgICAgIGNvbXBsZXRlT3B0aW9ucy5zdHJlZXRzQXRvbVVybFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhgVG90YWwgb2YgJHthbGxEYXRhc2V0RmVlZExpbmtzLmxlbmd0aH0gbGlua3MgdG8gWklQIGZpbGVzLmApO1xyXG5cclxuICAgIGNvbnN0IHN5bmNlZFN0cmVldExpbmtzID0gYXdhaXQgZ2V0QWxsU3luY2VkU3RyZWV0cygpO1xyXG5cclxuICAgIGNvbnN0IHRvRGVsZXRlOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgLy8gcmVtb3ZlIGFsbCBkZXByZWNhdGVkIGxpbmtzIChub3QgaW4gdGhlIG5ldyBsaXN0KVxyXG4gICAgc3luY2VkU3RyZWV0TGlua3MuZm9yRWFjaCgobGluaykgPT4ge1xyXG4gICAgICBpZiAoIWFsbERhdGFzZXRGZWVkTGlua3MuaW5jbHVkZXMobGluaykpIHtcclxuICAgICAgICB0b0RlbGV0ZS5wdXNoKGxpbmspO1xyXG4gICAgICAgIGRlbGV0ZSBzeW5jZWRTdHJlZXRMaW5rc1tsaW5rXTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgYXdhaXQgZGVsZXRlU3RyZWV0cyh0b0RlbGV0ZSk7XHJcblxyXG4gICAgbGV0IGRvbmUgPSBzeW5jZWRTdHJlZXRMaW5rcy5zaXplO1xyXG4gICAgY29uc29sZS5sb2coYFRvdGFsIG9mICR7ZG9uZX0gbGlua3MgdG8gWklQIGZpbGVzIGFscmVhZHkgc3RvcmVkLmApO1xyXG5cclxuICAgIC8vIGdldCBhbGwgbGlua3Mgbm90IHlldCBzdG9yZWRcclxuICAgIGNvbnN0IG5ld0xpbmtzID0gYWxsRGF0YXNldEZlZWRMaW5rcy5maWx0ZXIoXHJcbiAgICAgIChsaW5rKSA9PiAhc3luY2VkU3RyZWV0TGlua3MuaGFzKGxpbmspXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBkZWxheSA9IDA7XHJcbiAgICBjb25zb2xlLmxvZyhgTG9hZGluZyAke25ld0xpbmtzLmxlbmd0aH0gbmV3IGxpbmtzIHRvIFpJUCBmaWxlcy5gKTtcclxuICAgIGZvciAoY29uc3QgbGluayBvZiBuZXdMaW5rcykge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dGVtcHRzOyBpKyspIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgemlwTGluayA9IGF3YWl0IGdldExhdGVzdFVybEZyb21BdG9tRmVlZChsaW5rKTtcclxuICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBkb3dubG9hZFppcEFuZFBhcnNlRmlsZXMoXHJcbiAgICAgICAgICAgIHppcExpbmssXHJcbiAgICAgICAgICAgIGRvbmUsXHJcbiAgICAgICAgICAgIGNvbXBsZXRlT3B0aW9uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGF3YWl0IGltcG9ydERhdGFUb0RiKGRhdGEpO1xyXG4gICAgICAgICAgYXdhaXQgc2V0U3RyZWV0QXNTeW5jZWQobGluayk7XHJcblxyXG4gICAgICAgICAgZG9uZSsrO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRlZCBsaW5rczogJHtkb25lfS8ke2FsbERhdGFzZXRGZWVkTGlua3MubGVuZ3RofWApO1xyXG4gICAgICAgICAgYXdhaXQgd2FpdChkZWxheSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgaWYgKGkgPCBhdHRlbXB0cyAtIDEpIHtcclxuICAgICAgICAgICAgZGVsYXkgKz0gMTAwOyAvLyBpZiBlcnJvciBvY2N1cmVkLCBpdCBpcyBsaWtlbHkgdG8gcmVwZWF0IHNvIHdlIHdhaXQgYSBiaXQgbG9uZ2VyXHJcbiAgICAgICAgICAgIGNvbnN0IHdhaXRUaW1lID0gKGkgKyAxKSAqIDM7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAgICAgYEVycm9yIGNvbm5lY3RpbmcgdG8gQ1VaSyBzZXJ2ZXJzLCByZXRyeWluZyBpbiAke3dhaXRUaW1lfSBzZWNvbmRzLi4uYFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgIGF3YWl0IHdhaXQod2FpdFRpbWUgKiAxMDAwKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG59O1xyXG5cclxuY29uc3Qgd2FpdCA9IGFzeW5jIChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcclxufTtcclxuIl19
|
package/dist/utils/helpers.d.ts
CHANGED
|
@@ -13,8 +13,8 @@ export interface OpenDataSyncOptions {
|
|
|
13
13
|
polygonShpFileName: string;
|
|
14
14
|
districtPolygonShpFileName: string;
|
|
15
15
|
districtPolygonDbfFileName: string;
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
schoolsJsonldUrl: string;
|
|
17
|
+
schoolsJsonldFileName: string;
|
|
18
18
|
regionsCsvUrl: string;
|
|
19
19
|
regionsSchemaUrl: string;
|
|
20
20
|
regionsCsvFileName: string;
|
package/dist/utils/helpers.js
CHANGED
|
@@ -33,8 +33,8 @@ export const prepareOptions = (options) => {
|
|
|
33
33
|
polygonShpFileName: "OBEC_P.shp",
|
|
34
34
|
districtPolygonShpFileName: "MOMC_P.shp",
|
|
35
35
|
districtPolygonDbfFileName: "MOMC_P.dbf",
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
schoolsJsonldUrl: "https://lkod-ftp.msmt.gov.cz/00022985/88a7c12b-6084-4e47-8b50-46097c6e683f/RSSZ-cela-CR.jsonld",
|
|
37
|
+
schoolsJsonldFileName: "school-register.jsonld",
|
|
38
38
|
regionsCsvUrl: "https://www.czso.cz/documents/10180/23208674/struktura_uzemi_cr.csv",
|
|
39
39
|
regionsSchemaUrl: "https://www.czso.cz/documents/10180/23208674/struktura_uzemi_cr-metadata.json",
|
|
40
40
|
regionsCsvFileName: "struktura_uzemi_cr.csv",
|
|
@@ -173,4 +173,4 @@ export function roundToNDecimalPlaces(toRound, decimalPlaces) {
|
|
|
173
173
|
return (Math.round(toRound * Math.pow(10, decimalPlaces)) /
|
|
174
174
|
Math.pow(10, decimalPlaces));
|
|
175
175
|
}
|
|
176
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDNUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUNwQyxPQUFPLEVBQVcsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFeEQsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDO0FBeUI5QixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxHQUFXLEVBQUUsQ0FDNUMsSUFBSSxDQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTztJQUNqQixDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksUUFBUTtRQUMzQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsc0JBQXNCO1FBQzNDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxlQUFlLENBQUMsRUFDekMsT0FBTyxDQUNSLENBQUM7QUFFSixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FDNUIsT0FBbUMsRUFDZCxFQUFFO0lBQ3ZCLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksaUJBQWlCLEVBQUUsQ0FBQztJQUN2RCxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3hCLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUNwQjtJQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMs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QUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDYixDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO0tBQ1QsQ0FBQztJQUVGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVqQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN6QyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTNCLElBQ0UscUJBQXFCLENBQUMsS0FBSyxDQUFDO1lBQzVCLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFDNUM7WUFDQSxrRUFBa0U7WUFDbEUsUUFBUSxJQUFJLEdBQUcsQ0FBQztTQUNqQjtLQUNGO0lBRUQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLElBQVksRUFBRSxJQUFZLEVBQVUsRUFBRTtJQUNqRSxNQUFNLE1BQU0sR0FBZSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDOUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUNWLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUVoRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNyQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2xCO0lBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDckMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNsQjtJQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3JDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDckM7aUJBQU07Z0JBQ0wsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDVixJQUFJLENBQUMsR0FBRyxDQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVztvQkFDN0IsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZO29CQUM5QixNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxlQUFlO3FCQUNyQyxHQUFHLENBQUMsQ0FBQzthQUNUO1NBQ0Y7S0FDRjtJQUVELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDMUMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxPQUFlLEVBQ2YsYUFBcUI7SUFFckIsT0FBTyxDQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUM1QixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4aXN0c1N5bmMsIG1rZGlyU3luYyB9IGZyb20gXCJmc1wiO1xyXG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tIFwib3NcIjtcclxuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwidXJsXCI7XHJcbmltcG9ydCB7IEZvdW5kZXIsIE11bmljaXBhbGl0eVR5cGUgfSBmcm9tIFwiLi4vZGIvdHlwZXNcIjtcclxuXHJcbmNvbnN0IGFwcE5hbWUgPSBcInRleHQtdG8tbWFwXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5EYXRhU3luY09wdGlvbnMge1xyXG4gIHRtcERpcjogc3RyaW5nO1xyXG4gIGRhdGFEaXI6IHN0cmluZztcclxuICBkYkZpbGVQYXRoOiBzdHJpbmc7XHJcbiAgZGJJbml0RmlsZVBhdGg6IHN0cmluZztcclxuICBhZGRyZXNzUG9pbnRzQXRvbVVybDogc3RyaW5nO1xyXG4gIGFkZHJlc3NQb2ludHNaaXBGaWxlTmFtZTogc3RyaW5nO1xyXG4gIGFkZHJlc3NQb2ludHNDc3ZGb2xkZXJOYW1lOiBzdHJpbmc7XHJcbiAgc3RyZWV0c0F0b21Vcmw6IHN0cmluZztcclxuICBzdHJlZXRaaXBGb2xkZXJOYW1lOiBzdHJpbmc7XHJcbiAgc3RyZWV0RGJmRmlsZU5hbWU6IHN0cmluZztcclxuICBwb2x5Z29uU2hwRmlsZU5hbWU6IHN0cmluZztcclxuICBkaXN0cmljdFBvbHlnb25TaHBGaWxlTmFtZTogc3RyaW5nO1xyXG4gIGRpc3RyaWN0UG9seWdvbkRiZkZpbGVOYW1lOiBzdHJpbmc7XHJcbiAgc2Nob29sc1htbFVybDogc3RyaW5nO1xyXG4gIHNjaG9vbHNYbWxGaWxlTmFtZTogc3RyaW5nO1xyXG4gIHJlZ2lvbnNDc3ZVcmw6IHN0cmluZztcclxuICByZWdpb25zU2NoZW1hVXJsOiBzdHJpbmc7XHJcbiAgcmVnaW9uc0NzdkZpbGVOYW1lOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIE9wZW5EYXRhU3luY09wdGlvbnNQYXJ0aWFsID0gUGFydGlhbDxPcGVuRGF0YVN5bmNPcHRpb25zPjtcclxuXHJcbmV4cG9ydCBjb25zdCBnZXRBcHBEYXRhRGlyUGF0aCA9ICgpOiBzdHJpbmcgPT5cclxuICBqb2luKFxyXG4gICAgcHJvY2Vzcy5lbnYuQVBQREFUQSB8fFxyXG4gICAgICAocHJvY2Vzcy5wbGF0Zm9ybSA9PSBcImRhcndpblwiXHJcbiAgICAgICAgPyBwcm9jZXNzLmVudi5IT01FICsgXCIvTGlicmFyeS9QcmVmZXJlbmNlc1wiXHJcbiAgICAgICAgOiBwcm9jZXNzLmVudi5IT01FICsgXCIvLmxvY2FsL3NoYXJlXCIpLFxyXG4gICAgYXBwTmFtZVxyXG4gICk7XHJcblxyXG5leHBvcnQgY29uc3QgcHJlcGFyZU9wdGlvbnMgPSAoXHJcbiAgb3B0aW9uczogT3BlbkRhdGFTeW5jT3B0aW9uc1BhcnRpYWxcclxuKTogT3BlbkRhdGFTeW5jT3B0aW9ucyA9PiB7XHJcbiAgY29uc3QgZGF0YURpciA9IG9wdGlvbnMuZGF0YURpciA/PyBnZXRBcHBEYXRhRGlyUGF0aCgpO1xyXG4gIGlmICghZXhpc3RzU3luYyhkYXRhRGlyKSkge1xyXG4gICAgbWtkaXJTeW5jKGRhdGFEaXIpO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgdG1wQXBwRGlyID0gam9pbih0bXBkaXIoKSwgYXBwTmFtZSk7XHJcbiAgaWYgKCFleGlzdHNTeW5jKHRtcEFwcERpcikpIHtcclxuICAgIG1rZGlyU3luYyh0bXBBcHBEaXIpO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgX19maWxlbmFtZSA9IGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKTtcclxuICBjb25zdCBfX2Rpcm5hbWUgPSBkaXJuYW1lKF9fZmlsZW5hbWUpO1xyXG5cclxuICBjb25zdCBkZWZhdWx0czogT3BlbkRhdGFTeW5jT3B0aW9ucyA9IHtcclxuICAgIHRtcERpcjogdG1wQXBwRGlyLFxyXG4gICAgZGF0YURpcjogZGF0YURpcixcclxuICAgIGRiRmlsZVBhdGg6IGpvaW4oZGF0YURpciwgXCJhZGRyZXNzX3BvaW50cy5kYlwiKSxcclxuICAgIGRiSW5pdEZpbGVQYXRoOiBqb2luKF9fZGlybmFtZSwgXCIuLlwiLCBcImFkZHJlc3NfcG9pbnRzX2luaXQuZGJcIiksXHJcbiAgICBhZGRyZXNzUG9pbnRzQXRvbVVybDpcclxuICAgICAgXCJodHRwczovL2F0b20uY3V6ay5jei9SVUlBTi1DU1YtQURSLVNUL1JVSUFOLUNTVi1BRFItU1QueG1sXCIsXHJcbiAgICBhZGRyZXNzUG9pbnRzWmlwRmlsZU5hbWU6IFwicnVpYW5fY3N2LnppcFwiLFxyXG4gICAgYWRkcmVzc1BvaW50c0NzdkZvbGRlck5hbWU6IFwiQ1NWXCIsXHJcbiAgICBzdHJlZXRzQXRvbVVybDogXCJodHRwczovL2F0b20uY3V6ay5jei9SVUlBTi1PQkNFLVNIUC9SVUlBTi1PQkNFLVNIUC54bWxcIixcclxuICAgIHN0cmVldFppcEZvbGRlck5hbWU6IFwic3RyZWV0c1wiLFxyXG4gICAgc3RyZWV0RGJmRmlsZU5hbWU6IFwiVUxfTC5kYmZcIixcclxuICAgIHBvbHlnb25TaHBGaWxlTmFtZTogXCJPQkVDX1Auc2hwXCIsXHJcbiAgICBkaXN0cmljdFBvbHlnb25TaHBGaWxlTmFtZTogXCJNT01DX1Auc2hwXCIsXHJcbiAgICBkaXN0cmljdFBvbHlnb25EYmZGaWxlTmFtZTogXCJNT01DX1AuZGJmXCIsXHJcbiAgICBzY2hvb2xzWG1sVXJsOiBcImh0dHBzOi8vcmVqc3RyaWt5Lm1zbXQuY3ovb3BlbmRhdGEvdnJlamNlbGsueG1sXCIsXHJcbiAgICBzY2hvb2xzWG1sRmlsZU5hbWU6IFwic2Nob29sLXJlZ2lzdGVyLnhtbFwiLFxyXG4gICAgcmVnaW9uc0NzdlVybDpcclxuICAgICAgXCJodHRwczovL3d3dy5jenNvLmN6L2RvY3VtZW50cy8xMDE4MC8yMzIwODY3NC9zdHJ1a3R1cmFfdXplbWlfY3IuY3N2XCIsXHJcbiAgICByZWdpb25zU2NoZW1hVXJsOlxyXG4gICAgICBcImh0dHBzOi8vd3d3LmN6c28uY3ovZG9jdW1lbnRzLzEwMTgwLzIzMjA4Njc0L3N0cnVrdHVyYV91emVtaV9jci1tZXRhZGF0YS5qc29uXCIsXHJcbiAgICByZWdpb25zQ3N2RmlsZU5hbWU6IFwic3RydWt0dXJhX3V6ZW1pX2NyLmNzdlwiLFxyXG4gIH07XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICAuLi5kZWZhdWx0cyxcclxuICAgIC4uLm9wdGlvbnMsXHJcbiAgfTtcclxufTtcclxuXHJcbmNvbnN0IGNpdHlQYXR0ZXJucyA9IFtcclxuICAvXltzU110YXR1dMOhcm7DrSBtxJtzdG8gKyguKikkLyxcclxuICAvXltvT11iZWMgKyguKikkLyxcclxuICAvXlttTV3Em3N0byArKC4qKSQvLFxyXG4gIC9eW21NXcSbc3R5cyArKC4qKSQvLFxyXG5dO1xyXG5cclxuY29uc3QgZGlzdHJpY3RQYXR0ZXJucyA9IFtcclxuICAvXlttTV3Em3N0c2vDoSDEjcOhc3QgKyguKikkLyxcclxuICAvXlttTV3Em3N0c2vDvSBvYnZvZCArKC4qKSQvLFxyXG4gIC9eW3NTXXRhdHV0w6FybsOtIG3Em3N0byArLiosIFttTV3Em3N0c2vDoSDEjcOhc3QgKyguKikkLyxcclxuICAvXltzU110YXR1dMOhcm7DrSBtxJtzdG8gKy4qLCBbbU1dxJtzdHNrw70gb2J2b2QgKyguKikkLyxcclxuXTtcclxuXHJcbmV4cG9ydCBjb25zdCBleHRyYWN0TXVuaWNpcGFsaXR5TmFtZSA9IChmb3VuZGVyOiBGb3VuZGVyKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBwYXR0ZXJucyA9XHJcbiAgICBmb3VuZGVyLm11bmljaXBhbGl0eVR5cGUgPT09IE11bmljaXBhbGl0eVR5cGUuQ2l0eVxyXG4gICAgICA/IGNpdHlQYXR0ZXJuc1xyXG4gICAgICA6IGRpc3RyaWN0UGF0dGVybnM7XHJcbiAgY29uc3QgY29ycmVjdFBhdHRlcm4gPSBwYXR0ZXJucy5maWx0ZXIoKHBhdHRlcm4pID0+XHJcbiAgICBwYXR0ZXJuLnRlc3QoZm91bmRlci5uYW1lKVxyXG4gICk7XHJcbiAgaWYgKGNvcnJlY3RQYXR0ZXJuLmxlbmd0aCA+IDApIHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IGNvcnJlY3RQYXR0ZXJuWzBdLmV4ZWMoZm91bmRlci5uYW1lKTtcclxuICAgIGlmICh0eXBlb2YgcmVzdWx0WzFdICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgIHJldHVybiByZXN1bHRbMV1cclxuICAgICAgICAucmVwbGFjZShcIiAtIFwiLCBcIi1cIilcclxuICAgICAgICAucmVwbGFjZSgvXFxzezIsfS9nLCBcIiBcIilcclxuICAgICAgICAudHJpbSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZvdW5kZXIubmFtZTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBzYW5pdGl6ZU11bmljaXBhbGl0eU5hbWUgPSAobmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICByZXR1cm4gbmFtZVxyXG4gICAgLnJlcGxhY2UoXCIgLSBcIiwgXCItXCIpXHJcbiAgICAucmVwbGFjZSgvXFxzezIsfS9nLCBcIiBcIilcclxuICAgIC50cmltKCk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZmluZENsb3Nlc3RTdHJpbmcgPSAoXHJcbiAgc3RyOiBzdHJpbmcsXHJcbiAgYXJyOiBzdHJpbmdbXSxcclxuICBtYXhEaXN0YW5jZT86IG51bWJlclxyXG4pOiBzdHJpbmcgfCBudWxsID0+IHtcclxuICBsZXQgY2xvc2VzdFN0ciA9IFwiXCI7XHJcbiAgbGV0IGNsb3Nlc3REaXN0YW5jZSA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xyXG5cclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xyXG4gICAgY29uc3QgY3VycmVudFN0ciA9IGFycltpXTtcclxuICAgIGNvbnN0IGRpc3RhbmNlID0gaW50ZXJwdW5jdGlvbkRpc3RhbmNlKHN0ciwgY3VycmVudFN0cik7XHJcblxyXG4gICAgaWYgKGRpc3RhbmNlIDwgY2xvc2VzdERpc3RhbmNlKSB7XHJcbiAgICAgIGNsb3Nlc3RTdHIgPSBjdXJyZW50U3RyO1xyXG4gICAgICBjbG9zZXN0RGlzdGFuY2UgPSBkaXN0YW5jZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBleGFjdCBtYXRjaCBmb3VuZCwgZXhpdCBsb29wXHJcbiAgICBpZiAoY2xvc2VzdERpc3RhbmNlID09PSAwKSB7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKG1heERpc3RhbmNlICE9PSB1bmRlZmluZWQgJiYgY2xvc2VzdERpc3RhbmNlID4gbWF4RGlzdGFuY2UpIHtcclxuICAgIHJldHVybiBcIlwiO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGNsb3Nlc3RTdHI7XHJcbn07XHJcblxyXG5jb25zdCBpbnRlcnB1bmN0aW9uRGlzdGFuY2UgPSAoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBudW1iZXIgPT4ge1xyXG4gIGxldCBkaXN0YW5jZSA9IGxldmVuc2h0ZWluRGlzdGFuY2Uoc3RyMSwgc3RyMik7XHJcblxyXG4gIGNvbnN0IGludGVycHVuY3Rpb25NaXN0YWtlcyA9IHtcclxuICAgIGE6IFtcIsOhXCJdLFxyXG4gICAgw6E6IFtcImFcIl0sXHJcbiAgICBlOiBbXCLDqVwiLCBcIsSbXCJdLFxyXG4gICAgw6k6IFtcImVcIiwgXCLEm1wiXSxcclxuICAgIMSbOiBbXCJlXCIsIFwiw6lcIl0sXHJcbiAgICBpOiBbXCLDrVwiXSxcclxuICAgIMOtOiBbXCJpXCJdLFxyXG4gICAgeTogW1wiw71cIl0sXHJcbiAgICDDvTogW1wieVwiXSxcclxuICAgIG86IFtcIsOzXCJdLFxyXG4gICAgw7M6IFtcIm9cIl0sXHJcbiAgICB1OiBbXCLDulwiLCBcIsWvXCJdLFxyXG4gICAgxa86IFtcInVcIiwgXCLDulwiXSxcclxuICAgIMO6OiBbXCJ1XCIsIFwixa9cIl0sXHJcbiAgICBjOiBbXCLEjVwiXSxcclxuICAgIMSNOiBbXCJjXCJdLFxyXG4gICAgZDogW1wixI9cIl0sXHJcbiAgICDEjzogW1wiZFwiXSxcclxuICAgIG46IFtcIsWIXCJdLFxyXG4gICAgxYg6IFtcIm5cIl0sXHJcbiAgICByOiBbXCLFmVwiXSxcclxuICAgIMWZOiBbXCJyXCJdLFxyXG4gICAgczogW1wixaFcIl0sXHJcbiAgICDFoTogW1wic1wiXSxcclxuICAgIHQ6IFtcIsWlXCJdLFxyXG4gICAgxaU6IFtcInRcIl0sXHJcbiAgICB6OiBbXCLFvlwiXSxcclxuICAgIMW+OiBbXCJ6XCJdLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0IHN0cjFDaGFycyA9IHN0cjEuc3BsaXQoXCJcIik7XHJcbiAgY29uc3Qgc3RyMkNoYXJzID0gc3RyMi5zcGxpdChcIlwiKTtcclxuXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIxQ2hhcnMubGVuZ3RoOyBpKyspIHtcclxuICAgIGNvbnN0IGNoYXIxID0gc3RyMUNoYXJzW2ldO1xyXG4gICAgY29uc3QgY2hhcjIgPSBzdHIyQ2hhcnNbaV07XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBpbnRlcnB1bmN0aW9uTWlzdGFrZXNbY2hhcjFdICYmXHJcbiAgICAgIGludGVycHVuY3Rpb25NaXN0YWtlc1tjaGFyMV0uaW5jbHVkZXMoY2hhcjIpXHJcbiAgICApIHtcclxuICAgICAgLy8gU3VidHJhY3QgYSBwZW5hbHR5IGZyb20gdGhlIGRpc3RhbmNlIGZvciBpbnRlcnB1bmN0aW9uIG1pc3Rha2VzXHJcbiAgICAgIGRpc3RhbmNlIC09IDAuNTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBkaXN0YW5jZTtcclxufTtcclxuXHJcbmNvbnN0IGxldmVuc2h0ZWluRGlzdGFuY2UgPSAoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBudW1iZXIgPT4ge1xyXG4gIGNvbnN0IG1hdHJpeDogbnVtYmVyW11bXSA9IEFycmF5KHN0cjIubGVuZ3RoICsgMSlcclxuICAgIC5maWxsKG51bGwpXHJcbiAgICAubWFwKCgpID0+IEFycmF5KHN0cjEubGVuZ3RoICsgMSkuZmlsbChudWxsKSk7XHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDw9IHN0cjEubGVuZ3RoOyBpKyspIHtcclxuICAgIG1hdHJpeFswXVtpXSA9IGk7XHJcbiAgfVxyXG5cclxuICBmb3IgKGxldCBqID0gMDsgaiA8PSBzdHIyLmxlbmd0aDsgaisrKSB7XHJcbiAgICBtYXRyaXhbal1bMF0gPSBqO1xyXG4gIH1cclxuXHJcbiAgZm9yIChsZXQgaiA9IDE7IGogPD0gc3RyMi5sZW5ndGg7IGorKykge1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gc3RyMS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoc3RyMVtpIC0gMV0gPT09IHN0cjJbaiAtIDFdKSB7XHJcbiAgICAgICAgbWF0cml4W2pdW2ldID0gbWF0cml4W2ogLSAxXVtpIC0gMV07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbWF0cml4W2pdW2ldID1cclxuICAgICAgICAgIE1hdGgubWluKFxyXG4gICAgICAgICAgICBtYXRyaXhbal1baSAtIDFdLCAvLyBkZWxldGlvblxyXG4gICAgICAgICAgICBtYXRyaXhbaiAtIDFdW2ldLCAvLyBpbnNlcnRpb25cclxuICAgICAgICAgICAgbWF0cml4W2ogLSAxXVtpIC0gMV0gLy8gc3Vic3RpdHV0aW9uXHJcbiAgICAgICAgICApICsgMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG1hdHJpeFtzdHIyLmxlbmd0aF1bc3RyMS5sZW5ndGhdO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJvdW5kVG9ORGVjaW1hbFBsYWNlcyhcclxuICB0b1JvdW5kOiBudW1iZXIsXHJcbiAgZGVjaW1hbFBsYWNlczogbnVtYmVyXHJcbik6IG51bWJlciB7XHJcbiAgcmV0dXJuIChcclxuICAgIE1hdGgucm91bmQodG9Sb3VuZCAqIE1hdGgucG93KDEwLCBkZWNpbWFsUGxhY2VzKSkgL1xyXG4gICAgTWF0aC5wb3coMTAsIGRlY2ltYWxQbGFjZXMpXHJcbiAgKTtcclxufVxyXG4iXX0=
|
|
176
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDNUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUNwQyxPQUFPLEVBQVcsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFeEQsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDO0FBeUI5QixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxHQUFXLEVBQUUsQ0FDNUMsSUFBSSxDQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTztJQUNqQixDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksUUFBUTtRQUMzQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsc0JBQXNCO1FBQzNDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxlQUFlLENBQUMsRUFDekMsT0FBTyxDQUNSLENBQUM7QUFFSixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FDNUIsT0FBbUMsRUFDZCxFQUFFO0lBQ3ZCLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksaUJBQWlCLEVBQUUsQ0FBQztJQUN2RCxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3hCLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUNwQjtJQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMs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Q0FBQyxHQUFHLENBQUM7UUFDUixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDUixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDUixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDUixDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDYixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDUixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDUixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDUixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDUixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDUixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDUixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDUixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDUixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDUixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDUixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDUixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDUixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDUixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7S0FDVCxDQUFDO0lBRUYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRWpDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQixNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFM0IsSUFDRSxxQkFBcUIsQ0FBQyxLQUFLLENBQUM7WUFDNUIscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUM1QztZQUNBLGtFQUFrRTtZQUNsRSxRQUFRLElBQUksR0FBRyxDQUFDO1NBQ2pCO0tBQ0Y7SUFFRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDLENBQUM7QUFFRixNQUFNLG1CQUFtQixHQUFHLENBQUMsSUFBWSxFQUFFLElBQVksRUFBVSxFQUFFO0lBQ2pFLE1BQU0sTUFBTSxHQUFlLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztTQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ1YsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRWhELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3JDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDbEI7SUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNyQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2xCO0lBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDckMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDckMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUNyQztpQkFBTTtnQkFDTCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNWLElBQUksQ0FBQyxHQUFHLENBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXO29CQUM3QixNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVk7b0JBQzlCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGVBQWU7cUJBQ3JDLEdBQUcsQ0FBQyxDQUFDO2FBQ1Q7U0FDRjtLQUNGO0lBRUQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxQyxDQUFDLENBQUM7QUFFRixNQUFNLFVBQVUscUJBQXFCLENBQ25DLE9BQWUsRUFDZixhQUFxQjtJQUVyQixPQUFPLENBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQzVCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jIH0gZnJvbSBcImZzXCI7XHJcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJvc1wiO1xyXG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcInBhdGhcIjtcclxuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gXCJ1cmxcIjtcclxuaW1wb3J0IHsgRm91bmRlciwgTXVuaWNpcGFsaXR5VHlwZSB9IGZyb20gXCIuLi9kYi90eXBlc1wiO1xyXG5cclxuY29uc3QgYXBwTmFtZSA9IFwidGV4dC10by1tYXBcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgT3BlbkRhdGFTeW5jT3B0aW9ucyB7XHJcbiAgdG1wRGlyOiBzdHJpbmc7XHJcbiAgZGF0YURpcjogc3RyaW5nO1xyXG4gIGRiRmlsZVBhdGg6IHN0cmluZztcclxuICBkYkluaXRGaWxlUGF0aDogc3RyaW5nO1xyXG4gIGFkZHJlc3NQb2ludHNBdG9tVXJsOiBzdHJpbmc7XHJcbiAgYWRkcmVzc1BvaW50c1ppcEZpbGVOYW1lOiBzdHJpbmc7XHJcbiAgYWRkcmVzc1BvaW50c0NzdkZvbGRlck5hbWU6IHN0cmluZztcclxuICBzdHJlZXRzQXRvbVVybDogc3RyaW5nO1xyXG4gIHN0cmVldFppcEZvbGRlck5hbWU6IHN0cmluZztcclxuICBzdHJlZXREYmZGaWxlTmFtZTogc3RyaW5nO1xyXG4gIHBvbHlnb25TaHBGaWxlTmFtZTogc3RyaW5nO1xyXG4gIGRpc3RyaWN0UG9seWdvblNocEZpbGVOYW1lOiBzdHJpbmc7XHJcbiAgZGlzdHJpY3RQb2x5Z29uRGJmRmlsZU5hbWU6IHN0cmluZztcclxuICBzY2hvb2xzSnNvbmxkVXJsOiBzdHJpbmc7XHJcbiAgc2Nob29sc0pzb25sZEZpbGVOYW1lOiBzdHJpbmc7XHJcbiAgcmVnaW9uc0NzdlVybDogc3RyaW5nO1xyXG4gIHJlZ2lvbnNTY2hlbWFVcmw6IHN0cmluZztcclxuICByZWdpb25zQ3N2RmlsZU5hbWU6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgT3BlbkRhdGFTeW5jT3B0aW9uc1BhcnRpYWwgPSBQYXJ0aWFsPE9wZW5EYXRhU3luY09wdGlvbnM+O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldEFwcERhdGFEaXJQYXRoID0gKCk6IHN0cmluZyA9PlxyXG4gIGpvaW4oXHJcbiAgICBwcm9jZXNzLmVudi5BUFBEQVRBIHx8XHJcbiAgICAgIChwcm9jZXNzLnBsYXRmb3JtID09IFwiZGFyd2luXCJcclxuICAgICAgICA/IHByb2Nlc3MuZW52LkhPTUUgKyBcIi9MaWJyYXJ5L1ByZWZlcmVuY2VzXCJcclxuICAgICAgICA6IHByb2Nlc3MuZW52LkhPTUUgKyBcIi8ubG9jYWwvc2hhcmVcIiksXHJcbiAgICBhcHBOYW1lXHJcbiAgKTtcclxuXHJcbmV4cG9ydCBjb25zdCBwcmVwYXJlT3B0aW9ucyA9IChcclxuICBvcHRpb25zOiBPcGVuRGF0YVN5bmNPcHRpb25zUGFydGlhbFxyXG4pOiBPcGVuRGF0YVN5bmNPcHRpb25zID0+IHtcclxuICBjb25zdCBkYXRhRGlyID0gb3B0aW9ucy5kYXRhRGlyID8/IGdldEFwcERhdGFEaXJQYXRoKCk7XHJcbiAgaWYgKCFleGlzdHNTeW5jKGRhdGFEaXIpKSB7XHJcbiAgICBta2RpclN5bmMoZGF0YURpcik7XHJcbiAgfVxyXG5cclxuICBjb25zdCB0bXBBcHBEaXIgPSBqb2luKHRtcGRpcigpLCBhcHBOYW1lKTtcclxuICBpZiAoIWV4aXN0c1N5bmModG1wQXBwRGlyKSkge1xyXG4gICAgbWtkaXJTeW5jKHRtcEFwcERpcik7XHJcbiAgfVxyXG5cclxuICBjb25zdCBfX2ZpbGVuYW1lID0gZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpO1xyXG4gIGNvbnN0IF9fZGlybmFtZSA9IGRpcm5hbWUoX19maWxlbmFtZSk7XHJcblxyXG4gIGNvbnN0IGRlZmF1bHRzOiBPcGVuRGF0YVN5bmNPcHRpb25zID0ge1xyXG4gICAgdG1wRGlyOiB0bXBBcHBEaXIsXHJcbiAgICBkYXRhRGlyOiBkYXRhRGlyLFxyXG4gICAgZGJGaWxlUGF0aDogam9pbihkYXRhRGlyLCBcImFkZHJlc3NfcG9pbnRzLmRiXCIpLFxyXG4gICAgZGJJbml0RmlsZVBhdGg6IGpvaW4oX19kaXJuYW1lLCBcIi4uXCIsIFwiYWRkcmVzc19wb2ludHNfaW5pdC5kYlwiKSxcclxuICAgIGFkZHJlc3NQb2ludHNBdG9tVXJsOlxyXG4gICAgICBcImh0dHBzOi8vYXRvbS5jdXprLmN6L1JVSUFOLUNTVi1BRFItU1QvUlVJQU4tQ1NWLUFEUi1TVC54bWxcIixcclxuICAgIGFkZHJlc3NQb2ludHNaaXBGaWxlTmFtZTogXCJydWlhbl9jc3YuemlwXCIsXHJcbiAgICBhZGRyZXNzUG9pbnRzQ3N2Rm9sZGVyTmFtZTogXCJDU1ZcIixcclxuICAgIHN0cmVldHNBdG9tVXJsOiBcImh0dHBzOi8vYXRvbS5jdXprLmN6L1JVSUFOLU9CQ0UtU0hQL1JVSUFOLU9CQ0UtU0hQLnhtbFwiLFxyXG4gICAgc3RyZWV0WmlwRm9sZGVyTmFtZTogXCJzdHJlZXRzXCIsXHJcbiAgICBzdHJlZXREYmZGaWxlTmFtZTogXCJVTF9MLmRiZlwiLFxyXG4gICAgcG9seWdvblNocEZpbGVOYW1lOiBcIk9CRUNfUC5zaHBcIixcclxuICAgIGRpc3RyaWN0UG9seWdvblNocEZpbGVOYW1lOiBcIk1PTUNfUC5zaHBcIixcclxuICAgIGRpc3RyaWN0UG9seWdvbkRiZkZpbGVOYW1lOiBcIk1PTUNfUC5kYmZcIixcclxuICAgIHNjaG9vbHNKc29ubGRVcmw6IFwiaHR0cHM6Ly9sa29kLWZ0cC5tc210Lmdvdi5jei8wMDAyMjk4NS84OGE3YzEyYi02MDg0LTRlNDctOGI1MC00NjA5N2M2ZTY4M2YvUlNTWi1jZWxhLUNSLmpzb25sZFwiLFxyXG4gICAgc2Nob29sc0pzb25sZEZpbGVOYW1lOiBcInNjaG9vbC1yZWdpc3Rlci5qc29ubGRcIixcclxuICAgIHJlZ2lvbnNDc3ZVcmw6XHJcbiAgICAgIFwiaHR0cHM6Ly93d3cuY3pzby5jei9kb2N1bWVudHMvMTAxODAvMjMyMDg2NzQvc3RydWt0dXJhX3V6ZW1pX2NyLmNzdlwiLFxyXG4gICAgcmVnaW9uc1NjaGVtYVVybDpcclxuICAgICAgXCJodHRwczovL3d3dy5jenNvLmN6L2RvY3VtZW50cy8xMDE4MC8yMzIwODY3NC9zdHJ1a3R1cmFfdXplbWlfY3ItbWV0YWRhdGEuanNvblwiLFxyXG4gICAgcmVnaW9uc0NzdkZpbGVOYW1lOiBcInN0cnVrdHVyYV91emVtaV9jci5jc3ZcIixcclxuICB9O1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgLi4uZGVmYXVsdHMsXHJcbiAgICAuLi5vcHRpb25zLFxyXG4gIH07XHJcbn07XHJcblxyXG5jb25zdCBjaXR5UGF0dGVybnMgPSBbXHJcbiAgL15bc1NddGF0dXTDoXJuw60gbcSbc3RvICsoLiopJC8sXHJcbiAgL15bb09dYmVjICsoLiopJC8sXHJcbiAgL15bbU1dxJtzdG8gKyguKikkLyxcclxuICAvXlttTV3Em3N0eXMgKyguKikkLyxcclxuXTtcclxuXHJcbmNvbnN0IGRpc3RyaWN0UGF0dGVybnMgPSBbXHJcbiAgL15bbU1dxJtzdHNrw6EgxI3DoXN0ICsoLiopJC8sXHJcbiAgL15bbU1dxJtzdHNrw70gb2J2b2QgKyguKikkLyxcclxuICAvXltzU110YXR1dMOhcm7DrSBtxJtzdG8gKy4qLCBbbU1dxJtzdHNrw6EgxI3DoXN0ICsoLiopJC8sXHJcbiAgL15bc1NddGF0dXTDoXJuw60gbcSbc3RvICsuKiwgW21NXcSbc3Rza8O9IG9idm9kICsoLiopJC8sXHJcbl07XHJcblxyXG5leHBvcnQgY29uc3QgZXh0cmFjdE11bmljaXBhbGl0eU5hbWUgPSAoZm91bmRlcjogRm91bmRlcik6IHN0cmluZyA9PiB7XHJcbiAgY29uc3QgcGF0dGVybnMgPVxyXG4gICAgZm91bmRlci5tdW5pY2lwYWxpdHlUeXBlID09PSBNdW5pY2lwYWxpdHlUeXBlLkNpdHlcclxuICAgICAgPyBjaXR5UGF0dGVybnNcclxuICAgICAgOiBkaXN0cmljdFBhdHRlcm5zO1xyXG4gIGNvbnN0IGNvcnJlY3RQYXR0ZXJuID0gcGF0dGVybnMuZmlsdGVyKChwYXR0ZXJuKSA9PlxyXG4gICAgcGF0dGVybi50ZXN0KGZvdW5kZXIubmFtZSlcclxuICApO1xyXG4gIGlmIChjb3JyZWN0UGF0dGVybi5sZW5ndGggPiAwKSB7XHJcbiAgICBjb25zdCByZXN1bHQgPSBjb3JyZWN0UGF0dGVyblswXS5leGVjKGZvdW5kZXIubmFtZSk7XHJcbiAgICBpZiAodHlwZW9mIHJlc3VsdFsxXSAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICByZXR1cm4gcmVzdWx0WzFdXHJcbiAgICAgICAgLnJlcGxhY2UoXCIgLSBcIiwgXCItXCIpXHJcbiAgICAgICAgLnJlcGxhY2UoL1xcc3syLH0vZywgXCIgXCIpXHJcbiAgICAgICAgLnRyaW0oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBmb3VuZGVyLm5hbWU7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3Qgc2FuaXRpemVNdW5pY2lwYWxpdHlOYW1lID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgcmV0dXJuIG5hbWVcclxuICAgIC5yZXBsYWNlKFwiIC0gXCIsIFwiLVwiKVxyXG4gICAgLnJlcGxhY2UoL1xcc3syLH0vZywgXCIgXCIpXHJcbiAgICAudHJpbSgpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGZpbmRDbG9zZXN0U3RyaW5nID0gKFxyXG4gIHN0cjogc3RyaW5nLFxyXG4gIGFycjogc3RyaW5nW10sXHJcbiAgbWF4RGlzdGFuY2U/OiBudW1iZXJcclxuKTogc3RyaW5nIHwgbnVsbCA9PiB7XHJcbiAgbGV0IGNsb3Nlc3RTdHIgPSBcIlwiO1xyXG4gIGxldCBjbG9zZXN0RGlzdGFuY2UgPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcclxuXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcclxuICAgIGNvbnN0IGN1cnJlbnRTdHIgPSBhcnJbaV07XHJcbiAgICBjb25zdCBkaXN0YW5jZSA9IGludGVycHVuY3Rpb25EaXN0YW5jZShzdHIsIGN1cnJlbnRTdHIpO1xyXG5cclxuICAgIGlmIChkaXN0YW5jZSA8IGNsb3Nlc3REaXN0YW5jZSkge1xyXG4gICAgICBjbG9zZXN0U3RyID0gY3VycmVudFN0cjtcclxuICAgICAgY2xvc2VzdERpc3RhbmNlID0gZGlzdGFuY2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZXhhY3QgbWF0Y2ggZm91bmQsIGV4aXQgbG9vcFxyXG4gICAgaWYgKGNsb3Nlc3REaXN0YW5jZSA9PT0gMCkge1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmIChtYXhEaXN0YW5jZSAhPT0gdW5kZWZpbmVkICYmIGNsb3Nlc3REaXN0YW5jZSA+IG1heERpc3RhbmNlKSB7XHJcbiAgICByZXR1cm4gXCJcIjtcclxuICB9XHJcblxyXG4gIHJldHVybiBjbG9zZXN0U3RyO1xyXG59O1xyXG5cclxuY29uc3QgaW50ZXJwdW5jdGlvbkRpc3RhbmNlID0gKHN0cjE6IHN0cmluZywgc3RyMjogc3RyaW5nKTogbnVtYmVyID0+IHtcclxuICBsZXQgZGlzdGFuY2UgPSBsZXZlbnNodGVpbkRpc3RhbmNlKHN0cjEsIHN0cjIpO1xyXG5cclxuICBjb25zdCBpbnRlcnB1bmN0aW9uTWlzdGFrZXMgPSB7XHJcbiAgICBhOiBbXCLDoVwiXSxcclxuICAgIMOhOiBbXCJhXCJdLFxyXG4gICAgZTogW1wiw6lcIiwgXCLEm1wiXSxcclxuICAgIMOpOiBbXCJlXCIsIFwixJtcIl0sXHJcbiAgICDEmzogW1wiZVwiLCBcIsOpXCJdLFxyXG4gICAgaTogW1wiw61cIl0sXHJcbiAgICDDrTogW1wiaVwiXSxcclxuICAgIHk6IFtcIsO9XCJdLFxyXG4gICAgw706IFtcInlcIl0sXHJcbiAgICBvOiBbXCLDs1wiXSxcclxuICAgIMOzOiBbXCJvXCJdLFxyXG4gICAgdTogW1wiw7pcIiwgXCLFr1wiXSxcclxuICAgIMWvOiBbXCJ1XCIsIFwiw7pcIl0sXHJcbiAgICDDujogW1widVwiLCBcIsWvXCJdLFxyXG4gICAgYzogW1wixI1cIl0sXHJcbiAgICDEjTogW1wiY1wiXSxcclxuICAgIGQ6IFtcIsSPXCJdLFxyXG4gICAgxI86IFtcImRcIl0sXHJcbiAgICBuOiBbXCLFiFwiXSxcclxuICAgIMWIOiBbXCJuXCJdLFxyXG4gICAgcjogW1wixZlcIl0sXHJcbiAgICDFmTogW1wiclwiXSxcclxuICAgIHM6IFtcIsWhXCJdLFxyXG4gICAgxaE6IFtcInNcIl0sXHJcbiAgICB0OiBbXCLFpVwiXSxcclxuICAgIMWlOiBbXCJ0XCJdLFxyXG4gICAgejogW1wixb5cIl0sXHJcbiAgICDFvjogW1wielwiXSxcclxuICB9O1xyXG5cclxuICBjb25zdCBzdHIxQ2hhcnMgPSBzdHIxLnNwbGl0KFwiXCIpO1xyXG4gIGNvbnN0IHN0cjJDaGFycyA9IHN0cjIuc3BsaXQoXCJcIik7XHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyMUNoYXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBjb25zdCBjaGFyMSA9IHN0cjFDaGFyc1tpXTtcclxuICAgIGNvbnN0IGNoYXIyID0gc3RyMkNoYXJzW2ldO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgaW50ZXJwdW5jdGlvbk1pc3Rha2VzW2NoYXIxXSAmJlxyXG4gICAgICBpbnRlcnB1bmN0aW9uTWlzdGFrZXNbY2hhcjFdLmluY2x1ZGVzKGNoYXIyKVxyXG4gICAgKSB7XHJcbiAgICAgIC8vIFN1YnRyYWN0IGEgcGVuYWx0eSBmcm9tIHRoZSBkaXN0YW5jZSBmb3IgaW50ZXJwdW5jdGlvbiBtaXN0YWtlc1xyXG4gICAgICBkaXN0YW5jZSAtPSAwLjU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZGlzdGFuY2U7XHJcbn07XHJcblxyXG5jb25zdCBsZXZlbnNodGVpbkRpc3RhbmNlID0gKHN0cjE6IHN0cmluZywgc3RyMjogc3RyaW5nKTogbnVtYmVyID0+IHtcclxuICBjb25zdCBtYXRyaXg6IG51bWJlcltdW10gPSBBcnJheShzdHIyLmxlbmd0aCArIDEpXHJcbiAgICAuZmlsbChudWxsKVxyXG4gICAgLm1hcCgoKSA9PiBBcnJheShzdHIxLmxlbmd0aCArIDEpLmZpbGwobnVsbCkpO1xyXG5cclxuICBmb3IgKGxldCBpID0gMDsgaSA8PSBzdHIxLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBtYXRyaXhbMF1baV0gPSBpO1xyXG4gIH1cclxuXHJcbiAgZm9yIChsZXQgaiA9IDA7IGogPD0gc3RyMi5sZW5ndGg7IGorKykge1xyXG4gICAgbWF0cml4W2pdWzBdID0gajtcclxuICB9XHJcblxyXG4gIGZvciAobGV0IGogPSAxOyBqIDw9IHN0cjIubGVuZ3RoOyBqKyspIHtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHN0cjEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHN0cjFbaSAtIDFdID09PSBzdHIyW2ogLSAxXSkge1xyXG4gICAgICAgIG1hdHJpeFtqXVtpXSA9IG1hdHJpeFtqIC0gMV1baSAtIDFdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG1hdHJpeFtqXVtpXSA9XHJcbiAgICAgICAgICBNYXRoLm1pbihcclxuICAgICAgICAgICAgbWF0cml4W2pdW2kgLSAxXSwgLy8gZGVsZXRpb25cclxuICAgICAgICAgICAgbWF0cml4W2ogLSAxXVtpXSwgLy8gaW5zZXJ0aW9uXHJcbiAgICAgICAgICAgIG1hdHJpeFtqIC0gMV1baSAtIDFdIC8vIHN1YnN0aXR1dGlvblxyXG4gICAgICAgICAgKSArIDE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBtYXRyaXhbc3RyMi5sZW5ndGhdW3N0cjEubGVuZ3RoXTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByb3VuZFRvTkRlY2ltYWxQbGFjZXMoXHJcbiAgdG9Sb3VuZDogbnVtYmVyLFxyXG4gIGRlY2ltYWxQbGFjZXM6IG51bWJlclxyXG4pOiBudW1iZXIge1xyXG4gIHJldHVybiAoXHJcbiAgICBNYXRoLnJvdW5kKHRvUm91bmQgKiBNYXRoLnBvdygxMCwgZGVjaW1hbFBsYWNlcykpIC9cclxuICAgIE1hdGgucG93KDEwLCBkZWNpbWFsUGxhY2VzKVxyXG4gICk7XHJcbn1cclxuIl19
|
package/package.json
CHANGED
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
"@turf/truncate": "^6.5.0",
|
|
12
12
|
"@turf/union": "^7.0.0-alpha.113",
|
|
13
13
|
"adm-zip": "^0.5.9",
|
|
14
|
-
"better-sqlite3": "^
|
|
15
|
-
"chevrotain": "^
|
|
14
|
+
"better-sqlite3": "^11.0.0",
|
|
15
|
+
"chevrotain": "^12.0.0",
|
|
16
16
|
"csv-parse": "^5.3.3",
|
|
17
17
|
"czech-address": "^1.0.1",
|
|
18
18
|
"d3-delaunay": "^6.0.4",
|
|
@@ -29,19 +29,20 @@
|
|
|
29
29
|
"node-fetch": "^3.3.0",
|
|
30
30
|
"parsedbf": "^1.1.1",
|
|
31
31
|
"pg": "^8.11.1",
|
|
32
|
-
"sax": "^1.2.4",
|
|
33
32
|
"shp-to-geojson": "^1.0.0",
|
|
33
|
+
"stream-json": "^1.8.0",
|
|
34
34
|
"typescript": "^4.9.4"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@chevrotain/types": "^10.5.0",
|
|
38
38
|
"@jest/globals": "^29.5.0",
|
|
39
39
|
"@types/adm-zip": "^0.5.0",
|
|
40
|
-
"@types/better-sqlite3": "^7.6.
|
|
40
|
+
"@types/better-sqlite3": "^7.6.8",
|
|
41
41
|
"@types/d3-delaunay": "^6.0.4",
|
|
42
42
|
"@types/feedparser": "^2.2.5",
|
|
43
43
|
"@types/lodash": "^4.14.196",
|
|
44
44
|
"@types/node": "^18.11.17",
|
|
45
|
+
"@types/stream-json": "^1.7.7",
|
|
45
46
|
"copyfiles": "^2.4.1",
|
|
46
47
|
"jest": "^29.5.0",
|
|
47
48
|
"npm-run-all": "^1.7.0",
|
|
@@ -57,6 +58,7 @@
|
|
|
57
58
|
"polygons": "tsx src/bin/polygons.ts",
|
|
58
59
|
"schools": "tsx src/bin/schools.ts",
|
|
59
60
|
"streets": "tsx src/bin/streets.ts",
|
|
61
|
+
"streets:no-cache": "tsx src/bin/streets.ts --no-cache",
|
|
60
62
|
"diagrams": "tsx src/bin/generate-syntax-diagrams.ts",
|
|
61
63
|
"clear-all": "tsx src/bin/clear-all.ts",
|
|
62
64
|
"init-db": "tsx src/bin/init-db.ts",
|
|
@@ -73,7 +75,7 @@
|
|
|
73
75
|
},
|
|
74
76
|
"name": "text-to-map",
|
|
75
77
|
"description": "Text To Map usiluje o lepší, strojově zpracovatelné využití částí vyhlášek s výčtem ulic a dalších lokací. Jde o rozšiřitelnou sadu konceptů a nástrojů, které zajistí hladký převod výčtu ulic a jejich rozsahů v lidsky srozumitelném jazyce do strojově zpracovatelného, uchopitelného formátu.",
|
|
76
|
-
"version": "1.1.
|
|
78
|
+
"version": "1.1.44",
|
|
77
79
|
"main": "dist/index.js",
|
|
78
80
|
"types": "dist/index.d.ts",
|
|
79
81
|
"files": [
|