@aws-amplify/core
Version:
Core category of aws-amplify
1 lines • 9.1 kB
Source Map (JSON)
{"version":3,"file":"createQueuedStorage.mjs","sources":["../../../../src/utils/queuedStorage/createQueuedStorage.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { DATABASE_NAME, STORE_NAME } from './constants';\nimport { getAddItemBytesSize } from './getAddItemBytesSize';\nexport const createQueuedStorage = () => {\n let currentBytesSize = 0;\n let error;\n const openDBPromise = new Promise((resolve, reject) => {\n const { indexedDB } = window;\n const openRequest = indexedDB.open(DATABASE_NAME, 1);\n openRequest.onupgradeneeded = () => {\n const db = openRequest.result;\n if (!db.objectStoreNames.contains(STORE_NAME)) {\n db.createObjectStore(STORE_NAME, {\n keyPath: 'id',\n autoIncrement: true,\n });\n }\n };\n openRequest.onsuccess = async () => {\n const db = openRequest.result;\n const transaction = db.transaction(STORE_NAME, 'readonly');\n const request = transaction.objectStore(STORE_NAME).getAll();\n await promisifyIDBRequest(request);\n for (const item of request.result) {\n currentBytesSize += item.bytesSize;\n }\n resolve(openRequest.result);\n };\n openRequest.onerror = () => {\n reject(openRequest.error);\n };\n }).catch(err => {\n error = err;\n return undefined;\n });\n const getDB = async () => {\n const db = await openDBPromise;\n if (!db) {\n throw error;\n }\n return db;\n };\n const getStore = async () => {\n const db = await getDB();\n const transaction = db.transaction(STORE_NAME, 'readwrite');\n return transaction.objectStore(STORE_NAME);\n };\n const _peek = async (n) => {\n const store = await getStore();\n const request = store.getAll(undefined, n);\n await promisifyIDBRequest(request);\n return request.result.map(item => item);\n };\n return {\n async add(item, { dequeueBeforeEnqueue } = { dequeueBeforeEnqueue: false }) {\n if (dequeueBeforeEnqueue) {\n const itemsToDelete = await this.peek(1);\n await this.delete(itemsToDelete);\n }\n const store = await getStore();\n const itemBytesSize = getAddItemBytesSize(item);\n const queuedItem = {\n ...item,\n bytesSize: itemBytesSize,\n };\n const request = store.add(queuedItem);\n await promisifyIDBRequest(request);\n currentBytesSize += itemBytesSize;\n },\n async peek(n) {\n return _peek(n);\n },\n async peekAll() {\n return _peek();\n },\n async delete(items) {\n if (!items.length) {\n return;\n }\n const store = await getStore();\n // delete by range to improve performance\n const keyRangesToDelete = findRanges(items\n .map(item => item.id)\n .filter((id) => id !== undefined)).map(([lower, upper]) => IDBKeyRange.bound(lower, upper));\n await Promise.all(keyRangesToDelete.map(range => promisifyIDBRequest(store.delete(range))));\n for (const item of items) {\n currentBytesSize -= item.bytesSize;\n }\n },\n async clear() {\n const store = await getStore();\n await store.clear();\n currentBytesSize = 0;\n },\n isFull(maxBytesSizeInMiB) {\n return currentBytesSize >= maxBytesSizeInMiB * 1024 * 1024;\n },\n };\n};\nconst promisifyIDBRequest = (request) => new Promise((resolve, reject) => {\n request.onsuccess = () => {\n resolve();\n };\n request.onerror = () => {\n reject(request.error);\n };\n});\nconst findRanges = (input) => {\n const nums = input.concat().sort((a, b) => a - b);\n const result = [];\n let rangeLength = 1;\n for (let i = 1; i <= nums.length; i++) {\n if (i === nums.length || nums[i] - nums[i - 1] !== 1) {\n if (rangeLength === 1) {\n result.push([nums[i - rangeLength], nums[i - rangeLength]]);\n }\n else {\n result.push([nums[i - rangeLength], nums[i - 1]]);\n }\n rangeLength = 1;\n }\n else {\n rangeLength += 1;\n }\n }\n return result;\n};\n"],"names":[],"mappings":"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"}