fix(ui): полный справочник стран и городов как в VPS Tracker
quality / commitlint (push) Skipped
CD / update-wiki (push) Successful in 5s
quality / changes (push) Successful in 4s
quality / docker-check (push) Skipped
quality / web (push) Successful in 45s
quality / api (push) Successful in 36s
CD / quality (push) Successful in 1m30s
CD / publish (push) Successful in 1m51s
quality / commitlint (push) Skipped
CD / update-wiki (push) Successful in 5s
quality / changes (push) Successful in 4s
quality / docker-check (push) Skipped
quality / web (push) Successful in 45s
quality / api (push) Successful in 36s
CD / quality (push) Successful in 1m30s
CD / publish (push) Successful in 1m51s
Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Vendored
+76
@@ -0,0 +1,76 @@
|
||||
/**
|
||||
* Стандартизированный справочник стран (ISO 3166-1 alpha-2) с русскими названиями.
|
||||
* Источник: общедоступный справочник. Не зависит от данных в БД vps-tracker.
|
||||
*/
|
||||
interface CountryRef {
|
||||
/** ISO 3166-1 alpha-2 код */
|
||||
code: string;
|
||||
/** Русское название */
|
||||
name: string;
|
||||
/** Английское название */
|
||||
nameEn: string;
|
||||
}
|
||||
declare const COUNTRIES: readonly CountryRef[];
|
||||
declare const COUNTRY_BY_CODE: Record<string, CountryRef>;
|
||||
declare const COUNTRY_BY_NAME_RU: Record<string, CountryRef>;
|
||||
|
||||
/**
|
||||
* Стандартизированный справочник городов по странам.
|
||||
* Используется в фильтрах VPS и форме редактирования.
|
||||
* Не зависит от данных в БД vps-tracker — общедоступный статичный справочник.
|
||||
*/
|
||||
|
||||
interface CityRef {
|
||||
/** ISO 3166-1 alpha-2 код страны */
|
||||
countryCode: string;
|
||||
/** Русское название города */
|
||||
name: string;
|
||||
/** Английское название города */
|
||||
nameEn: string;
|
||||
}
|
||||
/**
|
||||
* Топ-города по странам (включая города с крупными дата-центрами).
|
||||
* Список намеренно ограничен — расширяется по мере необходимости.
|
||||
*/
|
||||
declare const CITIES: readonly CityRef[];
|
||||
declare const CITY_BY_NAME_RU: Record<string, CityRef>;
|
||||
/** Найти город в справочнике по русскому названию. */
|
||||
declare function resolveCityRef(cityName: string): CityRef | undefined;
|
||||
/** Страна из справочника для города (если есть привязка). */
|
||||
declare function resolveCountryForCity(cityName: string): CountryRef | undefined;
|
||||
interface CityLocationRow {
|
||||
city?: string | null;
|
||||
country?: string | null;
|
||||
}
|
||||
/** Проверить, относится ли город к выбранной стране (справочник или данные VPS). */
|
||||
declare function cityMatchesCountry(cityName: string, countryName: string, rows?: readonly CityLocationRow[]): boolean;
|
||||
/** Опции городов: из VPS и опционально справочника, опционально по стране. */
|
||||
declare function buildCityOptions(rows: readonly CityLocationRow[] | undefined, countryName?: string, options?: {
|
||||
includeCatalog?: boolean;
|
||||
}): {
|
||||
value: string;
|
||||
label: string;
|
||||
}[];
|
||||
/** Страна для города: справочник, иначе первая запись VPS с таким городом. */
|
||||
declare function resolveCountryForCityFromRows(cityName: string, rows: readonly CityLocationRow[] | undefined): string | undefined;
|
||||
interface CityOption extends CityRef {
|
||||
country: CountryRef;
|
||||
}
|
||||
/** Список городов с привязкой к стране. */
|
||||
declare function listCities(countryCode?: string): CityOption[];
|
||||
/** Список стран, у которых есть города в справочнике. */
|
||||
declare function countriesWithCities(): CountryRef[];
|
||||
|
||||
/**
|
||||
* Канонические коды {loc} для hostname (из naming seed / docs).
|
||||
* Ключ — русское имя города (lower case).
|
||||
*/
|
||||
declare const CANONICAL_LOC_CODES: Record<string, string>;
|
||||
/** Детерминированный уникальный loc-код для города (hostname {loc}). */
|
||||
declare function locCodeForCity(city: Pick<CityRef, 'name' | 'nameEn' | 'countryCode'>, usedCodes: ReadonlySet<string>): string;
|
||||
/** Все города каталога с выделенными loc-кодами (без коллизий). */
|
||||
declare function catalogCitiesWithLocCodes(): Array<CityRef & {
|
||||
locCode: string;
|
||||
}>;
|
||||
|
||||
export { CANONICAL_LOC_CODES, CITIES, CITY_BY_NAME_RU, COUNTRIES, COUNTRY_BY_CODE, COUNTRY_BY_NAME_RU, type CityLocationRow, type CityOption, type CityRef, type CountryRef, buildCityOptions, catalogCitiesWithLocCodes, cityMatchesCountry, countriesWithCities, listCities, locCodeForCity, resolveCityRef, resolveCountryForCity, resolveCountryForCityFromRows };
|
||||
Vendored
+34
@@ -0,0 +1,34 @@
|
||||
import {
|
||||
CANONICAL_LOC_CODES,
|
||||
CITIES,
|
||||
CITY_BY_NAME_RU,
|
||||
COUNTRIES,
|
||||
COUNTRY_BY_CODE,
|
||||
COUNTRY_BY_NAME_RU,
|
||||
buildCityOptions,
|
||||
catalogCitiesWithLocCodes,
|
||||
cityMatchesCountry,
|
||||
countriesWithCities,
|
||||
listCities,
|
||||
locCodeForCity,
|
||||
resolveCityRef,
|
||||
resolveCountryForCity,
|
||||
resolveCountryForCityFromRows
|
||||
} from "../chunk-FK3U7DSV.js";
|
||||
export {
|
||||
CANONICAL_LOC_CODES,
|
||||
CITIES,
|
||||
CITY_BY_NAME_RU,
|
||||
COUNTRIES,
|
||||
COUNTRY_BY_CODE,
|
||||
COUNTRY_BY_NAME_RU,
|
||||
buildCityOptions,
|
||||
catalogCitiesWithLocCodes,
|
||||
cityMatchesCountry,
|
||||
countriesWithCities,
|
||||
listCities,
|
||||
locCodeForCity,
|
||||
resolveCityRef,
|
||||
resolveCountryForCity,
|
||||
resolveCountryForCityFromRows
|
||||
};
|
||||
Reference in New Issue
Block a user