From b07a93246ff340e2d9bd091856932cf1c0a60384 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cbobbydigitales=E2=80=9D?= Date: Tue, 14 Nov 2023 00:12:39 -0800 Subject: [PATCH] Complete move to IndexedDB --- db.js | 135 +++++++++++++++++++++ db.js.map | 1 + index.html | 2 - main | Bin 6947794 -> 6947794 bytes main.go | 9 +- main.js | 332 ++++++++++++++++++++++++++++++++++++++++++++++++++++ main.js.map | 1 + src/main.ts | 200 +++++-------------------------- sw.js | 54 +++++++++ sw.js.map | 1 + 10 files changed, 560 insertions(+), 175 deletions(-) create mode 100644 db.js create mode 100644 db.js.map create mode 100644 main.js create mode 100644 main.js.map create mode 100644 sw.js create mode 100644 sw.js.map diff --git a/db.js b/db.js new file mode 100644 index 0000000..8cc0cdc --- /dev/null +++ b/db.js @@ -0,0 +1,135 @@ +// interface MyJsonObject { +// id: string; +// name: string; +// email: string; +// } +const dbName = "ddln"; +const storeNameBase = "posts"; +let keyBase = "dandelion_posts_v1_"; +let key = ""; +export function openDatabase(userID) { + const storeName = `${storeNameBase}_${userID}`; + return new Promise((resolve, reject) => { + const request = indexedDB.open(dbName, 1); + request.onerror = (event) => { + // Use a type assertion to access the specific properties of IDBRequest error event + const errorEvent = event; + reject(`Database error: ${errorEvent.target.error?.message}`); + }; + request.onupgradeneeded = (event) => { + const db = event.target.result; + if (!db.objectStoreNames.contains(storeName)) { + let store = db.createObjectStore(storeName, { keyPath: "id", autoIncrement: true }); + store.createIndex("datetimeIndex", "post_timestamp", { unique: false }); + } + }; + request.onsuccess = (event) => { + const db = event.target.result; + resolve(db); + }; + }); +} +export async function addData(userID, data) { + try { + const storeName = `${storeNameBase}_${userID}`; + const db = await openDatabase(userID); + const transaction = db.transaction(storeName, "readwrite"); + const store = transaction.objectStore(storeName); + const addRequest = store.add({ post_timestamp: data.post_timestamp, data: data }); + addRequest.onsuccess = (e) => { + // console.log('Data has been added:', (e.target as IDBRequest).result); + }; + addRequest.onerror = (event) => { + // Use a type assertion to access the specific properties of IDBRequest error event + const errorEvent = event; + console.error('Error in adding data:', errorEvent.target.error?.message); + }; + } + catch (error) { + console.error('Error in opening database:', error); + } +} +export async function addDataArray(userID, array) { + try { + const storeName = `${storeNameBase}_${userID}`; + const db = await openDatabase(userID); + const transaction = db.transaction(storeName, "readwrite"); + const store = transaction.objectStore(storeName); + let count = 0; + array.reverse(); + for (let data of array) { + const addRequest = store.add({ post_timestamp: data.post_timestamp, data: data }); + addRequest.onsuccess = (e) => { + // console.log('Data has been added:', (e.target as IDBRequest).result); + }; + addRequest.onerror = (event) => { + // Use a type assertion to access the specific properties of IDBRequest error event + const errorEvent = event; + console.error('Error in adding data:', errorEvent.target.error?.message); + }; + count++; + // if (count % 100 === 0) { + // console.log(`Added ${count} posts...`); + // } + } + } + catch (error) { + console.error('Error in opening database:', error); + } +} +export async function getData(userID, lowerID, upperID) { + const storeName = `${storeNameBase}_${userID}`; + const db = await openDatabase(userID); + const transaction = db.transaction(storeName, "readonly"); + const store = transaction.objectStore(storeName); + return new Promise((resolve, reject) => { + const keyRangeValue = IDBKeyRange.bound(lowerID, upperID); + const records = []; + const index = store.index("datetimeIndex"); + const cursorRequest = index.openCursor(keyRangeValue); + cursorRequest.onsuccess = (event) => { + const cursor = event.target.result; + if (cursor) { + records.push(cursor.value.data); // Collect the record + cursor.continue(); // Move to the next item in the range + } + else { + // No more entries in the range + resolve(records); + } + }; + cursorRequest.onerror = (event) => { + // Use a type assertion to access the specific properties of IDBRequest error event + const errorEvent = event; + console.error('Transaction failed:', errorEvent.target.error?.message); + reject(errorEvent.target.error); // Reject the promise if there's an error + }; + }); +} +export async function getAllData(userID) { + const storeName = `${storeNameBase}_${userID}`; + const db = await openDatabase(userID); + const transaction = db.transaction(storeName, "readonly"); + const store = transaction.objectStore(storeName); + return new Promise((resolve, reject) => { + const getRequest = store.getAll(); + getRequest.onsuccess = () => { + if (getRequest.result) { + // console.log('Retrieved data:', getRequest.result.jsonData); + // resolve(getRequest.result.jsonData as any); + resolve(getRequest.result); + } + else { + console.log('No data record found for key', key); + resolve(undefined); // explicitly resolve with undefined when no data is found + } + }; + getRequest.onerror = (event) => { + // Use a type assertion to access the specific properties of IDBRequest error event + const errorEvent = event; + console.error('Transaction failed:', errorEvent.target.error?.message); + reject(errorEvent.target.error); // reject the promise if there's an error + }; + }); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzcmMvZGIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMkJBQTJCO0FBQzNCLGdCQUFnQjtBQUNoQixrQkFBa0I7QUFDbEIsbUJBQW1CO0FBQ25CLElBQUk7QUFFSixNQUFNLE1BQU0sR0FBVyxNQUFNLENBQUM7QUFDOUIsTUFBTSxhQUFhLEdBQVcsT0FBTyxDQUFDO0FBQ3RDLElBQUksT0FBTyxHQUFHLHFCQUFxQixDQUFBO0FBQ25DLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQVliLE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBYTtJQUN0QyxNQUFNLFNBQVMsR0FBRyxHQUFHLGFBQWEsSUFBSSxNQUFNLEVBQUUsQ0FBQztJQUUvQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ25DLE1BQU0sT0FBTyxHQUFxQixTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUU1RCxPQUFPLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUU7WUFDL0IsbUZBQW1GO1lBQ25GLE1BQU0sVUFBVSxHQUFHLEtBQXdCLENBQUM7WUFDNUMsTUFBTSxDQUFDLG1CQUFtQixVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQztRQUVGLE9BQU8sQ0FBQyxlQUFlLEdBQUcsQ0FBQyxLQUE0QixFQUFFLEVBQUU7WUFDdkQsTUFBTSxFQUFFLEdBQWlCLEtBQUssQ0FBQyxNQUEyQixDQUFDLE1BQU0sQ0FBQztZQUNsRSxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDMUMsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVB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QUMsTUFBTSxDQUFDLENBQUM7YUFDOUI7aUJBQU07Z0JBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDakQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsMERBQTBEO2FBQ2pGO1FBQ0wsQ0FBQyxDQUFDO1FBRUYsVUFBVSxDQUFDLE9BQU8sR0FBRyxDQUFDLEtBQVksRUFBRSxFQUFFO1lBQ2xDLG1GQUFtRjtZQUNuRixNQUFNLFVBQVUsR0FBRyxLQUF3QixDQUFDO1lBQzVDLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDdkUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyx5Q0FBeUM7UUFDOUUsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaW50ZXJmYWNlIE15SnNvbk9iamVjdCB7XG4vLyAgIGlkOiBzdHJpbmc7XG4vLyAgIG5hbWU6IHN0cmluZztcbi8vICAgZW1haWw6IHN0cmluZztcbi8vIH1cblxuY29uc3QgZGJOYW1lOiBzdHJpbmcgPSBcImRkbG5cIjtcbmNvbnN0IHN0b3JlTmFtZUJhc2U6IHN0cmluZyA9IFwicG9zdHNcIjtcbmxldCBrZXlCYXNlID0gXCJkYW5kZWxpb25fcG9zdHNfdjFfXCJcbmxldCBrZXkgPSBcIlwiO1xuXG5cbmludGVyZmFjZSBJREJSZXF1ZXN0RXZlbnQ8VCA9IGFueT4gZXh0ZW5kcyBFdmVudCB7XG4gICAgdGFyZ2V0OiBJREJSZXF1ZXN0PFQ+O1xufVxuXG4vLyBJbmRleGVkREIgdXNlcyBET01FeGNlcHRpb24sIHNvIGxldCdzIHVzZSBpdCBmb3IgZXJyb3IgdHlwaW5nXG50eXBlIERCRXJyb3IgPSBFdmVudCAmIHtcbiAgICB0YXJnZXQ6IHsgZXJyb3JDb2RlOiBET01FeGNlcHRpb24gfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBvcGVuRGF0YWJhc2UodXNlcklEOnN0cmluZyk6IFByb21pc2U8SURCRGF0YWJhc2U+IHtcbiAgICBjb25zdCBzdG9yZU5hbWUgPSBgJHtzdG9yZU5hbWVCYXNlfV8ke3VzZXJJRH1gO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdDogSURCT3BlbkRCUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRiTmFtZSwgMSk7XG5cbiAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgLy8gVXNlIGEgdHlwZSBhc3NlcnRpb24gdG8gYWNjZXNzIHRoZSBzcGVjaWZpYyBwcm9wZXJ0aWVzIG9mIElEQlJlcXVlc3QgZXJyb3IgZXZlbnRcbiAgICAgICAgICAgIGNvbnN0IGVycm9yRXZlbnQgPSBldmVudCBhcyBJREJSZXF1ZXN0RXZlbnQ7XG4gICAgICAgICAgICByZWplY3QoYERhdGFiYXNlIGVycm9yOiAke2Vycm9yRXZlbnQudGFyZ2V0LmVycm9yPy5tZXNzYWdlfWApO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gKGV2ZW50OiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRiOiBJREJEYXRhYmFzZSA9IChldmVudC50YXJnZXQgYXMgSURCT3BlbkRCUmVxdWVzdCkucmVzdWx0O1xuICAgICAgICAgICAgaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKHN0b3JlTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgc3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZShzdG9yZU5hbWUsIHsga2V5UGF0aDogXCJpZFwiLCBhdXRvSW5jcmVtZW50OiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIHN0b3JlLmNyZWF0ZUluZGV4KFwiZGF0ZXRpbWVJbmRleFwiLCBcInBvc3RfdGltZXN0YW1wXCIsIHsgdW5pcXVlOiBmYWxzZSB9KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGI6IElEQkRhdGFiYXNlID0gKGV2ZW50LnRhcmdldCBhcyBJREJPcGVuREJSZXF1ZXN0KS5yZXN1bHQ7XG4gICAgICAgICAgICByZXNvbHZlKGRiKTtcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZGREYXRhKHVzZXJJRDogc3RyaW5nLCBkYXRhOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBzdG9yZU5hbWUgPSBgJHtzdG9yZU5hbWVCYXNlfV8ke3VzZXJJRH1gO1xuICAgICAgICBjb25zdCBkYiA9IGF3YWl0IG9wZW5EYXRhYmFzZSh1c2VySUQpO1xuICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKHN0b3JlTmFtZSwgXCJyZWFkd3JpdGVcIik7XG4gICAgICAgIGNvbnN0IHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc3RvcmVOYW1lKTtcblxuICAgICAgICBjb25zdCBhZGRSZXF1ZXN0ID0gc3RvcmUuYWRkKHtwb3N0X3RpbWVzdGFtcDogZGF0YS5wb3N0X3RpbWVzdGFtcCwgZGF0YTpkYXRhfSk7XG5cbiAgICAgICAgYWRkUmVxdWVzdC5vbnN1Y2Nlc3MgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdEYXRhIGhhcyBiZWVuIGFkZGVkOicsIChlLnRhcmdldCBhcyBJREJSZXF1ZXN0KS5yZXN1bHQpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGFkZFJlcXVlc3Qub25lcnJvciA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgIC8vIFVzZSBhIHR5cGUgYXNzZXJ0aW9uIHRvIGFjY2VzcyB0aGUgc3BlY2lmaWMgcHJvcGVydGllcyBvZiBJREJSZXF1ZXN0IGVycm9yIGV2ZW50XG4gICAgICAgICAgICBjb25zdCBlcnJvckV2ZW50ID0gZXZlbnQgYXMgSURCUmVxdWVzdEV2ZW50O1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gYWRkaW5nIGRhdGE6JywgZXJyb3JFdmVudC50YXJnZXQuZXJyb3I/Lm1lc3NhZ2UpO1xuICAgICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIG9wZW5pbmcgZGF0YWJhc2U6JywgZXJyb3IpO1xuICAgIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkZERhdGFBcnJheSh1c2VySUQ6IHN0cmluZywgYXJyYXk6IGFueVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3RvcmVOYW1lID0gYCR7c3RvcmVOYW1lQmFzZX1fJHt1c2VySUR9YDtcbiAgICAgICAgY29uc3QgZGIgPSBhd2FpdCBvcGVuRGF0YWJhc2UodXNlcklEKTtcbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihzdG9yZU5hbWUsIFwicmVhZHdyaXRlXCIpO1xuICAgICAgICBjb25zdCBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHN0b3JlTmFtZSk7XG5cbiAgICAgICAgbGV0IGNvdW50ID0gMDtcblxuICAgICAgICBhcnJheS5yZXZlcnNlKCk7XG5cbiAgICAgICAgZm9yIChsZXQgZGF0YSBvZiBhcnJheSkge1xuICAgICAgICAgICAgY29uc3QgYWRkUmVxdWVzdCA9IHN0b3JlLmFkZCh7cG9zdF90aW1lc3RhbXA6IGRhdGEucG9zdF90aW1lc3RhbXAsIGRhdGE6ZGF0YX0pO1xuICAgICAgICAgICAgYWRkUmVxdWVzdC5vbnN1Y2Nlc3MgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnRGF0YSBoYXMgYmVlbiBhZGRlZDonLCAoZS50YXJnZXQgYXMgSURCUmVxdWVzdCkucmVzdWx0KTtcbiAgICAgICAgICAgIH07XG4gICAgXG4gICAgICAgICAgICBhZGRSZXF1ZXN0Lm9uZXJyb3IgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVXNlIGEgdHlwZSBhc3NlcnRpb24gdG8gYWNjZXNzIHRoZSBzcGVjaWZpYyBwcm9wZXJ0aWVzIG9mIElEQlJlcXVlc3QgZXJyb3IgZXZlbnRcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvckV2ZW50ID0gZXZlbnQgYXMgSURCUmVxdWVzdEV2ZW50O1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIGFkZGluZyBkYXRhOicsIGVycm9yRXZlbnQudGFyZ2V0LmVycm9yPy5tZXNzYWdlKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvdW50Kys7XG5cbiAgICAgICAgICAgIC8vIGlmIChjb3VudCAlIDEwMCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gICAgIGNvbnNvbGUubG9nKGBBZGRlZCAke2NvdW50fSBwb3N0cy4uLmApO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICB9XG5cbiAgICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBvcGVuaW5nIGRhdGFiYXNlOicsIGVycm9yKTtcbiAgICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXREYXRhKHVzZXJJRDpzdHJpbmcsIGxvd2VySUQ6RGF0ZSwgdXBwZXJJRDpEYXRlKTogUHJvbWlzZTxhbnkgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBzdG9yZU5hbWUgPSBgJHtzdG9yZU5hbWVCYXNlfV8ke3VzZXJJRH1gO1xuICAgIGNvbnN0IGRiID0gYXdhaXQgb3BlbkRhdGFiYXNlKHVzZXJJRCk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihzdG9yZU5hbWUsIFwicmVhZG9ubHlcIik7XG4gICAgY29uc3Qgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzdG9yZU5hbWUpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3Qga2V5UmFuZ2VWYWx1ZSA9IElEQktleVJhbmdlLmJvdW5kKGxvd2VySUQsIHVwcGVySUQpO1xuXG4gICAgICAgIGNvbnN0IHJlY29yZHM6IGFueVtdID0gW107XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSBzdG9yZS5pbmRleChcImRhdGV0aW1lSW5kZXhcIik7XG5cblxuICAgICAgICBjb25zdCBjdXJzb3JSZXF1ZXN0ID0gaW5kZXgub3BlbkN1cnNvcihrZXlSYW5nZVZhbHVlKTtcblxuICAgICAgICBjdXJzb3JSZXF1ZXN0Lm9uc3VjY2VzcyA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnNvciA9IChldmVudC50YXJnZXQgYXMgSURCUmVxdWVzdCkucmVzdWx0IGFzIElEQkN1cnNvcldpdGhWYWx1ZTtcbiAgICAgICAgICAgIGlmIChjdXJzb3IpIHtcbiAgICAgICAgICAgICAgICByZWNvcmRzLnB1c2goY3Vyc29yLnZhbHVlLmRhdGEpOyAvLyBDb2xsZWN0IHRoZSByZWNvcmRcbiAgICAgICAgICAgICAgICBjdXJzb3IuY29udGludWUoKTsgLy8gTW92ZSB0byB0aGUgbmV4dCBpdGVtIGluIHRoZSByYW5nZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBObyBtb3JlIGVudHJpZXMgaW4gdGhlIHJhbmdlXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZWNvcmRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjdXJzb3JSZXF1ZXN0Lm9uZXJyb3IgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAvLyBVc2UgYSB0eXBlIGFzc2VydGlvbiB0byBhY2Nlc3MgdGhlIHNwZWNpZmljIHByb3BlcnRpZXMgb2YgSURCUmVxdWVzdCBlcnJvciBldmVudFxuICAgICAgICAgICAgY29uc3QgZXJyb3JFdmVudCA9IGV2ZW50IGFzIElEQlJlcXVlc3RFdmVudDtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RyYW5zYWN0aW9uIGZhaWxlZDonLCBlcnJvckV2ZW50LnRhcmdldC5lcnJvcj8ubWVzc2FnZSk7XG4gICAgICAgICAgICByZWplY3QoZXJyb3JFdmVudC50YXJnZXQuZXJyb3IpOyAvLyBSZWplY3QgdGhlIHByb21pc2UgaWYgdGhlcmUncyBhbiBlcnJvclxuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QWxsRGF0YSh1c2VySUQ6c3RyaW5nKTogUHJvbWlzZTxhbnkgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBzdG9yZU5hbWUgPSBgJHtzdG9yZU5hbWVCYXNlfV8ke3VzZXJJRH1gO1xuICAgIGNvbnN0IGRiID0gYXdhaXQgb3BlbkRhdGFiYXNlKHVzZXJJRCk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihzdG9yZU5hbWUsIFwicmVhZG9ubHlcIik7XG4gICAgY29uc3Qgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzdG9yZU5hbWUpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZ2V0UmVxdWVzdCA9IHN0b3JlLmdldEFsbCgpO1xuXG4gICAgICAgIGdldFJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGdldFJlcXVlc3QucmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZygnUmV0cmlldmVkIGRhdGE6JywgZ2V0UmVxdWVzdC5yZXN1bHQuanNvbkRhdGEpO1xuICAgICAgICAgICAgICAgIC8vIHJlc29sdmUoZ2V0UmVxdWVzdC5yZXN1bHQuanNvbkRhdGEgYXMgYW55KTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGdldFJlcXVlc3QucmVzdWx0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ05vIGRhdGEgcmVjb3JkIGZvdW5kIGZvciBrZXknLCBrZXkpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUodW5kZWZpbmVkKTsgLy8gZXhwbGljaXRseSByZXNvbHZlIHdpdGggdW5kZWZpbmVkIHdoZW4gbm8gZGF0YSBpcyBmb3VuZFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGdldFJlcXVlc3Qub25lcnJvciA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgIC8vIFVzZSBhIHR5cGUgYXNzZXJ0aW9uIHRvIGFjY2VzcyB0aGUgc3BlY2lmaWMgcHJvcGVydGllcyBvZiBJREJSZXF1ZXN0IGVycm9yIGV2ZW50XG4gICAgICAgICAgICBjb25zdCBlcnJvckV2ZW50ID0gZXZlbnQgYXMgSURCUmVxdWVzdEV2ZW50O1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignVHJhbnNhY3Rpb24gZmFpbGVkOicsIGVycm9yRXZlbnQudGFyZ2V0LmVycm9yPy5tZXNzYWdlKTtcbiAgICAgICAgICAgIHJlamVjdChlcnJvckV2ZW50LnRhcmdldC5lcnJvcik7IC8vIHJlamVjdCB0aGUgcHJvbWlzZSBpZiB0aGVyZSdzIGFuIGVycm9yXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4iXX0= \ No newline at end of file diff --git a/db.js.map b/db.js.map new file mode 100644 index 0000000..7569c17 --- /dev/null +++ b/db.js.map @@ -0,0 +1 @@ +{"version":3,"file":"db.js","sourceRoot":"","sources":["src/db.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/index.html b/index.html index cd5c336..97626e6 100644 --- a/index.html +++ b/index.html @@ -8,8 +8,6 @@ Dandelion - -