@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.
@@ -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":"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"}
@@ -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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"}
@@ -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":"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"}