@dromney/mapthis 0.1.0 → 0.2.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.
- package/README.md +108 -27
- package/dist/ai/index.cjs +105 -1
- package/dist/ai/index.cjs.map +1 -1
- package/dist/ai/index.d.cts +9 -9
- package/dist/ai/index.d.ts +9 -9
- package/dist/ai/index.js +101 -2
- package/dist/ai/index.js.map +1 -1
- package/dist/{domain-Dc1wSTkf.d.cts → domain-CL4ro2YW.d.cts} +1 -1
- package/dist/{domain-CZ-L-ntu.d.ts → domain-Dh8cPBVp.d.ts} +1 -1
- package/dist/generate/index.cjs +1 -1
- package/dist/generate/index.cjs.map +1 -1
- package/dist/generate/index.d.cts +4 -4
- package/dist/generate/index.d.ts +4 -4
- package/dist/generate/index.js +1 -1
- package/dist/generate/index.js.map +1 -1
- package/dist/geocoding/index.d.cts +3 -3
- package/dist/geocoding/index.d.ts +3 -3
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/parser-CrG1A6dD.d.ts +176 -0
- package/dist/parser-DsIwIsHK.d.cts +176 -0
- package/dist/react/index.d.cts +197 -0
- package/dist/react/index.d.ts +197 -0
- package/dist/{schemas-Dy5coqXo.d.cts → schemas-CZao45EU.d.cts} +1 -1
- package/dist/{schemas-Dy5coqXo.d.ts → schemas-CZao45EU.d.ts} +1 -1
- package/dist/types/index.cjs +1 -1
- package/dist/types/index.cjs.map +1 -1
- package/dist/types/index.d.cts +2 -2
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.js +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/{types-BhqKlq0k.d.ts → types-BhPqZwOj.d.ts} +2 -2
- package/dist/{types-rFjK5YcJ.d.cts → types-C-xqh9Sh.d.cts} +2 -2
- package/dist/utils/index.d.cts +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/package.json +10 -6
- package/dist/parser-CzXzpmVv.d.cts +0 -111
- package/dist/parser-N7-fNxeu.d.ts +0 -111
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types/schemas.ts","../src/types/errors.ts","../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.js","sourcesContent":["import { z } from \"zod\"\n\n/**\n * Runtime validation schemas and their inferred types.\n *\n * These schemas define the public contract between producers and consumers of\n * mapthis data. They are intentionally framework-agnostic — no Prisma, no\n * Next.js, no auth assumptions.\n */\n\n// --- Providers & source types ------------------------------------------------\n\nexport const llmProvider = z.literal(\"openai\") // TODO: add other LLM support\nexport type LlmProvider = z.infer<typeof llmProvider>\n\nexport const placeProvider = z.union([z.literal(\"google\"), z.literal(\"locationiq\")])\nexport type PlaceProvider = z.infer<typeof placeProvider>\n\nexport const generationSourceType = z.union([\n z.literal(\"blank\"),\n z.literal(\"autocomplete\"),\n z.literal(\"url\"),\n z.literal(\"text\"),\n z.literal(\"list\"),\n])\nexport type GenerationSourceType = z.infer<typeof generationSourceType>\n\n// --- Geographic primitives ---------------------------------------------------\n\nexport const latitude = z.coerce.number().min(-90, \"Min latitude is -90\").max(90, \"Max latitude is 90\")\nexport const longitude = z.coerce.number().min(-180, \"Min longitude is -180\").max(180, \"Max longitude is 180\")\n\nexport const coordinates = z.object({\n lat: latitude,\n lng: longitude,\n})\nexport type Coordinates = z.infer<typeof coordinates>\n\n// --- Input schemas (freeform sources) ----------------------------------------\n\nexport const placesFromUrl = z.string().url({ message: \"Invalid url\" }).min(6).max(2048)\n\nexport const placesFromList = z\n .preprocess(\n (v) =>\n String(v)\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => !!line)\n .join(\"\\n\"),\n z.string().min(6, \"Must be at least 6 characters\").max(1000, \"List too long\"),\n )\n .refine(\n (v) => !v.split(\"\\n\").find((line) => line.length < 2),\n \"All lines must be at least 2 characters\",\n )\n\nexport const placesFromText = z\n .string()\n .min(6, \"Must be at least 6 characters\")\n .max(2000, \"Over character limit\")\n\n// --- Map field schemas -------------------------------------------------------\n\nexport const mapExternalId = z.string().min(6).max(100)\nexport const mapTitle = z\n .string()\n .min(3, { message: \"Title must be at least 3 characters\" })\n .max(100, { message: \"Title must be at most 100 characters\" })\nexport const mapDescription = z.string().max(1000, { message: \"Limit is 1000 characters\" })\nexport const mapCreationQuery = z\n .string()\n .min(10, \"Minimum 10 characters for search\")\n .max(200, \"Maximum 200 characters\")\n\n// --- Group field schemas -----------------------------------------------------\n\nexport const groupName = z\n .string()\n .min(3, { message: \"Name must be at least 3 characters\" })\n .max(200, { message: \"Name must be at most 200 characters\" })\nexport const groupDescription = z.string().max(400, { message: \"Limit is 400 characters\" })\nexport const groupColor = z.string().startsWith(\"#\").length(7)\n\n// --- Place field schemas -----------------------------------------------------\n\nexport const placeName = z\n .string()\n .min(2, { message: \"Name must be at least 2 characters\" })\n .max(200, { message: \"Name must be at most 200 characters\" })\nexport const placeDescription = z.string().max(400, { message: \"Limit is 400 characters\" })\n\n// --- Map creation composites -------------------------------------------------\n\nexport const createMapBase = z.object({\n title: mapTitle.optional(),\n description: mapDescription.optional(),\n externalId: mapExternalId.optional(),\n})\n\nexport const createMapSchema = createMapBase.extend({\n sourceType: generationSourceType,\n source: z.string().optional(),\n})\n\nexport const createBlankMapSchema = createMapBase\n\nexport const createMapFromUrlSchema = createMapBase.extend({\n url: placesFromUrl,\n})\nexport const createMapFromListSchema = createMapBase.extend({\n list: placesFromList,\n})\nexport const createMapFromTextSchema = createMapBase.extend({\n text: placesFromText,\n})\nexport const createMapFromQueryOrUrlSchema = createMapBase.extend({\n queryOrUrl: z.union([mapCreationQuery, placesFromUrl]),\n})\n\n// --- Adding places -----------------------------------------------------------\n\nexport const addPlacesBaseSchema = z.object({\n sourceType: generationSourceType,\n source: z.string(),\n})\n\nexport const addPlacesFromSourceSchema = addPlacesBaseSchema.extend({\n mapId: z.string(),\n groupId: z.string().optional(),\n})\n\nexport const addPlacesFromUrlSchema = z.object({\n url: placesFromUrl,\n})\nexport const addPlacesFromListSchema = z.object({\n list: placesFromList,\n})\nexport const addPlacesFromTextSchema = z.object({\n text: placesFromText,\n})\n\nexport const providerAutocompletePlace = z.object({\n query: z.string(),\n provider: z.literal(\"google\"),\n providerId: z.string(),\n name: z.string(),\n description: z.string().optional(),\n address: z.string(),\n lat: z.number().min(-90).max(90),\n lng: z.number().min(-180).max(180),\n})\nexport type ProviderAutocompletePlace = z.infer<typeof providerAutocompletePlace>\n\nexport const addPlacesFromClientAutocompleteSchema = providerAutocompletePlace.extend({\n mapId: z.string(),\n groupId: z.string().optional(),\n})\n\n// --- Updates -----------------------------------------------------------------\n\nexport const updateMapSchema = z.object({\n title: mapTitle,\n description: mapDescription.optional(),\n userPublic: z.boolean().optional(),\n partnerPublic: z.boolean().optional(),\n url: z.string().url().nullable().optional(),\n})\n\nexport const reorderMapSchema = z.object({\n groups: z.array(\n z.object({\n id: z.string().uuid().nullable(),\n position: z.number(),\n }),\n ),\n places: z.array(\n z.object({\n id: z.string(),\n groupId: z.string().uuid().nullable(),\n position: z.number(),\n }),\n ),\n})\n\nexport const updatePlaceFormSchema = z.object({\n id: z.string(),\n name: placeName,\n description: placeDescription.optional(),\n hidden: z.boolean(),\n})\n\nexport const searchSchema = z.object({\n query: mapCreationQuery,\n})\n\nexport const createGroupSchema = z.object({\n name: groupName,\n description: groupDescription.optional(),\n parentGroupId: z.string().optional(),\n color: groupColor.optional(),\n})\n\nexport const editGroupSchema = z.object({\n id: z.string().uuid(),\n color: groupColor.nullable(),\n hidden: z.boolean(),\n name: groupName,\n description: groupDescription.optional(),\n})\n\n// --- Place metadata (lightweight projections) --------------------------------\n\nexport const placeMeta = z.object({\n id: z.string(),\n updatedAt: z.coerce.date(),\n groupId: z.string().nullable(),\n position: z.number().nullable(),\n error: z.string().nullable(),\n lat: z.number().nullable(),\n lon: z.number().nullable(),\n name: z.string().nullable(),\n})\nexport type PlaceMeta = z.infer<typeof placeMeta>\n\nexport const positionedPlaceMeta = placeMeta.extend({\n position: z.number(),\n})\nexport type PositionedPlaceMeta = z.infer<typeof positionedPlaceMeta>\n\nexport const mappablePlaceMeta = placeMeta.extend({\n lat: z.number(),\n lon: z.number(),\n error: z.null(),\n})\nexport type MappablePlaceMeta = z.infer<typeof mappablePlaceMeta>\n\n/**\n * Filter a list of place projections down to those that are mappable\n * (have coordinates and no error).\n */\nexport function getMappablePlaceMetas(\n places: (PlaceMeta | null | undefined)[],\n): MappablePlaceMeta[] {\n const good: MappablePlaceMeta[] = []\n for (const p of places) {\n const parsed = mappablePlaceMeta.safeParse(p)\n if (parsed.success) good.push(parsed.data)\n }\n return good\n}\n","/**\n * Base error class for every error thrown by the mapthis package.\n *\n * All feature-specific error classes (scrape, search, ai, geocoding) extend\n * this, so consumers can do `catch (e) { if (e instanceof MapthisError) ... }`\n * to distinguish library errors from other exceptions.\n */\nexport class MapthisError extends Error {\n constructor(message?: string, options?: ErrorOptions) {\n super(message, options)\n this.name = \"MapthisError\"\n }\n}\n","/**\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"]}
|
|
1
|
+
{"version":3,"sources":["../src/types/schemas.ts","../src/types/errors.ts","../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.js","sourcesContent":["import { z } from \"zod\"\n\n/**\n * Runtime validation schemas and their inferred types.\n *\n * These schemas define the public contract between producers and consumers of\n * mapthis data. They are intentionally framework-agnostic — no Prisma, no\n * Next.js, no auth assumptions.\n */\n\n// --- Providers & source types ------------------------------------------------\n\nexport const llmProvider = z.union([z.literal(\"openai\"), z.literal(\"anthropic\")])\nexport type LlmProvider = z.infer<typeof llmProvider>\n\nexport const placeProvider = z.union([z.literal(\"google\"), z.literal(\"locationiq\")])\nexport type PlaceProvider = z.infer<typeof placeProvider>\n\nexport const generationSourceType = z.union([\n z.literal(\"blank\"),\n z.literal(\"autocomplete\"),\n z.literal(\"url\"),\n z.literal(\"text\"),\n z.literal(\"list\"),\n])\nexport type GenerationSourceType = z.infer<typeof generationSourceType>\n\n// --- Geographic primitives ---------------------------------------------------\n\nexport const latitude = z.coerce.number().min(-90, \"Min latitude is -90\").max(90, \"Max latitude is 90\")\nexport const longitude = z.coerce.number().min(-180, \"Min longitude is -180\").max(180, \"Max longitude is 180\")\n\nexport const coordinates = z.object({\n lat: latitude,\n lng: longitude,\n})\nexport type Coordinates = z.infer<typeof coordinates>\n\n// --- Input schemas (freeform sources) ----------------------------------------\n\nexport const placesFromUrl = z.string().url({ message: \"Invalid url\" }).min(6).max(2048)\n\nexport const placesFromList = z\n .preprocess(\n (v) =>\n String(v)\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => !!line)\n .join(\"\\n\"),\n z.string().min(6, \"Must be at least 6 characters\").max(1000, \"List too long\"),\n )\n .refine(\n (v) => !v.split(\"\\n\").find((line) => line.length < 2),\n \"All lines must be at least 2 characters\",\n )\n\nexport const placesFromText = z\n .string()\n .min(6, \"Must be at least 6 characters\")\n .max(2000, \"Over character limit\")\n\n// --- Map field schemas -------------------------------------------------------\n\nexport const mapExternalId = z.string().min(6).max(100)\nexport const mapTitle = z\n .string()\n .min(3, { message: \"Title must be at least 3 characters\" })\n .max(100, { message: \"Title must be at most 100 characters\" })\nexport const mapDescription = z.string().max(1000, { message: \"Limit is 1000 characters\" })\nexport const mapCreationQuery = z\n .string()\n .min(10, \"Minimum 10 characters for search\")\n .max(200, \"Maximum 200 characters\")\n\n// --- Group field schemas -----------------------------------------------------\n\nexport const groupName = z\n .string()\n .min(3, { message: \"Name must be at least 3 characters\" })\n .max(200, { message: \"Name must be at most 200 characters\" })\nexport const groupDescription = z.string().max(400, { message: \"Limit is 400 characters\" })\nexport const groupColor = z.string().startsWith(\"#\").length(7)\n\n// --- Place field schemas -----------------------------------------------------\n\nexport const placeName = z\n .string()\n .min(2, { message: \"Name must be at least 2 characters\" })\n .max(200, { message: \"Name must be at most 200 characters\" })\nexport const placeDescription = z.string().max(400, { message: \"Limit is 400 characters\" })\n\n// --- Map creation composites -------------------------------------------------\n\nexport const createMapBase = z.object({\n title: mapTitle.optional(),\n description: mapDescription.optional(),\n externalId: mapExternalId.optional(),\n})\n\nexport const createMapSchema = createMapBase.extend({\n sourceType: generationSourceType,\n source: z.string().optional(),\n})\n\nexport const createBlankMapSchema = createMapBase\n\nexport const createMapFromUrlSchema = createMapBase.extend({\n url: placesFromUrl,\n})\nexport const createMapFromListSchema = createMapBase.extend({\n list: placesFromList,\n})\nexport const createMapFromTextSchema = createMapBase.extend({\n text: placesFromText,\n})\nexport const createMapFromQueryOrUrlSchema = createMapBase.extend({\n queryOrUrl: z.union([mapCreationQuery, placesFromUrl]),\n})\n\n// --- Adding places -----------------------------------------------------------\n\nexport const addPlacesBaseSchema = z.object({\n sourceType: generationSourceType,\n source: z.string(),\n})\n\nexport const addPlacesFromSourceSchema = addPlacesBaseSchema.extend({\n mapId: z.string(),\n groupId: z.string().optional(),\n})\n\nexport const addPlacesFromUrlSchema = z.object({\n url: placesFromUrl,\n})\nexport const addPlacesFromListSchema = z.object({\n list: placesFromList,\n})\nexport const addPlacesFromTextSchema = z.object({\n text: placesFromText,\n})\n\nexport const providerAutocompletePlace = z.object({\n query: z.string(),\n provider: z.literal(\"google\"),\n providerId: z.string(),\n name: z.string(),\n description: z.string().optional(),\n address: z.string(),\n lat: z.number().min(-90).max(90),\n lng: z.number().min(-180).max(180),\n})\nexport type ProviderAutocompletePlace = z.infer<typeof providerAutocompletePlace>\n\nexport const addPlacesFromClientAutocompleteSchema = providerAutocompletePlace.extend({\n mapId: z.string(),\n groupId: z.string().optional(),\n})\n\n// --- Updates -----------------------------------------------------------------\n\nexport const updateMapSchema = z.object({\n title: mapTitle,\n description: mapDescription.optional(),\n userPublic: z.boolean().optional(),\n partnerPublic: z.boolean().optional(),\n url: z.string().url().nullable().optional(),\n})\n\nexport const reorderMapSchema = z.object({\n groups: z.array(\n z.object({\n id: z.string().uuid().nullable(),\n position: z.number(),\n }),\n ),\n places: z.array(\n z.object({\n id: z.string(),\n groupId: z.string().uuid().nullable(),\n position: z.number(),\n }),\n ),\n})\n\nexport const updatePlaceFormSchema = z.object({\n id: z.string(),\n name: placeName,\n description: placeDescription.optional(),\n hidden: z.boolean(),\n})\n\nexport const searchSchema = z.object({\n query: mapCreationQuery,\n})\n\nexport const createGroupSchema = z.object({\n name: groupName,\n description: groupDescription.optional(),\n parentGroupId: z.string().optional(),\n color: groupColor.optional(),\n})\n\nexport const editGroupSchema = z.object({\n id: z.string().uuid(),\n color: groupColor.nullable(),\n hidden: z.boolean(),\n name: groupName,\n description: groupDescription.optional(),\n})\n\n// --- Place metadata (lightweight projections) --------------------------------\n\nexport const placeMeta = z.object({\n id: z.string(),\n updatedAt: z.coerce.date(),\n groupId: z.string().nullable(),\n position: z.number().nullable(),\n error: z.string().nullable(),\n lat: z.number().nullable(),\n lon: z.number().nullable(),\n name: z.string().nullable(),\n})\nexport type PlaceMeta = z.infer<typeof placeMeta>\n\nexport const positionedPlaceMeta = placeMeta.extend({\n position: z.number(),\n})\nexport type PositionedPlaceMeta = z.infer<typeof positionedPlaceMeta>\n\nexport const mappablePlaceMeta = placeMeta.extend({\n lat: z.number(),\n lon: z.number(),\n error: z.null(),\n})\nexport type MappablePlaceMeta = z.infer<typeof mappablePlaceMeta>\n\n/**\n * Filter a list of place projections down to those that are mappable\n * (have coordinates and no error).\n */\nexport function getMappablePlaceMetas(\n places: (PlaceMeta | null | undefined)[],\n): MappablePlaceMeta[] {\n const good: MappablePlaceMeta[] = []\n for (const p of places) {\n const parsed = mappablePlaceMeta.safeParse(p)\n if (parsed.success) good.push(parsed.data)\n }\n return good\n}\n","/**\n * Base error class for every error thrown by the mapthis package.\n *\n * All feature-specific error classes (scrape, search, ai, geocoding) extend\n * this, so consumers can do `catch (e) { if (e instanceof MapthisError) ... }`\n * to distinguish library errors from other exceptions.\n */\nexport class MapthisError extends Error {\n constructor(message?: string, options?: ErrorOptions) {\n super(message, options)\n this.name = \"MapthisError\"\n }\n}\n","/**\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"]}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { JSONSchema7Object } from 'json-schema';
|
|
2
|
+
import { a as ParsedLocations } from './domain-Dh8cPBVp.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Generic LLM output envelope with token accounting.
|
|
6
|
+
*/
|
|
7
|
+
interface OpenAIOutput<T> {
|
|
8
|
+
output: T;
|
|
9
|
+
inputTokens: number;
|
|
10
|
+
outputTokens: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Request shape for a function-calling JSON completion.
|
|
14
|
+
*/
|
|
15
|
+
interface GenericAIJsonRequest {
|
|
16
|
+
schema: JSONSchema7Object;
|
|
17
|
+
systemMessage: string;
|
|
18
|
+
userMessage: string;
|
|
19
|
+
functionName: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Result of summarizing a text blob prior to a final extraction call.
|
|
23
|
+
*/
|
|
24
|
+
interface SummarizedText {
|
|
25
|
+
text: string;
|
|
26
|
+
textTokens: number;
|
|
27
|
+
summarized: string;
|
|
28
|
+
summarizedTokens: number;
|
|
29
|
+
chunks: number;
|
|
30
|
+
inputTokens: number;
|
|
31
|
+
outputTokens: number;
|
|
32
|
+
summarizePromptVersion: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Result of parsing locations from any source. Includes full token
|
|
36
|
+
* accounting so callers can bill usage to their own users.
|
|
37
|
+
*/
|
|
38
|
+
interface GetLocationsResponse {
|
|
39
|
+
output: ParsedLocations;
|
|
40
|
+
textTokens: number;
|
|
41
|
+
summarizedTokens: number;
|
|
42
|
+
summaryInputTokens: number;
|
|
43
|
+
summaryOutputTokens: number;
|
|
44
|
+
locationInputTokens: number;
|
|
45
|
+
locationOutputTokens: number;
|
|
46
|
+
inputTokens: number;
|
|
47
|
+
outputTokens: number;
|
|
48
|
+
summaryPromptVersion: string;
|
|
49
|
+
locationPromptVersion: string;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Provider-agnostic LLM backend interface used by the summarizer and
|
|
54
|
+
* location parser. Implementations include {@link createOpenAiBackend} and
|
|
55
|
+
* {@link createAnthropicBackend}; consumers can also supply their own (e.g.
|
|
56
|
+
* an Azure OpenAI gateway, a Bedrock adapter, a deterministic fake for
|
|
57
|
+
* tests) as long as they satisfy this shape.
|
|
58
|
+
*
|
|
59
|
+
* Instances are produced by factory functions so API keys and model choices
|
|
60
|
+
* live in consumer code, never in module-level state.
|
|
61
|
+
*/
|
|
62
|
+
interface LlmBackend {
|
|
63
|
+
readonly model: string;
|
|
64
|
+
readonly tokenLimit: number;
|
|
65
|
+
countTokens(text: string): number;
|
|
66
|
+
chatCompletion(content: string): Promise<OpenAIOutput<string>>;
|
|
67
|
+
chatFunctionJson<T>(systemMessage: string, userMessage: string, schema: JSONSchema7Object, functionName: string): Promise<OpenAIOutput<T>>;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
declare const DEFAULT_MODEL = "gpt-4o-mini";
|
|
71
|
+
declare const DEFAULT_TOKEN_LIMIT = 128000;
|
|
72
|
+
/**
|
|
73
|
+
* @deprecated Use {@link LlmBackend} instead. Kept as an alias so existing
|
|
74
|
+
* consumers that import `OpenAiBackend` keep compiling.
|
|
75
|
+
*/
|
|
76
|
+
type OpenAiBackend = LlmBackend;
|
|
77
|
+
interface OpenAiBackendConfig {
|
|
78
|
+
/** OpenAI API key. Passed directly to the SDK. */
|
|
79
|
+
apiKey: string;
|
|
80
|
+
/** Model name passed to the completions API. Defaults to `gpt-4o-mini`. */
|
|
81
|
+
model?: string;
|
|
82
|
+
/** Context-window budget used by the summarizer. Defaults to 128k. */
|
|
83
|
+
tokenLimit?: number;
|
|
84
|
+
/**
|
|
85
|
+
* Optional base URL for the OpenAI API. Use this to route through an
|
|
86
|
+
* OpenAI-compatible gateway (Azure, Together, etc.).
|
|
87
|
+
*/
|
|
88
|
+
baseURL?: string;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Construct an {@link LlmBackend} bound to a specific OpenAI API key and model.
|
|
92
|
+
*/
|
|
93
|
+
declare function createOpenAiBackend(config: OpenAiBackendConfig): LlmBackend;
|
|
94
|
+
|
|
95
|
+
declare const DEFAULT_ANTHROPIC_MODEL = "claude-haiku-4-5-20251001";
|
|
96
|
+
declare const DEFAULT_ANTHROPIC_TOKEN_LIMIT = 200000;
|
|
97
|
+
declare const DEFAULT_ANTHROPIC_MAX_OUTPUT_TOKENS = 4096;
|
|
98
|
+
interface AnthropicBackendConfig {
|
|
99
|
+
/** Anthropic API key. Passed directly to the SDK. */
|
|
100
|
+
apiKey: string;
|
|
101
|
+
/** Model name. Defaults to {@link DEFAULT_ANTHROPIC_MODEL}. */
|
|
102
|
+
model?: string;
|
|
103
|
+
/** Context-window budget used by the summarizer. Defaults to 200k. */
|
|
104
|
+
tokenLimit?: number;
|
|
105
|
+
/** Optional override for max_tokens on each request. Defaults to 4096. */
|
|
106
|
+
maxOutputTokens?: number;
|
|
107
|
+
/**
|
|
108
|
+
* Optional base URL for an Anthropic-compatible gateway (Bedrock, Vertex
|
|
109
|
+
* proxy, etc.).
|
|
110
|
+
*/
|
|
111
|
+
baseURL?: string;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Construct an {@link LlmBackend} backed by Anthropic's Messages API. Use this
|
|
115
|
+
* when wiring up {@link createLocationParser} or as a drop-in replacement for
|
|
116
|
+
* {@link createOpenAiBackend} in any consumer that holds the interface.
|
|
117
|
+
*/
|
|
118
|
+
declare function createAnthropicBackend(config: AnthropicBackendConfig): LlmBackend;
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* A configured location-extraction pipeline. Hold onto one of these for the
|
|
122
|
+
* lifetime of your app — it wraps an LLM client and a tiktoken encoder.
|
|
123
|
+
*/
|
|
124
|
+
interface LocationParser {
|
|
125
|
+
parseLocationsFromText(text: string): Promise<GetLocationsResponse>;
|
|
126
|
+
parseLocationsFromHtml(html: string): Promise<GetLocationsResponse>;
|
|
127
|
+
parseLocationsFromUrl(url: string): Promise<GetLocationsResponse>;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Configuration for {@link createLocationParser}.
|
|
131
|
+
*
|
|
132
|
+
* - `{ provider: "openai", apiKey, ... }` — uses OpenAI's chat completions API
|
|
133
|
+
* with function-calling for structured output (default if omitted).
|
|
134
|
+
* - `{ provider: "anthropic", apiKey, ... }` — uses Anthropic's Messages API
|
|
135
|
+
* with tool-use for structured output.
|
|
136
|
+
* - `{ backend }` — pass any object satisfying {@link LlmBackend} directly,
|
|
137
|
+
* useful for testing or for adapters that aren't bundled here.
|
|
138
|
+
*
|
|
139
|
+
* For backwards compatibility a bare {@link OpenAiBackendConfig} (no
|
|
140
|
+
* `provider` field) is treated as `{ provider: "openai", ... }`.
|
|
141
|
+
*/
|
|
142
|
+
type LocationParserConfig = ({
|
|
143
|
+
provider?: "openai";
|
|
144
|
+
} & OpenAiBackendConfig) | ({
|
|
145
|
+
provider: "anthropic";
|
|
146
|
+
} & AnthropicBackendConfig) | {
|
|
147
|
+
backend: LlmBackend;
|
|
148
|
+
};
|
|
149
|
+
/**
|
|
150
|
+
* Create a {@link LocationParser} bound to an LLM backend.
|
|
151
|
+
*
|
|
152
|
+
* @example OpenAI (default)
|
|
153
|
+
* ```ts
|
|
154
|
+
* const parser = createLocationParser({
|
|
155
|
+
* apiKey: process.env.OPENAI_API_KEY!,
|
|
156
|
+
* model: "gpt-4o-mini",
|
|
157
|
+
* })
|
|
158
|
+
* ```
|
|
159
|
+
*
|
|
160
|
+
* @example Anthropic
|
|
161
|
+
* ```ts
|
|
162
|
+
* const parser = createLocationParser({
|
|
163
|
+
* provider: "anthropic",
|
|
164
|
+
* apiKey: process.env.ANTHROPIC_API_KEY!,
|
|
165
|
+
* model: "claude-haiku-4-5-20251001",
|
|
166
|
+
* })
|
|
167
|
+
* ```
|
|
168
|
+
*
|
|
169
|
+
* @example Bring-your-own backend
|
|
170
|
+
* ```ts
|
|
171
|
+
* const parser = createLocationParser({ backend: myCustomBackend })
|
|
172
|
+
* ```
|
|
173
|
+
*/
|
|
174
|
+
declare function createLocationParser(config: LocationParserConfig): LocationParser;
|
|
175
|
+
|
|
176
|
+
export { type AnthropicBackendConfig as A, DEFAULT_ANTHROPIC_MAX_OUTPUT_TOKENS as D, type GetLocationsResponse as G, type LocationParser as L, type OpenAIOutput as O, type SummarizedText as S, type LlmBackend as a, DEFAULT_ANTHROPIC_MODEL as b, DEFAULT_ANTHROPIC_TOKEN_LIMIT as c, DEFAULT_MODEL as d, DEFAULT_TOKEN_LIMIT as e, type GenericAIJsonRequest as f, type LocationParserConfig as g, type OpenAiBackend as h, type OpenAiBackendConfig as i, createAnthropicBackend as j, createLocationParser as k, createOpenAiBackend as l };
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { JSONSchema7Object } from 'json-schema';
|
|
2
|
+
import { a as ParsedLocations } from './domain-CL4ro2YW.cjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Generic LLM output envelope with token accounting.
|
|
6
|
+
*/
|
|
7
|
+
interface OpenAIOutput<T> {
|
|
8
|
+
output: T;
|
|
9
|
+
inputTokens: number;
|
|
10
|
+
outputTokens: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Request shape for a function-calling JSON completion.
|
|
14
|
+
*/
|
|
15
|
+
interface GenericAIJsonRequest {
|
|
16
|
+
schema: JSONSchema7Object;
|
|
17
|
+
systemMessage: string;
|
|
18
|
+
userMessage: string;
|
|
19
|
+
functionName: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Result of summarizing a text blob prior to a final extraction call.
|
|
23
|
+
*/
|
|
24
|
+
interface SummarizedText {
|
|
25
|
+
text: string;
|
|
26
|
+
textTokens: number;
|
|
27
|
+
summarized: string;
|
|
28
|
+
summarizedTokens: number;
|
|
29
|
+
chunks: number;
|
|
30
|
+
inputTokens: number;
|
|
31
|
+
outputTokens: number;
|
|
32
|
+
summarizePromptVersion: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Result of parsing locations from any source. Includes full token
|
|
36
|
+
* accounting so callers can bill usage to their own users.
|
|
37
|
+
*/
|
|
38
|
+
interface GetLocationsResponse {
|
|
39
|
+
output: ParsedLocations;
|
|
40
|
+
textTokens: number;
|
|
41
|
+
summarizedTokens: number;
|
|
42
|
+
summaryInputTokens: number;
|
|
43
|
+
summaryOutputTokens: number;
|
|
44
|
+
locationInputTokens: number;
|
|
45
|
+
locationOutputTokens: number;
|
|
46
|
+
inputTokens: number;
|
|
47
|
+
outputTokens: number;
|
|
48
|
+
summaryPromptVersion: string;
|
|
49
|
+
locationPromptVersion: string;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Provider-agnostic LLM backend interface used by the summarizer and
|
|
54
|
+
* location parser. Implementations include {@link createOpenAiBackend} and
|
|
55
|
+
* {@link createAnthropicBackend}; consumers can also supply their own (e.g.
|
|
56
|
+
* an Azure OpenAI gateway, a Bedrock adapter, a deterministic fake for
|
|
57
|
+
* tests) as long as they satisfy this shape.
|
|
58
|
+
*
|
|
59
|
+
* Instances are produced by factory functions so API keys and model choices
|
|
60
|
+
* live in consumer code, never in module-level state.
|
|
61
|
+
*/
|
|
62
|
+
interface LlmBackend {
|
|
63
|
+
readonly model: string;
|
|
64
|
+
readonly tokenLimit: number;
|
|
65
|
+
countTokens(text: string): number;
|
|
66
|
+
chatCompletion(content: string): Promise<OpenAIOutput<string>>;
|
|
67
|
+
chatFunctionJson<T>(systemMessage: string, userMessage: string, schema: JSONSchema7Object, functionName: string): Promise<OpenAIOutput<T>>;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
declare const DEFAULT_MODEL = "gpt-4o-mini";
|
|
71
|
+
declare const DEFAULT_TOKEN_LIMIT = 128000;
|
|
72
|
+
/**
|
|
73
|
+
* @deprecated Use {@link LlmBackend} instead. Kept as an alias so existing
|
|
74
|
+
* consumers that import `OpenAiBackend` keep compiling.
|
|
75
|
+
*/
|
|
76
|
+
type OpenAiBackend = LlmBackend;
|
|
77
|
+
interface OpenAiBackendConfig {
|
|
78
|
+
/** OpenAI API key. Passed directly to the SDK. */
|
|
79
|
+
apiKey: string;
|
|
80
|
+
/** Model name passed to the completions API. Defaults to `gpt-4o-mini`. */
|
|
81
|
+
model?: string;
|
|
82
|
+
/** Context-window budget used by the summarizer. Defaults to 128k. */
|
|
83
|
+
tokenLimit?: number;
|
|
84
|
+
/**
|
|
85
|
+
* Optional base URL for the OpenAI API. Use this to route through an
|
|
86
|
+
* OpenAI-compatible gateway (Azure, Together, etc.).
|
|
87
|
+
*/
|
|
88
|
+
baseURL?: string;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Construct an {@link LlmBackend} bound to a specific OpenAI API key and model.
|
|
92
|
+
*/
|
|
93
|
+
declare function createOpenAiBackend(config: OpenAiBackendConfig): LlmBackend;
|
|
94
|
+
|
|
95
|
+
declare const DEFAULT_ANTHROPIC_MODEL = "claude-haiku-4-5-20251001";
|
|
96
|
+
declare const DEFAULT_ANTHROPIC_TOKEN_LIMIT = 200000;
|
|
97
|
+
declare const DEFAULT_ANTHROPIC_MAX_OUTPUT_TOKENS = 4096;
|
|
98
|
+
interface AnthropicBackendConfig {
|
|
99
|
+
/** Anthropic API key. Passed directly to the SDK. */
|
|
100
|
+
apiKey: string;
|
|
101
|
+
/** Model name. Defaults to {@link DEFAULT_ANTHROPIC_MODEL}. */
|
|
102
|
+
model?: string;
|
|
103
|
+
/** Context-window budget used by the summarizer. Defaults to 200k. */
|
|
104
|
+
tokenLimit?: number;
|
|
105
|
+
/** Optional override for max_tokens on each request. Defaults to 4096. */
|
|
106
|
+
maxOutputTokens?: number;
|
|
107
|
+
/**
|
|
108
|
+
* Optional base URL for an Anthropic-compatible gateway (Bedrock, Vertex
|
|
109
|
+
* proxy, etc.).
|
|
110
|
+
*/
|
|
111
|
+
baseURL?: string;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Construct an {@link LlmBackend} backed by Anthropic's Messages API. Use this
|
|
115
|
+
* when wiring up {@link createLocationParser} or as a drop-in replacement for
|
|
116
|
+
* {@link createOpenAiBackend} in any consumer that holds the interface.
|
|
117
|
+
*/
|
|
118
|
+
declare function createAnthropicBackend(config: AnthropicBackendConfig): LlmBackend;
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* A configured location-extraction pipeline. Hold onto one of these for the
|
|
122
|
+
* lifetime of your app — it wraps an LLM client and a tiktoken encoder.
|
|
123
|
+
*/
|
|
124
|
+
interface LocationParser {
|
|
125
|
+
parseLocationsFromText(text: string): Promise<GetLocationsResponse>;
|
|
126
|
+
parseLocationsFromHtml(html: string): Promise<GetLocationsResponse>;
|
|
127
|
+
parseLocationsFromUrl(url: string): Promise<GetLocationsResponse>;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Configuration for {@link createLocationParser}.
|
|
131
|
+
*
|
|
132
|
+
* - `{ provider: "openai", apiKey, ... }` — uses OpenAI's chat completions API
|
|
133
|
+
* with function-calling for structured output (default if omitted).
|
|
134
|
+
* - `{ provider: "anthropic", apiKey, ... }` — uses Anthropic's Messages API
|
|
135
|
+
* with tool-use for structured output.
|
|
136
|
+
* - `{ backend }` — pass any object satisfying {@link LlmBackend} directly,
|
|
137
|
+
* useful for testing or for adapters that aren't bundled here.
|
|
138
|
+
*
|
|
139
|
+
* For backwards compatibility a bare {@link OpenAiBackendConfig} (no
|
|
140
|
+
* `provider` field) is treated as `{ provider: "openai", ... }`.
|
|
141
|
+
*/
|
|
142
|
+
type LocationParserConfig = ({
|
|
143
|
+
provider?: "openai";
|
|
144
|
+
} & OpenAiBackendConfig) | ({
|
|
145
|
+
provider: "anthropic";
|
|
146
|
+
} & AnthropicBackendConfig) | {
|
|
147
|
+
backend: LlmBackend;
|
|
148
|
+
};
|
|
149
|
+
/**
|
|
150
|
+
* Create a {@link LocationParser} bound to an LLM backend.
|
|
151
|
+
*
|
|
152
|
+
* @example OpenAI (default)
|
|
153
|
+
* ```ts
|
|
154
|
+
* const parser = createLocationParser({
|
|
155
|
+
* apiKey: process.env.OPENAI_API_KEY!,
|
|
156
|
+
* model: "gpt-4o-mini",
|
|
157
|
+
* })
|
|
158
|
+
* ```
|
|
159
|
+
*
|
|
160
|
+
* @example Anthropic
|
|
161
|
+
* ```ts
|
|
162
|
+
* const parser = createLocationParser({
|
|
163
|
+
* provider: "anthropic",
|
|
164
|
+
* apiKey: process.env.ANTHROPIC_API_KEY!,
|
|
165
|
+
* model: "claude-haiku-4-5-20251001",
|
|
166
|
+
* })
|
|
167
|
+
* ```
|
|
168
|
+
*
|
|
169
|
+
* @example Bring-your-own backend
|
|
170
|
+
* ```ts
|
|
171
|
+
* const parser = createLocationParser({ backend: myCustomBackend })
|
|
172
|
+
* ```
|
|
173
|
+
*/
|
|
174
|
+
declare function createLocationParser(config: LocationParserConfig): LocationParser;
|
|
175
|
+
|
|
176
|
+
export { type AnthropicBackendConfig as A, DEFAULT_ANTHROPIC_MAX_OUTPUT_TOKENS as D, type GetLocationsResponse as G, type LocationParser as L, type OpenAIOutput as O, type SummarizedText as S, type LlmBackend as a, DEFAULT_ANTHROPIC_MODEL as b, DEFAULT_ANTHROPIC_TOKEN_LIMIT as c, DEFAULT_MODEL as d, DEFAULT_TOKEN_LIMIT as e, type GenericAIJsonRequest as f, type LocationParserConfig as g, type OpenAiBackend as h, type OpenAiBackendConfig as i, createAnthropicBackend as j, createLocationParser as k, createOpenAiBackend as l };
|