@fieldia/map 0.19.0 → 0.19.1

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 (66) hide show
  1. package/README.md +90 -3
  2. package/package.json +4 -4
  3. package/src/lib/address-labels.d.mts +14 -2
  4. package/src/lib/address-labels.d.ts +14 -2
  5. package/src/lib/address-labels.js.map +1 -1
  6. package/src/lib/address-labels.mjs.map +1 -1
  7. package/src/lib/address-line.d.mts +10 -1
  8. package/src/lib/address-line.d.ts +10 -1
  9. package/src/lib/address-line.js +25 -8
  10. package/src/lib/address-line.js.map +1 -1
  11. package/src/lib/address-line.mjs +24 -8
  12. package/src/lib/address-line.mjs.map +1 -1
  13. package/src/lib/address-names.d.mts +38 -0
  14. package/src/lib/address-names.d.ts +38 -0
  15. package/src/lib/address-names.js +240 -0
  16. package/src/lib/address-names.js.map +1 -0
  17. package/src/lib/address-names.mjs +232 -0
  18. package/src/lib/address-names.mjs.map +1 -0
  19. package/src/lib/address-parts.d.mts +128 -10
  20. package/src/lib/address-parts.d.ts +128 -10
  21. package/src/lib/address-parts.js +836 -17
  22. package/src/lib/address-parts.js.map +1 -1
  23. package/src/lib/address-parts.mjs +827 -14
  24. package/src/lib/address-parts.mjs.map +1 -1
  25. package/src/lib/address-search.d.mts +8 -4
  26. package/src/lib/address-search.d.ts +8 -4
  27. package/src/lib/address-search.js +27 -9
  28. package/src/lib/address-search.js.map +1 -1
  29. package/src/lib/address-search.mjs +28 -10
  30. package/src/lib/address-search.mjs.map +1 -1
  31. package/src/lib/address-suggest.d.mts +5 -2
  32. package/src/lib/address-suggest.d.ts +5 -2
  33. package/src/lib/address-suggest.js +161 -28
  34. package/src/lib/address-suggest.js.map +1 -1
  35. package/src/lib/address-suggest.mjs +161 -28
  36. package/src/lib/address-suggest.mjs.map +1 -1
  37. package/src/lib/form-map.js +9 -7
  38. package/src/lib/form-map.js.map +1 -1
  39. package/src/lib/form-map.mjs +10 -8
  40. package/src/lib/form-map.mjs.map +1 -1
  41. package/src/lib/place.js +21 -10
  42. package/src/lib/place.js.map +1 -1
  43. package/src/lib/place.mjs +21 -10
  44. package/src/lib/place.mjs.map +1 -1
  45. package/src/lib/providers.d.mts +6 -0
  46. package/src/lib/providers.d.ts +6 -0
  47. package/src/lib/providers.js +46 -97
  48. package/src/lib/providers.js.map +1 -1
  49. package/src/lib/providers.mjs +46 -97
  50. package/src/lib/providers.mjs.map +1 -1
  51. package/src/lib/route-line.d.mts +9 -0
  52. package/src/lib/route-line.d.ts +9 -0
  53. package/src/lib/route-line.js +13 -0
  54. package/src/lib/route-line.js.map +1 -1
  55. package/src/lib/route-line.mjs +11 -0
  56. package/src/lib/route-line.mjs.map +1 -1
  57. package/src/lib/routes.js +6 -2
  58. package/src/lib/routes.js.map +1 -1
  59. package/src/lib/routes.mjs +6 -2
  60. package/src/lib/routes.mjs.map +1 -1
  61. package/src/lib/search-box.d.mts +15 -3
  62. package/src/lib/search-box.d.ts +15 -3
  63. package/src/lib/search-box.js +118 -34
  64. package/src/lib/search-box.js.map +1 -1
  65. package/src/lib/search-box.mjs +118 -34
  66. package/src/lib/search-box.mjs.map +1 -1
@@ -0,0 +1,240 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.nameIn = exports.nameKey = void 0;
4
+ exports.knownRegion = knownRegion;
5
+ exports.knownCity = knownCity;
6
+ exports.sameKnown = sameKnown;
7
+ /**
8
+ * One place a line: its code (Azure's, where it gives one), its English
9
+ * and Arabic names, then its other names, comma-separated; `fr=`/`de=` give
10
+ * its French or German name.
11
+ */
12
+ const REGIONS = {
13
+ EG: `
14
+ |Cairo|القاهرة|Al Qahirah, Al Qāhirah, al-Qahirah, Cairo Governorate, محافظة القاهرة, fr=Le Caire, de=Kairo
15
+ |Giza|الجيزة|Al Jizah, Al Jīzah, al-Jeezah, Giza Governorate, محافظة الجيزة, fr=Gizeh, de=Gizeh, Gise
16
+ |Alexandria|الإسكندرية|Al Iskandariyah, Alexandria Governorate, الاسكندرية, الأسكندرية, محافظة الإسكندرية, fr=Alexandrie
17
+ |Qalyubia|القليوبية|Al Qalyubiyah, Qalyubiyah, Kalyubia
18
+ |Beheira|البحيرة|Al Buhayrah, Buhayrah
19
+ |Ismailia|الإسماعيلية|Al Isma'iliyah, Al Ismailiyah, الاسماعيلية
20
+ |Sharqia|الشرقية|Ash Sharqiyah, Ash Sharqīyah, Sharkia, Al Sharqia
21
+ |Dakahlia|الدقهلية|Ad Daqahliyah, Daqahliyah
22
+ |Gharbia|الغربية|Al Gharbiyah
23
+ |Monufia|المنوفية|Al Minufiyah, Menofia
24
+ |Kafr El Sheikh|كفر الشيخ|Kafr ash Shaykh
25
+ |Damietta|دمياط|Dumyat, Dumyāţ, Domiat
26
+ |Port Said|بورسعيد|Bur Sa'id, Būr Sa‘īd, Bour Sa'eed, بور سعيد
27
+ |Suez|السويس|As Suways
28
+ |Faiyum|الفيوم|Al Fayyum, Fayoum
29
+ |Beni Suef|بني سويف|Bani Suwayf
30
+ |Minya|المنيا|Al Minya
31
+ |Asyut|أسيوط|Assiut, اسيوط
32
+ |Sohag|سوهاج|Suhaj
33
+ |Qena|قنا|Qina
34
+ |Luxor|الأقصر|Al Uqsur, الاقصر
35
+ |Aswan|أسوان|اسوان
36
+ |Red Sea|البحر الأحمر|Al Bahr al Ahmar
37
+ |New Valley|الوادي الجديد|Al Wadi al Jadid
38
+ |Matrouh|مطروح|Matruh
39
+ |North Sinai|شمال سيناء|Shamal Sina'
40
+ |South Sinai|جنوب سيناء|Janub Sina'`,
41
+ SA: `
42
+ RIY|Riyadh|الرياض|Ar Riyad, Ar Riyāḑ, Riyadh Region, Riyadh Province, منطقة الرياض, fr=Riyad, de=Riad
43
+ MAK|Makkah|مكة المكرمة|Mecca, Makkah Region, Makkah Province, Makkah Al Mukarramah, مكة, منطقة مكة المكرمة, fr=La Mecque, de=Mekka
44
+ MAD|Madinah|المدينة المنورة|Medina, Al Madinah, Al Madinah Al Munawwarah, المدينة, منطقة المدينة المنورة, fr=Médine, de=Medina
45
+ EAS|Eastern Province|المنطقة الشرقية|Eastern, Eastern Region, Ash Sharqiyah, الشرقية
46
+ QAS|Al Qassim|القصيم|Al Qasim, Qassim, منطقة القصيم
47
+ ASI|Asir|عسير|'Asir, ‘Asir, منطقة عسير
48
+ TAB|Tabuk|تبوك|منطقة تبوك
49
+ HAI|Hail|حائل|Ha'il, Ḩā'il, منطقة حائل
50
+ JAZ|Jazan|جازان|Jizan, Gizan, جيزان, منطقة جازان
51
+ |Najran|نجران|منطقة نجران
52
+ |Al Bahah|الباحة|Al Baha, منطقة الباحة
53
+ JOF|Al Jawf|الجوف|منطقة الجوف
54
+ |Northern Borders|الحدود الشمالية|Northern Frontier, Al Hudud ash Shamaliyah, منطقة الحدود الشمالية`,
55
+ AE: `
56
+ AZ|Abu Dhabi|أبوظبي|Abu Dhabi Emirate, Abu Zabi, أبو ظبي, إمارة أبوظبي, إمارة أبو ظبي, fr=Abou Dabi
57
+ DU|Dubai|دبي|Dubai Emirate, إمارة دبي, fr=Dubaï
58
+ SH|Sharjah|الشارقة|Sharjah Emirate, Ash Shariqah, Ash Shāriqah, إمارة الشارقة, fr=Charjah, de=Schardscha
59
+ AJ|Ajman|عجمان|Ajman Emirate, 'Ajman, إمارة عجمان
60
+ UQ|Umm Al Quwain|أم القيوين|Umm al Qaywayn, Umm Al-Quwain, Umm Al Quwain Emirate, Umm al-Quwain Emirate, ام القيوين
61
+ RK|Ras Al Khaimah|رأس الخيمة|Ra's al Khaymah, Ras al-Khaimah, Ras Al Khaimah Emirate, Ras al-Khaimah Emirate, راس الخيمة
62
+ FU|Fujairah|الفجيرة|Al Fujayrah, Fujairah Emirate`,
63
+ JO: `
64
+ |Amman|عمان|Amman Governorate, Capital Governorate, Al Asimah, عمّان, محافظة العاصمة, العاصمة
65
+ |Irbid|إربد|اربد
66
+ |Zarqa|الزرقاء|Az Zarqa
67
+ |Balqa|البلقاء|Al Balqa
68
+ |Madaba|مادبا
69
+ |Karak|الكرك|Al Karak
70
+ |Tafilah|الطفيلة|At Tafilah
71
+ |Ma'an|معان|Maan
72
+ |Aqaba|العقبة|Al Aqabah
73
+ |Mafraq|المفرق|Al Mafraq
74
+ |Jerash|جرش|Jarash, محافظة جرش
75
+ |Ajloun|عجلون|Ajlun`,
76
+ };
77
+ const CITIES = {
78
+ EG: `
79
+ |Cairo|القاهرة|Al Qahirah, Al Qāhirah, fr=Le Caire, de=Kairo
80
+ |Giza|الجيزة|Al Jizah, Al Jīzah, fr=Gizeh, de=Gizeh
81
+ |Alexandria|الإسكندرية|Al Iskandariyah, الاسكندرية, الأسكندرية, fr=Alexandrie
82
+ |New Cairo|القاهرة الجديدة|New Cairo City, Al Qahirah al Jadidah, مدينة القاهرة الجديدة
83
+ |6th of October|6 أكتوبر|6 October, 6th October, 6th of October City, Sixth of October, أكتوبر 6, السادس من أكتوبر, مدينة 6 أكتوبر, مدينة السادس من أكتوبر
84
+ |Sheikh Zayed|الشيخ زايد|El Sheikh Zaid, El Sheikh Zayed, Sheikh Zayed City, Sheikh Zaid, مدينة الشيخ زايد
85
+ |Helwan|حلوان
86
+ |Shubra El Kheima|شبرا الخيمة|Shubra al Khaymah, Shubrā al Khaymah
87
+ |Port Said|بورسعيد|Bur Sa'id, بور سعيد
88
+ |Suez|السويس|As Suways
89
+ |Ismailia|الإسماعيلية|El Ismailia, Al Isma'iliyah, الاسماعيلية
90
+ |Mansoura|المنصورة|El Mansoura, Al Mansurah
91
+ |Tanta|طنطا
92
+ |Zagazig|الزقازيق|El Zaqaziq, Az Zaqaziq
93
+ |Damietta|دمياط|Dumyat
94
+ |Banha|بنها|Benha
95
+ |Damanhur|دمنهور|Damanhour
96
+ |Shibin El Kom|شبين الكوم|Shibin al Kawm, Shebin El Kom
97
+ |Kafr El Sheikh|كفر الشيخ|Kafr ash Shaykh
98
+ |Faiyum|الفيوم|El Faiyum, Al Fayyum, Fayoum
99
+ |Beni Suef|بني سويف|Bani Suwayf
100
+ |Minya|المنيا|El Minya, El Menia, Al Minya
101
+ |Asyut|أسيوط|Assiut, اسيوط
102
+ |Sohag|سوهاج|Sawhaj, Suhaj
103
+ |Qena|قنا|Qina
104
+ |Luxor|الأقصر|Al Uqsur, الاقصر
105
+ |Aswan|أسوان|اسوان
106
+ |Hurghada|الغردقة|Al Ghardaqah
107
+ |Kharga|الخارجة|El Kharga, Al Kharijah
108
+ |Marsa Matruh|مرسى مطروح|Marsa Matrouh
109
+ |Arish|العريش|El Arish, Al Arish
110
+ |El Tor|الطور|At Tur, مدينة الطور, مدينه الطور
111
+ |Sharm El Sheikh|شرم الشيخ|Sharm ash Shaykh`,
112
+ SA: `
113
+ |Riyadh|الرياض|Ar Riyad, fr=Riyad, de=Riad
114
+ |Jeddah|جدة|Jiddah, Jedda, جده, fr=Djeddah, de=Dschidda
115
+ |Makkah|مكة المكرمة|Mecca, Makkah Al Mukarramah, مكة, fr=La Mecque, de=Mekka
116
+ |Madinah|المدينة المنورة|Medina, Al Madinah, Al Madinah Al Munawwarah, المدينة, fr=Médine
117
+ |Dammam|الدمام|Ad Dammam, Ad Dammām
118
+ |Al Khobar|الخبر|Al Khubar, Khobar
119
+ |Dhahran|الظهران|Az Zahran
120
+ |Taif|الطائف|At Taif, At Ta’if, Ta'if
121
+ |Abha|أبها
122
+ |Khamis Mushait|خميس مشيط
123
+ |Tabuk|تبوك
124
+ |Buraydah|بريدة|Al Buraydah, Buraidah
125
+ |Hail|حائل|Ha'il
126
+ |Al Kharj|الخرج
127
+ |Al Hofuf|الهفوف|Al Hufuf, Hofuf
128
+ |Jubail|الجبيل|Al Jubayl, Al Jubail
129
+ |Yanbu|ينبع
130
+ |Najran|نجران
131
+ |Jazan|جازان|Jizan, جيزان
132
+ |Al Bahah|الباحة|Al Baha
133
+ |Sakaka|سكاكا|Sakakah
134
+ |Arar|عرعر|Arar & Wardat Nuaman, عرعر ورده نعمان`,
135
+ AE: `
136
+ |Dubai|دبي|fr=Dubaï
137
+ |Abu Dhabi|أبوظبي|أبو ظبي, Abu Zabi, fr=Abou Dabi
138
+ |Sharjah|الشارقة|Sharjah City, مدينة الشارقة, Ash Shariqah, fr=Charjah, de=Schardscha
139
+ |Al Ain|العين|Al Ayn
140
+ |Ajman|عجمان|'Ajman
141
+ |Ras Al Khaimah|رأس الخيمة|Ra's al Khaymah, راس الخيمة
142
+ |Fujairah|الفجيرة|Al Fujayrah
143
+ |Umm Al Quwain|أم القيوين|Umm al Qaywayn, ام القيوين
144
+ |Khor Fakkan|خورفكان|Khawr Fakkan, خور فكان
145
+ |Kalba|كلباء`,
146
+ JO: `
147
+ |Amman|عمان|عمّان
148
+ |Zarqa|الزرقاء|Az Zarqa, Zerka
149
+ |Irbid|إربد|اربد
150
+ |Aqaba|العقبة|Al Aqabah
151
+ |Salt|السلط|As Salt, Al Salt
152
+ |Tafilah|الطفيلة|At Tafila, At Tafilah
153
+ |Ma'an|معان|Maan
154
+ |Ajloun|عجلون|Ajlun
155
+ |Madaba|مادبا
156
+ |Jerash|جرش
157
+ |Mafraq|المفرق|Al Mafraq
158
+ |Karak|الكرك|Al Karak`,
159
+ };
160
+ /**
161
+ * A name as two of Azure's answers write one place's: its words, without
162
+ * accents, tatweel, vowel marks or the direction marks Arabic carries, in
163
+ * lower case ("Ash Shāriqah" is "ash shariqah", "الشيـخ زايد" "الشيخ زايد").
164
+ */
165
+ const nameKey = (name) => (typeof name === 'string' ? name : '')
166
+ .replace(/[‎‏؜‪-‮⁦-⁩]/g, '')
167
+ .normalize('NFD')
168
+ .replace(/[\p{M}ـ]/gu, '')
169
+ .toLowerCase()
170
+ .replace(/\s+/g, ' ')
171
+ .trim();
172
+ exports.nameKey = nameKey;
173
+ const tables = new Map();
174
+ function table(of, country) {
175
+ const id = `${of === REGIONS ? 'r' : 'c'}${country}`;
176
+ if (!tables.has(id) && of[country]) {
177
+ const places = [];
178
+ const byName = new Map();
179
+ const byCode = new Map();
180
+ for (const line of of[country].trim().split('\n')) {
181
+ const [code, en, ar, others = ''] = line.split('|');
182
+ const names = { en, ar };
183
+ const all = [en, ar];
184
+ for (const other of others.split(',').map((one) => one.trim()).filter(Boolean)) {
185
+ const [, locale, name] = other.match(/^(fr|de)=(.*)$/) ?? [];
186
+ if (locale)
187
+ names[locale] = name;
188
+ all.push(name ?? other);
189
+ }
190
+ const known = { names, ...(code ? { code } : {}) };
191
+ places.push(known);
192
+ if (code)
193
+ byCode.set(code, known);
194
+ for (const name of all) {
195
+ const of = byName.get((0, exports.nameKey)(name)) ?? [];
196
+ if (!of.includes(known))
197
+ byName.set((0, exports.nameKey)(name), [...of, known]);
198
+ }
199
+ }
200
+ tables.set(id, { places, byName, byCode });
201
+ }
202
+ return tables.get(id);
203
+ }
204
+ /** A region (a governorate, a province, an emirate) of these countries, by Azure's code for it or by one of its names. */
205
+ function knownRegion(country, ...names) {
206
+ const regions = table(REGIONS, country);
207
+ if (!regions)
208
+ return undefined;
209
+ for (const name of names)
210
+ if (/^[A-Z]{2,3}$/.test(name) && regions.byCode.has(name))
211
+ return regions.byCode.get(name);
212
+ for (const name of names) {
213
+ const found = regions.byName.get((0, exports.nameKey)(name));
214
+ if (found?.length === 1)
215
+ return found[0];
216
+ }
217
+ return undefined;
218
+ }
219
+ /** A city of these countries, by one of its names. */
220
+ function knownCity(country, name) {
221
+ const found = table(CITIES, country)?.byName.get((0, exports.nameKey)(name));
222
+ return found?.length === 1 ? found[0] : undefined;
223
+ }
224
+ /** A known place's name in a page's language: its own in French or German where it has one, its English one otherwise. */
225
+ const nameIn = (known, locale) => known.names[locale] ?? known.names.en;
226
+ exports.nameIn = nameIn;
227
+ /** Whether two names are one known city's or region's in a country ("Cairo" and "القاهرة"; "Al Jizah" and "Giza"). */
228
+ function sameKnown(country, one, other) {
229
+ const [a, b] = [(0, exports.nameKey)(one), (0, exports.nameKey)(other)];
230
+ if (!a || !b)
231
+ return false;
232
+ if (a === b)
233
+ return true;
234
+ return [REGIONS, CITIES].some((of) => {
235
+ const byName = table(of, country)?.byName;
236
+ const mine = byName?.get(a) ?? [];
237
+ return mine.length > 0 && (byName?.get(b) ?? []).some((known) => mine.includes(known));
238
+ });
239
+ }
240
+ //# sourceMappingURL=address-names.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address-names.js","sourceRoot":"","sources":["../../../../../libs/map/src/lib/address-names.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,232 @@
1
+ /**
2
+ * One place a line: its code (Azure's, where it gives one), its English
3
+ * and Arabic names, then its other names, comma-separated; `fr=`/`de=` give
4
+ * its French or German name.
5
+ */
6
+ const REGIONS = {
7
+ EG: `
8
+ |Cairo|القاهرة|Al Qahirah, Al Qāhirah, al-Qahirah, Cairo Governorate, محافظة القاهرة, fr=Le Caire, de=Kairo
9
+ |Giza|الجيزة|Al Jizah, Al Jīzah, al-Jeezah, Giza Governorate, محافظة الجيزة, fr=Gizeh, de=Gizeh, Gise
10
+ |Alexandria|الإسكندرية|Al Iskandariyah, Alexandria Governorate, الاسكندرية, الأسكندرية, محافظة الإسكندرية, fr=Alexandrie
11
+ |Qalyubia|القليوبية|Al Qalyubiyah, Qalyubiyah, Kalyubia
12
+ |Beheira|البحيرة|Al Buhayrah, Buhayrah
13
+ |Ismailia|الإسماعيلية|Al Isma'iliyah, Al Ismailiyah, الاسماعيلية
14
+ |Sharqia|الشرقية|Ash Sharqiyah, Ash Sharqīyah, Sharkia, Al Sharqia
15
+ |Dakahlia|الدقهلية|Ad Daqahliyah, Daqahliyah
16
+ |Gharbia|الغربية|Al Gharbiyah
17
+ |Monufia|المنوفية|Al Minufiyah, Menofia
18
+ |Kafr El Sheikh|كفر الشيخ|Kafr ash Shaykh
19
+ |Damietta|دمياط|Dumyat, Dumyāţ, Domiat
20
+ |Port Said|بورسعيد|Bur Sa'id, Būr Sa‘īd, Bour Sa'eed, بور سعيد
21
+ |Suez|السويس|As Suways
22
+ |Faiyum|الفيوم|Al Fayyum, Fayoum
23
+ |Beni Suef|بني سويف|Bani Suwayf
24
+ |Minya|المنيا|Al Minya
25
+ |Asyut|أسيوط|Assiut, اسيوط
26
+ |Sohag|سوهاج|Suhaj
27
+ |Qena|قنا|Qina
28
+ |Luxor|الأقصر|Al Uqsur, الاقصر
29
+ |Aswan|أسوان|اسوان
30
+ |Red Sea|البحر الأحمر|Al Bahr al Ahmar
31
+ |New Valley|الوادي الجديد|Al Wadi al Jadid
32
+ |Matrouh|مطروح|Matruh
33
+ |North Sinai|شمال سيناء|Shamal Sina'
34
+ |South Sinai|جنوب سيناء|Janub Sina'`,
35
+ SA: `
36
+ RIY|Riyadh|الرياض|Ar Riyad, Ar Riyāḑ, Riyadh Region, Riyadh Province, منطقة الرياض, fr=Riyad, de=Riad
37
+ MAK|Makkah|مكة المكرمة|Mecca, Makkah Region, Makkah Province, Makkah Al Mukarramah, مكة, منطقة مكة المكرمة, fr=La Mecque, de=Mekka
38
+ MAD|Madinah|المدينة المنورة|Medina, Al Madinah, Al Madinah Al Munawwarah, المدينة, منطقة المدينة المنورة, fr=Médine, de=Medina
39
+ EAS|Eastern Province|المنطقة الشرقية|Eastern, Eastern Region, Ash Sharqiyah, الشرقية
40
+ QAS|Al Qassim|القصيم|Al Qasim, Qassim, منطقة القصيم
41
+ ASI|Asir|عسير|'Asir, ‘Asir, منطقة عسير
42
+ TAB|Tabuk|تبوك|منطقة تبوك
43
+ HAI|Hail|حائل|Ha'il, Ḩā'il, منطقة حائل
44
+ JAZ|Jazan|جازان|Jizan, Gizan, جيزان, منطقة جازان
45
+ |Najran|نجران|منطقة نجران
46
+ |Al Bahah|الباحة|Al Baha, منطقة الباحة
47
+ JOF|Al Jawf|الجوف|منطقة الجوف
48
+ |Northern Borders|الحدود الشمالية|Northern Frontier, Al Hudud ash Shamaliyah, منطقة الحدود الشمالية`,
49
+ AE: `
50
+ AZ|Abu Dhabi|أبوظبي|Abu Dhabi Emirate, Abu Zabi, أبو ظبي, إمارة أبوظبي, إمارة أبو ظبي, fr=Abou Dabi
51
+ DU|Dubai|دبي|Dubai Emirate, إمارة دبي, fr=Dubaï
52
+ SH|Sharjah|الشارقة|Sharjah Emirate, Ash Shariqah, Ash Shāriqah, إمارة الشارقة, fr=Charjah, de=Schardscha
53
+ AJ|Ajman|عجمان|Ajman Emirate, 'Ajman, إمارة عجمان
54
+ UQ|Umm Al Quwain|أم القيوين|Umm al Qaywayn, Umm Al-Quwain, Umm Al Quwain Emirate, Umm al-Quwain Emirate, ام القيوين
55
+ RK|Ras Al Khaimah|رأس الخيمة|Ra's al Khaymah, Ras al-Khaimah, Ras Al Khaimah Emirate, Ras al-Khaimah Emirate, راس الخيمة
56
+ FU|Fujairah|الفجيرة|Al Fujayrah, Fujairah Emirate`,
57
+ JO: `
58
+ |Amman|عمان|Amman Governorate, Capital Governorate, Al Asimah, عمّان, محافظة العاصمة, العاصمة
59
+ |Irbid|إربد|اربد
60
+ |Zarqa|الزرقاء|Az Zarqa
61
+ |Balqa|البلقاء|Al Balqa
62
+ |Madaba|مادبا
63
+ |Karak|الكرك|Al Karak
64
+ |Tafilah|الطفيلة|At Tafilah
65
+ |Ma'an|معان|Maan
66
+ |Aqaba|العقبة|Al Aqabah
67
+ |Mafraq|المفرق|Al Mafraq
68
+ |Jerash|جرش|Jarash, محافظة جرش
69
+ |Ajloun|عجلون|Ajlun`,
70
+ };
71
+ const CITIES = {
72
+ EG: `
73
+ |Cairo|القاهرة|Al Qahirah, Al Qāhirah, fr=Le Caire, de=Kairo
74
+ |Giza|الجيزة|Al Jizah, Al Jīzah, fr=Gizeh, de=Gizeh
75
+ |Alexandria|الإسكندرية|Al Iskandariyah, الاسكندرية, الأسكندرية, fr=Alexandrie
76
+ |New Cairo|القاهرة الجديدة|New Cairo City, Al Qahirah al Jadidah, مدينة القاهرة الجديدة
77
+ |6th of October|6 أكتوبر|6 October, 6th October, 6th of October City, Sixth of October, أكتوبر 6, السادس من أكتوبر, مدينة 6 أكتوبر, مدينة السادس من أكتوبر
78
+ |Sheikh Zayed|الشيخ زايد|El Sheikh Zaid, El Sheikh Zayed, Sheikh Zayed City, Sheikh Zaid, مدينة الشيخ زايد
79
+ |Helwan|حلوان
80
+ |Shubra El Kheima|شبرا الخيمة|Shubra al Khaymah, Shubrā al Khaymah
81
+ |Port Said|بورسعيد|Bur Sa'id, بور سعيد
82
+ |Suez|السويس|As Suways
83
+ |Ismailia|الإسماعيلية|El Ismailia, Al Isma'iliyah, الاسماعيلية
84
+ |Mansoura|المنصورة|El Mansoura, Al Mansurah
85
+ |Tanta|طنطا
86
+ |Zagazig|الزقازيق|El Zaqaziq, Az Zaqaziq
87
+ |Damietta|دمياط|Dumyat
88
+ |Banha|بنها|Benha
89
+ |Damanhur|دمنهور|Damanhour
90
+ |Shibin El Kom|شبين الكوم|Shibin al Kawm, Shebin El Kom
91
+ |Kafr El Sheikh|كفر الشيخ|Kafr ash Shaykh
92
+ |Faiyum|الفيوم|El Faiyum, Al Fayyum, Fayoum
93
+ |Beni Suef|بني سويف|Bani Suwayf
94
+ |Minya|المنيا|El Minya, El Menia, Al Minya
95
+ |Asyut|أسيوط|Assiut, اسيوط
96
+ |Sohag|سوهاج|Sawhaj, Suhaj
97
+ |Qena|قنا|Qina
98
+ |Luxor|الأقصر|Al Uqsur, الاقصر
99
+ |Aswan|أسوان|اسوان
100
+ |Hurghada|الغردقة|Al Ghardaqah
101
+ |Kharga|الخارجة|El Kharga, Al Kharijah
102
+ |Marsa Matruh|مرسى مطروح|Marsa Matrouh
103
+ |Arish|العريش|El Arish, Al Arish
104
+ |El Tor|الطور|At Tur, مدينة الطور, مدينه الطور
105
+ |Sharm El Sheikh|شرم الشيخ|Sharm ash Shaykh`,
106
+ SA: `
107
+ |Riyadh|الرياض|Ar Riyad, fr=Riyad, de=Riad
108
+ |Jeddah|جدة|Jiddah, Jedda, جده, fr=Djeddah, de=Dschidda
109
+ |Makkah|مكة المكرمة|Mecca, Makkah Al Mukarramah, مكة, fr=La Mecque, de=Mekka
110
+ |Madinah|المدينة المنورة|Medina, Al Madinah, Al Madinah Al Munawwarah, المدينة, fr=Médine
111
+ |Dammam|الدمام|Ad Dammam, Ad Dammām
112
+ |Al Khobar|الخبر|Al Khubar, Khobar
113
+ |Dhahran|الظهران|Az Zahran
114
+ |Taif|الطائف|At Taif, At Ta’if, Ta'if
115
+ |Abha|أبها
116
+ |Khamis Mushait|خميس مشيط
117
+ |Tabuk|تبوك
118
+ |Buraydah|بريدة|Al Buraydah, Buraidah
119
+ |Hail|حائل|Ha'il
120
+ |Al Kharj|الخرج
121
+ |Al Hofuf|الهفوف|Al Hufuf, Hofuf
122
+ |Jubail|الجبيل|Al Jubayl, Al Jubail
123
+ |Yanbu|ينبع
124
+ |Najran|نجران
125
+ |Jazan|جازان|Jizan, جيزان
126
+ |Al Bahah|الباحة|Al Baha
127
+ |Sakaka|سكاكا|Sakakah
128
+ |Arar|عرعر|Arar & Wardat Nuaman, عرعر ورده نعمان`,
129
+ AE: `
130
+ |Dubai|دبي|fr=Dubaï
131
+ |Abu Dhabi|أبوظبي|أبو ظبي, Abu Zabi, fr=Abou Dabi
132
+ |Sharjah|الشارقة|Sharjah City, مدينة الشارقة, Ash Shariqah, fr=Charjah, de=Schardscha
133
+ |Al Ain|العين|Al Ayn
134
+ |Ajman|عجمان|'Ajman
135
+ |Ras Al Khaimah|رأس الخيمة|Ra's al Khaymah, راس الخيمة
136
+ |Fujairah|الفجيرة|Al Fujayrah
137
+ |Umm Al Quwain|أم القيوين|Umm al Qaywayn, ام القيوين
138
+ |Khor Fakkan|خورفكان|Khawr Fakkan, خور فكان
139
+ |Kalba|كلباء`,
140
+ JO: `
141
+ |Amman|عمان|عمّان
142
+ |Zarqa|الزرقاء|Az Zarqa, Zerka
143
+ |Irbid|إربد|اربد
144
+ |Aqaba|العقبة|Al Aqabah
145
+ |Salt|السلط|As Salt, Al Salt
146
+ |Tafilah|الطفيلة|At Tafila, At Tafilah
147
+ |Ma'an|معان|Maan
148
+ |Ajloun|عجلون|Ajlun
149
+ |Madaba|مادبا
150
+ |Jerash|جرش
151
+ |Mafraq|المفرق|Al Mafraq
152
+ |Karak|الكرك|Al Karak`,
153
+ };
154
+ /**
155
+ * A name as two of Azure's answers write one place's: its words, without
156
+ * accents, tatweel, vowel marks or the direction marks Arabic carries, in
157
+ * lower case ("Ash Shāriqah" is "ash shariqah", "الشيـخ زايد" "الشيخ زايد").
158
+ */
159
+ export const nameKey = (name) => (typeof name === 'string' ? name : '')
160
+ .replace(/[‎‏؜‪-‮⁦-⁩]/g, '')
161
+ .normalize('NFD')
162
+ .replace(/[\p{M}ـ]/gu, '')
163
+ .toLowerCase()
164
+ .replace(/\s+/g, ' ')
165
+ .trim();
166
+ const tables = new Map();
167
+ function table(of, country) {
168
+ const id = `${of === REGIONS ? 'r' : 'c'}${country}`;
169
+ if (!tables.has(id) && of[country]) {
170
+ const places = [];
171
+ const byName = new Map();
172
+ const byCode = new Map();
173
+ for (const line of of[country].trim().split('\n')) {
174
+ const [code, en, ar, others = ''] = line.split('|');
175
+ const names = { en, ar };
176
+ const all = [en, ar];
177
+ for (const other of others.split(',').map((one) => one.trim()).filter(Boolean)) {
178
+ const [, locale, name] = other.match(/^(fr|de)=(.*)$/) ?? [];
179
+ if (locale)
180
+ names[locale] = name;
181
+ all.push(name ?? other);
182
+ }
183
+ const known = { names, ...(code ? { code } : {}) };
184
+ places.push(known);
185
+ if (code)
186
+ byCode.set(code, known);
187
+ for (const name of all) {
188
+ const of = byName.get(nameKey(name)) ?? [];
189
+ if (!of.includes(known))
190
+ byName.set(nameKey(name), [...of, known]);
191
+ }
192
+ }
193
+ tables.set(id, { places, byName, byCode });
194
+ }
195
+ return tables.get(id);
196
+ }
197
+ /** A region (a governorate, a province, an emirate) of these countries, by Azure's code for it or by one of its names. */
198
+ export function knownRegion(country, ...names) {
199
+ const regions = table(REGIONS, country);
200
+ if (!regions)
201
+ return undefined;
202
+ for (const name of names)
203
+ if (/^[A-Z]{2,3}$/.test(name) && regions.byCode.has(name))
204
+ return regions.byCode.get(name);
205
+ for (const name of names) {
206
+ const found = regions.byName.get(nameKey(name));
207
+ if (found?.length === 1)
208
+ return found[0];
209
+ }
210
+ return undefined;
211
+ }
212
+ /** A city of these countries, by one of its names. */
213
+ export function knownCity(country, name) {
214
+ const found = table(CITIES, country)?.byName.get(nameKey(name));
215
+ return found?.length === 1 ? found[0] : undefined;
216
+ }
217
+ /** A known place's name in a page's language: its own in French or German where it has one, its English one otherwise. */
218
+ export const nameIn = (known, locale) => known.names[locale] ?? known.names.en;
219
+ /** Whether two names are one known city's or region's in a country ("Cairo" and "القاهرة"; "Al Jizah" and "Giza"). */
220
+ export function sameKnown(country, one, other) {
221
+ const [a, b] = [nameKey(one), nameKey(other)];
222
+ if (!a || !b)
223
+ return false;
224
+ if (a === b)
225
+ return true;
226
+ return [REGIONS, CITIES].some((of) => {
227
+ const byName = table(of, country)?.byName;
228
+ const mine = byName?.get(a) ?? [];
229
+ return mine.length > 0 && (byName?.get(b) ?? []).some((known) => mine.includes(known));
230
+ });
231
+ }
232
+ //# sourceMappingURL=address-names.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address-names.mjs","sourceRoot":"","sources":["../../../../../libs/map/src/lib/address-names.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,16 @@
1
+ import type { Locale } from '@fieldia/core';
2
+ import type { PlaceFound, SearchRequest } from './providers.mjs';
1
3
  /**
2
- * An address in its parts, as Fieldia's address field (`json.address`) keeps
3
- * one: the street with its number, the city, the region (a state, a
4
- * governorate), the postcode, and the country as its ISO code ("EG"). Each
5
- * provider names them its own way; they are read into these here, asked for
6
- * only by a search that wants them (`SearchRequest.parts`).
4
+ * How each provider's addresses read, loaded with the first search that
5
+ * needs it (an address field's; any of Azure's or Google's), never with a
6
+ * page: an address in its parts, as Fieldia's address field
7
+ * (`json.address`) keeps one (the street with its number, the city, the
8
+ * region, a state or a governorate, the postcode, and the country as its ISO
9
+ * code, "EG"); Azure's and Google's places on two lines, in the page's
10
+ * language; and where a suggestion picked is, for those whose suggestions
11
+ * carry no place. Each provider names the parts its own way: what each
12
+ * answered in Egypt, Saudi Arabia, the UAE and Jordan on 12 Oct 2026 is
13
+ * read here.
7
14
  */
8
15
  export interface AddressParts {
9
16
  street?: string;
@@ -16,13 +23,124 @@ export interface AddressParts {
16
23
  export declare const photonParts: (p: unknown) => AddressParts | undefined;
17
24
  /** Nominatim's `address` (with `addressdetails=1`): a town or a village where there is no city. */
18
25
  export declare const nominatimParts: (a: unknown) => AddressParts | undefined;
19
- /** Azure's `address`: its own street line when it has one, its first admin district the region; its country's code is `ISO`, or `iso` in some answers. */
20
- export declare const azureParts: (a: unknown) => AddressParts | undefined;
21
- /** Google's `addressComponents`, each by its type: the country by its short code. */
22
- export declare const googleParts: (components: unknown) => AddressParts | undefined;
23
- /** Mapbox's `context`: its address's own line (number and street), or the street alone. */
26
+ /** Mapbox's `context`: its address's own line (number and street, in its country's order), or the street alone. */
24
27
  export declare const mapboxParts: (p: unknown) => AddressParts | undefined;
25
28
  /** Only places in the countries asked for, when some are: for a provider that cannot be asked to keep to them. */
26
29
  export declare const inCountries: <T extends {
27
30
  parts?: AddressParts;
28
31
  }>(places: T[], countries?: string[]) => T[];
32
+ /**
33
+ * The countries a provider can be asked to keep to: ISO codes, each once,
34
+ * "UK" read as "GB" (as every provider's parts name it). A code no one
35
+ * knows ("XX", "EGY") is left out and said once: Azure and Google refuse a
36
+ * whole search for one.
37
+ */
38
+ export declare function knownCountries(countries: string[] | undefined): string[];
39
+ /** The countries Google is asked to keep to (`includedRegionCodes`): 15 at most, as it refuses a whole search for more; with more, none, said once. */
40
+ export declare function googleRegions(countries: string[] | undefined): string[];
41
+ /** What one of Azure's places is, by its type: a street (an address, a road), an area (a town, a district, a governorate), or a place with a name of its own (a station, a park, a mall). */
42
+ type Level = 'street' | 'area' | 'named';
43
+ type LatLngAt = {
44
+ lat: number;
45
+ lng: number;
46
+ };
47
+ /** A place of Azure's, with what locating it takes: its address as Azure gave it, its level, its street line or its area's own name, and where the search looked. */
48
+ export interface AzurePlace extends PlaceFound {
49
+ country: string;
50
+ azure: {
51
+ address: unknown;
52
+ level: Level;
53
+ street: string;
54
+ area?: string;
55
+ type?: string;
56
+ near?: LatLngAt;
57
+ };
58
+ }
59
+ /** Azure's places on two lines: the street, or the place's own name (a quarter's, a town's), then where it is; their parts when asked. */
60
+ export declare function azurePlaces(found: unknown, locale: Locale, typed?: string, withParts?: boolean, near?: LatLngAt): AzurePlace[];
61
+ /** A point named by Azure: its first address, in order. */
62
+ export declare function azureNamed(found: unknown, locale: Locale): string;
63
+ type Ask = (params: Record<string, string | number | undefined>) => Promise<unknown>;
64
+ /**
65
+ * Azure's suggestions: nearest the place the page gives first, or the whole
66
+ * world's by prominence when it gives none; kept to the countries the page
67
+ * names by Azure itself (`countryRegion`), one request for each (a tenth of
68
+ * a Search transaction each; a list of them answers nothing), taken in
69
+ * turn, five in all. For an address field (`addresses`), no postcodes alone,
70
+ * and the addresses and areas first, the places with names of their own
71
+ * (a station, a park) after them, as Azure's types say. A row that reads as
72
+ * one before it is left out, as one that says less of the same place than
73
+ * another is. The word for a district typed before its name ("حي الروضة")
74
+ * is left out of the words asked, as Azure names its districts without it
75
+ * (with it, Azure lists other towns' streets and districts named with the
76
+ * word, and none of Riyadh's Al Rawdah); the words are asked as typed only
77
+ * when that finds nothing.
78
+ */
79
+ export declare function azureSearch(autocomplete: Ask, request: SearchRequest): Promise<AzurePlace[]>;
80
+ /**
81
+ * Where a suggestion of Azure's is (its suggestions carry no place), asked
82
+ * of its geocoding, the hits in the suggestion's own country and admin
83
+ * districts kept (`fits`; "Al Rawdah" in Riyadh's governorate, never in
84
+ * Al Wasiah's).
85
+ *
86
+ * A street, by its own address in Azure's structured form: its street line
87
+ * (never with a house number Azure made up), its own district for its
88
+ * locality where it names one below its town (its neighbourhood, the
89
+ * district its line names, "Kamel El Shenawy, Garden City"), then its
90
+ * locality, its admin districts, postcode and country; then by its two
91
+ * lines (`query`). Of each answer's streets, the one that names its
92
+ * district; else one in the district's own box as Azure has it (a little
93
+ * beyond it, as its point is a stretch's middle), asked for once; never a
94
+ * street of the name in another district (Azure's first "Kamel El Shenawy"
95
+ * is New Cairo's, 25 km from Garden City's), nor, for a street named by its
96
+ * number alone ("10 41 Street | Abu Tina"), one that does not say it is in
97
+ * its district where Azure knows none. Found nowhere so, its district
98
+ * (`precise: false`), else its town.
99
+ *
100
+ * An area by its own name (its neighbourhood, the place its line names, its
101
+ * locality; a governorate named for its town as the town: "Sohag", whose
102
+ * division's middle is 57 km from the city), never by its postcode (one of
103
+ * a town's many: Azure gives Tanta's 31111 for Tanta), or by its two lines
104
+ * where its neighbourhood is not its locality; a place with a name of its
105
+ * own by its two lines. Of places of one kind and name (Abu Dhabi's Al
106
+ * Bateen and Al Ain's), the one nearest where the search looked; found
107
+ * nowhere, the town it is in (`precise: false`).
108
+ *
109
+ * It is precise when the hit is the place itself (`isItself`), a street's
110
+ * in its own district: where Azure knows no box for the district, a street
111
+ * it marks `Ambiguous` (several of the words) is only near, as one of a
112
+ * number is unless it says it is in its district. Otherwise only near it.
113
+ * Never a place anywhere else: none is found then.
114
+ * A suggestion that names no region ("البرشاء 2", which Azure lists beside
115
+ * the same in Dubai) takes its city and region from the place found.
116
+ */
117
+ export declare function azureLocate(geocode: Ask, place: AzurePlace, locale: Locale): Promise<{
118
+ precise?: false | undefined;
119
+ parts?: {
120
+ city?: string;
121
+ region?: string;
122
+ street?: string;
123
+ postcode?: string;
124
+ country?: string;
125
+ } | undefined;
126
+ address: string;
127
+ lat: number;
128
+ lng: number;
129
+ }>;
130
+ /**
131
+ * Google's `addressComponents`, each by its type: the country by its short
132
+ * code. Its number where Google's own line (`formatted`) puts it: before the
133
+ * street in Egypt and Saudi Arabia ("7524 King Fahd Rd"), after it in Jordan
134
+ * and Germany ("Rainbow St. 15"). Its city its locality; Egypt's streets have
135
+ * none, and their district stands for it ("Qasr El Nil", "Maadi"), by its
136
+ * name alone in Arabic too ("الدقي", not "قسم الدقي", its police district's).
137
+ */
138
+ export declare const googleParts: (components: unknown, formatted?: unknown) => AddressParts | undefined;
139
+ /**
140
+ * Google's suggestions: each one's name, and where it is; for an address
141
+ * field, the addresses first (their types say "geocode"), the shops and
142
+ * buildings after them. Each is located when picked, through `details`
143
+ * (Place Details), which ends its session (`end`), as picking it does.
144
+ */
145
+ export declare function googlePlaces(answer: unknown, { locale, addresses, parts }: SearchRequest, details: (placeId: string) => Promise<unknown>, end: () => void): PlaceFound[];
146
+ export {};