text-to-map
Version:
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ě zpra
66 lines • 10 kB
JavaScript
import { getKnexDb, insertAutoincrementRow, isSqlite } from "./db";
import { SyncPart } from "./types";
const allParts = [
SyncPart.AddressPoints,
SyncPart.Schools,
SyncPart.Regions,
SyncPart.Streets,
];
const serializeDate = (date) => {
return isSqlite(getKnexDb()) ? date.toISOString().slice(0, -1) : date;
};
const deserializeDate = (date) => {
return isSqlite(getKnexDb()) ? new Date(date) : date;
};
export const startSyncPart = async (part) => {
return await insertAutoincrementRow([part.toString(), serializeDate(new Date())], "sync_log", ["part", "started_at"]);
};
export const setSyncPartAsCompleted = async (id) => {
await getKnexDb()
.update({ finished_at: serializeDate(new Date()), completed: true })
.from("sync_log")
.where({ id });
};
export const isSyncPartCompleted = async (part) => {
const result = await getKnexDb()
.select("id")
.from("sync_log")
.where({ part, completed: true })
.limit(1);
return result.length > 0;
};
export const isEverythingSynced = async () => {
const results = await Promise.all(allParts.map(isSyncPartCompleted));
return results.every((r) => r);
};
export const millisecondsSinceLastSyncOfPart = async (part) => {
const result = await lastSyncOfPart(part);
return result === null ? null : new Date().getTime() - result.getTime();
};
export const lastSyncOfPart = async (part) => {
const result = await getKnexDb()
.select("finished_at")
.from("sync_log")
.where({ part, completed: true })
.orderBy("finished_at", "desc")
.limit(1);
if (result.length === 0) {
return null;
}
return deserializeDate(result[0].finished_at);
};
export const millisecondsSinceLastSync = async () => {
const results = await Promise.all(allParts.map(millisecondsSinceLastSyncOfPart));
if (results.some((r) => r === null)) {
return null;
}
return Math.max(...results);
};
export const lastSync = async () => {
const results = await Promise.all(allParts.map(lastSyncOfPart));
if (results.some((r) => r === null)) {
return null;
}
return new Date(Math.min(...results.map((r) => r.getTime())));
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1sb2cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGIvc3luYy1sb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUVuQyxNQUFNLFFBQVEsR0FBRztJQUNmLFFBQVEsQ0FBQyxhQUFhO0lBQ3RCLFFBQVEsQ0FBQyxPQUFPO0lBQ2hCLFFBQVEsQ0FBQyxPQUFPO0lBQ2hCLFFBQVEsQ0FBQyxPQUFPO0NBQ2pCLENBQUM7QUFFRixNQUFNLGFBQWEsR0FBRyxDQUFDLElBQVUsRUFBaUIsRUFBRTtJQUNsRCxPQUFPLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDeEUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxlQUFlLEdBQUcsQ0FBQyxJQUFtQixFQUFRLEVBQUU7SUFDcEQsT0FBTyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFFLElBQWEsQ0FBQztBQUNqRSxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxFQUFFLElBQWMsRUFBbUIsRUFBRTtJQUNyRSxPQUFPLE1BQU0sc0JBQXNCLENBQ2pDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLGFBQWEsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsRUFDNUMsVUFBVSxFQUNWLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUN2QixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FB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QU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFO1FBQ25DLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFDRCxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0S25leERiLCBpbnNlcnRBdXRvaW5jcmVtZW50Um93LCBpc1NxbGl0ZSB9IGZyb20gXCIuL2RiXCI7XHJcbmltcG9ydCB7IFN5bmNQYXJ0IH0gZnJvbSBcIi4vdHlwZXNcIjtcclxuXHJcbmNvbnN0IGFsbFBhcnRzID0gW1xyXG4gIFN5bmNQYXJ0LkFkZHJlc3NQb2ludHMsXHJcbiAgU3luY1BhcnQuU2Nob29scyxcclxuICBTeW5jUGFydC5SZWdpb25zLFxyXG4gIFN5bmNQYXJ0LlN0cmVldHMsXHJcbl07XHJcblxyXG5jb25zdCBzZXJpYWxpemVEYXRlID0gKGRhdGU6IERhdGUpOiBzdHJpbmcgfCBEYXRlID0+IHtcclxuICByZXR1cm4gaXNTcWxpdGUoZ2V0S25leERiKCkpID8gZGF0ZS50b0lTT1N0cmluZygpLnNsaWNlKDAsIC0xKSA6IGRhdGU7XHJcbn07XHJcblxyXG5jb25zdCBkZXNlcmlhbGl6ZURhdGUgPSAoZGF0ZTogc3RyaW5nIHwgRGF0ZSk6IERhdGUgPT4ge1xyXG4gIHJldHVybiBpc1NxbGl0ZShnZXRLbmV4RGIoKSkgPyBuZXcgRGF0ZShkYXRlKSA6IChkYXRlIGFzIERhdGUpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IHN0YXJ0U3luY1BhcnQgPSBhc3luYyAocGFydDogU3luY1BhcnQpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gIHJldHVybiBhd2FpdCBpbnNlcnRBdXRvaW5jcmVtZW50Um93KFxyXG4gICAgW3BhcnQudG9TdHJpbmcoKSwgc2VyaWFsaXplRGF0ZShuZXcgRGF0ZSgpKV0sXHJcbiAgICBcInN5bmNfbG9nXCIsXHJcbiAgICBbXCJwYXJ0XCIsIFwic3RhcnRlZF9hdFwiXVxyXG4gICk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0U3luY1BhcnRBc0NvbXBsZXRlZCA9IGFzeW5jIChpZDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgYXdhaXQgZ2V0S25leERiKClcclxuICAgIC51cGRhdGUoeyBmaW5pc2hlZF9hdDogc2VyaWFsaXplRGF0ZShuZXcgRGF0ZSgpKSwgY29tcGxldGVkOiB0cnVlIH0pXHJcbiAgICAuZnJvbShcInN5bmNfbG9nXCIpXHJcbiAgICAud2hlcmUoeyBpZCB9KTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpc1N5bmNQYXJ0Q29tcGxldGVkID0gYXN5bmMgKHBhcnQ6IFN5bmNQYXJ0KTogUHJvbWlzZTxib29sZWFuPiA9PiB7XHJcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0S25leERiKClcclxuICAgIC5zZWxlY3QoXCJpZFwiKVxyXG4gICAgLmZyb20oXCJzeW5jX2xvZ1wiKVxyXG4gICAgLndoZXJlKHsgcGFydCwgY29tcGxldGVkOiB0cnVlIH0pXHJcbiAgICAubGltaXQoMSk7XHJcblxyXG4gIHJldHVybiByZXN1bHQubGVuZ3RoID4gMDtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpc0V2ZXJ5dGhpbmdTeW5jZWQgPSBhc3luYyAoKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XHJcbiAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGFsbFBhcnRzLm1hcChpc1N5bmNQYXJ0Q29tcGxldGVkKSk7XHJcbiAgcmV0dXJuIHJlc3VsdHMuZXZlcnkoKHIpID0+IHIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IG1pbGxpc2Vjb25kc1NpbmNlTGFzdFN5bmNPZlBhcnQgPSBhc3luYyAoXHJcbiAgcGFydDogU3luY1BhcnRcclxuKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiA9PiB7XHJcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbGFzdFN5bmNPZlBhcnQocGFydCk7XHJcbiAgcmV0dXJuIHJlc3VsdCA9PT0gbnVsbCA/IG51bGwgOiBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHJlc3VsdC5nZXRUaW1lKCk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgbGFzdFN5bmNPZlBhcnQgPSBhc3luYyAocGFydDogU3luY1BhcnQpOiBQcm9taXNlPERhdGUgfCBudWxsPiA9PiB7XHJcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0S25leERiKClcclxuICAgIC5zZWxlY3QoXCJmaW5pc2hlZF9hdFwiKVxyXG4gICAgLmZyb20oXCJzeW5jX2xvZ1wiKVxyXG4gICAgLndoZXJlKHsgcGFydCwgY29tcGxldGVkOiB0cnVlIH0pXHJcbiAgICAub3JkZXJCeShcImZpbmlzaGVkX2F0XCIsIFwiZGVzY1wiKVxyXG4gICAgLmxpbWl0KDEpO1xyXG5cclxuICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZGVzZXJpYWxpemVEYXRlKHJlc3VsdFswXS5maW5pc2hlZF9hdCk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgbWlsbGlzZWNvbmRzU2luY2VMYXN0U3luYyA9IGFzeW5jICgpOiBQcm9taXNlPG51bWJlciB8IG51bGw+ID0+IHtcclxuICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICBhbGxQYXJ0cy5tYXAobWlsbGlzZWNvbmRzU2luY2VMYXN0U3luY09mUGFydClcclxuICApO1xyXG4gIGlmIChyZXN1bHRzLnNvbWUoKHIpID0+IHIgPT09IG51bGwpKSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbiAgcmV0dXJuIE1hdGgubWF4KC4uLnJlc3VsdHMpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGxhc3RTeW5jID0gYXN5bmMgKCk6IFByb21pc2U8RGF0ZSB8IG51bGw+ID0+IHtcclxuICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoYWxsUGFydHMubWFwKGxhc3RTeW5jT2ZQYXJ0KSk7XHJcbiAgaWYgKHJlc3VsdHMuc29tZSgocikgPT4gciA9PT0gbnVsbCkpIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuICByZXR1cm4gbmV3IERhdGUoTWF0aC5taW4oLi4ucmVzdWx0cy5tYXAoKHIpID0+IHIuZ2V0VGltZSgpKSkpO1xyXG59O1xyXG4iXX0=