| // 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<void>; |
| } |
| |
| type LateInitializationLoader = () => Promise<Runnable>; |
| export interface LateInitializableRunnableSetting { |
| id: string; |
| loadRunnable: LateInitializationLoader; |
| } |
| |
| const registeredLateInitializationRunnables = new Map<string, LateInitializationLoader>(); |
| |
| 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; |
| } |