@dromney/mapthis 0.1.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 (65) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +56 -0
  3. package/dist/ai/index.cjs +474 -0
  4. package/dist/ai/index.cjs.map +1 -0
  5. package/dist/ai/index.d.cts +117 -0
  6. package/dist/ai/index.d.ts +117 -0
  7. package/dist/ai/index.js +447 -0
  8. package/dist/ai/index.js.map +1 -0
  9. package/dist/domain-CZ-L-ntu.d.ts +163 -0
  10. package/dist/domain-Dc1wSTkf.d.cts +163 -0
  11. package/dist/errors-Bw97z_4m.d.cts +12 -0
  12. package/dist/errors-Bw97z_4m.d.ts +12 -0
  13. package/dist/generate/index.cjs +222 -0
  14. package/dist/generate/index.cjs.map +1 -0
  15. package/dist/generate/index.d.cts +140 -0
  16. package/dist/generate/index.d.ts +140 -0
  17. package/dist/generate/index.js +220 -0
  18. package/dist/generate/index.js.map +1 -0
  19. package/dist/geocoding/index.cjs +90 -0
  20. package/dist/geocoding/index.cjs.map +1 -0
  21. package/dist/geocoding/index.d.cts +36 -0
  22. package/dist/geocoding/index.d.ts +36 -0
  23. package/dist/geocoding/index.js +86 -0
  24. package/dist/geocoding/index.js.map +1 -0
  25. package/dist/index.cjs +546 -0
  26. package/dist/index.cjs.map +1 -0
  27. package/dist/index.d.cts +5 -0
  28. package/dist/index.d.ts +5 -0
  29. package/dist/index.js +469 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/parser-CzXzpmVv.d.cts +111 -0
  32. package/dist/parser-N7-fNxeu.d.ts +111 -0
  33. package/dist/react/index.cjs +394 -0
  34. package/dist/react/index.cjs.map +1 -0
  35. package/dist/react/index.js +383 -0
  36. package/dist/react/index.js.map +1 -0
  37. package/dist/schemas-Dy5coqXo.d.cts +484 -0
  38. package/dist/schemas-Dy5coqXo.d.ts +484 -0
  39. package/dist/scrape/index.cjs +133 -0
  40. package/dist/scrape/index.cjs.map +1 -0
  41. package/dist/scrape/index.d.cts +60 -0
  42. package/dist/scrape/index.d.ts +60 -0
  43. package/dist/scrape/index.js +125 -0
  44. package/dist/scrape/index.js.map +1 -0
  45. package/dist/search/index.cjs +76 -0
  46. package/dist/search/index.cjs.map +1 -0
  47. package/dist/search/index.d.cts +75 -0
  48. package/dist/search/index.d.ts +75 -0
  49. package/dist/search/index.js +71 -0
  50. package/dist/search/index.js.map +1 -0
  51. package/dist/types/index.cjs +215 -0
  52. package/dist/types/index.cjs.map +1 -0
  53. package/dist/types/index.d.cts +4 -0
  54. package/dist/types/index.d.ts +4 -0
  55. package/dist/types/index.js +171 -0
  56. package/dist/types/index.js.map +1 -0
  57. package/dist/types-BhqKlq0k.d.ts +31 -0
  58. package/dist/types-rFjK5YcJ.d.cts +31 -0
  59. package/dist/utils/index.cjs +335 -0
  60. package/dist/utils/index.cjs.map +1 -0
  61. package/dist/utils/index.d.cts +363 -0
  62. package/dist/utils/index.d.ts +363 -0
  63. package/dist/utils/index.js +301 -0
  64. package/dist/utils/index.js.map +1 -0
  65. package/package.json +150 -0
@@ -0,0 +1,335 @@
1
+ 'use strict';
2
+
3
+ // src/utils/text.ts
4
+ var capitalizeFirstLetter = (s) => s ? s.charAt(0).toUpperCase() + s.slice(1) : s;
5
+ function objectMap(obj, func) {
6
+ return Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, func(k, v)]));
7
+ }
8
+ var enforceListTextInput = (val) => {
9
+ if (val === "\n") return "";
10
+ const inner = val.trim().split("\n\n").map((line) => line.trim()).filter((line) => line !== "").join("\n\n");
11
+ return inner + (val.endsWith("\n") ? "\n" : "");
12
+ };
13
+ var preventMultipleBlankLines = enforceListTextInput;
14
+
15
+ // src/utils/number.ts
16
+ function randomIntBetween(from, to) {
17
+ return Math.floor(from + Math.random() * (to - from));
18
+ }
19
+
20
+ // src/utils/color.ts
21
+ function rgbToHex(r, g, b) {
22
+ return `#${r.toString(16).padStart(2, "0")}${g.toString(16).padStart(2, "0")}${b.toString(16).padStart(2, "0")}`;
23
+ }
24
+ function hueToRGB(m, n, o) {
25
+ if (o < 0) o += 1;
26
+ if (o > 1) o -= 1;
27
+ if (o < 1 / 6) return m + (n - m) * 6 * o;
28
+ if (o < 1 / 2) return n;
29
+ if (o < 2 / 3) return m + (n - m) * (2 / 3 - o) * 6;
30
+ return m;
31
+ }
32
+ function hslToRgb(H, S, L) {
33
+ const h = H / 360;
34
+ const s = S / 100;
35
+ const l = L / 100;
36
+ const q = l < 0.5 ? l * (1 + s) : l + s - l * s;
37
+ const p = 2 * l - q;
38
+ const r = hueToRGB(p, q, h + 1 / 3);
39
+ const g = hueToRGB(p, q, h);
40
+ const b = hueToRGB(p, q, h - 1 / 3);
41
+ const rd = (a) => Math.floor(Math.max(Math.min(a * 256, 255), 0));
42
+ return [rd(r), rd(g), rd(b)];
43
+ }
44
+ var H_MIN = 50;
45
+ var H_MAX = 300;
46
+ var L_MIN = 90;
47
+ var L_MAX = 95;
48
+ var seedOffset = 50;
49
+ function randomPastelHsl() {
50
+ const h = randomIntBetween(H_MIN, H_MAX);
51
+ const s = 100;
52
+ const l = randomIntBetween(L_MIN, L_MAX);
53
+ return [h, s, l];
54
+ }
55
+ function randomPastelHslString() {
56
+ const [h, s, l] = randomPastelHsl();
57
+ return `hsl(${h}, ${s}%, ${l}%)`;
58
+ }
59
+ function randomPastelRgb() {
60
+ const [h, s, l] = randomPastelHsl();
61
+ return hslToRgb(h, s, l);
62
+ }
63
+ function randomPastelHex() {
64
+ const [r, g, b] = randomPastelRgb();
65
+ return rgbToHex(r, g, b);
66
+ }
67
+ function seededHslH(seed, min = H_MIN, max = H_MAX) {
68
+ if (seed < 0) throw new Error("Seed must be a positive number");
69
+ if (seed === 0) return min + seedOffset;
70
+ const segmentsAtLevel = 2 ** Math.floor(Math.log2(seed));
71
+ const indexWithinLevel = seed - segmentsAtLevel;
72
+ const range = max - min;
73
+ const hueFromMin = (indexWithinLevel + 0.5) * (range / segmentsAtLevel);
74
+ return (hueFromMin + seedOffset) % range + min;
75
+ }
76
+ function seededPastelHsl(seed) {
77
+ const h = seededHslH(seed);
78
+ const s = 100;
79
+ const l = 87;
80
+ return [h, s, l];
81
+ }
82
+ function seededPastelRgb(seed) {
83
+ const [h, s, l] = seededPastelHsl(seed);
84
+ return hslToRgb(h, s, l);
85
+ }
86
+ function seededPastelRgbA(seed, alpha) {
87
+ const [r, g, b] = seededPastelRgb(seed);
88
+ return `rgba(${r}, ${g}, ${b}, ${alpha})`;
89
+ }
90
+ function seededPastelHex(seed) {
91
+ const [r, g, b] = seededPastelRgb(seed);
92
+ return rgbToHex(r, g, b);
93
+ }
94
+ function randomPastelHslDocColors() {
95
+ const [h, s, l] = randomPastelHsl();
96
+ return {
97
+ bgColor: `hsl(${h}, ${s}%, ${l}%)`,
98
+ txtColor: `hsl(${h}, ${s}%, 5%)`,
99
+ primaryColor: `hsl(${h}, ${s}%, 98%)`,
100
+ focusFocus: `hsl(${h}, ${s}%, 95%)`
101
+ };
102
+ }
103
+ var DARK_COLOR = "#000000";
104
+ var LIGHT_COLOR = "#f2f2f2";
105
+ function uuidPastelHsl(uuid) {
106
+ const val = BigInt("0x" + uuid.replace(/-/g, ""));
107
+ const h = val % BigInt(360);
108
+ const s = 100;
109
+ const l = 87;
110
+ return [Number(h), s, l];
111
+ }
112
+ function uuidPastelRgb(uuid) {
113
+ const [h, s, l] = uuidPastelHsl(uuid);
114
+ return hslToRgb(h, s, l);
115
+ }
116
+ function uuidPastelRgbA(uuid, alpha) {
117
+ const [r, g, b] = uuidPastelRgb(uuid);
118
+ return `rgba(${r}, ${g}, ${b}, ${alpha})`;
119
+ }
120
+ function uuidPastelHex(uuid) {
121
+ const [r, g, b] = uuidPastelRgb(uuid);
122
+ return rgbToHex(r, g, b);
123
+ }
124
+ function getTextColor(bgColor) {
125
+ if (bgColor.length !== 7) return DARK_COLOR;
126
+ const color = bgColor.startsWith("#") ? bgColor.substring(1, 7) : bgColor;
127
+ const r = parseInt(color.substring(0, 2), 16);
128
+ const g = parseInt(color.substring(2, 4), 16);
129
+ const b = parseInt(color.substring(4, 6), 16);
130
+ return r * 0.299 + g * 0.587 + b * 0.114 > 186 ? DARK_COLOR : LIGHT_COLOR;
131
+ }
132
+
133
+ // src/utils/stopwatch.ts
134
+ var StopwatchLapped = class {
135
+ name;
136
+ startTime = void 0;
137
+ endTime = void 0;
138
+ _currentLap = 0;
139
+ laps = [];
140
+ log;
141
+ constructor(name = "Stopwatch", log = true) {
142
+ this.name = name;
143
+ this.log = log;
144
+ }
145
+ get elapsed() {
146
+ if (!this.startTime) throw new Error("Stopwatch not running");
147
+ if (this.endTime) return this.endTime - this.startTime;
148
+ return Date.now() - this.startTime;
149
+ }
150
+ get currentLap() {
151
+ return this._currentLap;
152
+ }
153
+ checkStopped() {
154
+ if (this.endTime !== void 0) {
155
+ throw new Error("Stopwatch already stopped. Start a new stopwatch");
156
+ }
157
+ }
158
+ addLap(name, start, absoluteStart) {
159
+ this._currentLap++;
160
+ this.laps[this._currentLap] = {
161
+ name,
162
+ start,
163
+ absoluteStart
164
+ };
165
+ if (this.log) console.log(`${this.name}: Starting ${name}`);
166
+ }
167
+ completeLap(now) {
168
+ if (this.startTime === void 0) throw new Error("Stopwatch not running");
169
+ const currentLap = this.laps[this._currentLap];
170
+ if (!currentLap) throw new Error("No current lap");
171
+ const duration = now - currentLap.absoluteStart;
172
+ const cumulative = now - this.startTime;
173
+ currentLap.absoluteEnd = now;
174
+ currentLap.end = cumulative;
175
+ currentLap.duration = duration;
176
+ if (this.log) {
177
+ console.log(
178
+ `${this.name}: ${currentLap.name} took ${duration}ms, total elapsed = ${cumulative}ms)`
179
+ );
180
+ }
181
+ return cumulative;
182
+ }
183
+ start(firstLapName = "Lap") {
184
+ this.checkStopped();
185
+ if (this.startTime) throw new Error("Stopwatch already running");
186
+ const now = Date.now();
187
+ this.startTime = now;
188
+ this._currentLap = 0;
189
+ if (this.log) console.log(`${this.name}: Starting`);
190
+ this.addLap(firstLapName, 0, now);
191
+ return this;
192
+ }
193
+ lap(newLapName = "Lap") {
194
+ this.checkStopped();
195
+ if (this.startTime === void 0) throw new Error("Stopwatch not running");
196
+ const now = Date.now();
197
+ const cumulative = this.completeLap(now);
198
+ this.addLap(newLapName, cumulative, now);
199
+ return this;
200
+ }
201
+ stop() {
202
+ this.checkStopped();
203
+ if (this.startTime === void 0) throw new Error("Stopwatch not running");
204
+ const now = Date.now();
205
+ const total = now - this.startTime;
206
+ this.completeLap(now);
207
+ this.endTime = now;
208
+ if (this.log) console.log(`${this.name}: Completed in ${total}ms)`);
209
+ return this;
210
+ }
211
+ };
212
+ var Stopwatch = class {
213
+ name;
214
+ startTime;
215
+ constructor(name) {
216
+ this.name = name;
217
+ this.startTime = Date.now();
218
+ }
219
+ stop() {
220
+ const now = Date.now();
221
+ const elapsedTime = now - this.startTime;
222
+ console.log(`${this.name} took ${elapsedTime} ms`);
223
+ this.startTime = now;
224
+ return elapsedTime;
225
+ }
226
+ };
227
+
228
+ // src/utils/geo.ts
229
+ var cities = {
230
+ london: { lat: 51.5074, lng: -0.1278 },
231
+ washingtonDC: { lat: 38.9072, lng: -77.0369 },
232
+ newYorkCity: { lat: 40.7128, lng: -74.006 },
233
+ losAngeles: { lat: 34.0522, lng: -118.2437 },
234
+ tokyo: { lat: 35.6895, lng: 139.6917 },
235
+ paris: { lat: 48.8566, lng: 2.3522 },
236
+ sydney: { lat: -33.8688, lng: 151.2093 },
237
+ saoPaulo: { lat: -23.5505, lng: -46.6333 },
238
+ moscow: { lat: 55.7558, lng: 37.6173 },
239
+ beijing: { lat: 39.9042, lng: 116.4074 },
240
+ buenosAires: { lat: -34.6037, lng: -58.3816 },
241
+ rome: { lat: 41.9028, lng: 12.4964 },
242
+ sanFrancisco: { lat: 37.7749, lng: -122.4194 },
243
+ mexicoCity: { lat: 19.4326, lng: -99.1332 },
244
+ newDelhi: { lat: 28.6139, lng: 77.209 },
245
+ toronto: { lat: 43.6532, lng: -79.3832 },
246
+ berlin: { lat: 52.52, lng: 13.405 },
247
+ shanghai: { lat: 31.2304, lng: 121.4737 },
248
+ bangkok: { lat: 13.7563, lng: 100.5018 },
249
+ rioDeJaneiro: { lat: -22.9068, lng: -43.1729 },
250
+ singapore: { lat: 1.3521, lng: 103.8198 },
251
+ istanbul: { lat: 41.0082, lng: 28.9784 },
252
+ melbourne: { lat: -37.8136, lng: 144.9631 },
253
+ frankfurt: { lat: 50.1109, lng: 8.6821 },
254
+ johannesburg: { lat: -26.2041, lng: 28.0473 },
255
+ madrid: { lat: 40.4168, lng: -3.7038 },
256
+ kualaLumpur: { lat: 3.139, lng: 101.6869 },
257
+ helsinki: { lat: 60.1699, lng: 24.9384 },
258
+ copenhagen: { lat: 55.6761, lng: 12.5683 },
259
+ budapest: { lat: 47.4979, lng: 19.0402 },
260
+ ankara: { lat: 39.9334, lng: 32.8597 },
261
+ cairo: { lat: 30.0444, lng: 31.2357 },
262
+ osaka: { lat: 34.6937, lng: 135.5023 },
263
+ athens: { lat: 37.9838, lng: 23.7275 },
264
+ seoul: { lat: 37.5665, lng: 126.978 },
265
+ jakarta: { lat: -6.2088, lng: 106.8456 },
266
+ dubai: { lat: 25.276987, lng: 55.296249 },
267
+ telAviv: { lat: 32.0853, lng: 34.7818 },
268
+ mumbai: { lat: 19.075983, lng: 72.877655 },
269
+ nairobi: { lat: -1.2921, lng: 36.8219 },
270
+ casablanca: { lat: 33.5731, lng: -7.5898 },
271
+ calgary: { lat: 51.0447, lng: -114.0719 },
272
+ montreal: { lat: 45.5017, lng: -73.5673 },
273
+ zagreb: { lat: 45.815, lng: 15.9819 },
274
+ stockholm: { lat: 59.3293, lng: 18.0686 },
275
+ brasilia: { lat: -15.8267, lng: -47.9218 },
276
+ canberra: { lat: -35.282, lng: 149.1286 },
277
+ amman: { lat: 30.5852, lng: 36.2384 },
278
+ dublin: { lat: 53.3498, lng: -6.2603 },
279
+ phoenix: { lat: 33.4484, lng: -112.074 },
280
+ portLouis: { lat: -20.1609, lng: 57.5012 },
281
+ riyadh: { lat: 24.7136, lng: 46.6753 },
282
+ bucharest: { lat: 44.4268, lng: 26.1025 },
283
+ vancouver: { lat: 49.2827, lng: -123.1207 },
284
+ baghdad: { lat: 33.3128, lng: 44.3615 },
285
+ cancun: { lat: 21.1619, lng: -86.8515 },
286
+ denpasar: { lat: -8.4095, lng: 115.1889 },
287
+ vientiane: { lat: 17.9714, lng: 102.6141 },
288
+ pune: { lat: 18.5204, lng: 73.8567 },
289
+ karachi: { lat: 24.8607, lng: 67.0011 },
290
+ denver: { lat: 39.7392, lng: -104.9903 }
291
+ };
292
+ var randomLat = () => randomIntBetween(-90, 90);
293
+ var randomLng = () => randomIntBetween(-180, 180);
294
+ var randomLatDev = () => randomIntBetween(40, 50);
295
+ var randomLngDev = () => randomIntBetween(-5, 5);
296
+ var randomDevCoordinates = () => ({
297
+ lat: randomLatDev(),
298
+ lng: randomLngDev()
299
+ });
300
+
301
+ exports.H_MAX = H_MAX;
302
+ exports.H_MIN = H_MIN;
303
+ exports.L_MAX = L_MAX;
304
+ exports.L_MIN = L_MIN;
305
+ exports.Stopwatch = Stopwatch;
306
+ exports.StopwatchLapped = StopwatchLapped;
307
+ exports.capitalizeFirstLetter = capitalizeFirstLetter;
308
+ exports.cities = cities;
309
+ exports.enforceListTextInput = enforceListTextInput;
310
+ exports.getTextColor = getTextColor;
311
+ exports.objectMap = objectMap;
312
+ exports.preventMultipleBlankLines = preventMultipleBlankLines;
313
+ exports.randomDevCoordinates = randomDevCoordinates;
314
+ exports.randomIntBetween = randomIntBetween;
315
+ exports.randomLat = randomLat;
316
+ exports.randomLatDev = randomLatDev;
317
+ exports.randomLng = randomLng;
318
+ exports.randomLngDev = randomLngDev;
319
+ exports.randomPastelHex = randomPastelHex;
320
+ exports.randomPastelHsl = randomPastelHsl;
321
+ exports.randomPastelHslDocColors = randomPastelHslDocColors;
322
+ exports.randomPastelHslString = randomPastelHslString;
323
+ exports.randomPastelRgb = randomPastelRgb;
324
+ exports.seedOffset = seedOffset;
325
+ exports.seededHslH = seededHslH;
326
+ exports.seededPastelHex = seededPastelHex;
327
+ exports.seededPastelHsl = seededPastelHsl;
328
+ exports.seededPastelRgb = seededPastelRgb;
329
+ exports.seededPastelRgbA = seededPastelRgbA;
330
+ exports.uuidPastelHex = uuidPastelHex;
331
+ exports.uuidPastelHsl = uuidPastelHsl;
332
+ exports.uuidPastelRgb = uuidPastelRgb;
333
+ exports.uuidPastelRgbA = uuidPastelRgbA;
334
+ //# sourceMappingURL=index.cjs.map
335
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/text.ts","../../src/utils/number.ts","../../src/utils/color.ts","../../src/utils/stopwatch.ts","../../src/utils/geo.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Capitalize the first character of a string, passing through null/undefined.\n */\nexport const capitalizeFirstLetter = <T extends string | null | undefined>(s: T): T =>\n (s ? s.charAt(0).toUpperCase() + s.slice(1) : s) as T\n\n/**\n * Map the values of a plain object while preserving keys.\n */\nexport function objectMap<T>(\n obj: Record<string, T>,\n func: (key: string, val: T) => T,\n): Record<string, T> {\n return Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, func(k, v)]))\n}\n\n/**\n * Normalize freeform list input for a textarea that expects one item per line.\n *\n * - Leading newline is swallowed so users cannot start a list with blank lines.\n * - Internal blank lines are collapsed.\n * - A trailing newline is preserved so the user can keep typing the next line.\n */\nexport const enforceListTextInput = (val: string): string => {\n if (val === \"\\n\") return \"\"\n const inner = val\n .trim()\n .split(\"\\n\\n\")\n .map((line) => line.trim())\n .filter((line) => line !== \"\")\n .join(\"\\n\\n\")\n return inner + (val.endsWith(\"\\n\") ? \"\\n\" : \"\")\n}\n\n/**\n * Alias of {@link enforceListTextInput} kept for semantic clarity in call sites.\n */\nexport const preventMultipleBlankLines = enforceListTextInput\n","/**\n * Random integer in the half-open range [from, to).\n */\nexport function randomIntBetween(from: number, to: number): number {\n return Math.floor(from + Math.random() * (to - from))\n}\n","import { randomIntBetween } from \"./number\"\n\n/**\n * Pastel color utilities for coloring map markers, group pills, and seeds\n * derived from UUIDs.\n *\n * All functions are pure and deterministic when given a seed.\n */\n\nfunction rgbToHex(r: number, g: number, b: number): string {\n return `#${r.toString(16).padStart(2, \"0\")}${g.toString(16).padStart(2, \"0\")}${b.toString(16).padStart(2, \"0\")}`\n}\n\nfunction hueToRGB(m: number, n: number, o: number): number {\n if (o < 0) o += 1\n if (o > 1) o -= 1\n if (o < 1 / 6) return m + (n - m) * 6 * o\n if (o < 1 / 2) return n\n if (o < 2 / 3) return m + (n - m) * (2 / 3 - o) * 6\n return m\n}\n\n// HSL to RGB formula adapted from:\n// https://gist.github.com/mjackson/5311256\n// https://codepen.io/pliu/pen/BLEKwr\nfunction hslToRgb(H: number, S: number, L: number): [number, number, number] {\n const h = H / 360\n const s = S / 100\n const l = L / 100\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s\n const p = 2 * l - q\n\n const r = hueToRGB(p, q, h + 1 / 3)\n const g = hueToRGB(p, q, h)\n const b = hueToRGB(p, q, h - 1 / 3)\n\n const rd = (a: number) => Math.floor(Math.max(Math.min(a * 256, 255), 0))\n\n return [rd(r), rd(g), rd(b)]\n}\n\nexport const H_MIN = 50 // 0-360\nexport const H_MAX = 300 // 0-360\nexport const L_MIN = 90 // 75-95\nexport const L_MAX = 95 // 75-95\nexport const seedOffset = 50\n\nexport function randomPastelHsl(): [number, number, number] {\n const h = randomIntBetween(H_MIN, H_MAX)\n const s = 100\n const l = randomIntBetween(L_MIN, L_MAX)\n return [h, s, l]\n}\n\nexport function randomPastelHslString(): string {\n const [h, s, l] = randomPastelHsl()\n return `hsl(${h}, ${s}%, ${l}%)`\n}\n\nexport function randomPastelRgb(): [number, number, number] {\n const [h, s, l] = randomPastelHsl()\n return hslToRgb(h, s, l)\n}\n\nexport function randomPastelHex(): string {\n const [r, g, b] = randomPastelRgb()\n return rgbToHex(r, g, b)\n}\n\n/**\n * Deterministically map a non-negative integer seed to a hue in [min, max).\n *\n * The algorithm uses a base-2 level decomposition so that successive seeds\n * (0, 1, 2, 3, ...) stay maximally spaced within the hue range.\n */\nexport function seededHslH(seed: number, min: number = H_MIN, max: number = H_MAX): number {\n if (seed < 0) throw new Error(\"Seed must be a positive number\")\n\n if (seed === 0) return min + seedOffset\n\n const segmentsAtLevel = 2 ** Math.floor(Math.log2(seed))\n const indexWithinLevel = seed - segmentsAtLevel\n const range = max - min\n\n const hueFromMin = (indexWithinLevel + 0.5) * (range / segmentsAtLevel)\n return ((hueFromMin + seedOffset) % range) + min\n}\n\nexport function seededPastelHsl(seed: number): [number, number, number] {\n const h = seededHslH(seed)\n const s = 100\n const l = 87\n return [h, s, l]\n}\n\nexport function seededPastelRgb(seed: number): [number, number, number] {\n const [h, s, l] = seededPastelHsl(seed)\n return hslToRgb(h, s, l)\n}\n\nexport function seededPastelRgbA(seed: number, alpha: number): string {\n const [r, g, b] = seededPastelRgb(seed)\n return `rgba(${r}, ${g}, ${b}, ${alpha})`\n}\n\nexport function seededPastelHex(seed: number): string {\n const [r, g, b] = seededPastelRgb(seed)\n return rgbToHex(r, g, b)\n}\n\nexport interface PastelDocColors {\n bgColor: string\n txtColor: string\n primaryColor: string\n focusFocus: string\n}\n\nexport function randomPastelHslDocColors(): PastelDocColors {\n const [h, s, l] = randomPastelHsl()\n return {\n bgColor: `hsl(${h}, ${s}%, ${l}%)`,\n txtColor: `hsl(${h}, ${s}%, 5%)`,\n primaryColor: `hsl(${h}, ${s}%, 98%)`,\n focusFocus: `hsl(${h}, ${s}%, 95%)`,\n }\n}\n\nconst DARK_COLOR = \"#000000\"\nconst LIGHT_COLOR = \"#f2f2f2\"\n\n/**\n * Deterministic pastel hue derived from a UUID by interpreting its hex as a\n * big integer mod 360.\n */\nexport function uuidPastelHsl(uuid: string): [number, number, number] {\n const val = BigInt(\"0x\" + uuid.replace(/-/g, \"\"))\n const h = val % BigInt(360)\n const s = 100\n const l = 87\n return [Number(h), s, l]\n}\n\nexport function uuidPastelRgb(uuid: string): [number, number, number] {\n const [h, s, l] = uuidPastelHsl(uuid)\n return hslToRgb(h, s, l)\n}\n\nexport function uuidPastelRgbA(uuid: string, alpha: number): string {\n const [r, g, b] = uuidPastelRgb(uuid)\n return `rgba(${r}, ${g}, ${b}, ${alpha})`\n}\n\nexport function uuidPastelHex(uuid: string): string {\n const [r, g, b] = uuidPastelRgb(uuid)\n return rgbToHex(r, g, b)\n}\n\n/**\n * Choose a readable text color (dark or light) for a given hex background,\n * using the standard ITU-R BT.601 luminance coefficients.\n */\nexport function getTextColor(bgColor: string): string {\n if (bgColor.length !== 7) return DARK_COLOR\n const color = bgColor.startsWith(\"#\") ? bgColor.substring(1, 7) : bgColor\n const r = parseInt(color.substring(0, 2), 16)\n const g = parseInt(color.substring(2, 4), 16)\n const b = parseInt(color.substring(4, 6), 16)\n return r * 0.299 + g * 0.587 + b * 0.114 > 186 ? DARK_COLOR : LIGHT_COLOR\n}\n","interface Lap {\n name?: string\n start: number\n end?: number\n absoluteStart: number\n absoluteEnd?: number\n duration?: number\n}\n\n/**\n * Stopwatch that supports named laps. Useful for instrumenting multi-stage\n * pipelines (e.g. URL fetch → summarize → LLM parse → geocode).\n */\nexport class StopwatchLapped {\n private name: string\n private startTime: number | undefined = undefined\n private endTime: number | undefined = undefined\n private _currentLap = 0\n private laps: Lap[] = []\n log: boolean\n\n constructor(name = \"Stopwatch\", log = true) {\n this.name = name\n this.log = log\n }\n\n get elapsed(): number {\n if (!this.startTime) throw new Error(\"Stopwatch not running\")\n if (this.endTime) return this.endTime - this.startTime\n return Date.now() - this.startTime\n }\n\n get currentLap(): number {\n return this._currentLap\n }\n\n private checkStopped(): void {\n if (this.endTime !== undefined) {\n throw new Error(\"Stopwatch already stopped. Start a new stopwatch\")\n }\n }\n\n private addLap(name: string, start: number, absoluteStart: number): void {\n this._currentLap++\n this.laps[this._currentLap] = {\n name,\n start,\n absoluteStart,\n }\n\n if (this.log) console.log(`${this.name}:\\tStarting ${name}`)\n }\n\n private completeLap(now: number): number {\n if (this.startTime === undefined) throw new Error(\"Stopwatch not running\")\n\n const currentLap = this.laps[this._currentLap]\n if (!currentLap) throw new Error(\"No current lap\")\n\n const duration = now - currentLap.absoluteStart\n const cumulative = now - this.startTime\n\n currentLap.absoluteEnd = now\n currentLap.end = cumulative\n currentLap.duration = duration\n\n if (this.log) {\n console.log(\n `${this.name}:\\t${currentLap.name} took ${duration}ms, total elapsed = ${cumulative}ms)`,\n )\n }\n\n return cumulative\n }\n\n start(firstLapName = \"Lap\"): this {\n this.checkStopped()\n if (this.startTime) throw new Error(\"Stopwatch already running\")\n\n const now = Date.now()\n this.startTime = now\n this._currentLap = 0\n\n if (this.log) console.log(`${this.name}: Starting`)\n\n this.addLap(firstLapName, 0, now)\n return this\n }\n\n lap(newLapName = \"Lap\"): this {\n this.checkStopped()\n if (this.startTime === undefined) throw new Error(\"Stopwatch not running\")\n\n const now = Date.now()\n const cumulative = this.completeLap(now)\n\n this.addLap(newLapName, cumulative, now)\n return this\n }\n\n stop(): this {\n this.checkStopped()\n if (this.startTime === undefined) throw new Error(\"Stopwatch not running\")\n\n const now = Date.now()\n const total = now - this.startTime\n\n this.completeLap(now)\n this.endTime = now\n\n if (this.log) console.log(`${this.name}: Completed in ${total}ms)`)\n\n return this\n }\n}\n\n/**\n * Minimal stopwatch for quick one-shot timing.\n */\nexport class Stopwatch {\n private name: string\n private startTime: number\n\n constructor(name: string) {\n this.name = name\n this.startTime = Date.now()\n }\n\n stop(): number {\n const now = Date.now()\n const elapsedTime = now - this.startTime\n console.log(`${this.name} took ${elapsedTime} ms`)\n this.startTime = now\n return elapsedTime\n }\n}\n","import type { Coordinates } from \"../types/schemas\"\nimport { randomIntBetween } from \"./number\"\n\n/**\n * Known lat/lng for major cities. Useful as default map centers, test\n * fixtures, and fallback coordinates.\n */\nexport const cities = {\n london: { lat: 51.5074, lng: -0.1278 },\n washingtonDC: { lat: 38.9072, lng: -77.0369 },\n newYorkCity: { lat: 40.7128, lng: -74.006 },\n losAngeles: { lat: 34.0522, lng: -118.2437 },\n tokyo: { lat: 35.6895, lng: 139.6917 },\n paris: { lat: 48.8566, lng: 2.3522 },\n sydney: { lat: -33.8688, lng: 151.2093 },\n saoPaulo: { lat: -23.5505, lng: -46.6333 },\n moscow: { lat: 55.7558, lng: 37.6173 },\n beijing: { lat: 39.9042, lng: 116.4074 },\n buenosAires: { lat: -34.6037, lng: -58.3816 },\n rome: { lat: 41.9028, lng: 12.4964 },\n sanFrancisco: { lat: 37.7749, lng: -122.4194 },\n mexicoCity: { lat: 19.4326, lng: -99.1332 },\n newDelhi: { lat: 28.6139, lng: 77.209 },\n toronto: { lat: 43.6532, lng: -79.3832 },\n berlin: { lat: 52.52, lng: 13.405 },\n shanghai: { lat: 31.2304, lng: 121.4737 },\n bangkok: { lat: 13.7563, lng: 100.5018 },\n rioDeJaneiro: { lat: -22.9068, lng: -43.1729 },\n singapore: { lat: 1.3521, lng: 103.8198 },\n istanbul: { lat: 41.0082, lng: 28.9784 },\n melbourne: { lat: -37.8136, lng: 144.9631 },\n frankfurt: { lat: 50.1109, lng: 8.6821 },\n johannesburg: { lat: -26.2041, lng: 28.0473 },\n madrid: { lat: 40.4168, lng: -3.7038 },\n kualaLumpur: { lat: 3.139, lng: 101.6869 },\n helsinki: { lat: 60.1699, lng: 24.9384 },\n copenhagen: { lat: 55.6761, lng: 12.5683 },\n budapest: { lat: 47.4979, lng: 19.0402 },\n ankara: { lat: 39.9334, lng: 32.8597 },\n cairo: { lat: 30.0444, lng: 31.2357 },\n osaka: { lat: 34.6937, lng: 135.5023 },\n athens: { lat: 37.9838, lng: 23.7275 },\n seoul: { lat: 37.5665, lng: 126.978 },\n jakarta: { lat: -6.2088, lng: 106.8456 },\n dubai: { lat: 25.276987, lng: 55.296249 },\n telAviv: { lat: 32.0853, lng: 34.7818 },\n mumbai: { lat: 19.075983, lng: 72.877655 },\n nairobi: { lat: -1.2921, lng: 36.8219 },\n casablanca: { lat: 33.5731, lng: -7.5898 },\n calgary: { lat: 51.0447, lng: -114.0719 },\n montreal: { lat: 45.5017, lng: -73.5673 },\n zagreb: { lat: 45.815, lng: 15.9819 },\n stockholm: { lat: 59.3293, lng: 18.0686 },\n brasilia: { lat: -15.8267, lng: -47.9218 },\n canberra: { lat: -35.282, lng: 149.1286 },\n amman: { lat: 30.5852, lng: 36.2384 },\n dublin: { lat: 53.3498, lng: -6.2603 },\n phoenix: { lat: 33.4484, lng: -112.074 },\n portLouis: { lat: -20.1609, lng: 57.5012 },\n riyadh: { lat: 24.7136, lng: 46.6753 },\n bucharest: { lat: 44.4268, lng: 26.1025 },\n vancouver: { lat: 49.2827, lng: -123.1207 },\n baghdad: { lat: 33.3128, lng: 44.3615 },\n cancun: { lat: 21.1619, lng: -86.8515 },\n denpasar: { lat: -8.4095, lng: 115.1889 },\n vientiane: { lat: 17.9714, lng: 102.6141 },\n pune: { lat: 18.5204, lng: 73.8567 },\n karachi: { lat: 24.8607, lng: 67.0011 },\n denver: { lat: 39.7392, lng: -104.9903 },\n} as const satisfies Record<string, Coordinates>\n\nexport type KnownCity = keyof typeof cities\n\nexport const randomLat = (): number => randomIntBetween(-90, 90)\nexport const randomLng = (): number => randomIntBetween(-180, 180)\n\n/**\n * Development-friendly coordinates (centered over central Europe) so seeded\n * data never lands in the ocean during local testing.\n */\nexport const randomLatDev = (): number => randomIntBetween(40, 50)\nexport const randomLngDev = (): number => randomIntBetween(-5, 5)\n\nexport const randomDevCoordinates = (): Coordinates => ({\n lat: randomLatDev(),\n lng: randomLngDev(),\n})\n"]}