Convert IndexedDB code to TypeScript

This commit is contained in:
Evan Hahn 2022-06-01 16:51:30 +00:00 committed by GitHub
parent 638e3e3a58
commit 9c8fd2a714
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 6 additions and 22 deletions

View file

@ -24,6 +24,7 @@ import type {
} from './model-types.d';
import * as Bytes from './Bytes';
import * as Timers from './Timers';
import * as indexedDb from './indexeddb';
import type { WhatIsThis } from './window.d';
import type { Receipt } from './types/Receipt';
import { getTitleBarVisibility, TitleBarVisibility } from './types/Settings';
@ -494,8 +495,6 @@ export async function startApp(): Promise<void> {
// of preload.js processing
window.setImmediate = window.nodeSetImmediate;
const { removeDatabase: removeIndexedDB, doesDatabaseExist } =
window.Signal.IndexedDB;
const { Message } = window.Signal.Types;
const {
upgradeMessageSchema,
@ -551,7 +550,7 @@ export async function startApp(): Promise<void> {
const version = await window.Signal.Data.getItemById('version');
if (!version) {
const isIndexedDBPresent = await doesDatabaseExist();
const isIndexedDBPresent = await indexedDb.doesDatabaseExist();
if (isIndexedDBPresent) {
log.info('Found IndexedDB database.');
try {
@ -582,7 +581,7 @@ export async function startApp(): Promise<void> {
log.info('Deleting IndexedDB file...');
await Promise.all([
removeIndexedDB(),
indexedDb.removeDatabase(),
window.Signal.Data.removeAll(),
window.Signal.Data.removeIndexedDBFiles(),
]);

52
ts/indexeddb.ts Normal file
View file

@ -0,0 +1,52 @@
// Copyright 2018-2022 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
const LEGACY_DATABASE_ID = 'signal';
export async function doesDatabaseExist(): Promise<boolean> {
window.SignalContext.log.info(
'Checking for the existence of IndexedDB data...'
);
return new Promise((resolve, reject) => {
const req = window.indexedDB.open(LEGACY_DATABASE_ID);
let existed = true;
let timer: undefined | ReturnType<typeof setTimeout> = setTimeout(() => {
window.SignalContext.log.warn(
'doesDatabaseExist: Timed out attempting to check IndexedDB status'
);
return resolve(false);
}, 1000);
const clearTimer = () => {
if (timer !== undefined) {
clearTimeout(timer);
timer = undefined;
}
};
req.onerror = error => {
clearTimer();
reject(error);
};
req.onsuccess = () => {
clearTimer();
req.result.close();
resolve(existed);
};
req.onupgradeneeded = () => {
if (req.result.version === 1) {
existed = false;
window.indexedDB.deleteDatabase(LEGACY_DATABASE_ID);
}
};
});
}
export function removeDatabase(): void {
window.SignalContext.log.info(
`Deleting IndexedDB database '${LEGACY_DATABASE_ID}'`
);
window.indexedDB.deleteDatabase(LEGACY_DATABASE_ID);
}

4
ts/window.d.ts vendored
View file

@ -398,10 +398,6 @@ declare global {
WhatsNewLink: typeof WhatsNewLink;
};
OS: typeof OS;
IndexedDB: {
removeDatabase: WhatIsThis;
doesDatabaseExist: WhatIsThis;
};
Views: WhatIsThis;
State: {
createStore: typeof createStore;