import {Rivendell} from './Rivendell'; import BuildState = Rivendell.BuildState; import BuildStatus = Rivendell.BuildStatus; export type ProgressCallback = (state: BuildState) => any; export type ErrorList = string[]; export async function watchBuild( id: number, progressCallback: ProgressCallback, pollInterval: number = 2000 ): Promise { return new Promise((resolve, reject) => { const interval = setInterval(() => { Rivendell.fetchBuild(id) .then((build) => { const state = build.state as BuildState; if (state === BuildState.FINISHED) { clearInterval(interval); if (build.status as BuildStatus === BuildStatus.SUCCESS) { resolve(); } else { const errors = build.errors || []; resolve(errors); } } else { progressCallback(state); } }) .catch((error) => { clearInterval(interval); reject(error); }); }, pollInterval); }); }