@bhushanpawar/sqldb 1.0.8 → 1.0.9
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/dist/client.d.ts.map +1 -1
- package/dist/client.js +18 -1
- package/dist/client.js.map +1 -1
- package/dist/query/operations.d.ts +37 -2
- package/dist/query/operations.d.ts.map +1 -1
- package/dist/query/operations.js +55 -2
- package/dist/query/operations.js.map +1 -1
- package/dist/search/geo-search-manager.d.ts +89 -0
- package/dist/search/geo-search-manager.d.ts.map +1 -0
- package/dist/search/geo-search-manager.js +695 -0
- package/dist/search/geo-search-manager.js.map +1 -0
- package/dist/search/geo-utils.d.ts +59 -0
- package/dist/search/geo-utils.d.ts.map +1 -0
- package/dist/search/geo-utils.js +265 -0
- package/dist/search/geo-utils.js.map +1 -0
- package/dist/search/location-normalizer.d.ts +79 -0
- package/dist/search/location-normalizer.d.ts.map +1 -0
- package/dist/search/location-normalizer.js +308 -0
- package/dist/search/location-normalizer.js.map +1 -0
- package/dist/types/geo-search.d.ts +146 -0
- package/dist/types/geo-search.d.ts.map +1 -0
- package/dist/types/geo-search.js +118 -0
- package/dist/types/geo-search.js.map +1 -0
- package/dist/types/query.d.ts +17 -0
- package/dist/types/query.d.ts.map +1 -1
- package/dist/types/search.d.ts +30 -0
- package/dist/types/search.d.ts.map +1 -1
- package/dist/types/search.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Location normalization for handling city name variations, aliases, and canonical forms
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.INTERNATIONAL_CITY_ALIASES = exports.US_CITY_ALIASES = exports.LocationNormalizer = void 0;
|
|
7
|
+
const geo_search_1 = require("../types/geo-search");
|
|
8
|
+
class LocationNormalizer {
|
|
9
|
+
constructor(buckets = geo_search_1.MAJOR_CITY_BUCKETS, customMappings = []) {
|
|
10
|
+
this.normalizationMap = new Map();
|
|
11
|
+
this.aliasMap = new Map(); // alias -> canonical
|
|
12
|
+
this.buckets = buckets;
|
|
13
|
+
this.buildNormalizationMaps(customMappings);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Build normalization maps from buckets and custom mappings
|
|
17
|
+
*/
|
|
18
|
+
buildNormalizationMaps(customMappings) {
|
|
19
|
+
// Add bucket-based normalizations
|
|
20
|
+
for (const bucket of this.buckets) {
|
|
21
|
+
const bucketName = bucket.name || bucket.locationName || bucket.id;
|
|
22
|
+
const normalized = {
|
|
23
|
+
original: bucketName,
|
|
24
|
+
canonical: bucketName,
|
|
25
|
+
coordinates: bucket.center,
|
|
26
|
+
bucketId: bucket.id,
|
|
27
|
+
aliases: bucket.aliases || [],
|
|
28
|
+
};
|
|
29
|
+
// Map canonical name
|
|
30
|
+
this.normalizationMap.set(this.normalizeString(bucketName), normalized);
|
|
31
|
+
// Map all aliases
|
|
32
|
+
if (bucket.aliases) {
|
|
33
|
+
for (const alias of bucket.aliases) {
|
|
34
|
+
this.aliasMap.set(this.normalizeString(alias), bucketName);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Add custom mappings (override bucket mappings if conflicts)
|
|
39
|
+
for (const mapping of customMappings) {
|
|
40
|
+
const key = this.normalizeString(mapping.original);
|
|
41
|
+
this.normalizationMap.set(key, mapping);
|
|
42
|
+
// Map canonical
|
|
43
|
+
this.aliasMap.set(key, mapping.canonical);
|
|
44
|
+
// Map aliases
|
|
45
|
+
if (mapping.aliases) {
|
|
46
|
+
for (const alias of mapping.aliases) {
|
|
47
|
+
this.aliasMap.set(this.normalizeString(alias), mapping.canonical);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Normalize a location string to canonical form
|
|
54
|
+
*/
|
|
55
|
+
normalize(location) {
|
|
56
|
+
if (!location || typeof location !== 'string') {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
const normalized = this.normalizeString(location);
|
|
60
|
+
// Check direct match
|
|
61
|
+
const direct = this.normalizationMap.get(normalized);
|
|
62
|
+
if (direct) {
|
|
63
|
+
return direct;
|
|
64
|
+
}
|
|
65
|
+
// Check alias match
|
|
66
|
+
const canonical = this.aliasMap.get(normalized);
|
|
67
|
+
if (canonical) {
|
|
68
|
+
const canonicalNorm = this.normalizationMap.get(this.normalizeString(canonical));
|
|
69
|
+
if (canonicalNorm) {
|
|
70
|
+
return {
|
|
71
|
+
...canonicalNorm,
|
|
72
|
+
original: location, // Preserve original input
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Try fuzzy matching for common misspellings
|
|
77
|
+
const fuzzyMatch = this.fuzzyMatch(normalized);
|
|
78
|
+
if (fuzzyMatch) {
|
|
79
|
+
return {
|
|
80
|
+
...fuzzyMatch,
|
|
81
|
+
original: location,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
// Return as-is if no normalization found
|
|
85
|
+
return {
|
|
86
|
+
original: location,
|
|
87
|
+
canonical: location,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Normalize string for comparison (lowercase, trim, remove special chars)
|
|
92
|
+
*/
|
|
93
|
+
normalizeString(str) {
|
|
94
|
+
return str
|
|
95
|
+
.toLowerCase()
|
|
96
|
+
.trim()
|
|
97
|
+
.replace(/[^\w\s]/g, '') // Remove special characters
|
|
98
|
+
.replace(/\s+/g, ' '); // Normalize whitespace
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Fuzzy match for common misspellings and variations
|
|
102
|
+
*/
|
|
103
|
+
fuzzyMatch(normalized) {
|
|
104
|
+
const threshold = 0.8; // Similarity threshold
|
|
105
|
+
for (const [key, value] of this.normalizationMap.entries()) {
|
|
106
|
+
const similarity = this.stringSimilarity(normalized, key);
|
|
107
|
+
if (similarity >= threshold) {
|
|
108
|
+
return value;
|
|
109
|
+
}
|
|
110
|
+
// Also check aliases
|
|
111
|
+
if (value.aliases) {
|
|
112
|
+
for (const alias of value.aliases) {
|
|
113
|
+
const aliasSim = this.stringSimilarity(normalized, this.normalizeString(alias));
|
|
114
|
+
if (aliasSim >= threshold) {
|
|
115
|
+
return value;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Calculate string similarity using Dice coefficient
|
|
124
|
+
*/
|
|
125
|
+
stringSimilarity(str1, str2) {
|
|
126
|
+
if (str1 === str2)
|
|
127
|
+
return 1;
|
|
128
|
+
if (str1.length < 2 || str2.length < 2)
|
|
129
|
+
return 0;
|
|
130
|
+
const bigrams1 = this.getBigrams(str1);
|
|
131
|
+
const bigrams2 = this.getBigrams(str2);
|
|
132
|
+
const intersection = bigrams1.filter((bigram) => bigrams2.includes(bigram)).length;
|
|
133
|
+
const union = bigrams1.length + bigrams2.length;
|
|
134
|
+
return (2 * intersection) / union;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Get bigrams from string
|
|
138
|
+
*/
|
|
139
|
+
getBigrams(str) {
|
|
140
|
+
const bigrams = [];
|
|
141
|
+
for (let i = 0; i < str.length - 1; i++) {
|
|
142
|
+
bigrams.push(str.substring(i, i + 2));
|
|
143
|
+
}
|
|
144
|
+
return bigrams;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get coordinates for a location name
|
|
148
|
+
*/
|
|
149
|
+
getCoordinates(location) {
|
|
150
|
+
const normalized = this.normalize(location);
|
|
151
|
+
return normalized?.coordinates || null;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Get bucket for a location name
|
|
155
|
+
*/
|
|
156
|
+
getBucket(location) {
|
|
157
|
+
const normalized = this.normalize(location);
|
|
158
|
+
if (!normalized?.bucketId)
|
|
159
|
+
return null;
|
|
160
|
+
return this.buckets.find((b) => b.id === normalized.bucketId) || null;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Find all variations of a canonical location name
|
|
164
|
+
*/
|
|
165
|
+
getVariations(canonical) {
|
|
166
|
+
const normalized = this.normalizeString(canonical);
|
|
167
|
+
const mapping = this.normalizationMap.get(normalized);
|
|
168
|
+
if (!mapping)
|
|
169
|
+
return [canonical];
|
|
170
|
+
const variations = new Set();
|
|
171
|
+
variations.add(mapping.canonical);
|
|
172
|
+
if (mapping.aliases) {
|
|
173
|
+
mapping.aliases.forEach((alias) => variations.add(alias));
|
|
174
|
+
}
|
|
175
|
+
return Array.from(variations);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Add a custom location mapping
|
|
179
|
+
*/
|
|
180
|
+
addMapping(mapping) {
|
|
181
|
+
const key = this.normalizeString(mapping.original);
|
|
182
|
+
this.normalizationMap.set(key, mapping);
|
|
183
|
+
// Update alias map
|
|
184
|
+
this.aliasMap.set(key, mapping.canonical);
|
|
185
|
+
if (mapping.aliases) {
|
|
186
|
+
for (const alias of mapping.aliases) {
|
|
187
|
+
this.aliasMap.set(this.normalizeString(alias), mapping.canonical);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Batch add multiple mappings
|
|
193
|
+
*/
|
|
194
|
+
addMappings(mappings) {
|
|
195
|
+
for (const mapping of mappings) {
|
|
196
|
+
this.addMapping(mapping);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Get all canonical locations
|
|
201
|
+
*/
|
|
202
|
+
getAllCanonicalLocations() {
|
|
203
|
+
const canonical = new Set();
|
|
204
|
+
for (const mapping of this.normalizationMap.values()) {
|
|
205
|
+
canonical.add(mapping.canonical);
|
|
206
|
+
}
|
|
207
|
+
return Array.from(canonical).sort();
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Check if a location is recognized
|
|
211
|
+
*/
|
|
212
|
+
isRecognized(location) {
|
|
213
|
+
const normalized = this.normalize(location);
|
|
214
|
+
return normalized !== null && normalized.canonical !== location;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Get statistics about normalization coverage
|
|
218
|
+
*/
|
|
219
|
+
getStats() {
|
|
220
|
+
return {
|
|
221
|
+
totalCanonical: this.normalizationMap.size,
|
|
222
|
+
totalAliases: this.aliasMap.size,
|
|
223
|
+
totalBuckets: this.buckets.length,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
exports.LocationNormalizer = LocationNormalizer;
|
|
228
|
+
/**
|
|
229
|
+
* Common location aliases for US cities
|
|
230
|
+
*/
|
|
231
|
+
exports.US_CITY_ALIASES = [
|
|
232
|
+
{
|
|
233
|
+
original: 'The Big Apple',
|
|
234
|
+
canonical: 'New York City',
|
|
235
|
+
aliases: ['Big Apple', 'NYC'],
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
original: 'Sin City',
|
|
239
|
+
canonical: 'Las Vegas',
|
|
240
|
+
aliases: ['Vegas', 'LV', 'Las Vegas'],
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
original: 'Motor City',
|
|
244
|
+
canonical: 'Detroit',
|
|
245
|
+
aliases: ['The D', 'Detroit', 'DTW'],
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
original: 'Music City',
|
|
249
|
+
canonical: 'Nashville',
|
|
250
|
+
aliases: ['Nash', 'Nashville', 'BNA'],
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
original: 'The Mile High City',
|
|
254
|
+
canonical: 'Denver',
|
|
255
|
+
aliases: ['Denver', 'DEN'],
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
original: 'The Emerald City',
|
|
259
|
+
canonical: 'Seattle',
|
|
260
|
+
aliases: ['Seattle', 'SEA'],
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
original: 'The City of Angels',
|
|
264
|
+
canonical: 'Los Angeles',
|
|
265
|
+
aliases: ['LA', 'Los Angeles', 'LAX'],
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
original: 'The Windy City',
|
|
269
|
+
canonical: 'Chicago',
|
|
270
|
+
aliases: ['Chicago', 'Chi-Town', 'ORD'],
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
original: 'Philly',
|
|
274
|
+
canonical: 'Philadelphia',
|
|
275
|
+
aliases: ['Philadelphia', 'PHL'],
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
original: 'ATX',
|
|
279
|
+
canonical: 'Austin',
|
|
280
|
+
aliases: ['Austin', 'ATX'],
|
|
281
|
+
},
|
|
282
|
+
];
|
|
283
|
+
/**
|
|
284
|
+
* Common location aliases for international cities
|
|
285
|
+
*/
|
|
286
|
+
exports.INTERNATIONAL_CITY_ALIASES = [
|
|
287
|
+
{
|
|
288
|
+
original: 'The Big Smoke',
|
|
289
|
+
canonical: 'London',
|
|
290
|
+
aliases: ['London', 'LDN'],
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
original: 'The City of Light',
|
|
294
|
+
canonical: 'Paris',
|
|
295
|
+
aliases: ['Paris', 'CDG'],
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
original: 'The Big Mango',
|
|
299
|
+
canonical: 'Bangkok',
|
|
300
|
+
aliases: ['Bangkok', 'BKK'],
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
original: 'The Big Durian',
|
|
304
|
+
canonical: 'Jakarta',
|
|
305
|
+
aliases: ['Jakarta', 'CGK'],
|
|
306
|
+
},
|
|
307
|
+
];
|
|
308
|
+
//# sourceMappingURL=location-normalizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"location-normalizer.js","sourceRoot":"","sources":["../../src/search/location-normalizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Geospatial search types and configuration for SqlDB
|
|
3
|
+
* Enables location-based search with distance calculations, bucketing, and canonical location matching
|
|
4
|
+
*/
|
|
5
|
+
export interface GeoPoint {
|
|
6
|
+
lat: number;
|
|
7
|
+
lng: number;
|
|
8
|
+
}
|
|
9
|
+
export interface GeoBounds {
|
|
10
|
+
northEast: GeoPoint;
|
|
11
|
+
southWest: GeoPoint;
|
|
12
|
+
}
|
|
13
|
+
export interface GeoDistance {
|
|
14
|
+
value: number;
|
|
15
|
+
unit: 'km' | 'mi' | 'm';
|
|
16
|
+
}
|
|
17
|
+
export interface GeoBucket {
|
|
18
|
+
id: string;
|
|
19
|
+
name?: string;
|
|
20
|
+
center: GeoPoint;
|
|
21
|
+
radius: GeoDistance;
|
|
22
|
+
bounds?: GeoBounds;
|
|
23
|
+
aliases?: string[];
|
|
24
|
+
members?: string[];
|
|
25
|
+
locationName?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface LocationNormalization {
|
|
28
|
+
/** Original location string from data */
|
|
29
|
+
original: string;
|
|
30
|
+
/** Normalized canonical name */
|
|
31
|
+
canonical: string;
|
|
32
|
+
/** Coordinates if available */
|
|
33
|
+
coordinates?: GeoPoint;
|
|
34
|
+
/** Bucket ID this location belongs to */
|
|
35
|
+
bucketId?: string;
|
|
36
|
+
/** Alternative spellings/names */
|
|
37
|
+
aliases?: string[];
|
|
38
|
+
}
|
|
39
|
+
export interface GeoSearchConfig {
|
|
40
|
+
/** Enable geospatial search */
|
|
41
|
+
enabled: boolean;
|
|
42
|
+
/** Field names containing latitude */
|
|
43
|
+
latitudeField: string;
|
|
44
|
+
/** Field names containing longitude */
|
|
45
|
+
longitudeField: string;
|
|
46
|
+
/** Optional field containing location name/city for normalization */
|
|
47
|
+
locationNameField?: string;
|
|
48
|
+
/** Default distance unit */
|
|
49
|
+
defaultUnit?: 'km' | 'mi' | 'm';
|
|
50
|
+
/** Maximum search radius allowed (prevents overly broad searches) */
|
|
51
|
+
maxRadius?: GeoDistance;
|
|
52
|
+
/** Geographic buckets for regional grouping */
|
|
53
|
+
buckets?: GeoBucket[];
|
|
54
|
+
/** Location normalization mappings */
|
|
55
|
+
locationMappings?: LocationNormalization[];
|
|
56
|
+
/** Enable automatic city name normalization */
|
|
57
|
+
autoNormalize?: boolean;
|
|
58
|
+
/** Common location aliases (e.g., "NYC" -> "New York City") */
|
|
59
|
+
commonAliases?: Record<string, string>;
|
|
60
|
+
}
|
|
61
|
+
export interface GeoSearchOptions {
|
|
62
|
+
/** Search center point */
|
|
63
|
+
center: GeoPoint;
|
|
64
|
+
/** Search radius */
|
|
65
|
+
radius: GeoDistance;
|
|
66
|
+
/** Sort by distance (default: true) */
|
|
67
|
+
sortByDistance?: boolean;
|
|
68
|
+
/** Include distance in results */
|
|
69
|
+
includeDistance?: boolean;
|
|
70
|
+
/** Filter by bucket ID */
|
|
71
|
+
bucketId?: string;
|
|
72
|
+
/** Location name to normalize and search */
|
|
73
|
+
locationName?: string;
|
|
74
|
+
/** Maximum number of results */
|
|
75
|
+
limit?: number;
|
|
76
|
+
/** Combined text search query */
|
|
77
|
+
textQuery?: string;
|
|
78
|
+
/**
|
|
79
|
+
* Maximum search range for cluster expansion
|
|
80
|
+
* If initial search yields few results, expand up to this distance
|
|
81
|
+
* Example: Initial radius 5km, maxRange 8km -> will search up to 8km if needed
|
|
82
|
+
*/
|
|
83
|
+
maxRange?: GeoDistance;
|
|
84
|
+
/**
|
|
85
|
+
* Minimum results threshold to trigger expansion
|
|
86
|
+
* If results < minResults, expand search radius up to maxRange
|
|
87
|
+
* Default: 5
|
|
88
|
+
*/
|
|
89
|
+
minResults?: number;
|
|
90
|
+
/** Boost results within certain distance ranges */
|
|
91
|
+
distanceBoost?: {
|
|
92
|
+
/** Distance threshold */
|
|
93
|
+
distance: GeoDistance;
|
|
94
|
+
/** Boost multiplier (e.g., 2.0 = 2x relevance) */
|
|
95
|
+
boost: number;
|
|
96
|
+
}[];
|
|
97
|
+
}
|
|
98
|
+
export interface GeoSearchResult<T = any> {
|
|
99
|
+
/** The matched document */
|
|
100
|
+
document: T;
|
|
101
|
+
/** Distance from search center */
|
|
102
|
+
distance?: GeoDistance;
|
|
103
|
+
/** Bucket this result belongs to */
|
|
104
|
+
bucket?: GeoBucket;
|
|
105
|
+
/** Text search score (if combined search) */
|
|
106
|
+
textScore?: number;
|
|
107
|
+
/** Combined relevance score */
|
|
108
|
+
relevanceScore: number;
|
|
109
|
+
}
|
|
110
|
+
export interface GeoIndexStats {
|
|
111
|
+
/** Total number of geo-indexed documents */
|
|
112
|
+
totalDocuments: number;
|
|
113
|
+
/** Number of documents in each bucket */
|
|
114
|
+
bucketCounts: Record<string, number>;
|
|
115
|
+
/** Geographic bounds of all indexed data */
|
|
116
|
+
bounds: GeoBounds;
|
|
117
|
+
/** Number of normalized locations */
|
|
118
|
+
normalizedLocations: number;
|
|
119
|
+
/** Index size in bytes */
|
|
120
|
+
indexSize: number;
|
|
121
|
+
/** Last index update timestamp */
|
|
122
|
+
lastUpdated: Date;
|
|
123
|
+
}
|
|
124
|
+
export interface GeoSearchTableConfig {
|
|
125
|
+
/** Latitude field name */
|
|
126
|
+
latitudeField: string;
|
|
127
|
+
/** Longitude field name */
|
|
128
|
+
longitudeField: string;
|
|
129
|
+
/** Optional location name field for normalization */
|
|
130
|
+
locationNameField?: string;
|
|
131
|
+
/** Table-specific geo buckets */
|
|
132
|
+
buckets?: GeoBucket[];
|
|
133
|
+
/** Location normalization for this table */
|
|
134
|
+
locationMappings?: LocationNormalization[];
|
|
135
|
+
/** Enable auto-normalization for this table */
|
|
136
|
+
autoNormalize?: boolean;
|
|
137
|
+
/** Default search radius for this table */
|
|
138
|
+
defaultRadius?: GeoDistance;
|
|
139
|
+
/** Combine with text search fields */
|
|
140
|
+
combineWithTextSearch?: boolean;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Pre-defined major city buckets for common use cases
|
|
144
|
+
*/
|
|
145
|
+
export declare const MAJOR_CITY_BUCKETS: GeoBucket[];
|
|
146
|
+
//# sourceMappingURL=geo-search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geo-search.d.ts","sourceRoot":"","sources":["../../src/types/geo-search.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,QAAQ,CAAC;IACpB,SAAS,EAAE,QAAQ,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,WAAW,CAAC,EAAE,QAAQ,CAAC;IACvB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,+BAA+B;IAC/B,OAAO,EAAE,OAAO,CAAC;IAEjB,sCAAsC;IACtC,aAAa,EAAE,MAAM,CAAC;IAEtB,uCAAuC;IACvC,cAAc,EAAE,MAAM,CAAC;IAEvB,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,4BAA4B;IAC5B,WAAW,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC;IAEhC,qEAAqE;IACrE,SAAS,CAAC,EAAE,WAAW,CAAC;IAExB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IAEtB,sCAAsC;IACtC,gBAAgB,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAE3C,+CAA+C;IAC/C,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,gBAAgB;IAC/B,0BAA0B;IAC1B,MAAM,EAAE,QAAQ,CAAC;IAEjB,oBAAoB;IACpB,MAAM,EAAE,WAAW,CAAC;IAEpB,uCAAuC;IACvC,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,kCAAkC;IAClC,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,4CAA4C;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,WAAW,CAAC;IAEvB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,mDAAmD;IACnD,aAAa,CAAC,EAAE;QACd,yBAAyB;QACzB,QAAQ,EAAE,WAAW,CAAC;QACtB,kDAAkD;QAClD,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;CACL;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,GAAG;IACtC,2BAA2B;IAC3B,QAAQ,EAAE,CAAC,CAAC;IAEZ,kCAAkC;IAClC,QAAQ,CAAC,EAAE,WAAW,CAAC;IAEvB,oCAAoC;IACpC,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,+BAA+B;IAC/B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,4CAA4C;IAC5C,cAAc,EAAE,MAAM,CAAC;IAEvB,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAErC,4CAA4C;IAC5C,MAAM,EAAE,SAAS,CAAC;IAElB,qCAAqC;IACrC,mBAAmB,EAAE,MAAM,CAAC;IAE5B,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAElB,kCAAkC;IAClC,WAAW,EAAE,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,0BAA0B;IAC1B,aAAa,EAAE,MAAM,CAAC;IAEtB,2BAA2B;IAC3B,cAAc,EAAE,MAAM,CAAC;IAEvB,qDAAqD;IACrD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,iCAAiC;IACjC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IAEtB,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAE3C,+CAA+C;IAC/C,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,WAAW,CAAC;IAE5B,sCAAsC;IACtC,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,EA0GzC,CAAC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Geospatial search types and configuration for SqlDB
|
|
4
|
+
* Enables location-based search with distance calculations, bucketing, and canonical location matching
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.MAJOR_CITY_BUCKETS = void 0;
|
|
8
|
+
/**
|
|
9
|
+
* Pre-defined major city buckets for common use cases
|
|
10
|
+
*/
|
|
11
|
+
exports.MAJOR_CITY_BUCKETS = [
|
|
12
|
+
{
|
|
13
|
+
id: 'nyc',
|
|
14
|
+
name: 'New York City',
|
|
15
|
+
center: { lat: 40.7128, lng: -74.006 },
|
|
16
|
+
radius: { value: 50, unit: 'km' },
|
|
17
|
+
aliases: ['NYC', 'New York', 'Manhattan', 'Brooklyn', 'Queens', 'Bronx', 'Staten Island'],
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
id: 'la',
|
|
21
|
+
name: 'Los Angeles',
|
|
22
|
+
center: { lat: 34.0522, lng: -118.2437 },
|
|
23
|
+
radius: { value: 50, unit: 'km' },
|
|
24
|
+
aliases: ['LA', 'Los Angeles', 'Hollywood', 'Santa Monica', 'Venice'],
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
id: 'chicago',
|
|
28
|
+
name: 'Chicago',
|
|
29
|
+
center: { lat: 41.8781, lng: -87.6298 },
|
|
30
|
+
radius: { value: 40, unit: 'km' },
|
|
31
|
+
aliases: ['Chicago', 'Chi-Town', 'The Windy City'],
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
id: 'houston',
|
|
35
|
+
name: 'Houston',
|
|
36
|
+
center: { lat: 29.7604, lng: -95.3698 },
|
|
37
|
+
radius: { value: 40, unit: 'km' },
|
|
38
|
+
aliases: ['Houston', 'H-Town'],
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
id: 'phoenix',
|
|
42
|
+
name: 'Phoenix',
|
|
43
|
+
center: { lat: 33.4484, lng: -112.074 },
|
|
44
|
+
radius: { value: 40, unit: 'km' },
|
|
45
|
+
aliases: ['Phoenix', 'PHX'],
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
id: 'sf',
|
|
49
|
+
name: 'San Francisco',
|
|
50
|
+
center: { lat: 37.7749, lng: -122.4194 },
|
|
51
|
+
radius: { value: 30, unit: 'km' },
|
|
52
|
+
aliases: ['SF', 'San Francisco', 'San Fran', 'The City'],
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
id: 'seattle',
|
|
56
|
+
name: 'Seattle',
|
|
57
|
+
center: { lat: 47.6062, lng: -122.3321 },
|
|
58
|
+
radius: { value: 35, unit: 'km' },
|
|
59
|
+
aliases: ['Seattle', 'SEA'],
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
id: 'miami',
|
|
63
|
+
name: 'Miami',
|
|
64
|
+
center: { lat: 25.7617, lng: -80.1918 },
|
|
65
|
+
radius: { value: 35, unit: 'km' },
|
|
66
|
+
aliases: ['Miami', 'MIA', 'Miami Beach'],
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
id: 'boston',
|
|
70
|
+
name: 'Boston',
|
|
71
|
+
center: { lat: 42.3601, lng: -71.0589 },
|
|
72
|
+
radius: { value: 30, unit: 'km' },
|
|
73
|
+
aliases: ['Boston', 'BOS'],
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
id: 'london',
|
|
77
|
+
name: 'London',
|
|
78
|
+
center: { lat: 51.5074, lng: -0.1278 },
|
|
79
|
+
radius: { value: 50, unit: 'km' },
|
|
80
|
+
aliases: ['London', 'LDN'],
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
id: 'paris',
|
|
84
|
+
name: 'Paris',
|
|
85
|
+
center: { lat: 48.8566, lng: 2.3522 },
|
|
86
|
+
radius: { value: 40, unit: 'km' },
|
|
87
|
+
aliases: ['Paris', 'PAR'],
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
id: 'tokyo',
|
|
91
|
+
name: 'Tokyo',
|
|
92
|
+
center: { lat: 35.6762, lng: 139.6503 },
|
|
93
|
+
radius: { value: 50, unit: 'km' },
|
|
94
|
+
aliases: ['Tokyo', 'TYO'],
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
id: 'mumbai',
|
|
98
|
+
name: 'Mumbai',
|
|
99
|
+
center: { lat: 19.076, lng: 72.8777 },
|
|
100
|
+
radius: { value: 40, unit: 'km' },
|
|
101
|
+
aliases: ['Mumbai', 'Bombay', 'BOM'],
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
id: 'delhi',
|
|
105
|
+
name: 'Delhi',
|
|
106
|
+
center: { lat: 28.6139, lng: 77.209 },
|
|
107
|
+
radius: { value: 40, unit: 'km' },
|
|
108
|
+
aliases: ['Delhi', 'New Delhi', 'DEL'],
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
id: 'bangalore',
|
|
112
|
+
name: 'Bangalore',
|
|
113
|
+
center: { lat: 12.9716, lng: 77.5946 },
|
|
114
|
+
radius: { value: 35, unit: 'km' },
|
|
115
|
+
aliases: ['Bangalore', 'Bengaluru', 'BLR'],
|
|
116
|
+
},
|
|
117
|
+
];
|
|
118
|
+
//# sourceMappingURL=geo-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geo-search.js","sourceRoot":"","sources":["../../src/types/geo-search.ts"],"names":[],"mappings":"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"}
|
package/dist/types/query.d.ts
CHANGED
|
@@ -45,6 +45,23 @@ export interface TableOperations<T = any> {
|
|
|
45
45
|
buildSearchIndex?(): Promise<import('../types/search').IndexStats>;
|
|
46
46
|
rebuildSearchIndex?(): Promise<import('../types/search').IndexStats>;
|
|
47
47
|
getSearchStats?(): Promise<import('../types/search').IndexStats | null>;
|
|
48
|
+
buildGeoBuckets?(options?: {
|
|
49
|
+
targetBucketSize?: number;
|
|
50
|
+
gridSizeKm?: number;
|
|
51
|
+
minBucketSize?: number;
|
|
52
|
+
}): Promise<{
|
|
53
|
+
totalBuckets: number;
|
|
54
|
+
buckets: import('../types/geo-search').GeoBucket[];
|
|
55
|
+
avgBucketSize: number;
|
|
56
|
+
}>;
|
|
57
|
+
getGeoBuckets?(): Promise<Array<{
|
|
58
|
+
id: string;
|
|
59
|
+
center: import('../types/geo-search').GeoPoint;
|
|
60
|
+
radius: import('../types/geo-search').GeoDistance;
|
|
61
|
+
count: number;
|
|
62
|
+
locationName?: string;
|
|
63
|
+
bounds?: any;
|
|
64
|
+
}>>;
|
|
48
65
|
}
|
|
49
66
|
export interface QueryResult {
|
|
50
67
|
sql: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/types/query.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/types/query.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG;IAC9C,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAE7B,UAAU,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,CAAC;IAGhC,YAAY,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,CAAC;IAGlC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,aAAa,EAAE,CAAC;IACnD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,aAAa,CAAC,EAAE,OAAO,GAAG,cAAc,CAAC;CAC1C;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,GAAG;IAEtC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACzE,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IACtE,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACzE,KAAK,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAGvE,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACnE,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IACxE,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9F,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7F,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7F,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3E,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3E,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAG1E,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAG9E,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,SAAS,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,sBAAsB,CACpB,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EACtB,OAAO,CAAC,EAAE;QACR,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC5B,GACA,OAAO,CAAC,IAAI,CAAC,CAAC;IAGjB,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,iBAAiB,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,iBAAiB,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAChI,gBAAgB,CAAC,IAAI,OAAO,CAAC,OAAO,iBAAiB,EAAE,UAAU,CAAC,CAAC;IACnE,kBAAkB,CAAC,IAAI,OAAO,CAAC,OAAO,iBAAiB,EAAE,UAAU,CAAC,CAAC;IACrE,cAAc,CAAC,IAAI,OAAO,CAAC,OAAO,iBAAiB,EAAE,UAAU,GAAG,IAAI,CAAC,CAAC;IAGxE,eAAe,CAAC,CAAC,OAAO,CAAC,EAAE;QACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,GAAG,OAAO,CAAC;QACV,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,OAAO,qBAAqB,EAAE,SAAS,EAAE,CAAC;QACnD,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC,CAAC;IACH,aAAa,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC;QAC9B,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,OAAO,qBAAqB,EAAE,QAAQ,CAAC;QAC/C,MAAM,EAAE,OAAO,qBAAqB,EAAE,WAAW,CAAC;QAClD,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,MAAM,CAAC,EAAE,GAAG,CAAC;KACd,CAAC,CAAC,CAAC;CACL;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,GAAG,EAAE,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC1C,UAAU,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE,CAAC;IACpD,YAAY,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5C"}
|