pak-geodata 0.1.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/README.md +474 -3
- package/dist/data/cities.d.ts.map +1 -1
- package/dist/data/cities.js +897 -0
- package/dist/data/cities.js.map +1 -1
- package/dist/geo.d.ts +20 -0
- package/dist/geo.d.ts.map +1 -1
- package/dist/geo.js +71 -3
- package/dist/geo.js.map +1 -1
- package/dist/hierarchy.cjs +6591 -0
- package/dist/hierarchy.d.ts +39 -0
- package/dist/hierarchy.d.ts.map +1 -0
- package/dist/hierarchy.js +242 -0
- package/dist/hierarchy.js.map +1 -0
- package/dist/index.cjs +1402 -157
- package/dist/index.d.ts +6 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -29
- package/dist/index.js.map +1 -1
- package/dist/search.d.ts +19 -5
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +147 -60
- package/dist/search.js.map +1 -1
- package/dist/types.d.ts +11 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/urdu.d.ts +5 -0
- package/dist/urdu.d.ts.map +1 -0
- package/dist/urdu.js +44 -0
- package/dist/urdu.js.map +1 -0
- package/package.json +6 -1
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { PakLocationItem, PakistanProvince, PakistanCity, PakistanArea } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Pre-indexed lookup map for O(1) city lookups.
|
|
4
|
+
* Indexes canonical slug, English name, and Urdu name representations.
|
|
5
|
+
*/
|
|
6
|
+
export declare const cityLookupMap: Map<string, PakistanCity>;
|
|
7
|
+
/**
|
|
8
|
+
* Pre-indexed compound lookup map for O(1) area lookups: `${cityKey}:${areaKey}`.
|
|
9
|
+
* Indexes canonical slugs, Roman numeral variants, title names, and colloquial aliases.
|
|
10
|
+
*/
|
|
11
|
+
export declare const areaCompoundLookupMap: Map<string, PakistanArea>;
|
|
12
|
+
/**
|
|
13
|
+
* Resolves a city name in the requested language ('en' or 'ur') from either
|
|
14
|
+
* a slug or title-cased English name. Falls back to the input key if unverified.
|
|
15
|
+
*/
|
|
16
|
+
export declare function getCityName(key: string, lang?: 'en' | 'ur'): string;
|
|
17
|
+
/**
|
|
18
|
+
* Resolves an area name in the requested language ('en' or 'ur') given a city key
|
|
19
|
+
* and area key (slug, title name, or colloquial alias). Falls back to the input areaKey if unverified.
|
|
20
|
+
*/
|
|
21
|
+
export declare function getAreaName(cityKey: string, areaKey: string, lang?: 'en' | 'ur'): string;
|
|
22
|
+
/**
|
|
23
|
+
* Converts a raw PakistanProvince, PakistanCity, or PakistanArea into a unified PakLocationItem.
|
|
24
|
+
*/
|
|
25
|
+
export declare function toLocationItem(entity: PakistanProvince | PakistanCity | PakistanArea): PakLocationItem;
|
|
26
|
+
/**
|
|
27
|
+
* Returns all verified provinces as PakLocationItem hierarchy elements.
|
|
28
|
+
*/
|
|
29
|
+
export declare function getProvincesAsLocationItems(): PakLocationItem[];
|
|
30
|
+
/**
|
|
31
|
+
* Returns verified cities as PakLocationItem hierarchy elements, optionally filtered by province ID.
|
|
32
|
+
*/
|
|
33
|
+
export declare function getCitiesAsLocationItems(provinceId?: string): PakLocationItem[];
|
|
34
|
+
/**
|
|
35
|
+
* Returns all verified areas in a given city as PakLocationItem hierarchy elements.
|
|
36
|
+
*/
|
|
37
|
+
export declare function getAreasAsLocationItems(cityKey: string): PakLocationItem[];
|
|
38
|
+
export { searchLocationItems } from './search.js';
|
|
39
|
+
//# sourceMappingURL=hierarchy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hierarchy.d.ts","sourceRoot":"","sources":["../src/hierarchy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACb,MAAM,YAAY,CAAC;AAMpB;;;GAGG;AACH,eAAO,MAAM,aAAa,2BAAkC,CAAC;AAuC7D;;;GAGG;AACH,eAAO,MAAM,qBAAqB,2BAAkC,CAAC;AA0ErE;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,IAAI,GAAG,IAAW,GAAG,MAAM,CAUzE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,IAAI,GAAG,IAAW,GAAG,MAAM,CAmC9F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,gBAAgB,GAAG,YAAY,GAAG,YAAY,GACrD,eAAe,CA6CjB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,eAAe,EAAE,CAE/D;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,eAAe,EAAE,CAO/E;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,EAAE,CAQ1E;AAED,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
import { provinces } from './data/provinces.js';
|
|
2
|
+
import { cities } from './data/cities.js';
|
|
3
|
+
import { allAreas } from './data/areas/index.js';
|
|
4
|
+
import { toEasternDigits, normalizeUrduText } from './urdu.js';
|
|
5
|
+
/**
|
|
6
|
+
* Pre-indexed lookup map for O(1) city lookups.
|
|
7
|
+
* Indexes canonical slug, English name, and Urdu name representations.
|
|
8
|
+
*/
|
|
9
|
+
export const cityLookupMap = new Map();
|
|
10
|
+
for (const c of cities) {
|
|
11
|
+
cityLookupMap.set(c.id.toLowerCase().trim(), c);
|
|
12
|
+
cityLookupMap.set(c.name.toLowerCase().trim(), c);
|
|
13
|
+
if (c.urduName) {
|
|
14
|
+
cityLookupMap.set(c.urduName.trim(), c);
|
|
15
|
+
cityLookupMap.set(toEasternDigits(c.urduName).trim(), c);
|
|
16
|
+
const normUrdu = normalizeUrduText(c.urduName);
|
|
17
|
+
if (normUrdu) {
|
|
18
|
+
cityLookupMap.set(normUrdu, c);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Pre-indexed mapping of areas grouped by city ID.
|
|
24
|
+
*/
|
|
25
|
+
const areasByCityMap = new Map();
|
|
26
|
+
for (const a of allAreas) {
|
|
27
|
+
const cKey = a.cityId.toLowerCase();
|
|
28
|
+
const list = areasByCityMap.get(cKey) || [];
|
|
29
|
+
list.push(a);
|
|
30
|
+
areasByCityMap.set(cKey, list);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Maps an area's slug so that Roman numerals in name (e.g. "Gulberg III")
|
|
34
|
+
* produce aligned canonical slugs (e.g. "lahore-gulberg-iii").
|
|
35
|
+
*/
|
|
36
|
+
function canonicalAreaSlug(area) {
|
|
37
|
+
const romanMatch = area.name.match(/\b([IVXLCDM]+)$/i);
|
|
38
|
+
if (romanMatch) {
|
|
39
|
+
const romanLower = romanMatch[1].toLowerCase();
|
|
40
|
+
return area.id.replace(/-\d+$/, `-${romanLower}`);
|
|
41
|
+
}
|
|
42
|
+
return area.id;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Pre-indexed compound lookup map for O(1) area lookups: `${cityKey}:${areaKey}`.
|
|
46
|
+
* Indexes canonical slugs, Roman numeral variants, title names, and colloquial aliases.
|
|
47
|
+
*/
|
|
48
|
+
export const areaCompoundLookupMap = new Map();
|
|
49
|
+
for (const a of allAreas) {
|
|
50
|
+
const cityId = a.cityId.toLowerCase();
|
|
51
|
+
const city = cityLookupMap.get(cityId);
|
|
52
|
+
const cityKeys = new Set([cityId]);
|
|
53
|
+
if (city?.name) {
|
|
54
|
+
cityKeys.add(city.name.toLowerCase().trim());
|
|
55
|
+
}
|
|
56
|
+
const variants = new Set();
|
|
57
|
+
// 1. Raw area ID
|
|
58
|
+
const rawId = a.id.toLowerCase().trim();
|
|
59
|
+
variants.add(rawId);
|
|
60
|
+
// 2. Slug without city prefix
|
|
61
|
+
if (rawId.startsWith(`${cityId}-`)) {
|
|
62
|
+
variants.add(rawId.slice(cityId.length + 1));
|
|
63
|
+
}
|
|
64
|
+
// 3. Canonical slug with Roman numeral alignment
|
|
65
|
+
const canonSlug = canonicalAreaSlug(a).toLowerCase().trim();
|
|
66
|
+
variants.add(canonSlug);
|
|
67
|
+
if (canonSlug.startsWith(`${cityId}-`)) {
|
|
68
|
+
variants.add(canonSlug.slice(cityId.length + 1));
|
|
69
|
+
}
|
|
70
|
+
// 4. Exact English name
|
|
71
|
+
const rawName = a.name.toLowerCase().trim();
|
|
72
|
+
variants.add(rawName);
|
|
73
|
+
// 5. Slugified name
|
|
74
|
+
const slugifiedName = rawName.replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
|
|
75
|
+
variants.add(slugifiedName);
|
|
76
|
+
variants.add(`${cityId}-${slugifiedName}`);
|
|
77
|
+
// 6. Aliases
|
|
78
|
+
for (const alias of a.aliases) {
|
|
79
|
+
const lowerAlias = alias.toLowerCase().trim();
|
|
80
|
+
variants.add(lowerAlias);
|
|
81
|
+
const slugAlias = lowerAlias.replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
|
|
82
|
+
variants.add(slugAlias);
|
|
83
|
+
variants.add(`${cityId}-${slugAlias}`);
|
|
84
|
+
}
|
|
85
|
+
// 7. Urdu names
|
|
86
|
+
if (a.urduName) {
|
|
87
|
+
variants.add(a.urduName.trim());
|
|
88
|
+
variants.add(toEasternDigits(a.urduName).trim());
|
|
89
|
+
const norm = normalizeUrduText(a.urduName);
|
|
90
|
+
if (norm) {
|
|
91
|
+
variants.add(norm);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// 8. Known colloquial mappings
|
|
95
|
+
if (cityId === 'lahore' && a.id === 'lahore-gulberg-3') {
|
|
96
|
+
variants.add('gulberg');
|
|
97
|
+
variants.add('lahore-gulberg');
|
|
98
|
+
}
|
|
99
|
+
// Populate compound map for every city key and area key combination
|
|
100
|
+
for (const cKey of cityKeys) {
|
|
101
|
+
for (const v of variants) {
|
|
102
|
+
const compoundKey = `${cKey}:${v}`;
|
|
103
|
+
if (!areaCompoundLookupMap.has(compoundKey)) {
|
|
104
|
+
areaCompoundLookupMap.set(compoundKey, a);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Resolves a city name in the requested language ('en' or 'ur') from either
|
|
111
|
+
* a slug or title-cased English name. Falls back to the input key if unverified.
|
|
112
|
+
*/
|
|
113
|
+
export function getCityName(key, lang = 'en') {
|
|
114
|
+
if (typeof key !== 'string')
|
|
115
|
+
return '';
|
|
116
|
+
const trimmed = key.trim();
|
|
117
|
+
if (!trimmed)
|
|
118
|
+
return '';
|
|
119
|
+
let city = cityLookupMap.get(trimmed.toLowerCase());
|
|
120
|
+
if (!city) {
|
|
121
|
+
city = cityLookupMap.get(normalizeUrduText(trimmed));
|
|
122
|
+
}
|
|
123
|
+
if (!city)
|
|
124
|
+
return key;
|
|
125
|
+
return lang === 'ur' ? toEasternDigits(city.urduName) : city.name;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Resolves an area name in the requested language ('en' or 'ur') given a city key
|
|
129
|
+
* and area key (slug, title name, or colloquial alias). Falls back to the input areaKey if unverified.
|
|
130
|
+
*/
|
|
131
|
+
export function getAreaName(cityKey, areaKey, lang = 'en') {
|
|
132
|
+
if (typeof areaKey !== 'string')
|
|
133
|
+
return '';
|
|
134
|
+
if (typeof cityKey !== 'string')
|
|
135
|
+
return areaKey;
|
|
136
|
+
const trimmedArea = areaKey.trim();
|
|
137
|
+
const trimmedCity = cityKey.trim();
|
|
138
|
+
if (!trimmedArea)
|
|
139
|
+
return areaKey;
|
|
140
|
+
if (!trimmedCity)
|
|
141
|
+
return areaKey;
|
|
142
|
+
let match = areaCompoundLookupMap.get(`${trimmedCity.toLowerCase()}:${trimmedArea.toLowerCase()}`);
|
|
143
|
+
if (!match) {
|
|
144
|
+
const city = cityLookupMap.get(trimmedCity.toLowerCase()) ||
|
|
145
|
+
cityLookupMap.get(normalizeUrduText(trimmedCity));
|
|
146
|
+
if (city) {
|
|
147
|
+
match = areaCompoundLookupMap.get(`${city.id}:${trimmedArea.toLowerCase()}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (!match) {
|
|
151
|
+
const normArea = normalizeUrduText(trimmedArea);
|
|
152
|
+
if (normArea) {
|
|
153
|
+
match = areaCompoundLookupMap.get(`${trimmedCity.toLowerCase()}:${normArea}`);
|
|
154
|
+
if (!match) {
|
|
155
|
+
const city = cityLookupMap.get(trimmedCity.toLowerCase()) ||
|
|
156
|
+
cityLookupMap.get(normalizeUrduText(trimmedCity));
|
|
157
|
+
if (city) {
|
|
158
|
+
match = areaCompoundLookupMap.get(`${city.id}:${normArea}`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
if (!match)
|
|
164
|
+
return areaKey;
|
|
165
|
+
return lang === 'ur' ? toEasternDigits(match.urduName || match.name) : match.name;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Converts a raw PakistanProvince, PakistanCity, or PakistanArea into a unified PakLocationItem.
|
|
169
|
+
*/
|
|
170
|
+
export function toLocationItem(entity) {
|
|
171
|
+
if (!entity || typeof entity !== 'object') {
|
|
172
|
+
throw new TypeError('Expected a valid location entity');
|
|
173
|
+
}
|
|
174
|
+
// 1. Province: has capitalCityId
|
|
175
|
+
if ('capitalCityId' in entity) {
|
|
176
|
+
return {
|
|
177
|
+
id: entity.id,
|
|
178
|
+
nameEn: entity.name,
|
|
179
|
+
nameUr: toEasternDigits(entity.urduName),
|
|
180
|
+
type: 'province',
|
|
181
|
+
parentId: undefined,
|
|
182
|
+
coordinates: undefined
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
// 2. City: has district and provinceId without cityId
|
|
186
|
+
if ('district' in entity && !('cityId' in entity)) {
|
|
187
|
+
return {
|
|
188
|
+
id: entity.id,
|
|
189
|
+
nameEn: entity.name,
|
|
190
|
+
nameUr: toEasternDigits(entity.urduName),
|
|
191
|
+
type: 'district',
|
|
192
|
+
parentId: entity.provinceId,
|
|
193
|
+
coordinates: entity.coordinates
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
// 3. Area: has cityId and name
|
|
197
|
+
if ('cityId' in entity && 'name' in entity) {
|
|
198
|
+
const area = entity;
|
|
199
|
+
return {
|
|
200
|
+
id: canonicalAreaSlug(area),
|
|
201
|
+
nameEn: area.name,
|
|
202
|
+
nameUr: toEasternDigits(area.urduName || area.name),
|
|
203
|
+
type: 'area',
|
|
204
|
+
parentId: area.cityId,
|
|
205
|
+
coordinates: area.coordinates
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
throw new TypeError('Unrecognized location entity format: expected province, city, or area object');
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Returns all verified provinces as PakLocationItem hierarchy elements.
|
|
212
|
+
*/
|
|
213
|
+
export function getProvincesAsLocationItems() {
|
|
214
|
+
return provinces.map(toLocationItem);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Returns verified cities as PakLocationItem hierarchy elements, optionally filtered by province ID.
|
|
218
|
+
*/
|
|
219
|
+
export function getCitiesAsLocationItems(provinceId) {
|
|
220
|
+
let list = cities;
|
|
221
|
+
if (provinceId && typeof provinceId === 'string') {
|
|
222
|
+
const provKey = provinceId.toLowerCase().trim();
|
|
223
|
+
list = cities.filter((c) => c.provinceId.toLowerCase() === provKey);
|
|
224
|
+
}
|
|
225
|
+
return list.map(toLocationItem);
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Returns all verified areas in a given city as PakLocationItem hierarchy elements.
|
|
229
|
+
*/
|
|
230
|
+
export function getAreasAsLocationItems(cityKey) {
|
|
231
|
+
if (typeof cityKey !== 'string')
|
|
232
|
+
return [];
|
|
233
|
+
const trimmed = cityKey.trim();
|
|
234
|
+
if (!trimmed)
|
|
235
|
+
return [];
|
|
236
|
+
const city = cityLookupMap.get(trimmed.toLowerCase());
|
|
237
|
+
const cityId = city ? city.id : trimmed.toLowerCase();
|
|
238
|
+
const areas = areasByCityMap.get(cityId) || [];
|
|
239
|
+
return areas.map(toLocationItem);
|
|
240
|
+
}
|
|
241
|
+
export { searchLocationItems } from './search.js';
|
|
242
|
+
//# sourceMappingURL=hierarchy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hierarchy.js","sourceRoot":"","sources":["../src/hierarchy.ts"],"names":[],"mappings":"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"}
|