@dereekb/dbx-firebase 12.4.5 → 12.5.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 (52) hide show
  1. package/esm2022/lib/auth/login/login.button.component.mjs +1 -1
  2. package/esm2022/lib/auth/login/login.email.content.component.mjs +2 -2
  3. package/esm2022/lib/development/development.scheduler.list.component.mjs +1 -1
  4. package/esm2022/lib/firestore/firebase.firestore.providers.mjs +21 -2
  5. package/esm2022/lib/model/loader/collection.loader.instance.mjs +65 -5
  6. package/esm2022/lib/model/modules/store/index.mjs +2 -1
  7. package/esm2022/lib/model/modules/store/store.collection.crud.mjs +28 -0
  8. package/esm2022/lib/model/modules/store/store.collection.directive.mjs +20 -2
  9. package/esm2022/lib/model/modules/store/store.collection.mjs +14 -1
  10. package/esm2022/lib/modules/index.mjs +2 -1
  11. package/esm2022/lib/modules/storagefile/container/index.mjs +7 -0
  12. package/esm2022/lib/modules/storagefile/container/storagefile.upload.action.handler.directive.mjs +118 -0
  13. package/esm2022/lib/modules/storagefile/container/storagefile.upload.error.mjs +12 -0
  14. package/esm2022/lib/modules/storagefile/container/storagefile.upload.handler.mjs +260 -0
  15. package/esm2022/lib/modules/storagefile/container/storagefile.upload.initialize.document.directive.mjs +39 -0
  16. package/esm2022/lib/modules/storagefile/container/storagefile.upload.store.directive.mjs +38 -0
  17. package/esm2022/lib/modules/storagefile/container/storagefile.upload.sync.directive.mjs +36 -0
  18. package/esm2022/lib/modules/storagefile/index.mjs +4 -0
  19. package/esm2022/lib/modules/storagefile/storagefile.upload.module.mjs +83 -0
  20. package/esm2022/lib/modules/storagefile/store/index.mjs +6 -0
  21. package/esm2022/lib/modules/storagefile/store/storagefile.collection.store.directive.mjs +22 -0
  22. package/esm2022/lib/modules/storagefile/store/storagefile.collection.store.mjs +18 -0
  23. package/esm2022/lib/modules/storagefile/store/storagefile.document.store.directive.mjs +21 -0
  24. package/esm2022/lib/modules/storagefile/store/storagefile.document.store.mjs +22 -0
  25. package/esm2022/lib/modules/storagefile/store/storagefile.upload.store.mjs +63 -0
  26. package/esm2022/lib/storage/firebase.storage.module.mjs +2 -2
  27. package/fesm2022/dereekb-dbx-firebase.mjs +839 -30
  28. package/fesm2022/dereekb-dbx-firebase.mjs.map +1 -1
  29. package/lib/firestore/firebase.firestore.providers.d.ts +14 -1
  30. package/lib/model/loader/collection.loader.instance.d.ts +26 -1
  31. package/lib/model/modules/store/index.d.ts +1 -0
  32. package/lib/model/modules/store/store.collection.crud.d.ts +21 -0
  33. package/lib/model/modules/store/store.collection.d.ts +19 -2
  34. package/lib/model/modules/store/store.collection.directive.d.ts +12 -2
  35. package/lib/modules/index.d.ts +1 -0
  36. package/lib/modules/storagefile/container/index.d.ts +6 -0
  37. package/lib/modules/storagefile/container/storagefile.upload.action.handler.directive.d.ts +47 -0
  38. package/lib/modules/storagefile/container/storagefile.upload.error.d.ts +9 -0
  39. package/lib/modules/storagefile/container/storagefile.upload.handler.d.ts +183 -0
  40. package/lib/modules/storagefile/container/storagefile.upload.initialize.document.directive.d.ts +14 -0
  41. package/lib/modules/storagefile/container/storagefile.upload.store.directive.d.ts +20 -0
  42. package/lib/modules/storagefile/container/storagefile.upload.sync.directive.d.ts +18 -0
  43. package/lib/modules/storagefile/index.d.ts +3 -0
  44. package/lib/modules/storagefile/storagefile.upload.module.d.ts +29 -0
  45. package/lib/modules/storagefile/store/index.d.ts +5 -0
  46. package/lib/modules/storagefile/store/storagefile.collection.store.d.ts +10 -0
  47. package/lib/modules/storagefile/store/storagefile.collection.store.directive.d.ts +9 -0
  48. package/lib/modules/storagefile/store/storagefile.document.store.d.ts +15 -0
  49. package/lib/modules/storagefile/store/storagefile.document.store.directive.d.ts +9 -0
  50. package/lib/modules/storagefile/store/storagefile.upload.store.d.ts +166 -0
  51. package/lib/storage/firebase.storage.module.d.ts +1 -1
  52. package/package.json +1 -1
@@ -0,0 +1,260 @@
1
+ import { catchError, map, Observable, of, shareReplay } from 'rxjs';
2
+ import { runAsyncTasksForValues, separateValues } from '@dereekb/util';
3
+ import { MultiSubscriptionObject } from '@dereekb/rxjs';
4
+ /**
5
+ * Default implementation of StorageFileUploadHandler.
6
+ */
7
+ export function storageFileUploadHandler(config) {
8
+ const { storageService, storageFileUploadConfigFactory } = config;
9
+ let resumable;
10
+ return {
11
+ uploadFile: async (file) => {
12
+ const storageFileUploadConfig = await storageFileUploadConfigFactory(file);
13
+ const { storagePath } = storageFileUploadConfig;
14
+ const storageAccessorFile = storageService.file(storagePath);
15
+ const upload = new Observable((x) => {
16
+ if (storageAccessorFile.uploadResumable) {
17
+ resumable = storageAccessorFile.uploadResumable(file);
18
+ // subscribe to the event by piping this observable to it
19
+ resumable
20
+ .streamSnapshotEvents()
21
+ .pipe(map((x) => {
22
+ const { bytesTransferred, totalBytes } = x;
23
+ const progress = {
24
+ file,
25
+ fileRef: storageAccessorFile,
26
+ uploadRef: resumable,
27
+ bytesTransferred,
28
+ totalBytes,
29
+ progress: bytesTransferred / totalBytes
30
+ };
31
+ return progress;
32
+ }))
33
+ .pipe(catchError((error) => {
34
+ // if an error occurs, catch it and emit it as a progress
35
+ const progress = {
36
+ file,
37
+ fileRef: storageAccessorFile,
38
+ uploadRef: resumable,
39
+ error,
40
+ failed: true
41
+ };
42
+ return of(progress);
43
+ }))
44
+ .subscribe(x);
45
+ }
46
+ else {
47
+ throw new Error('uploadResumable() function was unavailable.');
48
+ }
49
+ }).pipe(shareReplay(1));
50
+ const instance = {
51
+ upload,
52
+ taskRef: storageAccessorFile,
53
+ pause: () => resumable?.pause() ?? false,
54
+ resume: () => resumable?.resume() ?? false,
55
+ cancel: () => resumable?.cancel() ?? false
56
+ };
57
+ return instance;
58
+ }
59
+ };
60
+ }
61
+ /**
62
+ * Uploads files using the provided upload handler and files.
63
+ *
64
+ * An observable is returned that emits the latest file events from any file that is being uploaded.
65
+ *
66
+ * @param input
67
+ * @returns
68
+ */
69
+ export function storageFileUploadFiles(input) {
70
+ const { uploadHandler, files, maxParallelUploads: inputMaxParallelUploads } = input;
71
+ const maxParallelTasks = inputMaxParallelUploads ?? 3;
72
+ const multiUploadsSubscriptionObject = new MultiSubscriptionObject();
73
+ // begin the upload for each file
74
+ const allFiles = Array.from(files);
75
+ // unsubscribe from all previous uploads
76
+ multiUploadsSubscriptionObject.unsub();
77
+ const allFilesAndLatestProgress = new Array(allFiles.length);
78
+ const allFilesAndDetails = allFiles.map((file) => ({ file }));
79
+ const overallProgressPerCompletedFile = (1 / allFilesAndLatestProgress.length);
80
+ /**
81
+ * Once set, any new file upload task that hits this will return an cancel failure.
82
+ */
83
+ let flaggedCancel = false;
84
+ const cancel = () => {
85
+ flaggedCancel = true;
86
+ };
87
+ const upload = new Observable((subscriber) => {
88
+ const overallStartTime = new Date();
89
+ const incompleteFileFileIndexes = new Set(allFiles.map((_, index) => index));
90
+ const activeFileIndexes = new Set();
91
+ const doneFileIndexes = new Set();
92
+ let latestOverallProgress = 0;
93
+ function onStartFileUpload(index, uploadInstance) {
94
+ activeFileIndexes.add(index);
95
+ allFilesAndDetails[index].startTime = new Date();
96
+ allFilesAndDetails[index].uploadInstance = uploadInstance;
97
+ allFilesAndDetails[index].fileRef = uploadInstance.taskRef;
98
+ }
99
+ function onStartFileUploadFlaggedCancelled(index) {
100
+ allFilesAndDetails[index].startTime = new Date();
101
+ // immediately mark it done
102
+ _markFileUploadDone(index, true);
103
+ // emit new progress event
104
+ _emitEvent();
105
+ }
106
+ function _markFileUploadDone(fileIndex, finalError) {
107
+ doneFileIndexes.add(fileIndex); // add to done file indexes
108
+ activeFileIndexes.delete(fileIndex); // remove from active file indexes if it exists
109
+ incompleteFileFileIndexes.delete(fileIndex); // remove from incomplete file indexes
110
+ // update details
111
+ allFilesAndDetails[fileIndex].endTime = new Date();
112
+ const error = finalError ?? allFilesAndDetails[fileIndex].error;
113
+ allFilesAndDetails[fileIndex].success = !error;
114
+ allFilesAndDetails[fileIndex].error = error;
115
+ }
116
+ function updateUploadProgress(input) {
117
+ const { index: fileIndex, nextProgress, fileUploadTaskDone: inputFileUploadTaskDone, nonProgressError } = input;
118
+ const error = nonProgressError ?? nextProgress?.error;
119
+ const fileUploadTaskDone = inputFileUploadTaskDone ?? Boolean(error);
120
+ // the task may already be done, as after a progress-related error the complete task can get called.
121
+ const isTaskAlreadyDone = allFilesAndDetails[fileIndex].endTime != null;
122
+ if (!isTaskAlreadyDone) {
123
+ let nextOverallProgress = latestOverallProgress;
124
+ const nextProgressPercent = fileUploadTaskDone ? 100 : (nextProgress?.progress ?? 0) * 100;
125
+ // update the overall progress percentage
126
+ if (nextProgressPercent) {
127
+ // update the overall percentage
128
+ const previousProgress = allFilesAndLatestProgress[fileIndex];
129
+ const previousProgressPercent = previousProgress?.progress != null ? previousProgress.progress * 100 : 0;
130
+ const progressPercentChange = nextProgressPercent - previousProgressPercent;
131
+ // increase overall progress by the change
132
+ nextOverallProgress += progressPercentChange * overallProgressPerCompletedFile;
133
+ }
134
+ // update the file progress
135
+ if (nextProgress) {
136
+ // update the latest FileProgress
137
+ allFilesAndLatestProgress[fileIndex] = nextProgress;
138
+ // only set fileRef once
139
+ if (!allFilesAndDetails[fileIndex].fileRef) {
140
+ allFilesAndDetails[fileIndex].fileRef = nextProgress.fileRef;
141
+ }
142
+ }
143
+ // if complete, update the indexes and details
144
+ if (fileUploadTaskDone) {
145
+ _markFileUploadDone(fileIndex, error);
146
+ }
147
+ // update the overall progress
148
+ latestOverallProgress = nextOverallProgress;
149
+ // emit the event to send it
150
+ _emitEvent(nextProgress);
151
+ }
152
+ }
153
+ function _emitEvent(nextProgress) {
154
+ const isComplete = incompleteFileFileIndexes.size === 0;
155
+ let overallProgress = latestOverallProgress;
156
+ let result = undefined;
157
+ if (isComplete) {
158
+ overallProgress = 100; // set to 100%
159
+ const overallEndTime = new Date();
160
+ const fileResults = allFiles.map((file, index) => {
161
+ const result = {
162
+ startTime: allFilesAndDetails[index].startTime,
163
+ endTime: allFilesAndDetails[index].endTime,
164
+ file,
165
+ fileRef: allFilesAndDetails[index].fileRef,
166
+ success: !allFilesAndDetails[index].error,
167
+ error: allFilesAndDetails[index].error
168
+ };
169
+ return result;
170
+ });
171
+ const { included: successFileResults, excluded: errorFileResults } = separateValues(fileResults, (x) => x.success);
172
+ // all are done, set the result on the next event
173
+ result = {
174
+ startTime: overallStartTime,
175
+ endTime: overallEndTime,
176
+ successFileResults,
177
+ errorFileResults,
178
+ fileResults
179
+ };
180
+ }
181
+ const nextEvent = {
182
+ allFiles,
183
+ isComplete,
184
+ overallProgress,
185
+ uploadProgress: nextProgress,
186
+ incompleteFileCount: incompleteFileFileIndexes.size,
187
+ activeFileCount: activeFileIndexes.size,
188
+ doneFileCount: doneFileIndexes.size,
189
+ result
190
+ };
191
+ subscriber.next(nextEvent);
192
+ }
193
+ async function runUploadTaskForFile([file, index]) {
194
+ if (flaggedCancel) {
195
+ onStartFileUploadFlaggedCancelled(index);
196
+ return Promise.resolve();
197
+ }
198
+ return new Promise((resolve) => {
199
+ const updateFileUploadProgress = (nextProgress) => {
200
+ // update the progress
201
+ updateUploadProgress({
202
+ index,
203
+ nextProgress
204
+ });
205
+ };
206
+ const updateFileUploadProgressWithUncaughtError = (error) => {
207
+ // error occurred, update the progress with the error
208
+ updateUploadProgress({
209
+ index,
210
+ nonProgressError: error,
211
+ fileUploadTaskDone: true
212
+ });
213
+ // always resolve, never reject
214
+ resolve();
215
+ };
216
+ const completeFileUploadProgress = () => {
217
+ updateUploadProgress({
218
+ index,
219
+ fileUploadTaskDone: true
220
+ });
221
+ resolve();
222
+ };
223
+ // upload the file, subscribe to the progress
224
+ try {
225
+ uploadHandler
226
+ .uploadFile(file)
227
+ .then((uploadInstance) => {
228
+ // add to active file indexes
229
+ onStartFileUpload(index, uploadInstance);
230
+ const uploadSubscription = uploadInstance.upload.subscribe({
231
+ next: updateFileUploadProgress,
232
+ error: updateFileUploadProgressWithUncaughtError,
233
+ complete: completeFileUploadProgress
234
+ });
235
+ multiUploadsSubscriptionObject.addSubs(uploadSubscription);
236
+ })
237
+ .catch(updateFileUploadProgressWithUncaughtError);
238
+ }
239
+ catch (error) {
240
+ updateFileUploadProgressWithUncaughtError(error);
241
+ }
242
+ });
243
+ }
244
+ // run upload task for each file
245
+ const fileTuples = allFiles.map((file, index) => [file, index]);
246
+ runAsyncTasksForValues(fileTuples, runUploadTaskForFile, {
247
+ maxParallelTasks,
248
+ retriesAllowed: 0 // no retries allowed
249
+ }).then(() => {
250
+ // all tasks are finished. Complete the subscriber.
251
+ subscriber.complete();
252
+ });
253
+ }).pipe(shareReplay(1));
254
+ const instance = {
255
+ cancel,
256
+ upload
257
+ };
258
+ return instance;
259
+ }
260
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZWZpbGUudXBsb2FkLmhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZmlyZWJhc2Uvc3JjL2xpYi9tb2R1bGVzL3N0b3JhZ2VmaWxlL2NvbnRhaW5lci9zdG9yYWdlZmlsZS51cGxvYWQuaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdwRSxPQUFPLEVBQXFFLHNCQUFzQixFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxSSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFxRXhEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QixDQUFDLE1BQXNDO0lBQzdFLE1BQU0sRUFBRSxjQUFjLEVBQUUsOEJBQThCLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFFbEUsSUFBSSxTQUFtQyxDQUFDO0lBRXhDLE9BQU87UUFDTCxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ3pCLE1BQU0sdUJBQXVCLEdBQUcsTUFBTSw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUUzRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsdUJBQXVCLENBQUM7WUFDaEQsTUFBTSxtQkFBbUIsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRTdELE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFnRCxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNqRixJQUFJLG1CQUFtQixDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUN4QyxTQUFTLEdBQUcsbUJBQW1CLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUV0RCx5REFBeUQ7b0JBQ3pELFNBQVM7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Y0FBYyxDQUFDLENBQUM7d0JBRXpDLE1BQU0sa0JBQWtCLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7NEJBQ3pELElBQUksRUFBRSx3QkFBd0I7NEJBQzlCLEtBQUssRUFBRSx5Q0FBeUM7NEJBQ2hELFFBQVEsRUFBRSwwQkFBMEI7eUJBQ3JDLENBQUMsQ0FBQzt3QkFFSCw4QkFBOEIsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztvQkFDN0QsQ0FBQyxDQUFDO3lCQUNELEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO2dCQUN0RCxDQUFDO2dCQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7b0JBQ2YseUNBQXlDLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25ELENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxnQ0FBZ0M7UUFDaEMsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBVSxDQUFDLENBQUM7UUFFekUsc0JBQXNCLENBQUMsVUFBVSxFQUFFLG9CQUFvQixFQUFFO1lBQ3ZELGdCQUFnQjtZQUNoQixjQUFjLEVBQUUsQ0FBQyxDQUFDLHFCQUFxQjtTQUN4QyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNYLG1EQUFtRDtZQUNuRCxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFeEIsTUFBTSxRQUFRLEdBQW1DO1FBQy9DLE1BQU07UUFDTixNQUFNO0tBQ1AsQ0FBQztJQUVGLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIE9ic2VydmFibGUsIG9mLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZVVwbG9hZFN0b3JlRmlsZVByb2dyZXNzIH0gZnJvbSAnLi4vc3RvcmUnO1xuaW1wb3J0IHsgRGJ4RmlyZWJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3N0b3JhZ2UvZmlyZWJhc2Uuc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IEluZGV4TnVtYmVyLCBNYXliZSwgUGVyY2VudERlY2ltYWwsIFBlcmNlbnROdW1iZXIsIFByb21pc2VPclZhbHVlLCBydW5Bc3luY1Rhc2tzRm9yVmFsdWVzLCBzZXBhcmF0ZVZhbHVlcyB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgTXVsdGlTdWJzY3JpcHRpb25PYmplY3QgfSBmcm9tICdAZGVyZWVrYi9yeGpzJztcbmltcG9ydCB7IEZpcmViYXNlU3RvcmFnZUFjY2Vzc29yRmlsZSwgU3RvcmFnZUN1c3RvbU1ldGFkYXRhLCBTdG9yYWdlUGF0aElucHV0LCBTdG9yYWdlVXBsb2FkT3B0aW9ucywgU3RvcmFnZVVwbG9hZFRhc2sgfSBmcm9tICdAZGVyZWVrYi9maXJlYmFzZSc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBvYnNlcnZhYmxlIGZvciB1cGxvYWRpbmcgYSBmaWxlLlxuICovXG5leHBvcnQgdHlwZSBTdG9yYWdlRmlsZVVwbG9hZEhhbmRsZXJGdW5jdGlvbiA9IChmaWxlOiBGaWxlKSA9PiBQcm9taXNlPFN0b3JhZ2VGaWxlVXBsb2FkSGFuZGxlckluc3RhbmNlPjtcblxuZXhwb3J0IGludGVyZmFjZSBTdG9yYWdlRmlsZVVwbG9hZEhhbmRsZXJJbnN0YW5jZSBleHRlbmRzIFBpY2s8U3RvcmFnZVVwbG9hZFRhc2s8RmlyZWJhc2VTdG9yYWdlQWNjZXNzb3JGaWxlPiwgJ3Rhc2tSZWYnIHwgJ3BhdXNlJyB8ICdyZXN1bWUnIHwgJ2NhbmNlbCc+IHtcbiAgLyoqXG4gICAqIFRoZSB1cGxvYWQgb2JzZXJ2YWJsZS5cbiAgICpcbiAgICogTXVzdCBiZSBzdWJzY3JpYmVkIHRvIGluIG9yZGVyIGZvciB0aGUgdXBsb2FkIHRvIGJlZ2luLlxuICAgKi9cbiAgcmVhZG9ubHkgdXBsb2FkOiBPYnNlcnZhYmxlPERieEZpcmViYXNlU3RvcmFnZUZpbGVVcGxvYWRTdG9yZUZpbGVQcm9ncmVzcz47XG59XG5cbi8qKlxuICogSGFuZGxlcyB1cGxvYWRpbmcgZmlsZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcmFnZUZpbGVVcGxvYWRIYW5kbGVyIHtcbiAgLyoqXG4gICAqIFVwbG9hZHMgYSBmaWxlLCBhbmQgcmV0dXJucyB0aGUgZmlsZSBwcm9ncmVzcyBhcyBpdCBpcyB1cGxvYWRpbmcuXG4gICAqL1xuICByZWFkb25seSB1cGxvYWRGaWxlOiBTdG9yYWdlRmlsZVVwbG9hZEhhbmRsZXJGdW5jdGlvbjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBhIHNpbmdsZSBmaWxlIHVwbG9hZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9yYWdlRmlsZVVwbG9hZENvbmZpZyB7XG4gIC8qKlxuICAgKiBQYXRoIGZvciB3aGVyZSB0byB1cGxvYWQgdGhlIGZpbGUgdG9cbiAgICovXG4gIHJlYWRvbmx5IHN0b3JhZ2VQYXRoOiBTdG9yYWdlUGF0aElucHV0O1xuICAvKipcbiAgICogVXBsb2FkIG9wdGlvbnMgZm9yIHRoZSBmaWxlLlxuICAgKlxuICAgKiBSZXN1bWFibGUgaXMgbm90IHN1cHBvcnRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHVwbG9hZE9wdGlvbnM/OiBTdG9yYWdlRmlsZVVwbG9hZENvbmZpZ09wdGlvbnM7XG4gIC8qKlxuICAgKiBDdXN0b20gbWV0YWRhdGEgZm9yIHRoZSBmaWxlLlxuICAgKlxuICAgKiBJcyBtZXJnZWQgd2l0aCB1cGxvYWRPcHRpb25zJ3MgbWV0YWRhdGEuXG4gICAqL1xuICByZWFkb25seSBjdXN0b21NZXRhZGF0YT86IFN0b3JhZ2VDdXN0b21NZXRhZGF0YTtcbn1cblxuLyoqXG4gKiBTdG9yYWdlRmlsZVVwbG9hZENvbmZpZyB1cGxvYWQgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IHR5cGUgU3RvcmFnZUZpbGVVcGxvYWRDb25maWdPcHRpb25zID0gT21pdDxTdG9yYWdlVXBsb2FkT3B0aW9ucywgJ3Jlc3VtYWJsZSc+O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHVzZWQgdG8gZ2VuZXJhdGUgZmlsZSBuYW1lcyBmb3IgdGhlIHVwbG9hZGVkIGZpbGVzLlxuICpcbiAqIElmIG5vdCBzZXQsIHRoZSBmaWxlIG5hbWUgd2lsbCBiZSB1c2VkIGFzIGlzLlxuICovXG5leHBvcnQgdHlwZSBTdG9yYWdlRmlsZVVwbG9hZENvbmZpZ0ZhY3RvcnkgPSAoZmlsZTogRmlsZSkgPT4gUHJvbWlzZU9yVmFsdWU8U3RvcmFnZUZpbGVVcGxvYWRDb25maWc+O1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIFN0b3JhZ2VGaWxlVXBsb2FkSGFuZGxlcigpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JhZ2VGaWxlVXBsb2FkSGFuZGxlckNvbmZpZyB7XG4gIHJlYWRvbmx5IHN0b3JhZ2VTZXJ2aWNlOiBEYnhGaXJlYmFzZVN0b3JhZ2VTZXJ2aWNlO1xuICByZWFkb25seSBzdG9yYWdlRmlsZVVwbG9hZENvbmZpZ0ZhY3Rvcnk6IFN0b3JhZ2VGaWxlVXBsb2FkQ29uZmlnRmFjdG9yeTtcbn1cblxuLyoqXG4gKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIFN0b3JhZ2VGaWxlVXBsb2FkSGFuZGxlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0b3JhZ2VGaWxlVXBsb2FkSGFuZGxlcihjb25maWc6IFN0b3JhZ2VGaWxlVXBsb2FkSGFuZGxlckNvbmZpZyk6IFN0b3JhZ2VGaWxlVXBsb2FkSGFuZGxlciB7XG4gIGNvbnN0IHsgc3RvcmFnZVNlcnZpY2UsIHN0b3JhZ2VGaWxlVXBsb2FkQ29uZmlnRmFjdG9yeSB9ID0gY29uZmlnO1xuXG4gIGxldCByZXN1bWFibGU6IE1heWJlPFN0b3JhZ2VVcGxvYWRUYXNrPjtcblxuICByZXR1cm4ge1xuICAgIHVwbG9hZEZpbGU6IGFzeW5jIChmaWxlKSA9PiB7XG4gICAgICBjb25zdCBzdG9yYWdlRmlsZVVwbG9hZENvbmZpZyA9IGF3YWl0IHN0b3JhZ2VGaWxlVXBsb2FkQ29uZmlnRmFjdG9yeShmaWxlKTtcblxuICAgICAgY29uc3QgeyBzdG9yYWdlUGF0aCB9ID0gc3RvcmFnZUZpbGVVcGxvYWRDb25maWc7XG4gICAgICBjb25zdCBzdG9yYWdlQWNjZXNzb3JGaWxlID0gc3RvcmFnZVNlcnZpY2UuZmlsZShzdG9yYWdlUGF0aCk7XG5cbiAgICAgIGNvbnN0IHVwbG9hZCA9IG5ldyBPYnNlcnZhYmxlPERieEZpcmViYXNlU3RvcmFnZUZpbGVVcGxvYWRTdG9yZUZpbGVQcm9ncmVzcz4oKHgpID0+IHtcbiAgICAgICAgaWYgKHN0b3JhZ2VBY2Nlc3NvckZpbGUudXBsb2FkUmVzdW1hYmxlKSB7XG4gICAgICAgICAgcmVzdW1hYmxlID0gc3RvcmFnZUFjY2Vzc29yRmlsZS51cGxvYWRSZXN1bWFibGUoZmlsZSk7XG5cbiAgICAgICAgICAvLyBzdWJzY3JpYmUgdG8gdGhlIGV2ZW50IGJ5IHBpcGluZyB0aGlzIG9ic2VydmFibGUgdG8gaXRcbiAgICAgICAgICByZXN1bWFibGVcbiAgICAgICAgICAgIC5zdHJlYW1TbmFwc2hvdEV2ZW50cygpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgbWFwKCh4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBieXRlc1RyYW5zZmVycmVkLCB0b3RhbEJ5dGVzIH0gPSB4O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvZ3Jlc3M6IERieEZpcmViYXNlU3RvcmFnZUZpbGVVcGxvYWRTdG9yZUZpbGVQcm9ncmVzcyA9IHtcbiAgICAgICAgICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgICAgICAgICBmaWxlUmVmOiBzdG9yYWdlQWNjZXNzb3JGaWxlLFxuICAgICAgICAgICAgICAgICAgdXBsb2FkUmVmOiByZXN1bWFibGUsXG4gICAgICAgICAgICAgICAgICBieXRlc1RyYW5zZmVycmVkLFxuICAgICAgICAgICAgICAgICAgdG90YWxCeXRlcyxcbiAgICAgICAgICAgICAgICAgIHByb2dyZXNzOiBieXRlc1RyYW5zZmVycmVkIC8gdG90YWxCeXRlc1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvZ3Jlc3M7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBpZiBhbiBlcnJvciBvY2N1cnMsIGNhdGNoIGl0IGFuZCBlbWl0IGl0IGFzIGEgcHJvZ3Jlc3NcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9ncmVzczogRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZVVwbG9hZFN0b3JlRmlsZVByb2dyZXNzID0ge1xuICAgICAgICAgICAgICAgICAgZmlsZSxcbiAgICAgICAgICAgICAgICAgIGZpbGVSZWY6IHN0b3JhZ2VBY2Nlc3NvckZpbGUsXG4gICAgICAgICAgICAgICAgICB1cGxvYWRSZWY6IHJlc3VtYWJsZSxcbiAgICAgICAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgICAgICAgZmFpbGVkOiB0cnVlXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBvZihwcm9ncmVzcyk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndXBsb2FkUmVzdW1hYmxlKCkgZnVuY3Rpb24gd2FzIHVuYXZhaWxhYmxlLicpO1xuICAgICAgICB9XG4gICAgICB9KS5waXBlKHNoYXJlUmVwbGF5KDEpKTtcblxuICAgICAgY29uc3QgaW5zdGFuY2U6IFN0b3JhZ2VGaWxlVXBsb2FkSGFuZGxlckluc3RhbmNlID0ge1xuICAgICAgICB1cGxvYWQsXG4gICAgICAgIHRhc2tSZWY6IHN0b3JhZ2VBY2Nlc3NvckZpbGUsXG4gICAgICAgIHBhdXNlOiAoKSA9PiByZXN1bWFibGU/LnBhdXNlKCkgPz8gZmFsc2UsXG4gICAgICAgIHJlc3VtZTogKCkgPT4gcmVzdW1hYmxlPy5yZXN1bWUoKSA/PyBmYWxzZSxcbiAgICAgICAgY2FuY2VsOiAoKSA9PiByZXN1bWFibGU/LmNhbmNlbCgpID8/IGZhbHNlXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuICB9O1xufVxuXG4vLyBNQVJLOiBVcGxvYWQgRmlsZXNcbmV4cG9ydCBpbnRlcmZhY2UgU3RvcmFnZUZpbGVVcGxvYWRGaWxlc0lucHV0IHtcbiAgcmVhZG9ubHkgdXBsb2FkSGFuZGxlcjogU3RvcmFnZUZpbGVVcGxvYWRIYW5kbGVyO1xuICAvKipcbiAgICogRmlsZXMgdG8gdXBsb2FkXG4gICAqL1xuICByZWFkb25seSBmaWxlczogRmlsZVtdO1xuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBtYXggcGFyYWxsZWwgdXBsb2FkcyB0byBwZXJmb3JtIGF0IGEgdGltZS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gM1xuICAgKi9cbiAgcmVhZG9ubHkgbWF4UGFyYWxsZWxVcGxvYWRzPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JhZ2VGaWxlVXBsb2FkRmlsZXNJbnN0YW5jZSB7XG4gIC8qKlxuICAgKiBDYW5jZWxzIHRoZSB1cGxvYWQgb2YgdGhlIHJlbWFpbmluZyBmaWxlcy5cbiAgICovXG4gIGNhbmNlbCgpOiB2b2lkO1xuICAvKipcbiAgICogVGhlIHVwbG9hZCBvYnNlcnZhYmxlLlxuICAgKlxuICAgKiBNdXN0IGJlIHN1YnNjcmliZWQgdG8gaW4gb3JkZXIgZm9yIHRoZSB1cGxvYWQgdG8gYmVnaW4uXG4gICAqL1xuICByZWFkb25seSB1cGxvYWQ6IE9ic2VydmFibGU8U3RvcmFnZUZpbGVVcGxvYWRGaWxlc0V2ZW50Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdG9yYWdlRmlsZVVwbG9hZEZpbGVzRXZlbnQge1xuICAvKipcbiAgICogQWxsIGZpbGVzIGJlaW5nIHVwbG9hZGVkXG4gICAqL1xuICByZWFkb25seSBhbGxGaWxlczogRmlsZVtdO1xuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGFsbCBmaWxlcyBoYXZlIGJlZW4gdXBsb2FkZWQuXG4gICAqXG4gICAqIFRoZSByZXN1bHQgdmFsdWUgc2hvdWxkIGJlIGF2YWlsYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGlzQ29tcGxldGU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHVwbG9hZCB3YXMgY2FuY2VsZWQuXG4gICAqL1xuICByZWFkb25seSBpc0NhbmNlbGVkPzogTWF5YmU8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBUaGUgb3ZlcmFsbCBwcm9ncmVzcyBvZiBhbGwgZmlsZXMgYmVpbmcgdXBsb2FkZWQuXG4gICAqL1xuICByZWFkb25seSBvdmVyYWxsUHJvZ3Jlc3M6IFBlcmNlbnROdW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgdXBsb2FkIHByb2dyZXNzIHRoYXQgdHJpZ2dlcmVkIHRoaXMgZXZlbnQuXG4gICAqL1xuICByZWFkb25seSB1cGxvYWRQcm9ncmVzcz86IE1heWJlPERieEZpcmViYXNlU3RvcmFnZUZpbGVVcGxvYWRTdG9yZUZpbGVQcm9ncmVzcz47XG4gIC8qKlxuICAgKiBUaGUgZmluYWwgcmVzdWx0LlxuICAgKlxuICAgKiBTZXQgd2hlbiB0aGUgZmluYWwgZmlsZSBoYXMgYmVlbiB1cGxvYWRlZCBvciBmYWlsZWQuXG4gICAqL1xuICByZWFkb25seSByZXN1bHQ/OiBTdG9yYWdlRmlsZVVwbG9hZEZpbGVzRmluYWxSZXN1bHQ7XG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGZpbGVzIHRoYXQgYXJlIHN0aWxsIHVwbG9hZGluZyBvciBxdWV1ZWQgZm9yIHVwbG9hZC5cbiAgICovXG4gIHJlYWRvbmx5IGluY29tcGxldGVGaWxlQ291bnQ6IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgZmlsZXMgdGhhdCBhcmUgYWN0aXZlLlxuICAgKi9cbiAgcmVhZG9ubHkgYWN0aXZlRmlsZUNvdW50OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGZpbGVzIHRoYXQgYXJlIGRvbmUuXG4gICAqL1xuICByZWFkb25seSBkb25lRmlsZUNvdW50OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcmFnZUZpbGVVcGxvYWRGaWxlc0ZpbmFsUmVzdWx0IHtcbiAgcmVhZG9ubHkgc3RhcnRUaW1lOiBEYXRlO1xuICByZWFkb25seSBlbmRUaW1lOiBEYXRlO1xuICByZWFkb25seSBmaWxlUmVzdWx0czogU3RvcmFnZUZpbGVVcGxvYWRGaWxlc0ZpbmFsRmlsZVJlc3VsdFtdO1xuICByZWFkb25seSBzdWNjZXNzRmlsZVJlc3VsdHM6IFN0b3JhZ2VGaWxlVXBsb2FkRmlsZXNGaW5hbEZpbGVSZXN1bHRbXTtcbiAgcmVhZG9ubHkgZXJyb3JGaWxlUmVzdWx0czogU3RvcmFnZUZpbGVVcGxvYWRGaWxlc0ZpbmFsRmlsZVJlc3VsdFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JhZ2VGaWxlVXBsb2FkRmlsZXNGaW5hbEZpbGVSZXN1bHQge1xuICAvKipcbiAgICogVGhlIHN0YXJ0IHRpbWUgb2YgdGhlIGZpbGUgdXBsb2FkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhcnRUaW1lOiBEYXRlO1xuICAvKipcbiAgICogVGhlIGVuZCB0aW1lIG9mIHRoZSBmaWxlIHVwbG9hZCwgb3Igd2hlbiBpdCBmYWlsZWQgb3Igd2FzIGNhbmNlbGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5kVGltZTogRGF0ZTtcbiAgLyoqXG4gICAqIFRoZSBmaWxlIHRoYXQgd2FzIHVwbG9hZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZTogRmlsZTtcbiAgLyoqXG4gICAqIFRoZSBhY2Nlc3NvciBmaWxlIGZvciB0aGUgZmlsZSwgaWYgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBJcyBnZW5lcmFsbHkgYXZhaWxhYmxlIGlmIHN1Y2Nlc3MgaXMgdHJ1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVSZWY/OiBNYXliZTxGaXJlYmFzZVN0b3JhZ2VBY2Nlc3NvckZpbGU+O1xuICAvKipcbiAgICogVHJ1ZSBpZiB0aGUgZmlsZSB3YXMgdXBsb2FkZWQgc3VjY2Vzc2Z1bGx5LlxuICAgKi9cbiAgcmVhZG9ubHkgc3VjY2VzczogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEVycm9yIGlmIHRoZSBmaWxlIGZhaWxlZCB0byB1cGxvYWQuXG4gICAqL1xuICByZWFkb25seSBlcnJvcj86IE1heWJlPHVua25vd24+O1xuICAvKipcbiAgICogVHJ1ZSBpZiB0aGUgZmlsZSB1cGxvYWQgd2FzIGNhbmNlbGxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNhbmNlbGVkPzogTWF5YmU8Ym9vbGVhbj47XG59XG5cbi8qKlxuICogVXBsb2FkcyBmaWxlcyB1c2luZyB0aGUgcHJvdmlkZWQgdXBsb2FkIGhhbmRsZXIgYW5kIGZpbGVzLlxuICpcbiAqIEFuIG9ic2VydmFibGUgaXMgcmV0dXJuZWQgdGhhdCBlbWl0cyB0aGUgbGF0ZXN0IGZpbGUgZXZlbnRzIGZyb20gYW55IGZpbGUgdGhhdCBpcyBiZWluZyB1cGxvYWRlZC5cbiAqXG4gKiBAcGFyYW0gaW5wdXRcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdG9yYWdlRmlsZVVwbG9hZEZpbGVzKGlucHV0OiBTdG9yYWdlRmlsZVVwbG9hZEZpbGVzSW5wdXQpOiBTdG9yYWdlRmlsZVVwbG9hZEZpbGVzSW5zdGFuY2Uge1xuICBjb25zdCB7IHVwbG9hZEhhbmRsZXIsIGZpbGVzLCBtYXhQYXJhbGxlbFVwbG9hZHM6IGlucHV0TWF4UGFyYWxsZWxVcGxvYWRzIH0gPSBpbnB1dDtcbiAgY29uc3QgbWF4UGFyYWxsZWxUYXNrcyA9IGlucHV0TWF4UGFyYWxsZWxVcGxvYWRzID8/IDM7XG5cbiAgY29uc3QgbXVsdGlVcGxvYWRzU3Vic2NyaXB0aW9uT2JqZWN0ID0gbmV3IE11bHRpU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG5cbiAgLy8gYmVnaW4gdGhlIHVwbG9hZCBmb3IgZWFjaCBmaWxlXG4gIGNvbnN0IGFsbEZpbGVzID0gQXJyYXkuZnJvbShmaWxlcyk7XG5cbiAgLy8gdW5zdWJzY3JpYmUgZnJvbSBhbGwgcHJldmlvdXMgdXBsb2Fkc1xuICBtdWx0aVVwbG9hZHNTdWJzY3JpcHRpb25PYmplY3QudW5zdWIoKTtcblxuICBpbnRlcmZhY2UgVXBkYXRlVXBsb2FkUHJvZ3Jlc3NJbnB1dCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZpbGUgaW5kZXggbnVtYmVyLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGluZGV4OiBJbmRleE51bWJlcjtcbiAgICAvKipcbiAgICAgKiBUaGUgbmV4dCBwcm9ncmVzcyBldmVudCwgaWYgYXBwbGljYWJsZS5cbiAgICAgKi9cbiAgICByZWFkb25seSBuZXh0UHJvZ3Jlc3M/OiBNYXliZTxEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlVXBsb2FkU3RvcmVGaWxlUHJvZ3Jlc3M+O1xuICAgIC8qKlxuICAgICAqIEFuIGVycm9yIHRoYXQgb2NjdXJlZCBvdXRzaWRlIG9mIHRoZSBuZXh0UHJvZ3Jlc3MsIGlmIGFwcGxpY2FibGUuXG4gICAgICpcbiAgICAgKiBUaGVzZSBhcmUgdHlwaWNhbGx5IFwidW5jYXVnaHRcIiBlcnJvcnMuXG4gICAgICovXG4gICAgcmVhZG9ubHkgbm9uUHJvZ3Jlc3NFcnJvcj86IE1heWJlPHVua25vd24+O1xuICAgIC8qKlxuICAgICAqIFBhc3NlZCBhcyB0cnVlIHdoZW4gdGhlIHVwbG9hZCB0YXNrIGlzIGRvbmUuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIGFsc28gaW5mZXJyZWQgYXMgdHJ1ZSB3aGVuIGEgcHJvZ3Jlc3MgZXJyb3Igb2NjdXJzIGZvciBhbiB1cGxvYWQuXG4gICAgICpcbiAgICAgKiBEb2VzIG5vdCBzcGVjaWZ5IHdoZXRoZXIgb3Igbm90IHN1Y2Nlc3Mgd2FzIGFjaGlldmVkIG9yIG5vdC5cbiAgICAgKi9cbiAgICByZWFkb25seSBmaWxlVXBsb2FkVGFza0RvbmU/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFRydWUgaWYgdGhlIHVwbG9hZCB3YXMgY2FuY2VsZWQuXG4gICAgICovXG4gICAgcmVhZG9ubHkgY2FuY2VsZWQ/OiBib29sZWFuO1xuICB9XG5cbiAgaW50ZXJmYWNlIEZpbGVVcGxvYWREZXRhaWxzIHtcbiAgICByZWFkb25seSBmaWxlOiBGaWxlO1xuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHVwbG9hZCBpbnN0YW5jZSBmb3IgdGhlIGZpbGUuXG4gICAgICpcbiAgICAgKiBTZXQgaWYgdGhlIGZpbGUgaXMgY3VycmVudGx5IHVwbG9hZGluZy5cbiAgICAgKi9cbiAgICB1cGxvYWRJbnN0YW5jZT86IFN0b3JhZ2VGaWxlVXBsb2FkSGFuZGxlckluc3RhbmNlO1xuICAgIGZpbGVSZWY/OiBNYXliZTxGaXJlYmFzZVN0b3JhZ2VBY2Nlc3NvckZpbGU+O1xuICAgIHN0YXJ0VGltZT86IERhdGU7XG4gICAgZW5kVGltZT86IERhdGU7XG4gICAgc3VjY2Vzcz86IGJvb2xlYW47XG4gICAgY2FuY2VsZWQ/OiBNYXliZTxib29sZWFuPjtcbiAgICBlcnJvcj86IE1heWJlPHVua25vd24+O1xuICB9XG5cbiAgY29uc3QgYWxsRmlsZXNBbmRMYXRlc3RQcm9ncmVzczogTWF5YmU8RGJ4RmlyZWJhc2VTdG9yYWdlRmlsZVVwbG9hZFN0b3JlRmlsZVByb2dyZXNzPltdID0gbmV3IEFycmF5KGFsbEZpbGVzLmxlbmd0aCk7XG4gIGNvbnN0IGFsbEZpbGVzQW5kRGV0YWlsczogRmlsZVVwbG9hZERldGFpbHNbXSA9IGFsbEZpbGVzLm1hcCgoZmlsZSkgPT4gKHsgZmlsZSB9KSk7XG4gIGNvbnN0IG92ZXJhbGxQcm9ncmVzc1BlckNvbXBsZXRlZEZpbGU6IFBlcmNlbnREZWNpbWFsID0gKDEgLyBhbGxGaWxlc0FuZExhdGVzdFByb2dyZXNzLmxlbmd0aCkgYXMgUGVyY2VudERlY2ltYWw7XG5cbiAgLyoqXG4gICAqIE9uY2Ugc2V0LCBhbnkgbmV3IGZpbGUgdXBsb2FkIHRhc2sgdGhhdCBoaXRzIHRoaXMgd2lsbCByZXR1cm4gYW4gY2FuY2VsIGZhaWx1cmUuXG4gICAqL1xuICBsZXQgZmxhZ2dlZENhbmNlbCA9IGZhbHNlO1xuXG4gIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcbiAgICBmbGFnZ2VkQ2FuY2VsID0gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCB1cGxvYWQgPSBuZXcgT2JzZXJ2YWJsZTxTdG9yYWdlRmlsZVVwbG9hZEZpbGVzRXZlbnQ+KChzdWJzY3JpYmVyKSA9PiB7XG4gICAgY29uc3Qgb3ZlcmFsbFN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7XG5cbiAgICBjb25zdCBpbmNvbXBsZXRlRmlsZUZpbGVJbmRleGVzID0gbmV3IFNldDxJbmRleE51bWJlcj4oYWxsRmlsZXMubWFwKChfLCBpbmRleCkgPT4gaW5kZXgpKTtcbiAgICBjb25zdCBhY3RpdmVGaWxlSW5kZXhlcyA9IG5ldyBTZXQ8SW5kZXhOdW1iZXI+KCk7XG4gICAgY29uc3QgZG9uZUZpbGVJbmRleGVzID0gbmV3IFNldDxJbmRleE51bWJlcj4oKTtcbiAgICBsZXQgbGF0ZXN0T3ZlcmFsbFByb2dyZXNzOiBQZXJjZW50TnVtYmVyID0gMDtcblxuICAgIGZ1bmN0aW9uIG9uU3RhcnRGaWxlVXBsb2FkKGluZGV4OiBJbmRleE51bWJlciwgdXBsb2FkSW5zdGFuY2U6IFN0b3JhZ2VGaWxlVXBsb2FkSGFuZGxlckluc3RhbmNlKSB7XG4gICAgICBhY3RpdmVGaWxlSW5kZXhlcy5hZGQoaW5kZXgpO1xuICAgICAgYWxsRmlsZXNBbmREZXRhaWxzW2luZGV4XS5zdGFydFRpbWUgPSBuZXcgRGF0ZSgpO1xuICAgICAgYWxsRmlsZXNBbmREZXRhaWxzW2luZGV4XS51cGxvYWRJbnN0YW5jZSA9IHVwbG9hZEluc3RhbmNlO1xuICAgICAgYWxsRmlsZXNBbmREZXRhaWxzW2luZGV4XS5maWxlUmVmID0gdXBsb2FkSW5zdGFuY2UudGFza1JlZjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvblN0YXJ0RmlsZVVwbG9hZEZsYWdnZWRDYW5jZWxsZWQoaW5kZXg6IEluZGV4TnVtYmVyKSB7XG4gICAgICBhbGxGaWxlc0FuZERldGFpbHNbaW5kZXhdLnN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7XG5cbiAgICAgIC8vIGltbWVkaWF0ZWx5IG1hcmsgaXQgZG9uZVxuICAgICAgX21hcmtGaWxlVXBsb2FkRG9uZShpbmRleCwgdHJ1ZSk7XG5cbiAgICAgIC8vIGVtaXQgbmV3IHByb2dyZXNzIGV2ZW50XG4gICAgICBfZW1pdEV2ZW50KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX21hcmtGaWxlVXBsb2FkRG9uZShmaWxlSW5kZXg6IEluZGV4TnVtYmVyLCBmaW5hbEVycm9yPzogTWF5YmU8dW5rbm93bj4pIHtcbiAgICAgIGRvbmVGaWxlSW5kZXhlcy5hZGQoZmlsZUluZGV4KTsgLy8gYWRkIHRvIGRvbmUgZmlsZSBpbmRleGVzXG4gICAgICBhY3RpdmVGaWxlSW5kZXhlcy5kZWxldGUoZmlsZUluZGV4KTsgLy8gcmVtb3ZlIGZyb20gYWN0aXZlIGZpbGUgaW5kZXhlcyBpZiBpdCBleGlzdHNcbiAgICAgIGluY29tcGxldGVGaWxlRmlsZUluZGV4ZXMuZGVsZXRlKGZpbGVJbmRleCk7IC8vIHJlbW92ZSBmcm9tIGluY29tcGxldGUgZmlsZSBpbmRleGVzXG5cbiAgICAgIC8vIHVwZGF0ZSBkZXRhaWxzXG4gICAgICBhbGxGaWxlc0FuZERldGFpbHNbZmlsZUluZGV4XS5lbmRUaW1lID0gbmV3IERhdGUoKTtcblxuICAgICAgY29uc3QgZXJyb3IgPSBmaW5hbEVycm9yID8/IGFsbEZpbGVzQW5kRGV0YWlsc1tmaWxlSW5kZXhdLmVycm9yO1xuICAgICAgYWxsRmlsZXNBbmREZXRhaWxzW2ZpbGVJbmRleF0uc3VjY2VzcyA9ICFlcnJvcjtcbiAgICAgIGFsbEZpbGVzQW5kRGV0YWlsc1tmaWxlSW5kZXhdLmVycm9yID0gZXJyb3I7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlVXBsb2FkUHJvZ3Jlc3MoaW5wdXQ6IFVwZGF0ZVVwbG9hZFByb2dyZXNzSW5wdXQpIHtcbiAgICAgIGNvbnN0IHsgaW5kZXg6IGZpbGVJbmRleCwgbmV4dFByb2dyZXNzLCBmaWxlVXBsb2FkVGFza0RvbmU6IGlucHV0RmlsZVVwbG9hZFRhc2tEb25lLCBub25Qcm9ncmVzc0Vycm9yIH0gPSBpbnB1dDtcbiAgICAgIGNvbnN0IGVycm9yID0gbm9uUHJvZ3Jlc3NFcnJvciA/PyBuZXh0UHJvZ3Jlc3M/LmVycm9yO1xuICAgICAgY29uc3QgZmlsZVVwbG9hZFRhc2tEb25lID0gaW5wdXRGaWxlVXBsb2FkVGFza0RvbmUgPz8gQm9vbGVhbihlcnJvcik7XG5cbiAgICAgIC8vIHRoZSB0YXNrIG1heSBhbHJlYWR5IGJlIGRvbmUsIGFzIGFmdGVyIGEgcHJvZ3Jlc3MtcmVsYXRlZCBlcnJvciB0aGUgY29tcGxldGUgdGFzayBjYW4gZ2V0IGNhbGxlZC5cbiAgICAgIGNvbnN0IGlzVGFza0FscmVhZHlEb25lID0gYWxsRmlsZXNBbmREZXRhaWxzW2ZpbGVJbmRleF0uZW5kVGltZSAhPSBudWxsO1xuXG4gICAgICBpZiAoIWlzVGFza0FscmVhZHlEb25lKSB7XG4gICAgICAgIGxldCBuZXh0T3ZlcmFsbFByb2dyZXNzID0gbGF0ZXN0T3ZlcmFsbFByb2dyZXNzO1xuICAgICAgICBjb25zdCBuZXh0UHJvZ3Jlc3NQZXJjZW50ID0gZmlsZVVwbG9hZFRhc2tEb25lID8gMTAwIDogKG5leHRQcm9ncmVzcz8ucHJvZ3Jlc3MgPz8gMCkgKiAxMDA7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSBvdmVyYWxsIHByb2dyZXNzIHBlcmNlbnRhZ2VcbiAgICAgICAgaWYgKG5leHRQcm9ncmVzc1BlcmNlbnQpIHtcbiAgICAgICAgICAvLyB1cGRhdGUgdGhlIG92ZXJhbGwgcGVyY2VudGFnZVxuICAgICAgICAgIGNvbnN0IHByZXZpb3VzUHJvZ3Jlc3MgPSBhbGxGaWxlc0FuZExhdGVzdFByb2dyZXNzW2ZpbGVJbmRleF07XG4gICAgICAgICAgY29uc3QgcHJldmlvdXNQcm9ncmVzc1BlcmNlbnQgPSBwcmV2aW91c1Byb2dyZXNzPy5wcm9ncmVzcyAhPSBudWxsID8gcHJldmlvdXNQcm9ncmVzcy5wcm9ncmVzcyAqIDEwMCA6IDA7XG4gICAgICAgICAgY29uc3QgcHJvZ3Jlc3NQZXJjZW50Q2hhbmdlID0gbmV4dFByb2dyZXNzUGVyY2VudCAtIHByZXZpb3VzUHJvZ3Jlc3NQZXJjZW50O1xuXG4gICAgICAgICAgLy8gaW5jcmVhc2Ugb3ZlcmFsbCBwcm9ncmVzcyBieSB0aGUgY2hhbmdlXG4gICAgICAgICAgbmV4dE92ZXJhbGxQcm9ncmVzcyArPSBwcm9ncmVzc1BlcmNlbnRDaGFuZ2UgKiBvdmVyYWxsUHJvZ3Jlc3NQZXJDb21wbGV0ZWRGaWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSBmaWxlIHByb2dyZXNzXG4gICAgICAgIGlmIChuZXh0UHJvZ3Jlc3MpIHtcbiAgICAgICAgICAvLyB1cGRhdGUgdGhlIGxhdGVzdCBGaWxlUHJvZ3Jlc3NcbiAgICAgICAgICBhbGxGaWxlc0FuZExhdGVzdFByb2dyZXNzW2ZpbGVJbmRleF0gPSBuZXh0UHJvZ3Jlc3M7XG5cbiAgICAgICAgICAvLyBvbmx5IHNldCBmaWxlUmVmIG9uY2VcbiAgICAgICAgICBpZiAoIWFsbEZpbGVzQW5kRGV0YWlsc1tmaWxlSW5kZXhdLmZpbGVSZWYpIHtcbiAgICAgICAgICAgIGFsbEZpbGVzQW5kRGV0YWlsc1tmaWxlSW5kZXhdLmZpbGVSZWYgPSBuZXh0UHJvZ3Jlc3MuZmlsZVJlZjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBjb21wbGV0ZSwgdXBkYXRlIHRoZSBpbmRleGVzIGFuZCBkZXRhaWxzXG4gICAgICAgIGlmIChmaWxlVXBsb2FkVGFza0RvbmUpIHtcbiAgICAgICAgICBfbWFya0ZpbGVVcGxvYWREb25lKGZpbGVJbmRleCwgZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSBvdmVyYWxsIHByb2dyZXNzXG4gICAgICAgIGxhdGVzdE92ZXJhbGxQcm9ncmVzcyA9IG5leHRPdmVyYWxsUHJvZ3Jlc3M7XG5cbiAgICAgICAgLy8gZW1pdCB0aGUgZXZlbnQgdG8gc2VuZCBpdFxuICAgICAgICBfZW1pdEV2ZW50KG5leHRQcm9ncmVzcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2VtaXRFdmVudChuZXh0UHJvZ3Jlc3M/OiBNYXliZTxEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlVXBsb2FkU3RvcmVGaWxlUHJvZ3Jlc3M+KSB7XG4gICAgICBjb25zdCBpc0NvbXBsZXRlID0gaW5jb21wbGV0ZUZpbGVGaWxlSW5kZXhlcy5zaXplID09PSAwO1xuXG4gICAgICBsZXQgb3ZlcmFsbFByb2dyZXNzID0gbGF0ZXN0T3ZlcmFsbFByb2dyZXNzO1xuICAgICAgbGV0IHJlc3VsdDogTWF5YmU8U3RvcmFnZUZpbGVVcGxvYWRGaWxlc0ZpbmFsUmVzdWx0PiA9IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKGlzQ29tcGxldGUpIHtcbiAgICAgICAgb3ZlcmFsbFByb2dyZXNzID0gMTAwOyAvLyBzZXQgdG8gMTAwJVxuICAgICAgICBjb25zdCBvdmVyYWxsRW5kVGltZSA9IG5ldyBEYXRlKCk7XG5cbiAgICAgICAgY29uc3QgZmlsZVJlc3VsdHMgPSBhbGxGaWxlcy5tYXAoKGZpbGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0OiBTdG9yYWdlRmlsZVVwbG9hZEZpbGVzRmluYWxGaWxlUmVzdWx0ID0ge1xuICAgICAgICAgICAgc3RhcnRUaW1lOiBhbGxGaWxlc0FuZERldGFpbHNbaW5kZXhdLnN0YXJ0VGltZSBhcyBEYXRlLFxuICAgICAgICAgICAgZW5kVGltZTogYWxsRmlsZXNBbmREZXRhaWxzW2luZGV4XS5lbmRUaW1lIGFzIERhdGUsXG4gICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAgZmlsZVJlZjogYWxsRmlsZXNBbmREZXRhaWxzW2luZGV4XS5maWxlUmVmLFxuICAgICAgICAgICAgc3VjY2VzczogIWFsbEZpbGVzQW5kRGV0YWlsc1tpbmRleF0uZXJyb3IsXG4gICAgICAgICAgICBlcnJvcjogYWxsRmlsZXNBbmREZXRhaWxzW2luZGV4XS5lcnJvclxuICAgICAgICAgIH07XG5cbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB7IGluY2x1ZGVkOiBzdWNjZXNzRmlsZVJlc3VsdHMsIGV4Y2x1ZGVkOiBlcnJvckZpbGVSZXN1bHRzIH0gPSBzZXBhcmF0ZVZhbHVlcyhmaWxlUmVzdWx0cywgKHgpID0+IHguc3VjY2Vzcyk7XG5cbiAgICAgICAgLy8gYWxsIGFyZSBkb25lLCBzZXQgdGhlIHJlc3VsdCBvbiB0aGUgbmV4dCBldmVudFxuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgc3RhcnRUaW1lOiBvdmVyYWxsU3RhcnRUaW1lLFxuICAgICAgICAgIGVuZFRpbWU6IG92ZXJhbGxFbmRUaW1lLFxuICAgICAgICAgIHN1Y2Nlc3NGaWxlUmVzdWx0cyxcbiAgICAgICAgICBlcnJvckZpbGVSZXN1bHRzLFxuICAgICAgICAgIGZpbGVSZXN1bHRzXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRFdmVudDogU3RvcmFnZUZpbGVVcGxvYWRGaWxlc0V2ZW50ID0ge1xuICAgICAgICBhbGxGaWxlcyxcbiAgICAgICAgaXNDb21wbGV0ZSxcbiAgICAgICAgb3ZlcmFsbFByb2dyZXNzLFxuICAgICAgICB1cGxvYWRQcm9ncmVzczogbmV4dFByb2dyZXNzLFxuICAgICAgICBpbmNvbXBsZXRlRmlsZUNvdW50OiBpbmNvbXBsZXRlRmlsZUZpbGVJbmRleGVzLnNpemUsXG4gICAgICAgIGFjdGl2ZUZpbGVDb3VudDogYWN0aXZlRmlsZUluZGV4ZXMuc2l6ZSxcbiAgICAgICAgZG9uZUZpbGVDb3VudDogZG9uZUZpbGVJbmRleGVzLnNpemUsXG4gICAgICAgIHJlc3VsdFxuICAgICAgfTtcblxuICAgICAgc3Vic2NyaWJlci5uZXh0KG5leHRFdmVudCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gcnVuVXBsb2FkVGFza0ZvckZpbGUoW2ZpbGUsIGluZGV4XTogcmVhZG9ubHkgW0ZpbGUsIEluZGV4TnVtYmVyXSkge1xuICAgICAgaWYgKGZsYWdnZWRDYW5jZWwpIHtcbiAgICAgICAgb25TdGFydEZpbGVVcGxvYWRGbGFnZ2VkQ2FuY2VsbGVkKGluZGV4KTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlRmlsZVVwbG9hZFByb2dyZXNzID0gKG5leHRQcm9ncmVzczogRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZVVwbG9hZFN0b3JlRmlsZVByb2dyZXNzKSA9PiB7XG4gICAgICAgICAgLy8gdXBkYXRlIHRoZSBwcm9ncmVzc1xuICAgICAgICAgIHVwZGF0ZVVwbG9hZFByb2dyZXNzKHtcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgbmV4dFByb2dyZXNzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgdXBkYXRlRmlsZVVwbG9hZFByb2dyZXNzV2l0aFVuY2F1Z2h0RXJyb3IgPSAoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgICAgICAvLyBlcnJvciBvY2N1cnJlZCwgdXBkYXRlIHRoZSBwcm9ncmVzcyB3aXRoIHRoZSBlcnJvclxuICAgICAgICAgIHVwZGF0ZVVwbG9hZFByb2dyZXNzKHtcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgbm9uUHJvZ3Jlc3NFcnJvcjogZXJyb3IsXG4gICAgICAgICAgICBmaWxlVXBsb2FkVGFza0RvbmU6IHRydWVcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIGFsd2F5cyByZXNvbHZlLCBuZXZlciByZWplY3RcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgY29tcGxldGVGaWxlVXBsb2FkUHJvZ3Jlc3MgPSAoKSA9PiB7XG4gICAgICAgICAgdXBkYXRlVXBsb2FkUHJvZ3Jlc3Moe1xuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBmaWxlVXBsb2FkVGFza0RvbmU6IHRydWVcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyB1cGxvYWQgdGhlIGZpbGUsIHN1YnNjcmliZSB0byB0aGUgcHJvZ3Jlc3NcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB1cGxvYWRIYW5kbGVyXG4gICAgICAgICAgICAudXBsb2FkRmlsZShmaWxlKVxuICAgICAgICAgICAgLnRoZW4oKHVwbG9hZEluc3RhbmNlKSA9PiB7XG4gICAgICAgICAgICAgIC8vIGFkZCB0byBhY3RpdmUgZmlsZSBpbmRleGVzXG4gICAgICAgICAgICAgIG9uU3RhcnRGaWxlVXBsb2FkKGluZGV4LCB1cGxvYWRJbnN0YW5jZSk7XG5cbiAgICAgICAgICAgICAgY29uc3QgdXBsb2FkU3Vic2NyaXB0aW9uID0gdXBsb2FkSW5zdGFuY2UudXBsb2FkLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogdXBkYXRlRmlsZVVwbG9hZFByb2dyZXNzLFxuICAgICAgICAgICAgICAgIGVycm9yOiB1cGRhdGVGaWxlVXBsb2FkUHJvZ3Jlc3NXaXRoVW5jYXVnaHRFcnJvcixcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogY29tcGxldGVGaWxlVXBsb2FkUHJvZ3Jlc3NcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgbXVsdGlVcGxvYWRzU3Vic2NyaXB0aW9uT2JqZWN0LmFkZFN1YnModXBsb2FkU3Vic2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2godXBkYXRlRmlsZVVwbG9hZFByb2dyZXNzV2l0aFVuY2F1Z2h0RXJyb3IpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHVwZGF0ZUZpbGVVcGxvYWRQcm9ncmVzc1dpdGhVbmNhdWdodEVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gcnVuIHVwbG9hZCB0YXNrIGZvciBlYWNoIGZpbGVcbiAgICBjb25zdCBmaWxlVHVwbGVzID0gYWxsRmlsZXMubWFwKChmaWxlLCBpbmRleCkgPT4gW2ZpbGUsIGluZGV4XSBhcyBjb25zdCk7XG5cbiAgICBydW5Bc3luY1Rhc2tzRm9yVmFsdWVzKGZpbGVUdXBsZXMsIHJ1blVwbG9hZFRhc2tGb3JGaWxlLCB7XG4gICAgICBtYXhQYXJhbGxlbFRhc2tzLFxuICAgICAgcmV0cmllc0FsbG93ZWQ6IDAgLy8gbm8gcmV0cmllcyBhbGxvd2VkXG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAvLyBhbGwgdGFza3MgYXJlIGZpbmlzaGVkLiBDb21wbGV0ZSB0aGUgc3Vic2NyaWJlci5cbiAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbiAgfSkucGlwZShzaGFyZVJlcGxheSgxKSk7XG5cbiAgY29uc3QgaW5zdGFuY2U6IFN0b3JhZ2VGaWxlVXBsb2FkRmlsZXNJbnN0YW5jZSA9IHtcbiAgICBjYW5jZWwsXG4gICAgdXBsb2FkXG4gIH07XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuIl19
@@ -0,0 +1,39 @@
1
+ import { Directive, inject } from '@angular/core';
2
+ import { DbxFirebaseStorageFileUploadStore, StorageFileDocumentStore } from '../store';
3
+ import { AbstractSubscriptionDirective } from '@dereekb/dbx-core';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * Directive that passes the upload result to a StorageFileDocumentStore to initialize the document immediately.
7
+ */
8
+ export class DbxFirebaseStorageFileUploadInitializeDocumentDirective extends AbstractSubscriptionDirective {
9
+ uploadStore = inject(DbxFirebaseStorageFileUploadStore);
10
+ storageFileDocumentStore = inject(StorageFileDocumentStore);
11
+ constructor() {
12
+ super();
13
+ this.sub = this.uploadStore.uploadResult$.subscribe(async (result) => {
14
+ const successFileResult = result.successFileResults.find((x) => x.fileRef != null);
15
+ if (successFileResult) {
16
+ const fileRef = successFileResult.fileRef;
17
+ if (fileRef) {
18
+ this.storageFileDocumentStore
19
+ .initializeStorageFileFromUpload({
20
+ pathString: fileRef.storagePath.pathString,
21
+ bucketId: fileRef.storagePath.bucketId
22
+ })
23
+ .subscribe();
24
+ }
25
+ }
26
+ });
27
+ }
28
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileUploadInitializeDocumentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
29
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: DbxFirebaseStorageFileUploadInitializeDocumentDirective, isStandalone: true, selector: "[dbxFirebaseStorageFileUploadInitializeDocument]", exportAs: ["dbxFirebaseStorageFileUploadInitializeDocument"], usesInheritance: true, ngImport: i0 });
30
+ }
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileUploadInitializeDocumentDirective, decorators: [{
32
+ type: Directive,
33
+ args: [{
34
+ selector: '[dbxFirebaseStorageFileUploadInitializeDocument]',
35
+ exportAs: 'dbxFirebaseStorageFileUploadInitializeDocument',
36
+ standalone: true
37
+ }]
38
+ }], ctorParameters: () => [] });
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZWZpbGUudXBsb2FkLmluaXRpYWxpemUuZG9jdW1lbnQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZpcmViYXNlL3NyYy9saWIvbW9kdWxlcy9zdG9yYWdlZmlsZS9jb250YWluZXIvc3RvcmFnZWZpbGUudXBsb2FkLmluaXRpYWxpemUuZG9jdW1lbnQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN2RixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFHbEU7O0dBRUc7QUFNSCxNQUFNLE9BQU8sdURBQXdELFNBQVEsNkJBQTZCO0lBQy9GLFdBQVcsR0FBRyxNQUFNLENBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUN4RCx3QkFBd0IsR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUVyRTtRQUNFLEtBQUssRUFBRSxDQUFDO1FBRVIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25FLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQztZQUVuRixJQUFJLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sT0FBTyxHQUFHLGlCQUFpQixDQUFDLE9BQXNDLENBQUM7Z0JBRXpFLElBQUksT0FBTyxFQUFFLENBQUM7b0JBQ1osSUFBSSxDQUFDLHdCQUF3Qjt5QkFDMUIsK0JBQStCLENBQUM7d0JBQy9CLFVBQVUsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVU7d0JBQzFDLFFBQVEsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLFFBQVE7cUJBQ3ZDLENBQUM7eUJBQ0QsU0FBUyxFQUFFLENBQUM7Z0JBQ2pCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO3dHQXZCVSx1REFBdUQ7NEZBQXZELHVEQUF1RDs7NEZBQXZELHVEQUF1RDtrQkFMbkUsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsa0RBQWtEO29CQUM1RCxRQUFRLEVBQUUsZ0RBQWdEO29CQUMxRCxVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIGluamVjdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlVXBsb2FkU3RvcmUsIFN0b3JhZ2VGaWxlRG9jdW1lbnRTdG9yZSB9IGZyb20gJy4uL3N0b3JlJztcbmltcG9ydCB7IEFic3RyYWN0U3Vic2NyaXB0aW9uRGlyZWN0aXZlIH0gZnJvbSAnQGRlcmVla2IvZGJ4LWNvcmUnO1xuaW1wb3J0IHsgRmlyZWJhc2VTdG9yYWdlQWNjZXNzb3JGaWxlIH0gZnJvbSAnQGRlcmVla2IvZmlyZWJhc2UnO1xuXG4vKipcbiAqIERpcmVjdGl2ZSB0aGF0IHBhc3NlcyB0aGUgdXBsb2FkIHJlc3VsdCB0byBhIFN0b3JhZ2VGaWxlRG9jdW1lbnRTdG9yZSB0byBpbml0aWFsaXplIHRoZSBkb2N1bWVudCBpbW1lZGlhdGVseS5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2RieEZpcmViYXNlU3RvcmFnZUZpbGVVcGxvYWRJbml0aWFsaXplRG9jdW1lbnRdJyxcbiAgZXhwb3J0QXM6ICdkYnhGaXJlYmFzZVN0b3JhZ2VGaWxlVXBsb2FkSW5pdGlhbGl6ZURvY3VtZW50JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlVXBsb2FkSW5pdGlhbGl6ZURvY3VtZW50RGlyZWN0aXZlIGV4dGVuZHMgQWJzdHJhY3RTdWJzY3JpcHRpb25EaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICByZWFkb25seSB1cGxvYWRTdG9yZSA9IGluamVjdChEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlVXBsb2FkU3RvcmUpO1xuICByZWFkb25seSBzdG9yYWdlRmlsZURvY3VtZW50U3RvcmUgPSBpbmplY3QoU3RvcmFnZUZpbGVEb2N1bWVudFN0b3JlKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5zdWIgPSB0aGlzLnVwbG9hZFN0b3JlLnVwbG9hZFJlc3VsdCQuc3Vic2NyaWJlKGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3NGaWxlUmVzdWx0ID0gcmVzdWx0LnN1Y2Nlc3NGaWxlUmVzdWx0cy5maW5kKCh4KSA9PiB4LmZpbGVSZWYgIT0gbnVsbCk7XG5cbiAgICAgIGlmIChzdWNjZXNzRmlsZVJlc3VsdCkge1xuICAgICAgICBjb25zdCBmaWxlUmVmID0gc3VjY2Vzc0ZpbGVSZXN1bHQuZmlsZVJlZiBhcyBGaXJlYmFzZVN0b3JhZ2VBY2Nlc3NvckZpbGU7XG5cbiAgICAgICAgaWYgKGZpbGVSZWYpIHtcbiAgICAgICAgICB0aGlzLnN0b3JhZ2VGaWxlRG9jdW1lbnRTdG9yZVxuICAgICAgICAgICAgLmluaXRpYWxpemVTdG9yYWdlRmlsZUZyb21VcGxvYWQoe1xuICAgICAgICAgICAgICBwYXRoU3RyaW5nOiBmaWxlUmVmLnN0b3JhZ2VQYXRoLnBhdGhTdHJpbmcsXG4gICAgICAgICAgICAgIGJ1Y2tldElkOiBmaWxlUmVmLnN0b3JhZ2VQYXRoLmJ1Y2tldElkXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,38 @@
1
+ import { Directive, inject, input } from '@angular/core';
2
+ import { skipAllInitialMaybe, SubscriptionObject } from '@dereekb/rxjs';
3
+ import { DbxFirebaseStorageFileUploadStore } from '../store';
4
+ import { toObservable } from '@angular/core/rxjs-interop';
5
+ import { shareReplay } from 'rxjs';
6
+ import * as i0 from "@angular/core";
7
+ /**
8
+ * Directive that provides a DbxFirebaseStorageFileUploadStore, and sync's the inputs to the store.
9
+ */
10
+ export class DbxFirebaseStorageFileUploadStoreDirective {
11
+ _allowedSub = new SubscriptionObject();
12
+ _multiSub = new SubscriptionObject();
13
+ uploadStore = inject(DbxFirebaseStorageFileUploadStore);
14
+ multipleUpload = input();
15
+ fileTypesAccepted = input();
16
+ fileTypesAccepted$ = toObservable(this.fileTypesAccepted).pipe(skipAllInitialMaybe(), shareReplay(1));
17
+ isMultiUploadAllowed$ = toObservable(this.multipleUpload).pipe(skipAllInitialMaybe(), shareReplay(1));
18
+ constructor() {
19
+ this._allowedSub.subscription = this.fileTypesAccepted$.subscribe((x) => this.uploadStore.setFileTypesAccepted(x));
20
+ this._multiSub.subscription = this.isMultiUploadAllowed$.subscribe((x) => this.uploadStore.setIsMultiUploadAllowed(x));
21
+ }
22
+ ngOnDestroy() {
23
+ this._allowedSub.destroy();
24
+ this._multiSub.destroy();
25
+ }
26
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileUploadStoreDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
27
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: DbxFirebaseStorageFileUploadStoreDirective, isStandalone: true, selector: "[dbxFirebaseStorageFileUploadStore]", inputs: { multipleUpload: { classPropertyName: "multipleUpload", publicName: "multipleUpload", isSignal: true, isRequired: false, transformFunction: null }, fileTypesAccepted: { classPropertyName: "fileTypesAccepted", publicName: "fileTypesAccepted", isSignal: true, isRequired: false, transformFunction: null } }, providers: [DbxFirebaseStorageFileUploadStore], exportAs: ["dbxFirebaseStorageFileUploadStore"], ngImport: i0 });
28
+ }
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileUploadStoreDirective, decorators: [{
30
+ type: Directive,
31
+ args: [{
32
+ selector: '[dbxFirebaseStorageFileUploadStore]',
33
+ exportAs: 'dbxFirebaseStorageFileUploadStore',
34
+ providers: [DbxFirebaseStorageFileUploadStore],
35
+ standalone: true
36
+ }]
37
+ }], ctorParameters: () => [] });
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZWZpbGUudXBsb2FkLnN0b3JlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1maXJlYmFzZS9zcmMvbGliL21vZHVsZXMvc3RvcmFnZWZpbGUvY29udGFpbmVyL3N0b3JhZ2VmaWxlLnVwbG9hZC5zdG9yZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBR25DOztHQUVHO0FBT0gsTUFBTSxPQUFPLDBDQUEwQztJQUNwQyxXQUFXLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO0lBQ3ZDLFNBQVMsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7SUFFN0MsV0FBVyxHQUFHLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBRXhELGNBQWMsR0FBRyxLQUFLLEVBQWtCLENBQUM7SUFDekMsaUJBQWlCLEdBQUcsS0FBSyxFQUFtRCxDQUFDO0lBRTdFLGtCQUFrQixHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RyxxQkFBcUIsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRS9HO1FBQ0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25ILElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6SCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzQixDQUFDO3dHQXBCVSwwQ0FBMEM7NEZBQTFDLDBDQUEwQyw2WUFIMUMsQ0FBQyxpQ0FBaUMsQ0FBQzs7NEZBR25DLDBDQUEwQztrQkFOdEQsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUscUNBQXFDO29CQUMvQyxRQUFRLEVBQUUsbUNBQW1DO29CQUM3QyxTQUFTLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBQztvQkFDOUMsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBpbmplY3QsIGlucHV0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHNraXBBbGxJbml0aWFsTWF5YmUsIFN1YnNjcmlwdGlvbk9iamVjdCB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuaW1wb3J0IHsgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZVVwbG9hZFN0b3JlIH0gZnJvbSAnLi4vc3RvcmUnO1xuaW1wb3J0IHsgQXJyYXlPclZhbHVlLCBNYXliZSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZpbGVBY2NlcHRGaWx0ZXJUeXBlU3RyaW5nIH0gZnJvbSAnQGRlcmVla2IvZGJ4LXdlYic7XG5cbi8qKlxuICogRGlyZWN0aXZlIHRoYXQgcHJvdmlkZXMgYSBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlVXBsb2FkU3RvcmUsIGFuZCBzeW5jJ3MgdGhlIGlucHV0cyB0byB0aGUgc3RvcmUuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tkYnhGaXJlYmFzZVN0b3JhZ2VGaWxlVXBsb2FkU3RvcmVdJyxcbiAgZXhwb3J0QXM6ICdkYnhGaXJlYmFzZVN0b3JhZ2VGaWxlVXBsb2FkU3RvcmUnLFxuICBwcm92aWRlcnM6IFtEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlVXBsb2FkU3RvcmVdLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIERieEZpcmViYXNlU3RvcmFnZUZpbGVVcGxvYWRTdG9yZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FsbG93ZWRTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX211bHRpU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuXG4gIHJlYWRvbmx5IHVwbG9hZFN0b3JlID0gaW5qZWN0KERieEZpcmViYXNlU3RvcmFnZUZpbGVVcGxvYWRTdG9yZSk7XG5cbiAgcmVhZG9ubHkgbXVsdGlwbGVVcGxvYWQgPSBpbnB1dDxNYXliZTxib29sZWFuPj4oKTtcbiAgcmVhZG9ubHkgZmlsZVR5cGVzQWNjZXB0ZWQgPSBpbnB1dDxNYXliZTxBcnJheU9yVmFsdWU8RmlsZUFjY2VwdEZpbHRlclR5cGVTdHJpbmc+Pj4oKTtcblxuICByZWFkb25seSBmaWxlVHlwZXNBY2NlcHRlZCQgPSB0b09ic2VydmFibGUodGhpcy5maWxlVHlwZXNBY2NlcHRlZCkucGlwZShza2lwQWxsSW5pdGlhbE1heWJlKCksIHNoYXJlUmVwbGF5KDEpKTtcbiAgcmVhZG9ubHkgaXNNdWx0aVVwbG9hZEFsbG93ZWQkID0gdG9PYnNlcnZhYmxlKHRoaXMubXVsdGlwbGVVcGxvYWQpLnBpcGUoc2tpcEFsbEluaXRpYWxNYXliZSgpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fYWxsb3dlZFN1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLmZpbGVUeXBlc0FjY2VwdGVkJC5zdWJzY3JpYmUoKHgpID0+IHRoaXMudXBsb2FkU3RvcmUuc2V0RmlsZVR5cGVzQWNjZXB0ZWQoeCkpO1xuICAgIHRoaXMuX211bHRpU3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMuaXNNdWx0aVVwbG9hZEFsbG93ZWQkLnN1YnNjcmliZSgoeCkgPT4gdGhpcy51cGxvYWRTdG9yZS5zZXRJc011bHRpVXBsb2FkQWxsb3dlZCh4KSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9hbGxvd2VkU3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9tdWx0aVN1Yi5kZXN0cm95KCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,36 @@
1
+ import { Directive, inject } from '@angular/core';
2
+ import { SubscriptionObject } from '@dereekb/rxjs';
3
+ import { DbxFirebaseStorageFileUploadStore } from '../store';
4
+ import { DbxFileUploadComponent } from '@dereekb/dbx-web';
5
+ import * as i0 from "@angular/core";
6
+ /**
7
+ * Directive that syncs a DbxFirebaseStorageFileUploadStore's configuration to a DbxFileUploadComponent.
8
+ */
9
+ export class DbxFirebaseStorageFileUploadSyncDirective {
10
+ _allowedSub = new SubscriptionObject();
11
+ _multiSub = new SubscriptionObject();
12
+ _filesSub = new SubscriptionObject();
13
+ uploadStore = inject(DbxFirebaseStorageFileUploadStore);
14
+ uploadComponent = inject(DbxFileUploadComponent);
15
+ constructor() {
16
+ this._allowedSub.subscription = this.uploadStore.fileTypesAllowed$.subscribe((x) => this.uploadComponent.setAccept(x));
17
+ this._multiSub.subscription = this.uploadStore.isMultiUploadAllowed$.subscribe((x) => this.uploadComponent.setMultiple(x));
18
+ this._filesSub.subscription = this.uploadComponent.filesChanged.subscribe((files) => this.uploadStore.setFiles(files.matchResult.accepted));
19
+ }
20
+ ngOnDestroy() {
21
+ this._allowedSub.destroy();
22
+ this._multiSub.destroy();
23
+ this._filesSub.destroy();
24
+ }
25
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileUploadSyncDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
26
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: DbxFirebaseStorageFileUploadSyncDirective, isStandalone: true, selector: "[dbxFirebaseStorageFileUploadSync]", exportAs: ["dbxFirebaseStorageFileUploadSync"], ngImport: i0 });
27
+ }
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileUploadSyncDirective, decorators: [{
29
+ type: Directive,
30
+ args: [{
31
+ selector: '[dbxFirebaseStorageFileUploadSync]',
32
+ exportAs: 'dbxFirebaseStorageFileUploadSync',
33
+ standalone: true
34
+ }]
35
+ }], ctorParameters: () => [] });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZWZpbGUudXBsb2FkLnN5bmMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZpcmViYXNlL3NyYy9saWIvbW9kdWxlcy9zdG9yYWdlZmlsZS9jb250YWluZXIvc3RvcmFnZWZpbGUudXBsb2FkLnN5bmMuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDN0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBRTFEOztHQUVHO0FBTUgsTUFBTSxPQUFPLHlDQUF5QztJQUNuQyxXQUFXLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO0lBQ3ZDLFNBQVMsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7SUFDckMsU0FBUyxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztJQUU3QyxXQUFXLEdBQUcsTUFBTSxDQUFDLGlDQUFpQyxDQUFDLENBQUM7SUFDeEQsZUFBZSxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBRTFEO1FBQ0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDOUksQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzQixDQUFDO3dHQWxCVSx5Q0FBeUM7NEZBQXpDLHlDQUF5Qzs7NEZBQXpDLHlDQUF5QztrQkFMckQsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0NBQW9DO29CQUM5QyxRQUFRLEVBQUUsa0NBQWtDO29CQUM1QyxVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIGluamVjdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb25PYmplY3QgfSBmcm9tICdAZGVyZWVrYi9yeGpzJztcbmltcG9ydCB7IERieEZpcmViYXNlU3RvcmFnZUZpbGVVcGxvYWRTdG9yZSB9IGZyb20gJy4uL3N0b3JlJztcbmltcG9ydCB7IERieEZpbGVVcGxvYWRDb21wb25lbnQgfSBmcm9tICdAZGVyZWVrYi9kYngtd2ViJztcblxuLyoqXG4gKiBEaXJlY3RpdmUgdGhhdCBzeW5jcyBhIERieEZpcmViYXNlU3RvcmFnZUZpbGVVcGxvYWRTdG9yZSdzIGNvbmZpZ3VyYXRpb24gdG8gYSBEYnhGaWxlVXBsb2FkQ29tcG9uZW50LlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZGJ4RmlyZWJhc2VTdG9yYWdlRmlsZVVwbG9hZFN5bmNdJyxcbiAgZXhwb3J0QXM6ICdkYnhGaXJlYmFzZVN0b3JhZ2VGaWxlVXBsb2FkU3luYycsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZVVwbG9hZFN5bmNEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IF9hbGxvd2VkU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tdWx0aVN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsZXNTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG5cbiAgcmVhZG9ubHkgdXBsb2FkU3RvcmUgPSBpbmplY3QoRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZVVwbG9hZFN0b3JlKTtcbiAgcmVhZG9ubHkgdXBsb2FkQ29tcG9uZW50ID0gaW5qZWN0KERieEZpbGVVcGxvYWRDb21wb25lbnQpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2FsbG93ZWRTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy51cGxvYWRTdG9yZS5maWxlVHlwZXNBbGxvd2VkJC5zdWJzY3JpYmUoKHgpID0+IHRoaXMudXBsb2FkQ29tcG9uZW50LnNldEFjY2VwdCh4KSk7XG4gICAgdGhpcy5fbXVsdGlTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy51cGxvYWRTdG9yZS5pc011bHRpVXBsb2FkQWxsb3dlZCQuc3Vic2NyaWJlKCh4KSA9PiB0aGlzLnVwbG9hZENvbXBvbmVudC5zZXRNdWx0aXBsZSh4KSk7XG4gICAgdGhpcy5fZmlsZXNTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy51cGxvYWRDb21wb25lbnQuZmlsZXNDaGFuZ2VkLnN1YnNjcmliZSgoZmlsZXMpID0+IHRoaXMudXBsb2FkU3RvcmUuc2V0RmlsZXMoZmlsZXMubWF0Y2hSZXN1bHQuYWNjZXB0ZWQpKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2FsbG93ZWRTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX211bHRpU3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9maWxlc1N1Yi5kZXN0cm95KCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,4 @@
1
+ export * from './container';
2
+ export * from './store';
3
+ export * from './storagefile.upload.module';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZmlyZWJhc2Uvc3JjL2xpYi9tb2R1bGVzL3N0b3JhZ2VmaWxlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsNkJBQTZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NvbnRhaW5lcic7XG5leHBvcnQgKiBmcm9tICcuL3N0b3JlJztcbmV4cG9ydCAqIGZyb20gJy4vc3RvcmFnZWZpbGUudXBsb2FkLm1vZHVsZSc7XG4iXX0=
@@ -0,0 +1,83 @@
1
+ import { DbxActionLoadingContextDirective, DbxActionModule, DbxActionSnackbarErrorDirective, DbxFileUploadComponent, DbxFileUploadActionSyncDirective, DbxLoadingComponent } from '@dereekb/dbx-web';
2
+ import { DbxFirebaseStorageFileUploadActionHandlerDirective, DbxFirebaseStorageFileUploadStoreDirective, DbxFirebaseStorageFileUploadSyncDirective, DbxFirebaseStorageFileUploadInitializeDocumentDirective } from './container';
3
+ import { NgModule } from '@angular/core';
4
+ import { DbxFirebaseStorageFileDocumentStoreDirective } from './store/storagefile.document.store.directive';
5
+ import { DbxFirebaseStorageFileCollectionStoreDirective } from './store';
6
+ import * as i0 from "@angular/core";
7
+ export const importsAndExports = [
8
+ // dbx-core/dbx-web modules/components
9
+ DbxActionModule,
10
+ DbxLoadingComponent,
11
+ DbxActionLoadingContextDirective,
12
+ DbxActionSnackbarErrorDirective,
13
+ DbxFileUploadComponent,
14
+ DbxFileUploadActionSyncDirective,
15
+ // containers
16
+ DbxFirebaseStorageFileUploadActionHandlerDirective,
17
+ DbxFirebaseStorageFileUploadStoreDirective,
18
+ DbxFirebaseStorageFileUploadSyncDirective,
19
+ DbxFirebaseStorageFileUploadInitializeDocumentDirective,
20
+ // stores
21
+ DbxFirebaseStorageFileCollectionStoreDirective,
22
+ DbxFirebaseStorageFileDocumentStoreDirective
23
+ ];
24
+ /**
25
+ * Convenience module for importing various modules/components that are relevant to the storage file upload feature.
26
+ *
27
+ * - DbxActionModule
28
+ * - DbxFileUploadComponent
29
+ * - DbxFirebaseStorageFileUploadActionHandlerDirective
30
+ * - DbxFirebaseStorageFileUploadStoreDirective
31
+ * - DbxFirebaseStorageFileUploadSyncDirective
32
+ * - DbxFirebaseStorageFileUploadInitializeDocumentDirective
33
+ * - DbxFirebaseStorageFileUploadStore
34
+ */
35
+ export class DbxFirebaseStorageFileUploadModule {
36
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileUploadModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
37
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileUploadModule, imports: [
38
+ // dbx-core/dbx-web modules/components
39
+ DbxActionModule,
40
+ DbxLoadingComponent,
41
+ DbxActionLoadingContextDirective,
42
+ DbxActionSnackbarErrorDirective,
43
+ DbxFileUploadComponent,
44
+ DbxFileUploadActionSyncDirective,
45
+ // containers
46
+ DbxFirebaseStorageFileUploadActionHandlerDirective,
47
+ DbxFirebaseStorageFileUploadStoreDirective,
48
+ DbxFirebaseStorageFileUploadSyncDirective,
49
+ DbxFirebaseStorageFileUploadInitializeDocumentDirective,
50
+ // stores
51
+ DbxFirebaseStorageFileCollectionStoreDirective,
52
+ DbxFirebaseStorageFileDocumentStoreDirective], exports: [
53
+ // dbx-core/dbx-web modules/components
54
+ DbxActionModule,
55
+ DbxLoadingComponent,
56
+ DbxActionLoadingContextDirective,
57
+ DbxActionSnackbarErrorDirective,
58
+ DbxFileUploadComponent,
59
+ DbxFileUploadActionSyncDirective,
60
+ // containers
61
+ DbxFirebaseStorageFileUploadActionHandlerDirective,
62
+ DbxFirebaseStorageFileUploadStoreDirective,
63
+ DbxFirebaseStorageFileUploadSyncDirective,
64
+ DbxFirebaseStorageFileUploadInitializeDocumentDirective,
65
+ // stores
66
+ DbxFirebaseStorageFileCollectionStoreDirective,
67
+ DbxFirebaseStorageFileDocumentStoreDirective] });
68
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileUploadModule, imports: [
69
+ // dbx-core/dbx-web modules/components
70
+ DbxActionModule,
71
+ DbxLoadingComponent,
72
+ DbxFileUploadComponent,
73
+ // dbx-core/dbx-web modules/components
74
+ DbxActionModule] });
75
+ }
76
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileUploadModule, decorators: [{
77
+ type: NgModule,
78
+ args: [{
79
+ imports: importsAndExports,
80
+ exports: importsAndExports
81
+ }]
82
+ }] });
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZWZpbGUudXBsb2FkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1maXJlYmFzZS9zcmMvbGliL21vZHVsZXMvc3RvcmFnZWZpbGUvc3RvcmFnZWZpbGUudXBsb2FkLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsZUFBZSxFQUFFLCtCQUErQixFQUFFLHNCQUFzQixFQUFFLGdDQUFnQyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDck0sT0FBTyxFQUFFLGtEQUFrRCxFQUFFLDBDQUEwQyxFQUFFLHlDQUF5QyxFQUFFLHVEQUF1RCxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pPLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLDRDQUE0QyxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDNUcsT0FBTyxFQUFFLDhDQUE4QyxFQUFFLE1BQU0sU0FBUyxDQUFDOztBQUV6RSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRztJQUMvQixzQ0FBc0M7SUFDdEMsZUFBZTtJQUNmLG1CQUFtQjtJQUNuQixnQ0FBZ0M7SUFDaEMsK0JBQStCO0lBQy9CLHNCQUFzQjtJQUN0QixnQ0FBZ0M7SUFDaEMsYUFBYTtJQUNiLGtEQUFrRDtJQUNsRCwwQ0FBMEM7SUFDMUMseUNBQXlDO0lBQ3pDLHVEQUF1RDtJQUN2RCxTQUFTO0lBQ1QsOENBQThDO0lBQzlDLDRDQUE0QztDQUM3QyxDQUFDO0FBRUY7Ozs7Ozs7Ozs7R0FVRztBQUtILE1BQU0sT0FBTyxrQ0FBa0M7d0dBQWxDLGtDQUFrQzt5R0FBbEMsa0NBQWtDO1lBaEM3QyxzQ0FBc0M7WUFDdEMsZUFBZTtZQUNmLG1CQUFtQjtZQUNuQixnQ0FBZ0M7WUFDaEMsK0JBQStCO1lBQy9CLHNCQUFzQjtZQUN0QixnQ0FBZ0M7WUFDaEMsYUFBYTtZQUNiLGtEQUFrRDtZQUNsRCwwQ0FBMEM7WUFDMUMseUNBQXlDO1lBQ3pDLHVEQUF1RDtZQUN2RCxTQUFTO1lBQ1QsOENBQThDO1lBQzlDLDRDQUE0QztZQWQ1QyxzQ0FBc0M7WUFDdEMsZUFBZTtZQUNmLG1CQUFtQjtZQUNuQixnQ0FBZ0M7WUFDaEMsK0JBQStCO1lBQy9CLHNCQUFzQjtZQUN0QixnQ0FBZ0M7WUFDaEMsYUFBYTtZQUNiLGtEQUFrRDtZQUNsRCwwQ0FBMEM7WUFDMUMseUNBQXlDO1lBQ3pDLHVEQUF1RDtZQUN2RCxTQUFTO1lBQ1QsOENBQThDO1lBQzlDLDRDQUE0Qzt5R0FrQmpDLGtDQUFrQztZQWhDN0Msc0NBQXNDO1lBQ3RDLGVBQWU7WUFDZixtQkFBbUI7WUFHbkIsc0JBQXNCO1lBTHRCLHNDQUFzQztZQUN0QyxlQUFlOzs0RkErQkosa0NBQWtDO2tCQUo5QyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxpQkFBaUI7b0JBQzFCLE9BQU8sRUFBRSxpQkFBaUI7aUJBQzNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGJ4QWN0aW9uTG9hZGluZ0NvbnRleHREaXJlY3RpdmUsIERieEFjdGlvbk1vZHVsZSwgRGJ4QWN0aW9uU25hY2tiYXJFcnJvckRpcmVjdGl2ZSwgRGJ4RmlsZVVwbG9hZENvbXBvbmVudCwgRGJ4RmlsZVVwbG9hZEFjdGlvblN5bmNEaXJlY3RpdmUsIERieExvYWRpbmdDb21wb25lbnQgfSBmcm9tICdAZGVyZWVrYi9kYngtd2ViJztcbmltcG9ydCB7IERieEZpcmViYXNlU3RvcmFnZUZpbGVVcGxvYWRBY3Rpb25IYW5kbGVyRGlyZWN0aXZlLCBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlVXBsb2FkU3RvcmVEaXJlY3RpdmUsIERieEZpcmViYXNlU3RvcmFnZUZpbGVVcGxvYWRTeW5jRGlyZWN0aXZlLCBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlVXBsb2FkSW5pdGlhbGl6ZURvY3VtZW50RGlyZWN0aXZlIH0gZnJvbSAnLi9jb250YWluZXInO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERieEZpcmViYXNlU3RvcmFnZUZpbGVEb2N1bWVudFN0b3JlRGlyZWN0aXZlIH0gZnJvbSAnLi9zdG9yZS9zdG9yYWdlZmlsZS5kb2N1bWVudC5zdG9yZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZUNvbGxlY3Rpb25TdG9yZURpcmVjdGl2ZSB9IGZyb20gJy4vc3RvcmUnO1xuXG5leHBvcnQgY29uc3QgaW1wb3J0c0FuZEV4cG9ydHMgPSBbXG4gIC8vIGRieC1jb3JlL2RieC13ZWIgbW9kdWxlcy9jb21wb25lbnRzXG4gIERieEFjdGlvbk1vZHVsZSxcbiAgRGJ4TG9hZGluZ0NvbXBvbmVudCxcbiAgRGJ4QWN0aW9uTG9hZGluZ0NvbnRleHREaXJlY3RpdmUsXG4gIERieEFjdGlvblNuYWNrYmFyRXJyb3JEaXJlY3RpdmUsXG4gIERieEZpbGVVcGxvYWRDb21wb25lbnQsXG4gIERieEZpbGVVcGxvYWRBY3Rpb25TeW5jRGlyZWN0aXZlLFxuICAvLyBjb250YWluZXJzXG4gIERieEZpcmViYXNlU3RvcmFnZUZpbGVVcGxvYWRBY3Rpb25IYW5kbGVyRGlyZWN0aXZlLFxuICBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlVXBsb2FkU3RvcmVEaXJlY3RpdmUsXG4gIERieEZpcmViYXNlU3RvcmFnZUZpbGVVcGxvYWRTeW5jRGlyZWN0aXZlLFxuICBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlVXBsb2FkSW5pdGlhbGl6ZURvY3VtZW50RGlyZWN0aXZlLFxuICAvLyBzdG9yZXNcbiAgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZUNvbGxlY3Rpb25TdG9yZURpcmVjdGl2ZSxcbiAgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvY3VtZW50U3RvcmVEaXJlY3RpdmVcbl07XG5cbi8qKlxuICogQ29udmVuaWVuY2UgbW9kdWxlIGZvciBpbXBvcnRpbmcgdmFyaW91cyBtb2R1bGVzL2NvbXBvbmVudHMgdGhhdCBhcmUgcmVsZXZhbnQgdG8gdGhlIHN0b3JhZ2UgZmlsZSB1cGxvYWQgZmVhdHVyZS5cbiAqXG4gKiAtIERieEFjdGlvbk1vZHVsZVxuICogLSBEYnhGaWxlVXBsb2FkQ29tcG9uZW50XG4gKiAtIERieEZpcmViYXNlU3RvcmFnZUZpbGVVcGxvYWRBY3Rpb25IYW5kbGVyRGlyZWN0aXZlXG4gKiAtIERieEZpcmViYXNlU3RvcmFnZUZpbGVVcGxvYWRTdG9yZURpcmVjdGl2ZVxuICogLSBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlVXBsb2FkU3luY0RpcmVjdGl2ZVxuICogLSBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlVXBsb2FkSW5pdGlhbGl6ZURvY3VtZW50RGlyZWN0aXZlXG4gKiAtIERieEZpcmViYXNlU3RvcmFnZUZpbGVVcGxvYWRTdG9yZVxuICovXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBpbXBvcnRzQW5kRXhwb3J0cyxcbiAgZXhwb3J0czogaW1wb3J0c0FuZEV4cG9ydHNcbn0pXG5leHBvcnQgY2xhc3MgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZVVwbG9hZE1vZHVsZSB7fVxuIl19
@@ -0,0 +1,6 @@
1
+ export * from './storagefile.collection.store';
2
+ export * from './storagefile.collection.store.directive';
3
+ export * from './storagefile.document.store';
4
+ export * from './storagefile.document.store.directive';
5
+ export * from './storagefile.upload.store';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZmlyZWJhc2Uvc3JjL2xpYi9tb2R1bGVzL3N0b3JhZ2VmaWxlL3N0b3JlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYywwQ0FBMEMsQ0FBQztBQUN6RCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyw0QkFBNEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc3RvcmFnZWZpbGUuY29sbGVjdGlvbi5zdG9yZSc7XG5leHBvcnQgKiBmcm9tICcuL3N0b3JhZ2VmaWxlLmNvbGxlY3Rpb24uc3RvcmUuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vc3RvcmFnZWZpbGUuZG9jdW1lbnQuc3RvcmUnO1xuZXhwb3J0ICogZnJvbSAnLi9zdG9yYWdlZmlsZS5kb2N1bWVudC5zdG9yZS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9zdG9yYWdlZmlsZS51cGxvYWQuc3RvcmUnO1xuIl19
@@ -0,0 +1,22 @@
1
+ import { Directive } from '@angular/core';
2
+ import { DbxFirebaseCollectionStoreDirective, provideDbxFirebaseCollectionStoreDirective } from '../../../model/modules/store';
3
+ import { StorageFileCollectionStore } from './storagefile.collection.store';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "./storagefile.collection.store";
6
+ export class DbxFirebaseStorageFileCollectionStoreDirective extends DbxFirebaseCollectionStoreDirective {
7
+ constructor(store) {
8
+ super(store);
9
+ this.setConstraints([]);
10
+ }
11
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileCollectionStoreDirective, deps: [{ token: i1.StorageFileCollectionStore }], target: i0.ɵɵFactoryTarget.Directive });
12
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: DbxFirebaseStorageFileCollectionStoreDirective, isStandalone: true, selector: "[dbxFirebaseStorageFileCollection]", providers: provideDbxFirebaseCollectionStoreDirective(DbxFirebaseStorageFileCollectionStoreDirective, StorageFileCollectionStore), usesInheritance: true, ngImport: i0 });
13
+ }
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileCollectionStoreDirective, decorators: [{
15
+ type: Directive,
16
+ args: [{
17
+ selector: '[dbxFirebaseStorageFileCollection]',
18
+ providers: provideDbxFirebaseCollectionStoreDirective(DbxFirebaseStorageFileCollectionStoreDirective, StorageFileCollectionStore),
19
+ standalone: true
20
+ }]
21
+ }], ctorParameters: () => [{ type: i1.StorageFileCollectionStore }] });
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZWZpbGUuY29sbGVjdGlvbi5zdG9yZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZmlyZWJhc2Uvc3JjL2xpYi9tb2R1bGVzL3N0b3JhZ2VmaWxlL3N0b3JlL3N0b3JhZ2VmaWxlLmNvbGxlY3Rpb24uc3RvcmUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLDBDQUEwQyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0gsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7OztBQVE1RSxNQUFNLE9BQU8sOENBQStDLFNBQVEsbUNBQWlHO0lBQ25LLFlBQVksS0FBaUM7UUFDM0MsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMxQixDQUFDO3dHQUpVLDhDQUE4Qzs0RkFBOUMsOENBQThDLGlGQUg5QywwQ0FBMEMsQ0FBQyw4Q0FBOEMsRUFBRSwwQkFBMEIsQ0FBQzs7NEZBR3RILDhDQUE4QztrQkFMMUQsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0NBQW9DO29CQUM5QyxTQUFTLEVBQUUsMENBQTBDLGlEQUFpRCwwQkFBMEIsQ0FBQztvQkFDakksVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYnhGaXJlYmFzZUNvbGxlY3Rpb25TdG9yZURpcmVjdGl2ZSwgcHJvdmlkZURieEZpcmViYXNlQ29sbGVjdGlvblN0b3JlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWwvbW9kdWxlcy9zdG9yZSc7XG5pbXBvcnQgeyBTdG9yYWdlRmlsZUNvbGxlY3Rpb25TdG9yZSB9IGZyb20gJy4vc3RvcmFnZWZpbGUuY29sbGVjdGlvbi5zdG9yZSc7XG5pbXBvcnQgeyBTdG9yYWdlRmlsZSwgU3RvcmFnZUZpbGVEb2N1bWVudCB9IGZyb20gJ0BkZXJlZWtiL2ZpcmViYXNlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2RieEZpcmViYXNlU3RvcmFnZUZpbGVDb2xsZWN0aW9uXScsXG4gIHByb3ZpZGVyczogcHJvdmlkZURieEZpcmViYXNlQ29sbGVjdGlvblN0b3JlRGlyZWN0aXZlKERieEZpcmViYXNlU3RvcmFnZUZpbGVDb2xsZWN0aW9uU3RvcmVEaXJlY3RpdmUsIFN0b3JhZ2VGaWxlQ29sbGVjdGlvblN0b3JlKSxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlQ29sbGVjdGlvblN0b3JlRGlyZWN0aXZlIGV4dGVuZHMgRGJ4RmlyZWJhc2VDb2xsZWN0aW9uU3RvcmVEaXJlY3RpdmU8U3RvcmFnZUZpbGUsIFN0b3JhZ2VGaWxlRG9jdW1lbnQsIFN0b3JhZ2VGaWxlQ29sbGVjdGlvblN0b3JlPiB7XG4gIGNvbnN0cnVjdG9yKHN0b3JlOiBTdG9yYWdlRmlsZUNvbGxlY3Rpb25TdG9yZSkge1xuICAgIHN1cGVyKHN0b3JlKTtcbiAgICB0aGlzLnNldENvbnN0cmFpbnRzKFtdKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,18 @@
1
+ import { Injectable, inject } from '@angular/core';
2
+ import { AbstractDbxFirebaseCollectionStore, firebaseCollectionStoreCreateFunction } from '../../../model/modules/store';
3
+ import { StorageFileFirestoreCollections, StorageFileFunctions } from '@dereekb/firebase';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@dereekb/firebase";
6
+ export class StorageFileCollectionStore extends AbstractDbxFirebaseCollectionStore {
7
+ storageFileFunctions = inject(StorageFileFunctions);
8
+ constructor(collections) {
9
+ super({ firestoreCollection: collections.storageFileCollection });
10
+ }
11
+ initializeAllStorageFilesFromUpload = firebaseCollectionStoreCreateFunction(this, this.storageFileFunctions.storageFile.createStorageFile.allFromUpload);
12
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StorageFileCollectionStore, deps: [{ token: i1.StorageFileFirestoreCollections }], target: i0.ɵɵFactoryTarget.Injectable });
13
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StorageFileCollectionStore });
14
+ }
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StorageFileCollectionStore, decorators: [{
16
+ type: Injectable
17
+ }], ctorParameters: () => [{ type: i1.StorageFileFirestoreCollections }] });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZWZpbGUuY29sbGVjdGlvbi5zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1maXJlYmFzZS9zcmMvbGliL21vZHVsZXMvc3RvcmFnZWZpbGUvc3RvcmUvc3RvcmFnZWZpbGUuY29sbGVjdGlvbi5zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUscUNBQXFDLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN6SCxPQUFPLEVBQUUsK0JBQStCLEVBQW9DLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7OztBQUc1SCxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsa0NBQW9FO0lBQ3pHLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBRTdELFlBQVksV0FBNEM7UUFDdEQsS0FBSyxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRVEsbUNBQW1DLEdBQUcscUNBQXFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7d0dBUHZKLDBCQUEwQjs0R0FBMUIsMEJBQTBCOzs0RkFBMUIsMEJBQTBCO2tCQUR0QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdERieEZpcmViYXNlQ29sbGVjdGlvblN0b3JlLCBmaXJlYmFzZUNvbGxlY3Rpb25TdG9yZUNyZWF0ZUZ1bmN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWwvbW9kdWxlcy9zdG9yZSc7XG5pbXBvcnQgeyBTdG9yYWdlRmlsZUZpcmVzdG9yZUNvbGxlY3Rpb25zLCBTdG9yYWdlRmlsZSwgU3RvcmFnZUZpbGVEb2N1bWVudCwgU3RvcmFnZUZpbGVGdW5jdGlvbnMgfSBmcm9tICdAZGVyZWVrYi9maXJlYmFzZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTdG9yYWdlRmlsZUNvbGxlY3Rpb25TdG9yZSBleHRlbmRzIEFic3RyYWN0RGJ4RmlyZWJhc2VDb2xsZWN0aW9uU3RvcmU8U3RvcmFnZUZpbGUsIFN0b3JhZ2VGaWxlRG9jdW1lbnQ+IHtcbiAgcmVhZG9ubHkgc3RvcmFnZUZpbGVGdW5jdGlvbnMgPSBpbmplY3QoU3RvcmFnZUZpbGVGdW5jdGlvbnMpO1xuXG4gIGNvbnN0cnVjdG9yKGNvbGxlY3Rpb25zOiBTdG9yYWdlRmlsZUZpcmVzdG9yZUNvbGxlY3Rpb25zKSB7XG4gICAgc3VwZXIoeyBmaXJlc3RvcmVDb2xsZWN0aW9uOiBjb2xsZWN0aW9ucy5zdG9yYWdlRmlsZUNvbGxlY3Rpb24gfSk7XG4gIH1cblxuICByZWFkb25seSBpbml0aWFsaXplQWxsU3RvcmFnZUZpbGVzRnJvbVVwbG9hZCA9IGZpcmViYXNlQ29sbGVjdGlvblN0b3JlQ3JlYXRlRnVuY3Rpb24odGhpcywgdGhpcy5zdG9yYWdlRmlsZUZ1bmN0aW9ucy5zdG9yYWdlRmlsZS5jcmVhdGVTdG9yYWdlRmlsZS5hbGxGcm9tVXBsb2FkKTtcbn1cbiJdfQ==