name-suggestion-index
Version:
Canonical common brand names for OpenStreetMap
237 lines • 8.62 kB
TypeScript
import type { Preset } from '@openstreetmap/id-tagging-schema';
import type { HasLocationSet, LocationSet } from '@rapideditor/location-conflation';
/** Tags must always consist of key,value string pairs (no undefined) */
export type OsmTags = Record<string, string>;
/** The supported NSI tree types. */
export type NsiTree = 'brands' | 'operators' | 'transit' | 'flags';
/** Tree properties as defined in `config/trees.json`. */
export interface NsiTreeProperties {
emoji: string;
mainTag: string;
sourceTags?: string[] | undefined;
nameTags: {
primary: string;
alternate: string;
};
}
/**
* A slash-delimited `tree/key/value` path that uniquely identifies an NSI category.
* Examples: `"brands/amenity/fast_food"`, `"operators/route/bus"`, `"flags/man_made/flagpole"`.
*/
export type NsiPath = string;
/** Category-level exclusion patterns (regex strings matched against names). */
export interface NsiExclude {
generic?: string[];
named?: string[];
}
/** Properties for a category (one {@link NsiPath}). */
export interface NsiCategoryProperties {
path: NsiPath;
skipCollection?: boolean;
preserveTags?: string[];
exclude?: NsiExclude;
}
/** A single NSI item representing a brand/operator/network/flag. */
export interface NsiItem extends HasLocationSet {
id: string;
displayName: string;
tags: OsmTags;
locationSet: LocationSet;
matchNames?: string[];
matchTags?: string[];
preserveTags?: string[];
fromTemplate?: boolean;
}
/** A template item that references a source category and generates concrete items. */
export interface NsiTemplateItem {
templateSource: string;
templateInclude?: string[];
templateExclude?: string[];
templateTags: OsmTags;
}
/** A category grouping items under a single {@link NsiPath}. */
export interface NsiCategory {
properties: NsiCategoryProperties;
items: NsiItem[];
/**
* Template items (only present in source data loaded via {@link fileTree.read}).
* Absent in the published `nsi.json` and in caller-supplied data.
*/
templates?: NsiTemplateItem[];
}
/** The full NSI dataset: an object keyed by {@link NsiPath}. */
export type NsiData = Record<NsiPath, NsiCategory>;
export interface NsiDissolved {
dissolved: DissolvedMap;
}
export interface NsiPresets {
presets: Record<string, IDPreset>;
}
/** The in-memory cache holding all NSI items and category data. */
export interface NsiCache {
/** Map of item id → item object. */
id: Map<string, NsiItem>;
/** Object of {@link NsiPath} → category data. */
path: Record<NsiPath, NsiCategory>;
}
/** The type of match a {@link MatchHit} represents. */
export type MatchHitType = 'primary' | 'alternate' | 'excludeGeneric' | 'excludeNamed';
/** A single match result returned by `Matcher.match()`. */
export interface MatchHit {
match: MatchHitType;
itemID?: string;
area?: number;
kv?: string;
nsimple?: string;
pattern?: string;
}
/** One branch of the match index (the data stored under a single `key/value` pair). */
export interface MatchIndexBranch {
primary: Map<string, Set<string>>;
alternate: Map<string, Set<string>>;
excludeGeneric: Map<string, RegExp>;
excludeNamed: Map<string, RegExp>;
}
/** A dissolution record for a Wikidata entity (company closed, merged, etc.). */
export interface WikidataDissolution {
date: string;
countries?: string[];
/** QID of the entity that replaces this one, if any. */
upgrade?: string;
}
/** Logo URLs collected for a Wikidata entity. */
export interface WikidataLogos {
facebook?: string;
twitter?: string;
wikidata?: string;
}
/** Social-identity handles collected for a Wikidata entity. */
export interface WikidataIdentities {
facebook?: string;
instagram?: string;
linkedin?: string;
pinterest?: string;
snapchat?: string;
threads?: string;
tiktok?: string;
twitter?: string;
vk?: string;
website?: string;
weibo?: string;
weixin?: string;
youtube?: string;
youtubeHandle?: string;
}
/** Per-QID entry as written to `dist/wikidata/wikidata.json`. */
export interface WikidataEntry {
label?: string;
description?: string;
logos?: WikidataLogos;
identities?: WikidataIdentities;
dissolutions?: WikidataDissolution[];
officialWebsites?: string[];
urlMatchPatterns?: string[];
locationInfoWebsites?: string[];
}
/** Convenience alias for the inner map of {@link NsiWikidataJSON}, keyed by QID. */
export type WikidataMap = Record<string, WikidataEntry>;
/** Convenience alias for the inner map of {@link NsiDissolved}, keyed by NSI item id. */
export type DissolvedMap = Record<string, WikidataDissolution[]>;
/** Classification for a {@link WikidataWarning}, set by the wikidata script */
export type WikidataWarningCategory = 'unresolved-redirect' | 'deleted' | 'missing-label' | 'replacement' | 'facebook-api' | 'facebook-access' | 'edit-error' | 'other';
/** A single warning entry written to `dist/wikidata/warnings.json`. */
export interface WikidataWarning {
qid: string;
msg: string;
category: WikidataWarningCategory;
}
/** Top-level shape of `dist/nsi.json`. */
export interface NsiJSON {
nsi: NsiData;
}
/** Top-level shape of `dist/trees.json`. */
export interface NsiTreesJSON {
trees: Record<NsiTree, NsiTreeProperties>;
}
/** Top-level shape of `dist/matchGroups.json`. */
export interface NsiMatchGroupsJSON {
matchGroups: Record<string, string[]>;
}
/** Top-level shape of `dist/genericWords.json`. */
export interface NsiGenericWordsJSON {
genericWords: string[];
}
/** Top-level shape of `dist/replacements.json`. */
export interface NsiReplacementsJSON {
replacements: Record<string, {
note: string;
wikidata: string;
}>;
}
/** Top-level shape of `dist/wikidata/wikidata.json`. */
export interface NsiWikidataJSON {
wikidata: WikidataMap;
}
/** Top-level shape of `dist/wikidata/warnings.json`. */
export interface NsiWarningsJSON {
warnings: WikidataWarning[];
}
/**
* Properties that define an iD/Rapid Preset.
*
* Note: `locationSet` and `matchScore` are NSI extensions — they are always
* present on the presets that {@link buildIDPresets} generates, but the
* source iD presets supplied as input do not have them.
*
* @see https://github.com/openstreetmap/id-tagging-schema/blob/main/schemas/preset.json
*/
export interface IDPreset extends Preset {
/** Score for ranking search results */
matchScore?: number;
/** Regexes to match tags that should be preserved - a validator should not try to replace these tags, see NSI#10083 */
preserveTags?: string[];
}
/** A single key/tag entry in the Taginfo data file. */
export interface TaginfoItem {
/** OSM tag key (required). */
key: string;
/** OSM tag value. If omitted, means "all values" (optional). */
value?: string;
/** OSM object types this key/tag can be used for, e.g. `["node", "way", "relation"]` (optional). */
object_types?: string[];
/** How the key/tag is used in this project (optional). */
description?: string;
/** Link to further documentation for this specific key/tag (optional). */
doc_url?: string;
/** Icon URL, should work at 16×16 px on white/light-gray backgrounds (optional). */
icon_url?: string;
}
/** Top-level shape of the generated `dist/taginfo.json` file. */
export interface TaginfoJSON {
/** Data format version — always `1` (required). */
data_format: 1;
/** URL where this project file can be accessed (optional). */
data_url?: string;
/** Timestamp when the project file was last updated, `yyyymmddThhmmssZ` (optional). */
data_updated?: string;
/** Metadata about the project (required). */
project: {
/** Name of the project (required). */
name: string;
/** Short description of the project (required). */
description: string;
/** Home page of the project (required). */
project_url: string;
/** Documentation page for the tags used (optional). */
doc_url?: string;
/** Project logo URL, should work at 16×16 px on white/light-gray backgrounds (optional). */
icon_url?: string;
/** Contact name, required by the taginfo maintainer. */
contact_name: string;
/** Contact email, required by the taginfo maintainer. */
contact_email: string;
};
/** List of keys and tags used by this project. */
tags: TaginfoItem[];
}
//# sourceMappingURL=types.d.ts.map