Data Pipeline Case Studies
Validation Summary Case
Validation logic can produce a typed summary instead of only a yes-or-no answer.
validation summary
A summary object makes validation outcomes easy to replay and inspect.
Validation Summary Case
validation.ts
Replay: real traced execution (multi-file project)
type Submission = {
name: string;
score: number;
};
type ValidationSummary = {
accepted: number;
rejected: number;
};
function summarize(submissions: Submission[], minimumScore: number): ValidationSummary {
const summary: ValidationSummary = { accepted: 0, rejected: 0 };
for (const submission of submissions) {
if (submission.score >= minimumScore) {
summary.accepted += 1;
} else {
summary.rejected += 1;
}
}
return summary;
}
const minimumScore: number = 70;
const submissions: Submission[] = [
{ name: "alpha", score: 95 },
{ name: "beta", score: 68 },
{ name: "gamma", score: 82 }
];
const summary: ValidationSummary = summarize(submissions, minimumScore);
console.log(`accepted=${summary.accepted};rejected=${summary.rejected}`);
type Submission = {
name: string;
score: number;
};
type ValidationSummary = {
accepted: number;
rejected: number;
};
function summarize(submissions: Submission[], minimumScore: number): ValidationSummary {
const summary: ValidationSummary = { accepted: 0, rejected: 0 };
for (const submission of submissions) {
if (submission.score >= minimumScore) {
summary.accepted += 1;
} else {
summary.rejected += 1;
}
}
return summary;
}
const minimumScore: number = 90;
const submissions: Submission[] = [
{ name: "alpha", score: 95 },
{ name: "beta", score: 68 },
{ name: "gamma", score: 82 }
];
const summary: ValidationSummary = summarize(submissions, minimumScore);
console.log(`accepted=${summary.accepted};rejected=${summary.rejected}`);
minimumScore ← 70, submissions ← [object Object],[object Object],[object Object]
22 return summary;23}2425const minimumScore→ 70: number = 70; //@minimumScore=9026const submissions→ [object Object],[object Object],[object Object]: Submission[] = [27 { name: "alpha", score: 95 },28 { name: "beta", score: 68 },29 { name: "gamma", score: 82 }30];31const summary: ValidationSummary = summarize(submissions[object Object],[object Object],[object Object], minimumScore70);summary ← [object Object]
8 rejected: number;9};1011function summarize(submissions[object Object],[object Object],[object Object]: Submission[], minimumScore70: number): ValidationSummary {12 const summary→ [object Object]: ValidationSummary = { accepted: 0, rejected: 0 };if (submission.score >= minimumScore)
pass 1 of 214for (const submission of submissions) {15 if (submission.score95 >= minimumScore70) {16 summary.accepted += 1;17 } else {if (submission.score >= minimumScore)
pass 2 of 214for (const submission of submissions) {15 if (submission.score82 >= minimumScore70) {16 summary.accepted += 1;17 } else {return summary;
19 }20 }2122 return summary[object Object];23}summary ← [object Object]
29 { name: "gamma", score: 82 }30];31const summary→ [object Object]: ValidationSummary = summarize(submissions[object Object],[object Object],[object Object], minimumScore70);3233console.log(`accepted=${summary.accepted2};rejected=${summary.rejected1}`);outputaccepted=2;rejected=1
minimumScore ← 90, submissions ← [object Object],[object Object],[object Object]
22 return summary;23}2425const minimumScore→ 90: number = 90;26const submissions→ [object Object],[object Object],[object Object]: Submission[] = [27 { name: "alpha", score: 95 },28 { name: "beta", score: 68 },29 { name: "gamma", score: 82 }30];31const summary: ValidationSummary = summarize(submissions[object Object],[object Object],[object Object], minimumScore90);summary ← [object Object]
8 rejected: number;9};1011function summarize(submissions[object Object],[object Object],[object Object]: Submission[], minimumScore90: number): ValidationSummary {12 const summary→ [object Object]: ValidationSummary = { accepted: 0, rejected: 0 };if (submission.score >= minimumScore)
14for (const submission of submissions) {15 if (submission.score95 >= minimumScore90) {16 summary.accepted += 1;17 } else {return summary;
19 }20 }2122 return summary[object Object];23}summary ← [object Object]
29 { name: "gamma", score: 82 }30];31const summary→ [object Object]: ValidationSummary = summarize(submissions[object Object],[object Object],[object Object], minimumScore90);3233console.log(`accepted=${summary.accepted1};rejected=${summary.rejected2}`);outputaccepted=1;rejected=2