@zurigo/maps 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/components/error-display.d.ts +33 -0
  2. package/dist/components/error-display.d.ts.map +1 -0
  3. package/dist/components/error-display.js +188 -0
  4. package/dist/components/error-display.js.map +1 -0
  5. package/dist/components/google-maps.d.ts +31 -0
  6. package/dist/components/google-maps.d.ts.map +1 -0
  7. package/dist/components/google-maps.js +1763 -0
  8. package/dist/components/google-maps.js.map +1 -0
  9. package/dist/index.d.ts +8 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +35 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/lib/google-maps/china-fallback.d.ts +64 -0
  14. package/dist/lib/google-maps/china-fallback.d.ts.map +1 -0
  15. package/dist/lib/google-maps/china-fallback.js +212 -0
  16. package/dist/lib/google-maps/china-fallback.js.map +1 -0
  17. package/dist/lib/google-maps/config.d.ts +51 -0
  18. package/dist/lib/google-maps/config.d.ts.map +1 -0
  19. package/dist/lib/google-maps/config.js +73 -0
  20. package/dist/lib/google-maps/config.js.map +1 -0
  21. package/dist/lib/google-maps/error-handler.d.ts +30 -0
  22. package/dist/lib/google-maps/error-handler.d.ts.map +1 -0
  23. package/dist/lib/google-maps/error-handler.js +224 -0
  24. package/dist/lib/google-maps/error-handler.js.map +1 -0
  25. package/dist/lib/google-maps/geocoding-service.d.ts +47 -0
  26. package/dist/lib/google-maps/geocoding-service.d.ts.map +1 -0
  27. package/dist/lib/google-maps/geocoding-service.js +224 -0
  28. package/dist/lib/google-maps/geocoding-service.js.map +1 -0
  29. package/dist/lib/google-maps/hooks.d.ts +35 -0
  30. package/dist/lib/google-maps/hooks.d.ts.map +1 -0
  31. package/dist/lib/google-maps/hooks.js +207 -0
  32. package/dist/lib/google-maps/hooks.js.map +1 -0
  33. package/dist/lib/google-maps/index.d.ts +7 -0
  34. package/dist/lib/google-maps/index.d.ts.map +1 -0
  35. package/dist/lib/google-maps/index.js +23 -0
  36. package/dist/lib/google-maps/index.js.map +1 -0
  37. package/dist/lib/google-maps/types.d.ts +96 -0
  38. package/dist/lib/google-maps/types.d.ts.map +1 -0
  39. package/dist/lib/google-maps/types.js +41 -0
  40. package/dist/lib/google-maps/types.js.map +1 -0
  41. package/dist/lib/google-maps/utils.d.ts +20 -0
  42. package/dist/lib/google-maps/utils.d.ts.map +1 -0
  43. package/dist/lib/google-maps/utils.js +176 -0
  44. package/dist/lib/google-maps/utils.js.map +1 -0
  45. package/dist/lib/solar-panel/constraints.d.ts +62 -0
  46. package/dist/lib/solar-panel/constraints.d.ts.map +1 -0
  47. package/dist/lib/solar-panel/constraints.js +166 -0
  48. package/dist/lib/solar-panel/constraints.js.map +1 -0
  49. package/dist/lib/solar-panel/orientation.d.ts +56 -0
  50. package/dist/lib/solar-panel/orientation.d.ts.map +1 -0
  51. package/dist/lib/solar-panel/orientation.js +255 -0
  52. package/dist/lib/solar-panel/orientation.js.map +1 -0
  53. package/dist/lib/solar-panel-calculator.d.ts +126 -0
  54. package/dist/lib/solar-panel-calculator.d.ts.map +1 -0
  55. package/dist/lib/solar-panel-calculator.js +450 -0
  56. package/dist/lib/solar-panel-calculator.js.map +1 -0
  57. package/package.json +2 -2
@@ -0,0 +1,30 @@
1
+ export interface MapError {
2
+ type: 'MAPS_LOAD_ERROR' | 'GEOCODING_ERROR' | 'API_KEY_ERROR' | 'NETWORK_ERROR' | 'RATE_LIMIT_ERROR' | 'UNKNOWN_ERROR';
3
+ message: string;
4
+ code?: string;
5
+ details?: any;
6
+ retryable: boolean;
7
+ userMessage: string;
8
+ }
9
+ export declare class GoogleMapsErrorHandler {
10
+ private static errorMap;
11
+ static handleError(error: any): MapError;
12
+ private static isGeocodingError;
13
+ static getRetryDelay(attemptNumber: number): number;
14
+ static shouldRetry(error: MapError, attemptNumber: number, maxRetries?: number): boolean;
15
+ static formatErrorForLogging(error: MapError): Record<string, any>;
16
+ }
17
+ export declare class RetryableGeocodingService {
18
+ private maxRetries;
19
+ private baseDelay;
20
+ constructor(maxRetries?: number, baseDelay?: number);
21
+ executeWithRetry<T>(operation: () => Promise<T>, onRetry?: (error: MapError, attempt: number) => void): Promise<T>;
22
+ }
23
+ export declare const withErrorHandling: <T extends any[], R>(fn: (...args: T) => Promise<R>, options?: {
24
+ maxRetries?: number;
25
+ onError?: (error: MapError) => void;
26
+ onRetry?: (error: MapError, attempt: number) => void;
27
+ }) => (...args: T) => Promise<R>;
28
+ export declare const isRetryableError: (error: any) => boolean;
29
+ export declare const getErrorUserMessage: (error: any) => string;
30
+ //# sourceMappingURL=error-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../../src/lib/google-maps/error-handler.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ;IACvB,IAAI,EACA,iBAAiB,GACjB,iBAAiB,GACjB,eAAe,GACf,eAAe,GACf,kBAAkB,GAClB,eAAe,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,GAAG,CAAA;IACb,SAAS,EAAE,OAAO,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAwEtB;IAED,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,QAAQ;IAmFxC,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAQ/B,MAAM,CAAC,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;IAKnD,MAAM,CAAC,WAAW,CAChB,KAAK,EAAE,QAAQ,EACf,aAAa,EAAE,MAAM,EACrB,UAAU,GAAE,MAAU,GACrB,OAAO;IAIV,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAgBnE;AAED,qBAAa,yBAAyB;IACpC,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,SAAS,CAAQ;gBAEb,UAAU,GAAE,MAAU,EAAE,SAAS,GAAE,MAAa;IAKtD,gBAAgB,CAAC,CAAC,EACtB,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GACnD,OAAO,CAAC,CAAC,CAAC;CAqCd;AAGD,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC,EAClD,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAC9B,UAAS;IACP,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAA;IACnC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAChD,MAIQ,GAAG,MAAM,CAAC,KAAG,OAAO,CAAC,CAAC,CAYrC,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,OAAO,GAAG,KAAG,OAG7C,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,OAAO,GAAG,KAAG,MAGhD,CAAA"}
@@ -0,0 +1,224 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getErrorUserMessage = exports.isRetryableError = exports.withErrorHandling = exports.RetryableGeocodingService = exports.GoogleMapsErrorHandler = void 0;
4
+ class GoogleMapsErrorHandler {
5
+ static handleError(error) {
6
+ // Handle Google Maps API errors
7
+ if (typeof error === 'string' && this.errorMap[error]) {
8
+ return Object.assign({ type: 'UNKNOWN_ERROR', message: error, retryable: false, userMessage: '发生未知错误' }, this.errorMap[error]);
9
+ }
10
+ // Handle Error objects
11
+ if (error instanceof Error) {
12
+ const errorName = error.name || error.constructor.name;
13
+ const errorMessage = error.message || 'Unknown error';
14
+ // Check if it's a known error type
15
+ if (this.errorMap[errorName]) {
16
+ return Object.assign(Object.assign({ type: 'UNKNOWN_ERROR', message: errorMessage, retryable: false, userMessage: '发生未知错误' }, this.errorMap[errorName]), { details: error });
17
+ }
18
+ // Check message for common patterns
19
+ if (errorMessage.includes('API key')) {
20
+ return {
21
+ type: 'API_KEY_ERROR',
22
+ message: errorMessage,
23
+ userMessage: 'API密钥配置问题',
24
+ retryable: false,
25
+ details: error,
26
+ };
27
+ }
28
+ if (errorMessage.includes('network') || errorMessage.includes('fetch')) {
29
+ return {
30
+ type: 'NETWORK_ERROR',
31
+ message: errorMessage,
32
+ userMessage: '网络连接问题,请重试',
33
+ retryable: true,
34
+ details: error,
35
+ };
36
+ }
37
+ if (errorMessage.includes('quota') || errorMessage.includes('limit')) {
38
+ return {
39
+ type: 'RATE_LIMIT_ERROR',
40
+ message: errorMessage,
41
+ userMessage: '请求频率过高,请稍后重试',
42
+ retryable: true,
43
+ details: error,
44
+ };
45
+ }
46
+ }
47
+ // Handle GeocodingError
48
+ if (this.isGeocodingError(error)) {
49
+ return {
50
+ type: 'GEOCODING_ERROR',
51
+ message: error.message,
52
+ code: error.code,
53
+ userMessage: error.message, // GeocodingError already has Chinese messages
54
+ retryable: error.code === 'OVER_QUERY_LIMIT',
55
+ details: error,
56
+ };
57
+ }
58
+ // Default unknown error
59
+ return {
60
+ type: 'UNKNOWN_ERROR',
61
+ message: typeof error === 'string' ? error : 'Unknown error occurred',
62
+ userMessage: '发生未知错误,请重试',
63
+ retryable: false,
64
+ details: error,
65
+ };
66
+ }
67
+ static isGeocodingError(error) {
68
+ return (error &&
69
+ typeof error.code === 'string' &&
70
+ typeof error.status !== 'undefined');
71
+ }
72
+ static getRetryDelay(attemptNumber) {
73
+ // Exponential backoff: 1s, 2s, 4s, 8s, 16s
74
+ return Math.min(1000 * Math.pow(2, attemptNumber), 16000);
75
+ }
76
+ static shouldRetry(error, attemptNumber, maxRetries = 3) {
77
+ return error.retryable && attemptNumber < maxRetries;
78
+ }
79
+ static formatErrorForLogging(error) {
80
+ return {
81
+ type: error.type,
82
+ message: error.message,
83
+ code: error.code,
84
+ retryable: error.retryable,
85
+ timestamp: new Date().toISOString(),
86
+ details: error.details
87
+ ? {
88
+ name: error.details.name,
89
+ message: error.details.message,
90
+ stack: error.details.stack,
91
+ }
92
+ : undefined,
93
+ };
94
+ }
95
+ }
96
+ exports.GoogleMapsErrorHandler = GoogleMapsErrorHandler;
97
+ GoogleMapsErrorHandler.errorMap = {
98
+ // Google Maps loading errors
99
+ InvalidKeyMapError: {
100
+ type: 'API_KEY_ERROR',
101
+ message: 'Google Maps API key is invalid',
102
+ userMessage: 'API密钥配置错误,请联系系统管理员',
103
+ retryable: false,
104
+ },
105
+ RefererNotAllowedMapError: {
106
+ type: 'API_KEY_ERROR',
107
+ message: 'Current domain is not authorized for this API key',
108
+ userMessage: '当前域名未授权使用此API密钥',
109
+ retryable: false,
110
+ },
111
+ ProjectDeniedMapError: {
112
+ type: 'API_KEY_ERROR',
113
+ message: 'Project denied access to Google Maps API',
114
+ userMessage: '项目无权访问Google Maps API',
115
+ retryable: false,
116
+ },
117
+ BillingNotEnabledMapError: {
118
+ type: 'API_KEY_ERROR',
119
+ message: 'Billing must be enabled on the Google Cloud Project',
120
+ userMessage: '需要启用Google Cloud项目的账单功能',
121
+ retryable: false,
122
+ },
123
+ ApiNotActivatedMapError: {
124
+ type: 'API_KEY_ERROR',
125
+ message: 'Google Maps API is not activated',
126
+ userMessage: 'Google Maps API未激活',
127
+ retryable: false,
128
+ },
129
+ // Network and loading errors
130
+ NetworkError: {
131
+ type: 'NETWORK_ERROR',
132
+ message: 'Network connection failed',
133
+ userMessage: '网络连接失败,请检查网络连接',
134
+ retryable: true,
135
+ },
136
+ TimeoutError: {
137
+ type: 'NETWORK_ERROR',
138
+ message: 'Request timed out',
139
+ userMessage: '请求超时,请重试',
140
+ retryable: true,
141
+ },
142
+ // Geocoding specific errors
143
+ ZERO_RESULTS: {
144
+ type: 'GEOCODING_ERROR',
145
+ message: 'No results found',
146
+ userMessage: '未找到匹配的地址,请尝试更详细的地址',
147
+ retryable: false,
148
+ },
149
+ OVER_QUERY_LIMIT: {
150
+ type: 'RATE_LIMIT_ERROR',
151
+ message: 'Query limit exceeded',
152
+ userMessage: '查询次数超过限制,请稍后重试',
153
+ retryable: true,
154
+ },
155
+ REQUEST_DENIED: {
156
+ type: 'API_KEY_ERROR',
157
+ message: 'Request denied',
158
+ userMessage: '请求被拒绝,请检查API配置',
159
+ retryable: false,
160
+ },
161
+ INVALID_REQUEST: {
162
+ type: 'GEOCODING_ERROR',
163
+ message: 'Invalid request',
164
+ userMessage: '请求格式无效,请检查输入',
165
+ retryable: false,
166
+ },
167
+ };
168
+ class RetryableGeocodingService {
169
+ constructor(maxRetries = 3, baseDelay = 1000) {
170
+ this.maxRetries = maxRetries;
171
+ this.baseDelay = baseDelay;
172
+ }
173
+ async executeWithRetry(operation, onRetry) {
174
+ let lastError = null;
175
+ for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
176
+ try {
177
+ return await operation();
178
+ }
179
+ catch (error) {
180
+ const mappedError = GoogleMapsErrorHandler.handleError(error);
181
+ lastError = mappedError;
182
+ // Log error for debugging
183
+ console.error('Operation failed:', GoogleMapsErrorHandler.formatErrorForLogging(mappedError));
184
+ if (!GoogleMapsErrorHandler.shouldRetry(mappedError, attempt, this.maxRetries)) {
185
+ throw mappedError;
186
+ }
187
+ if (attempt < this.maxRetries) {
188
+ const delay = GoogleMapsErrorHandler.getRetryDelay(attempt);
189
+ onRetry === null || onRetry === void 0 ? void 0 : onRetry(mappedError, attempt + 1);
190
+ await new Promise((resolve) => setTimeout(resolve, delay));
191
+ }
192
+ }
193
+ }
194
+ throw lastError || new Error('Maximum retries exceeded');
195
+ }
196
+ }
197
+ exports.RetryableGeocodingService = RetryableGeocodingService;
198
+ // Utility functions for common error handling patterns
199
+ const withErrorHandling = (fn, options = {}) => {
200
+ const retryService = new RetryableGeocodingService(options.maxRetries);
201
+ return async (...args) => {
202
+ var _a;
203
+ try {
204
+ return await retryService.executeWithRetry(() => fn(...args), options.onRetry);
205
+ }
206
+ catch (error) {
207
+ const mappedError = GoogleMapsErrorHandler.handleError(error);
208
+ (_a = options.onError) === null || _a === void 0 ? void 0 : _a.call(options, mappedError);
209
+ throw mappedError;
210
+ }
211
+ };
212
+ };
213
+ exports.withErrorHandling = withErrorHandling;
214
+ const isRetryableError = (error) => {
215
+ const mappedError = GoogleMapsErrorHandler.handleError(error);
216
+ return mappedError.retryable;
217
+ };
218
+ exports.isRetryableError = isRetryableError;
219
+ const getErrorUserMessage = (error) => {
220
+ const mappedError = GoogleMapsErrorHandler.handleError(error);
221
+ return mappedError.userMessage;
222
+ };
223
+ exports.getErrorUserMessage = getErrorUserMessage;
224
+ //# sourceMappingURL=error-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../../src/lib/google-maps/error-handler.ts"],"names":[],"mappings":";;;AAiBA,MAAa,sBAAsB;IA2EjC,MAAM,CAAC,WAAW,CAAC,KAAU;QAC3B,gCAAgC;QAChC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACtD,uBACE,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,KAAK,EACd,SAAS,EAAE,KAAK,EAChB,WAAW,EAAE,QAAQ,IAClB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EACxB;QACH,CAAC;QAED,uBAAuB;QACvB,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAA;YACtD,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,IAAI,eAAe,CAAA;YAErD,mCAAmC;YACnC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7B,qCACE,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,KAAK,EAChB,WAAW,EAAE,QAAQ,IAClB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAC3B,OAAO,EAAE,KAAK,IACf;YACH,CAAC;YAED,oCAAoC;YACpC,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACrC,OAAO;oBACL,IAAI,EAAE,eAAe;oBACrB,OAAO,EAAE,YAAY;oBACrB,WAAW,EAAE,WAAW;oBACxB,SAAS,EAAE,KAAK;oBAChB,OAAO,EAAE,KAAK;iBACf,CAAA;YACH,CAAC;YAED,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvE,OAAO;oBACL,IAAI,EAAE,eAAe;oBACrB,OAAO,EAAE,YAAY;oBACrB,WAAW,EAAE,YAAY;oBACzB,SAAS,EAAE,IAAI;oBACf,OAAO,EAAE,KAAK;iBACf,CAAA;YACH,CAAC;YAED,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrE,OAAO;oBACL,IAAI,EAAE,kBAAkB;oBACxB,OAAO,EAAE,YAAY;oBACrB,WAAW,EAAE,cAAc;oBAC3B,SAAS,EAAE,IAAI;oBACf,OAAO,EAAE,KAAK;iBACf,CAAA;YACH,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO;gBACL,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,WAAW,EAAE,KAAK,CAAC,OAAO,EAAE,8CAA8C;gBAC1E,SAAS,EAAE,KAAK,CAAC,IAAI,KAAK,kBAAkB;gBAC5C,OAAO,EAAE,KAAK;aACf,CAAA;QACH,CAAC;QAED,wBAAwB;QACxB,OAAO;YACL,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,wBAAwB;YACrE,WAAW,EAAE,YAAY;YACzB,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,KAAK;SACf,CAAA;IACH,CAAC;IAEO,MAAM,CAAC,gBAAgB,CAAC,KAAU;QACxC,OAAO,CACL,KAAK;YACL,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;YAC9B,OAAO,KAAK,CAAC,MAAM,KAAK,WAAW,CACpC,CAAA;IACH,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,aAAqB;QACxC,2CAA2C;QAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,KAAK,CAAC,CAAA;IAC3D,CAAC;IAED,MAAM,CAAC,WAAW,CAChB,KAAe,EACf,aAAqB,EACrB,aAAqB,CAAC;QAEtB,OAAO,KAAK,CAAC,SAAS,IAAI,aAAa,GAAG,UAAU,CAAA;IACtD,CAAC;IAED,MAAM,CAAC,qBAAqB,CAAC,KAAe;QAC1C,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,OAAO,EAAE,KAAK,CAAC,OAAO;gBACpB,CAAC,CAAC;oBACE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI;oBACxB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO;oBAC9B,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;iBAC3B;gBACH,CAAC,CAAC,SAAS;SACd,CAAA;IACH,CAAC;;AAlMH,wDAmMC;AAlMgB,+BAAQ,GAAsC;IAC3D,6BAA6B;IAC7B,kBAAkB,EAAE;QAClB,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,gCAAgC;QACzC,WAAW,EAAE,oBAAoB;QACjC,SAAS,EAAE,KAAK;KACjB;IACD,yBAAyB,EAAE;QACzB,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,mDAAmD;QAC5D,WAAW,EAAE,iBAAiB;QAC9B,SAAS,EAAE,KAAK;KACjB;IACD,qBAAqB,EAAE;QACrB,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,0CAA0C;QACnD,WAAW,EAAE,uBAAuB;QACpC,SAAS,EAAE,KAAK;KACjB;IACD,yBAAyB,EAAE;QACzB,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,qDAAqD;QAC9D,WAAW,EAAE,yBAAyB;QACtC,SAAS,EAAE,KAAK;KACjB;IACD,uBAAuB,EAAE;QACvB,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,kCAAkC;QAC3C,WAAW,EAAE,oBAAoB;QACjC,SAAS,EAAE,KAAK;KACjB;IAED,6BAA6B;IAC7B,YAAY,EAAE;QACZ,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,2BAA2B;QACpC,WAAW,EAAE,gBAAgB;QAC7B,SAAS,EAAE,IAAI;KAChB;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,mBAAmB;QAC5B,WAAW,EAAE,UAAU;QACvB,SAAS,EAAE,IAAI;KAChB;IAED,4BAA4B;IAC5B,YAAY,EAAE;QACZ,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,kBAAkB;QAC3B,WAAW,EAAE,oBAAoB;QACjC,SAAS,EAAE,KAAK;KACjB;IACD,gBAAgB,EAAE;QAChB,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,sBAAsB;QAC/B,WAAW,EAAE,gBAAgB;QAC7B,SAAS,EAAE,IAAI;KAChB;IACD,cAAc,EAAE;QACd,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,gBAAgB;QACzB,WAAW,EAAE,gBAAgB;QAC7B,SAAS,EAAE,KAAK;KACjB;IACD,eAAe,EAAE;QACf,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,iBAAiB;QAC1B,WAAW,EAAE,cAAc;QAC3B,SAAS,EAAE,KAAK;KACjB;CACF,CAAA;AA4HH,MAAa,yBAAyB;IAIpC,YAAY,aAAqB,CAAC,EAAE,YAAoB,IAAI;QAC1D,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,SAA2B,EAC3B,OAAoD;QAEpD,IAAI,SAAS,GAAoB,IAAI,CAAA;QAErC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;YAC5D,IAAI,CAAC;gBACH,OAAO,MAAM,SAAS,EAAE,CAAA;YAC1B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,WAAW,GAAG,sBAAsB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;gBAC7D,SAAS,GAAG,WAAW,CAAA;gBAEvB,0BAA0B;gBAC1B,OAAO,CAAC,KAAK,CACX,mBAAmB,EACnB,sBAAsB,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAC1D,CAAA;gBAED,IACE,CAAC,sBAAsB,CAAC,WAAW,CACjC,WAAW,EACX,OAAO,EACP,IAAI,CAAC,UAAU,CAChB,EACD,CAAC;oBACD,MAAM,WAAW,CAAA;gBACnB,CAAC;gBAED,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;oBAC9B,MAAM,KAAK,GAAG,sBAAsB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;oBAC3D,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,WAAW,EAAE,OAAO,GAAG,CAAC,CAAC,CAAA;oBAEnC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;gBAC5D,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,SAAS,IAAI,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;IAC1D,CAAC;CACF;AAjDD,8DAiDC;AAED,uDAAuD;AAChD,MAAM,iBAAiB,GAAG,CAC/B,EAA8B,EAC9B,UAII,EAAE,EACN,EAAE;IACF,MAAM,YAAY,GAAG,IAAI,yBAAyB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IAEtE,OAAO,KAAK,EAAE,GAAG,IAAO,EAAc,EAAE;;QACtC,IAAI,CAAC;YACH,OAAO,MAAM,YAAY,CAAC,gBAAgB,CACxC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EACjB,OAAO,CAAC,OAAO,CAChB,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,WAAW,GAAG,sBAAsB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;YAC7D,MAAA,OAAO,CAAC,OAAO,wDAAG,WAAW,CAAC,CAAA;YAC9B,MAAM,WAAW,CAAA;QACnB,CAAC;IACH,CAAC,CAAA;AACH,CAAC,CAAA;AAtBY,QAAA,iBAAiB,qBAsB7B;AAEM,MAAM,gBAAgB,GAAG,CAAC,KAAU,EAAW,EAAE;IACtD,MAAM,WAAW,GAAG,sBAAsB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IAC7D,OAAO,WAAW,CAAC,SAAS,CAAA;AAC9B,CAAC,CAAA;AAHY,QAAA,gBAAgB,oBAG5B;AAEM,MAAM,mBAAmB,GAAG,CAAC,KAAU,EAAU,EAAE;IACxD,MAAM,WAAW,GAAG,sBAAsB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IAC7D,OAAO,WAAW,CAAC,WAAW,CAAA;AAChC,CAAC,CAAA;AAHY,QAAA,mBAAmB,uBAG/B"}
@@ -0,0 +1,47 @@
1
+ import type { GeocodeResult } from './types';
2
+ interface BatchGeocodeRequest {
3
+ addresses: string[];
4
+ onProgress?: (completed: number, total: number) => void;
5
+ maxConcurrent?: number;
6
+ }
7
+ interface BatchGeocodeResult {
8
+ successful: Array<{
9
+ address: string;
10
+ result: GeocodeResult;
11
+ }>;
12
+ failed: Array<{
13
+ address: string;
14
+ error: string;
15
+ }>;
16
+ }
17
+ export declare class GeocodingService {
18
+ private geocoder;
19
+ private cache;
20
+ private readonly cacheTTL;
21
+ constructor();
22
+ private ensureGeocoder;
23
+ private generateCacheKey;
24
+ private getCachedResult;
25
+ private setCachedResult;
26
+ private convertGeocoderError;
27
+ geocodeAddress(address: string, options?: {
28
+ useCache?: boolean;
29
+ region?: string;
30
+ language?: string;
31
+ }): Promise<GeocodeResult[]>;
32
+ reverseGeocode(lat: number, lng: number, options?: {
33
+ useCache?: boolean;
34
+ language?: string;
35
+ }): Promise<GeocodeResult[]>;
36
+ batchGeocode({ addresses, onProgress, maxConcurrent, }: BatchGeocodeRequest): Promise<BatchGeocodeResult>;
37
+ clearCache(): void;
38
+ getCacheSize(): number;
39
+ getCacheStats(): {
40
+ size: number;
41
+ hits: number;
42
+ misses: number;
43
+ };
44
+ }
45
+ export declare const geocodingService: GeocodingService;
46
+ export {};
47
+ //# sourceMappingURL=geocoding-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geocoding-service.d.ts","sourceRoot":"","sources":["../../../src/lib/google-maps/geocoding-service.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,SAAS,CAAA;AAE5D,UAAU,mBAAmB;IAC3B,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACvD,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,UAAU,kBAAkB;IAC1B,UAAU,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,aAAa,CAAA;KAAE,CAAC,CAAA;IAC7D,MAAM,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAClD;AAQD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,KAAK,CAAyC;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsB;;IAQ/C,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,oBAAoB;IA6CtB,cAAc,CAClB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QACP,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,QAAQ,CAAC,EAAE,MAAM,CAAA;KACb,GACL,OAAO,CAAC,aAAa,EAAE,CAAC;IA0DrB,cAAc,CAClB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;QACP,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;KACb,GACL,OAAO,CAAC,aAAa,EAAE,CAAC;IAoDrB,YAAY,CAAC,EACjB,SAAS,EACT,UAAU,EACV,aAAiB,GAClB,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAoCpD,UAAU,IAAI,IAAI;IAIlB,YAAY,IAAI,MAAM;IAItB,aAAa,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;CAShE;AAGD,eAAO,MAAM,gBAAgB,kBAAyB,CAAA"}
@@ -0,0 +1,224 @@
1
+ "use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.geocodingService = exports.GeocodingService = void 0;
5
+ const config_1 = require("./config");
6
+ const utils_1 = require("./utils");
7
+ class GeocodingService {
8
+ constructor() {
9
+ var _a;
10
+ this.geocoder = null;
11
+ this.cache = new Map();
12
+ this.cacheTTL = 24 * 60 * 60 * 1000; // 24 hours in milliseconds
13
+ if (typeof window !== 'undefined' && ((_a = window.google) === null || _a === void 0 ? void 0 : _a.maps)) {
14
+ this.geocoder = new google.maps.Geocoder();
15
+ }
16
+ }
17
+ ensureGeocoder() {
18
+ var _a;
19
+ if (!this.geocoder && ((_a = window.google) === null || _a === void 0 ? void 0 : _a.maps)) {
20
+ this.geocoder = new google.maps.Geocoder();
21
+ }
22
+ if (!this.geocoder) {
23
+ throw new Error('Google Maps Geocoder not available');
24
+ }
25
+ return this.geocoder;
26
+ }
27
+ generateCacheKey(address) {
28
+ return `geocode:${address.trim().toLowerCase()}`;
29
+ }
30
+ getCachedResult(address) {
31
+ const cacheKey = this.generateCacheKey(address);
32
+ const cached = this.cache.get(cacheKey);
33
+ if (!cached)
34
+ return null;
35
+ const now = Date.now();
36
+ if (now - cached.timestamp > cached.ttl) {
37
+ this.cache.delete(cacheKey);
38
+ return null;
39
+ }
40
+ return cached.result;
41
+ }
42
+ setCachedResult(address, result) {
43
+ const cacheKey = this.generateCacheKey(address);
44
+ this.cache.set(cacheKey, {
45
+ result,
46
+ timestamp: Date.now(),
47
+ ttl: this.cacheTTL,
48
+ });
49
+ }
50
+ convertGeocoderError(status) {
51
+ const errorMap = {
52
+ [google.maps.GeocoderStatus.ZERO_RESULTS]: {
53
+ code: 'ZERO_RESULTS',
54
+ message: '未找到匹配的地址结果',
55
+ },
56
+ [google.maps.GeocoderStatus.OVER_QUERY_LIMIT]: {
57
+ code: 'OVER_QUERY_LIMIT',
58
+ message: '查询次数超过限制,请稍后重试',
59
+ },
60
+ [google.maps.GeocoderStatus.REQUEST_DENIED]: {
61
+ code: 'REQUEST_DENIED',
62
+ message: '请求被拒绝,请检查API密钥配置',
63
+ },
64
+ [google.maps.GeocoderStatus.INVALID_REQUEST]: {
65
+ code: 'INVALID_REQUEST',
66
+ message: '请求格式无效',
67
+ },
68
+ [google.maps.GeocoderStatus.UNKNOWN_ERROR]: {
69
+ code: 'UNKNOWN_ERROR',
70
+ message: '发生未知错误,请重试',
71
+ },
72
+ [google.maps.GeocoderStatus.ERROR]: {
73
+ code: 'UNKNOWN_ERROR',
74
+ message: '服务器错误,请重试',
75
+ },
76
+ [google.maps.GeocoderStatus.OK]: {
77
+ code: 'UNKNOWN_ERROR',
78
+ message: '成功',
79
+ },
80
+ };
81
+ const error = errorMap[status] || errorMap[google.maps.GeocoderStatus.UNKNOWN_ERROR];
82
+ return Object.assign(Object.assign({}, error), { status });
83
+ }
84
+ async geocodeAddress(address, options = {}) {
85
+ if (!(0, config_1.validateApiKey)()) {
86
+ throw new Error('Google Maps API key is not configured');
87
+ }
88
+ if (!address || !address.trim()) {
89
+ throw new Error('Address is required for geocoding');
90
+ }
91
+ const { useCache = true, region = 'cn', language = 'en' } = options;
92
+ // Check cache first
93
+ if (useCache) {
94
+ const cached = this.getCachedResult(address);
95
+ if (cached) {
96
+ return [cached];
97
+ }
98
+ }
99
+ const geocoder = this.ensureGeocoder();
100
+ try {
101
+ const response = await geocoder.geocode({
102
+ address: address.trim(),
103
+ region,
104
+ language,
105
+ });
106
+ if (response.results.length === 0) {
107
+ throw this.convertGeocoderError(google.maps.GeocoderStatus.ZERO_RESULTS);
108
+ }
109
+ // Filter results to China mainland if specified
110
+ const filteredResults = response.results.filter((result) => {
111
+ const location = result.geometry.location;
112
+ return (0, utils_1.isWithinChinaBounds)(location.lat(), location.lng());
113
+ });
114
+ if (filteredResults.length === 0) {
115
+ throw new Error('No results found within China mainland bounds');
116
+ }
117
+ const geocodeResults = filteredResults.map(utils_1.parseGoogleGeocoderResult);
118
+ // Cache the first result
119
+ if (useCache && geocodeResults.length > 0) {
120
+ this.setCachedResult(address, geocodeResults[0]);
121
+ }
122
+ return geocodeResults;
123
+ }
124
+ catch (error) {
125
+ if (error instanceof Error) {
126
+ throw error;
127
+ }
128
+ throw this.convertGeocoderError(google.maps.GeocoderStatus.UNKNOWN_ERROR);
129
+ }
130
+ }
131
+ async reverseGeocode(lat, lng, options = {}) {
132
+ if (!(0, config_1.validateApiKey)()) {
133
+ throw new Error('Google Maps API key is not configured');
134
+ }
135
+ if (!(0, utils_1.isWithinChinaBounds)(lat, lng)) {
136
+ throw new Error('Coordinates are outside China mainland bounds');
137
+ }
138
+ const { useCache = true, language = 'en' } = options;
139
+ const cacheKey = `reverse:${lat.toFixed(6)},${lng.toFixed(6)}`;
140
+ // Check cache first
141
+ if (useCache) {
142
+ const cached = this.cache.get(cacheKey);
143
+ if (cached && Date.now() - cached.timestamp <= cached.ttl) {
144
+ return [cached.result];
145
+ }
146
+ }
147
+ const geocoder = this.ensureGeocoder();
148
+ try {
149
+ const response = await geocoder.geocode({
150
+ location: { lat, lng },
151
+ language,
152
+ });
153
+ if (response.results.length === 0) {
154
+ throw this.convertGeocoderError(google.maps.GeocoderStatus.ZERO_RESULTS);
155
+ }
156
+ const geocodeResults = response.results.map(utils_1.parseGoogleGeocoderResult);
157
+ // Cache the first result
158
+ if (useCache && geocodeResults.length > 0) {
159
+ this.cache.set(cacheKey, {
160
+ result: geocodeResults[0],
161
+ timestamp: Date.now(),
162
+ ttl: this.cacheTTL,
163
+ });
164
+ }
165
+ return geocodeResults;
166
+ }
167
+ catch (error) {
168
+ if (error instanceof Error) {
169
+ throw error;
170
+ }
171
+ throw this.convertGeocoderError(google.maps.GeocoderStatus.UNKNOWN_ERROR);
172
+ }
173
+ }
174
+ async batchGeocode({ addresses, onProgress, maxConcurrent = 5, }) {
175
+ const successful = [];
176
+ const failed = [];
177
+ const processAddress = async (address) => {
178
+ try {
179
+ const results = await this.geocodeAddress(address);
180
+ if (results.length > 0) {
181
+ successful.push({ address, result: results[0] });
182
+ }
183
+ else {
184
+ failed.push({ address, error: 'No results found' });
185
+ }
186
+ }
187
+ catch (error) {
188
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
189
+ failed.push({ address, error: errorMessage });
190
+ }
191
+ };
192
+ // Process addresses in batches
193
+ const batches = [];
194
+ for (let i = 0; i < addresses.length; i += maxConcurrent) {
195
+ batches.push(addresses.slice(i, i + maxConcurrent));
196
+ }
197
+ let completed = 0;
198
+ for (const batch of batches) {
199
+ await Promise.all(batch.map(processAddress));
200
+ completed += batch.length;
201
+ onProgress === null || onProgress === void 0 ? void 0 : onProgress(completed, addresses.length);
202
+ }
203
+ return { successful, failed };
204
+ }
205
+ clearCache() {
206
+ this.cache.clear();
207
+ }
208
+ getCacheSize() {
209
+ return this.cache.size;
210
+ }
211
+ getCacheStats() {
212
+ // This is a simplified version - in a real implementation,
213
+ // you'd track hits and misses
214
+ return {
215
+ size: this.cache.size,
216
+ hits: 0,
217
+ misses: 0,
218
+ };
219
+ }
220
+ }
221
+ exports.GeocodingService = GeocodingService;
222
+ // Export a singleton instance
223
+ exports.geocodingService = new GeocodingService();
224
+ //# sourceMappingURL=geocoding-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geocoding-service.js","sourceRoot":"","sources":["../../../src/lib/google-maps/geocoding-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { Loader } from '@googlemaps/js-api-loader';
2
+ import { type GoogleMapsLibrary } from './config';
3
+ interface UseGoogleMapsOptions {
4
+ libraries?: GoogleMapsLibrary[];
5
+ onLoad?: () => void;
6
+ onError?: (error: Error) => void;
7
+ }
8
+ interface UseGoogleMapsReturn {
9
+ isLoaded: boolean;
10
+ isLoading: boolean;
11
+ error: Error | null;
12
+ loader: Loader | null;
13
+ }
14
+ export declare const useGoogleMaps: (options?: UseGoogleMapsOptions) => UseGoogleMapsReturn;
15
+ interface UseGoogleMapOptions extends google.maps.MapOptions {
16
+ onMapLoad?: (map: google.maps.Map) => void;
17
+ onMapError?: (error: Error) => void;
18
+ }
19
+ export declare const useGoogleMap: (containerRef: React.RefObject<HTMLElement | null>, options?: UseGoogleMapOptions) => {
20
+ map: google.maps.Map | null;
21
+ isLoaded: boolean;
22
+ error: Error | null;
23
+ };
24
+ export declare const useGeocode: () => {
25
+ geocodeAddress: (address: string, options?: {
26
+ useCache?: boolean;
27
+ }) => Promise<google.maps.GeocoderResult[]>;
28
+ reverseGeocode: (lat: number, lng: number) => Promise<google.maps.GeocoderResult[]>;
29
+ isGeocoding: boolean;
30
+ isReady: boolean;
31
+ error: Error | null;
32
+ clearError: () => void;
33
+ };
34
+ export {};
35
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/lib/google-maps/hooks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAElD,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,UAAU,CAAA;AAYjB,UAAU,oBAAoB;IAC5B,SAAS,CAAC,EAAE,iBAAiB,EAAE,CAAA;IAC/B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;CACjC;AAED,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAoBD,eAAO,MAAM,aAAa,GACxB,UAAS,oBAAyB,KACjC,mBA0EF,CAAA;AAED,UAAU,mBAAoB,SAAQ,MAAM,CAAC,IAAI,CAAC,UAAU;IAC1D,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,CAAA;IAC1C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;CACpC;AAED,eAAO,MAAM,YAAY,GACvB,cAAc,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EACjD,UAAS,mBAAwB;;;;CAkClC,CAAA;AAED,eAAO,MAAM,UAAU;8BAOR,MAAM,YACL;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,KAC/B,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;0BAqC5B,MAAM,OAAO,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;;;;;CA4C1E,CAAA"}