diff --git a/web/database/worker/db-worker.js b/web/database/worker/db-worker.js --- a/web/database/worker/db-worker.js +++ b/web/database/worker/db-worker.js @@ -23,7 +23,7 @@ }; localforage.config(localforageConfig); -let sqliteDb = null; +let sqliteDb: ?SqliteDatabase = null; async function initDatabase(sqljsFilePath: string, sqljsFilename: ?string) { const content = await localforage.getItem(SQLITE_CONTENT); diff --git a/web/flow-typed/SQLiteJS.js b/web/flow-typed/SQLiteJS.js new file mode 100644 --- /dev/null +++ b/web/flow-typed/SQLiteJS.js @@ -0,0 +1,72 @@ +// @flow + +declare type SqlValue = number | string | Uint8Array | null; +declare type ParamsObject = { +[key: string]: SqlValue, ... }; +declare type ParamsCallback = (obj: ParamsObject) => void; + +declare type BindParams = $ReadOnlyArray | ParamsObject | null; + +declare type QueryExecResult = { + +columns: $ReadOnlyArray, + +values: $ReadOnlyArray<$ReadOnlyArray>, +}; + +declare type StatementIteratorResult = { + +done: boolean, + +value: SqliteStatement, +}; + +declare type SqlJsStatic = { + +Database: SqliteDatabase, + +Statement: SqliteStatement, +}; + +declare type InitSqlJsStatic = { + (config?: Object): Promise, +}; + +declare class SqliteDatabase { + constructor(data?: Array | Buffer | null): this; + close(): void; + + create_function( + name: string, + func: (...args: $ReadOnlyArray) => R, + ): SqliteDatabase; + each( + sql: string, + params: BindParams, + callback: ParamsCallback, + done: () => void, + ): SqliteDatabase; + each(sql: string, callback: ParamsCallback, done: () => void): SqliteDatabase; + exec(sql: string, params?: BindParams): $ReadOnlyArray; + export(): Uint8Array; + getRowsModified(): number; + handleError(): null | empty; + iterateStatements(sql: string): StatementIterator; + prepare(sql: string, params?: BindParams): SqliteStatement; + run(sql: string, params?: BindParams): SqliteDatabase; +} + +declare class SqliteStatement { + bind(values?: BindParams): boolean; + free(): boolean; + freemem(): void; + get(params?: BindParams): $ReadOnlyArray; + getAsObject(params?: BindParams): ParamsObject; + getColumnNames(): $ReadOnlyArray; + getNormalizedSQL(): string; + getSQL(): string; + reset(): void; + run(values?: BindParams): void; + step(): boolean; +} + +declare class StatementIterator implements Iterable { + @@iterator: () => Iterator; + getRemainingSql(): string; + next(): StatementIteratorResult; +} + +declare var initSqlJs: InitSqlJsStatic;