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.
@@ -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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"}