model-key-normalization.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. function cleanupAlias(input: string, preserveSlash: boolean): string {
  2. let value = input.toLowerCase().trim();
  3. value = value.replace(/\bfp[a-z0-9.-]*\b/g, ' ');
  4. value = value.replace(/\btee\b/g, ' ');
  5. if (preserveSlash) {
  6. value = value.replace(/[_\s]+/g, '-');
  7. value = value.replace(/-+/g, '-');
  8. value = value.replace(/\/+/g, '/');
  9. value = value.replace(/\/-+/g, '/');
  10. value = value.replace(/-+\//g, '/');
  11. value = value.replace(/^\/+|\/+$/g, '');
  12. value = value.replace(/^-+|-+$/g, '');
  13. return value;
  14. }
  15. value = value.replace(/[/_\s]+/g, '-');
  16. value = value.replace(/-+/g, '-');
  17. value = value.replace(/^-+|-+$/g, '');
  18. return value;
  19. }
  20. function addDerivedAliases(seed: string, aliases: Set<string>): void {
  21. const slashAlias = cleanupAlias(seed, true);
  22. const flatAlias = cleanupAlias(seed, false);
  23. if (slashAlias) aliases.add(slashAlias);
  24. if (flatAlias) aliases.add(flatAlias);
  25. if (slashAlias) {
  26. aliases.add(slashAlias.replace(/-(free|flash)$/i, ''));
  27. }
  28. if (flatAlias) {
  29. aliases.add(flatAlias.replace(/-(free|flash)$/i, ''));
  30. }
  31. if (slashAlias.includes('/')) {
  32. aliases.add(cleanupAlias(slashAlias.replace(/\//g, ' '), false));
  33. aliases.add(cleanupAlias(slashAlias.replace(/\//g, '-'), false));
  34. const lastPart = slashAlias.split('/').at(-1);
  35. if (lastPart) {
  36. addDerivedAliases(lastPart, aliases);
  37. }
  38. }
  39. }
  40. export function buildModelKeyAliases(input: string): string[] {
  41. const normalized = input.trim().toLowerCase();
  42. if (!normalized) return [];
  43. const aliases = new Set<string>();
  44. const slashIndex = normalized.indexOf('/');
  45. const afterProvider =
  46. slashIndex >= 0 ? normalized.slice(slashIndex + 1) : normalized;
  47. addDerivedAliases(normalized, aliases);
  48. addDerivedAliases(afterProvider, aliases);
  49. return [...aliases].filter((alias) => alias.length > 0);
  50. }