// Copyright 2019 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. export interface Runnable { run(): Promise; } type LateInitializationLoader = () => Promise; export interface LateInitializableRunnableSetting { id: string; loadRunnable: LateInitializationLoader; } const registeredLateInitializationRunnables = new Map(); export function registerLateInitializationRunnable(setting: LateInitializableRunnableSetting): void { const {id, loadRunnable} = setting; if (registeredLateInitializationRunnables.has(id)) { throw new Error(`Duplicate late Initializable runnable id '${id}'`); } registeredLateInitializationRunnables.set(id, loadRunnable); } export function maybeRemoveLateInitializationRunnable(runnableId: string): boolean { return registeredLateInitializationRunnables.delete(runnableId); } export function lateInitializationRunnables(): LateInitializationLoader[] { return [...registeredLateInitializationRunnables.values()]; } const registeredEarlyInitializationRunnables: Array<() => Runnable> = []; export function registerEarlyInitializationRunnable(runnable: () => Runnable): void { registeredEarlyInitializationRunnables.push(runnable); } export function earlyInitializationRunnables(): Array<() => Runnable> { return registeredEarlyInitializationRunnables; }