Back to Delivery 3 Reliable Quality Utilities
delivery-03-reliable-quality-utilities/src/scriptedOperations.ts
import { QualityUtilityError } from "./errors.js";
import type { QualityCheckObservation } from "./models.js";
/** Creates a local, repeatable asynchronous boundary from predetermined observations. */
export function scriptedObservations(
observations: readonly QualityCheckObservation[],
): () => Promise<QualityCheckObservation> {
if (observations.length === 0) {
throw new QualityUtilityError("invalid-input", "A scripted operation needs at least one observation.", {
operation: "scripted-observations",
});
}
let nextIndex = 0;
return async (): Promise<QualityCheckObservation> => {
const observation = observations[Math.min(nextIndex, observations.length - 1)];
nextIndex += 1;
if (observation === undefined) {
throw new Error("A scripted observation was unexpectedly unavailable.");
}
return observation;
};
}
/** Creates a repeatable transient failure before returning the provided value. */
export function transientFailureThen<T>(failureCount: number, value: T): () => Promise<T> {
let attempts = 0;
return async (): Promise<T> => {
attempts += 1;
if (attempts <= failureCount) {
throw new QualityUtilityError("dependency-failure", "Illustrative local dependency is temporarily unavailable.", {
operation: "illustrative-local-dependency",
attempt: attempts,
});
}
return value;
};
}