founder-schema 0.18.0 → 0.19.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.
Files changed (38) hide show
  1. package/README.md +64 -3
  2. package/dist/core/common.d.ts +7 -13
  3. package/dist/core/common.d.ts.map +1 -1
  4. package/dist/core/common.js +7 -11
  5. package/dist/core/common.js.map +1 -1
  6. package/dist/core/limits.d.ts +25 -0
  7. package/dist/core/limits.d.ts.map +1 -1
  8. package/dist/core/limits.js +25 -0
  9. package/dist/core/limits.js.map +1 -1
  10. package/dist/core/validation.d.ts +13 -0
  11. package/dist/core/validation.d.ts.map +1 -1
  12. package/dist/core/validation.js +13 -0
  13. package/dist/core/validation.js.map +1 -1
  14. package/dist/domains/location/areas.d.ts +331 -0
  15. package/dist/domains/location/areas.d.ts.map +1 -0
  16. package/dist/domains/location/areas.js +238 -0
  17. package/dist/domains/location/areas.js.map +1 -0
  18. package/dist/domains/location/india.d.ts +31 -123
  19. package/dist/domains/location/india.d.ts.map +1 -1
  20. package/dist/domains/location/india.js +98 -64
  21. package/dist/domains/location/india.js.map +1 -1
  22. package/dist/domains/onboarding/onboarding-answers.d.ts +9 -12
  23. package/dist/domains/onboarding/onboarding-answers.d.ts.map +1 -1
  24. package/dist/domains/onboarding/onboarding-answers.js +11 -18
  25. package/dist/domains/onboarding/onboarding-answers.js.map +1 -1
  26. package/dist/domains/onboarding/onboarding.d.ts +110 -88
  27. package/dist/domains/onboarding/onboarding.d.ts.map +1 -1
  28. package/dist/domains/onboarding/onboarding.js +14 -19
  29. package/dist/domains/onboarding/onboarding.js.map +1 -1
  30. package/dist/domains/profile/founder-profile.d.ts +57 -41
  31. package/dist/domains/profile/founder-profile.d.ts.map +1 -1
  32. package/dist/domains/profile/founder-profile.js +12 -4
  33. package/dist/domains/profile/founder-profile.js.map +1 -1
  34. package/dist/index.d.ts +4 -3
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +6 -4
  37. package/dist/index.js.map +1 -1
  38. package/package.json +1 -1
@@ -3,19 +3,18 @@
3
3
  * and cities (0.17.0, moved here from the web client, where the location step's
4
4
  * lists lived in the screen).
5
5
  *
6
- * Founder Circle is in India for now (the user, 2026-10-18: the country is
7
- * shown locked to India and a state and city are chosen from lists). The RULE
8
- * is `indiaLocationSchema` below; this file is its data, read by every side:
6
+ * Founder Circle is in India for now (the user, 2026-10-18). Since 0.19.0 a
7
+ * member's location is picked from `master_db`'s area tree (`./areas.ts`), so
8
+ * this file no longer holds a write rule; it is the data that names a place
9
+ * the way members say it, read by every side:
9
10
  *
10
11
  * states all 28 states and 8 union territories, by their current names: a
11
12
  * CLOSED list, so a state is one of these or refused (`stateUnknown`)
12
- * cities per state, the larger cities first, the rest A to Z. A HELP, NOT A
13
- * RULE: the profile stores the city as text and Discover matches
14
- * text, so the list spares members the typing and the spelling
15
- * variants, and the picker also takes a town it does not hold
13
+ * cities per state, the larger cities first, the rest A to Z: the
14
+ * spellings Discover's city filter and a stored city are matched in
16
15
  * aliases older or other names a member may search by ("Bangalore" finds
17
16
  * Bengaluru), and the district names the location lookup answers
18
- * with ("Bengaluru Urban"), so the server's suggestion and a member's
17
+ * with ("Bengaluru Urban"), so a district's public city and a member's
19
18
  * search land on the list's own spelling
20
19
  *
21
20
  * Written for this product from public knowledge of India's cities; no
@@ -23,9 +22,7 @@
23
22
  *
24
23
  * @module founder-schema/domains/location/india
25
24
  */
26
- import { z } from 'zod';
27
25
  import { CITY_MAX } from '../../core/limits.js';
28
- import { VALIDATION_MESSAGE } from '../../core/validation.js';
29
26
  /** The one country a location may be in, for now. */
30
27
  export const INDIA = 'India';
31
28
  /** India's international dialing code: what a phone number is shown with (the stored number has none). */
@@ -154,6 +151,7 @@ export const INDIA_STATES = [
154
151
  'Durg',
155
152
  'Ambikapur',
156
153
  'Bhatapara',
154
+ 'Bijapur',
157
155
  'Chirmiri',
158
156
  'Dhamtari',
159
157
  'Jagdalpur',
@@ -973,9 +971,12 @@ export const INDIA_STATES = [
973
971
  * any of them shows the city as the list writes it.
974
972
  */
975
973
  export const CITY_ALIASES = {
976
- Bengaluru: ['Bangalore', 'Bengaluru Urban', 'Bangalore Urban'],
977
- Mumbai: ['Bombay', 'Mumbai Suburban', 'Mumbai City'],
978
- Chennai: ['Madras'],
974
+ // `Bbmp`: how the area tree names Bengaluru's council (0.19.0).
975
+ Bengaluru: ['Bangalore', 'Bengaluru Urban', 'Bangalore Urban', 'Bbmp', 'Bruhat Bengaluru'],
976
+ Mumbai: ['Bombay', 'Mumbai Suburban', 'Mumbai City', 'Greater Mumbai'],
977
+ Chennai: ['Madras', 'Greater Chennai'],
978
+ // The area tree's spelling (LGD).
979
+ Ahmedabad: ['Ahmadabad'],
979
980
  Kolkata: ['Calcutta'],
980
981
  Gurugram: ['Gurgaon'],
981
982
  Noida: ['Gautam Buddha Nagar'],
@@ -1030,8 +1031,8 @@ export const CITY_ALIASES = {
1030
1031
  Baharampur: ['Berhampore'],
1031
1032
  Bardhaman: ['Burdwan', 'Purba Bardhaman'],
1032
1033
  Sohra: ['Cherrapunji'],
1033
- 'Sri Vijaya Puram': ['Port Blair', 'South Andaman'],
1034
- Mohali: ['SAS Nagar', 'Sahibzada Ajit Singh Nagar'],
1034
+ 'Sri Vijaya Puram': ['Port Blair', 'South Andaman', 'South Andamans'],
1035
+ Mohali: ['SAS Nagar', 'Sahibzada Ajit Singh Nagar', 'S.A.S Nagar'],
1035
1036
  Kurukshetra: ['Thanesar'],
1036
1037
  Gyalshing: ['Geyzing'],
1037
1038
  Siaha: ['Saiha'],
@@ -1073,7 +1074,7 @@ export const CITY_ALIASES = {
1073
1074
  };
1074
1075
  const key = (text) => text
1075
1076
  .toLowerCase()
1076
- .replace(/[.\s&]+/g, ' ')
1077
+ .replace(/[.\s&-]+/g, ' ')
1077
1078
  .replace(/\band\b/g, ' ')
1078
1079
  .replace(/\s+/g, ' ')
1079
1080
  .trim();
@@ -1132,6 +1133,87 @@ export function canonicalCityName(name, states = INDIA_STATES) {
1132
1133
  const [only] = found;
1133
1134
  return found.size === 1 && only ? only : name;
1134
1135
  }
1136
+ /**
1137
+ * The town an urban body is, from the area tree's name for its council
1138
+ * (0.19.0): "Gangtok (M Corp.)", "Kohima Municipal Council", "City Corporation
1139
+ * Panaji", "Municipal Committee Akhnoor", "Rajgarh (Alwar)" (a bracket that
1140
+ * tells two towns apart) are Gangtok, Kohima, Panaji, Akhnoor, Rajgarh. What
1141
+ * is left is the town's own name; one the tree wrote in capitals ("MAUGANJ")
1142
+ * reads like the rest (Mauganj).
1143
+ */
1144
+ export function townName(council) {
1145
+ const name = council
1146
+ .replace(/\([^)]*\)/g, ' ')
1147
+ .replace(/\.{2,}/g, ' ')
1148
+ .replace(/^\s*(city corporation|municipal committee|municipal council|municipal board|notified area committee|town area committee|nagar palika,)\s*/i, '')
1149
+ .replace(/\s+(municipal corporation|municipal council|municipal committee|municipal board|municipal co-?operation|muncipal council|town council|town committee|town area committee|notified area committee|cantonment board|corporation|municipality|nagar nigam|nagar palika parishad|nagar palika|nagar parishad|nagar panchayat|nagarpanchayat|mahanagara palike|mahanagar palika|mahanagarpalika)\s*$/i, '')
1150
+ // A twin town is one hyphen however the tree spaced it ("Murwara - Katni" is
1151
+ // Murwara-Katni), as the list writes its own (Pimpri-Chinchwad, Vasai-Virar).
1152
+ .replace(/\s*-\s*/g, '-')
1153
+ .replace(/\s+/g, ' ')
1154
+ .trim()
1155
+ .replace(/\.+$/, '');
1156
+ return /\p{Ll}/u.test(name)
1157
+ ? name
1158
+ : name
1159
+ .toLowerCase()
1160
+ .replace(/(^|[\s-])(\p{L})/gu, (_, gap, c) => gap + c.toUpperCase());
1161
+ }
1162
+ /**
1163
+ * States that are one city for the public (0.19.0): the area tree splits
1164
+ * Delhi into districts named by compass point ("South", "Central North"),
1165
+ * which no one calls their city. Any district not itself a listed city (New
1166
+ * Delhi is) is the state's city.
1167
+ */
1168
+ const ONE_CITY_STATES = {
1169
+ Delhi: 'Delhi',
1170
+ Chandigarh: 'Chandigarh',
1171
+ };
1172
+ /**
1173
+ * The PUBLIC city of a place picked from the area tree (0.19.0): what cards
1174
+ * show and Discover's city filter and facets match. A member in a town (they
1175
+ * picked the town, or a ward in it) is in that town; anyone else is in their
1176
+ * district (a village, a block, the whole district). Either way in the
1177
+ * state's own spelling (`listedCityName`: "Bbmp" is Bengaluru, "Greater
1178
+ * Mumbai" is Mumbai), else the name as the tree has it, cleaned
1179
+ * (`townName`; "Lakshadweep District" is Lakshadweep). A town or district
1180
+ * this list does not hold is still a real place, shown as it is.
1181
+ *
1182
+ * Always fits a stored city (`CITY_MAX`): a town named longer is shown as its
1183
+ * district, and a district longer still is cut at a word. The all-India tree
1184
+ * has none (its longest town or district is 35, 2026-10-22); a later tree may.
1185
+ */
1186
+ export function publicCityOf(stateName, district, town) {
1187
+ const city = cityOf(stateName, district, town);
1188
+ if (city.length <= CITY_MAX)
1189
+ return city;
1190
+ if (town)
1191
+ return publicCityOf(stateName, district);
1192
+ return city
1193
+ .slice(0, CITY_MAX + 1)
1194
+ .replace(/\s+\S*$/, '')
1195
+ .slice(0, CITY_MAX);
1196
+ }
1197
+ function cityOf(stateName, district, town) {
1198
+ const state = findIndiaState(stateName);
1199
+ const listed = (name) => listedCityName(state, name);
1200
+ const onList = (name) => Boolean(state?.cities.includes(name));
1201
+ const townCity = town ? townName(town) : '';
1202
+ if (townCity) {
1203
+ const named = listed(townCity);
1204
+ if (onList(named))
1205
+ return named;
1206
+ const oneCity = state ? ONE_CITY_STATES[state.name] : undefined;
1207
+ // A Delhi council named by compass ("East Delhi") is Delhi: listed above.
1208
+ return oneCity && /delhi/i.test(townCity) ? oneCity : named;
1209
+ }
1210
+ // A district's own brackets too ("Khandwa (East Nimar)" is Khandwa).
1211
+ const districtCity = listed(townName(district.replace(/\s+district\s*$/i, '')));
1212
+ if (onList(districtCity))
1213
+ return districtCity;
1214
+ const oneCity = state ? ONE_CITY_STATES[state.name] : undefined;
1215
+ return oneCity ?? districtCity;
1216
+ }
1135
1217
  /**
1136
1218
  * A place as the list writes it, from however it arrived: a member's older
1137
1219
  * draft ("karnataka"), the location lookup ("Bengaluru Urban" in "KARNATAKA"),
@@ -1152,52 +1234,4 @@ export function canonicalIndiaLocation(place) {
1152
1234
  country: INDIA,
1153
1235
  };
1154
1236
  }
1155
- // ─── The rule ────────────────────────────────────────────────────────────────
1156
- /**
1157
- * A location as it is WRITTEN (0.17.0): onboarding's finish, the Me tab's
1158
- * personal details, and the server's own suggestion. India only, one of its
1159
- * states and union territories, and a city of any name within it.
1160
- *
1161
- * Until 0.17.0 the schema took any country and any state text while the web
1162
- * locked the country to India and chose the state from this list, so another
1163
- * client could store what no screen can show. The read side keeps
1164
- * `locationSchema`: a location stored before this rule is still read as it is.
1165
- *
1166
- * The STATE is required: every Indian city has one, and the picker lists a
1167
- * state's cities only once it is chosen. It is read the way people and the
1168
- * location lookup write it ("KARNATAKA", "Orissa", "Jammu & Kashmir" are the
1169
- * list's Karnataka, Odisha, Jammu and Kashmir: `findIndiaState`), so any client
1170
- * may send another spelling and the list's name is what is kept. Left empty it
1171
- * is `stateRequired`; one the list does not know is `stateUnknown`.
1172
- */
1173
- export const indiaLocationSchema = z.object({
1174
- city: z.string().trim().min(1).max(CITY_MAX),
1175
- // A typed string in, the list's name out: never a preprocess (0.18.0: its
1176
- // input read as `unknown`, so a caller typing the body by `z.input` could
1177
- // send anything and still compile).
1178
- // Missing, blank and unknown all reach the CHOICE (`invalid_value`, as a
1179
- // picker's refusal always was): a form words an unchosen state "Choose your
1180
- // state", not "fill this in" (0.18.0, ram's suite: a length check, then a
1181
- // missing key, each changed that). Typed in: a string, or left out.
1182
- state: z
1183
- .string({ error: VALIDATION_MESSAGE.stateUnknown })
1184
- .default('')
1185
- .transform((given) => findIndiaState(given)?.name ?? given.trim())
1186
- .pipe(z.enum(INDIA_STATE_NAMES, {
1187
- error: (issue) => issue.input === '' ? VALIDATION_MESSAGE.stateRequired : VALIDATION_MESSAGE.stateUnknown,
1188
- })),
1189
- country: z.literal(INDIA),
1190
- });
1191
- /**
1192
- * The city these coordinates look like, for the member to CONFIRM, or `null`
1193
- * when the lookup could not place them confidently (or they are outside India,
1194
- * whose area data is all there is). A suggestion, never a write: only what the
1195
- * member then submits becomes their location.
1196
- *
1197
- * In the WRITE shape (0.17.0): the server names the state and city the way
1198
- * this list does (`findIndiaState`, `listedCityName`: the lookup's "Bengaluru
1199
- * Urban" is Bengaluru), so what it suggests is what the member could have
1200
- * picked, and saving it unchanged can never be refused.
1201
- */
1202
- export const suggestedLocationSchema = indiaLocationSchema.nullable();
1203
1237
  //# sourceMappingURL=india.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"india.js","sourceRoot":"","sources":["../../../src/domains/location/india.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * founder-schema — Where a founder is based: India's states, union territories\n * and cities (0.17.0, moved here from the web client, where the location step's\n * lists lived in the screen).\n *\n * Founder Circle is in India for now (the user, 2026-10-18: the country is\n * shown locked to India and a state and city are chosen from lists). The RULE\n * is `indiaLocationSchema` below; this file is its data, read by every side:\n *\n * states all 28 states and 8 union territories, by their current names: a\n * CLOSED list, so a state is one of these or refused (`stateUnknown`)\n * cities per state, the larger cities first, the rest A to Z. A HELP, NOT A\n * RULE: the profile stores the city as text and Discover matches\n * text, so the list spares members the typing and the spelling\n * variants, and the picker also takes a town it does not hold\n * aliases older or other names a member may search by (\"Bangalore\" finds\n * Bengaluru), and the district names the location lookup answers\n * with (\"Bengaluru Urban\"), so the server's suggestion and a member's\n * search land on the list's own spelling\n *\n * Written for this product from public knowledge of India's cities; no\n * third-party dataset is copied in.\n *\n * @module founder-schema/domains/location/india\n */\n\nimport { z } from 'zod';\nimport { CITY_MAX } from '../../core/limits.js';\nimport { VALIDATION_MESSAGE } from '../../core/validation.js';\nimport type { GST_STATES } from '../billing/gst.js';\n\n/**\n * A state or union territory, by the ONE list of their names: GST's\n * (`GST_STATES`, billing), which already held all 36. This module adds each\n * one's cities and other names; it never spells a state on its own, and a\n * test holds the two sets equal.\n */\nexport type IndiaStateName = (typeof GST_STATES)[number]['name'];\n\nexport interface IndiaState {\n name: IndiaStateName;\n /** Other names the state is searched or answered by. */\n aliases?: readonly string[];\n cities: readonly string[];\n}\n\n/** The one country a location may be in, for now. */\nexport const INDIA = 'India' as const;\n\n/** India's international dialing code: what a phone number is shown with (the stored number has none). */\nexport const INDIA_DIALING_CODE = '+91' as const;\n\nexport const INDIA_STATES: readonly IndiaState[] = [\n {\n name: 'Andhra Pradesh',\n cities: [\n 'Visakhapatnam',\n 'Vijayawada',\n 'Guntur',\n 'Nellore',\n 'Kurnool',\n 'Rajamahendravaram',\n 'Tirupati',\n 'Kakinada',\n 'Kadapa',\n 'Anantapur',\n 'Amaravati',\n 'Adoni',\n 'Bhimavaram',\n 'Chilakaluripet',\n 'Chittoor',\n 'Dharmavaram',\n 'Eluru',\n 'Gudivada',\n 'Guntakal',\n 'Hindupur',\n 'Machilipatnam',\n 'Madanapalle',\n 'Nandyal',\n 'Narasaraopet',\n 'Ongole',\n 'Proddatur',\n 'Puttaparthi',\n 'Srikakulam',\n 'Tadepalligudem',\n 'Tenali',\n 'Vizianagaram',\n ],\n },\n {\n name: 'Arunachal Pradesh',\n cities: [\n 'Itanagar',\n 'Naharlagun',\n 'Pasighat',\n 'Aalo',\n 'Bomdila',\n 'Changlang',\n 'Daporijo',\n 'Khonsa',\n 'Namsai',\n 'Roing',\n 'Seppa',\n 'Tawang',\n 'Tezu',\n 'Ziro',\n ],\n },\n {\n name: 'Assam',\n cities: [\n 'Guwahati',\n 'Dibrugarh',\n 'Silchar',\n 'Jorhat',\n 'Tezpur',\n 'Nagaon',\n 'Tinsukia',\n 'Barpeta',\n 'Bongaigaon',\n 'Dhubri',\n 'Diphu',\n 'Goalpara',\n 'Golaghat',\n 'Haflong',\n 'Hailakandi',\n 'Karimganj',\n 'Kokrajhar',\n 'Mangaldoi',\n 'Nalbari',\n 'North Lakhimpur',\n 'Sivasagar',\n ],\n },\n {\n name: 'Bihar',\n cities: [\n 'Patna',\n 'Gaya Ji',\n 'Bhagalpur',\n 'Muzaffarpur',\n 'Darbhanga',\n 'Purnia',\n 'Arrah',\n 'Aurangabad',\n 'Begusarai',\n 'Bettiah',\n 'Bihar Sharif',\n 'Bodh Gaya',\n 'Buxar',\n 'Chapra',\n 'Dehri',\n 'Hajipur',\n 'Jamalpur',\n 'Jehanabad',\n 'Katihar',\n 'Kishanganj',\n 'Motihari',\n 'Munger',\n 'Nawada',\n 'Saharsa',\n 'Sasaram',\n 'Sitamarhi',\n 'Siwan',\n ],\n },\n {\n name: 'Chhattisgarh',\n cities: [\n 'Raipur',\n 'Bhilai',\n 'Bilaspur',\n 'Korba',\n 'Durg',\n 'Ambikapur',\n 'Bhatapara',\n 'Chirmiri',\n 'Dhamtari',\n 'Jagdalpur',\n 'Janjgir',\n 'Kanker',\n 'Mahasamund',\n 'Nava Raipur',\n 'Raigarh',\n 'Rajnandgaon',\n ],\n },\n {\n name: 'Goa',\n cities: [\n 'Panaji',\n 'Margao',\n 'Vasco da Gama',\n 'Mapusa',\n 'Ponda',\n 'Bicholim',\n 'Canacona',\n 'Curchorem',\n 'Pernem',\n 'Porvorim',\n 'Quepem',\n 'Sanguem',\n 'Valpoi',\n ],\n },\n {\n name: 'Gujarat',\n cities: [\n 'Ahmedabad',\n 'Surat',\n 'Vadodara',\n 'Rajkot',\n 'Gandhinagar',\n 'Bhavnagar',\n 'Jamnagar',\n 'Junagadh',\n 'Amreli',\n 'Anand',\n 'Ankleshwar',\n 'Bharuch',\n 'Bhuj',\n 'Botad',\n 'Dahod',\n 'Deesa',\n 'Gandhidham',\n 'Godhra',\n 'Himmatnagar',\n 'Kalol',\n 'Mehsana',\n 'Morbi',\n 'Nadiad',\n 'Navsari',\n 'Palanpur',\n 'Patan',\n 'Porbandar',\n 'Surendranagar',\n 'Valsad',\n 'Vapi',\n 'Veraval',\n ],\n },\n {\n name: 'Haryana',\n cities: [\n 'Gurugram',\n 'Faridabad',\n 'Panipat',\n 'Ambala',\n 'Karnal',\n 'Rohtak',\n 'Hisar',\n 'Sonipat',\n 'Panchkula',\n 'Bahadurgarh',\n 'Bhiwani',\n 'Charkhi Dadri',\n 'Fatehabad',\n 'Hansi',\n 'Jhajjar',\n 'Jind',\n 'Kaithal',\n 'Kurukshetra',\n 'Manesar',\n 'Narnaul',\n 'Nuh',\n 'Palwal',\n 'Rewari',\n 'Sirsa',\n 'Yamunanagar',\n ],\n },\n {\n name: 'Himachal Pradesh',\n cities: [\n 'Shimla',\n 'Dharamshala',\n 'Solan',\n 'Mandi',\n 'Baddi',\n 'Bilaspur',\n 'Chamba',\n 'Hamirpur',\n 'Kangra',\n 'Keylong',\n 'Kullu',\n 'Manali',\n 'Nahan',\n 'Palampur',\n 'Paonta Sahib',\n 'Reckong Peo',\n 'Sundernagar',\n 'Una',\n ],\n },\n {\n name: 'Jharkhand',\n cities: [\n 'Ranchi',\n 'Jamshedpur',\n 'Dhanbad',\n 'Bokaro',\n 'Deoghar',\n 'Hazaribagh',\n 'Adityapur',\n 'Chaibasa',\n 'Chatra',\n 'Dumka',\n 'Garhwa',\n 'Giridih',\n 'Godda',\n 'Gumla',\n 'Jamtara',\n 'Khunti',\n 'Koderma',\n 'Latehar',\n 'Lohardaga',\n 'Medininagar',\n 'Pakur',\n 'Phusro',\n 'Ramgarh',\n 'Sahibganj',\n 'Saraikela',\n 'Simdega',\n ],\n },\n {\n name: 'Karnataka',\n cities: [\n 'Bengaluru',\n 'Mysuru',\n 'Mangaluru',\n 'Hubballi',\n 'Dharwad',\n 'Belagavi',\n 'Kalaburagi',\n 'Davanagere',\n 'Bagalkot',\n 'Ballari',\n 'Bidar',\n 'Chamarajanagar',\n 'Chikkaballapur',\n 'Chikkamagaluru',\n 'Chitradurga',\n 'Gadag',\n 'Hassan',\n 'Haveri',\n 'Hosapete',\n 'Karwar',\n 'Kolar',\n 'Koppal',\n 'Madikeri',\n 'Mandya',\n 'Manipal',\n 'Raichur',\n 'Ramanagara',\n 'Shivamogga',\n 'Tumakuru',\n 'Udupi',\n 'Vijayapura',\n 'Yadgir',\n ],\n },\n {\n name: 'Kerala',\n cities: [\n 'Thiruvananthapuram',\n 'Kochi',\n 'Kozhikode',\n 'Thrissur',\n 'Kollam',\n 'Kannur',\n 'Alappuzha',\n 'Palakkad',\n 'Kottayam',\n 'Malappuram',\n 'Aluva',\n 'Changanassery',\n 'Guruvayur',\n 'Kalpetta',\n 'Kanhangad',\n 'Kasaragod',\n 'Kayamkulam',\n 'Manjeri',\n 'Munnar',\n 'Pathanamthitta',\n 'Perinthalmanna',\n 'Ponnani',\n 'Thalassery',\n 'Thodupuzha',\n 'Tirur',\n 'Vatakara',\n ],\n },\n {\n name: 'Madhya Pradesh',\n cities: [\n 'Indore',\n 'Bhopal',\n 'Jabalpur',\n 'Gwalior',\n 'Ujjain',\n 'Sagar',\n 'Dewas',\n 'Satna',\n 'Ratlam',\n 'Rewa',\n 'Agar',\n 'Anuppur',\n 'Ashoknagar',\n 'Balaghat',\n 'Barwani',\n 'Betul',\n 'Bhind',\n 'Burhanpur',\n 'Chhatarpur',\n 'Chhindwara',\n 'Damoh',\n 'Datia',\n 'Dhar',\n 'Dindori',\n 'Guna',\n 'Itarsi',\n 'Jhabua',\n 'Katni',\n 'Khandwa',\n 'Khargone',\n 'Mandla',\n 'Mandsaur',\n 'Morena',\n 'Narmadapuram',\n 'Neemuch',\n 'Panna',\n 'Pithampur',\n 'Rajgarh',\n 'Sehore',\n 'Seoni',\n 'Shahdol',\n 'Shajapur',\n 'Shivpuri',\n 'Sidhi',\n 'Singrauli',\n 'Tikamgarh',\n 'Umaria',\n 'Vidisha',\n ],\n },\n {\n name: 'Maharashtra',\n cities: [\n 'Mumbai',\n 'Pune',\n 'Nagpur',\n 'Thane',\n 'Navi Mumbai',\n 'Nashik',\n 'Chhatrapati Sambhajinagar',\n 'Solapur',\n 'Kolhapur',\n 'Pimpri-Chinchwad',\n 'Ahilyanagar',\n 'Akola',\n 'Alibag',\n 'Amravati',\n 'Baramati',\n 'Beed',\n 'Bhandara',\n 'Bhiwandi',\n 'Buldhana',\n 'Chandrapur',\n 'Dharashiv',\n 'Dhule',\n 'Gadchiroli',\n 'Gondia',\n 'Hingoli',\n 'Ichalkaranji',\n 'Jalgaon',\n 'Jalna',\n 'Kalyan',\n 'Latur',\n 'Lonavala',\n 'Malegaon',\n 'Mira-Bhayandar',\n 'Nanded',\n 'Nandurbar',\n 'Palghar',\n 'Panvel',\n 'Parbhani',\n 'Ratnagiri',\n 'Sangli',\n 'Satara',\n 'Ulhasnagar',\n 'Vasai-Virar',\n 'Wardha',\n 'Washim',\n 'Yavatmal',\n ],\n },\n {\n name: 'Manipur',\n cities: [\n 'Imphal',\n 'Thoubal',\n 'Bishnupur',\n 'Chandel',\n 'Churachandpur',\n 'Jiribam',\n 'Kakching',\n 'Moreh',\n 'Senapati',\n 'Tamenglong',\n 'Ukhrul',\n ],\n },\n {\n name: 'Meghalaya',\n cities: [\n 'Shillong',\n 'Tura',\n 'Jowai',\n 'Baghmara',\n 'Mairang',\n 'Nongpoh',\n 'Nongstoin',\n 'Resubelpara',\n 'Sohra',\n 'Williamnagar',\n ],\n },\n {\n name: 'Mizoram',\n cities: [\n 'Aizawl',\n 'Lunglei',\n 'Champhai',\n 'Hnahthial',\n 'Khawzawl',\n 'Kolasib',\n 'Lawngtlai',\n 'Mamit',\n 'Saitual',\n 'Serchhip',\n 'Siaha',\n ],\n },\n {\n name: 'Nagaland',\n cities: [\n 'Kohima',\n 'Dimapur',\n 'Mokokchung',\n 'Chumoukedima',\n 'Kiphire',\n 'Longleng',\n 'Mon',\n 'Niuland',\n 'Noklak',\n 'Peren',\n 'Phek',\n 'Shamator',\n 'Tseminyu',\n 'Tuensang',\n 'Wokha',\n 'Zunheboto',\n ],\n },\n {\n name: 'Odisha',\n aliases: ['Orissa'],\n cities: [\n 'Bhubaneswar',\n 'Cuttack',\n 'Rourkela',\n 'Berhampur',\n 'Sambalpur',\n 'Puri',\n 'Balasore',\n 'Angul',\n 'Balangir',\n 'Bargarh',\n 'Baripada',\n 'Bhadrak',\n 'Bhawanipatna',\n 'Dhenkanal',\n 'Jagatsinghpur',\n 'Jajpur',\n 'Jeypore',\n 'Jharsuguda',\n 'Kendrapara',\n 'Keonjhar',\n 'Khordha',\n 'Koraput',\n 'Malkangiri',\n 'Nabarangpur',\n 'Nayagarh',\n 'Paradip',\n 'Phulbani',\n 'Rayagada',\n 'Sundargarh',\n 'Talcher',\n ],\n },\n {\n name: 'Punjab',\n cities: [\n 'Ludhiana',\n 'Amritsar',\n 'Jalandhar',\n 'Patiala',\n 'Mohali',\n 'Bathinda',\n 'Abohar',\n 'Barnala',\n 'Batala',\n 'Faridkot',\n 'Fazilka',\n 'Firozpur',\n 'Gurdaspur',\n 'Hoshiarpur',\n 'Kapurthala',\n 'Khanna',\n 'Malerkotla',\n 'Mansa',\n 'Moga',\n 'Muktsar',\n 'Nawanshahr',\n 'Pathankot',\n 'Phagwara',\n 'Rajpura',\n 'Rupnagar',\n 'Sangrur',\n 'Tarn Taran',\n 'Zirakpur',\n ],\n },\n {\n name: 'Rajasthan',\n cities: [\n 'Jaipur',\n 'Jodhpur',\n 'Kota',\n 'Udaipur',\n 'Bikaner',\n 'Ajmer',\n 'Alwar',\n 'Bhilwara',\n 'Banswara',\n 'Baran',\n 'Barmer',\n 'Beawar',\n 'Bharatpur',\n 'Bhiwadi',\n 'Bundi',\n 'Chittorgarh',\n 'Churu',\n 'Dausa',\n 'Dhaulpur',\n 'Dungarpur',\n 'Gangapur City',\n 'Hanumangarh',\n 'Jaisalmer',\n 'Jalore',\n 'Jhalawar',\n 'Jhunjhunu',\n 'Karauli',\n 'Kishangarh',\n 'Mount Abu',\n 'Nagaur',\n 'Neemrana',\n 'Pali',\n 'Pratapgarh',\n 'Rajsamand',\n 'Sawai Madhopur',\n 'Sikar',\n 'Sirohi',\n 'Sri Ganganagar',\n 'Tonk',\n ],\n },\n {\n name: 'Sikkim',\n cities: [\n 'Gangtok',\n 'Namchi',\n 'Gyalshing',\n 'Jorethang',\n 'Mangan',\n 'Pakyong',\n 'Rangpo',\n 'Ravangla',\n 'Singtam',\n 'Soreng',\n ],\n },\n {\n name: 'Tamil Nadu',\n cities: [\n 'Chennai',\n 'Coimbatore',\n 'Madurai',\n 'Tiruchirappalli',\n 'Salem',\n 'Tiruppur',\n 'Erode',\n 'Tirunelveli',\n 'Vellore',\n 'Hosur',\n 'Ambur',\n 'Ariyalur',\n 'Chengalpattu',\n 'Cuddalore',\n 'Dharmapuri',\n 'Dindigul',\n 'Gudiyatham',\n 'Kallakurichi',\n 'Kanchipuram',\n 'Kanyakumari',\n 'Karaikudi',\n 'Karur',\n 'Krishnagiri',\n 'Kumbakonam',\n 'Mayiladuthurai',\n 'Nagapattinam',\n 'Nagercoil',\n 'Namakkal',\n 'Ooty',\n 'Perambalur',\n 'Pollachi',\n 'Pudukkottai',\n 'Rajapalayam',\n 'Ramanathapuram',\n 'Ranipet',\n 'Sivaganga',\n 'Sivakasi',\n 'Tenkasi',\n 'Thanjavur',\n 'Theni',\n 'Thoothukudi',\n 'Tirupattur',\n 'Tiruvallur',\n 'Tiruvannamalai',\n 'Tiruvarur',\n 'Viluppuram',\n 'Virudhunagar',\n ],\n },\n {\n name: 'Telangana',\n cities: [\n 'Hyderabad',\n 'Warangal',\n 'Nizamabad',\n 'Karimnagar',\n 'Khammam',\n 'Secunderabad',\n 'Adilabad',\n 'Bhongir',\n 'Jagtial',\n 'Kamareddy',\n 'Kothagudem',\n 'Mahbubnagar',\n 'Mancherial',\n 'Medak',\n 'Miryalaguda',\n 'Nalgonda',\n 'Nirmal',\n 'Ramagundam',\n 'Sangareddy',\n 'Siddipet',\n 'Suryapet',\n 'Vikarabad',\n 'Wanaparthy',\n 'Zahirabad',\n ],\n },\n {\n name: 'Tripura',\n cities: [\n 'Agartala',\n 'Dharmanagar',\n 'Udaipur',\n 'Ambassa',\n 'Belonia',\n 'Bishalgarh',\n 'Kailashahar',\n 'Kamalpur',\n 'Khowai',\n 'Sabroom',\n 'Sonamura',\n 'Teliamura',\n ],\n },\n {\n name: 'Uttar Pradesh',\n cities: [\n 'Lucknow',\n 'Kanpur',\n 'Noida',\n 'Ghaziabad',\n 'Agra',\n 'Varanasi',\n 'Prayagraj',\n 'Meerut',\n 'Greater Noida',\n 'Bareilly',\n 'Aligarh',\n 'Moradabad',\n 'Gorakhpur',\n 'Amroha',\n 'Ayodhya',\n 'Azamgarh',\n 'Bahraich',\n 'Ballia',\n 'Banda',\n 'Barabanki',\n 'Basti',\n 'Bulandshahr',\n 'Chandausi',\n 'Deoria',\n 'Etah',\n 'Etawah',\n 'Farrukhabad',\n 'Fatehpur',\n 'Firozabad',\n 'Gonda',\n 'Hapur',\n 'Hardoi',\n 'Hathras',\n 'Jaunpur',\n 'Jhansi',\n 'Kasganj',\n 'Lakhimpur',\n 'Lalitpur',\n 'Mainpuri',\n 'Mathura',\n 'Mau',\n 'Mirzapur',\n 'Modinagar',\n 'Muzaffarnagar',\n 'Orai',\n 'Pilibhit',\n 'Raebareli',\n 'Rampur',\n 'Saharanpur',\n 'Sambhal',\n 'Shahjahanpur',\n 'Sitapur',\n 'Sultanpur',\n 'Unnao',\n 'Vrindavan',\n ],\n },\n {\n name: 'Uttarakhand',\n aliases: ['Uttaranchal'],\n cities: [\n 'Dehradun',\n 'Haridwar',\n 'Roorkee',\n 'Haldwani',\n 'Rudrapur',\n 'Kashipur',\n 'Rishikesh',\n 'Almora',\n 'Bageshwar',\n 'Champawat',\n 'Gopeshwar',\n 'Khatima',\n 'Kotdwar',\n 'Mussoorie',\n 'Nainital',\n 'Pauri',\n 'Pithoragarh',\n 'Ramnagar',\n 'Rudraprayag',\n 'Sitarganj',\n 'Srinagar',\n 'Tehri',\n 'Uttarkashi',\n ],\n },\n {\n name: 'West Bengal',\n cities: [\n 'Kolkata',\n 'Howrah',\n 'Siliguri',\n 'Durgapur',\n 'Asansol',\n 'Bardhaman',\n 'Bidhannagar',\n 'New Town',\n 'Kharagpur',\n 'Haldia',\n 'Alipurduar',\n 'Baharampur',\n 'Balurghat',\n 'Bally',\n 'Bankura',\n 'Barasat',\n 'Barrackpore',\n 'Bolpur',\n 'Chandannagar',\n 'Chinsurah',\n 'Contai',\n 'Cooch Behar',\n 'Darjeeling',\n 'Digha',\n 'Habra',\n 'Jalpaiguri',\n 'Kalimpong',\n 'Kalyani',\n 'Krishnanagar',\n 'Malda',\n 'Medinipur',\n 'Purulia',\n 'Raiganj',\n 'Serampore',\n 'Shantipur',\n 'Tamluk',\n ],\n },\n {\n name: 'Andaman and Nicobar Islands',\n aliases: ['Andaman & Nicobar Islands', 'Andaman and Nicobar'],\n cities: [\n 'Sri Vijaya Puram',\n 'Campbell Bay',\n 'Car Nicobar',\n 'Diglipur',\n 'Mayabunder',\n 'Rangat',\n 'Shaheed Dweep',\n 'Swaraj Dweep',\n ],\n },\n { name: 'Chandigarh', cities: ['Chandigarh'] },\n {\n name: 'Dadra and Nagar Haveli and Daman and Diu',\n aliases: [\n 'The Dadra and Nagar Haveli and Daman and Diu',\n 'Dadra and Nagar Haveli',\n 'Daman and Diu',\n ],\n cities: ['Silvassa', 'Daman', 'Diu'],\n },\n {\n name: 'Delhi',\n aliases: ['NCT of Delhi', 'National Capital Territory of Delhi'],\n cities: ['Delhi', 'New Delhi'],\n },\n {\n name: 'Jammu and Kashmir',\n aliases: ['Jammu & Kashmir', 'J&K'],\n cities: [\n 'Srinagar',\n 'Jammu',\n 'Anantnag',\n 'Bandipora',\n 'Baramulla',\n 'Budgam',\n 'Doda',\n 'Ganderbal',\n 'Kathua',\n 'Katra',\n 'Kishtwar',\n 'Kulgam',\n 'Kupwara',\n 'Poonch',\n 'Pulwama',\n 'Rajouri',\n 'Ramban',\n 'Reasi',\n 'Samba',\n 'Shopian',\n 'Sopore',\n 'Udhampur',\n ],\n },\n { name: 'Ladakh', cities: ['Leh', 'Kargil'] },\n {\n name: 'Lakshadweep',\n cities: ['Kavaratti', 'Agatti', 'Amini', 'Andrott', 'Kadmat', 'Kalpeni', 'Minicoy'],\n },\n {\n name: 'Puducherry',\n aliases: ['Pondicherry'],\n cities: ['Puducherry', 'Karaikal', 'Mahe', 'Yanam'],\n },\n];\n\n/**\n * Other names a city is searched by, keyed by the list's name: the older name,\n * the district name the location lookup answers with, or both. A search for\n * any of them shows the city as the list writes it.\n */\nexport const CITY_ALIASES: Readonly<Record<string, readonly string[]>> = {\n Bengaluru: ['Bangalore', 'Bengaluru Urban', 'Bangalore Urban'],\n Mumbai: ['Bombay', 'Mumbai Suburban', 'Mumbai City'],\n Chennai: ['Madras'],\n Kolkata: ['Calcutta'],\n Gurugram: ['Gurgaon'],\n Noida: ['Gautam Buddha Nagar'],\n Pune: ['Poona'],\n Vadodara: ['Baroda'],\n Visakhapatnam: ['Vizag', 'Vishakhapatnam'],\n Mysuru: ['Mysore'],\n Mangaluru: ['Mangalore', 'Dakshina Kannada'],\n Hubballi: ['Hubli'],\n Belagavi: ['Belgaum'],\n Kalaburagi: ['Gulbarga'],\n Vijayapura: ['Bijapur'],\n Shivamogga: ['Shimoga'],\n Tumakuru: ['Tumkur'],\n Ballari: ['Bellary'],\n Davanagere: ['Davangere'],\n Chikkamagaluru: ['Chikmagalur'],\n Hosapete: ['Hospet', 'Vijayanagara'],\n Thiruvananthapuram: ['Trivandrum'],\n Kochi: ['Cochin', 'Ernakulam'],\n Kozhikode: ['Calicut'],\n Thrissur: ['Trichur'],\n Alappuzha: ['Alleppey'],\n Kollam: ['Quilon'],\n Kannur: ['Cannanore'],\n Palakkad: ['Palghat'],\n Prayagraj: ['Allahabad'],\n Ayodhya: ['Faizabad'],\n Varanasi: ['Banaras', 'Benares', 'Kashi'],\n Tiruchirappalli: ['Trichy'],\n Thoothukudi: ['Tuticorin'],\n Ooty: ['Udhagamandalam', 'The Nilgiris'],\n Kanchipuram: ['Kanchi'],\n Puducherry: ['Pondicherry'],\n 'Chhatrapati Sambhajinagar': ['Aurangabad'],\n Ahilyanagar: ['Ahmednagar'],\n Dharashiv: ['Osmanabad'],\n Nashik: ['Nasik'],\n 'Pimpri-Chinchwad': ['Pimpri', 'Chinchwad', 'PCMC'],\n 'Vasai-Virar': ['Vasai', 'Virar'],\n Narmadapuram: ['Hoshangabad'],\n Medininagar: ['Daltonganj'],\n Bokaro: ['Bokaro Steel City'],\n Rajamahendravaram: ['Rajahmundry', 'Rajahmahendravaram'],\n Anantapur: ['Anantapuramu'],\n Kadapa: ['Cuddapah'],\n Berhampur: ['Brahmapur'],\n Balasore: ['Baleswar'],\n Keonjhar: ['Kendujhar'],\n Bidhannagar: ['Salt Lake'],\n Malda: ['English Bazar'],\n Baharampur: ['Berhampore'],\n Bardhaman: ['Burdwan', 'Purba Bardhaman'],\n Sohra: ['Cherrapunji'],\n 'Sri Vijaya Puram': ['Port Blair', 'South Andaman'],\n Mohali: ['SAS Nagar', 'Sahibzada Ajit Singh Nagar'],\n Kurukshetra: ['Thanesar'],\n Gyalshing: ['Geyzing'],\n Siaha: ['Saiha'],\n Aalo: ['Along'],\n 'Gaya Ji': ['Gaya'],\n Karimganj: ['Sribhumi'],\n // District names the location lookup answers with, for the city people name.\n Guwahati: ['Kamrup Metropolitan'],\n Vijayawada: ['NTR'],\n Hyderabad: ['Rangareddy', 'Ranga Reddy', 'Medchal Malkajgiri'],\n Panaji: ['Panjim', 'North Goa'],\n Margao: ['Madgaon', 'South Goa'],\n Shillong: ['East Khasi Hills'],\n Itanagar: ['Papum Pare'],\n Agartala: ['West Tripura'],\n Imphal: ['Imphal West', 'Imphal East'],\n Jamshedpur: ['East Singhbhum', 'Purbi Singhbhum'],\n Rudrapur: ['Udham Singh Nagar'],\n Asansol: ['Paschim Bardhaman'],\n Delhi: [\n 'Central Delhi',\n 'East Delhi',\n 'North Delhi',\n 'North East Delhi',\n 'North West Delhi',\n 'Shahdara',\n 'South Delhi',\n 'South East Delhi',\n 'South West Delhi',\n 'West Delhi',\n ],\n // Spellings people also use.\n Chapra: ['Chhapra'],\n Dhaulpur: ['Dholpur'],\n Mangaldoi: ['Mangaldai'],\n Rupnagar: ['Ropar'],\n 'Shaheed Dweep': ['Neil Island'],\n 'Swaraj Dweep': ['Havelock'],\n};\n\nconst key = (text: string) =>\n text\n .toLowerCase()\n .replace(/[.\\s&]+/g, ' ')\n .replace(/\\band\\b/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim();\n\n/**\n * The state a name means, by its own name or an alias, ignoring case, dots,\n * \"&\" and \"and\" (\"JAMMU AND KASHMIR\", \"Jammu & Kashmir\"). `undefined` when it\n * is not an Indian state or union territory this list knows.\n */\nexport function findIndiaState(name: string | null | undefined): IndiaState | undefined {\n if (!name) return undefined;\n const wanted = key(name);\n if (!wanted) return undefined;\n return INDIA_STATES.find(\n (state) => key(state.name) === wanted || state.aliases?.some((a) => key(a) === wanted),\n );\n}\n\n/**\n * The names the state picker lists, in its order (states A to Z, then union\n * territories A to Z): the closed list a written state is checked against.\n */\nexport const INDIA_STATE_NAMES = INDIA_STATES.map((state) => state.name) as unknown as readonly [\n IndiaStateName,\n ...IndiaStateName[],\n];\n\n/** The state pickers' other names, by the list's name: \"Orissa\" finds Odisha. */\nexport const STATE_ALIASES: Readonly<Record<string, readonly string[]>> = Object.fromEntries(\n INDIA_STATES.filter((state) => state.aliases).map((state) => [state.name, state.aliases ?? []]),\n);\n\n/**\n * A city as the list writes it, when `name` is one of the state's cities or\n * another name of one (\"Bengaluru Urban\", the location lookup's district, is\n * Bengaluru). Anything else comes back as it was given: never guessed.\n */\nexport function listedCityName(state: IndiaState | undefined, name: string): string {\n if (!state) return name;\n const wanted = key(name);\n const city = state.cities.find(\n (c) => key(c) === wanted || CITY_ALIASES[c]?.some((alias) => key(alias) === wanted),\n );\n return city ?? name;\n}\n\n/**\n * A city as the list writes it from its name ALONE (0.18.0), for where no\n * state comes with it (Discover's `?city=` from a shared link): the list's\n * spelling when the name, or another name of a city, matches exactly ONE\n * spelling in the list (\"Bangalore\" is Bengaluru; \"BILASPUR\", a city of two\n * states, is \"Bilaspur\" either way), and the name unchanged when it matches\n * none or two different spellings (never guessed between them). `states` is\n * the list, India's unless a test hands it another.\n */\nexport function canonicalCityName(\n name: string,\n states: readonly Pick<IndiaState, 'cities'>[] = INDIA_STATES,\n): string {\n const wanted = key(name);\n if (!wanted) return name;\n const found = new Set<string>();\n for (const state of states) {\n for (const c of state.cities) {\n if (key(c) === wanted || CITY_ALIASES[c]?.some((alias) => key(alias) === wanted))\n found.add(c);\n }\n }\n const [only] = found;\n return found.size === 1 && only ? only : name;\n}\n\n/**\n * A place as the list writes it, from however it arrived: a member's older\n * draft (\"karnataka\"), the location lookup (\"Bengaluru Urban\" in \"KARNATAKA\"),\n * or another client. The state becomes the list's name when the list knows it\n * (else stays as given, trimmed, for the rule to refuse); the city becomes the\n * list's spelling when it is one of that state's cities or another name of\n * one, and is never guessed otherwise; the country is India.\n *\n * The SERVER applies it to every location it stores, so Discover's exact match\n * finds \"Bengaluru\" however a client spelled it; a client applies it when it\n * restores or suggests a place, so the member sees the spelling they will get.\n */\nexport function canonicalIndiaLocation(place: { city: string; state?: string | null }): {\n city: string;\n state: string;\n country: typeof INDIA;\n} {\n const listed = findIndiaState(place.state);\n return {\n city: listedCityName(listed, place.city.trim()),\n state: listed?.name ?? (place.state ?? '').trim(),\n country: INDIA,\n };\n}\n\n// ─── The rule ────────────────────────────────────────────────────────────────\n\n/**\n * A location as it is WRITTEN (0.17.0): onboarding's finish, the Me tab's\n * personal details, and the server's own suggestion. India only, one of its\n * states and union territories, and a city of any name within it.\n *\n * Until 0.17.0 the schema took any country and any state text while the web\n * locked the country to India and chose the state from this list, so another\n * client could store what no screen can show. The read side keeps\n * `locationSchema`: a location stored before this rule is still read as it is.\n *\n * The STATE is required: every Indian city has one, and the picker lists a\n * state's cities only once it is chosen. It is read the way people and the\n * location lookup write it (\"KARNATAKA\", \"Orissa\", \"Jammu & Kashmir\" are the\n * list's Karnataka, Odisha, Jammu and Kashmir: `findIndiaState`), so any client\n * may send another spelling and the list's name is what is kept. Left empty it\n * is `stateRequired`; one the list does not know is `stateUnknown`.\n */\nexport const indiaLocationSchema = z.object({\n city: z.string().trim().min(1).max(CITY_MAX),\n // A typed string in, the list's name out: never a preprocess (0.18.0: its\n // input read as `unknown`, so a caller typing the body by `z.input` could\n // send anything and still compile).\n // Missing, blank and unknown all reach the CHOICE (`invalid_value`, as a\n // picker's refusal always was): a form words an unchosen state \"Choose your\n // state\", not \"fill this in\" (0.18.0, ram's suite: a length check, then a\n // missing key, each changed that). Typed in: a string, or left out.\n state: z\n .string({ error: VALIDATION_MESSAGE.stateUnknown })\n .default('')\n .transform((given) => findIndiaState(given)?.name ?? given.trim())\n .pipe(\n z.enum(INDIA_STATE_NAMES, {\n error: (issue) =>\n issue.input === '' ? VALIDATION_MESSAGE.stateRequired : VALIDATION_MESSAGE.stateUnknown,\n }),\n ),\n country: z.literal(INDIA),\n});\nexport type IndiaLocation = z.infer<typeof indiaLocationSchema>;\n\n/**\n * The city these coordinates look like, for the member to CONFIRM, or `null`\n * when the lookup could not place them confidently (or they are outside India,\n * whose area data is all there is). A suggestion, never a write: only what the\n * member then submits becomes their location.\n *\n * In the WRITE shape (0.17.0): the server names the state and city the way\n * this list does (`findIndiaState`, `listedCityName`: the lookup's \"Bengaluru\n * Urban\" is Bengaluru), so what it suggests is what the member could have\n * picked, and saving it unchanged can never be refused.\n */\nexport const suggestedLocationSchema = indiaLocationSchema.nullable();\nexport type SuggestedLocation = z.infer<typeof suggestedLocationSchema>;\n"]}
1
+ {"version":3,"file":"india.js","sourceRoot":"","sources":["../../../src/domains/location/india.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * founder-schema — Where a founder is based: India's states, union territories\n * and cities (0.17.0, moved here from the web client, where the location step's\n * lists lived in the screen).\n *\n * Founder Circle is in India for now (the user, 2026-10-18). Since 0.19.0 a\n * member's location is picked from `master_db`'s area tree (`./areas.ts`), so\n * this file no longer holds a write rule; it is the data that names a place\n * the way members say it, read by every side:\n *\n * states all 28 states and 8 union territories, by their current names: a\n * CLOSED list, so a state is one of these or refused (`stateUnknown`)\n * cities per state, the larger cities first, the rest A to Z: the\n * spellings Discover's city filter and a stored city are matched in\n * aliases older or other names a member may search by (\"Bangalore\" finds\n * Bengaluru), and the district names the location lookup answers\n * with (\"Bengaluru Urban\"), so a district's public city and a member's\n * search land on the list's own spelling\n *\n * Written for this product from public knowledge of India's cities; no\n * third-party dataset is copied in.\n *\n * @module founder-schema/domains/location/india\n */\n\nimport { CITY_MAX } from '../../core/limits.js';\nimport type { GST_STATES } from '../billing/gst.js';\n\n/**\n * A state or union territory, by the ONE list of their names: GST's\n * (`GST_STATES`, billing), which already held all 36. This module adds each\n * one's cities and other names; it never spells a state on its own, and a\n * test holds the two sets equal.\n */\nexport type IndiaStateName = (typeof GST_STATES)[number]['name'];\n\nexport interface IndiaState {\n name: IndiaStateName;\n /** Other names the state is searched or answered by. */\n aliases?: readonly string[];\n cities: readonly string[];\n}\n\n/** The one country a location may be in, for now. */\nexport const INDIA = 'India' as const;\n\n/** India's international dialing code: what a phone number is shown with (the stored number has none). */\nexport const INDIA_DIALING_CODE = '+91' as const;\n\nexport const INDIA_STATES: readonly IndiaState[] = [\n {\n name: 'Andhra Pradesh',\n cities: [\n 'Visakhapatnam',\n 'Vijayawada',\n 'Guntur',\n 'Nellore',\n 'Kurnool',\n 'Rajamahendravaram',\n 'Tirupati',\n 'Kakinada',\n 'Kadapa',\n 'Anantapur',\n 'Amaravati',\n 'Adoni',\n 'Bhimavaram',\n 'Chilakaluripet',\n 'Chittoor',\n 'Dharmavaram',\n 'Eluru',\n 'Gudivada',\n 'Guntakal',\n 'Hindupur',\n 'Machilipatnam',\n 'Madanapalle',\n 'Nandyal',\n 'Narasaraopet',\n 'Ongole',\n 'Proddatur',\n 'Puttaparthi',\n 'Srikakulam',\n 'Tadepalligudem',\n 'Tenali',\n 'Vizianagaram',\n ],\n },\n {\n name: 'Arunachal Pradesh',\n cities: [\n 'Itanagar',\n 'Naharlagun',\n 'Pasighat',\n 'Aalo',\n 'Bomdila',\n 'Changlang',\n 'Daporijo',\n 'Khonsa',\n 'Namsai',\n 'Roing',\n 'Seppa',\n 'Tawang',\n 'Tezu',\n 'Ziro',\n ],\n },\n {\n name: 'Assam',\n cities: [\n 'Guwahati',\n 'Dibrugarh',\n 'Silchar',\n 'Jorhat',\n 'Tezpur',\n 'Nagaon',\n 'Tinsukia',\n 'Barpeta',\n 'Bongaigaon',\n 'Dhubri',\n 'Diphu',\n 'Goalpara',\n 'Golaghat',\n 'Haflong',\n 'Hailakandi',\n 'Karimganj',\n 'Kokrajhar',\n 'Mangaldoi',\n 'Nalbari',\n 'North Lakhimpur',\n 'Sivasagar',\n ],\n },\n {\n name: 'Bihar',\n cities: [\n 'Patna',\n 'Gaya Ji',\n 'Bhagalpur',\n 'Muzaffarpur',\n 'Darbhanga',\n 'Purnia',\n 'Arrah',\n 'Aurangabad',\n 'Begusarai',\n 'Bettiah',\n 'Bihar Sharif',\n 'Bodh Gaya',\n 'Buxar',\n 'Chapra',\n 'Dehri',\n 'Hajipur',\n 'Jamalpur',\n 'Jehanabad',\n 'Katihar',\n 'Kishanganj',\n 'Motihari',\n 'Munger',\n 'Nawada',\n 'Saharsa',\n 'Sasaram',\n 'Sitamarhi',\n 'Siwan',\n ],\n },\n {\n name: 'Chhattisgarh',\n cities: [\n 'Raipur',\n 'Bhilai',\n 'Bilaspur',\n 'Korba',\n 'Durg',\n 'Ambikapur',\n 'Bhatapara',\n 'Bijapur',\n 'Chirmiri',\n 'Dhamtari',\n 'Jagdalpur',\n 'Janjgir',\n 'Kanker',\n 'Mahasamund',\n 'Nava Raipur',\n 'Raigarh',\n 'Rajnandgaon',\n ],\n },\n {\n name: 'Goa',\n cities: [\n 'Panaji',\n 'Margao',\n 'Vasco da Gama',\n 'Mapusa',\n 'Ponda',\n 'Bicholim',\n 'Canacona',\n 'Curchorem',\n 'Pernem',\n 'Porvorim',\n 'Quepem',\n 'Sanguem',\n 'Valpoi',\n ],\n },\n {\n name: 'Gujarat',\n cities: [\n 'Ahmedabad',\n 'Surat',\n 'Vadodara',\n 'Rajkot',\n 'Gandhinagar',\n 'Bhavnagar',\n 'Jamnagar',\n 'Junagadh',\n 'Amreli',\n 'Anand',\n 'Ankleshwar',\n 'Bharuch',\n 'Bhuj',\n 'Botad',\n 'Dahod',\n 'Deesa',\n 'Gandhidham',\n 'Godhra',\n 'Himmatnagar',\n 'Kalol',\n 'Mehsana',\n 'Morbi',\n 'Nadiad',\n 'Navsari',\n 'Palanpur',\n 'Patan',\n 'Porbandar',\n 'Surendranagar',\n 'Valsad',\n 'Vapi',\n 'Veraval',\n ],\n },\n {\n name: 'Haryana',\n cities: [\n 'Gurugram',\n 'Faridabad',\n 'Panipat',\n 'Ambala',\n 'Karnal',\n 'Rohtak',\n 'Hisar',\n 'Sonipat',\n 'Panchkula',\n 'Bahadurgarh',\n 'Bhiwani',\n 'Charkhi Dadri',\n 'Fatehabad',\n 'Hansi',\n 'Jhajjar',\n 'Jind',\n 'Kaithal',\n 'Kurukshetra',\n 'Manesar',\n 'Narnaul',\n 'Nuh',\n 'Palwal',\n 'Rewari',\n 'Sirsa',\n 'Yamunanagar',\n ],\n },\n {\n name: 'Himachal Pradesh',\n cities: [\n 'Shimla',\n 'Dharamshala',\n 'Solan',\n 'Mandi',\n 'Baddi',\n 'Bilaspur',\n 'Chamba',\n 'Hamirpur',\n 'Kangra',\n 'Keylong',\n 'Kullu',\n 'Manali',\n 'Nahan',\n 'Palampur',\n 'Paonta Sahib',\n 'Reckong Peo',\n 'Sundernagar',\n 'Una',\n ],\n },\n {\n name: 'Jharkhand',\n cities: [\n 'Ranchi',\n 'Jamshedpur',\n 'Dhanbad',\n 'Bokaro',\n 'Deoghar',\n 'Hazaribagh',\n 'Adityapur',\n 'Chaibasa',\n 'Chatra',\n 'Dumka',\n 'Garhwa',\n 'Giridih',\n 'Godda',\n 'Gumla',\n 'Jamtara',\n 'Khunti',\n 'Koderma',\n 'Latehar',\n 'Lohardaga',\n 'Medininagar',\n 'Pakur',\n 'Phusro',\n 'Ramgarh',\n 'Sahibganj',\n 'Saraikela',\n 'Simdega',\n ],\n },\n {\n name: 'Karnataka',\n cities: [\n 'Bengaluru',\n 'Mysuru',\n 'Mangaluru',\n 'Hubballi',\n 'Dharwad',\n 'Belagavi',\n 'Kalaburagi',\n 'Davanagere',\n 'Bagalkot',\n 'Ballari',\n 'Bidar',\n 'Chamarajanagar',\n 'Chikkaballapur',\n 'Chikkamagaluru',\n 'Chitradurga',\n 'Gadag',\n 'Hassan',\n 'Haveri',\n 'Hosapete',\n 'Karwar',\n 'Kolar',\n 'Koppal',\n 'Madikeri',\n 'Mandya',\n 'Manipal',\n 'Raichur',\n 'Ramanagara',\n 'Shivamogga',\n 'Tumakuru',\n 'Udupi',\n 'Vijayapura',\n 'Yadgir',\n ],\n },\n {\n name: 'Kerala',\n cities: [\n 'Thiruvananthapuram',\n 'Kochi',\n 'Kozhikode',\n 'Thrissur',\n 'Kollam',\n 'Kannur',\n 'Alappuzha',\n 'Palakkad',\n 'Kottayam',\n 'Malappuram',\n 'Aluva',\n 'Changanassery',\n 'Guruvayur',\n 'Kalpetta',\n 'Kanhangad',\n 'Kasaragod',\n 'Kayamkulam',\n 'Manjeri',\n 'Munnar',\n 'Pathanamthitta',\n 'Perinthalmanna',\n 'Ponnani',\n 'Thalassery',\n 'Thodupuzha',\n 'Tirur',\n 'Vatakara',\n ],\n },\n {\n name: 'Madhya Pradesh',\n cities: [\n 'Indore',\n 'Bhopal',\n 'Jabalpur',\n 'Gwalior',\n 'Ujjain',\n 'Sagar',\n 'Dewas',\n 'Satna',\n 'Ratlam',\n 'Rewa',\n 'Agar',\n 'Anuppur',\n 'Ashoknagar',\n 'Balaghat',\n 'Barwani',\n 'Betul',\n 'Bhind',\n 'Burhanpur',\n 'Chhatarpur',\n 'Chhindwara',\n 'Damoh',\n 'Datia',\n 'Dhar',\n 'Dindori',\n 'Guna',\n 'Itarsi',\n 'Jhabua',\n 'Katni',\n 'Khandwa',\n 'Khargone',\n 'Mandla',\n 'Mandsaur',\n 'Morena',\n 'Narmadapuram',\n 'Neemuch',\n 'Panna',\n 'Pithampur',\n 'Rajgarh',\n 'Sehore',\n 'Seoni',\n 'Shahdol',\n 'Shajapur',\n 'Shivpuri',\n 'Sidhi',\n 'Singrauli',\n 'Tikamgarh',\n 'Umaria',\n 'Vidisha',\n ],\n },\n {\n name: 'Maharashtra',\n cities: [\n 'Mumbai',\n 'Pune',\n 'Nagpur',\n 'Thane',\n 'Navi Mumbai',\n 'Nashik',\n 'Chhatrapati Sambhajinagar',\n 'Solapur',\n 'Kolhapur',\n 'Pimpri-Chinchwad',\n 'Ahilyanagar',\n 'Akola',\n 'Alibag',\n 'Amravati',\n 'Baramati',\n 'Beed',\n 'Bhandara',\n 'Bhiwandi',\n 'Buldhana',\n 'Chandrapur',\n 'Dharashiv',\n 'Dhule',\n 'Gadchiroli',\n 'Gondia',\n 'Hingoli',\n 'Ichalkaranji',\n 'Jalgaon',\n 'Jalna',\n 'Kalyan',\n 'Latur',\n 'Lonavala',\n 'Malegaon',\n 'Mira-Bhayandar',\n 'Nanded',\n 'Nandurbar',\n 'Palghar',\n 'Panvel',\n 'Parbhani',\n 'Ratnagiri',\n 'Sangli',\n 'Satara',\n 'Ulhasnagar',\n 'Vasai-Virar',\n 'Wardha',\n 'Washim',\n 'Yavatmal',\n ],\n },\n {\n name: 'Manipur',\n cities: [\n 'Imphal',\n 'Thoubal',\n 'Bishnupur',\n 'Chandel',\n 'Churachandpur',\n 'Jiribam',\n 'Kakching',\n 'Moreh',\n 'Senapati',\n 'Tamenglong',\n 'Ukhrul',\n ],\n },\n {\n name: 'Meghalaya',\n cities: [\n 'Shillong',\n 'Tura',\n 'Jowai',\n 'Baghmara',\n 'Mairang',\n 'Nongpoh',\n 'Nongstoin',\n 'Resubelpara',\n 'Sohra',\n 'Williamnagar',\n ],\n },\n {\n name: 'Mizoram',\n cities: [\n 'Aizawl',\n 'Lunglei',\n 'Champhai',\n 'Hnahthial',\n 'Khawzawl',\n 'Kolasib',\n 'Lawngtlai',\n 'Mamit',\n 'Saitual',\n 'Serchhip',\n 'Siaha',\n ],\n },\n {\n name: 'Nagaland',\n cities: [\n 'Kohima',\n 'Dimapur',\n 'Mokokchung',\n 'Chumoukedima',\n 'Kiphire',\n 'Longleng',\n 'Mon',\n 'Niuland',\n 'Noklak',\n 'Peren',\n 'Phek',\n 'Shamator',\n 'Tseminyu',\n 'Tuensang',\n 'Wokha',\n 'Zunheboto',\n ],\n },\n {\n name: 'Odisha',\n aliases: ['Orissa'],\n cities: [\n 'Bhubaneswar',\n 'Cuttack',\n 'Rourkela',\n 'Berhampur',\n 'Sambalpur',\n 'Puri',\n 'Balasore',\n 'Angul',\n 'Balangir',\n 'Bargarh',\n 'Baripada',\n 'Bhadrak',\n 'Bhawanipatna',\n 'Dhenkanal',\n 'Jagatsinghpur',\n 'Jajpur',\n 'Jeypore',\n 'Jharsuguda',\n 'Kendrapara',\n 'Keonjhar',\n 'Khordha',\n 'Koraput',\n 'Malkangiri',\n 'Nabarangpur',\n 'Nayagarh',\n 'Paradip',\n 'Phulbani',\n 'Rayagada',\n 'Sundargarh',\n 'Talcher',\n ],\n },\n {\n name: 'Punjab',\n cities: [\n 'Ludhiana',\n 'Amritsar',\n 'Jalandhar',\n 'Patiala',\n 'Mohali',\n 'Bathinda',\n 'Abohar',\n 'Barnala',\n 'Batala',\n 'Faridkot',\n 'Fazilka',\n 'Firozpur',\n 'Gurdaspur',\n 'Hoshiarpur',\n 'Kapurthala',\n 'Khanna',\n 'Malerkotla',\n 'Mansa',\n 'Moga',\n 'Muktsar',\n 'Nawanshahr',\n 'Pathankot',\n 'Phagwara',\n 'Rajpura',\n 'Rupnagar',\n 'Sangrur',\n 'Tarn Taran',\n 'Zirakpur',\n ],\n },\n {\n name: 'Rajasthan',\n cities: [\n 'Jaipur',\n 'Jodhpur',\n 'Kota',\n 'Udaipur',\n 'Bikaner',\n 'Ajmer',\n 'Alwar',\n 'Bhilwara',\n 'Banswara',\n 'Baran',\n 'Barmer',\n 'Beawar',\n 'Bharatpur',\n 'Bhiwadi',\n 'Bundi',\n 'Chittorgarh',\n 'Churu',\n 'Dausa',\n 'Dhaulpur',\n 'Dungarpur',\n 'Gangapur City',\n 'Hanumangarh',\n 'Jaisalmer',\n 'Jalore',\n 'Jhalawar',\n 'Jhunjhunu',\n 'Karauli',\n 'Kishangarh',\n 'Mount Abu',\n 'Nagaur',\n 'Neemrana',\n 'Pali',\n 'Pratapgarh',\n 'Rajsamand',\n 'Sawai Madhopur',\n 'Sikar',\n 'Sirohi',\n 'Sri Ganganagar',\n 'Tonk',\n ],\n },\n {\n name: 'Sikkim',\n cities: [\n 'Gangtok',\n 'Namchi',\n 'Gyalshing',\n 'Jorethang',\n 'Mangan',\n 'Pakyong',\n 'Rangpo',\n 'Ravangla',\n 'Singtam',\n 'Soreng',\n ],\n },\n {\n name: 'Tamil Nadu',\n cities: [\n 'Chennai',\n 'Coimbatore',\n 'Madurai',\n 'Tiruchirappalli',\n 'Salem',\n 'Tiruppur',\n 'Erode',\n 'Tirunelveli',\n 'Vellore',\n 'Hosur',\n 'Ambur',\n 'Ariyalur',\n 'Chengalpattu',\n 'Cuddalore',\n 'Dharmapuri',\n 'Dindigul',\n 'Gudiyatham',\n 'Kallakurichi',\n 'Kanchipuram',\n 'Kanyakumari',\n 'Karaikudi',\n 'Karur',\n 'Krishnagiri',\n 'Kumbakonam',\n 'Mayiladuthurai',\n 'Nagapattinam',\n 'Nagercoil',\n 'Namakkal',\n 'Ooty',\n 'Perambalur',\n 'Pollachi',\n 'Pudukkottai',\n 'Rajapalayam',\n 'Ramanathapuram',\n 'Ranipet',\n 'Sivaganga',\n 'Sivakasi',\n 'Tenkasi',\n 'Thanjavur',\n 'Theni',\n 'Thoothukudi',\n 'Tirupattur',\n 'Tiruvallur',\n 'Tiruvannamalai',\n 'Tiruvarur',\n 'Viluppuram',\n 'Virudhunagar',\n ],\n },\n {\n name: 'Telangana',\n cities: [\n 'Hyderabad',\n 'Warangal',\n 'Nizamabad',\n 'Karimnagar',\n 'Khammam',\n 'Secunderabad',\n 'Adilabad',\n 'Bhongir',\n 'Jagtial',\n 'Kamareddy',\n 'Kothagudem',\n 'Mahbubnagar',\n 'Mancherial',\n 'Medak',\n 'Miryalaguda',\n 'Nalgonda',\n 'Nirmal',\n 'Ramagundam',\n 'Sangareddy',\n 'Siddipet',\n 'Suryapet',\n 'Vikarabad',\n 'Wanaparthy',\n 'Zahirabad',\n ],\n },\n {\n name: 'Tripura',\n cities: [\n 'Agartala',\n 'Dharmanagar',\n 'Udaipur',\n 'Ambassa',\n 'Belonia',\n 'Bishalgarh',\n 'Kailashahar',\n 'Kamalpur',\n 'Khowai',\n 'Sabroom',\n 'Sonamura',\n 'Teliamura',\n ],\n },\n {\n name: 'Uttar Pradesh',\n cities: [\n 'Lucknow',\n 'Kanpur',\n 'Noida',\n 'Ghaziabad',\n 'Agra',\n 'Varanasi',\n 'Prayagraj',\n 'Meerut',\n 'Greater Noida',\n 'Bareilly',\n 'Aligarh',\n 'Moradabad',\n 'Gorakhpur',\n 'Amroha',\n 'Ayodhya',\n 'Azamgarh',\n 'Bahraich',\n 'Ballia',\n 'Banda',\n 'Barabanki',\n 'Basti',\n 'Bulandshahr',\n 'Chandausi',\n 'Deoria',\n 'Etah',\n 'Etawah',\n 'Farrukhabad',\n 'Fatehpur',\n 'Firozabad',\n 'Gonda',\n 'Hapur',\n 'Hardoi',\n 'Hathras',\n 'Jaunpur',\n 'Jhansi',\n 'Kasganj',\n 'Lakhimpur',\n 'Lalitpur',\n 'Mainpuri',\n 'Mathura',\n 'Mau',\n 'Mirzapur',\n 'Modinagar',\n 'Muzaffarnagar',\n 'Orai',\n 'Pilibhit',\n 'Raebareli',\n 'Rampur',\n 'Saharanpur',\n 'Sambhal',\n 'Shahjahanpur',\n 'Sitapur',\n 'Sultanpur',\n 'Unnao',\n 'Vrindavan',\n ],\n },\n {\n name: 'Uttarakhand',\n aliases: ['Uttaranchal'],\n cities: [\n 'Dehradun',\n 'Haridwar',\n 'Roorkee',\n 'Haldwani',\n 'Rudrapur',\n 'Kashipur',\n 'Rishikesh',\n 'Almora',\n 'Bageshwar',\n 'Champawat',\n 'Gopeshwar',\n 'Khatima',\n 'Kotdwar',\n 'Mussoorie',\n 'Nainital',\n 'Pauri',\n 'Pithoragarh',\n 'Ramnagar',\n 'Rudraprayag',\n 'Sitarganj',\n 'Srinagar',\n 'Tehri',\n 'Uttarkashi',\n ],\n },\n {\n name: 'West Bengal',\n cities: [\n 'Kolkata',\n 'Howrah',\n 'Siliguri',\n 'Durgapur',\n 'Asansol',\n 'Bardhaman',\n 'Bidhannagar',\n 'New Town',\n 'Kharagpur',\n 'Haldia',\n 'Alipurduar',\n 'Baharampur',\n 'Balurghat',\n 'Bally',\n 'Bankura',\n 'Barasat',\n 'Barrackpore',\n 'Bolpur',\n 'Chandannagar',\n 'Chinsurah',\n 'Contai',\n 'Cooch Behar',\n 'Darjeeling',\n 'Digha',\n 'Habra',\n 'Jalpaiguri',\n 'Kalimpong',\n 'Kalyani',\n 'Krishnanagar',\n 'Malda',\n 'Medinipur',\n 'Purulia',\n 'Raiganj',\n 'Serampore',\n 'Shantipur',\n 'Tamluk',\n ],\n },\n {\n name: 'Andaman and Nicobar Islands',\n aliases: ['Andaman & Nicobar Islands', 'Andaman and Nicobar'],\n cities: [\n 'Sri Vijaya Puram',\n 'Campbell Bay',\n 'Car Nicobar',\n 'Diglipur',\n 'Mayabunder',\n 'Rangat',\n 'Shaheed Dweep',\n 'Swaraj Dweep',\n ],\n },\n { name: 'Chandigarh', cities: ['Chandigarh'] },\n {\n name: 'Dadra and Nagar Haveli and Daman and Diu',\n aliases: [\n 'The Dadra and Nagar Haveli and Daman and Diu',\n 'Dadra and Nagar Haveli',\n 'Daman and Diu',\n ],\n cities: ['Silvassa', 'Daman', 'Diu'],\n },\n {\n name: 'Delhi',\n aliases: ['NCT of Delhi', 'National Capital Territory of Delhi'],\n cities: ['Delhi', 'New Delhi'],\n },\n {\n name: 'Jammu and Kashmir',\n aliases: ['Jammu & Kashmir', 'J&K'],\n cities: [\n 'Srinagar',\n 'Jammu',\n 'Anantnag',\n 'Bandipora',\n 'Baramulla',\n 'Budgam',\n 'Doda',\n 'Ganderbal',\n 'Kathua',\n 'Katra',\n 'Kishtwar',\n 'Kulgam',\n 'Kupwara',\n 'Poonch',\n 'Pulwama',\n 'Rajouri',\n 'Ramban',\n 'Reasi',\n 'Samba',\n 'Shopian',\n 'Sopore',\n 'Udhampur',\n ],\n },\n { name: 'Ladakh', cities: ['Leh', 'Kargil'] },\n {\n name: 'Lakshadweep',\n cities: ['Kavaratti', 'Agatti', 'Amini', 'Andrott', 'Kadmat', 'Kalpeni', 'Minicoy'],\n },\n {\n name: 'Puducherry',\n aliases: ['Pondicherry'],\n cities: ['Puducherry', 'Karaikal', 'Mahe', 'Yanam'],\n },\n];\n\n/**\n * Other names a city is searched by, keyed by the list's name: the older name,\n * the district name the location lookup answers with, or both. A search for\n * any of them shows the city as the list writes it.\n */\nexport const CITY_ALIASES: Readonly<Record<string, readonly string[]>> = {\n // `Bbmp`: how the area tree names Bengaluru's council (0.19.0).\n Bengaluru: ['Bangalore', 'Bengaluru Urban', 'Bangalore Urban', 'Bbmp', 'Bruhat Bengaluru'],\n Mumbai: ['Bombay', 'Mumbai Suburban', 'Mumbai City', 'Greater Mumbai'],\n Chennai: ['Madras', 'Greater Chennai'],\n // The area tree's spelling (LGD).\n Ahmedabad: ['Ahmadabad'],\n Kolkata: ['Calcutta'],\n Gurugram: ['Gurgaon'],\n Noida: ['Gautam Buddha Nagar'],\n Pune: ['Poona'],\n Vadodara: ['Baroda'],\n Visakhapatnam: ['Vizag', 'Vishakhapatnam'],\n Mysuru: ['Mysore'],\n Mangaluru: ['Mangalore', 'Dakshina Kannada'],\n Hubballi: ['Hubli'],\n Belagavi: ['Belgaum'],\n Kalaburagi: ['Gulbarga'],\n Vijayapura: ['Bijapur'],\n Shivamogga: ['Shimoga'],\n Tumakuru: ['Tumkur'],\n Ballari: ['Bellary'],\n Davanagere: ['Davangere'],\n Chikkamagaluru: ['Chikmagalur'],\n Hosapete: ['Hospet', 'Vijayanagara'],\n Thiruvananthapuram: ['Trivandrum'],\n Kochi: ['Cochin', 'Ernakulam'],\n Kozhikode: ['Calicut'],\n Thrissur: ['Trichur'],\n Alappuzha: ['Alleppey'],\n Kollam: ['Quilon'],\n Kannur: ['Cannanore'],\n Palakkad: ['Palghat'],\n Prayagraj: ['Allahabad'],\n Ayodhya: ['Faizabad'],\n Varanasi: ['Banaras', 'Benares', 'Kashi'],\n Tiruchirappalli: ['Trichy'],\n Thoothukudi: ['Tuticorin'],\n Ooty: ['Udhagamandalam', 'The Nilgiris'],\n Kanchipuram: ['Kanchi'],\n Puducherry: ['Pondicherry'],\n 'Chhatrapati Sambhajinagar': ['Aurangabad'],\n Ahilyanagar: ['Ahmednagar'],\n Dharashiv: ['Osmanabad'],\n Nashik: ['Nasik'],\n 'Pimpri-Chinchwad': ['Pimpri', 'Chinchwad', 'PCMC'],\n 'Vasai-Virar': ['Vasai', 'Virar'],\n Narmadapuram: ['Hoshangabad'],\n Medininagar: ['Daltonganj'],\n Bokaro: ['Bokaro Steel City'],\n Rajamahendravaram: ['Rajahmundry', 'Rajahmahendravaram'],\n Anantapur: ['Anantapuramu'],\n Kadapa: ['Cuddapah'],\n Berhampur: ['Brahmapur'],\n Balasore: ['Baleswar'],\n Keonjhar: ['Kendujhar'],\n Bidhannagar: ['Salt Lake'],\n Malda: ['English Bazar'],\n Baharampur: ['Berhampore'],\n Bardhaman: ['Burdwan', 'Purba Bardhaman'],\n Sohra: ['Cherrapunji'],\n 'Sri Vijaya Puram': ['Port Blair', 'South Andaman', 'South Andamans'],\n Mohali: ['SAS Nagar', 'Sahibzada Ajit Singh Nagar', 'S.A.S Nagar'],\n Kurukshetra: ['Thanesar'],\n Gyalshing: ['Geyzing'],\n Siaha: ['Saiha'],\n Aalo: ['Along'],\n 'Gaya Ji': ['Gaya'],\n Karimganj: ['Sribhumi'],\n // District names the location lookup answers with, for the city people name.\n Guwahati: ['Kamrup Metropolitan'],\n Vijayawada: ['NTR'],\n Hyderabad: ['Rangareddy', 'Ranga Reddy', 'Medchal Malkajgiri'],\n Panaji: ['Panjim', 'North Goa'],\n Margao: ['Madgaon', 'South Goa'],\n Shillong: ['East Khasi Hills'],\n Itanagar: ['Papum Pare'],\n Agartala: ['West Tripura'],\n Imphal: ['Imphal West', 'Imphal East'],\n Jamshedpur: ['East Singhbhum', 'Purbi Singhbhum'],\n Rudrapur: ['Udham Singh Nagar'],\n Asansol: ['Paschim Bardhaman'],\n Delhi: [\n 'Central Delhi',\n 'East Delhi',\n 'North Delhi',\n 'North East Delhi',\n 'North West Delhi',\n 'Shahdara',\n 'South Delhi',\n 'South East Delhi',\n 'South West Delhi',\n 'West Delhi',\n ],\n // Spellings people also use.\n Chapra: ['Chhapra'],\n Dhaulpur: ['Dholpur'],\n Mangaldoi: ['Mangaldai'],\n Rupnagar: ['Ropar'],\n 'Shaheed Dweep': ['Neil Island'],\n 'Swaraj Dweep': ['Havelock'],\n};\n\nconst key = (text: string) =>\n text\n .toLowerCase()\n .replace(/[.\\s&-]+/g, ' ')\n .replace(/\\band\\b/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim();\n\n/**\n * The state a name means, by its own name or an alias, ignoring case, dots,\n * \"&\" and \"and\" (\"JAMMU AND KASHMIR\", \"Jammu & Kashmir\"). `undefined` when it\n * is not an Indian state or union territory this list knows.\n */\nexport function findIndiaState(name: string | null | undefined): IndiaState | undefined {\n if (!name) return undefined;\n const wanted = key(name);\n if (!wanted) return undefined;\n return INDIA_STATES.find(\n (state) => key(state.name) === wanted || state.aliases?.some((a) => key(a) === wanted),\n );\n}\n\n/**\n * The names the state picker lists, in its order (states A to Z, then union\n * territories A to Z): the closed list a written state is checked against.\n */\nexport const INDIA_STATE_NAMES = INDIA_STATES.map((state) => state.name) as unknown as readonly [\n IndiaStateName,\n ...IndiaStateName[],\n];\n\n/** The state pickers' other names, by the list's name: \"Orissa\" finds Odisha. */\nexport const STATE_ALIASES: Readonly<Record<string, readonly string[]>> = Object.fromEntries(\n INDIA_STATES.filter((state) => state.aliases).map((state) => [state.name, state.aliases ?? []]),\n);\n\n/**\n * A city as the list writes it, when `name` is one of the state's cities or\n * another name of one (\"Bengaluru Urban\", the location lookup's district, is\n * Bengaluru). Anything else comes back as it was given: never guessed.\n */\nexport function listedCityName(state: IndiaState | undefined, name: string): string {\n if (!state) return name;\n const wanted = key(name);\n const city = state.cities.find(\n (c) => key(c) === wanted || CITY_ALIASES[c]?.some((alias) => key(alias) === wanted),\n );\n return city ?? name;\n}\n\n/**\n * A city as the list writes it from its name ALONE (0.18.0), for where no\n * state comes with it (Discover's `?city=` from a shared link): the list's\n * spelling when the name, or another name of a city, matches exactly ONE\n * spelling in the list (\"Bangalore\" is Bengaluru; \"BILASPUR\", a city of two\n * states, is \"Bilaspur\" either way), and the name unchanged when it matches\n * none or two different spellings (never guessed between them). `states` is\n * the list, India's unless a test hands it another.\n */\nexport function canonicalCityName(\n name: string,\n states: readonly Pick<IndiaState, 'cities'>[] = INDIA_STATES,\n): string {\n const wanted = key(name);\n if (!wanted) return name;\n const found = new Set<string>();\n for (const state of states) {\n for (const c of state.cities) {\n if (key(c) === wanted || CITY_ALIASES[c]?.some((alias) => key(alias) === wanted))\n found.add(c);\n }\n }\n const [only] = found;\n return found.size === 1 && only ? only : name;\n}\n\n/**\n * The town an urban body is, from the area tree's name for its council\n * (0.19.0): \"Gangtok (M Corp.)\", \"Kohima Municipal Council\", \"City Corporation\n * Panaji\", \"Municipal Committee Akhnoor\", \"Rajgarh (Alwar)\" (a bracket that\n * tells two towns apart) are Gangtok, Kohima, Panaji, Akhnoor, Rajgarh. What\n * is left is the town's own name; one the tree wrote in capitals (\"MAUGANJ\")\n * reads like the rest (Mauganj).\n */\nexport function townName(council: string): string {\n const name = council\n .replace(/\\([^)]*\\)/g, ' ')\n .replace(/\\.{2,}/g, ' ')\n .replace(\n /^\\s*(city corporation|municipal committee|municipal council|municipal board|notified area committee|town area committee|nagar palika,)\\s*/i,\n '',\n )\n .replace(\n /\\s+(municipal corporation|municipal council|municipal committee|municipal board|municipal co-?operation|muncipal council|town council|town committee|town area committee|notified area committee|cantonment board|corporation|municipality|nagar nigam|nagar palika parishad|nagar palika|nagar parishad|nagar panchayat|nagarpanchayat|mahanagara palike|mahanagar palika|mahanagarpalika)\\s*$/i,\n '',\n )\n // A twin town is one hyphen however the tree spaced it (\"Murwara - Katni\" is\n // Murwara-Katni), as the list writes its own (Pimpri-Chinchwad, Vasai-Virar).\n .replace(/\\s*-\\s*/g, '-')\n .replace(/\\s+/g, ' ')\n .trim()\n .replace(/\\.+$/, '');\n return /\\p{Ll}/u.test(name)\n ? name\n : name\n .toLowerCase()\n .replace(/(^|[\\s-])(\\p{L})/gu, (_, gap: string, c: string) => gap + c.toUpperCase());\n}\n\n/**\n * States that are one city for the public (0.19.0): the area tree splits\n * Delhi into districts named by compass point (\"South\", \"Central North\"),\n * which no one calls their city. Any district not itself a listed city (New\n * Delhi is) is the state's city.\n */\nconst ONE_CITY_STATES: Partial<Record<IndiaStateName, string>> = {\n Delhi: 'Delhi',\n Chandigarh: 'Chandigarh',\n};\n\n/**\n * The PUBLIC city of a place picked from the area tree (0.19.0): what cards\n * show and Discover's city filter and facets match. A member in a town (they\n * picked the town, or a ward in it) is in that town; anyone else is in their\n * district (a village, a block, the whole district). Either way in the\n * state's own spelling (`listedCityName`: \"Bbmp\" is Bengaluru, \"Greater\n * Mumbai\" is Mumbai), else the name as the tree has it, cleaned\n * (`townName`; \"Lakshadweep District\" is Lakshadweep). A town or district\n * this list does not hold is still a real place, shown as it is.\n *\n * Always fits a stored city (`CITY_MAX`): a town named longer is shown as its\n * district, and a district longer still is cut at a word. The all-India tree\n * has none (its longest town or district is 35, 2026-10-22); a later tree may.\n */\nexport function publicCityOf(stateName: string, district: string, town?: string | null): string {\n const city = cityOf(stateName, district, town);\n if (city.length <= CITY_MAX) return city;\n if (town) return publicCityOf(stateName, district);\n return city\n .slice(0, CITY_MAX + 1)\n .replace(/\\s+\\S*$/, '')\n .slice(0, CITY_MAX);\n}\n\nfunction cityOf(stateName: string, district: string, town?: string | null): string {\n const state = findIndiaState(stateName);\n const listed = (name: string) => listedCityName(state, name);\n const onList = (name: string) => Boolean(state?.cities.includes(name));\n const townCity = town ? townName(town) : '';\n if (townCity) {\n const named = listed(townCity);\n if (onList(named)) return named;\n const oneCity = state ? ONE_CITY_STATES[state.name] : undefined;\n // A Delhi council named by compass (\"East Delhi\") is Delhi: listed above.\n return oneCity && /delhi/i.test(townCity) ? oneCity : named;\n }\n // A district's own brackets too (\"Khandwa (East Nimar)\" is Khandwa).\n const districtCity = listed(townName(district.replace(/\\s+district\\s*$/i, '')));\n if (onList(districtCity)) return districtCity;\n const oneCity = state ? ONE_CITY_STATES[state.name] : undefined;\n return oneCity ?? districtCity;\n}\n\n/**\n * A place as the list writes it, from however it arrived: a member's older\n * draft (\"karnataka\"), the location lookup (\"Bengaluru Urban\" in \"KARNATAKA\"),\n * or another client. The state becomes the list's name when the list knows it\n * (else stays as given, trimmed, for the rule to refuse); the city becomes the\n * list's spelling when it is one of that state's cities or another name of\n * one, and is never guessed otherwise; the country is India.\n *\n * The SERVER applies it to every location it stores, so Discover's exact match\n * finds \"Bengaluru\" however a client spelled it; a client applies it when it\n * restores or suggests a place, so the member sees the spelling they will get.\n */\nexport function canonicalIndiaLocation(place: { city: string; state?: string | null }): {\n city: string;\n state: string;\n country: typeof INDIA;\n} {\n const listed = findIndiaState(place.state);\n return {\n city: listedCityName(listed, place.city.trim()),\n state: listed?.name ?? (place.state ?? '').trim(),\n country: INDIA,\n };\n}\n"]}
@@ -20,6 +20,7 @@
20
20
  * @module founder-schema/domains/onboarding/onboarding-answers
21
21
  */
22
22
  import { type Industry, type StartupStage } from '../../core/common.js';
23
+ import { type Place } from '../location/areas.js';
23
24
  import { type CompleteOnboardingBodyInput, type OnboardingForm, type OnboardingStepKey } from './onboarding.js';
24
25
  type DeepPartial<T> = T extends readonly (infer Item)[] ? DeepPartial<Item>[] : T extends object ? {
25
26
  [K in keyof T]?: DeepPartial<T[K]>;
@@ -74,15 +75,11 @@ export declare function emptyOnboardingForm(): OnboardingForm;
74
75
  */
75
76
  export declare function ventureStarted(form: Pick<OnboardingForm, 'venture'>): boolean;
76
77
  /**
77
- * True when a place has been started: a city or a state given. A place opened
78
- * and left empty is NO place (the member chose not to say), never a half
79
- * answer to refuse; a place with only one of the two IS half an answer, and
80
- * the schema asks for the other.
78
+ * True when a place has been given (0.19.0). The drawer hands back only a
79
+ * whole place (state, district, and a locality or the whole district), so
80
+ * there is no half answer: a place is there or it is not.
81
81
  */
82
- export declare function locationStarted(place: {
83
- city: string;
84
- state?: string | null;
85
- } | null): boolean;
82
+ export declare function locationStarted(place: Place | null): boolean;
86
83
  /**
87
84
  * The draft one step saves: exactly the fields that step owns
88
85
  * (`FOUNDER_ONBOARDING_STEPS[].fields`, the same picks its validation uses),
@@ -102,10 +99,10 @@ export declare function onboardingDraftForStep(form: OnboardingForm, key: Onboar
102
99
  *
103
100
  * Cleaned the way the schema reads it: the name tidied (`tidyFullName`), the
104
101
  * phone to ten digits (`normalizePhone`), links given their scheme
105
- * (`normalizeLinkUrl`), the place in the list's own spelling in India
106
- * (`canonicalIndiaLocation`), the team size a number. A half-answered part is
107
- * SENT, not hidden: a location without a city, a business without its stage,
108
- * reach the schema and are refused there, under the field.
102
+ * (`normalizeLinkUrl`), the place as its area ids (`pickOfPlace`, 0.19.0:
103
+ * the server names it), the team size a number. A half-answered part is
104
+ * SENT, not hidden: a business without its stage reaches the schema and is
105
+ * refused there, under the field.
109
106
  */
110
107
  export declare function completeOnboardingBodyFrom(form: OnboardingForm): CompleteOnboardingBodyCandidate;
111
108
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"onboarding-answers.d.ts","sourceRoot":"","sources":["../../../src/domains/onboarding/onboarding-answers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EACL,KAAK,QAAQ,EAGb,KAAK,YAAY,EAElB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,KAAK,2BAA2B,EAIhC,KAAK,cAAc,EACnB,KAAK,iBAAiB,EAGvB,MAAM,iBAAiB,CAAC;AAEzB,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,GACnD,WAAW,CAAC,IAAI,CAAC,EAAE,GACnB,CAAC,SAAS,MAAM,GACd;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GACtC,CAAC,CAAC;AAER;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,KAAK,MAAM,KAAG,MACkB,CAAC;AAEnE;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG;IACF,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,KAAK,EAAE,YAAY,GAAG,SAAS,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAcA;AAED;;;;GAIG;AACH,MAAM,MAAM,+BAA+B,GAAG,WAAW,CAAC,2BAA2B,CAAC,CAAC;AAEvF,qEAAqE;AACrE,wBAAgB,mBAAmB,IAAI,cAAc,CAEpD;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,GAAG,OAAO,CAG7E;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,GAAG,OAAO,CAE9F;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,cAAc,EACpB,GAAG,EAAE,iBAAiB,GACrB,OAAO,CAAC,cAAc,CAAC,CAKzB;AAWD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,cAAc,GAAG,+BAA+B,CA6ChG"}
1
+ {"version":3,"file":"onboarding-answers.d.ts","sourceRoot":"","sources":["../../../src/domains/onboarding/onboarding-answers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EACL,KAAK,QAAQ,EAGb,KAAK,YAAY,EAElB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,KAAK,KAAK,EAAe,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EACL,KAAK,2BAA2B,EAIhC,KAAK,cAAc,EACnB,KAAK,iBAAiB,EAGvB,MAAM,iBAAiB,CAAC;AAEzB,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,GACnD,WAAW,CAAC,IAAI,CAAC,EAAE,GACnB,CAAC,SAAS,MAAM,GACd;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GACtC,CAAC,CAAC;AAER;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,KAAK,MAAM,KAAG,MACkB,CAAC;AAEnE;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG;IACF,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,KAAK,EAAE,YAAY,GAAG,SAAS,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAcA;AAED;;;;GAIG;AACH,MAAM,MAAM,+BAA+B,GAAG,WAAW,CAAC,2BAA2B,CAAC,CAAC;AAEvF,qEAAqE;AACrE,wBAAgB,mBAAmB,IAAI,cAAc,CAEpD;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,GAAG,OAAO,CAG7E;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,OAAO,CAE5D;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,cAAc,EACpB,GAAG,EAAE,iBAAiB,GACrB,OAAO,CAAC,cAAc,CAAC,CAKzB;AAWD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,cAAc,GAAG,+BAA+B,CAsChG"}
@@ -21,7 +21,7 @@
21
21
  */
22
22
  import { normalizeLinkUrl, normalizePhone, tidyFullName, } from '../../core/common.js';
23
23
  import { FOUNDED_YEAR_MIN } from '../../core/limits.js';
24
- import { canonicalIndiaLocation } from '../location/india.js';
24
+ import { pickOfPlace } from '../location/areas.js';
25
25
  import { FOUNDER_ONBOARDING_STEPS, GUIDELINES_VERSION, ONBOARDING_STEP_KEYS, readOnboardingDraft, teamSizeDigits, } from './onboarding.js';
26
26
  /**
27
27
  * A founding year as typed, kept to digits, as many as a year has (0.18.0,
@@ -70,13 +70,12 @@ export function ventureStarted(form) {
70
70
  return Boolean(v.name.trim() || v.website.trim() || v.industry || v.stage || v.teamSize.trim());
71
71
  }
72
72
  /**
73
- * True when a place has been started: a city or a state given. A place opened
74
- * and left empty is NO place (the member chose not to say), never a half
75
- * answer to refuse; a place with only one of the two IS half an answer, and
76
- * the schema asks for the other.
73
+ * True when a place has been given (0.19.0). The drawer hands back only a
74
+ * whole place (state, district, and a locality or the whole district), so
75
+ * there is no half answer: a place is there or it is not.
77
76
  */
78
77
  export function locationStarted(place) {
79
- return Boolean(place && (place.city.trim() || (place.state ?? '').trim()));
78
+ return place !== null;
80
79
  }
81
80
  /**
82
81
  * The draft one step saves: exactly the fields that step owns
@@ -107,10 +106,10 @@ function copyField(to, from, key) {
107
106
  *
108
107
  * Cleaned the way the schema reads it: the name tidied (`tidyFullName`), the
109
108
  * phone to ten digits (`normalizePhone`), links given their scheme
110
- * (`normalizeLinkUrl`), the place in the list's own spelling in India
111
- * (`canonicalIndiaLocation`), the team size a number. A half-answered part is
112
- * SENT, not hidden: a location without a city, a business without its stage,
113
- * reach the schema and are refused there, under the field.
109
+ * (`normalizeLinkUrl`), the place as its area ids (`pickOfPlace`, 0.19.0:
110
+ * the server names it), the team size a number. A half-answered part is
111
+ * SENT, not hidden: a business without its stage reaches the schema and is
112
+ * refused there, under the field.
114
113
  */
115
114
  export function completeOnboardingBodyFrom(form) {
116
115
  const headline = form.headline.trim();
@@ -143,14 +142,8 @@ export function completeOnboardingBodyFrom(form) {
143
142
  body.skills = form.skills;
144
143
  if (Object.keys(links).length)
145
144
  body.links = links;
146
- if (form.location && locationStarted(form.location)) {
147
- const place = canonicalIndiaLocation(form.location);
148
- body.location = {
149
- city: place.city,
150
- ...(place.state ? { state: place.state } : {}),
151
- country: place.country,
152
- };
153
- }
145
+ if (form.location)
146
+ body.location = pickOfPlace(form.location);
154
147
  if (ventureStarted(form))
155
148
  body.venture = ventureBodyFrom(form.venture);
156
149
  // Sent whenever given: with a business they describe it, without one the