@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.
- package/LICENSE +21 -21
- package/README.md +137 -137
- package/index.d.ts +374 -374
- package/package.json +77 -75
- package/src/central-asia-locations.js +211 -211
- package/src/central-asia.js +233 -233
- package/src/contact.d.ts +44 -44
- package/src/contact.js +159 -159
- package/src/countries.js +175 -175
- package/src/country-context.d.ts +10 -10
- package/src/country-context.js +22 -22
- package/src/currency.d.ts +14 -14
- package/src/currency.js +66 -66
- package/src/geo.js +169 -169
- package/src/geography-central-asia.js +42 -42
- package/src/geography-detection.d.ts +14 -14
- package/src/geography-detection.js +64 -64
- package/src/geography-display.d.ts +13 -13
- package/src/geography-display.js +113 -113
- package/src/geography.js +210 -210
- package/src/hiring-advanced.js +147 -147
- package/src/hiring-candidate-fields.d.ts +9 -9
- package/src/hiring-candidate-fields.js +92 -92
- package/src/hiring-context.d.ts +64 -64
- package/src/hiring-context.js +412 -412
- package/src/hiring-language-extensions.d.ts +19 -19
- package/src/hiring-language-extensions.js +139 -139
- package/src/hiring-languages.js +135 -135
- package/src/hiring-location-fields.d.ts +3 -3
- package/src/hiring-location-fields.js +53 -53
- package/src/hiring-professions-ro.js +191 -191
- package/src/hiring-professions.js +437 -437
- package/src/hiring-requirements.d.ts +16 -16
- package/src/hiring-requirements.js +170 -170
- package/src/hiring-salary-context.d.ts +27 -27
- package/src/hiring-salary-context.js +76 -76
- package/src/hiring-semantics.d.ts +29 -29
- package/src/hiring-semantics.js +218 -218
- package/src/hiring-skills.d.ts +21 -21
- package/src/hiring-skills.js +315 -315
- package/src/hiring-source-aliases.d.ts +32 -32
- package/src/hiring-source-aliases.js +185 -185
- package/src/hiring-source-semantics.d.ts +31 -31
- package/src/hiring-source-semantics.js +293 -293
- package/src/hiring-temporal.d.ts +15 -15
- package/src/hiring-temporal.js +67 -67
- package/src/hiring-vacancy-fields.d.ts +5 -5
- package/src/hiring-vacancy-fields.js +23 -23
- package/src/hiring-work-semantics.d.ts +34 -34
- package/src/hiring-work-semantics.js +72 -72
- package/src/hiring.js +180 -180
- package/src/housing-address.d.ts +18 -18
- package/src/housing-address.js +217 -210
- package/src/housing-commercial.d.ts +1 -0
- package/src/housing-commercial.js +9 -0
- package/src/housing-context.d.ts +36 -36
- package/src/housing-context.js +183 -183
- package/src/housing-features.js +30 -30
- package/src/housing-intent.d.ts +9 -9
- package/src/housing-intent.js +132 -132
- package/src/housing-listing-fields.js +131 -131
- package/src/housing-money.d.ts +7 -7
- package/src/housing-money.js +102 -102
- package/src/housing-source-aliases.d.ts +8 -8
- package/src/housing-source-aliases.js +51 -51
- package/src/housing-structured.d.ts +55 -55
- package/src/housing-structured.js +219 -219
- package/src/housing.js +200 -200
- package/src/index.js +45 -44
- package/src/kz-location-extensions.js +307 -307
- package/src/landmarks.js +21 -21
- package/src/lexicon-core.js +58 -58
- package/src/location-merge.js +106 -106
- package/src/locations.js +456 -456
- package/src/money-core.d.ts +10 -10
- package/src/money-core.js +81 -81
- package/src/money-lexicon.d.ts +5 -5
- package/src/money-lexicon.js +79 -79
- package/src/money.js +154 -154
- package/src/normalization.js +384 -384
- package/src/odesa-metropolitan.js +144 -144
- package/src/romania-geography.js +47 -47
- package/src/tashkent-colloquial.js +80 -72
- package/src/tashkent-housing-geography.d.ts +38 -38
- package/src/tashkent-housing-geography.js +211 -211
- package/src/tashkent-pois.js +215 -215
- package/src/tashkent-residential-complexes.js +272 -272
- package/src/ua-location-extensions-major.js +118 -118
- package/src/ua-location-extensions-metro.js +9 -9
- package/src/ua-location-extensions-regional.js +246 -246
- package/src/ua-secondary-cities.d.ts +2 -2
- package/src/ua-secondary-cities.js +57 -57
- package/src/ukraine.js +75 -75
- package/src/uz-location-extensions.js +259 -259
package/src/countries.js
CHANGED
|
@@ -1,175 +1,175 @@
|
|
|
1
|
-
import { findCanonical } from './normalization.js';
|
|
2
|
-
import { deepFreeze, freezeAliases } from './lexicon-core.js';
|
|
3
|
-
|
|
4
|
-
const country = (code, canonical, currency, aliases) => deepFreeze({
|
|
5
|
-
code,
|
|
6
|
-
canonical,
|
|
7
|
-
type: 'country',
|
|
8
|
-
currency,
|
|
9
|
-
aliases: freezeAliases(aliases),
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
/** Canonical countries used by housing/hiring ingestion. */
|
|
13
|
-
export const COUNTRIES = Object.freeze([
|
|
14
|
-
country('UZ', 'Uzbekistan', 'UZS', {
|
|
15
|
-
en: ['Uzbekistan', 'Republic of Uzbekistan'],
|
|
16
|
-
ru: ['Узбекистан', 'Республика Узбекистан'],
|
|
17
|
-
uk: ['Узбекистан', 'Республіка Узбекистан'],
|
|
18
|
-
ro: ['Uzbekistan', 'Republica Uzbekistan'],
|
|
19
|
-
uzLatn: ["O'zbekiston", "O'zbekiston Respublikasi", 'Ozbekiston'],
|
|
20
|
-
uzCyrl: ['Ўзбекистон', 'Ўзбекистон Республикаси'],
|
|
21
|
-
kk: ['Өзбекстан', 'Өзбекстан Республикасы'],
|
|
22
|
-
}),
|
|
23
|
-
country('KZ', 'Kazakhstan', 'KZT', {
|
|
24
|
-
en: ['Kazakhstan', 'Republic of Kazakhstan'],
|
|
25
|
-
ru: ['Казахстан', 'Республика Казахстан'],
|
|
26
|
-
uk: ['Казахстан', 'Республіка Казахстан'],
|
|
27
|
-
ro: ['Kazahstan', 'Republica Kazahstan', 'Kazakhstan'],
|
|
28
|
-
uzLatn: ["Qozog'iston", "Qozog'iston Respublikasi"],
|
|
29
|
-
uzCyrl: ['Қозоғистон', 'Қозоғистон Республикаси'],
|
|
30
|
-
kk: ['Қазақстан', 'Қазақстан Республикасы'],
|
|
31
|
-
}),
|
|
32
|
-
country('UA', 'Ukraine', 'UAH', {
|
|
33
|
-
en: ['Ukraine'],
|
|
34
|
-
ru: ['Украина'],
|
|
35
|
-
uk: ['Україна'],
|
|
36
|
-
ro: ['Ucraina'],
|
|
37
|
-
uzLatn: ['Ukraina'],
|
|
38
|
-
uzCyrl: ['Украина'],
|
|
39
|
-
kk: ['Украина'],
|
|
40
|
-
}),
|
|
41
|
-
country('RO', 'Romania', 'RON', {
|
|
42
|
-
en: ['Romania'],
|
|
43
|
-
ru: ['Румыния'],
|
|
44
|
-
uk: ['Румунія'],
|
|
45
|
-
ro: ['România', 'Romania'],
|
|
46
|
-
uzLatn: ['Ruminiya'],
|
|
47
|
-
uzCyrl: ['Руминия'],
|
|
48
|
-
kk: ['Румыния'],
|
|
49
|
-
}),
|
|
50
|
-
country('KG', 'Kyrgyzstan', 'KGS', {
|
|
51
|
-
en: ['Kyrgyzstan', 'Kyrgyz Republic'],
|
|
52
|
-
ru: ['Кыргызстан', 'Киргизия', 'Кыргызская Республика'],
|
|
53
|
-
uk: ['Киргизстан', 'Киргизька Республіка'],
|
|
54
|
-
ro: ['Kârgâzstan', 'Kyrgyzstan'],
|
|
55
|
-
uzLatn: ["Qirg'iziston"],
|
|
56
|
-
uzCyrl: ['Қирғизистон'],
|
|
57
|
-
kk: ['Қырғызстан', 'Қырғыз Республикасы'],
|
|
58
|
-
}),
|
|
59
|
-
country('GE', 'Georgia', 'GEL', {
|
|
60
|
-
en: ['Georgia'],
|
|
61
|
-
ru: ['Грузия'],
|
|
62
|
-
uk: ['Грузія'],
|
|
63
|
-
ro: ['Georgia'],
|
|
64
|
-
}),
|
|
65
|
-
country('AZ', 'Azerbaijan', 'AZN', {
|
|
66
|
-
en: ['Azerbaijan'],
|
|
67
|
-
ru: ['Азербайджан'],
|
|
68
|
-
uk: ['Азербайджан'],
|
|
69
|
-
ro: ['Azerbaidjan'],
|
|
70
|
-
}),
|
|
71
|
-
country('AM', 'Armenia', 'AMD', {
|
|
72
|
-
en: ['Armenia'],
|
|
73
|
-
ru: ['Армения'],
|
|
74
|
-
uk: ['Вірменія'],
|
|
75
|
-
ro: ['Armenia'],
|
|
76
|
-
}),
|
|
77
|
-
country('MD', 'Moldova', 'MDL', {
|
|
78
|
-
en: ['Moldova', 'Republic of Moldova'],
|
|
79
|
-
ru: ['Молдова'],
|
|
80
|
-
uk: ['Молдова'],
|
|
81
|
-
ro: ['Moldova', 'Republica Moldova'],
|
|
82
|
-
}),
|
|
83
|
-
country('TJ', 'Tajikistan', 'TJS', {
|
|
84
|
-
en: ['Tajikistan'],
|
|
85
|
-
ru: ['Таджикистан'],
|
|
86
|
-
uk: ['Таджикистан'],
|
|
87
|
-
ro: ['Tadjikistan'],
|
|
88
|
-
}),
|
|
89
|
-
country('TM', 'Turkmenistan', 'TMT', {
|
|
90
|
-
en: ['Turkmenistan'],
|
|
91
|
-
ru: ['Туркменистан'],
|
|
92
|
-
uk: ['Туркменістан'],
|
|
93
|
-
ro: ['Turkmenistan'],
|
|
94
|
-
}),
|
|
95
|
-
country('PL', 'Poland', 'PLN', {
|
|
96
|
-
en: ['Poland'],
|
|
97
|
-
ru: ['Польша'],
|
|
98
|
-
uk: ['Польща'],
|
|
99
|
-
ro: ['Polonia'],
|
|
100
|
-
all: ['Polska'],
|
|
101
|
-
}),
|
|
102
|
-
country('DE', 'Germany', 'EUR', {
|
|
103
|
-
en: ['Germany'],
|
|
104
|
-
ru: ['Германия'],
|
|
105
|
-
uk: ['Німеччина'],
|
|
106
|
-
ro: ['Germania'],
|
|
107
|
-
all: ['Deutschland'],
|
|
108
|
-
}),
|
|
109
|
-
country('GB', 'United Kingdom', 'GBP', {
|
|
110
|
-
en: ['United Kingdom', 'UK', 'Great Britain', 'Britain', 'England'],
|
|
111
|
-
ru: ['Великобритания', 'Британия', 'Англия'],
|
|
112
|
-
uk: ['Велика Британія', 'Британія', 'Англія'],
|
|
113
|
-
ro: ['Regatul Unit', 'Marea Britanie'],
|
|
114
|
-
}),
|
|
115
|
-
country('US', 'United States', 'USD', {
|
|
116
|
-
en: ['United States', 'United States of America', 'USA', 'U.S.', 'US'],
|
|
117
|
-
ru: ['США', 'Соединенные Штаты', 'Соединённые Штаты'],
|
|
118
|
-
uk: ['США', 'Сполучені Штати'],
|
|
119
|
-
ro: ['Statele Unite', 'SUA'],
|
|
120
|
-
}),
|
|
121
|
-
country('CA', 'Canada', 'CAD', {
|
|
122
|
-
en: ['Canada'],
|
|
123
|
-
ru: ['Канада'],
|
|
124
|
-
uk: ['Канада'],
|
|
125
|
-
ro: ['Canada'],
|
|
126
|
-
}),
|
|
127
|
-
country('CN', 'China', 'CNY', {
|
|
128
|
-
en: ['China', "People's Republic of China", 'PRC'],
|
|
129
|
-
ru: ['Китай'],
|
|
130
|
-
uk: ['Китай'],
|
|
131
|
-
ro: ['China'],
|
|
132
|
-
all: ['中国', '中华人民共和国'],
|
|
133
|
-
}),
|
|
134
|
-
country('JP', 'Japan', 'JPY', {
|
|
135
|
-
en: ['Japan'],
|
|
136
|
-
ru: ['Япония'],
|
|
137
|
-
uk: ['Японія'],
|
|
138
|
-
ro: ['Japonia'],
|
|
139
|
-
all: ['日本'],
|
|
140
|
-
}),
|
|
141
|
-
country('KR', 'South Korea', 'KRW', {
|
|
142
|
-
en: ['South Korea', 'Republic of Korea', 'Korea'],
|
|
143
|
-
ru: ['Южная Корея', 'Корея'],
|
|
144
|
-
uk: ['Південна Корея', 'Корея'],
|
|
145
|
-
ro: ['Coreea de Sud', 'Coreea'],
|
|
146
|
-
all: ['대한민국', '한국'],
|
|
147
|
-
}),
|
|
148
|
-
country('TW', 'Taiwan', 'TWD', {
|
|
149
|
-
en: ['Taiwan'],
|
|
150
|
-
ru: ['Тайвань'],
|
|
151
|
-
uk: ['Тайвань'],
|
|
152
|
-
ro: ['Taiwan'],
|
|
153
|
-
all: ['臺灣', '台灣'],
|
|
154
|
-
}),
|
|
155
|
-
]);
|
|
156
|
-
|
|
157
|
-
const COUNTRY_BY_CODE = new Map(COUNTRIES.map((item) => [item.code, item]));
|
|
158
|
-
|
|
159
|
-
export function canonicalCountry(value) {
|
|
160
|
-
if (!value) return null;
|
|
161
|
-
const direct = COUNTRY_BY_CODE.get(String(value).trim().toUpperCase());
|
|
162
|
-
if (direct) return direct.canonical;
|
|
163
|
-
return findCanonical(value, COUNTRIES)?.canonical || null;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
export function canonicalCountryCode(value) {
|
|
167
|
-
if (!value) return null;
|
|
168
|
-
const direct = COUNTRY_BY_CODE.get(String(value).trim().toUpperCase());
|
|
169
|
-
if (direct) return direct.code;
|
|
170
|
-
return findCanonical(value, COUNTRIES)?.code || null;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
export function countryByCode(value) {
|
|
174
|
-
return COUNTRY_BY_CODE.get(String(value || '').trim().toUpperCase()) || null;
|
|
175
|
-
}
|
|
1
|
+
import { findCanonical } from './normalization.js';
|
|
2
|
+
import { deepFreeze, freezeAliases } from './lexicon-core.js';
|
|
3
|
+
|
|
4
|
+
const country = (code, canonical, currency, aliases) => deepFreeze({
|
|
5
|
+
code,
|
|
6
|
+
canonical,
|
|
7
|
+
type: 'country',
|
|
8
|
+
currency,
|
|
9
|
+
aliases: freezeAliases(aliases),
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
/** Canonical countries used by housing/hiring ingestion. */
|
|
13
|
+
export const COUNTRIES = Object.freeze([
|
|
14
|
+
country('UZ', 'Uzbekistan', 'UZS', {
|
|
15
|
+
en: ['Uzbekistan', 'Republic of Uzbekistan'],
|
|
16
|
+
ru: ['Узбекистан', 'Республика Узбекистан'],
|
|
17
|
+
uk: ['Узбекистан', 'Республіка Узбекистан'],
|
|
18
|
+
ro: ['Uzbekistan', 'Republica Uzbekistan'],
|
|
19
|
+
uzLatn: ["O'zbekiston", "O'zbekiston Respublikasi", 'Ozbekiston'],
|
|
20
|
+
uzCyrl: ['Ўзбекистон', 'Ўзбекистон Республикаси'],
|
|
21
|
+
kk: ['Өзбекстан', 'Өзбекстан Республикасы'],
|
|
22
|
+
}),
|
|
23
|
+
country('KZ', 'Kazakhstan', 'KZT', {
|
|
24
|
+
en: ['Kazakhstan', 'Republic of Kazakhstan'],
|
|
25
|
+
ru: ['Казахстан', 'Республика Казахстан'],
|
|
26
|
+
uk: ['Казахстан', 'Республіка Казахстан'],
|
|
27
|
+
ro: ['Kazahstan', 'Republica Kazahstan', 'Kazakhstan'],
|
|
28
|
+
uzLatn: ["Qozog'iston", "Qozog'iston Respublikasi"],
|
|
29
|
+
uzCyrl: ['Қозоғистон', 'Қозоғистон Республикаси'],
|
|
30
|
+
kk: ['Қазақстан', 'Қазақстан Республикасы'],
|
|
31
|
+
}),
|
|
32
|
+
country('UA', 'Ukraine', 'UAH', {
|
|
33
|
+
en: ['Ukraine'],
|
|
34
|
+
ru: ['Украина'],
|
|
35
|
+
uk: ['Україна'],
|
|
36
|
+
ro: ['Ucraina'],
|
|
37
|
+
uzLatn: ['Ukraina'],
|
|
38
|
+
uzCyrl: ['Украина'],
|
|
39
|
+
kk: ['Украина'],
|
|
40
|
+
}),
|
|
41
|
+
country('RO', 'Romania', 'RON', {
|
|
42
|
+
en: ['Romania'],
|
|
43
|
+
ru: ['Румыния'],
|
|
44
|
+
uk: ['Румунія'],
|
|
45
|
+
ro: ['România', 'Romania'],
|
|
46
|
+
uzLatn: ['Ruminiya'],
|
|
47
|
+
uzCyrl: ['Руминия'],
|
|
48
|
+
kk: ['Румыния'],
|
|
49
|
+
}),
|
|
50
|
+
country('KG', 'Kyrgyzstan', 'KGS', {
|
|
51
|
+
en: ['Kyrgyzstan', 'Kyrgyz Republic'],
|
|
52
|
+
ru: ['Кыргызстан', 'Киргизия', 'Кыргызская Республика'],
|
|
53
|
+
uk: ['Киргизстан', 'Киргизька Республіка'],
|
|
54
|
+
ro: ['Kârgâzstan', 'Kyrgyzstan'],
|
|
55
|
+
uzLatn: ["Qirg'iziston"],
|
|
56
|
+
uzCyrl: ['Қирғизистон'],
|
|
57
|
+
kk: ['Қырғызстан', 'Қырғыз Республикасы'],
|
|
58
|
+
}),
|
|
59
|
+
country('GE', 'Georgia', 'GEL', {
|
|
60
|
+
en: ['Georgia'],
|
|
61
|
+
ru: ['Грузия'],
|
|
62
|
+
uk: ['Грузія'],
|
|
63
|
+
ro: ['Georgia'],
|
|
64
|
+
}),
|
|
65
|
+
country('AZ', 'Azerbaijan', 'AZN', {
|
|
66
|
+
en: ['Azerbaijan'],
|
|
67
|
+
ru: ['Азербайджан'],
|
|
68
|
+
uk: ['Азербайджан'],
|
|
69
|
+
ro: ['Azerbaidjan'],
|
|
70
|
+
}),
|
|
71
|
+
country('AM', 'Armenia', 'AMD', {
|
|
72
|
+
en: ['Armenia'],
|
|
73
|
+
ru: ['Армения'],
|
|
74
|
+
uk: ['Вірменія'],
|
|
75
|
+
ro: ['Armenia'],
|
|
76
|
+
}),
|
|
77
|
+
country('MD', 'Moldova', 'MDL', {
|
|
78
|
+
en: ['Moldova', 'Republic of Moldova'],
|
|
79
|
+
ru: ['Молдова'],
|
|
80
|
+
uk: ['Молдова'],
|
|
81
|
+
ro: ['Moldova', 'Republica Moldova'],
|
|
82
|
+
}),
|
|
83
|
+
country('TJ', 'Tajikistan', 'TJS', {
|
|
84
|
+
en: ['Tajikistan'],
|
|
85
|
+
ru: ['Таджикистан'],
|
|
86
|
+
uk: ['Таджикистан'],
|
|
87
|
+
ro: ['Tadjikistan'],
|
|
88
|
+
}),
|
|
89
|
+
country('TM', 'Turkmenistan', 'TMT', {
|
|
90
|
+
en: ['Turkmenistan'],
|
|
91
|
+
ru: ['Туркменистан'],
|
|
92
|
+
uk: ['Туркменістан'],
|
|
93
|
+
ro: ['Turkmenistan'],
|
|
94
|
+
}),
|
|
95
|
+
country('PL', 'Poland', 'PLN', {
|
|
96
|
+
en: ['Poland'],
|
|
97
|
+
ru: ['Польша'],
|
|
98
|
+
uk: ['Польща'],
|
|
99
|
+
ro: ['Polonia'],
|
|
100
|
+
all: ['Polska'],
|
|
101
|
+
}),
|
|
102
|
+
country('DE', 'Germany', 'EUR', {
|
|
103
|
+
en: ['Germany'],
|
|
104
|
+
ru: ['Германия'],
|
|
105
|
+
uk: ['Німеччина'],
|
|
106
|
+
ro: ['Germania'],
|
|
107
|
+
all: ['Deutschland'],
|
|
108
|
+
}),
|
|
109
|
+
country('GB', 'United Kingdom', 'GBP', {
|
|
110
|
+
en: ['United Kingdom', 'UK', 'Great Britain', 'Britain', 'England'],
|
|
111
|
+
ru: ['Великобритания', 'Британия', 'Англия'],
|
|
112
|
+
uk: ['Велика Британія', 'Британія', 'Англія'],
|
|
113
|
+
ro: ['Regatul Unit', 'Marea Britanie'],
|
|
114
|
+
}),
|
|
115
|
+
country('US', 'United States', 'USD', {
|
|
116
|
+
en: ['United States', 'United States of America', 'USA', 'U.S.', 'US'],
|
|
117
|
+
ru: ['США', 'Соединенные Штаты', 'Соединённые Штаты'],
|
|
118
|
+
uk: ['США', 'Сполучені Штати'],
|
|
119
|
+
ro: ['Statele Unite', 'SUA'],
|
|
120
|
+
}),
|
|
121
|
+
country('CA', 'Canada', 'CAD', {
|
|
122
|
+
en: ['Canada'],
|
|
123
|
+
ru: ['Канада'],
|
|
124
|
+
uk: ['Канада'],
|
|
125
|
+
ro: ['Canada'],
|
|
126
|
+
}),
|
|
127
|
+
country('CN', 'China', 'CNY', {
|
|
128
|
+
en: ['China', "People's Republic of China", 'PRC'],
|
|
129
|
+
ru: ['Китай'],
|
|
130
|
+
uk: ['Китай'],
|
|
131
|
+
ro: ['China'],
|
|
132
|
+
all: ['中国', '中华人民共和国'],
|
|
133
|
+
}),
|
|
134
|
+
country('JP', 'Japan', 'JPY', {
|
|
135
|
+
en: ['Japan'],
|
|
136
|
+
ru: ['Япония'],
|
|
137
|
+
uk: ['Японія'],
|
|
138
|
+
ro: ['Japonia'],
|
|
139
|
+
all: ['日本'],
|
|
140
|
+
}),
|
|
141
|
+
country('KR', 'South Korea', 'KRW', {
|
|
142
|
+
en: ['South Korea', 'Republic of Korea', 'Korea'],
|
|
143
|
+
ru: ['Южная Корея', 'Корея'],
|
|
144
|
+
uk: ['Південна Корея', 'Корея'],
|
|
145
|
+
ro: ['Coreea de Sud', 'Coreea'],
|
|
146
|
+
all: ['대한민국', '한국'],
|
|
147
|
+
}),
|
|
148
|
+
country('TW', 'Taiwan', 'TWD', {
|
|
149
|
+
en: ['Taiwan'],
|
|
150
|
+
ru: ['Тайвань'],
|
|
151
|
+
uk: ['Тайвань'],
|
|
152
|
+
ro: ['Taiwan'],
|
|
153
|
+
all: ['臺灣', '台灣'],
|
|
154
|
+
}),
|
|
155
|
+
]);
|
|
156
|
+
|
|
157
|
+
const COUNTRY_BY_CODE = new Map(COUNTRIES.map((item) => [item.code, item]));
|
|
158
|
+
|
|
159
|
+
export function canonicalCountry(value) {
|
|
160
|
+
if (!value) return null;
|
|
161
|
+
const direct = COUNTRY_BY_CODE.get(String(value).trim().toUpperCase());
|
|
162
|
+
if (direct) return direct.canonical;
|
|
163
|
+
return findCanonical(value, COUNTRIES)?.canonical || null;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
export function canonicalCountryCode(value) {
|
|
167
|
+
if (!value) return null;
|
|
168
|
+
const direct = COUNTRY_BY_CODE.get(String(value).trim().toUpperCase());
|
|
169
|
+
if (direct) return direct.code;
|
|
170
|
+
return findCanonical(value, COUNTRIES)?.code || null;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
export function countryByCode(value) {
|
|
174
|
+
return COUNTRY_BY_CODE.get(String(value || '').trim().toUpperCase()) || null;
|
|
175
|
+
}
|
package/src/country-context.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export type CountryContext = Readonly<{
|
|
2
|
-
code: string;
|
|
3
|
-
country: string;
|
|
4
|
-
currency: string | null;
|
|
5
|
-
phoneCountry: string;
|
|
6
|
-
}>;
|
|
7
|
-
|
|
8
|
-
export function countryContext(value: unknown): CountryContext | null;
|
|
9
|
-
export function countryCurrency(value: unknown): string | null;
|
|
10
|
-
export function countryPhoneHint(value: unknown): string | null;
|
|
1
|
+
export type CountryContext = Readonly<{
|
|
2
|
+
code: string;
|
|
3
|
+
country: string;
|
|
4
|
+
currency: string | null;
|
|
5
|
+
phoneCountry: string;
|
|
6
|
+
}>;
|
|
7
|
+
|
|
8
|
+
export function countryContext(value: unknown): CountryContext | null;
|
|
9
|
+
export function countryCurrency(value: unknown): string | null;
|
|
10
|
+
export function countryPhoneHint(value: unknown): string | null;
|
package/src/country-context.js
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import { canonicalCountryCode, countryByCode } from './countries.js';
|
|
2
|
-
|
|
3
|
-
export function countryContext(value) {
|
|
4
|
-
const code = canonicalCountryCode(value);
|
|
5
|
-
if (!code) return null;
|
|
6
|
-
const country = countryByCode(code);
|
|
7
|
-
if (!country) return null;
|
|
8
|
-
return Object.freeze({
|
|
9
|
-
code: country.code,
|
|
10
|
-
country: country.canonical,
|
|
11
|
-
currency: country.currency || null,
|
|
12
|
-
phoneCountry: country.code,
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export function countryCurrency(value) {
|
|
17
|
-
return countryContext(value)?.currency || null;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export function countryPhoneHint(value) {
|
|
21
|
-
return countryContext(value)?.phoneCountry || null;
|
|
22
|
-
}
|
|
1
|
+
import { canonicalCountryCode, countryByCode } from './countries.js';
|
|
2
|
+
|
|
3
|
+
export function countryContext(value) {
|
|
4
|
+
const code = canonicalCountryCode(value);
|
|
5
|
+
if (!code) return null;
|
|
6
|
+
const country = countryByCode(code);
|
|
7
|
+
if (!country) return null;
|
|
8
|
+
return Object.freeze({
|
|
9
|
+
code: country.code,
|
|
10
|
+
country: country.canonical,
|
|
11
|
+
currency: country.currency || null,
|
|
12
|
+
phoneCountry: country.code,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function countryCurrency(value) {
|
|
17
|
+
return countryContext(value)?.currency || null;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function countryPhoneHint(value) {
|
|
21
|
+
return countryContext(value)?.phoneCountry || null;
|
|
22
|
+
}
|
package/src/currency.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
export type CurrencyDisplay = Readonly<{
|
|
2
|
-
code: string;
|
|
3
|
-
symbol: string;
|
|
4
|
-
name: string;
|
|
5
|
-
}>;
|
|
6
|
-
|
|
7
|
-
export const CURRENCY_TERMS: readonly import('../index.d.ts').LexiconEntity[];
|
|
8
|
-
export const CURRENCY_SYMBOL_CANDIDATES: Readonly<Record<string, readonly string[]>>;
|
|
9
|
-
export function moneyCurrencyCandidatesFromText(value: unknown): readonly string[];
|
|
10
|
-
export function moneyCurrencyFromText(value: unknown, fallbackCurrency?: string | null): string | null;
|
|
11
|
-
export function moneyCurrencyPattern(): string;
|
|
12
|
-
export function currencyDisplay(code: unknown, locale?: string): CurrencyDisplay | null;
|
|
13
|
-
export function currencySymbol(code: unknown, locale?: string): string | null;
|
|
14
|
-
export function currencyName(code: unknown, locale?: string): string | null;
|
|
1
|
+
export type CurrencyDisplay = Readonly<{
|
|
2
|
+
code: string;
|
|
3
|
+
symbol: string;
|
|
4
|
+
name: string;
|
|
5
|
+
}>;
|
|
6
|
+
|
|
7
|
+
export const CURRENCY_TERMS: readonly import('../index.d.ts').LexiconEntity[];
|
|
8
|
+
export const CURRENCY_SYMBOL_CANDIDATES: Readonly<Record<string, readonly string[]>>;
|
|
9
|
+
export function moneyCurrencyCandidatesFromText(value: unknown): readonly string[];
|
|
10
|
+
export function moneyCurrencyFromText(value: unknown, fallbackCurrency?: string | null): string | null;
|
|
11
|
+
export function moneyCurrencyPattern(): string;
|
|
12
|
+
export function currencyDisplay(code: unknown, locale?: string): CurrencyDisplay | null;
|
|
13
|
+
export function currencySymbol(code: unknown, locale?: string): string | null;
|
|
14
|
+
export function currencyName(code: unknown, locale?: string): string | null;
|
package/src/currency.js
CHANGED
|
@@ -1,66 +1,66 @@
|
|
|
1
|
-
import { CURRENCY_TERMS } from './money-lexicon.js';
|
|
2
|
-
|
|
3
|
-
export {
|
|
4
|
-
CURRENCY_SYMBOL_CANDIDATES,
|
|
5
|
-
CURRENCY_TERMS,
|
|
6
|
-
} from './money-lexicon.js';
|
|
7
|
-
|
|
8
|
-
export {
|
|
9
|
-
moneyCurrencyCandidatesFromText,
|
|
10
|
-
moneyCurrencyFromText,
|
|
11
|
-
moneyCurrencyPattern,
|
|
12
|
-
} from './money-core.js';
|
|
13
|
-
|
|
14
|
-
const LOCALE_ALIASES = Object.freeze({
|
|
15
|
-
uzLatn: 'uz-Latn',
|
|
16
|
-
uzCyrl: 'uz-Cyrl',
|
|
17
|
-
kk: 'kk',
|
|
18
|
-
uk: 'uk',
|
|
19
|
-
ro: 'ro',
|
|
20
|
-
ru: 'ru',
|
|
21
|
-
en: 'en',
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
function normalizedLocale(locale) {
|
|
25
|
-
const raw = String(locale || 'en').trim();
|
|
26
|
-
return LOCALE_ALIASES[raw] || raw || 'en';
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
function supportedCurrency(code) {
|
|
30
|
-
const normalized = String(code || '').trim().toUpperCase();
|
|
31
|
-
return CURRENCY_TERMS.some((entry) => entry.canonical === normalized) ? normalized : null;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
function currencyPart(code, locale, currencyDisplay) {
|
|
35
|
-
try {
|
|
36
|
-
const parts = new Intl.NumberFormat(normalizedLocale(locale), {
|
|
37
|
-
style: 'currency',
|
|
38
|
-
currency: code,
|
|
39
|
-
currencyDisplay,
|
|
40
|
-
minimumFractionDigits: 0,
|
|
41
|
-
maximumFractionDigits: 0,
|
|
42
|
-
}).formatToParts(1);
|
|
43
|
-
return parts.find((part) => part.type === 'currency')?.value || code;
|
|
44
|
-
} catch {
|
|
45
|
-
return code;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/** Localized display metadata without a second hand-maintained currency catalog. */
|
|
50
|
-
export function currencyDisplay(code, locale = 'en') {
|
|
51
|
-
const canonical = supportedCurrency(code);
|
|
52
|
-
if (!canonical) return null;
|
|
53
|
-
return Object.freeze({
|
|
54
|
-
code: canonical,
|
|
55
|
-
symbol: currencyPart(canonical, locale, 'narrowSymbol'),
|
|
56
|
-
name: currencyPart(canonical, locale, 'name'),
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export function currencySymbol(code, locale = 'en') {
|
|
61
|
-
return currencyDisplay(code, locale)?.symbol || null;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
export function currencyName(code, locale = 'en') {
|
|
65
|
-
return currencyDisplay(code, locale)?.name || null;
|
|
66
|
-
}
|
|
1
|
+
import { CURRENCY_TERMS } from './money-lexicon.js';
|
|
2
|
+
|
|
3
|
+
export {
|
|
4
|
+
CURRENCY_SYMBOL_CANDIDATES,
|
|
5
|
+
CURRENCY_TERMS,
|
|
6
|
+
} from './money-lexicon.js';
|
|
7
|
+
|
|
8
|
+
export {
|
|
9
|
+
moneyCurrencyCandidatesFromText,
|
|
10
|
+
moneyCurrencyFromText,
|
|
11
|
+
moneyCurrencyPattern,
|
|
12
|
+
} from './money-core.js';
|
|
13
|
+
|
|
14
|
+
const LOCALE_ALIASES = Object.freeze({
|
|
15
|
+
uzLatn: 'uz-Latn',
|
|
16
|
+
uzCyrl: 'uz-Cyrl',
|
|
17
|
+
kk: 'kk',
|
|
18
|
+
uk: 'uk',
|
|
19
|
+
ro: 'ro',
|
|
20
|
+
ru: 'ru',
|
|
21
|
+
en: 'en',
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
function normalizedLocale(locale) {
|
|
25
|
+
const raw = String(locale || 'en').trim();
|
|
26
|
+
return LOCALE_ALIASES[raw] || raw || 'en';
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function supportedCurrency(code) {
|
|
30
|
+
const normalized = String(code || '').trim().toUpperCase();
|
|
31
|
+
return CURRENCY_TERMS.some((entry) => entry.canonical === normalized) ? normalized : null;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function currencyPart(code, locale, currencyDisplay) {
|
|
35
|
+
try {
|
|
36
|
+
const parts = new Intl.NumberFormat(normalizedLocale(locale), {
|
|
37
|
+
style: 'currency',
|
|
38
|
+
currency: code,
|
|
39
|
+
currencyDisplay,
|
|
40
|
+
minimumFractionDigits: 0,
|
|
41
|
+
maximumFractionDigits: 0,
|
|
42
|
+
}).formatToParts(1);
|
|
43
|
+
return parts.find((part) => part.type === 'currency')?.value || code;
|
|
44
|
+
} catch {
|
|
45
|
+
return code;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** Localized display metadata without a second hand-maintained currency catalog. */
|
|
50
|
+
export function currencyDisplay(code, locale = 'en') {
|
|
51
|
+
const canonical = supportedCurrency(code);
|
|
52
|
+
if (!canonical) return null;
|
|
53
|
+
return Object.freeze({
|
|
54
|
+
code: canonical,
|
|
55
|
+
symbol: currencyPart(canonical, locale, 'narrowSymbol'),
|
|
56
|
+
name: currencyPart(canonical, locale, 'name'),
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function currencySymbol(code, locale = 'en') {
|
|
61
|
+
return currencyDisplay(code, locale)?.symbol || null;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export function currencyName(code, locale = 'en') {
|
|
65
|
+
return currencyDisplay(code, locale)?.name || null;
|
|
66
|
+
}
|