Bluesky app fork with some witchin' additions 馃挮 witchsky.app
bluesky fork client
at main 51 lines 1.5 kB view raw
1import {parse} from 'bcp-47' 2 3import {dedupArray} from '#/lib/functions' 4import {logger} from '#/logger' 5import {type Schema} from '#/state/persisted/schema' 6 7export function normalizeData(data: Schema) { 8 const next = {...data} 9 10 /** 11 * Normalize language prefs to ensure that these values only contain 2-letter 12 * country codes without region. 13 */ 14 try { 15 const langPrefs = {...next.languagePrefs} 16 langPrefs.primaryLanguage = normalizeLanguageTagToTwoLetterCode( 17 langPrefs.primaryLanguage, 18 ) 19 langPrefs.contentLanguages = dedupArray( 20 langPrefs.contentLanguages.map(lang => 21 normalizeLanguageTagToTwoLetterCode(lang), 22 ), 23 ) 24 langPrefs.postLanguage = langPrefs.postLanguage 25 .split(',') 26 .map(lang => normalizeLanguageTagToTwoLetterCode(lang)) 27 .filter(Boolean) 28 .join(',') 29 langPrefs.postLanguageHistory = dedupArray( 30 langPrefs.postLanguageHistory.map(postLanguage => { 31 return postLanguage 32 .split(',') 33 .map(lang => normalizeLanguageTagToTwoLetterCode(lang)) 34 .filter(Boolean) 35 .join(',') 36 }), 37 ) 38 next.languagePrefs = langPrefs 39 } catch (e: any) { 40 logger.error(`persisted state: failed to normalize language prefs`, { 41 safeMessage: e.message, 42 }) 43 } 44 45 return next 46} 47 48export function normalizeLanguageTagToTwoLetterCode(lang: string) { 49 const result = parse(lang).language 50 return result ?? lang 51}