mirror of
https://gitlab.com/PronounsPage/PronounsPage.git
synced 2025-09-24 05:05:20 -04:00

the #shared alias used by Nuxt cannot be easily disabled and to prevent breackage with jiti, we make use of it
74 lines
2.5 KiB
TypeScript
74 lines
2.5 KiB
TypeScript
import type { Profile, ProfileV1, ValueOpinion, NameOpinion, CustomFlag } from '#shared/profile.ts';
|
|
|
|
const opinions: Record<string, number> = {
|
|
yes: 1,
|
|
jokingly: 2,
|
|
close: 3,
|
|
meh: 0,
|
|
no: -1,
|
|
};
|
|
|
|
const upgradeOpinionsListToV2 = (opinionsListV1: Record<string, number> | undefined): ValueOpinion[] | undefined => {
|
|
if (!opinionsListV1) {
|
|
return undefined;
|
|
}
|
|
return Object.entries(opinionsListV1).map(([value, opinion]) => {
|
|
return { value, opinion: Object.keys(opinions).find((key) => opinions[key] === opinion)! };
|
|
});
|
|
};
|
|
|
|
const downgradeOpinionsListToV1 = (opinionsListV2: ValueOpinion[] | undefined): Record<string, number> | undefined => {
|
|
if (!opinionsListV2) {
|
|
return undefined;
|
|
}
|
|
const opinionsListV1: Record<string, number> = {};
|
|
for (const { value, opinion } of opinionsListV2) {
|
|
opinionsListV1[value] = opinions[opinion];
|
|
}
|
|
return opinionsListV1;
|
|
};
|
|
|
|
const upgradeCustomFlagsListToV2 = (customFlagListV1: Record<string, string> | undefined): CustomFlag[] | undefined => {
|
|
if (!customFlagListV1) {
|
|
return undefined;
|
|
}
|
|
return Object.entries(customFlagListV1).map(([value, name]) => {
|
|
return { value, name } as CustomFlag;
|
|
});
|
|
};
|
|
|
|
const downgradeCustomFlagsToV1 = (customFlagListV2: CustomFlag[] | undefined) => {
|
|
if (!customFlagListV2) {
|
|
return undefined;
|
|
}
|
|
const customFlagListV1: Record<string, string> = {};
|
|
for (const { value, name } of customFlagListV2) {
|
|
customFlagListV1[value] = name;
|
|
}
|
|
return customFlagListV1;
|
|
};
|
|
|
|
export const upgradeToV2 = (profileV1: ProfileV1): Profile => {
|
|
return {
|
|
...profileV1,
|
|
names: upgradeOpinionsListToV2(profileV1.names) as NameOpinion[],
|
|
pronouns: upgradeOpinionsListToV2(profileV1.pronouns)!,
|
|
words: profileV1.words && profileV1.words.map((column) => {
|
|
return { header: null, values: upgradeOpinionsListToV2(column)! };
|
|
}),
|
|
customFlags: upgradeCustomFlagsListToV2(profileV1.customFlags)!,
|
|
};
|
|
};
|
|
|
|
export const downgradeToV1 = (profileV2: Partial<Profile>): Partial<ProfileV1> => {
|
|
return {
|
|
...profileV2,
|
|
names: downgradeOpinionsListToV1(profileV2.names)!,
|
|
pronouns: downgradeOpinionsListToV1(profileV2.pronouns)!,
|
|
words: profileV2.words && profileV2.words.map(({ values }) => {
|
|
return downgradeOpinionsListToV1(values)!;
|
|
}),
|
|
customFlags: downgradeCustomFlagsToV1(profileV2.customFlags)!,
|
|
};
|
|
};
|