@nx-ddd/google 19.2.1 → 19.3.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.
Files changed (50) hide show
  1. package/fesm2022/nx-ddd-google-places.mjs +212 -0
  2. package/fesm2022/nx-ddd-google-places.mjs.map +1 -0
  3. package/fesm2022/nx-ddd-google-search.mjs +38 -0
  4. package/fesm2022/nx-ddd-google-search.mjs.map +1 -0
  5. package/fesm2022/nx-ddd-google.mjs +150 -0
  6. package/fesm2022/nx-ddd-google.mjs.map +1 -0
  7. package/index.d.ts +104 -0
  8. package/package.json +23 -13
  9. package/places/index.d.ts +112 -0
  10. package/search/index.d.ts +22 -0
  11. package/README.md +0 -11
  12. package/src/index.d.ts +0 -1
  13. package/src/index.js +0 -5
  14. package/src/index.js.map +0 -1
  15. package/src/lib/google.config.d.ts +0 -15
  16. package/src/lib/google.config.js +0 -6
  17. package/src/lib/google.config.js.map +0 -1
  18. package/src/lib/google.module.d.ts +0 -17
  19. package/src/lib/google.module.js +0 -25
  20. package/src/lib/google.module.js.map +0 -1
  21. package/src/lib/google.service.d.ts +0 -29
  22. package/src/lib/google.service.impl.d.ts +0 -34
  23. package/src/lib/google.service.impl.js +0 -132
  24. package/src/lib/google.service.impl.js.map +0 -1
  25. package/src/lib/google.service.js +0 -12
  26. package/src/lib/google.service.js.map +0 -1
  27. package/src/lib/index.d.ts +0 -4
  28. package/src/lib/index.js +0 -8
  29. package/src/lib/index.js.map +0 -1
  30. package/src/lib/places/index.d.ts +0 -3
  31. package/src/lib/places/index.js +0 -7
  32. package/src/lib/places/index.js.map +0 -1
  33. package/src/lib/places/places.config.d.ts +0 -4
  34. package/src/lib/places/places.config.js +0 -15
  35. package/src/lib/places/places.config.js.map +0 -1
  36. package/src/lib/places/places.interface.d.ts +0 -49
  37. package/src/lib/places/places.interface.js +0 -3
  38. package/src/lib/places/places.interface.js.map +0 -1
  39. package/src/lib/places/places.service.d.ts +0 -52
  40. package/src/lib/places/places.service.js +0 -211
  41. package/src/lib/places/places.service.js.map +0 -1
  42. package/src/lib/search/index.d.ts +0 -1
  43. package/src/lib/search/index.js +0 -5
  44. package/src/lib/search/index.js.map +0 -1
  45. package/src/lib/search/search.service.d.ts +0 -17
  46. package/src/lib/search/search.service.js +0 -37
  47. package/src/lib/search/search.service.js.map +0 -1
  48. package/src/test-setup.d.ts +0 -0
  49. package/src/test-setup.js +0 -1
  50. package/src/test-setup.js.map +0 -1
@@ -0,0 +1,212 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, inject, Injectable } from '@angular/core';
3
+ import { HttpClient } from '@angular/common/http';
4
+ import { lastValueFrom } from 'rxjs';
5
+
6
+ const GOOGLE_PLACES_CONFIG = new InjectionToken('GOOGLE_PLACES_CONFIG');
7
+ function provideGooglePlacesConfig(useFactory) {
8
+ return [
9
+ {
10
+ provide: GOOGLE_PLACES_CONFIG,
11
+ useFactory
12
+ }
13
+ ];
14
+ }
15
+
16
+ class GooglePlacesService {
17
+ http = inject(HttpClient);
18
+ config = inject(GOOGLE_PLACES_CONFIG);
19
+ /**
20
+ * Transform API response from snake_case to camelCase
21
+ */
22
+ transformPlaceSearchResult(result) {
23
+ return {
24
+ placeId: result.place_id,
25
+ name: result.name,
26
+ formattedAddress: result.formatted_address,
27
+ geometry: result.geometry,
28
+ photos: result.photos?.map((photo) => ({
29
+ photoReference: photo.photo_reference,
30
+ height: photo.height,
31
+ width: photo.width,
32
+ htmlAttributions: photo.html_attributions
33
+ })),
34
+ rating: result.rating,
35
+ userRatingsTotal: result.user_ratings_total
36
+ };
37
+ }
38
+ /**
39
+ * Transform API response from snake_case to camelCase
40
+ */
41
+ transformPlaceDetailsResult(result) {
42
+ return {
43
+ placeId: result.place_id,
44
+ name: result.name,
45
+ formattedAddress: result.formatted_address,
46
+ formattedPhoneNumber: result.formatted_phone_number,
47
+ website: result.website,
48
+ photos: result.photos?.map((photo) => ({
49
+ photoReference: photo.photo_reference,
50
+ height: photo.height,
51
+ width: photo.width,
52
+ htmlAttributions: photo.html_attributions
53
+ })),
54
+ rating: result.rating,
55
+ userRatingsTotal: result.user_ratings_total,
56
+ geometry: result.geometry
57
+ };
58
+ }
59
+ /**
60
+ * Search for places using Google Places Text Search API
61
+ */
62
+ async searchPlaces(query, options = {}) {
63
+ const { location, radius = 50000, limit = 20 } = options;
64
+ try {
65
+ const url = 'https://maps.googleapis.com/maps/api/place/textsearch/json';
66
+ const params = {
67
+ query: query,
68
+ key: this.config.apiKey,
69
+ language: this.config.language || 'ja'
70
+ };
71
+ if (location) {
72
+ params.location = location;
73
+ params.radius = radius;
74
+ }
75
+ const response = await lastValueFrom(this.http.get(url, { params }));
76
+ if (response.status !== 'OK') {
77
+ throw new Error(`Places API error: ${response.status}`);
78
+ }
79
+ return response.results
80
+ .slice(0, limit)
81
+ .map((result) => this.transformPlaceSearchResult(result));
82
+ }
83
+ catch (error) {
84
+ console.error('Error searching places:', error);
85
+ throw error;
86
+ }
87
+ }
88
+ /**
89
+ * Get detailed information about a place using Place Details API
90
+ */
91
+ async getPlaceDetails(placeId, fields) {
92
+ try {
93
+ const url = 'https://maps.googleapis.com/maps/api/place/details/json';
94
+ const defaultFields = [
95
+ 'place_id',
96
+ 'name',
97
+ 'formatted_address',
98
+ 'formatted_phone_number',
99
+ 'website',
100
+ 'photos',
101
+ 'rating',
102
+ 'user_ratings_total',
103
+ 'geometry'
104
+ ];
105
+ const params = {
106
+ place_id: placeId,
107
+ fields: (fields || defaultFields).join(','),
108
+ key: this.config.apiKey,
109
+ language: this.config.language || 'ja'
110
+ };
111
+ const response = await lastValueFrom(this.http.get(url, { params }));
112
+ if (response.status !== 'OK') {
113
+ throw new Error(`Place Details API error: ${response.status}`);
114
+ }
115
+ return this.transformPlaceDetailsResult(response.result);
116
+ }
117
+ catch (error) {
118
+ console.error('Error getting place details:', error);
119
+ throw error;
120
+ }
121
+ }
122
+ /**
123
+ * Get place photo as Blob using Place Photos API
124
+ */
125
+ async getPlacePhoto(photoReference, maxWidth = 1600) {
126
+ try {
127
+ const url = 'https://maps.googleapis.com/maps/api/place/photo';
128
+ const params = {
129
+ photoreference: photoReference,
130
+ maxwidth: maxWidth.toString(),
131
+ key: this.config.apiKey
132
+ };
133
+ const response = await lastValueFrom(this.http.get(url, {
134
+ params,
135
+ responseType: 'blob'
136
+ }));
137
+ return response;
138
+ }
139
+ catch (error) {
140
+ console.error('Error getting place photo:', error);
141
+ throw error;
142
+ }
143
+ }
144
+ /**
145
+ * Get multiple place photos as Blobs
146
+ */
147
+ async getPlacePhotos(photoReferences, maxWidth = 1600, limit = 5) {
148
+ const results = [];
149
+ const refs = photoReferences.slice(0, limit);
150
+ for (const photoRef of refs) {
151
+ try {
152
+ const blob = await this.getPlacePhoto(photoRef, maxWidth);
153
+ results.push({ photoReference: photoRef, blob });
154
+ }
155
+ catch (error) {
156
+ console.warn(`Failed to fetch photo ${photoRef}:`, error);
157
+ // Continue with other photos even if one fails
158
+ }
159
+ }
160
+ return results;
161
+ }
162
+ /**
163
+ * Search places and get their photos in one operation
164
+ */
165
+ async searchPlacesWithPhotos(query, options = {}) {
166
+ const { location, radius = 50000, maxPlaces = 5, maxPhotosPerPlace = 3, photoMaxWidth = 1600 } = options;
167
+ // Step 1: Search places
168
+ const places = await this.searchPlaces(query, {
169
+ location,
170
+ radius,
171
+ limit: maxPlaces
172
+ });
173
+ const results = [];
174
+ // Step 2: Get details and photos for each place
175
+ for (const place of places) {
176
+ try {
177
+ // Get detailed information
178
+ const details = await this.getPlaceDetails(place.placeId);
179
+ // Get photos if available
180
+ let photos = [];
181
+ if (details.photos && details.photos.length > 0) {
182
+ const photoRefs = details.photos
183
+ .map(photo => photo.photoReference)
184
+ .slice(0, maxPhotosPerPlace);
185
+ photos = await this.getPlacePhotos(photoRefs, photoMaxWidth);
186
+ }
187
+ results.push({
188
+ place: details,
189
+ photos
190
+ });
191
+ }
192
+ catch (error) {
193
+ console.warn(`Failed to process place ${place.placeId}:`, error);
194
+ // Continue with other places
195
+ }
196
+ }
197
+ return results;
198
+ }
199
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: GooglePlacesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
200
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: GooglePlacesService, providedIn: 'root' });
201
+ }
202
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: GooglePlacesService, decorators: [{
203
+ type: Injectable,
204
+ args: [{ providedIn: 'root' }]
205
+ }] });
206
+
207
+ /**
208
+ * Generated bundle index. Do not edit.
209
+ */
210
+
211
+ export { GOOGLE_PLACES_CONFIG, GooglePlacesService, provideGooglePlacesConfig };
212
+ //# sourceMappingURL=nx-ddd-google-places.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nx-ddd-google-places.mjs","sources":["../tmp-esm2022/places/places.config.js","../tmp-esm2022/places/places.service.js","../tmp-esm2022/places/nx-ddd-google-places.js"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nexport const GOOGLE_PLACES_CONFIG = new InjectionToken('GOOGLE_PLACES_CONFIG');\nexport function provideGooglePlacesConfig(useFactory) {\n return [\n {\n provide: GOOGLE_PLACES_CONFIG,\n useFactory\n }\n ];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2VzLmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BueC1kZGQvZ29vZ2xlL3NyYy9saWIvcGxhY2VzL3BsYWNlcy5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUd6RCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLGNBQWMsQ0FBcUIsc0JBQXNCLENBQUMsQ0FBQztBQUVuRyxNQUFNLFVBQVUseUJBQXlCLENBQUMsVUFBb0M7SUFDNUUsT0FBTztRQUNMO1lBQ0UsT0FBTyxFQUFFLG9CQUFvQjtZQUM3QixVQUFVO1NBQ1g7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuLCBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR29vZ2xlUGxhY2VzQ29uZmlnIH0gZnJvbSAnLi9wbGFjZXMuaW50ZXJmYWNlJztcblxuZXhwb3J0IGNvbnN0IEdPT0dMRV9QTEFDRVNfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPEdvb2dsZVBsYWNlc0NvbmZpZz4oJ0dPT0dMRV9QTEFDRVNfQ09ORklHJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlR29vZ2xlUGxhY2VzQ29uZmlnKHVzZUZhY3Rvcnk6ICgpID0+IEdvb2dsZVBsYWNlc0NvbmZpZyk6IFByb3ZpZGVyW10ge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IEdPT0dMRV9QTEFDRVNfQ09ORklHLFxuICAgICAgdXNlRmFjdG9yeVxuICAgIH1cbiAgXTtcbn0iXX0=","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { lastValueFrom } from 'rxjs';\nimport { GOOGLE_PLACES_CONFIG } from './places.config';\nimport * as i0 from \"@angular/core\";\nexport class GooglePlacesService {\n http = inject(HttpClient);\n config = inject(GOOGLE_PLACES_CONFIG);\n /**\n * Transform API response from snake_case to camelCase\n */\n transformPlaceSearchResult(result) {\n return {\n placeId: result.place_id,\n name: result.name,\n formattedAddress: result.formatted_address,\n geometry: result.geometry,\n photos: result.photos?.map((photo) => ({\n photoReference: photo.photo_reference,\n height: photo.height,\n width: photo.width,\n htmlAttributions: photo.html_attributions\n })),\n rating: result.rating,\n userRatingsTotal: result.user_ratings_total\n };\n }\n /**\n * Transform API response from snake_case to camelCase\n */\n transformPlaceDetailsResult(result) {\n return {\n placeId: result.place_id,\n name: result.name,\n formattedAddress: result.formatted_address,\n formattedPhoneNumber: result.formatted_phone_number,\n website: result.website,\n photos: result.photos?.map((photo) => ({\n photoReference: photo.photo_reference,\n height: photo.height,\n width: photo.width,\n htmlAttributions: photo.html_attributions\n })),\n rating: result.rating,\n userRatingsTotal: result.user_ratings_total,\n geometry: result.geometry\n };\n }\n /**\n * Search for places using Google Places Text Search API\n */\n async searchPlaces(query, options = {}) {\n const { location, radius = 50000, limit = 20 } = options;\n try {\n const url = 'https://maps.googleapis.com/maps/api/place/textsearch/json';\n const params = {\n query: query,\n key: this.config.apiKey,\n language: this.config.language || 'ja'\n };\n if (location) {\n params.location = location;\n params.radius = radius;\n }\n const response = await lastValueFrom(this.http.get(url, { params }));\n if (response.status !== 'OK') {\n throw new Error(`Places API error: ${response.status}`);\n }\n return response.results\n .slice(0, limit)\n .map((result) => this.transformPlaceSearchResult(result));\n }\n catch (error) {\n console.error('Error searching places:', error);\n throw error;\n }\n }\n /**\n * Get detailed information about a place using Place Details API\n */\n async getPlaceDetails(placeId, fields) {\n try {\n const url = 'https://maps.googleapis.com/maps/api/place/details/json';\n const defaultFields = [\n 'place_id',\n 'name',\n 'formatted_address',\n 'formatted_phone_number',\n 'website',\n 'photos',\n 'rating',\n 'user_ratings_total',\n 'geometry'\n ];\n const params = {\n place_id: placeId,\n fields: (fields || defaultFields).join(','),\n key: this.config.apiKey,\n language: this.config.language || 'ja'\n };\n const response = await lastValueFrom(this.http.get(url, { params }));\n if (response.status !== 'OK') {\n throw new Error(`Place Details API error: ${response.status}`);\n }\n return this.transformPlaceDetailsResult(response.result);\n }\n catch (error) {\n console.error('Error getting place details:', error);\n throw error;\n }\n }\n /**\n * Get place photo as Blob using Place Photos API\n */\n async getPlacePhoto(photoReference, maxWidth = 1600) {\n try {\n const url = 'https://maps.googleapis.com/maps/api/place/photo';\n const params = {\n photoreference: photoReference,\n maxwidth: maxWidth.toString(),\n key: this.config.apiKey\n };\n const response = await lastValueFrom(this.http.get(url, {\n params,\n responseType: 'blob'\n }));\n return response;\n }\n catch (error) {\n console.error('Error getting place photo:', error);\n throw error;\n }\n }\n /**\n * Get multiple place photos as Blobs\n */\n async getPlacePhotos(photoReferences, maxWidth = 1600, limit = 5) {\n const results = [];\n const refs = photoReferences.slice(0, limit);\n for (const photoRef of refs) {\n try {\n const blob = await this.getPlacePhoto(photoRef, maxWidth);\n results.push({ photoReference: photoRef, blob });\n }\n catch (error) {\n console.warn(`Failed to fetch photo ${photoRef}:`, error);\n // Continue with other photos even if one fails\n }\n }\n return results;\n }\n /**\n * Search places and get their photos in one operation\n */\n async searchPlacesWithPhotos(query, options = {}) {\n const { location, radius = 50000, maxPlaces = 5, maxPhotosPerPlace = 3, photoMaxWidth = 1600 } = options;\n // Step 1: Search places\n const places = await this.searchPlaces(query, {\n location,\n radius,\n limit: maxPlaces\n });\n const results = [];\n // Step 2: Get details and photos for each place\n for (const place of places) {\n try {\n // Get detailed information\n const details = await this.getPlaceDetails(place.placeId);\n // Get photos if available\n let photos = [];\n if (details.photos && details.photos.length > 0) {\n const photoRefs = details.photos\n .map(photo => photo.photoReference)\n .slice(0, maxPhotosPerPlace);\n photos = await this.getPlacePhotos(photoRefs, photoMaxWidth);\n }\n results.push({\n place: details,\n photos\n });\n }\n catch (error) {\n console.warn(`Failed to process place ${place.placeId}:`, error);\n // Continue with other places\n }\n }\n return results;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: GooglePlacesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: GooglePlacesService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: GooglePlacesService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2VzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AbngtZGRkL2dvb2dsZS9zcmMvbGliL3BsYWNlcy9wbGFjZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFTdkQsTUFBTSxPQUFPLG1CQUFtQjtJQUNiLElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBRXZEOztPQUVHO0lBQ0ssMEJBQTBCLENBQUMsTUFBVztRQUM1QyxPQUFPO1lBQ0wsT0FBTyxFQUFFLE1BQU0sQ0FBQyxRQUFRO1lBQ3hCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtZQUNqQixnQkFBZ0IsRUFBRSxNQUFNLENBQUMsaUJBQWlCO1lBQzFDLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtZQUN6QixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzFDLGNBQWMsRUFBRSxLQUFLLENBQUMsZUFBZTtnQkFDckMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO2dCQUNwQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7Z0JBQ2xCLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7YUFDMUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1lBQ3JCLGdCQUFnQixFQUFFLE1B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Q0gsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7dUdBaFBVLG1CQUFtQjsyR0FBbkIsbUJBQW1CLGNBRE4sTUFBTTs7MkZBQ25CLG1CQUFtQjtrQkFEL0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBsYXN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBHT09HTEVfUExBQ0VTX0NPTkZJRyB9IGZyb20gJy4vcGxhY2VzLmNvbmZpZyc7XG5pbXBvcnQgeyBcbiAgUGxhY2VTZWFyY2hSZXN1bHQsIFxuICBQbGFjZURldGFpbHNSZXN1bHQsIFxuICBQbGFjZVNlYXJjaFJlc3BvbnNlLCBcbiAgUGxhY2VEZXRhaWxzUmVzcG9uc2UgXG59IGZyb20gJy4vcGxhY2VzLmludGVyZmFjZSc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgR29vZ2xlUGxhY2VzU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWcgPSBpbmplY3QoR09PR0xFX1BMQUNFU19DT05GSUcpO1xuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm0gQVBJIHJlc3BvbnNlIGZyb20gc25ha2VfY2FzZSB0byBjYW1lbENhc2VcbiAgICovXG4gIHByaXZhdGUgdHJhbnNmb3JtUGxhY2VTZWFyY2hSZXN1bHQocmVzdWx0OiBhbnkpOiBQbGFjZVNlYXJjaFJlc3VsdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBsYWNlSWQ6IHJlc3VsdC5wbGFjZV9pZCxcbiAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxuICAgICAgZm9ybWF0dGVkQWRkcmVzczogcmVzdWx0LmZvcm1hdHRlZF9hZGRyZXNzLFxuICAgICAgZ2VvbWV0cnk6IHJlc3VsdC5nZW9tZXRyeSxcbiAgICAgIHBob3RvczogcmVzdWx0LnBob3Rvcz8ubWFwKChwaG90bzogYW55KSA9PiAoe1xuICAgICAgICBwaG90b1JlZmVyZW5jZTogcGhvdG8ucGhvdG9fcmVmZXJlbmNlLFxuICAgICAgICBoZWlnaHQ6IHBob3RvLmhlaWdodCxcbiAgICAgICAgd2lkdGg6IHBob3RvLndpZHRoLFxuICAgICAgICBodG1sQXR0cmlidXRpb25zOiBwaG90by5odG1sX2F0dHJpYnV0aW9uc1xuICAgICAgfSkpLFxuICAgICAgcmF0aW5nOiByZXN1bHQucmF0aW5nLFxuICAgICAgdXNlclJhdGluZ3NUb3RhbDogcmVzdWx0LnVzZXJfcmF0aW5nc190b3RhbFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIEFQSSByZXNwb25zZSBmcm9tIHNuYWtlX2Nhc2UgdG8gY2FtZWxDYXNlXG4gICAqL1xuICBwcml2YXRlIHRyYW5zZm9ybVBsYWNlRGV0YWlsc1Jlc3VsdChyZXN1bHQ6IGFueSk6IFBsYWNlRGV0YWlsc1Jlc3VsdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBsYWNlSWQ6IHJlc3VsdC5wbGFjZV9pZCxcbiAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxuICAgICAgZm9ybWF0dGVkQWRkcmVzczogcmVzdWx0LmZvcm1hdHRlZF9hZGRyZXNzLFxuICAgICAgZm9ybWF0dGVkUGhvbmVOdW1iZXI6IHJlc3VsdC5mb3JtYXR0ZWRfcGhvbmVfbnVtYmVyLFxuICAgICAgd2Vic2l0ZTogcmVzdWx0LndlYnNpdGUsXG4gICAgICBwaG90b3M6IHJlc3VsdC5waG90b3M/Lm1hcCgocGhvdG86IGFueSkgPT4gKHtcbiAgICAgICAgcGhvdG9SZWZlcmVuY2U6IHBob3RvLnBob3RvX3JlZmVyZW5jZSxcbiAgICAgICAgaGVpZ2h0OiBwaG90by5oZWlnaHQsXG4gICAgICAgIHdpZHRoOiBwaG90by53aWR0aCxcbiAgICAgICAgaHRtbEF0dHJpYnV0aW9uczogcGhvdG8uaHRtbF9hdHRyaWJ1dGlvbnNcbiAgICAgIH0pKSxcbiAgICAgIHJhdGluZzogcmVzdWx0LnJhdGluZyxcbiAgICAgIHVzZXJSYXRpbmdzVG90YWw6IHJlc3VsdC51c2VyX3JhdGluZ3NfdG90YWwsXG4gICAgICBnZW9tZXRyeTogcmVzdWx0Lmdlb21ldHJ5XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggZm9yIHBsYWNlcyB1c2luZyBHb29nbGUgUGxhY2VzIFRleHQgU2VhcmNoIEFQSVxuICAgKi9cbiAgYXN5bmMgc2VhcmNoUGxhY2VzKHF1ZXJ5OiBzdHJpbmcsIG9wdGlvbnM6IHtcbiAgICBsb2NhdGlvbj86IHN0cmluZztcbiAgICByYWRpdXM/OiBudW1iZXI7XG4gICAgbGltaXQ/OiBudW1iZXI7XG4gIH0gPSB7fSk6IFByb21pc2U8UGxhY2VTZWFyY2hSZXN1bHRbXT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgcmFkaXVzID0gNTAwMDAsXG4gICAgICBsaW1pdCA9IDIwXG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vbWFwcy5nb29nbGVhcGlzLmNvbS9tYXBzL2FwaS9wbGFjZS90ZXh0c2VhcmNoL2pzb24nO1xuICAgICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICAgIHF1ZXJ5OiBxdWVyeSxcbiAgICAgICAga2V5OiB0aGlzLmNvbmZpZy5hcGlLZXksXG4gICAgICAgIGxhbmd1YWdlOiB0aGlzLmNvbmZpZy5sYW5ndWFnZSB8fCAnamEnXG4gICAgICB9O1xuXG4gICAgICBpZiAobG9jYXRpb24pIHtcbiAgICAgICAgcGFyYW1zLmxvY2F0aW9uID0gbG9jYXRpb247XG4gICAgICAgIHBhcmFtcy5yYWRpdXMgPSByYWRpdXM7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbGFzdFZhbHVlRnJvbShcbiAgICAgICAgdGhpcy5odHRwLmdldDxhbnk+KHVybCwgeyBwYXJhbXMgfSlcbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09ICdPSycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQbGFjZXMgQVBJIGVycm9yOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc3VsdHNcbiAgICAgICAgLnNsaWNlKDAsIGxpbWl0KVxuICAgICAgICAubWFwKChyZXN1bHQ6IGFueSkgPT4gdGhpcy50cmFuc2Zvcm1QbGFjZVNlYXJjaFJlc3VsdChyZXN1bHQpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc2VhcmNoaW5nIHBsYWNlczonLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGEgcGxhY2UgdXNpbmcgUGxhY2UgRGV0YWlscyBBUElcbiAgICovXG4gIGFzeW5jIGdldFBsYWNlRGV0YWlscyhwbGFjZUlkOiBzdHJpbmcsIGZpZWxkcz86IHN0cmluZ1tdKTogUHJvbWlzZTxQbGFjZURldGFpbHNSZXN1bHQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vbWFwcy5nb29nbGVhcGlzLmNvbS9tYXBzL2FwaS9wbGFjZS9kZXRhaWxzL2pzb24nO1xuICAgICAgY29uc3QgZGVmYXVsdEZpZWxkcyA9IFtcbiAgICAgICAgJ3BsYWNlX2lkJyxcbiAgICAgICAgJ25hbWUnLFxuICAgICAgICAnZm9ybWF0dGVkX2FkZHJlc3MnLFxuICAgICAgICAnZm9ybWF0dGVkX3Bob25lX251bWJlcicsXG4gICAgICAgICd3ZWJzaXRlJyxcbiAgICAgICAgJ3Bob3RvcycsXG4gICAgICAgICdyYXRpbmcnLFxuICAgICAgICAndXNlcl9yYXRpbmdzX3RvdGFsJyxcbiAgICAgICAgJ2dlb21ldHJ5J1xuICAgICAgXTtcblxuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICBwbGFjZV9pZDogcGxhY2VJZCxcbiAgICAgICAgZmllbGRzOiAoZmllbGRzIHx8IGRlZmF1bHRGaWVsZHMpLmpvaW4oJywnKSxcbiAgICAgICAga2V5OiB0aGlzLmNvbmZpZy5hcGlLZXksXG4gICAgICAgIGxhbmd1YWdlOiB0aGlzLmNvbmZpZy5sYW5ndWFnZSB8fCAnamEnXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGxhc3RWYWx1ZUZyb20oXG4gICAgICAgIHRoaXMuaHR0cC5nZXQ8YW55Pih1cmwsIHsgcGFyYW1zIH0pXG4gICAgICApO1xuXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAnT0snKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUGxhY2UgRGV0YWlscyBBUEkgZXJyb3I6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1QbGFjZURldGFpbHNSZXN1bHQocmVzcG9uc2UucmVzdWx0KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZ2V0dGluZyBwbGFjZSBkZXRhaWxzOicsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcGxhY2UgcGhvdG8gYXMgQmxvYiB1c2luZyBQbGFjZSBQaG90b3MgQVBJXG4gICAqL1xuICBhc3luYyBnZXRQbGFjZVBob3RvKHBob3RvUmVmZXJlbmNlOiBzdHJpbmcsIG1heFdpZHRoID0gMTYwMCk6IFByb21pc2U8QmxvYj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1cmwgPSAnaHR0cHM6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL3BsYWNlL3Bob3RvJztcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgcGhvdG9yZWZlcmVuY2U6IHBob3RvUmVmZXJlbmNlLFxuICAgICAgICBtYXh3aWR0aDogbWF4V2lkdGgudG9TdHJpbmcoKSxcbiAgICAgICAga2V5OiB0aGlzLmNvbmZpZy5hcGlLZXlcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbGFzdFZhbHVlRnJvbShcbiAgICAgICAgdGhpcy5odHRwLmdldCh1cmwsIHsgXG4gICAgICAgICAgcGFyYW1zLCBcbiAgICAgICAgICByZXNwb25zZVR5cGU6ICdibG9iJyBcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZ2V0dGluZyBwbGFjZSBwaG90bzonLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IG11bHRpcGxlIHBsYWNlIHBob3RvcyBhcyBCbG9ic1xuICAgKi9cbiAgYXN5bmMgZ2V0UGxhY2VQaG90b3MoXG4gICAgcGhvdG9SZWZlcmVuY2VzOiBzdHJpbmdbXSwgXG4gICAgbWF4V2lkdGggPSAxNjAwLFxuICAgIGxpbWl0ID0gNVxuICApOiBQcm9taXNlPHsgcGhvdG9SZWZlcmVuY2U6IHN0cmluZzsgYmxvYjogQmxvYiB9W10+IHtcbiAgICBjb25zdCByZXN1bHRzOiB7IHBob3RvUmVmZXJlbmNlOiBzdHJpbmc7IGJsb2I6IEJsb2IgfVtdID0gW107XG4gICAgY29uc3QgcmVmcyA9IHBob3RvUmVmZXJlbmNlcy5zbGljZSgwLCBsaW1pdCk7XG5cbiAgICBmb3IgKGNvbnN0IHBob3RvUmVmIG9mIHJlZnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCB0aGlzLmdldFBsYWNlUGhvdG8ocGhvdG9SZWYsIG1heFdpZHRoKTtcbiAgICAgICAgcmVzdWx0cy5wdXNoKHsgcGhvdG9SZWZlcmVuY2U6IHBob3RvUmVmLCBibG9iIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBGYWlsZWQgdG8gZmV0Y2ggcGhvdG8gJHtwaG90b1JlZn06YCwgZXJyb3IpO1xuICAgICAgICAvLyBDb250aW51ZSB3aXRoIG90aGVyIHBob3RvcyBldmVuIGlmIG9uZSBmYWlsc1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCBwbGFjZXMgYW5kIGdldCB0aGVpciBwaG90b3MgaW4gb25lIG9wZXJhdGlvblxuICAgKi9cbiAgYXN5bmMgc2VhcmNoUGxhY2VzV2l0aFBob3RvcyhcbiAgICBxdWVyeTogc3RyaW5nLCBcbiAgICBvcHRpb25zOiB7XG4gICAgICBsb2NhdGlvbj86IHN0cmluZztcbiAgICAgIHJhZGl1cz86IG51bWJlcjtcbiAgICAgIG1heFBsYWNlcz86IG51bWJlcjtcbiAgICAgIG1heFBob3Rvc1BlclBsYWNlPzogbnVtYmVyO1xuICAgICAgcGhvdG9NYXhXaWR0aD86IG51bWJlcjtcbiAgICB9ID0ge31cbiAgKTogUHJvbWlzZTxBcnJheTx7XG4gICAgcGxhY2U6IFBsYWNlRGV0YWlsc1Jlc3VsdDtcbiAgICBwaG90b3M6IHsgcGhvdG9SZWZlcmVuY2U6IHN0cmluZzsgYmxvYjogQmxvYiB9W107XG4gIH0+PiB7XG4gICAgY29uc3Qge1xuICAgICAgbG9jYXRpb24sXG4gICAgICByYWRpdXMgPSA1MDAwMCxcbiAgICAgIG1heFBsYWNlcyA9IDUsXG4gICAgICBtYXhQaG90b3NQZXJQbGFjZSA9IDMsXG4gICAgICBwaG90b01heFdpZHRoID0gMTYwMFxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgLy8gU3RlcCAxOiBTZWFyY2ggcGxhY2VzXG4gICAgY29uc3QgcGxhY2VzID0gYXdhaXQgdGhpcy5zZWFyY2hQbGFjZXMocXVlcnksIHtcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgcmFkaXVzLFxuICAgICAgbGltaXQ6IG1heFBsYWNlc1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuXG4gICAgLy8gU3RlcCAyOiBHZXQgZGV0YWlscyBhbmQgcGhvdG9zIGZvciBlYWNoIHBsYWNlXG4gICAgZm9yIChjb25zdCBwbGFjZSBvZiBwbGFjZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIEdldCBkZXRhaWxlZCBpbmZvcm1hdGlvblxuICAgICAgICBjb25zdCBkZXRhaWxzID0gYXdhaXQgdGhpcy5nZXRQbGFjZURldGFpbHMocGxhY2UucGxhY2VJZCk7XG4gICAgICAgIFxuICAgICAgICAvLyBHZXQgcGhvdG9zIGlmIGF2YWlsYWJsZVxuICAgICAgICBsZXQgcGhvdG9zOiB7IHBob3RvUmVmZXJlbmNlOiBzdHJpbmc7IGJsb2I6IEJsb2IgfVtdID0gW107XG4gICAgICAgIGlmIChkZXRhaWxzLnBob3RvcyAmJiBkZXRhaWxzLnBob3Rvcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgcGhvdG9SZWZzID0gZGV0YWlscy5waG90b3NcbiAgICAgICAgICAgIC5tYXAocGhvdG8gPT4gcGhvdG8ucGhvdG9SZWZlcmVuY2UpXG4gICAgICAgICAgICAuc2xpY2UoMCwgbWF4UGhvdG9zUGVyUGxhY2UpO1xuICAgICAgICAgIFxuICAgICAgICAgIHBob3RvcyA9IGF3YWl0IHRoaXMuZ2V0UGxhY2VQaG90b3MocGhvdG9SZWZzLCBwaG90b01heFdpZHRoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgcGxhY2U6IGRldGFpbHMsXG4gICAgICAgICAgcGhvdG9zXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBGYWlsZWQgdG8gcHJvY2VzcyBwbGFjZSAke3BsYWNlLnBsYWNlSWR9OmAsIGVycm9yKTtcbiAgICAgICAgLy8gQ29udGludWUgd2l0aCBvdGhlciBwbGFjZXNcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxufSJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibngtZGRkLWdvb2dsZS1wbGFjZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AbngtZGRkL2dvb2dsZS9zcmMvbGliL3BsYWNlcy9ueC1kZGQtZ29vZ2xlLXBsYWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { HttpClient } from '@angular/common/http';
2
+ import * as i0 from '@angular/core';
3
+ import { InjectionToken, inject, Injectable } from '@angular/core';
4
+ import { lastValueFrom } from 'rxjs';
5
+
6
+ const GOOGLE_SEARCH_CONFIG = new InjectionToken('GOOGLE_SEARCH_CONFIG');
7
+ function provideGoogleSearchConfig(useFactory) {
8
+ return { provide: GOOGLE_SEARCH_CONFIG, useFactory };
9
+ }
10
+ class GoogleSearchService {
11
+ http = inject(HttpClient);
12
+ config = inject(GOOGLE_SEARCH_CONFIG);
13
+ async searchByGoogle(q) {
14
+ const url = `https://www.googleapis.com/customsearch/v1`;
15
+ return lastValueFrom(this.http.get(url, {
16
+ params: {
17
+ key: this.config.apiKey,
18
+ cx: this.config.engineId,
19
+ searchType: 'image',
20
+ q: q,
21
+ num: 3
22
+ }
23
+ }));
24
+ }
25
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: GoogleSearchService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
26
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: GoogleSearchService, providedIn: 'root' });
27
+ }
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: GoogleSearchService, decorators: [{
29
+ type: Injectable,
30
+ args: [{ providedIn: 'root' }]
31
+ }] });
32
+
33
+ /**
34
+ * Generated bundle index. Do not edit.
35
+ */
36
+
37
+ export { GOOGLE_SEARCH_CONFIG, GoogleSearchService, provideGoogleSearchConfig };
38
+ //# sourceMappingURL=nx-ddd-google-search.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nx-ddd-google-search.mjs","sources":["../tmp-esm2022/search/search.service.js","../tmp-esm2022/search/nx-ddd-google-search.js"],"sourcesContent":["import { HttpClient } from \"@angular/common/http\";\nimport { inject, Injectable, InjectionToken } from \"@angular/core\";\nimport { lastValueFrom } from \"rxjs\";\nimport * as i0 from \"@angular/core\";\nexport const GOOGLE_SEARCH_CONFIG = new InjectionToken('GOOGLE_SEARCH_CONFIG');\nexport function provideGoogleSearchConfig(useFactory) {\n return { provide: GOOGLE_SEARCH_CONFIG, useFactory };\n}\nexport class GoogleSearchService {\n http = inject(HttpClient);\n config = inject(GOOGLE_SEARCH_CONFIG);\n async searchByGoogle(q) {\n const url = `https://www.googleapis.com/customsearch/v1`;\n return lastValueFrom(this.http.get(url, {\n params: {\n key: this.config.apiKey,\n cx: this.config.engineId,\n searchType: 'image',\n q: q,\n num: 3\n }\n }));\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: GoogleSearchService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: GoogleSearchService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: GoogleSearchService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AbngtZGRkL2dvb2dsZS9zcmMvbGliL3NlYXJjaC9zZWFyY2guc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBT3JDLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLElBQUksY0FBYyxDQUFxQixzQkFBc0IsQ0FBQyxDQUFDO0FBQ25HLE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxVQUFvQztJQUM1RSxPQUFPLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ3ZELENBQUM7QUFHRCxNQUFNLE9BQU8sbUJBQW1CO0lBQ3JCLElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBRS9DLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBUztRQUM1QixNQUFNLEdBQUcsR0FBRyw0Q0FBNEMsQ0FBQztRQUN6RCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDdEMsTUFBTSxFQUFFO2dCQUNOLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07Z0JBQ3ZCLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVE7Z0JBQ3hCLFVBQVUsRUFBRSxPQUFPO2dCQUNuQixDQUFDLEVBQUUsQ0FBQztnQkFDSixHQUFHLEVBQUUsQ0FBQzthQUNQO1NBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO3VHQWZVLG1CQUFtQjsyR0FBbkIsbUJBQW1CLGNBRFAsTUFBTTs7MkZBQ2xCLG1CQUFtQjtrQkFEL0IsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IGxhc3RWYWx1ZUZyb20gfSBmcm9tIFwicnhqc1wiO1xuXG5pbnRlcmZhY2UgR29vZ2xlU2VhcmNoQ29uZmlnIHtcbiAgYXBpS2V5OiBzdHJpbmc7XG4gIGVuZ2luZUlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBHT09HTEVfU0VBUkNIX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxHb29nbGVTZWFyY2hDb25maWc+KCdHT09HTEVfU0VBUkNIX0NPTkZJRycpO1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVHb29nbGVTZWFyY2hDb25maWcodXNlRmFjdG9yeTogKCkgPT4gR29vZ2xlU2VhcmNoQ29uZmlnKSB7XG4gIHJldHVybiB7IHByb3ZpZGU6IEdPT0dMRV9TRUFSQ0hfQ09ORklHLCB1c2VGYWN0b3J5IH07XG59XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIEdvb2dsZVNlYXJjaFNlcnZpY2Uge1xuICByZWFkb25seSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICByZWFkb25seSBjb25maWcgPSBpbmplY3QoR09PR0xFX1NFQVJDSF9DT05GSUcpO1xuXG4gIGFzeW5jIHNlYXJjaEJ5R29vZ2xlKHE6IHN0cmluZykge1xuICAgIGNvbnN0IHVybCA9IGBodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9jdXN0b21zZWFyY2gvdjFgO1xuICAgIHJldHVybiBsYXN0VmFsdWVGcm9tKHRoaXMuaHR0cC5nZXQodXJsLCB7XG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAga2V5OiB0aGlzLmNvbmZpZy5hcGlLZXksXG4gICAgICAgIGN4OiB0aGlzLmNvbmZpZy5lbmdpbmVJZCxcbiAgICAgICAgc2VhcmNoVHlwZTogJ2ltYWdlJyxcbiAgICAgICAgcTogcSxcbiAgICAgICAgbnVtOiAzXG4gICAgICB9XG4gICAgfSkpO1xuICB9XG59Il19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibngtZGRkLWdvb2dsZS1zZWFyY2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AbngtZGRkL2dvb2dsZS9zcmMvbGliL3NlYXJjaC9ueC1kZGQtZ29vZ2xlLXNlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":";;;;;AAIY,MAAC,oBAAoB,GAAG,IAAI,cAAc,CAAC,sBAAsB;AACtE,SAAS,yBAAyB,CAAC,UAAU,EAAE;AACtD,IAAI,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE;AACxD;AACO,MAAM,mBAAmB,CAAC;AACjC,IAAI,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AAC7B,IAAI,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACzC,IAAI,MAAM,cAAc,CAAC,CAAC,EAAE;AAC5B,QAAQ,MAAM,GAAG,GAAG,CAAC,0CAA0C,CAAC;AAChE,QAAQ,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;AAChD,YAAY,MAAM,EAAE;AACpB,gBAAgB,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;AACvC,gBAAgB,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;AACxC,gBAAgB,UAAU,EAAE,OAAO;AACnC,gBAAgB,CAAC,EAAE,CAAC;AACpB,gBAAgB,GAAG,EAAE;AACrB;AACA,SAAS,CAAC,CAAC;AACX;AACA,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;AAC9K,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AACrJ;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC;AAC7H,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE;AACzC,SAAS,CAAC,EAAE,CAAC;;AC7Bb;AACA;AACA;;;;"}
@@ -0,0 +1,150 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, Injectable, Inject, NgModule } from '@angular/core';
3
+ import { google } from 'googleapis';
4
+
5
+ const GOOGLE_CONFIG = new InjectionToken('GOOGLE_CONFIG');
6
+
7
+ class GoogleService {
8
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: GoogleService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
9
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: GoogleService, providedIn: 'root' });
10
+ }
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: GoogleService, decorators: [{
12
+ type: Injectable,
13
+ args: [{ providedIn: 'root' }]
14
+ }] });
15
+
16
+ class GoogleServiceImpl extends GoogleService {
17
+ config;
18
+ constructor(config) {
19
+ super();
20
+ this.config = config;
21
+ }
22
+ get client() {
23
+ return new google.auth.OAuth2({
24
+ clientId: this.config.credential.web.client_id,
25
+ clientSecret: this.config.credential.web.client_secret,
26
+ redirectUri: this.config.credential.web.redirect_uris?.[0],
27
+ });
28
+ }
29
+ async getClient(credentials) {
30
+ const client = new google.auth.OAuth2({
31
+ clientId: this.config.credential.web.client_id,
32
+ clientSecret: this.config.credential.web.client_secret,
33
+ });
34
+ client.setCredentials(credentials);
35
+ return client;
36
+ }
37
+ getClientByAccessToken(cred) {
38
+ const client = new google.auth.OAuth2();
39
+ client.setCredentials({
40
+ access_token: cred.accessToken,
41
+ refresh_token: cred.refreshToken,
42
+ });
43
+ return client;
44
+ }
45
+ generateAuthUrl(client = this.client) {
46
+ const url = client.generateAuthUrl({
47
+ access_type: 'offline',
48
+ scope: [
49
+ 'https://www.googleapis.com/auth/calendar.readonly',
50
+ 'https://www.googleapis.com/auth/calendar.events',
51
+ ],
52
+ redirect_uris: this.config.credential.web.redirect_uris,
53
+ });
54
+ return url;
55
+ }
56
+ getToken(code) {
57
+ return this.client.getToken(code);
58
+ }
59
+ async getFileMetadata(client, id) {
60
+ const drive = google.drive({ version: 'v3', auth: client });
61
+ return drive.files.get({ fileId: id });
62
+ }
63
+ async getFileBuffer(client, id) {
64
+ const drive = google.drive({ version: 'v3', auth: client });
65
+ return drive.files.get({ fileId: id, alt: 'media' }, { responseType: 'arraybuffer' });
66
+ }
67
+ async listCalendars(client) {
68
+ const calendar = google.calendar({ version: 'v3', auth: client });
69
+ const res = await calendar.calendarList.list({});
70
+ return res.data.items;
71
+ }
72
+ /** @deprecated */
73
+ async listEvents(client, { calendarId = 'primary' } = {}) {
74
+ // const calendar = google.calendar({version: 'v3', auth: client});
75
+ // const res = await calendar.events.list({
76
+ // calendarId,
77
+ // timeMin: (new Date()).toISOString(),
78
+ // maxResults: 100,
79
+ // singleEvents: true,
80
+ // orderBy: 'startTime',
81
+ // });
82
+ // return res.data.items;
83
+ }
84
+ async deleteEvent(client, event) {
85
+ const calendar = google.calendar({ version: 'v3', auth: client });
86
+ await calendar.events.delete({
87
+ calendarId: 'primary',
88
+ eventId: event.eventId,
89
+ });
90
+ }
91
+ getCalendar(client) {
92
+ return google.calendar({ version: 'v3', auth: client });
93
+ }
94
+ async createEvent(client, event) {
95
+ const calendar = google.calendar({ version: 'v3', auth: client });
96
+ await calendar.events.insert({
97
+ calendarId: 'primary',
98
+ requestBody: {
99
+ start: {
100
+ dateTime: event.start,
101
+ timeZone: 'Asia/Tokyo',
102
+ },
103
+ end: {
104
+ dateTime: event.end,
105
+ timeZone: 'Asia/Tokyo',
106
+ },
107
+ summary: event.title,
108
+ description: event.description,
109
+ }
110
+ });
111
+ }
112
+ async refreshAccessToken(client) {
113
+ const res = await client.refreshAccessToken();
114
+ return res.credentials.access_token;
115
+ }
116
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: GoogleServiceImpl, deps: [{ token: GOOGLE_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
117
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: GoogleServiceImpl });
118
+ }
119
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: GoogleServiceImpl, decorators: [{
120
+ type: Injectable
121
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
122
+ type: Inject,
123
+ args: [GOOGLE_CONFIG]
124
+ }] }] });
125
+
126
+ class GoogleModule {
127
+ static forRoot(config) {
128
+ return {
129
+ ngModule: GoogleModule,
130
+ providers: [
131
+ { provide: GOOGLE_CONFIG, useValue: config },
132
+ { provide: GoogleService, useClass: GoogleServiceImpl },
133
+ ],
134
+ };
135
+ }
136
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: GoogleModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
137
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.0.5", ngImport: i0, type: GoogleModule });
138
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: GoogleModule });
139
+ }
140
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: GoogleModule, decorators: [{
141
+ type: NgModule,
142
+ args: [{}]
143
+ }] });
144
+
145
+ /**
146
+ * Generated bundle index. Do not edit.
147
+ */
148
+
149
+ export { GOOGLE_CONFIG, GoogleModule, GoogleService };
150
+ //# sourceMappingURL=nx-ddd-google.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nx-ddd-google.mjs","sources":["../tmp-esm2022/google.config.js","../tmp-esm2022/google.service.js","../tmp-esm2022/google.service.impl.js","../tmp-esm2022/google.module.js","../tmp-esm2022/nx-ddd-google.js"],"sourcesContent":["import { InjectionToken } from \"@angular/core\";\nexport const GOOGLE_CONFIG = new InjectionToken('GOOGLE_CONFIG');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BueC1kZGQvZ29vZ2xlL3NyYy9saWIvZ29vZ2xlLmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBZS9DLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxJQUFJLGNBQWMsQ0FBZSxlQUFlLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBHb29nbGVDb25maWcge1xuICBjcmVkZW50aWFsOiB7XG4gICAgd2ViOiB7XG4gICAgICBjbGllbnRfaWQ6IHN0cmluZztcbiAgICAgIHByb2plY3RfaWQ6IHN0cmluZztcbiAgICAgIGF1dGhfdXJpOiBzdHJpbmc7XG4gICAgICB0b2tlbl91cmk6IHN0cmluZztcbiAgICAgIGF1dGhfcHJvdmlkZXJfeDUwOV9jZXJ0X3VybDogc3RyaW5nO1xuICAgICAgY2xpZW50X3NlY3JldDogc3RyaW5nO1xuICAgICAgcmVkaXJlY3RfdXJpcz86IHN0cmluZ1tdO1xuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBjb25zdCBHT09HTEVfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPEdvb2dsZUNvbmZpZz4oJ0dPT0dMRV9DT05GSUcnKTtcbiJdfQ==","import { Injectable } from \"@angular/core\";\nimport * as i0 from \"@angular/core\";\nexport class GoogleService {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: GoogleService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: GoogleService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: GoogleService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AbngtZGRkL2dvb2dsZS9zcmMvbGliL2dvb2dsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzNDLE1BQU0sT0FBZ0IsYUFBYTt1R0FBYixhQUFhOzJHQUFiLGFBQWEsY0FEVCxNQUFNOzsyRkFDVixhQUFhO2tCQURsQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBkcml2ZV92MywgY2FsZW5kYXJfdjMsIGdvb2dsZSB9IGZyb20gXCJnb29nbGVhcGlzXCI7XG5pbXBvcnQgdHlwZSB7IEdheGlvc1Byb21pc2UgfSBmcm9tIFwiZ29vZ2xlYXBpcy9idWlsZC9zcmMvYXBpcy9hYnVzaXZlZXhwZXJpZW5jZXJlcG9ydFwiO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEdvb2dsZVNlcnZpY2Uge1xuICBhYnN0cmFjdCBjbGllbnQ6ICh0eXBlb2YgZ29vZ2xlKVsnYXV0aCddWydPQXV0aDInXVsncHJvdG90eXBlJ107XG4gIGFic3RyYWN0IGdldENsaWVudChjcmVkZW50aWFsczogYW55KTogUHJvbWlzZTxhbnk+O1xuICBhYnN0cmFjdCBnZXRDbGllbnRCeUFjY2Vzc1Rva2VuKGNyZWQ6IHthY2Nlc3NUb2tlbjogc3RyaW5nLCByZWZyZXNoVG9rZW46IHN0cmluZ30pOiAodHlwZW9mIGdvb2dsZSlbJ2F1dGgnXVsnT0F1dGgyJ11bJ3Byb3RvdHlwZSddO1xuICBhYnN0cmFjdCBnZW5lcmF0ZUF1dGhVcmwoKTogc3RyaW5nO1xuICBhYnN0cmFjdCBnZXRUb2tlbihjb2RlOiBzdHJpbmcpOiBQcm9taXNlPGFueT47XG4gIGFic3RyYWN0IGdldEZpbGVNZXRhZGF0YShjbGllbnQ6IGFueSwgaWQ6IHN0cmluZyk6IEdheGlvc1Byb21pc2U8ZHJpdmVfdjMuU2NoZW1hJEZpbGU+O1xuICBhYnN0cmFjdCBnZXRGaWxlQnVmZmVyKGNsaWVudDogYW55LCBpZDogc3RyaW5nKTogR2F4aW9zUHJvbWlzZTxkcml2ZV92My5TY2hlbWEkRmlsZT47XG4gIGFic3RyYWN0IGxpc3RDYWxlbmRhcnMoY2xpZW50OiB0eXBlb2YgdGhpcy5jbGllbnQpOiBQcm9taXNlPGNhbGVuZGFyX3YzLlNjaGVtYSRDYWxlbmRhckxpc3RFbnRyeVtdPjtcbiAgYWJzdHJhY3QgbGlzdEV2ZW50cyhjbGllbnQ6IHR5cGVvZiB0aGlzLmNsaWVudCwgcHJvcHM6IHtjYWxlbmRhcklkOiBzdHJpbmd9KTogUHJvbWlzZTxhbnk+O1xuICBhYnN0cmFjdCBjcmVhdGVFdmVudChjbGllbnQ6IHR5cGVvZiB0aGlzLmNsaWVudCwgZXZlbnQ6IHsgc3RhcnQ6IHN0cmluZywgZW5kOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcgfSk6IFByb21pc2U8YW55PjtcbiAgYWJzdHJhY3QgZGVsZXRlRXZlbnQoY2xpZW50OiB0eXBlb2YgdGhpcy5jbGllbnQsIGV2ZW50OiB7IGV2ZW50SWQ6IHN0cmluZyB9KTogUHJvbWlzZTxhbnk+O1xuICBhYnN0cmFjdCBnZXRDYWxlbmRhcihjbGllbnQ6IHR5cGVvZiB0aGlzLmNsaWVudCk6IGNhbGVuZGFyX3YzLkNhbGVuZGFyO1xuICBhYnN0cmFjdCByZWZyZXNoQWNjZXNzVG9rZW4oY2xpZW50OiB0eXBlb2YgdGhpcy5jbGllbnQsIHJlZnJlc2hUb2tlbjogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xufSJdfQ==","import { Inject, Injectable } from \"@angular/core\";\nimport { GoogleService } from \"./google.service\";\nimport { google } from \"googleapis\";\nimport { GOOGLE_CONFIG } from \"./google.config\";\nimport * as i0 from \"@angular/core\";\nexport class GoogleServiceImpl extends GoogleService {\n config;\n constructor(config) {\n super();\n this.config = config;\n }\n get client() {\n return new google.auth.OAuth2({\n clientId: this.config.credential.web.client_id,\n clientSecret: this.config.credential.web.client_secret,\n redirectUri: this.config.credential.web.redirect_uris?.[0],\n });\n }\n async getClient(credentials) {\n const client = new google.auth.OAuth2({\n clientId: this.config.credential.web.client_id,\n clientSecret: this.config.credential.web.client_secret,\n });\n client.setCredentials(credentials);\n return client;\n }\n getClientByAccessToken(cred) {\n const client = new google.auth.OAuth2();\n client.setCredentials({\n access_token: cred.accessToken,\n refresh_token: cred.refreshToken,\n });\n return client;\n }\n generateAuthUrl(client = this.client) {\n const url = client.generateAuthUrl({\n access_type: 'offline',\n scope: [\n 'https://www.googleapis.com/auth/calendar.readonly',\n 'https://www.googleapis.com/auth/calendar.events',\n ],\n redirect_uris: this.config.credential.web.redirect_uris,\n });\n return url;\n }\n getToken(code) {\n return this.client.getToken(code);\n }\n async getFileMetadata(client, id) {\n const drive = google.drive({ version: 'v3', auth: client });\n return drive.files.get({ fileId: id });\n }\n async getFileBuffer(client, id) {\n const drive = google.drive({ version: 'v3', auth: client });\n return drive.files.get({ fileId: id, alt: 'media' }, { responseType: 'arraybuffer' });\n }\n async listCalendars(client) {\n const calendar = google.calendar({ version: 'v3', auth: client });\n const res = await calendar.calendarList.list({});\n return res.data.items;\n }\n /** @deprecated */\n async listEvents(client, { calendarId = 'primary' } = {}) {\n // const calendar = google.calendar({version: 'v3', auth: client});\n // const res = await calendar.events.list({\n // calendarId,\n // timeMin: (new Date()).toISOString(),\n // maxResults: 100,\n // singleEvents: true,\n // orderBy: 'startTime',\n // });\n // return res.data.items;\n }\n async deleteEvent(client, event) {\n const calendar = google.calendar({ version: 'v3', auth: client });\n await calendar.events.delete({\n calendarId: 'primary',\n eventId: event.eventId,\n });\n }\n getCalendar(client) {\n return google.calendar({ version: 'v3', auth: client });\n }\n async createEvent(client, event) {\n const calendar = google.calendar({ version: 'v3', auth: client });\n await calendar.events.insert({\n calendarId: 'primary',\n requestBody: {\n start: {\n dateTime: event.start,\n timeZone: 'Asia/Tokyo',\n },\n end: {\n dateTime: event.end,\n timeZone: 'Asia/Tokyo',\n },\n summary: event.title,\n description: event.description,\n }\n });\n }\n async refreshAccessToken(client) {\n const res = await client.refreshAccessToken();\n return res.credentials.access_token;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: GoogleServiceImpl, deps: [{ token: GOOGLE_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: GoogleServiceImpl });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: GoogleServiceImpl, decorators: [{\n type: Injectable\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Inject,\n args: [GOOGLE_CONFIG]\n }] }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLnNlcnZpY2UuaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BueC1kZGQvZ29vZ2xlL3NyYy9saWIvZ29vZ2xlLnNlcnZpY2UuaW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUF5QixNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBZ0IsTUFBTSxpQkFBaUIsQ0FBQzs7QUFLOUQsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGFBQWE7SUFFakI7SUFEakMsWUFDaUMsTUFBb0I7UUFFbkQsS0FBSyxFQUFFLENBQUM7UUFGdUIsV0FBTSxHQUFOLE1BQU0sQ0FBYztJQUdyRCxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzVCLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUztZQUM5QyxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGFBQWE7WUFDdEQsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDM0QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBZ0I7UUFDOUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNwQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVM7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QUFVOzswQkFHTixNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgR29vZ2xlU2VydmljZSB9IGZyb20gXCIuL2dvb2dsZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBjYWxlbmRhcl92MywgZHJpdmVfdjMsIGdvb2dsZSB9IGZyb20gXCJnb29nbGVhcGlzXCI7XG5pbXBvcnQgeyBHT09HTEVfQ09ORklHLCBHb29nbGVDb25maWcgfSBmcm9tIFwiLi9nb29nbGUuY29uZmlnXCI7XG5pbXBvcnQgeyBHYXhpb3NQcm9taXNlIH0gZnJvbSBcImdvb2dsZWFwaXMvYnVpbGQvc3JjL2FwaXMvYWJ1c2l2ZWV4cGVyaWVuY2VyZXBvcnRcIjtcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBHb29nbGVTZXJ2aWNlSW1wbCBleHRlbmRzIEdvb2dsZVNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KEdPT0dMRV9DT05GSUcpIHByaXZhdGUgY29uZmlnOiBHb29nbGVDb25maWcsXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBnZXQgY2xpZW50KCkge1xuICAgIHJldHVybiBuZXcgZ29vZ2xlLmF1dGguT0F1dGgyKHtcbiAgICAgIGNsaWVudElkOiB0aGlzLmNvbmZpZy5jcmVkZW50aWFsLndlYi5jbGllbnRfaWQsXG4gICAgICBjbGllbnRTZWNyZXQ6IHRoaXMuY29uZmlnLmNyZWRlbnRpYWwud2ViLmNsaWVudF9zZWNyZXQsXG4gICAgICByZWRpcmVjdFVyaTogdGhpcy5jb25maWcuY3JlZGVudGlhbC53ZWIucmVkaXJlY3RfdXJpcz8uWzBdLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q2xpZW50KGNyZWRlbnRpYWxzOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBnb29nbGUuYXV0aC5PQXV0aDIoe1xuICAgICAgY2xpZW50SWQ6IHRoaXMuY29uZmlnLmNyZWRlbnRpYWwud2ViLmNsaWVudF9pZCxcbiAgICAgIGNsaWVudFNlY3JldDogdGhpcy5jb25maWcuY3JlZGVudGlhbC53ZWIuY2xpZW50X3NlY3JldCxcbiAgICB9KTtcbiAgICBjbGllbnQuc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHMpO1xuICAgIHJldHVybiBjbGllbnQ7XG4gIH1cblxuICBnZXRDbGllbnRCeUFjY2Vzc1Rva2VuKGNyZWQ6IHthY2Nlc3NUb2tlbjogc3RyaW5nLCByZWZyZXNoVG9rZW46IHN0cmluZ30pOiBhbnkge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBnb29nbGUuYXV0aC5PQXV0aDIoKTtcbiAgICBjbGllbnQuc2V0Q3JlZGVudGlhbHMoe1xuICAgICAgYWNjZXNzX3Rva2VuOiBjcmVkLmFjY2Vzc1Rva2VuLFxuICAgICAgcmVmcmVzaF90b2tlbjogY3JlZC5yZWZyZXNoVG9rZW4sXG4gICAgfSk7XG4gICAgcmV0dXJuIGNsaWVudDtcbiAgfVxuXG4gIGdlbmVyYXRlQXV0aFVybChjbGllbnQgPSB0aGlzLmNsaWVudCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJsID0gY2xpZW50LmdlbmVyYXRlQXV0aFVybCh7XG4gICAgICBhY2Nlc3NfdHlwZTogJ29mZmxpbmUnLFxuICAgICAgc2NvcGU6IFtcbiAgICAgICAgJ2h0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvY2FsZW5kYXIucmVhZG9ubHknLFxuICAgICAgICAnaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vYXV0aC9jYWxlbmRhci5ldmVudHMnLFxuICAgICAgXSxcbiAgICAgIHJlZGlyZWN0X3VyaXM6IHRoaXMuY29uZmlnLmNyZWRlbnRpYWwud2ViLnJlZGlyZWN0X3VyaXMsXG4gICAgfSk7XG4gICAgcmV0dXJuIHVybFxuICB9XG5cbiAgZ2V0VG9rZW4oY29kZTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0VG9rZW4oY29kZSk7XG4gIH1cblxuICBhc3luYyBnZXRGaWxlTWV0YWRhdGEoY2xpZW50OiBhbnksIGlkOiBzdHJpbmcpOiBHYXhpb3NQcm9taXNlPGRyaXZlX3YzLlNjaGVtYSRGaWxlPiB7XG4gICAgY29uc3QgZHJpdmUgPSBnb29nbGUuZHJpdmUoe3ZlcnNpb246ICd2MycsIGF1dGg6IGNsaWVudH0pO1xuICAgIHJldHVybiBkcml2ZS5maWxlcy5nZXQoe2ZpbGVJZDogaWR9KTtcbiAgfVxuXG4gIGFzeW5jIGdldEZpbGVCdWZmZXIoY2xpZW50OiBhbnksIGlkOiBzdHJpbmcpOiBHYXhpb3NQcm9taXNlPGRyaXZlX3YzLlNjaGVtYSRGaWxlPiB7XG4gICAgY29uc3QgZHJpdmUgPSBnb29nbGUuZHJpdmUoe3ZlcnNpb246ICd2MycsIGF1dGg6IGNsaWVudH0pO1xuICAgIHJldHVybiBkcml2ZS5maWxlcy5nZXQoe2ZpbGVJZDogaWQsIGFsdDogJ21lZGlhJ30sIHsgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInIH0pO1xuICB9XG5cbiAgYXN5bmMgbGlzdENhbGVuZGFycyhjbGllbnQ6IHR5cGVvZiB0aGlzLmNsaWVudCk6IFByb21pc2U8Y2FsZW5kYXJfdjMuU2NoZW1hJENhbGVuZGFyTGlzdEVudHJ5W10+IHtcbiAgICBjb25zdCBjYWxlbmRhciA9IGdvb2dsZS5jYWxlbmRhcih7dmVyc2lvbjogJ3YzJywgYXV0aDogY2xpZW50fSk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgY2FsZW5kYXIuY2FsZW5kYXJMaXN0Lmxpc3Qoe30pO1xuICAgIHJldHVybiByZXMuZGF0YS5pdGVtcztcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICBhc3luYyBsaXN0RXZlbnRzKGNsaWVudDogdHlwZW9mIHRoaXMuY2xpZW50LCB7Y2FsZW5kYXJJZCA9ICdwcmltYXJ5J306IHsgY2FsZW5kYXJJZD86IHN0cmluZyB9ID0ge30pOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIGNvbnN0IGNhbGVuZGFyID0gZ29vZ2xlLmNhbGVuZGFyKHt2ZXJzaW9uOiAndjMnLCBhdXRoOiBjbGllbnR9KTtcbiAgICAvLyBjb25zdCByZXMgPSBhd2FpdCBjYWxlbmRhci5ldmVudHMubGlzdCh7XG4gICAgLy8gICBjYWxlbmRhcklkLFxuICAgIC8vICAgdGltZU1pbjogKG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCksXG4gICAgLy8gICBtYXhSZXN1bHRzOiAxMDAsXG4gICAgLy8gICBzaW5nbGVFdmVudHM6IHRydWUsXG4gICAgLy8gICBvcmRlckJ5OiAnc3RhcnRUaW1lJyxcbiAgICAvLyB9KTtcblxuICAgIC8vIHJldHVybiByZXMuZGF0YS5pdGVtcztcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUV2ZW50KGNsaWVudDogdHlwZW9mIHRoaXMuY2xpZW50LCBldmVudDogeyBldmVudElkOiBzdHJpbmcgfSkge1xuICAgIGNvbnN0IGNhbGVuZGFyID0gZ29vZ2xlLmNhbGVuZGFyKHt2ZXJzaW9uOiAndjMnLCBhdXRoOiBjbGllbnR9KTtcbiAgICBhd2FpdCBjYWxlbmRhci5ldmVudHMuZGVsZXRlKHtcbiAgICAgIGNhbGVuZGFySWQ6ICdwcmltYXJ5JyxcbiAgICAgIGV2ZW50SWQ6IGV2ZW50LmV2ZW50SWQsXG4gICAgfSk7XG4gIH1cblxuICBnZXRDYWxlbmRhcihjbGllbnQ6IHR5cGVvZiB0aGlzLmNsaWVudCk6IGNhbGVuZGFyX3YzLkNhbGVuZGFyIHtcbiAgICByZXR1cm4gZ29vZ2xlLmNhbGVuZGFyKHt2ZXJzaW9uOiAndjMnLCBhdXRoOiBjbGllbnR9KTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUV2ZW50KGNsaWVudDogdHlwZW9mIHRoaXMuY2xpZW50LCBldmVudDogeyBzdGFydDogc3RyaW5nLCBlbmQ6IHN0cmluZywgdGl0bGU6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyB9KSB7XG4gICAgY29uc3QgY2FsZW5kYXIgPSBnb29nbGUuY2FsZW5kYXIoe3ZlcnNpb246ICd2MycsIGF1dGg6IGNsaWVudH0pO1xuICAgIGF3YWl0IGNhbGVuZGFyLmV2ZW50cy5pbnNlcnQoe1xuICAgICAgY2FsZW5kYXJJZDogJ3ByaW1hcnknLFxuICAgICAgcmVxdWVzdEJvZHk6IHtcbiAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICBkYXRlVGltZTogZXZlbnQuc3RhcnQsXG4gICAgICAgICAgdGltZVpvbmU6ICdBc2lhL1Rva3lvJyxcbiAgICAgICAgfSxcbiAgICAgICAgZW5kOiB7XG4gICAgICAgICAgZGF0ZVRpbWU6IGV2ZW50LmVuZCxcbiAgICAgICAgICB0aW1lWm9uZTogJ0FzaWEvVG9reW8nLFxuICAgICAgICB9LFxuICAgICAgICBzdW1tYXJ5OiBldmVudC50aXRsZSxcbiAgICAgICAgZGVzY3JpcHRpb246IGV2ZW50LmRlc2NyaXB0aW9uLFxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcmVmcmVzaEFjY2Vzc1Rva2VuKGNsaWVudDogdHlwZW9mIHRoaXMuY2xpZW50KSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgY2xpZW50LnJlZnJlc2hBY2Nlc3NUb2tlbigpO1xuICAgIHJldHVybiByZXMuY3JlZGVudGlhbHMuYWNjZXNzX3Rva2VuO1xuICB9XG59XG4iXX0=","import { NgModule } from '@angular/core';\nimport { GOOGLE_CONFIG } from './google.config';\nimport { GoogleService } from './google.service';\nimport { GoogleServiceImpl } from './google.service.impl';\nimport * as i0 from \"@angular/core\";\nexport class GoogleModule {\n static forRoot(config) {\n return {\n ngModule: GoogleModule,\n providers: [\n { provide: GOOGLE_CONFIG, useValue: config },\n { provide: GoogleService, useClass: GoogleServiceImpl },\n ],\n };\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: GoogleModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.0.5\", ngImport: i0, type: GoogleModule });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: GoogleModule });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: GoogleModule, decorators: [{\n type: NgModule,\n args: [{}]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BueC1kZGQvZ29vZ2xlL3NyYy9saWIvZ29vZ2xlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxhQUFhLEVBQWdCLE1BQU0saUJBQWlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQUcxRCxNQUFNLE9BQU8sWUFBWTtJQUN2QixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQW9CO1FBQ2pDLE9BQU87WUFDTCxRQUFRLEVBQUUsWUFBWTtZQUN0QixTQUFTLEVBQUU7Z0JBQ1QsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUU7Z0JBQzVDLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUU7YUFDeEQ7U0FDRixDQUFDO0lBQ0osQ0FBQzt1R0FUVSxZQUFZO3dHQUFaLFlBQVk7d0dBQVosWUFBWTs7MkZBQVosWUFBWTtrQkFEeEIsUUFBUTttQkFBQyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEdPT0dMRV9DT05GSUcsIEdvb2dsZUNvbmZpZyB9IGZyb20gJy4vZ29vZ2xlLmNvbmZpZyc7XG5pbXBvcnQgeyBHb29nbGVTZXJ2aWNlIH0gZnJvbSAnLi9nb29nbGUuc2VydmljZSc7XG5pbXBvcnQgeyBHb29nbGVTZXJ2aWNlSW1wbCB9IGZyb20gJy4vZ29vZ2xlLnNlcnZpY2UuaW1wbCc7XG5cbkBOZ01vZHVsZSh7fSlcbmV4cG9ydCBjbGFzcyBHb29nbGVNb2R1bGUge1xuICBzdGF0aWMgZm9yUm9vdChjb25maWc6IEdvb2dsZUNvbmZpZykge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogR29vZ2xlTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogR09PR0xFX0NPTkZJRywgdXNlVmFsdWU6IGNvbmZpZyB9LFxuICAgICAgICB7IHByb3ZpZGU6IEdvb2dsZVNlcnZpY2UsIHVzZUNsYXNzOiBHb29nbGVTZXJ2aWNlSW1wbCB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibngtZGRkLWdvb2dsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BueC1kZGQvZ29vZ2xlL3NyYy9saWIvbngtZGRkLWdvb2dsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}