mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2026-08-20 13:31:44 +10:00
Finding 4 — consumer-count verification: @reactive-resume/utils/date → 1 consumer (packages/import/src/json-resume.tsx) @reactive-resume/utils/html → 1 consumer (packages/import/src/json-resume.tsx) @reactive-resume/utils/level → 1 consumer (packages/import/src/json-resume.tsx) @reactive-resume/utils/url → 4 consumers (auth, api/ai, import, server) — SKIPPED, stays in utils @reactive-resume/utils/field → 1 consumer (packages/fonts/src/index.ts) Move date/html/level source + test files into packages/import and update json-resume.tsx imports. Inline the two-line unique() helper into fonts/src/index.ts and drop the ./field subpath. Drop the three moved subpaths from packages/utils exports. Claude-Session: https://claude.ai/code/session_012Bnvt1MghwHj4qQRxuQUGa
52 lines
1.5 KiB
TypeScript
52 lines
1.5 KiB
TypeScript
// ponytail: Intl replaces the 12-line MONTH_NAMES array; pinned to en-US so output is stable
|
|
const fmt = new Intl.DateTimeFormat("en-US", { month: "long" });
|
|
|
|
function getMonthName(month: string | undefined): string {
|
|
const index = Number.parseInt(month ?? "1", 10) - 1;
|
|
if (index < 0 || index > 11) return "undefined";
|
|
return fmt.format(new Date(2000, index, 1));
|
|
}
|
|
|
|
/**
|
|
* Formats a partial ISO 8601 date string (YYYY, YYYY-MM, or YYYY-MM-DD)
|
|
* into a human-readable format like "January 2024" or "January 15, 2024".
|
|
*/
|
|
export function formatDate(date: string, includeDay = false): string {
|
|
const parts = date.split("-");
|
|
|
|
if (parts.length >= 2) {
|
|
const [year, month] = parts;
|
|
const monthName = getMonthName(month);
|
|
|
|
if (parts.length === 3 && includeDay) {
|
|
return `${monthName} ${parts[2]}, ${year}`;
|
|
}
|
|
|
|
return `${monthName} ${year}`;
|
|
}
|
|
|
|
// YYYY only
|
|
return date;
|
|
}
|
|
|
|
/**
|
|
* Formats a date range from start and end dates.
|
|
* Returns "Start - End", "Start - Present" if no end, or just the end date if no start.
|
|
*/
|
|
export function formatPeriod(startDate?: string, endDate?: string): string {
|
|
if (!startDate && !endDate) return "";
|
|
if (!startDate) return endDate || "";
|
|
if (!endDate) return `${formatDate(startDate)} - Present`;
|
|
|
|
return `${formatDate(startDate)} - ${formatDate(endDate)}`;
|
|
}
|
|
|
|
/**
|
|
* Formats a single date with day included (e.g., "January 15, 2024").
|
|
* Falls back to month-year or year-only for partial dates.
|
|
*/
|
|
export function formatSingleDate(date?: string): string {
|
|
if (!date) return "";
|
|
return formatDate(date, true);
|
|
}
|