@whiteslove/parsing-lexicon 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +137 -137
  3. package/index.d.ts +374 -374
  4. package/package.json +77 -75
  5. package/src/central-asia-locations.js +211 -211
  6. package/src/central-asia.js +233 -233
  7. package/src/contact.d.ts +44 -44
  8. package/src/contact.js +159 -159
  9. package/src/countries.js +175 -175
  10. package/src/country-context.d.ts +10 -10
  11. package/src/country-context.js +22 -22
  12. package/src/currency.d.ts +14 -14
  13. package/src/currency.js +66 -66
  14. package/src/geo.js +169 -169
  15. package/src/geography-central-asia.js +42 -42
  16. package/src/geography-detection.d.ts +14 -14
  17. package/src/geography-detection.js +64 -64
  18. package/src/geography-display.d.ts +13 -13
  19. package/src/geography-display.js +113 -113
  20. package/src/geography.js +210 -210
  21. package/src/hiring-advanced.js +147 -147
  22. package/src/hiring-candidate-fields.d.ts +9 -9
  23. package/src/hiring-candidate-fields.js +92 -92
  24. package/src/hiring-context.d.ts +64 -64
  25. package/src/hiring-context.js +412 -412
  26. package/src/hiring-language-extensions.d.ts +19 -19
  27. package/src/hiring-language-extensions.js +139 -139
  28. package/src/hiring-languages.js +135 -135
  29. package/src/hiring-location-fields.d.ts +3 -3
  30. package/src/hiring-location-fields.js +53 -53
  31. package/src/hiring-professions-ro.js +191 -191
  32. package/src/hiring-professions.js +437 -437
  33. package/src/hiring-requirements.d.ts +16 -16
  34. package/src/hiring-requirements.js +170 -170
  35. package/src/hiring-salary-context.d.ts +27 -27
  36. package/src/hiring-salary-context.js +76 -76
  37. package/src/hiring-semantics.d.ts +29 -29
  38. package/src/hiring-semantics.js +218 -218
  39. package/src/hiring-skills.d.ts +21 -21
  40. package/src/hiring-skills.js +315 -315
  41. package/src/hiring-source-aliases.d.ts +32 -32
  42. package/src/hiring-source-aliases.js +185 -185
  43. package/src/hiring-source-semantics.d.ts +31 -31
  44. package/src/hiring-source-semantics.js +293 -293
  45. package/src/hiring-temporal.d.ts +15 -15
  46. package/src/hiring-temporal.js +67 -67
  47. package/src/hiring-vacancy-fields.d.ts +5 -5
  48. package/src/hiring-vacancy-fields.js +23 -23
  49. package/src/hiring-work-semantics.d.ts +34 -34
  50. package/src/hiring-work-semantics.js +72 -72
  51. package/src/hiring.js +180 -180
  52. package/src/housing-address.d.ts +18 -18
  53. package/src/housing-address.js +217 -210
  54. package/src/housing-commercial.d.ts +1 -0
  55. package/src/housing-commercial.js +9 -0
  56. package/src/housing-context.d.ts +36 -36
  57. package/src/housing-context.js +183 -183
  58. package/src/housing-features.js +30 -30
  59. package/src/housing-intent.d.ts +9 -9
  60. package/src/housing-intent.js +132 -132
  61. package/src/housing-listing-fields.js +131 -131
  62. package/src/housing-money.d.ts +7 -7
  63. package/src/housing-money.js +102 -102
  64. package/src/housing-source-aliases.d.ts +8 -8
  65. package/src/housing-source-aliases.js +51 -51
  66. package/src/housing-structured.d.ts +55 -55
  67. package/src/housing-structured.js +219 -219
  68. package/src/housing.js +200 -200
  69. package/src/index.js +45 -44
  70. package/src/kz-location-extensions.js +307 -307
  71. package/src/landmarks.js +21 -21
  72. package/src/lexicon-core.js +58 -58
  73. package/src/location-merge.js +106 -106
  74. package/src/locations.js +456 -456
  75. package/src/money-core.d.ts +10 -10
  76. package/src/money-core.js +81 -81
  77. package/src/money-lexicon.d.ts +5 -5
  78. package/src/money-lexicon.js +79 -79
  79. package/src/money.js +154 -154
  80. package/src/normalization.js +384 -384
  81. package/src/odesa-metropolitan.js +144 -144
  82. package/src/romania-geography.js +47 -47
  83. package/src/tashkent-colloquial.js +80 -72
  84. package/src/tashkent-housing-geography.d.ts +38 -38
  85. package/src/tashkent-housing-geography.js +211 -211
  86. package/src/tashkent-pois.js +215 -215
  87. package/src/tashkent-residential-complexes.js +272 -272
  88. package/src/ua-location-extensions-major.js +118 -118
  89. package/src/ua-location-extensions-metro.js +9 -9
  90. package/src/ua-location-extensions-regional.js +246 -246
  91. package/src/ua-secondary-cities.d.ts +2 -2
  92. package/src/ua-secondary-cities.js +57 -57
  93. package/src/ukraine.js +75 -75
  94. package/src/uz-location-extensions.js +259 -259
package/index.d.ts CHANGED
@@ -1,375 +1,375 @@
1
- export type LexiconLanguage = 'all' | 'ru' | 'en' | 'uk' | 'ro' | 'uzLatn' | 'uzCyrl' | 'kaaLat' | 'kaaCyrl' | 'kk';
2
- export type CountryCode = 'UZ' | 'KZ' | 'UA' | 'RO' | 'KG' | 'GE' | 'AZ' | 'AM' | 'MD' | 'TJ' | 'TM' | 'PL' | 'DE' | 'GB' | 'US' | 'CA' | 'CN' | 'JP' | 'KR' | 'TW';
3
- export type AliasMap = Readonly<Partial<Record<LexiconLanguage, readonly string[]>>>;
4
- export type LexiconEntity = Readonly<{
5
- canonical: string;
6
- aliases: AliasMap;
7
- country?: CountryCode;
8
- city?: string;
9
- code?: string;
10
- currency?: string;
11
- region?: string;
12
- type?: string;
13
- status?: string;
14
- priority?: string;
15
- localCanonical?: string;
16
- contextRequired?: boolean;
17
- multiplier?: number;
18
- }>;
19
- export type MetroStation = Readonly<{
20
- canonical: string;
21
- name: string;
22
- type: 'metro';
23
- country: 'UZ';
24
- city: 'Tashkent';
25
- line: string;
26
- labels: Readonly<{ ru: string; en: string }>;
27
- aliases: readonly string[];
28
- re: RegExp;
29
- }>;
30
- export type LocationEntry = Readonly<{
31
- canonical: string;
32
- name: string;
33
- type?: string;
34
- aliases: readonly string[];
35
- re: RegExp;
36
- entityType?: string;
37
- country?: CountryCode;
38
- city?: string;
39
- district?: string;
40
- parent?: string;
41
- confidence?: string;
42
- language?: string;
43
- }>;
44
- export type ResidentialComplexEntry = Readonly<{
45
- canonical: string;
46
- name: string;
47
- aliases: readonly string[];
48
- ambiguous: boolean;
49
- re: RegExp;
50
- }>;
51
- export type PoiEntry = Readonly<{
52
- canonical: string;
53
- name: string;
54
- category: string;
55
- aliases: readonly string[];
56
- re: RegExp;
57
- contextRequired: boolean;
58
- contextRe: RegExp | null;
59
- }>;
60
- export type MetropolitanEntity = Readonly<{
61
- canonical: string;
62
- name: string;
63
- type: string;
64
- aliases: readonly string[];
65
- re: RegExp;
66
- parent: string | null;
67
- cluster: string | null;
68
- contextRequired: boolean;
69
- contextRe: RegExp | null;
70
- }>;
71
- export type SearchCluster = Readonly<{
72
- canonical?: string;
73
- name: string;
74
- type: 'search_cluster';
75
- administrative: false;
76
- country?: CountryCode;
77
- city?: string;
78
- members: readonly string[];
79
- }>;
80
- export type AreaEntry = Readonly<{
81
- canonical: string;
82
- name: string;
83
- type: 'local_area';
84
- country: 'UZ';
85
- city: 'Tashkent';
86
- aliases: readonly string[];
87
- }>;
88
- export type LocationCityDictionary = Readonly<{
89
- districts?: readonly LocationEntry[];
90
- microdistricts?: readonly LocationEntry[];
91
- mahallas?: readonly LocationEntry[];
92
- localAreas?: readonly LocationEntry[];
93
- suburbs?: readonly LocationEntry[];
94
- settlements?: readonly LocationEntry[];
95
- metro?: readonly LocationEntry[] | readonly MetroStation[];
96
- residentialComplexes?: readonly LocationEntry[];
97
- streets?: readonly LocationEntry[];
98
- landmarks?: readonly LocationEntry[];
99
- pois?: readonly LocationEntry[];
100
- searchClusters?: readonly LocationEntry[];
101
- }>;
102
- export type CentralAsiaLocationMatch = Readonly<{
103
- country: 'KZ' | 'UZ' | null;
104
- city: string;
105
- type: string;
106
- key: string;
107
- name: string;
108
- aliases: readonly string[];
109
- district: string | null;
110
- parent: string | null;
111
- confidence: string | null;
112
- language: string | null;
113
- }>;
114
- export type CentralAsiaLocationResult = Readonly<{
115
- city: string | null;
116
- matches: readonly CentralAsiaLocationMatch[];
117
- searchClusters: readonly SearchCluster[];
118
- candidates: readonly Readonly<{ city: string; matches: readonly CentralAsiaLocationMatch[] }>[];
119
- }>;
120
-
121
- export type ProfessionEntry = Readonly<{
122
- id: string;
123
- canonical: string;
124
- group: string;
125
- family: string;
126
- aliases: readonly string[];
127
- strongAliases: readonly string[];
128
- weakAliases: readonly string[];
129
- strongRe: RegExp;
130
- weakRe: RegExp | null;
131
- }>;
132
- export type ProfessionMatch = Readonly<{
133
- id: string;
134
- canonical: string;
135
- group: string;
136
- family: string;
137
- score: number;
138
- strength: 'strong' | 'weak';
139
- matched: string;
140
- }>;
141
- export type SalaryParseResult = Readonly<{
142
- min: number | null;
143
- max: number | null;
144
- currency: string | null;
145
- period: 'hour' | 'day' | 'shift' | 'week' | 'month' | 'year' | 'project' | 'piece' | null;
146
- gross: boolean | null;
147
- negotiable: boolean;
148
- approximate: boolean;
149
- }>;
150
- export type ExperienceParseResult = Readonly<{
151
- requirement: 'none' | 'preferred' | 'required';
152
- minYears: number | null;
153
- maxYears: number | null;
154
- }>;
155
- export type CanonicalMatch<T> = Readonly<{
156
- entry: T;
157
- canonical: string | null;
158
- alias: string;
159
- sourceAlias: string;
160
- normalizedAlias: string;
161
- start: number;
162
- end: number;
163
- }>;
164
- export type LexiconValidationError = Readonly<{
165
- kind: string;
166
- [key: string]: unknown;
167
- }>;
168
- export type LexiconValidationReport = Readonly<{
169
- ok: boolean;
170
- errors: readonly LexiconValidationError[];
171
- }>;
172
-
173
- export const LEXICON_LANGUAGES: readonly LexiconLanguage[];
174
- export const COUNTRY_CODES: readonly CountryCode[];
175
- export function deepFreeze<T>(value: T): Readonly<T>;
176
- export function freezeAliases(aliases?: AliasMap | readonly string[]): AliasMap | readonly string[];
177
- export function lexiconEntity(canonical: string, aliases?: AliasMap, extra?: Record<string, unknown>): LexiconEntity;
178
- export function locationEntity(canonical: string, aliases?: readonly string[], extra?: Record<string, unknown>): LocationEntry;
179
-
180
- export function normalizeUnicode(value: unknown): string;
181
- export function normalizeForMatch(value: unknown): string;
182
- export function foldCyrillicForSearch(value: unknown): string;
183
- export function normalizedAliasKeys(value: unknown, options?: { transliteration?: boolean }): string[];
184
- export function aliasesOf(entry: { aliases?: AliasMap | readonly string[] }): string[];
185
- export function buildAliasIndex<T>(entries: readonly T[], options?: { transliteration?: boolean }): Map<string, T>;
186
- export function getAliasIndex<T>(entries: readonly T[], options?: { transliteration?: boolean }): Map<string, T>;
187
- export function getAliasOwnersIndex<T>(entries: readonly T[], options?: { transliteration?: boolean }): Map<string, ReadonlyArray<Readonly<{ entry: T; sourceAlias: string; searchAlias: string }>>>;
188
- export function findCanonical<T extends { canonical?: string; name?: string; aliases?: AliasMap | readonly string[] }>(value: unknown, entries: readonly T[], options?: { partial?: boolean; transliteration?: boolean }): T | null;
189
- export function findAllCanonical<T extends { canonical?: string; name?: string; aliases?: AliasMap | readonly string[] }>(value: unknown, entries: readonly T[], options?: { transliteration?: boolean }): CanonicalMatch<T>[];
190
- export function collectAliasCollisions(entries: readonly unknown[], options?: { includeSearchFolds?: boolean; allowed?: readonly string[] }): ReadonlyArray<Readonly<{ alias: string; canonicals: readonly string[] }>>;
191
- export function validateAliasCollisions(entries: readonly unknown[], options?: { includeSearchFolds?: boolean; allowed?: readonly string[] }): true;
192
- export function validateLexicon(entries: readonly unknown[], options?: { allowedCollisions?: readonly string[]; allowedLanguageKeys?: readonly LexiconLanguage[]; allowDuplicateCanonicals?: boolean }): LexiconValidationReport;
193
- export function assertValidLexicon(entries: readonly unknown[], options?: { allowedCollisions?: readonly string[]; allowedLanguageKeys?: readonly LexiconLanguage[]; allowDuplicateCanonicals?: boolean }): true;
194
- export function escapeRegex(value: unknown): string;
195
- export function aliasesToRegex(values: readonly string[], flags?: string): RegExp;
196
-
197
- export const COUNTRIES: readonly LexiconEntity[];
198
- export function canonicalCountry(value: unknown): string | null;
199
- export function canonicalCountryCode(value: unknown): CountryCode | null;
200
- export function countryByCode(value: unknown): LexiconEntity | null;
201
-
202
- export const UZ_CITIES: readonly LexiconEntity[];
203
- export const KZ_CITIES: readonly LexiconEntity[];
204
- export const UA_CITIES: readonly LexiconEntity[];
205
- export const RO_CITIES: readonly LexiconEntity[];
206
- export const KG_CITIES: readonly LexiconEntity[];
207
- export const GLOBAL_CITIES: readonly LexiconEntity[];
208
- /** Canonical cross-country city catalog. */
209
- export const CITIES: readonly LexiconEntity[];
210
- export const CITIES_BY_COUNTRY: Readonly<Partial<Record<CountryCode, readonly LexiconEntity[]>>>;
211
- export function canonicalCity(value: unknown, country?: CountryCode | string | null): string | null;
212
- /** @deprecated Use CITIES. */
213
- export const GEOGRAPHY_CITIES: readonly LexiconEntity[];
214
- /** @deprecated Use CITIES_BY_COUNTRY. */
215
- export const GEOGRAPHY_CITIES_BY_COUNTRY: Readonly<Partial<Record<CountryCode, readonly LexiconEntity[]>>>;
216
- /** @deprecated Use canonicalCity. */
217
- export function canonicalAnyCity(value: unknown, country?: CountryCode | string | null): string | null;
218
- export const UA_ADDITIONAL_CITIES: readonly LexiconEntity[];
219
- export const UA_CITY_CATALOG: readonly LexiconEntity[];
220
- export const UA_CITY_HISTORICAL_ALIASES: Readonly<Record<string, readonly string[]>>;
221
- export function canonicalUkraineCity(value: unknown): string | null;
222
- export const UA_LOCATION_TERMS: Readonly<Record<string, readonly string[]>>;
223
-
224
- export const KZ_CITY_ADDITIONS: readonly LexiconEntity[];
225
- export const KZ_CITY_CATALOG: readonly LexiconEntity[];
226
- export const KZ_SEARCH_TARGETS: readonly LexiconEntity[];
227
- export const UZ_CITY_ADDITIONS: readonly LexiconEntity[];
228
- export const UZ_CITY_CATALOG: readonly LexiconEntity[];
229
- export const UZ_SEARCH_TARGETS: readonly LexiconEntity[];
230
- export const KZ_LOCATION_TERMS: Readonly<Record<string, readonly string[]>>;
231
- export const UZ_LOCATION_TERMS: Readonly<Record<string, readonly string[]>>;
232
- export function canonicalKazakhstanCity(value: unknown): string | null;
233
- export function canonicalUzbekistanCity(value: unknown): string | null;
234
- export function canonicalCentralAsiaCity(value: unknown, country?: 'KZ' | 'UZ' | null): string | null;
235
- export function centralAsiaCityAliases(canonical: string, country?: 'KZ' | 'UZ' | null): readonly string[];
236
-
237
- export const TASHKENT_DISTRICTS: readonly LexiconEntity[];
238
- export function canonicalTashkentDistrict(value: unknown): string | null;
239
- export const TASHKENT_METRO: readonly MetroStation[];
240
- export function tashkentMetroStation(value: unknown): MetroStation | null;
241
- export function canonicalTashkentMetro(value: unknown): string | null;
242
- export function tashkentMetroLabels(): Record<string, { ru: string; en: string; line: string }>;
243
- export const TASHKENT_AREAS: Readonly<Record<string, readonly AreaEntry[]>>;
244
- export const TASHKENT_AREA_ADDITIONS: Readonly<Record<string, readonly AreaEntry[]>>;
245
- export const FULL_TASHKENT_AREAS: Readonly<Record<string, readonly AreaEntry[]>>;
246
- export const TASHKENT_RESIDENTIAL_COMPLEXES: readonly ResidentialComplexEntry[];
247
- export function matchTashkentResidentialComplex(value: unknown): ResidentialComplexEntry | null;
248
- export function canonicalTashkentResidentialComplex(value: unknown): string | null;
249
- export const TASHKENT_PARKS: readonly PoiEntry[];
250
- export const TASHKENT_SQUARES: readonly PoiEntry[];
251
- export const TASHKENT_MARKETS: readonly PoiEntry[];
252
- export const TASHKENT_MALLS: readonly PoiEntry[];
253
- export const TASHKENT_ATTRACTIONS: readonly PoiEntry[];
254
- export const TASHKENT_CULTURAL_POIS: readonly PoiEntry[];
255
- export const TASHKENT_TRANSPORT_POIS: readonly PoiEntry[];
256
- export const TASHKENT_UNIVERSITIES: readonly PoiEntry[];
257
- export const TASHKENT_MEDICAL_POIS: readonly PoiEntry[];
258
- export const TASHKENT_LEGACY_LANDMARKS: readonly PoiEntry[];
259
- export const TASHKENT_POI_GROUPS: Readonly<Record<string, readonly PoiEntry[]>>;
260
- export const TASHKENT_LANDMARKS: readonly PoiEntry[];
261
- export function matchTashkentPoi(value: unknown, category?: string | null): PoiEntry | null;
262
-
263
- export const ODESA_LOCAL_AREAS: readonly MetropolitanEntity[];
264
- export const ODESA_MICRODISTRICT_EXTENSIONS: readonly MetropolitanEntity[];
265
- export const ODESA_SUBURBS: readonly MetropolitanEntity[];
266
- export const ODESA_DEVELOPMENT_AREAS: readonly MetropolitanEntity[];
267
- export const ODESA_RIVIERA_ENTITIES: readonly MetropolitanEntity[];
268
- export const ODESA_CONTEXT_POIS: readonly MetropolitanEntity[];
269
- export const ODESA_METROPOLITAN_ENTITIES: readonly MetropolitanEntity[];
270
- export const ODESA_SEARCH_CLUSTERS: readonly SearchCluster[];
271
- export function matchOdesaMetropolitanEntities(value: unknown): Readonly<{ matches: readonly MetropolitanEntity[]; searchClusters: readonly SearchCluster[] }>;
272
- export function matchOdesaMetropolitanEntity(value: unknown, type?: string | null): MetropolitanEntity | null;
273
-
274
- export const UZ_REGIONS: readonly LexiconEntity[];
275
- export const KZ_REGIONS: readonly LexiconEntity[];
276
- export const UA_REGIONS: readonly LexiconEntity[];
277
- export const RO_REGIONS: readonly LexiconEntity[];
278
- export const REGIONS: readonly LexiconEntity[];
279
- export const REGIONS_BY_COUNTRY: Readonly<Partial<Record<CountryCode, readonly LexiconEntity[]>>>;
280
- export function canonicalRegion(value: unknown, country?: CountryCode | string | null): string | null;
281
-
282
- export const LOCATION_LIST_KEYS: readonly string[];
283
- export function locationEntry(name: string, ...aliases: string[]): LocationEntry;
284
- export function locationEntries(rows?: readonly (readonly string[])[]): readonly LocationEntry[];
285
- export function mergeLocationEntries(...lists: readonly LocationEntry[][]): readonly LocationEntry[];
286
- export function mergeLocationCityDictionaries(...dictionaries: readonly LocationCityDictionary[]): LocationCityDictionary;
287
- export function mergeLocationCountries(...countries: readonly Readonly<Record<string, LocationCityDictionary>>[]): Readonly<Record<string, LocationCityDictionary>>;
288
-
289
- export const LOCATION_DICTIONARIES: Readonly<Record<string, Readonly<Record<string, LocationCityDictionary>>>>;
290
- export const UA_EXTRA_LOCATION_DICTIONARIES: Readonly<Record<string, LocationCityDictionary>>;
291
- export const UA_REGION_ENTRIES: readonly LocationEntry[];
292
- export const UA_SECONDARY_CITIES: Readonly<Record<string, { aliases: readonly string[]; re: RegExp; microdistricts?: readonly LocationEntry[] }>>;
293
- export function matchUkraineRegion(text: unknown): LocationEntry | null;
294
- export function matchUkraineSecondaryCity(text: unknown): ({ city: string; aliases: readonly string[]; re: RegExp; microdistricts?: readonly LocationEntry[] }) | null;
295
- export function dictionaryFor(countryCode: CountryCode, city: string): LocationCityDictionary | null;
296
- export function locationCities(countryCode: CountryCode): Readonly<Record<string, LocationCityDictionary>>;
297
- export function matchDictionaryLocation(text: unknown, countryCode: CountryCode, city?: string | null): { city: string; type: string; name: string; aliases: readonly string[] } | null;
298
-
299
- export const KZ_LOCATION_EXTENSIONS: Readonly<Record<string, LocationCityDictionary>>;
300
- export const KZ_SEARCH_CLUSTERS: readonly SearchCluster[];
301
- export const KZ_AMBIGUOUS_LOCAL_NAMES: readonly string[];
302
- export const UZ_LOCATION_EXTENSIONS: Readonly<Record<string, LocationCityDictionary>>;
303
- export const UZ_AMBIGUOUS_LOCAL_NAMES: readonly string[];
304
- export const UZ_KARAKALPAK_LANGUAGE_TAGS: readonly string[];
305
- export const KZ_EXPANDED_LOCATION_DICTIONARIES: Readonly<Record<string, LocationCityDictionary>>;
306
- export const UZ_EXPANDED_LOCATION_DICTIONARIES: Readonly<Record<string, LocationCityDictionary>>;
307
- export const CENTRAL_ASIA_LOCATION_DICTIONARIES: Readonly<Record<'KZ' | 'UZ', Readonly<Record<string, LocationCityDictionary>>>>;
308
- export function centralAsiaLocationCities(countryCode: 'KZ' | 'UZ'): Readonly<Record<string, LocationCityDictionary>>;
309
- export function centralAsiaLocationCity(countryCode: 'KZ' | 'UZ', city: string): LocationCityDictionary | null;
310
- export function matchCentralAsiaLocationEntities(text: unknown, countryCode: 'KZ' | 'UZ', preferredCity?: string | null): CentralAsiaLocationResult;
311
- export function matchCentralAsiaLocationEntity(text: unknown, countryCode: 'KZ' | 'UZ', preferredCity?: string | null, type?: string | null): CentralAsiaLocationMatch | null;
312
-
313
- export const GENERIC_LANDMARK_TERMS: readonly LexiconEntity[];
314
-
315
- export const ADDRESS_TERMS: Readonly<Record<string, LexiconEntity>>;
316
- export const DEAL_TYPES: readonly LexiconEntity[];
317
- export const HOUSING_OCCUPANCY_TYPES: readonly LexiconEntity[];
318
- export const PROPERTY_TYPES: readonly LexiconEntity[];
319
- export const ROOM_TERMS: Readonly<Record<string, LexiconEntity>>;
320
- export const FLOOR_TERMS: Readonly<Record<string, LexiconEntity>>;
321
- export const AREA_TERMS: Readonly<Record<string, LexiconEntity>>;
322
- export const CURRENCIES: readonly LexiconEntity[];
323
- export const SELLER_TERMS: Readonly<Record<string, LexiconEntity>>;
324
- export const DEPOSIT_TERMS: Readonly<Record<string, LexiconEntity>>;
325
- export const UTILITY_TERMS: Readonly<Record<string, LexiconEntity>>;
326
- export const APPLIANCE_TERMS: Readonly<Record<string, LexiconEntity>>;
327
- export const AMENITY_TERMS: Readonly<Record<string, LexiconEntity>>;
328
- export const TENANT_TERMS: Readonly<Record<string, LexiconEntity>>;
329
- export function flattenAliases(item: { aliases?: AliasMap }): string[];
330
-
331
- export const HIRING_INTENT: Readonly<Record<string, LexiconEntity>>;
332
- export const CANDIDATE_FIELD_TERMS: Readonly<Record<string, LexiconEntity>>;
333
- export const JOB_FIELD_TERMS: Readonly<Record<string, LexiconEntity>>;
334
- export const EMPLOYMENT_TYPES: readonly LexiconEntity[];
335
- export const WORK_MODES: readonly LexiconEntity[];
336
- export const SCHEDULE_TERMS: readonly LexiconEntity[];
337
- export const PROBATION_TERMS: Readonly<Record<string, LexiconEntity>>;
338
- export const EXPERIENCE_REQUIREMENTS: Readonly<Record<string, LexiconEntity>>;
339
- export const SKILL_FIELD_TERMS: Readonly<Record<string, LexiconEntity>>;
340
- export const BENEFIT_TERMS: Readonly<Record<string, LexiconEntity>>;
341
- export const SENIORITY_TERMS: readonly LexiconEntity[];
342
- export const PROFESSION_TERMS: readonly LexiconEntity[];
343
- export const PERSON_LINEAGE_TERMS: Readonly<{ female: readonly string[]; male: readonly string[] }>;
344
-
345
- export const CURRENCY_TERMS: readonly LexiconEntity[];
346
- export const SALARY_PERIODS: readonly LexiconEntity[];
347
- export const SALARY_MODIFIERS: Readonly<Record<string, LexiconEntity>>;
348
- export const NUMBER_MULTIPLIERS: readonly LexiconEntity[];
349
- export function parseSalary(value: unknown): SalaryParseResult | null;
350
- export function salaryCurrency(value: unknown): string | null;
351
- export function salaryPeriod(value: unknown): SalaryParseResult['period'];
352
- export function currencyAliases(code: string): readonly string[];
353
-
354
- export const PROFESSION_CATALOG: readonly ProfessionEntry[];
355
- export const PROFESSION_GROUPS: ReadonlyArray<Readonly<{ id: string; canonical: string; family: string; aliases: readonly string[]; professions: readonly string[] }>>;
356
- export const SENIORITY_LEVELS: ReadonlyArray<Readonly<{ canonical: string; aliases: readonly string[]; score: number; re: RegExp }>>;
357
- export function matchProfessions(value: unknown, options?: { limit?: number; allowWeak?: boolean }): ProfessionMatch[];
358
- export function matchProfession(value: unknown, options?: { allowWeak?: boolean }): ProfessionMatch | null;
359
- export function matchProfessionGroup(value: unknown): Readonly<{ id: string; canonical: string; family: string; aliases: readonly string[]; professions: readonly string[]; score: number; matched: string }> | null;
360
- export function matchSeniority(value: unknown): Readonly<{ canonical: string; score: number; matched: string; index: number }> | null;
361
- export function professionByCanonical(canonical: string): ProfessionEntry | null;
362
-
363
- export const HIRING_INTENT_EXTENSIONS: Readonly<Record<'candidate' | 'employer', LexiconEntity>>;
364
- export const HIRING_NEGATIVE_INTENT: readonly LexiconEntity[];
365
- export const VACANCY_FIELD_TERMS: Readonly<Record<string, LexiconEntity>>;
366
- export const WORK_SCHEDULE_EXTENSIONS: readonly LexiconEntity[];
367
- export const EXPERIENCE_MODIFIERS: readonly LexiconEntity[];
368
- export function detectHiringNegativeIntent(value: unknown): Readonly<{ canonical: string; matched: string }> | null;
369
- export function classifyHiringIntent(value: unknown): Readonly<{ intent: 'candidate' | 'employer' | 'negative' | null; reason: string | null; matched: string | null; confidence: number }>;
370
- export function parseExperience(value: unknown): ExperienceParseResult | null;
371
-
372
- export * from './src/housing-context.js';
373
- export * from './src/hiring-context.js';
374
- export * from './src/housing-intent.js';
1
+ export type LexiconLanguage = 'all' | 'ru' | 'en' | 'uk' | 'ro' | 'uzLatn' | 'uzCyrl' | 'kaaLat' | 'kaaCyrl' | 'kk';
2
+ export type CountryCode = 'UZ' | 'KZ' | 'UA' | 'RO' | 'KG' | 'GE' | 'AZ' | 'AM' | 'MD' | 'TJ' | 'TM' | 'PL' | 'DE' | 'GB' | 'US' | 'CA' | 'CN' | 'JP' | 'KR' | 'TW';
3
+ export type AliasMap = Readonly<Partial<Record<LexiconLanguage, readonly string[]>>>;
4
+ export type LexiconEntity = Readonly<{
5
+ canonical: string;
6
+ aliases: AliasMap;
7
+ country?: CountryCode;
8
+ city?: string;
9
+ code?: string;
10
+ currency?: string;
11
+ region?: string;
12
+ type?: string;
13
+ status?: string;
14
+ priority?: string;
15
+ localCanonical?: string;
16
+ contextRequired?: boolean;
17
+ multiplier?: number;
18
+ }>;
19
+ export type MetroStation = Readonly<{
20
+ canonical: string;
21
+ name: string;
22
+ type: 'metro';
23
+ country: 'UZ';
24
+ city: 'Tashkent';
25
+ line: string;
26
+ labels: Readonly<{ ru: string; en: string }>;
27
+ aliases: readonly string[];
28
+ re: RegExp;
29
+ }>;
30
+ export type LocationEntry = Readonly<{
31
+ canonical: string;
32
+ name: string;
33
+ type?: string;
34
+ aliases: readonly string[];
35
+ re: RegExp;
36
+ entityType?: string;
37
+ country?: CountryCode;
38
+ city?: string;
39
+ district?: string;
40
+ parent?: string;
41
+ confidence?: string;
42
+ language?: string;
43
+ }>;
44
+ export type ResidentialComplexEntry = Readonly<{
45
+ canonical: string;
46
+ name: string;
47
+ aliases: readonly string[];
48
+ ambiguous: boolean;
49
+ re: RegExp;
50
+ }>;
51
+ export type PoiEntry = Readonly<{
52
+ canonical: string;
53
+ name: string;
54
+ category: string;
55
+ aliases: readonly string[];
56
+ re: RegExp;
57
+ contextRequired: boolean;
58
+ contextRe: RegExp | null;
59
+ }>;
60
+ export type MetropolitanEntity = Readonly<{
61
+ canonical: string;
62
+ name: string;
63
+ type: string;
64
+ aliases: readonly string[];
65
+ re: RegExp;
66
+ parent: string | null;
67
+ cluster: string | null;
68
+ contextRequired: boolean;
69
+ contextRe: RegExp | null;
70
+ }>;
71
+ export type SearchCluster = Readonly<{
72
+ canonical?: string;
73
+ name: string;
74
+ type: 'search_cluster';
75
+ administrative: false;
76
+ country?: CountryCode;
77
+ city?: string;
78
+ members: readonly string[];
79
+ }>;
80
+ export type AreaEntry = Readonly<{
81
+ canonical: string;
82
+ name: string;
83
+ type: 'local_area';
84
+ country: 'UZ';
85
+ city: 'Tashkent';
86
+ aliases: readonly string[];
87
+ }>;
88
+ export type LocationCityDictionary = Readonly<{
89
+ districts?: readonly LocationEntry[];
90
+ microdistricts?: readonly LocationEntry[];
91
+ mahallas?: readonly LocationEntry[];
92
+ localAreas?: readonly LocationEntry[];
93
+ suburbs?: readonly LocationEntry[];
94
+ settlements?: readonly LocationEntry[];
95
+ metro?: readonly LocationEntry[] | readonly MetroStation[];
96
+ residentialComplexes?: readonly LocationEntry[];
97
+ streets?: readonly LocationEntry[];
98
+ landmarks?: readonly LocationEntry[];
99
+ pois?: readonly LocationEntry[];
100
+ searchClusters?: readonly LocationEntry[];
101
+ }>;
102
+ export type CentralAsiaLocationMatch = Readonly<{
103
+ country: 'KZ' | 'UZ' | null;
104
+ city: string;
105
+ type: string;
106
+ key: string;
107
+ name: string;
108
+ aliases: readonly string[];
109
+ district: string | null;
110
+ parent: string | null;
111
+ confidence: string | null;
112
+ language: string | null;
113
+ }>;
114
+ export type CentralAsiaLocationResult = Readonly<{
115
+ city: string | null;
116
+ matches: readonly CentralAsiaLocationMatch[];
117
+ searchClusters: readonly SearchCluster[];
118
+ candidates: readonly Readonly<{ city: string; matches: readonly CentralAsiaLocationMatch[] }>[];
119
+ }>;
120
+
121
+ export type ProfessionEntry = Readonly<{
122
+ id: string;
123
+ canonical: string;
124
+ group: string;
125
+ family: string;
126
+ aliases: readonly string[];
127
+ strongAliases: readonly string[];
128
+ weakAliases: readonly string[];
129
+ strongRe: RegExp;
130
+ weakRe: RegExp | null;
131
+ }>;
132
+ export type ProfessionMatch = Readonly<{
133
+ id: string;
134
+ canonical: string;
135
+ group: string;
136
+ family: string;
137
+ score: number;
138
+ strength: 'strong' | 'weak';
139
+ matched: string;
140
+ }>;
141
+ export type SalaryParseResult = Readonly<{
142
+ min: number | null;
143
+ max: number | null;
144
+ currency: string | null;
145
+ period: 'hour' | 'day' | 'shift' | 'week' | 'month' | 'year' | 'project' | 'piece' | null;
146
+ gross: boolean | null;
147
+ negotiable: boolean;
148
+ approximate: boolean;
149
+ }>;
150
+ export type ExperienceParseResult = Readonly<{
151
+ requirement: 'none' | 'preferred' | 'required';
152
+ minYears: number | null;
153
+ maxYears: number | null;
154
+ }>;
155
+ export type CanonicalMatch<T> = Readonly<{
156
+ entry: T;
157
+ canonical: string | null;
158
+ alias: string;
159
+ sourceAlias: string;
160
+ normalizedAlias: string;
161
+ start: number;
162
+ end: number;
163
+ }>;
164
+ export type LexiconValidationError = Readonly<{
165
+ kind: string;
166
+ [key: string]: unknown;
167
+ }>;
168
+ export type LexiconValidationReport = Readonly<{
169
+ ok: boolean;
170
+ errors: readonly LexiconValidationError[];
171
+ }>;
172
+
173
+ export const LEXICON_LANGUAGES: readonly LexiconLanguage[];
174
+ export const COUNTRY_CODES: readonly CountryCode[];
175
+ export function deepFreeze<T>(value: T): Readonly<T>;
176
+ export function freezeAliases(aliases?: AliasMap | readonly string[]): AliasMap | readonly string[];
177
+ export function lexiconEntity(canonical: string, aliases?: AliasMap, extra?: Record<string, unknown>): LexiconEntity;
178
+ export function locationEntity(canonical: string, aliases?: readonly string[], extra?: Record<string, unknown>): LocationEntry;
179
+
180
+ export function normalizeUnicode(value: unknown): string;
181
+ export function normalizeForMatch(value: unknown): string;
182
+ export function foldCyrillicForSearch(value: unknown): string;
183
+ export function normalizedAliasKeys(value: unknown, options?: { transliteration?: boolean }): string[];
184
+ export function aliasesOf(entry: { aliases?: AliasMap | readonly string[] }): string[];
185
+ export function buildAliasIndex<T>(entries: readonly T[], options?: { transliteration?: boolean }): Map<string, T>;
186
+ export function getAliasIndex<T>(entries: readonly T[], options?: { transliteration?: boolean }): Map<string, T>;
187
+ export function getAliasOwnersIndex<T>(entries: readonly T[], options?: { transliteration?: boolean }): Map<string, ReadonlyArray<Readonly<{ entry: T; sourceAlias: string; searchAlias: string }>>>;
188
+ export function findCanonical<T extends { canonical?: string; name?: string; aliases?: AliasMap | readonly string[] }>(value: unknown, entries: readonly T[], options?: { partial?: boolean; transliteration?: boolean }): T | null;
189
+ export function findAllCanonical<T extends { canonical?: string; name?: string; aliases?: AliasMap | readonly string[] }>(value: unknown, entries: readonly T[], options?: { transliteration?: boolean }): CanonicalMatch<T>[];
190
+ export function collectAliasCollisions(entries: readonly unknown[], options?: { includeSearchFolds?: boolean; allowed?: readonly string[] }): ReadonlyArray<Readonly<{ alias: string; canonicals: readonly string[] }>>;
191
+ export function validateAliasCollisions(entries: readonly unknown[], options?: { includeSearchFolds?: boolean; allowed?: readonly string[] }): true;
192
+ export function validateLexicon(entries: readonly unknown[], options?: { allowedCollisions?: readonly string[]; allowedLanguageKeys?: readonly LexiconLanguage[]; allowDuplicateCanonicals?: boolean }): LexiconValidationReport;
193
+ export function assertValidLexicon(entries: readonly unknown[], options?: { allowedCollisions?: readonly string[]; allowedLanguageKeys?: readonly LexiconLanguage[]; allowDuplicateCanonicals?: boolean }): true;
194
+ export function escapeRegex(value: unknown): string;
195
+ export function aliasesToRegex(values: readonly string[], flags?: string): RegExp;
196
+
197
+ export const COUNTRIES: readonly LexiconEntity[];
198
+ export function canonicalCountry(value: unknown): string | null;
199
+ export function canonicalCountryCode(value: unknown): CountryCode | null;
200
+ export function countryByCode(value: unknown): LexiconEntity | null;
201
+
202
+ export const UZ_CITIES: readonly LexiconEntity[];
203
+ export const KZ_CITIES: readonly LexiconEntity[];
204
+ export const UA_CITIES: readonly LexiconEntity[];
205
+ export const RO_CITIES: readonly LexiconEntity[];
206
+ export const KG_CITIES: readonly LexiconEntity[];
207
+ export const GLOBAL_CITIES: readonly LexiconEntity[];
208
+ /** Canonical cross-country city catalog. */
209
+ export const CITIES: readonly LexiconEntity[];
210
+ export const CITIES_BY_COUNTRY: Readonly<Partial<Record<CountryCode, readonly LexiconEntity[]>>>;
211
+ export function canonicalCity(value: unknown, country?: CountryCode | string | null): string | null;
212
+ /** @deprecated Use CITIES. */
213
+ export const GEOGRAPHY_CITIES: readonly LexiconEntity[];
214
+ /** @deprecated Use CITIES_BY_COUNTRY. */
215
+ export const GEOGRAPHY_CITIES_BY_COUNTRY: Readonly<Partial<Record<CountryCode, readonly LexiconEntity[]>>>;
216
+ /** @deprecated Use canonicalCity. */
217
+ export function canonicalAnyCity(value: unknown, country?: CountryCode | string | null): string | null;
218
+ export const UA_ADDITIONAL_CITIES: readonly LexiconEntity[];
219
+ export const UA_CITY_CATALOG: readonly LexiconEntity[];
220
+ export const UA_CITY_HISTORICAL_ALIASES: Readonly<Record<string, readonly string[]>>;
221
+ export function canonicalUkraineCity(value: unknown): string | null;
222
+ export const UA_LOCATION_TERMS: Readonly<Record<string, readonly string[]>>;
223
+
224
+ export const KZ_CITY_ADDITIONS: readonly LexiconEntity[];
225
+ export const KZ_CITY_CATALOG: readonly LexiconEntity[];
226
+ export const KZ_SEARCH_TARGETS: readonly LexiconEntity[];
227
+ export const UZ_CITY_ADDITIONS: readonly LexiconEntity[];
228
+ export const UZ_CITY_CATALOG: readonly LexiconEntity[];
229
+ export const UZ_SEARCH_TARGETS: readonly LexiconEntity[];
230
+ export const KZ_LOCATION_TERMS: Readonly<Record<string, readonly string[]>>;
231
+ export const UZ_LOCATION_TERMS: Readonly<Record<string, readonly string[]>>;
232
+ export function canonicalKazakhstanCity(value: unknown): string | null;
233
+ export function canonicalUzbekistanCity(value: unknown): string | null;
234
+ export function canonicalCentralAsiaCity(value: unknown, country?: 'KZ' | 'UZ' | null): string | null;
235
+ export function centralAsiaCityAliases(canonical: string, country?: 'KZ' | 'UZ' | null): readonly string[];
236
+
237
+ export const TASHKENT_DISTRICTS: readonly LexiconEntity[];
238
+ export function canonicalTashkentDistrict(value: unknown): string | null;
239
+ export const TASHKENT_METRO: readonly MetroStation[];
240
+ export function tashkentMetroStation(value: unknown): MetroStation | null;
241
+ export function canonicalTashkentMetro(value: unknown): string | null;
242
+ export function tashkentMetroLabels(): Record<string, { ru: string; en: string; line: string }>;
243
+ export const TASHKENT_AREAS: Readonly<Record<string, readonly AreaEntry[]>>;
244
+ export const TASHKENT_AREA_ADDITIONS: Readonly<Record<string, readonly AreaEntry[]>>;
245
+ export const FULL_TASHKENT_AREAS: Readonly<Record<string, readonly AreaEntry[]>>;
246
+ export const TASHKENT_RESIDENTIAL_COMPLEXES: readonly ResidentialComplexEntry[];
247
+ export function matchTashkentResidentialComplex(value: unknown): ResidentialComplexEntry | null;
248
+ export function canonicalTashkentResidentialComplex(value: unknown): string | null;
249
+ export const TASHKENT_PARKS: readonly PoiEntry[];
250
+ export const TASHKENT_SQUARES: readonly PoiEntry[];
251
+ export const TASHKENT_MARKETS: readonly PoiEntry[];
252
+ export const TASHKENT_MALLS: readonly PoiEntry[];
253
+ export const TASHKENT_ATTRACTIONS: readonly PoiEntry[];
254
+ export const TASHKENT_CULTURAL_POIS: readonly PoiEntry[];
255
+ export const TASHKENT_TRANSPORT_POIS: readonly PoiEntry[];
256
+ export const TASHKENT_UNIVERSITIES: readonly PoiEntry[];
257
+ export const TASHKENT_MEDICAL_POIS: readonly PoiEntry[];
258
+ export const TASHKENT_LEGACY_LANDMARKS: readonly PoiEntry[];
259
+ export const TASHKENT_POI_GROUPS: Readonly<Record<string, readonly PoiEntry[]>>;
260
+ export const TASHKENT_LANDMARKS: readonly PoiEntry[];
261
+ export function matchTashkentPoi(value: unknown, category?: string | null): PoiEntry | null;
262
+
263
+ export const ODESA_LOCAL_AREAS: readonly MetropolitanEntity[];
264
+ export const ODESA_MICRODISTRICT_EXTENSIONS: readonly MetropolitanEntity[];
265
+ export const ODESA_SUBURBS: readonly MetropolitanEntity[];
266
+ export const ODESA_DEVELOPMENT_AREAS: readonly MetropolitanEntity[];
267
+ export const ODESA_RIVIERA_ENTITIES: readonly MetropolitanEntity[];
268
+ export const ODESA_CONTEXT_POIS: readonly MetropolitanEntity[];
269
+ export const ODESA_METROPOLITAN_ENTITIES: readonly MetropolitanEntity[];
270
+ export const ODESA_SEARCH_CLUSTERS: readonly SearchCluster[];
271
+ export function matchOdesaMetropolitanEntities(value: unknown): Readonly<{ matches: readonly MetropolitanEntity[]; searchClusters: readonly SearchCluster[] }>;
272
+ export function matchOdesaMetropolitanEntity(value: unknown, type?: string | null): MetropolitanEntity | null;
273
+
274
+ export const UZ_REGIONS: readonly LexiconEntity[];
275
+ export const KZ_REGIONS: readonly LexiconEntity[];
276
+ export const UA_REGIONS: readonly LexiconEntity[];
277
+ export const RO_REGIONS: readonly LexiconEntity[];
278
+ export const REGIONS: readonly LexiconEntity[];
279
+ export const REGIONS_BY_COUNTRY: Readonly<Partial<Record<CountryCode, readonly LexiconEntity[]>>>;
280
+ export function canonicalRegion(value: unknown, country?: CountryCode | string | null): string | null;
281
+
282
+ export const LOCATION_LIST_KEYS: readonly string[];
283
+ export function locationEntry(name: string, ...aliases: string[]): LocationEntry;
284
+ export function locationEntries(rows?: readonly (readonly string[])[]): readonly LocationEntry[];
285
+ export function mergeLocationEntries(...lists: readonly LocationEntry[][]): readonly LocationEntry[];
286
+ export function mergeLocationCityDictionaries(...dictionaries: readonly LocationCityDictionary[]): LocationCityDictionary;
287
+ export function mergeLocationCountries(...countries: readonly Readonly<Record<string, LocationCityDictionary>>[]): Readonly<Record<string, LocationCityDictionary>>;
288
+
289
+ export const LOCATION_DICTIONARIES: Readonly<Record<string, Readonly<Record<string, LocationCityDictionary>>>>;
290
+ export const UA_EXTRA_LOCATION_DICTIONARIES: Readonly<Record<string, LocationCityDictionary>>;
291
+ export const UA_REGION_ENTRIES: readonly LocationEntry[];
292
+ export const UA_SECONDARY_CITIES: Readonly<Record<string, { aliases: readonly string[]; re: RegExp; microdistricts?: readonly LocationEntry[] }>>;
293
+ export function matchUkraineRegion(text: unknown): LocationEntry | null;
294
+ export function matchUkraineSecondaryCity(text: unknown): ({ city: string; aliases: readonly string[]; re: RegExp; microdistricts?: readonly LocationEntry[] }) | null;
295
+ export function dictionaryFor(countryCode: CountryCode, city: string): LocationCityDictionary | null;
296
+ export function locationCities(countryCode: CountryCode): Readonly<Record<string, LocationCityDictionary>>;
297
+ export function matchDictionaryLocation(text: unknown, countryCode: CountryCode, city?: string | null): { city: string; type: string; name: string; aliases: readonly string[] } | null;
298
+
299
+ export const KZ_LOCATION_EXTENSIONS: Readonly<Record<string, LocationCityDictionary>>;
300
+ export const KZ_SEARCH_CLUSTERS: readonly SearchCluster[];
301
+ export const KZ_AMBIGUOUS_LOCAL_NAMES: readonly string[];
302
+ export const UZ_LOCATION_EXTENSIONS: Readonly<Record<string, LocationCityDictionary>>;
303
+ export const UZ_AMBIGUOUS_LOCAL_NAMES: readonly string[];
304
+ export const UZ_KARAKALPAK_LANGUAGE_TAGS: readonly string[];
305
+ export const KZ_EXPANDED_LOCATION_DICTIONARIES: Readonly<Record<string, LocationCityDictionary>>;
306
+ export const UZ_EXPANDED_LOCATION_DICTIONARIES: Readonly<Record<string, LocationCityDictionary>>;
307
+ export const CENTRAL_ASIA_LOCATION_DICTIONARIES: Readonly<Record<'KZ' | 'UZ', Readonly<Record<string, LocationCityDictionary>>>>;
308
+ export function centralAsiaLocationCities(countryCode: 'KZ' | 'UZ'): Readonly<Record<string, LocationCityDictionary>>;
309
+ export function centralAsiaLocationCity(countryCode: 'KZ' | 'UZ', city: string): LocationCityDictionary | null;
310
+ export function matchCentralAsiaLocationEntities(text: unknown, countryCode: 'KZ' | 'UZ', preferredCity?: string | null): CentralAsiaLocationResult;
311
+ export function matchCentralAsiaLocationEntity(text: unknown, countryCode: 'KZ' | 'UZ', preferredCity?: string | null, type?: string | null): CentralAsiaLocationMatch | null;
312
+
313
+ export const GENERIC_LANDMARK_TERMS: readonly LexiconEntity[];
314
+
315
+ export const ADDRESS_TERMS: Readonly<Record<string, LexiconEntity>>;
316
+ export const DEAL_TYPES: readonly LexiconEntity[];
317
+ export const HOUSING_OCCUPANCY_TYPES: readonly LexiconEntity[];
318
+ export const PROPERTY_TYPES: readonly LexiconEntity[];
319
+ export const ROOM_TERMS: Readonly<Record<string, LexiconEntity>>;
320
+ export const FLOOR_TERMS: Readonly<Record<string, LexiconEntity>>;
321
+ export const AREA_TERMS: Readonly<Record<string, LexiconEntity>>;
322
+ export const CURRENCIES: readonly LexiconEntity[];
323
+ export const SELLER_TERMS: Readonly<Record<string, LexiconEntity>>;
324
+ export const DEPOSIT_TERMS: Readonly<Record<string, LexiconEntity>>;
325
+ export const UTILITY_TERMS: Readonly<Record<string, LexiconEntity>>;
326
+ export const APPLIANCE_TERMS: Readonly<Record<string, LexiconEntity>>;
327
+ export const AMENITY_TERMS: Readonly<Record<string, LexiconEntity>>;
328
+ export const TENANT_TERMS: Readonly<Record<string, LexiconEntity>>;
329
+ export function flattenAliases(item: { aliases?: AliasMap }): string[];
330
+
331
+ export const HIRING_INTENT: Readonly<Record<string, LexiconEntity>>;
332
+ export const CANDIDATE_FIELD_TERMS: Readonly<Record<string, LexiconEntity>>;
333
+ export const JOB_FIELD_TERMS: Readonly<Record<string, LexiconEntity>>;
334
+ export const EMPLOYMENT_TYPES: readonly LexiconEntity[];
335
+ export const WORK_MODES: readonly LexiconEntity[];
336
+ export const SCHEDULE_TERMS: readonly LexiconEntity[];
337
+ export const PROBATION_TERMS: Readonly<Record<string, LexiconEntity>>;
338
+ export const EXPERIENCE_REQUIREMENTS: Readonly<Record<string, LexiconEntity>>;
339
+ export const SKILL_FIELD_TERMS: Readonly<Record<string, LexiconEntity>>;
340
+ export const BENEFIT_TERMS: Readonly<Record<string, LexiconEntity>>;
341
+ export const SENIORITY_TERMS: readonly LexiconEntity[];
342
+ export const PROFESSION_TERMS: readonly LexiconEntity[];
343
+ export const PERSON_LINEAGE_TERMS: Readonly<{ female: readonly string[]; male: readonly string[] }>;
344
+
345
+ export const CURRENCY_TERMS: readonly LexiconEntity[];
346
+ export const SALARY_PERIODS: readonly LexiconEntity[];
347
+ export const SALARY_MODIFIERS: Readonly<Record<string, LexiconEntity>>;
348
+ export const NUMBER_MULTIPLIERS: readonly LexiconEntity[];
349
+ export function parseSalary(value: unknown): SalaryParseResult | null;
350
+ export function salaryCurrency(value: unknown): string | null;
351
+ export function salaryPeriod(value: unknown): SalaryParseResult['period'];
352
+ export function currencyAliases(code: string): readonly string[];
353
+
354
+ export const PROFESSION_CATALOG: readonly ProfessionEntry[];
355
+ export const PROFESSION_GROUPS: ReadonlyArray<Readonly<{ id: string; canonical: string; family: string; aliases: readonly string[]; professions: readonly string[] }>>;
356
+ export const SENIORITY_LEVELS: ReadonlyArray<Readonly<{ canonical: string; aliases: readonly string[]; score: number; re: RegExp }>>;
357
+ export function matchProfessions(value: unknown, options?: { limit?: number; allowWeak?: boolean }): ProfessionMatch[];
358
+ export function matchProfession(value: unknown, options?: { allowWeak?: boolean }): ProfessionMatch | null;
359
+ export function matchProfessionGroup(value: unknown): Readonly<{ id: string; canonical: string; family: string; aliases: readonly string[]; professions: readonly string[]; score: number; matched: string }> | null;
360
+ export function matchSeniority(value: unknown): Readonly<{ canonical: string; score: number; matched: string; index: number }> | null;
361
+ export function professionByCanonical(canonical: string): ProfessionEntry | null;
362
+
363
+ export const HIRING_INTENT_EXTENSIONS: Readonly<Record<'candidate' | 'employer', LexiconEntity>>;
364
+ export const HIRING_NEGATIVE_INTENT: readonly LexiconEntity[];
365
+ export const VACANCY_FIELD_TERMS: Readonly<Record<string, LexiconEntity>>;
366
+ export const WORK_SCHEDULE_EXTENSIONS: readonly LexiconEntity[];
367
+ export const EXPERIENCE_MODIFIERS: readonly LexiconEntity[];
368
+ export function detectHiringNegativeIntent(value: unknown): Readonly<{ canonical: string; matched: string }> | null;
369
+ export function classifyHiringIntent(value: unknown): Readonly<{ intent: 'candidate' | 'employer' | 'negative' | null; reason: string | null; matched: string | null; confidence: number }>;
370
+ export function parseExperience(value: unknown): ExperienceParseResult | null;
371
+
372
+ export * from './src/housing-context.js';
373
+ export * from './src/hiring-context.js';
374
+ export * from './src/housing-intent.js';
375
375
  export * from './src/housing-structured.js';