38 lines
1.0 KiB
TypeScript
38 lines
1.0 KiB
TypeScript
type TeardownStep = () => unknown;
|
|
|
|
export const teardownWorkspace = async (steps: {
|
|
stopHeartbeat: TeardownStep;
|
|
removeActive: TeardownStep;
|
|
appendEvent?: TeardownStep;
|
|
abortAgent?: TeardownStep;
|
|
removeMaterializedEnv?: TeardownStep;
|
|
markStopped?: TeardownStep;
|
|
closeAgent?: TeardownStep;
|
|
stopContainer?: TeardownStep;
|
|
release: TeardownStep;
|
|
}) => {
|
|
const errors: unknown[] = [];
|
|
const call = (step: TeardownStep | undefined) => {
|
|
if (!step) return Promise.resolve();
|
|
try {
|
|
return Promise.resolve(step()).catch((error: unknown) => {
|
|
errors.push(error);
|
|
});
|
|
} catch (error) {
|
|
errors.push(error);
|
|
return Promise.resolve();
|
|
}
|
|
};
|
|
|
|
const immediate = [call(steps.stopHeartbeat), call(steps.removeActive)];
|
|
await Promise.all(immediate);
|
|
await call(steps.appendEvent);
|
|
await call(steps.abortAgent);
|
|
await call(steps.removeMaterializedEnv);
|
|
await call(steps.markStopped);
|
|
await call(steps.closeAgent);
|
|
await call(steps.stopContainer);
|
|
await call(steps.release);
|
|
return { errors };
|
|
};
|