@whiteslove/parsing-lexicon 0.2.0
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.
- package/LICENSE +21 -0
- package/README.md +137 -0
- package/index.d.ts +375 -0
- package/package.json +75 -0
- package/src/central-asia-locations.js +211 -0
- package/src/central-asia.js +233 -0
- package/src/contact.d.ts +44 -0
- package/src/contact.js +159 -0
- package/src/countries.js +175 -0
- package/src/country-context.d.ts +10 -0
- package/src/country-context.js +22 -0
- package/src/currency.d.ts +14 -0
- package/src/currency.js +66 -0
- package/src/geo.js +169 -0
- package/src/geography-central-asia.js +42 -0
- package/src/geography-detection.d.ts +14 -0
- package/src/geography-detection.js +64 -0
- package/src/geography-display.d.ts +13 -0
- package/src/geography-display.js +113 -0
- package/src/geography.js +210 -0
- package/src/hiring-advanced.js +147 -0
- package/src/hiring-candidate-fields.d.ts +9 -0
- package/src/hiring-candidate-fields.js +92 -0
- package/src/hiring-context.d.ts +64 -0
- package/src/hiring-context.js +412 -0
- package/src/hiring-language-extensions.d.ts +19 -0
- package/src/hiring-language-extensions.js +139 -0
- package/src/hiring-languages.js +135 -0
- package/src/hiring-location-fields.d.ts +3 -0
- package/src/hiring-location-fields.js +53 -0
- package/src/hiring-professions-ro.js +191 -0
- package/src/hiring-professions.js +437 -0
- package/src/hiring-requirements.d.ts +16 -0
- package/src/hiring-requirements.js +170 -0
- package/src/hiring-salary-context.d.ts +27 -0
- package/src/hiring-salary-context.js +76 -0
- package/src/hiring-semantics.d.ts +29 -0
- package/src/hiring-semantics.js +218 -0
- package/src/hiring-skills.d.ts +21 -0
- package/src/hiring-skills.js +315 -0
- package/src/hiring-source-aliases.d.ts +32 -0
- package/src/hiring-source-aliases.js +186 -0
- package/src/hiring-source-semantics.d.ts +31 -0
- package/src/hiring-source-semantics.js +293 -0
- package/src/hiring-temporal.d.ts +15 -0
- package/src/hiring-temporal.js +67 -0
- package/src/hiring-vacancy-fields.d.ts +5 -0
- package/src/hiring-vacancy-fields.js +23 -0
- package/src/hiring-work-semantics.d.ts +34 -0
- package/src/hiring-work-semantics.js +72 -0
- package/src/hiring.js +180 -0
- package/src/housing-address.d.ts +18 -0
- package/src/housing-address.js +210 -0
- package/src/housing-context.d.ts +36 -0
- package/src/housing-context.js +183 -0
- package/src/housing-features.js +30 -0
- package/src/housing-intent.d.ts +9 -0
- package/src/housing-intent.js +132 -0
- package/src/housing-listing-fields.js +131 -0
- package/src/housing-money.d.ts +7 -0
- package/src/housing-money.js +102 -0
- package/src/housing-source-aliases.d.ts +8 -0
- package/src/housing-source-aliases.js +51 -0
- package/src/housing-structured.d.ts +55 -0
- package/src/housing-structured.js +219 -0
- package/src/housing.js +200 -0
- package/src/index.js +44 -0
- package/src/kz-location-extensions.js +307 -0
- package/src/landmarks.js +21 -0
- package/src/lexicon-core.js +58 -0
- package/src/location-merge.js +106 -0
- package/src/locations.js +456 -0
- package/src/money-core.d.ts +10 -0
- package/src/money-core.js +81 -0
- package/src/money-lexicon.d.ts +5 -0
- package/src/money-lexicon.js +79 -0
- package/src/money.js +154 -0
- package/src/normalization.js +384 -0
- package/src/odesa-metropolitan.js +145 -0
- package/src/romania-geography.js +47 -0
- package/src/tashkent-colloquial.js +72 -0
- package/src/tashkent-housing-geography.d.ts +38 -0
- package/src/tashkent-housing-geography.js +211 -0
- package/src/tashkent-pois.js +215 -0
- package/src/tashkent-residential-complexes.js +272 -0
- package/src/ua-location-extensions-major.js +118 -0
- package/src/ua-location-extensions-metro.js +9 -0
- package/src/ua-location-extensions-regional.js +246 -0
- package/src/ua-secondary-cities.d.ts +2 -0
- package/src/ua-secondary-cities.js +57 -0
- package/src/ukraine.js +75 -0
- package/src/uz-location-extensions.js +259 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 MARHARYTA KUBAI
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# @whiteslove/parsing-lexicon
|
|
2
|
+
|
|
3
|
+
Deterministic multilingual parsing primitives shared by Whiteslove housing and hiring services.
|
|
4
|
+
|
|
5
|
+
The package is the canonical home for lexical data, normalization and reusable deterministic extraction. It is intentionally network-free and does **not** contain UI copy, persistence rules, source orchestration or consumer-specific business logic.
|
|
6
|
+
|
|
7
|
+
## What it covers
|
|
8
|
+
|
|
9
|
+
### Geography
|
|
10
|
+
|
|
11
|
+
- Countries and multilingual aliases for the markets used by Whiteslove services.
|
|
12
|
+
- Canonical city, region, district, microdistrict, locality and metro matching.
|
|
13
|
+
- Uzbekistan and Kazakhstan location extensions.
|
|
14
|
+
- Ukraine city/region catalog with current and historical names, major/regional city detail and metro/location extensions.
|
|
15
|
+
- Tashkent districts, metro, colloquial areas, residential complexes and POIs.
|
|
16
|
+
- Odesa metropolitan entities with separate administrative, suburb/locality, informal-area, development-area, POI and search-cluster semantics.
|
|
17
|
+
- Normalization for apostrophe/dash variants and Cyrillic search folding across RU/UZ/KZ/UA input.
|
|
18
|
+
|
|
19
|
+
### Housing
|
|
20
|
+
|
|
21
|
+
- Deal/action and listing-kind taxonomy.
|
|
22
|
+
- Property/building type, condition, layout, furniture and listing-status context.
|
|
23
|
+
- Rooms, bedrooms, floors, total floors, building year and area extraction.
|
|
24
|
+
- Deposit, prepayment, utilities and commission/payment context.
|
|
25
|
+
- Seller/agency/owner confidence and no-commission semantics.
|
|
26
|
+
- Tenant policies, documents, financing, availability and location relations.
|
|
27
|
+
- Infrastructure/proximity extraction such as walking time to metro.
|
|
28
|
+
|
|
29
|
+
### Hiring
|
|
30
|
+
|
|
31
|
+
- Candidate vs vacancy intent and non-content/spam classification.
|
|
32
|
+
- Section-aware vacancy/CV parsing.
|
|
33
|
+
- Profession taxonomy and profession context without duplicating consumer technology-skill catalogs.
|
|
34
|
+
- Salary range, currency and pay-period extraction.
|
|
35
|
+
- Experience requirements and seniority.
|
|
36
|
+
- Work mode, employment types, schedules and probation.
|
|
37
|
+
- Languages, CEFR levels and requirement relation (`required`, `preferred`, `notRequired`, `candidateHas`).
|
|
38
|
+
- Work authorization, visa sponsorship, relocation, contracts, benefits and hiring status context.
|
|
39
|
+
|
|
40
|
+
## Architecture
|
|
41
|
+
|
|
42
|
+
Consumers should resolve data in this order:
|
|
43
|
+
|
|
44
|
+
```text
|
|
45
|
+
structured source fields
|
|
46
|
+
-> shared canonical lexicon
|
|
47
|
+
-> deterministic parser
|
|
48
|
+
-> AI fallback / enrichment
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Lexical aliases belong here. Consumers keep source adapters, persistence, ranking/filtering semantics and UI/API contracts.
|
|
52
|
+
|
|
53
|
+
The package must remain dependency-light and must never require a runtime lexicon HTTP service, Redis or a message broker.
|
|
54
|
+
|
|
55
|
+
## Usage
|
|
56
|
+
|
|
57
|
+
```js
|
|
58
|
+
import {
|
|
59
|
+
canonicalCity,
|
|
60
|
+
canonicalTashkentMetro,
|
|
61
|
+
normalizeForMatch,
|
|
62
|
+
parseHousingStructured,
|
|
63
|
+
parseHiringContext,
|
|
64
|
+
parseHiringSalary,
|
|
65
|
+
} from '@whiteslove/parsing-lexicon';
|
|
66
|
+
|
|
67
|
+
canonicalCity('Қарағанды', 'KZ');
|
|
68
|
+
// Karaganda
|
|
69
|
+
|
|
70
|
+
canonicalTashkentMetro('метро Максим Горький');
|
|
71
|
+
// Buyuk Ipak Yoli
|
|
72
|
+
|
|
73
|
+
normalizeForMatch('Oʻzbekiston');
|
|
74
|
+
// o zbekiston
|
|
75
|
+
|
|
76
|
+
parseHousingStructured('3 xona, 5/9, 78 m², depozit 500$, metroga 5 minut piyoda');
|
|
77
|
+
|
|
78
|
+
parseHiringSalary('Salary: $3,000–4,500 per month');
|
|
79
|
+
|
|
80
|
+
parseHiringContext(
|
|
81
|
+
'Senior Frontend Engineer. English B2 required. Remote. Visa sponsorship available.',
|
|
82
|
+
{ mode: 'vacancy', title: 'Senior Frontend Engineer' },
|
|
83
|
+
);
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Subpath exports are available for consumers that need narrower modules, including `./geo`, `./locations`, `./housing-context`, `./housing-structured`, `./hiring-context`, `./hiring-professions` and `./money`.
|
|
87
|
+
|
|
88
|
+
## Data-quality rules
|
|
89
|
+
|
|
90
|
+
- Add aliases to the existing canonical entity instead of creating source-specific regex tables.
|
|
91
|
+
- Keep administrative entities distinct from colloquial/search concepts.
|
|
92
|
+
- Preserve ambiguity guards where a bare term can mean several things.
|
|
93
|
+
- Structured source fields take precedence over inferred values.
|
|
94
|
+
- Add a regression for every production parsing bug.
|
|
95
|
+
- Canonical dictionaries are immutable at runtime.
|
|
96
|
+
- Duplicate canonical/alias entries and unsupported language-key drift are covered by invariants.
|
|
97
|
+
|
|
98
|
+
## Lexicon statistics
|
|
99
|
+
|
|
100
|
+
Snapshot for `c509d92` (2026-08-25). The audit traverses exported lexicon data from `src/`, excludes functions, regular expressions and obvious service/path strings, then normalizes strings with Unicode NFKC, trim, whitespace collapse and lowercase.
|
|
101
|
+
|
|
102
|
+
| Metric | Count |
|
|
103
|
+
| --- | ---: |
|
|
104
|
+
| Alias/translation-like string occurrences across exports | 153,617 |
|
|
105
|
+
| Unique alias/translation strings, exact | 17,681 |
|
|
106
|
+
| **Unique alias/translation strings, normalized** | **17,397** |
|
|
107
|
+
| All exported lexicon strings, normalized | 17,406 |
|
|
108
|
+
| Normalization merge groups | 282 |
|
|
109
|
+
|
|
110
|
+
The occurrence count is intentionally much larger than the unique count because aggregate modules re-export the same canonical datasets. For package size and vocabulary breadth, the normalized unique count is the useful number.
|
|
111
|
+
|
|
112
|
+
### Vocabulary by domain
|
|
113
|
+
|
|
114
|
+
| Domain | Occurrences across exports | Unique exact | Unique normalized |
|
|
115
|
+
| --- | ---: | ---: | ---: |
|
|
116
|
+
| Geography / locations | 64,898 | 10,149 | **9,967** |
|
|
117
|
+
| Hiring — professions & skills | 6,738 | 2,350 | **2,324** |
|
|
118
|
+
| Hiring — other semantics | 3,592 | 2,589 | **2,558** |
|
|
119
|
+
| Housing | 2,554 | 1,975 | **1,971** |
|
|
120
|
+
| Hiring — languages | 552 | 495 | **478** |
|
|
121
|
+
| Country / source aliases | 170 | 126 | **126** |
|
|
122
|
+
|
|
123
|
+
Domain rows are not additive: the same canonical string can be reachable through multiple exported structures and categories.
|
|
124
|
+
|
|
125
|
+
Language totals are not inferred from script alone because many valid aliases are intentionally shared or untagged (for example names that are identical in RU/UK or EN/UZ Latin). A language-by-language table should therefore be generated only from explicitly language-tagged data rather than guessed from Unicode characters.
|
|
126
|
+
|
|
127
|
+
## Development
|
|
128
|
+
|
|
129
|
+
Requires Node.js 20+.
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
npm install
|
|
133
|
+
npm test
|
|
134
|
+
npm pack
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
`npm pack` produces the distributable `@whiteslove/parsing-lexicon` tarball from the files declared in `package.json`.
|
package/index.d.ts
ADDED
|
@@ -0,0 +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';
|
|
375
|
+
export * from './src/housing-structured.js';
|
package/package.json
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@whiteslove/parsing-lexicon",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Shared deterministic multilingual parsing lexicon for Whiteslove housing and hiring services",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/AmoneMisa/parsing-lexicon.git"
|
|
8
|
+
},
|
|
9
|
+
"type": "module",
|
|
10
|
+
"main": "./src/index.js",
|
|
11
|
+
"types": "./index.d.ts",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": { "types": "./index.d.ts", "import": "./src/index.js" },
|
|
14
|
+
"./lexicon-core": "./src/lexicon-core.js",
|
|
15
|
+
"./normalization": "./src/normalization.js",
|
|
16
|
+
"./countries": "./src/countries.js",
|
|
17
|
+
"./country-context": { "types": "./src/country-context.d.ts", "import": "./src/country-context.js" },
|
|
18
|
+
"./geo": "./src/geo.js",
|
|
19
|
+
"./geography": "./src/geography.js",
|
|
20
|
+
"./geography-display": { "types": "./src/geography-display.d.ts", "import": "./src/geography-display.js" },
|
|
21
|
+
"./geography-detection": { "types": "./src/geography-detection.d.ts", "import": "./src/geography-detection.js" },
|
|
22
|
+
"./central-asia": "./src/central-asia.js",
|
|
23
|
+
"./ukraine": "./src/ukraine.js",
|
|
24
|
+
"./location-merge": "./src/location-merge.js",
|
|
25
|
+
"./locations": "./src/locations.js",
|
|
26
|
+
"./kz-location-extensions": "./src/kz-location-extensions.js",
|
|
27
|
+
"./uz-location-extensions": "./src/uz-location-extensions.js",
|
|
28
|
+
"./central-asia-locations": "./src/central-asia-locations.js",
|
|
29
|
+
"./ua-location-extensions-major": "./src/ua-location-extensions-major.js",
|
|
30
|
+
"./ua-location-extensions-regional": "./src/ua-location-extensions-regional.js",
|
|
31
|
+
"./ua-location-extensions-metro": "./src/ua-location-extensions-metro.js",
|
|
32
|
+
"./landmarks": "./src/landmarks.js",
|
|
33
|
+
"./tashkent-colloquial": "./src/tashkent-colloquial.js",
|
|
34
|
+
"./tashkent-residential-complexes": "./src/tashkent-residential-complexes.js",
|
|
35
|
+
"./tashkent-pois": "./src/tashkent-pois.js",
|
|
36
|
+
"./tashkent-housing-geography": { "types": "./src/tashkent-housing-geography.d.ts", "import": "./src/tashkent-housing-geography.js" },
|
|
37
|
+
"./odesa-metropolitan": "./src/odesa-metropolitan.js",
|
|
38
|
+
"./housing": "./src/housing.js",
|
|
39
|
+
"./housing-intent": { "types": "./src/housing-intent.d.ts", "import": "./src/housing-intent.js" },
|
|
40
|
+
"./housing-context": { "types": "./src/housing-context.d.ts", "import": "./src/housing-context.js" },
|
|
41
|
+
"./housing-address": { "types": "./src/housing-address.d.ts", "import": "./src/housing-address.js" },
|
|
42
|
+
"./housing-structured": { "types": "./src/housing-structured.d.ts", "import": "./src/housing-structured.js" },
|
|
43
|
+
"./housing-source-aliases": { "types": "./src/housing-source-aliases.d.ts", "import": "./src/housing-source-aliases.js" },
|
|
44
|
+
"./hiring": "./src/hiring.js",
|
|
45
|
+
"./hiring-languages": "./src/hiring-languages.js",
|
|
46
|
+
"./hiring-language-extensions": { "types": "./src/hiring-language-extensions.d.ts", "import": "./src/hiring-language-extensions.js" },
|
|
47
|
+
"./hiring-context": { "types": "./src/hiring-context.d.ts", "import": "./src/hiring-context.js" },
|
|
48
|
+
"./hiring-source-aliases": { "types": "./src/hiring-source-aliases.d.ts", "import": "./src/hiring-source-aliases.js" },
|
|
49
|
+
"./hiring-source-semantics": { "types": "./src/hiring-source-semantics.d.ts", "import": "./src/hiring-source-semantics.js" },
|
|
50
|
+
"./hiring-requirements": { "types": "./src/hiring-requirements.d.ts", "import": "./src/hiring-requirements.js" },
|
|
51
|
+
"./hiring-semantics": { "types": "./src/hiring-semantics.d.ts", "import": "./src/hiring-semantics.js" },
|
|
52
|
+
"./hiring-work-semantics": { "types": "./src/hiring-work-semantics.d.ts", "import": "./src/hiring-work-semantics.js" },
|
|
53
|
+
"./hiring-candidate-fields": { "types": "./src/hiring-candidate-fields.d.ts", "import": "./src/hiring-candidate-fields.js" },
|
|
54
|
+
"./hiring-temporal": { "types": "./src/hiring-temporal.d.ts", "import": "./src/hiring-temporal.js" },
|
|
55
|
+
"./hiring-vacancy-fields": { "types": "./src/hiring-vacancy-fields.d.ts", "import": "./src/hiring-vacancy-fields.js" },
|
|
56
|
+
"./hiring-location-fields": { "types": "./src/hiring-location-fields.d.ts", "import": "./src/hiring-location-fields.js" },
|
|
57
|
+
"./hiring-salary-context": { "types": "./src/hiring-salary-context.d.ts", "import": "./src/hiring-salary-context.js" },
|
|
58
|
+
"./money": "./src/money.js",
|
|
59
|
+
"./currency": { "types": "./src/currency.d.ts", "import": "./src/currency.js" },
|
|
60
|
+
"./contact": { "types": "./src/contact.d.ts", "import": "./src/contact.js" },
|
|
61
|
+
"./housing-money": { "types": "./src/housing-money.d.ts", "import": "./src/housing-money.js" },
|
|
62
|
+
"./hiring-professions": "./src/hiring-professions.js",
|
|
63
|
+
"./hiring-skills": { "types": "./src/hiring-skills.d.ts", "import": "./src/hiring-skills.js" },
|
|
64
|
+
"./hiring-advanced": "./src/hiring-advanced.js"
|
|
65
|
+
},
|
|
66
|
+
"files": ["src", "index.d.ts", "README.md"],
|
|
67
|
+
"sideEffects": false,
|
|
68
|
+
"engines": { "node": ">=20" },
|
|
69
|
+
"scripts": { "test": "node --test" },
|
|
70
|
+
"dependencies": {
|
|
71
|
+
"libphonenumber-js": "^1.11.20"
|
|
72
|
+
},
|
|
73
|
+
"keywords": ["parsing", "lexicon", "uzbek", "kazakh", "ukrainian", "romanian", "russian", "housing", "hiring", "salary", "professions", "geography"],
|
|
74
|
+
"license": "MIT"
|
|
75
|
+
}
|