Files
my-protfolio/scripts/export-legacy.ts

31 lines
1.8 KiB
TypeScript

// Run only when refreshing the explicit legacy-import fixture, before editing legacy data.
import { mkdirSync, writeFileSync } from 'node:fs';
import { messagesByLocale } from '../src/i18n/content';
import { getProjects } from '../src/data/projects';
import { getExperiences } from '../src/data/experience';
import { getEducation } from '../src/data/education';
import { getMilestones } from '../src/data/milestones';
import { filterTabs, skillsByDiscipline } from '../src/data/skills';
const placeholders: Record<string, string[]> = {
ariaLabel: ['progress'], progressLabel: ['progress'], liveProjectLabel: ['title'],
openGalleryImage: ['caption'], selectGalleryImage: ['index', 'caption'],
imageCounter: ['current', 'total'], logoAlt: ['company'], viewCertificateLabel: ['title'],
};
const fixture = { messages: messagesByLocale, entries: Object.fromEntries(['en', 'fa'].map(locale => [locale, {
projects: getProjects(locale as 'en' | 'fa'), experience: getExperiences(locale as 'en' | 'fa'),
education: [{ id: 'education', ...getEducation(locale as 'en' | 'fa') }],
milestones: getMilestones(locale as 'en' | 'fa'),
skills: filterTabs.map(tab => ({ id: tab.id, label: messagesByLocale[locale as 'en' | 'fa'].skills.filterLabels[tab.id], ...skillsByDiscipline[tab.id] })),
}])) };
mkdirSync('src/seed', { recursive: true });
writeFileSync('src/seed/legacy.json', JSON.stringify(fixture, (key, value) => {
if (typeof value !== 'function') return value;
const names = placeholders[key];
let result = value(...names.map((name, index) => ['progress', 'index', 'current', 'total'].includes(name) ? 98760 + index : `{${name}}`));
names.forEach((name, index) => {
result = result.replaceAll(String(98760 + index), `{${name}}`).replaceAll(new Intl.NumberFormat('fa-IR', { useGrouping: false }).format(98760 + index), `{${name}}`);
});
return result;
}, 2) + '\n');