Files
wehub-resource-sync 2114b14ee0
Sync main into demo / sync (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:35:26 +08:00

41 lines
1.5 KiB
TypeScript

import { WEATHER_CONSTANTS, MAJOR_CITIES } from '../constants';
import defaults from './defaults.json';
import searchableCitiesJson from './searchableCities.json';
import { getWeatherCitySearchTerms } from '../utils/cityNames';
export type { WeatherCityDefinition, WeatherSettings, SearchableCity } from '../types';
import type { WeatherCityDefinition, WeatherSettings, SearchableCity } from '../types';
const savedCities = (defaults as any).savedCities as WeatherCityDefinition[];
const legacyExtraCities = ((defaults as any).legacyExtraCities ?? []) as WeatherCityDefinition[];
const settings = (defaults as any).settings as WeatherSettings;
export const SEARCHABLE_CITIES: SearchableCity[] = searchableCitiesJson as SearchableCity[];
export const WEATHER_CONFIG = {
...WEATHER_CONSTANTS,
savedCities,
settings,
majorCities: MAJOR_CITIES,
} as const;
const ALL: WeatherCityDefinition[] = [...savedCities, ...MAJOR_CITIES, ...legacyExtraCities];
export const WEATHER_CITY_BY_NAME: Record<string, WeatherCityDefinition> = Object.fromEntries(
ALL.map((c) => [c.name, c])
);
const byId: Record<string, WeatherCityDefinition> = {};
for (const c of SEARCHABLE_CITIES) byId[c.id] = c;
for (const c of ALL) byId[c.id] = c;
export const WEATHER_CITY_BY_ID: Record<string, WeatherCityDefinition> = byId;
export function searchCities(query: string): SearchableCity[] {
const q = query.trim().toLowerCase();
if (!q) return [];
return SEARCHABLE_CITIES.filter(
(c) => getWeatherCitySearchTerms(c).some((term) => term.includes(q)),
).slice(0, 30);
}