38 lines
1.3 KiB
TypeScript
38 lines
1.3 KiB
TypeScript
export const USER_LEVELS = {
|
|
NEW: "تازه وارد",
|
|
STANDARD: "استاندارد",
|
|
PRO: "حرفهای",
|
|
MASTER: "استاد",
|
|
SUPERMODEL: "سپورمدل",
|
|
} as const;
|
|
|
|
/** Normalize level from URL slug or query (handles ZWNJ / spacing variants). */
|
|
export function normalizeUserLevel(raw?: string | null): string {
|
|
if (!raw) return "";
|
|
|
|
const text = raw.trim().replace(/\u200c/g, "").replace(/\s+/g, " ");
|
|
|
|
if (text === USER_LEVELS.NEW) return USER_LEVELS.NEW;
|
|
if (text === USER_LEVELS.STANDARD) return USER_LEVELS.STANDARD;
|
|
if (text === USER_LEVELS.MASTER) return USER_LEVELS.MASTER;
|
|
if (text === USER_LEVELS.SUPERMODEL) return USER_LEVELS.SUPERMODEL;
|
|
if (text === USER_LEVELS.PRO || text === "حرفه ای") return USER_LEVELS.PRO;
|
|
|
|
return raw.trim();
|
|
}
|
|
|
|
/** Extract user level token from Persian SEO slug text. */
|
|
export function parseUserLevelFromSlug(fullText: string): string {
|
|
const text = fullText.replace(/\u200c/g, " ");
|
|
|
|
if (text.includes(USER_LEVELS.NEW)) return USER_LEVELS.NEW;
|
|
if (text.includes(USER_LEVELS.STANDARD)) return USER_LEVELS.STANDARD;
|
|
if (text.includes(USER_LEVELS.SUPERMODEL)) return USER_LEVELS.SUPERMODEL;
|
|
if (text.includes(USER_LEVELS.MASTER)) return USER_LEVELS.MASTER;
|
|
if (/حرفه[\s\u200c]*ای/.test(text) || text.includes(USER_LEVELS.PRO)) {
|
|
return USER_LEVELS.PRO;
|
|
}
|
|
|
|
return "";
|
|
}
|