@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.
- package/LICENSE +201 -0
- package/README.md +56 -0
- package/dist/ai/index.cjs +474 -0
- package/dist/ai/index.cjs.map +1 -0
- package/dist/ai/index.d.cts +117 -0
- package/dist/ai/index.d.ts +117 -0
- package/dist/ai/index.js +447 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/domain-CZ-L-ntu.d.ts +163 -0
- package/dist/domain-Dc1wSTkf.d.cts +163 -0
- package/dist/errors-Bw97z_4m.d.cts +12 -0
- package/dist/errors-Bw97z_4m.d.ts +12 -0
- package/dist/generate/index.cjs +222 -0
- package/dist/generate/index.cjs.map +1 -0
- package/dist/generate/index.d.cts +140 -0
- package/dist/generate/index.d.ts +140 -0
- package/dist/generate/index.js +220 -0
- package/dist/generate/index.js.map +1 -0
- package/dist/geocoding/index.cjs +90 -0
- package/dist/geocoding/index.cjs.map +1 -0
- package/dist/geocoding/index.d.cts +36 -0
- package/dist/geocoding/index.d.ts +36 -0
- package/dist/geocoding/index.js +86 -0
- package/dist/geocoding/index.js.map +1 -0
- package/dist/index.cjs +546 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +5 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +469 -0
- package/dist/index.js.map +1 -0
- package/dist/parser-CzXzpmVv.d.cts +111 -0
- package/dist/parser-N7-fNxeu.d.ts +111 -0
- package/dist/react/index.cjs +394 -0
- package/dist/react/index.cjs.map +1 -0
- package/dist/react/index.js +383 -0
- package/dist/react/index.js.map +1 -0
- package/dist/schemas-Dy5coqXo.d.cts +484 -0
- package/dist/schemas-Dy5coqXo.d.ts +484 -0
- package/dist/scrape/index.cjs +133 -0
- package/dist/scrape/index.cjs.map +1 -0
- package/dist/scrape/index.d.cts +60 -0
- package/dist/scrape/index.d.ts +60 -0
- package/dist/scrape/index.js +125 -0
- package/dist/scrape/index.js.map +1 -0
- package/dist/search/index.cjs +76 -0
- package/dist/search/index.cjs.map +1 -0
- package/dist/search/index.d.cts +75 -0
- package/dist/search/index.d.ts +75 -0
- package/dist/search/index.js +71 -0
- package/dist/search/index.js.map +1 -0
- package/dist/types/index.cjs +215 -0
- package/dist/types/index.cjs.map +1 -0
- package/dist/types/index.d.cts +4 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.js +171 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types-BhqKlq0k.d.ts +31 -0
- package/dist/types-rFjK5YcJ.d.cts +31 -0
- package/dist/utils/index.cjs +335 -0
- package/dist/utils/index.cjs.map +1 -0
- package/dist/utils/index.d.cts +363 -0
- package/dist/utils/index.d.ts +363 -0
- package/dist/utils/index.js +301 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +150 -0
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var zod = require('zod');
|
|
4
|
+
|
|
5
|
+
// src/types/schemas.ts
|
|
6
|
+
var llmProvider = zod.z.literal("openai");
|
|
7
|
+
var placeProvider = zod.z.union([zod.z.literal("google"), zod.z.literal("locationiq")]);
|
|
8
|
+
var generationSourceType = zod.z.union([
|
|
9
|
+
zod.z.literal("blank"),
|
|
10
|
+
zod.z.literal("autocomplete"),
|
|
11
|
+
zod.z.literal("url"),
|
|
12
|
+
zod.z.literal("text"),
|
|
13
|
+
zod.z.literal("list")
|
|
14
|
+
]);
|
|
15
|
+
var latitude = zod.z.coerce.number().min(-90, "Min latitude is -90").max(90, "Max latitude is 90");
|
|
16
|
+
var longitude = zod.z.coerce.number().min(-180, "Min longitude is -180").max(180, "Max longitude is 180");
|
|
17
|
+
var coordinates = zod.z.object({
|
|
18
|
+
lat: latitude,
|
|
19
|
+
lng: longitude
|
|
20
|
+
});
|
|
21
|
+
var placesFromUrl = zod.z.string().url({ message: "Invalid url" }).min(6).max(2048);
|
|
22
|
+
var placesFromList = zod.z.preprocess(
|
|
23
|
+
(v) => String(v).split("\n").map((line) => line.trim()).filter((line) => !!line).join("\n"),
|
|
24
|
+
zod.z.string().min(6, "Must be at least 6 characters").max(1e3, "List too long")
|
|
25
|
+
).refine(
|
|
26
|
+
(v) => !v.split("\n").find((line) => line.length < 2),
|
|
27
|
+
"All lines must be at least 2 characters"
|
|
28
|
+
);
|
|
29
|
+
var placesFromText = zod.z.string().min(6, "Must be at least 6 characters").max(2e3, "Over character limit");
|
|
30
|
+
var mapExternalId = zod.z.string().min(6).max(100);
|
|
31
|
+
var mapTitle = zod.z.string().min(3, { message: "Title must be at least 3 characters" }).max(100, { message: "Title must be at most 100 characters" });
|
|
32
|
+
var mapDescription = zod.z.string().max(1e3, { message: "Limit is 1000 characters" });
|
|
33
|
+
var mapCreationQuery = zod.z.string().min(10, "Minimum 10 characters for search").max(200, "Maximum 200 characters");
|
|
34
|
+
var groupName = zod.z.string().min(3, { message: "Name must be at least 3 characters" }).max(200, { message: "Name must be at most 200 characters" });
|
|
35
|
+
var groupDescription = zod.z.string().max(400, { message: "Limit is 400 characters" });
|
|
36
|
+
var groupColor = zod.z.string().startsWith("#").length(7);
|
|
37
|
+
var placeName = zod.z.string().min(2, { message: "Name must be at least 2 characters" }).max(200, { message: "Name must be at most 200 characters" });
|
|
38
|
+
var placeDescription = zod.z.string().max(400, { message: "Limit is 400 characters" });
|
|
39
|
+
var createMapBase = zod.z.object({
|
|
40
|
+
title: mapTitle.optional(),
|
|
41
|
+
description: mapDescription.optional(),
|
|
42
|
+
externalId: mapExternalId.optional()
|
|
43
|
+
});
|
|
44
|
+
var createMapSchema = createMapBase.extend({
|
|
45
|
+
sourceType: generationSourceType,
|
|
46
|
+
source: zod.z.string().optional()
|
|
47
|
+
});
|
|
48
|
+
var createBlankMapSchema = createMapBase;
|
|
49
|
+
var createMapFromUrlSchema = createMapBase.extend({
|
|
50
|
+
url: placesFromUrl
|
|
51
|
+
});
|
|
52
|
+
var createMapFromListSchema = createMapBase.extend({
|
|
53
|
+
list: placesFromList
|
|
54
|
+
});
|
|
55
|
+
var createMapFromTextSchema = createMapBase.extend({
|
|
56
|
+
text: placesFromText
|
|
57
|
+
});
|
|
58
|
+
var createMapFromQueryOrUrlSchema = createMapBase.extend({
|
|
59
|
+
queryOrUrl: zod.z.union([mapCreationQuery, placesFromUrl])
|
|
60
|
+
});
|
|
61
|
+
var addPlacesBaseSchema = zod.z.object({
|
|
62
|
+
sourceType: generationSourceType,
|
|
63
|
+
source: zod.z.string()
|
|
64
|
+
});
|
|
65
|
+
var addPlacesFromSourceSchema = addPlacesBaseSchema.extend({
|
|
66
|
+
mapId: zod.z.string(),
|
|
67
|
+
groupId: zod.z.string().optional()
|
|
68
|
+
});
|
|
69
|
+
var addPlacesFromUrlSchema = zod.z.object({
|
|
70
|
+
url: placesFromUrl
|
|
71
|
+
});
|
|
72
|
+
var addPlacesFromListSchema = zod.z.object({
|
|
73
|
+
list: placesFromList
|
|
74
|
+
});
|
|
75
|
+
var addPlacesFromTextSchema = zod.z.object({
|
|
76
|
+
text: placesFromText
|
|
77
|
+
});
|
|
78
|
+
var providerAutocompletePlace = zod.z.object({
|
|
79
|
+
query: zod.z.string(),
|
|
80
|
+
provider: zod.z.literal("google"),
|
|
81
|
+
providerId: zod.z.string(),
|
|
82
|
+
name: zod.z.string(),
|
|
83
|
+
description: zod.z.string().optional(),
|
|
84
|
+
address: zod.z.string(),
|
|
85
|
+
lat: zod.z.number().min(-90).max(90),
|
|
86
|
+
lng: zod.z.number().min(-180).max(180)
|
|
87
|
+
});
|
|
88
|
+
var addPlacesFromClientAutocompleteSchema = providerAutocompletePlace.extend({
|
|
89
|
+
mapId: zod.z.string(),
|
|
90
|
+
groupId: zod.z.string().optional()
|
|
91
|
+
});
|
|
92
|
+
var updateMapSchema = zod.z.object({
|
|
93
|
+
title: mapTitle,
|
|
94
|
+
description: mapDescription.optional(),
|
|
95
|
+
userPublic: zod.z.boolean().optional(),
|
|
96
|
+
partnerPublic: zod.z.boolean().optional(),
|
|
97
|
+
url: zod.z.string().url().nullable().optional()
|
|
98
|
+
});
|
|
99
|
+
var reorderMapSchema = zod.z.object({
|
|
100
|
+
groups: zod.z.array(
|
|
101
|
+
zod.z.object({
|
|
102
|
+
id: zod.z.string().uuid().nullable(),
|
|
103
|
+
position: zod.z.number()
|
|
104
|
+
})
|
|
105
|
+
),
|
|
106
|
+
places: zod.z.array(
|
|
107
|
+
zod.z.object({
|
|
108
|
+
id: zod.z.string(),
|
|
109
|
+
groupId: zod.z.string().uuid().nullable(),
|
|
110
|
+
position: zod.z.number()
|
|
111
|
+
})
|
|
112
|
+
)
|
|
113
|
+
});
|
|
114
|
+
var updatePlaceFormSchema = zod.z.object({
|
|
115
|
+
id: zod.z.string(),
|
|
116
|
+
name: placeName,
|
|
117
|
+
description: placeDescription.optional(),
|
|
118
|
+
hidden: zod.z.boolean()
|
|
119
|
+
});
|
|
120
|
+
var searchSchema = zod.z.object({
|
|
121
|
+
query: mapCreationQuery
|
|
122
|
+
});
|
|
123
|
+
var createGroupSchema = zod.z.object({
|
|
124
|
+
name: groupName,
|
|
125
|
+
description: groupDescription.optional(),
|
|
126
|
+
parentGroupId: zod.z.string().optional(),
|
|
127
|
+
color: groupColor.optional()
|
|
128
|
+
});
|
|
129
|
+
var editGroupSchema = zod.z.object({
|
|
130
|
+
id: zod.z.string().uuid(),
|
|
131
|
+
color: groupColor.nullable(),
|
|
132
|
+
hidden: zod.z.boolean(),
|
|
133
|
+
name: groupName,
|
|
134
|
+
description: groupDescription.optional()
|
|
135
|
+
});
|
|
136
|
+
var placeMeta = zod.z.object({
|
|
137
|
+
id: zod.z.string(),
|
|
138
|
+
updatedAt: zod.z.coerce.date(),
|
|
139
|
+
groupId: zod.z.string().nullable(),
|
|
140
|
+
position: zod.z.number().nullable(),
|
|
141
|
+
error: zod.z.string().nullable(),
|
|
142
|
+
lat: zod.z.number().nullable(),
|
|
143
|
+
lon: zod.z.number().nullable(),
|
|
144
|
+
name: zod.z.string().nullable()
|
|
145
|
+
});
|
|
146
|
+
var positionedPlaceMeta = placeMeta.extend({
|
|
147
|
+
position: zod.z.number()
|
|
148
|
+
});
|
|
149
|
+
var mappablePlaceMeta = placeMeta.extend({
|
|
150
|
+
lat: zod.z.number(),
|
|
151
|
+
lon: zod.z.number(),
|
|
152
|
+
error: zod.z.null()
|
|
153
|
+
});
|
|
154
|
+
function getMappablePlaceMetas(places) {
|
|
155
|
+
const good = [];
|
|
156
|
+
for (const p of places) {
|
|
157
|
+
const parsed = mappablePlaceMeta.safeParse(p);
|
|
158
|
+
if (parsed.success) good.push(parsed.data);
|
|
159
|
+
}
|
|
160
|
+
return good;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// src/types/errors.ts
|
|
164
|
+
var MapthisError = class extends Error {
|
|
165
|
+
constructor(message, options) {
|
|
166
|
+
super(message, options);
|
|
167
|
+
this.name = "MapthisError";
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
exports.MapthisError = MapthisError;
|
|
172
|
+
exports.addPlacesBaseSchema = addPlacesBaseSchema;
|
|
173
|
+
exports.addPlacesFromClientAutocompleteSchema = addPlacesFromClientAutocompleteSchema;
|
|
174
|
+
exports.addPlacesFromListSchema = addPlacesFromListSchema;
|
|
175
|
+
exports.addPlacesFromSourceSchema = addPlacesFromSourceSchema;
|
|
176
|
+
exports.addPlacesFromTextSchema = addPlacesFromTextSchema;
|
|
177
|
+
exports.addPlacesFromUrlSchema = addPlacesFromUrlSchema;
|
|
178
|
+
exports.coordinates = coordinates;
|
|
179
|
+
exports.createBlankMapSchema = createBlankMapSchema;
|
|
180
|
+
exports.createGroupSchema = createGroupSchema;
|
|
181
|
+
exports.createMapBase = createMapBase;
|
|
182
|
+
exports.createMapFromListSchema = createMapFromListSchema;
|
|
183
|
+
exports.createMapFromQueryOrUrlSchema = createMapFromQueryOrUrlSchema;
|
|
184
|
+
exports.createMapFromTextSchema = createMapFromTextSchema;
|
|
185
|
+
exports.createMapFromUrlSchema = createMapFromUrlSchema;
|
|
186
|
+
exports.createMapSchema = createMapSchema;
|
|
187
|
+
exports.editGroupSchema = editGroupSchema;
|
|
188
|
+
exports.generationSourceType = generationSourceType;
|
|
189
|
+
exports.getMappablePlaceMetas = getMappablePlaceMetas;
|
|
190
|
+
exports.groupColor = groupColor;
|
|
191
|
+
exports.groupDescription = groupDescription;
|
|
192
|
+
exports.groupName = groupName;
|
|
193
|
+
exports.latitude = latitude;
|
|
194
|
+
exports.llmProvider = llmProvider;
|
|
195
|
+
exports.longitude = longitude;
|
|
196
|
+
exports.mapCreationQuery = mapCreationQuery;
|
|
197
|
+
exports.mapDescription = mapDescription;
|
|
198
|
+
exports.mapExternalId = mapExternalId;
|
|
199
|
+
exports.mapTitle = mapTitle;
|
|
200
|
+
exports.mappablePlaceMeta = mappablePlaceMeta;
|
|
201
|
+
exports.placeDescription = placeDescription;
|
|
202
|
+
exports.placeMeta = placeMeta;
|
|
203
|
+
exports.placeName = placeName;
|
|
204
|
+
exports.placeProvider = placeProvider;
|
|
205
|
+
exports.placesFromList = placesFromList;
|
|
206
|
+
exports.placesFromText = placesFromText;
|
|
207
|
+
exports.placesFromUrl = placesFromUrl;
|
|
208
|
+
exports.positionedPlaceMeta = positionedPlaceMeta;
|
|
209
|
+
exports.providerAutocompletePlace = providerAutocompletePlace;
|
|
210
|
+
exports.reorderMapSchema = reorderMapSchema;
|
|
211
|
+
exports.searchSchema = searchSchema;
|
|
212
|
+
exports.updateMapSchema = updateMapSchema;
|
|
213
|
+
exports.updatePlaceFormSchema = updatePlaceFormSchema;
|
|
214
|
+
//# sourceMappingURL=index.cjs.map
|
|
215
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/types/schemas.ts","../../src/types/errors.ts"],"names":["z"],"mappings":"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","file":"index.cjs","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"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { C as Coordinates, G as GenerationSourceType, L as LlmProvider, M as MappablePlaceMeta, P as PlaceMeta, a as PlaceProvider, b as PositionedPlaceMeta, c as ProviderAutocompletePlace, d as addPlacesBaseSchema, e as addPlacesFromClientAutocompleteSchema, f as addPlacesFromListSchema, g as addPlacesFromSourceSchema, h as addPlacesFromTextSchema, i as addPlacesFromUrlSchema, j as coordinates, k as createBlankMapSchema, l as createGroupSchema, m as createMapBase, n as createMapFromListSchema, o as createMapFromQueryOrUrlSchema, p as createMapFromTextSchema, q as createMapFromUrlSchema, r as createMapSchema, s as editGroupSchema, t as generationSourceType, u as getMappablePlaceMetas, v as groupColor, w as groupDescription, x as groupName, y as latitude, z as llmProvider, A as longitude, B as mapCreationQuery, D as mapDescription, E as mapExternalId, F as mapTitle, H as mappablePlaceMeta, I as placeDescription, J as placeMeta, K as placeName, N as placeProvider, O as placesFromList, Q as placesFromText, R as placesFromUrl, S as positionedPlaceMeta, T as providerAutocompletePlace, U as reorderMapSchema, V as searchSchema, W as updateMapSchema, X as updatePlaceFormSchema } from '../schemas-Dy5coqXo.cjs';
|
|
2
|
+
export { A as Audited, D as DefaultPlaceMap, P as ParsedLocation, a as ParsedLocations, b as Partner, c as PartnerUrl, d as PartnerUser, e as PartnerUserRole, f as Place, g as PlaceGroup, h as PlaceMap, i as PlaceQueryResult, j as PopulatedPlaceMap, k as PositionedPlaceGroup, T as Timestamped } from '../domain-Dc1wSTkf.cjs';
|
|
3
|
+
export { M as MapthisError } from '../errors-Bw97z_4m.cjs';
|
|
4
|
+
import 'zod';
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { C as Coordinates, G as GenerationSourceType, L as LlmProvider, M as MappablePlaceMeta, P as PlaceMeta, a as PlaceProvider, b as PositionedPlaceMeta, c as ProviderAutocompletePlace, d as addPlacesBaseSchema, e as addPlacesFromClientAutocompleteSchema, f as addPlacesFromListSchema, g as addPlacesFromSourceSchema, h as addPlacesFromTextSchema, i as addPlacesFromUrlSchema, j as coordinates, k as createBlankMapSchema, l as createGroupSchema, m as createMapBase, n as createMapFromListSchema, o as createMapFromQueryOrUrlSchema, p as createMapFromTextSchema, q as createMapFromUrlSchema, r as createMapSchema, s as editGroupSchema, t as generationSourceType, u as getMappablePlaceMetas, v as groupColor, w as groupDescription, x as groupName, y as latitude, z as llmProvider, A as longitude, B as mapCreationQuery, D as mapDescription, E as mapExternalId, F as mapTitle, H as mappablePlaceMeta, I as placeDescription, J as placeMeta, K as placeName, N as placeProvider, O as placesFromList, Q as placesFromText, R as placesFromUrl, S as positionedPlaceMeta, T as providerAutocompletePlace, U as reorderMapSchema, V as searchSchema, W as updateMapSchema, X as updatePlaceFormSchema } from '../schemas-Dy5coqXo.js';
|
|
2
|
+
export { A as Audited, D as DefaultPlaceMap, P as ParsedLocation, a as ParsedLocations, b as Partner, c as PartnerUrl, d as PartnerUser, e as PartnerUserRole, f as Place, g as PlaceGroup, h as PlaceMap, i as PlaceQueryResult, j as PopulatedPlaceMap, k as PositionedPlaceGroup, T as Timestamped } from '../domain-CZ-L-ntu.js';
|
|
3
|
+
export { M as MapthisError } from '../errors-Bw97z_4m.js';
|
|
4
|
+
import 'zod';
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
// src/types/schemas.ts
|
|
4
|
+
var llmProvider = z.literal("openai");
|
|
5
|
+
var placeProvider = z.union([z.literal("google"), z.literal("locationiq")]);
|
|
6
|
+
var generationSourceType = z.union([
|
|
7
|
+
z.literal("blank"),
|
|
8
|
+
z.literal("autocomplete"),
|
|
9
|
+
z.literal("url"),
|
|
10
|
+
z.literal("text"),
|
|
11
|
+
z.literal("list")
|
|
12
|
+
]);
|
|
13
|
+
var latitude = z.coerce.number().min(-90, "Min latitude is -90").max(90, "Max latitude is 90");
|
|
14
|
+
var longitude = z.coerce.number().min(-180, "Min longitude is -180").max(180, "Max longitude is 180");
|
|
15
|
+
var coordinates = z.object({
|
|
16
|
+
lat: latitude,
|
|
17
|
+
lng: longitude
|
|
18
|
+
});
|
|
19
|
+
var placesFromUrl = z.string().url({ message: "Invalid url" }).min(6).max(2048);
|
|
20
|
+
var placesFromList = z.preprocess(
|
|
21
|
+
(v) => String(v).split("\n").map((line) => line.trim()).filter((line) => !!line).join("\n"),
|
|
22
|
+
z.string().min(6, "Must be at least 6 characters").max(1e3, "List too long")
|
|
23
|
+
).refine(
|
|
24
|
+
(v) => !v.split("\n").find((line) => line.length < 2),
|
|
25
|
+
"All lines must be at least 2 characters"
|
|
26
|
+
);
|
|
27
|
+
var placesFromText = z.string().min(6, "Must be at least 6 characters").max(2e3, "Over character limit");
|
|
28
|
+
var mapExternalId = z.string().min(6).max(100);
|
|
29
|
+
var mapTitle = z.string().min(3, { message: "Title must be at least 3 characters" }).max(100, { message: "Title must be at most 100 characters" });
|
|
30
|
+
var mapDescription = z.string().max(1e3, { message: "Limit is 1000 characters" });
|
|
31
|
+
var mapCreationQuery = z.string().min(10, "Minimum 10 characters for search").max(200, "Maximum 200 characters");
|
|
32
|
+
var groupName = z.string().min(3, { message: "Name must be at least 3 characters" }).max(200, { message: "Name must be at most 200 characters" });
|
|
33
|
+
var groupDescription = z.string().max(400, { message: "Limit is 400 characters" });
|
|
34
|
+
var groupColor = z.string().startsWith("#").length(7);
|
|
35
|
+
var placeName = z.string().min(2, { message: "Name must be at least 2 characters" }).max(200, { message: "Name must be at most 200 characters" });
|
|
36
|
+
var placeDescription = z.string().max(400, { message: "Limit is 400 characters" });
|
|
37
|
+
var createMapBase = z.object({
|
|
38
|
+
title: mapTitle.optional(),
|
|
39
|
+
description: mapDescription.optional(),
|
|
40
|
+
externalId: mapExternalId.optional()
|
|
41
|
+
});
|
|
42
|
+
var createMapSchema = createMapBase.extend({
|
|
43
|
+
sourceType: generationSourceType,
|
|
44
|
+
source: z.string().optional()
|
|
45
|
+
});
|
|
46
|
+
var createBlankMapSchema = createMapBase;
|
|
47
|
+
var createMapFromUrlSchema = createMapBase.extend({
|
|
48
|
+
url: placesFromUrl
|
|
49
|
+
});
|
|
50
|
+
var createMapFromListSchema = createMapBase.extend({
|
|
51
|
+
list: placesFromList
|
|
52
|
+
});
|
|
53
|
+
var createMapFromTextSchema = createMapBase.extend({
|
|
54
|
+
text: placesFromText
|
|
55
|
+
});
|
|
56
|
+
var createMapFromQueryOrUrlSchema = createMapBase.extend({
|
|
57
|
+
queryOrUrl: z.union([mapCreationQuery, placesFromUrl])
|
|
58
|
+
});
|
|
59
|
+
var addPlacesBaseSchema = z.object({
|
|
60
|
+
sourceType: generationSourceType,
|
|
61
|
+
source: z.string()
|
|
62
|
+
});
|
|
63
|
+
var addPlacesFromSourceSchema = addPlacesBaseSchema.extend({
|
|
64
|
+
mapId: z.string(),
|
|
65
|
+
groupId: z.string().optional()
|
|
66
|
+
});
|
|
67
|
+
var addPlacesFromUrlSchema = z.object({
|
|
68
|
+
url: placesFromUrl
|
|
69
|
+
});
|
|
70
|
+
var addPlacesFromListSchema = z.object({
|
|
71
|
+
list: placesFromList
|
|
72
|
+
});
|
|
73
|
+
var addPlacesFromTextSchema = z.object({
|
|
74
|
+
text: placesFromText
|
|
75
|
+
});
|
|
76
|
+
var providerAutocompletePlace = z.object({
|
|
77
|
+
query: z.string(),
|
|
78
|
+
provider: z.literal("google"),
|
|
79
|
+
providerId: z.string(),
|
|
80
|
+
name: z.string(),
|
|
81
|
+
description: z.string().optional(),
|
|
82
|
+
address: z.string(),
|
|
83
|
+
lat: z.number().min(-90).max(90),
|
|
84
|
+
lng: z.number().min(-180).max(180)
|
|
85
|
+
});
|
|
86
|
+
var addPlacesFromClientAutocompleteSchema = providerAutocompletePlace.extend({
|
|
87
|
+
mapId: z.string(),
|
|
88
|
+
groupId: z.string().optional()
|
|
89
|
+
});
|
|
90
|
+
var updateMapSchema = z.object({
|
|
91
|
+
title: mapTitle,
|
|
92
|
+
description: mapDescription.optional(),
|
|
93
|
+
userPublic: z.boolean().optional(),
|
|
94
|
+
partnerPublic: z.boolean().optional(),
|
|
95
|
+
url: z.string().url().nullable().optional()
|
|
96
|
+
});
|
|
97
|
+
var reorderMapSchema = z.object({
|
|
98
|
+
groups: z.array(
|
|
99
|
+
z.object({
|
|
100
|
+
id: z.string().uuid().nullable(),
|
|
101
|
+
position: z.number()
|
|
102
|
+
})
|
|
103
|
+
),
|
|
104
|
+
places: z.array(
|
|
105
|
+
z.object({
|
|
106
|
+
id: z.string(),
|
|
107
|
+
groupId: z.string().uuid().nullable(),
|
|
108
|
+
position: z.number()
|
|
109
|
+
})
|
|
110
|
+
)
|
|
111
|
+
});
|
|
112
|
+
var updatePlaceFormSchema = z.object({
|
|
113
|
+
id: z.string(),
|
|
114
|
+
name: placeName,
|
|
115
|
+
description: placeDescription.optional(),
|
|
116
|
+
hidden: z.boolean()
|
|
117
|
+
});
|
|
118
|
+
var searchSchema = z.object({
|
|
119
|
+
query: mapCreationQuery
|
|
120
|
+
});
|
|
121
|
+
var createGroupSchema = z.object({
|
|
122
|
+
name: groupName,
|
|
123
|
+
description: groupDescription.optional(),
|
|
124
|
+
parentGroupId: z.string().optional(),
|
|
125
|
+
color: groupColor.optional()
|
|
126
|
+
});
|
|
127
|
+
var editGroupSchema = z.object({
|
|
128
|
+
id: z.string().uuid(),
|
|
129
|
+
color: groupColor.nullable(),
|
|
130
|
+
hidden: z.boolean(),
|
|
131
|
+
name: groupName,
|
|
132
|
+
description: groupDescription.optional()
|
|
133
|
+
});
|
|
134
|
+
var placeMeta = z.object({
|
|
135
|
+
id: z.string(),
|
|
136
|
+
updatedAt: z.coerce.date(),
|
|
137
|
+
groupId: z.string().nullable(),
|
|
138
|
+
position: z.number().nullable(),
|
|
139
|
+
error: z.string().nullable(),
|
|
140
|
+
lat: z.number().nullable(),
|
|
141
|
+
lon: z.number().nullable(),
|
|
142
|
+
name: z.string().nullable()
|
|
143
|
+
});
|
|
144
|
+
var positionedPlaceMeta = placeMeta.extend({
|
|
145
|
+
position: z.number()
|
|
146
|
+
});
|
|
147
|
+
var mappablePlaceMeta = placeMeta.extend({
|
|
148
|
+
lat: z.number(),
|
|
149
|
+
lon: z.number(),
|
|
150
|
+
error: z.null()
|
|
151
|
+
});
|
|
152
|
+
function getMappablePlaceMetas(places) {
|
|
153
|
+
const good = [];
|
|
154
|
+
for (const p of places) {
|
|
155
|
+
const parsed = mappablePlaceMeta.safeParse(p);
|
|
156
|
+
if (parsed.success) good.push(parsed.data);
|
|
157
|
+
}
|
|
158
|
+
return good;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// src/types/errors.ts
|
|
162
|
+
var MapthisError = class extends Error {
|
|
163
|
+
constructor(message, options) {
|
|
164
|
+
super(message, options);
|
|
165
|
+
this.name = "MapthisError";
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
export { MapthisError, addPlacesBaseSchema, addPlacesFromClientAutocompleteSchema, addPlacesFromListSchema, addPlacesFromSourceSchema, addPlacesFromTextSchema, addPlacesFromUrlSchema, coordinates, createBlankMapSchema, createGroupSchema, createMapBase, createMapFromListSchema, createMapFromQueryOrUrlSchema, createMapFromTextSchema, createMapFromUrlSchema, createMapSchema, editGroupSchema, generationSourceType, getMappablePlaceMetas, groupColor, groupDescription, groupName, latitude, llmProvider, longitude, mapCreationQuery, mapDescription, mapExternalId, mapTitle, mappablePlaceMeta, placeDescription, placeMeta, placeName, placeProvider, placesFromList, placesFromText, placesFromUrl, positionedPlaceMeta, providerAutocompletePlace, reorderMapSchema, searchSchema, updateMapSchema, updatePlaceFormSchema };
|
|
170
|
+
//# sourceMappingURL=index.js.map
|
|
171
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/types/schemas.ts","../../src/types/errors.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"]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { P as ParsedLocation, i as PlaceQueryResult } from './domain-CZ-L-ntu.js';
|
|
2
|
+
import { a as PlaceProvider } from './schemas-Dy5coqXo.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Abstract geocoding provider. Implementations translate a
|
|
6
|
+
* {@link ParsedLocation} (address string with optional description) into a
|
|
7
|
+
* {@link PlaceQueryResult} carrying normalized name, address, coordinates,
|
|
8
|
+
* and provider-specific ID.
|
|
9
|
+
*
|
|
10
|
+
* Providers never throw on per-input failures — they resolve with a result
|
|
11
|
+
* whose `data` is null and `error` is a short string code. This makes batch
|
|
12
|
+
* calls via {@link GeocodingProvider.geocodeMany} forgiving: one bad address
|
|
13
|
+
* does not fail the whole batch.
|
|
14
|
+
*/
|
|
15
|
+
interface GeocodingProvider {
|
|
16
|
+
readonly name: PlaceProvider;
|
|
17
|
+
geocode(input: ParsedLocation): Promise<PlaceQueryResult>;
|
|
18
|
+
geocodeMany(inputs: ParsedLocation[]): Promise<PlaceQueryResult[]>;
|
|
19
|
+
}
|
|
20
|
+
interface GoogleGeocoderConfig {
|
|
21
|
+
provider: "google";
|
|
22
|
+
/** Google Maps API key with Places API enabled. */
|
|
23
|
+
apiKey: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Discriminated union of all supported geocoder configurations. New
|
|
27
|
+
* providers (e.g. LocationIQ) will add their own variant here.
|
|
28
|
+
*/
|
|
29
|
+
type GeocoderConfig = GoogleGeocoderConfig;
|
|
30
|
+
|
|
31
|
+
export type { GeocodingProvider as G, GeocoderConfig as a, GoogleGeocoderConfig as b };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { P as ParsedLocation, i as PlaceQueryResult } from './domain-Dc1wSTkf.cjs';
|
|
2
|
+
import { a as PlaceProvider } from './schemas-Dy5coqXo.cjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Abstract geocoding provider. Implementations translate a
|
|
6
|
+
* {@link ParsedLocation} (address string with optional description) into a
|
|
7
|
+
* {@link PlaceQueryResult} carrying normalized name, address, coordinates,
|
|
8
|
+
* and provider-specific ID.
|
|
9
|
+
*
|
|
10
|
+
* Providers never throw on per-input failures — they resolve with a result
|
|
11
|
+
* whose `data` is null and `error` is a short string code. This makes batch
|
|
12
|
+
* calls via {@link GeocodingProvider.geocodeMany} forgiving: one bad address
|
|
13
|
+
* does not fail the whole batch.
|
|
14
|
+
*/
|
|
15
|
+
interface GeocodingProvider {
|
|
16
|
+
readonly name: PlaceProvider;
|
|
17
|
+
geocode(input: ParsedLocation): Promise<PlaceQueryResult>;
|
|
18
|
+
geocodeMany(inputs: ParsedLocation[]): Promise<PlaceQueryResult[]>;
|
|
19
|
+
}
|
|
20
|
+
interface GoogleGeocoderConfig {
|
|
21
|
+
provider: "google";
|
|
22
|
+
/** Google Maps API key with Places API enabled. */
|
|
23
|
+
apiKey: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Discriminated union of all supported geocoder configurations. New
|
|
27
|
+
* providers (e.g. LocationIQ) will add their own variant here.
|
|
28
|
+
*/
|
|
29
|
+
type GeocoderConfig = GoogleGeocoderConfig;
|
|
30
|
+
|
|
31
|
+
export type { GeocodingProvider as G, GeocoderConfig as a, GoogleGeocoderConfig as b };
|