diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/logging.ts | 49 | ||||
| -rw-r--r-- | src/query.ts | 2 | 
2 files changed, 33 insertions, 18 deletions
| diff --git a/src/logging.ts b/src/logging.ts index 3f8757a07..16aa851bc 100644 --- a/src/logging.ts +++ b/src/logging.ts @@ -20,7 +20,7 @@   * @author Florian Dold   */ -import {Store, QueryRoot} from "./query"; +import {Store, QueryRoot, openPromise} from "./query";  export type Level = "error" | "debug" | "info" | "warn"; @@ -126,31 +126,46 @@ export async function getLogs(): Promise<LogEntry[]> {    return await new QueryRoot(db).iter(logsStore).toArray();  } +let barrier: any; +  export async function record(level: Level, msg: string, source?: string, line?: number, col?: number): Promise<void> {    if (typeof indexedDB === "undefined") {      return;    } -  if (!db) { -    db = await openLoggingDb(); + +  let myBarrier: any; + +  if (barrier) { +    let p = barrier.promise; +    myBarrier = barrier = openPromise(); +    await p; +  } else { +    myBarrier = barrier = openPromise();    } -  let count = await new QueryRoot(db).count(logsStore); +  try { +    if (!db) { +      db = await openLoggingDb(); +    } -  console.log("count is", count); +    let count = await new QueryRoot(db).count(logsStore); -  if (count > 1000) { -    await new QueryRoot(db).deleteIf(logsStore, (e, i) => (i < 200)); -  } +    if (count > 1000) { +      await new QueryRoot(db).deleteIf(logsStore, (e, i) => (i < 200)); +    } -  let entry: LogEntry = { -    timestamp: new Date().getTime(), -    level, -    msg, -    source, -    line, -    col, -  }; -  await new QueryRoot(db).put(logsStore, entry); +    let entry: LogEntry = { +      timestamp: new Date().getTime(), +      level, +      msg, +      source, +      line, +      col, +    }; +    await new QueryRoot(db).put(logsStore, entry); +  } finally { +    await Promise.resolve().then(() => myBarrier.resolve()); +  }  }  const loggingDbVersion = 1; diff --git a/src/query.ts b/src/query.ts index f8a6255b4..2c5a6002f 100644 --- a/src/query.ts +++ b/src/query.ts @@ -86,7 +86,7 @@ export let AbortTransaction = Symbol("abort_transaction");   * Get an unresolved promise together with its extracted resolve / reject   * function.   */ -function openPromise<T>() { +export function openPromise<T>() {    let resolve: ((value?: T | PromiseLike<T>) => void) | null = null;    let reject: ((reason?: any) => void) | null = null;    const promise = new Promise<T>((res, rej) => { | 
