Code Organization Patterns
Helper Composition
Small helpers are easier to test and can be composed into a larger transformation.
helper composition
Helper composition means each helper does one job and another function connects the steps.
Helper Composition
helpers.ts
Replay: real traced execution (multi-file project)
function normalize(text: string): string {
return text.trim().toLowerCase();
}
function slugify(text: string): string {
return text.replace(" ", "-");
}
function buildSlug(title: string): string {
const normalized: string = normalize(title);
return slugify(normalized);
}
const pageTitle: string = "TypeScript Basics";
const slug: string = buildSlug(pageTitle);
console.log(`slug=${slug}`);
function normalize(text: string): string {
return text.trim().toLowerCase();
}
function slugify(text: string): string {
return text.replace(" ", "-");
}
function buildSlug(title: string): string {
const normalized: string = normalize(title);
return slugify(normalized);
}
const pageTitle: string = "Helper Design";
const slug: string = buildSlug(pageTitle);
console.log(`slug=${slug}`);
function normalize(text: string): string {
return text.trim().toLowerCase();
}
function slugify(text: string): string {
return text.replace(" ", "-");
}
function buildSlug(title: string): string {
const normalized: string = normalize(title);
return slugify(normalized);
}
const pageTitle: string = "Config Objects";
const slug: string = buildSlug(pageTitle);
console.log(`slug=${slug}`);
pageTitle ← TypeScript Basics
11 return slugify(normalized);12}1314const pageTitle→ TypeScript Basics: string = "TypeScript Basics"; //@pageTitle="Helper Design", "Config Objects"15const slug: string = buildSlug(pageTitleTypeScript Basics);function buildSlug(title: string): string
6 return text.replace(" ", "-");7}89function buildSlug(titleTypeScript Basics: string): string {10 const normalized: string = normalize(titleTypeScript Basics);11 return slugify(normalized);function normalize(text: string): string
1function normalize(textTypeScript Basics: string): string {2 return textTypeScript Basics.trim().toLowerCase();3}normalized ← typescript basics
9function buildSlug(title: string): string {10 const normalized→ typescript basics: string = normalize(titleTypeScript Basics);11 return slugify(normalizedtypescript basics);12}function slugify(text: string): string
2 return text.trim().toLowerCase();3}45function slugify(texttypescript basics: string): string {6 return texttypescript basics.replace(" ", "-");7}slug ← typescript-basics
14const pageTitle: string = "TypeScript Basics"; //@pageTitle="Helper Design", "Config Objects"15const slug→ typescript-basics: string = buildSlug(pageTitleTypeScript Basics);1617console.log(`slug=${slugtypescript-basics}`);outputslug=typescript-basics
pageTitle ← Helper Design
11 return slugify(normalized);12}1314const pageTitle→ Helper Design: string = "Helper Design";15const slug: string = buildSlug(pageTitleHelper Design);function buildSlug(title: string): string
6 return text.replace(" ", "-");7}89function buildSlug(titleHelper Design: string): string {10 const normalized: string = normalize(titleHelper Design);11 return slugify(normalized);function normalize(text: string): string
1function normalize(textHelper Design: string): string {2 return textHelper Design.trim().toLowerCase();3}normalized ← helper design
9function buildSlug(title: string): string {10 const normalized→ helper design: string = normalize(titleHelper Design);11 return slugify(normalizedhelper design);12}function slugify(text: string): string
2 return text.trim().toLowerCase();3}45function slugify(texthelper design: string): string {6 return texthelper design.replace(" ", "-");7}slug ← helper-design
14const pageTitle: string = "Helper Design";15const slug→ helper-design: string = buildSlug(pageTitleHelper Design);1617console.log(`slug=${slughelper-design}`);outputslug=helper-design
pageTitle ← Config Objects
11 return slugify(normalized);12}1314const pageTitle→ Config Objects: string = "Config Objects";15const slug: string = buildSlug(pageTitleConfig Objects);function buildSlug(title: string): string
6 return text.replace(" ", "-");7}89function buildSlug(titleConfig Objects: string): string {10 const normalized: string = normalize(titleConfig Objects);11 return slugify(normalized);function normalize(text: string): string
1function normalize(textConfig Objects: string): string {2 return textConfig Objects.trim().toLowerCase();3}normalized ← config objects
9function buildSlug(title: string): string {10 const normalized→ config objects: string = normalize(titleConfig Objects);11 return slugify(normalizedconfig objects);12}function slugify(text: string): string
2 return text.trim().toLowerCase();3}45function slugify(textconfig objects: string): string {6 return textconfig objects.replace(" ", "-");7}slug ← config-objects
14const pageTitle: string = "Config Objects";15const slug→ config-objects: string = buildSlug(pageTitleConfig Objects);1617console.log(`slug=${slugconfig-objects}`);outputslug=config-objects