@sinequa/assistant 3.8.0 → 3.9.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.
- package/chat/charts/chart/chart.component.d.ts +13 -13
- package/chat/chat-message/chat-message.component.d.ts +85 -81
- package/chat/chat-message/i18n/en.json +11 -0
- package/chat/chat-message/i18n/fr.json +11 -0
- package/chat/chat-reference/chat-reference.component.d.ts +14 -14
- package/chat/chat-reference/i18n/en.json +4 -0
- package/chat/chat-reference/i18n/fr.json +4 -0
- package/chat/chat-settings-v3/chat-settings-v3.component.d.ts +48 -50
- package/chat/chat-settings-v3/i18n/en.json +14 -0
- package/chat/chat-settings-v3/i18n/fr.json +14 -0
- package/chat/chat.component.d.ts +388 -1405
- package/chat/chat.service.d.ts +247 -228
- package/chat/debug-message/debug-message.component.d.ts +17 -17
- package/chat/debug-message/i18n/en.json +3 -0
- package/chat/debug-message/i18n/fr.json +3 -0
- package/chat/dialogs/delete-saved-chat.component.d.ts +22 -0
- package/chat/dialogs/i18n/en.json +19 -0
- package/chat/dialogs/i18n/fr.json +19 -0
- package/chat/dialogs/rename-saved-chat.component.d.ts +21 -0
- package/chat/dialogs/updates.component.d.ts +15 -0
- package/chat/documents-upload/document-list/document-list.component.d.ts +68 -77
- package/chat/documents-upload/document-overview/document-overview.component.d.ts +31 -41
- package/chat/documents-upload/document-upload/document-upload.component.d.ts +96 -98
- package/chat/documents-upload/documents-upload.model.d.ts +66 -66
- package/chat/documents-upload/documents-upload.service.d.ts +170 -174
- package/chat/documents-upload/i18n/en.json +24 -0
- package/chat/documents-upload/i18n/fr.json +24 -0
- package/chat/format-icon/format-icon.component.d.ts +10 -10
- package/chat/format-icon/icons.d.ts +5 -5
- package/chat/i18n/en.json +42 -0
- package/chat/i18n/fr.json +42 -0
- package/chat/index.d.ts +5 -5
- package/chat/initials-avatar/initials-avatar.component.d.ts +35 -35
- package/chat/instance-manager.service.d.ts +28 -28
- package/chat/pipes/message-content.pipe.d.ts +16 -0
- package/chat/prompt.component.d.ts +25 -21
- package/chat/public-api.d.ts +17 -17
- package/chat/references/i18n/en.json +6 -0
- package/chat/references/i18n/fr.json +6 -0
- package/chat/references/inline-image-reference.d.ts +21 -0
- package/chat/references/inline-page-reference.d.ts +21 -0
- package/chat/rest-chat.service.d.ts +31 -33
- package/chat/saved-chats/i18n/en.json +4 -0
- package/chat/saved-chats/i18n/fr.json +4 -0
- package/chat/saved-chats/saved-chats.component.d.ts +30 -36
- package/chat/services/app.service.d.ts +8 -0
- package/chat/services/dialog.service.d.ts +12 -0
- package/chat/services/notification.service.d.ts +10 -0
- package/chat/services/principal.service.d.ts +7 -0
- package/chat/services/search.service.d.ts +7 -0
- package/chat/services/signalR.web.service.d.ts +45 -0
- package/chat/services/ui.service.d.ts +13 -0
- package/chat/services/user-settings.service.d.ts +7 -0
- package/chat/token-progress-bar/i18n/en.json +4 -0
- package/chat/token-progress-bar/i18n/fr.json +4 -0
- package/chat/token-progress-bar/token-progress-bar.component.d.ts +24 -27
- package/chat/tooltip/tooltip.component.d.ts +12 -0
- package/chat/tooltip/tooltip.directive.d.ts +81 -0
- package/chat/types/message-content.types.d.ts +54 -0
- package/chat/types/message-reference.types.d.ts +11 -0
- package/chat/types.d.ts +913 -873
- package/chat/unified-plugins/embedded-image-reference.plugin.d.ts +3 -0
- package/chat/unified-plugins/embedded-page-reference.plugin.d.ts +3 -0
- package/chat/utils/assistant-json.d.ts +2 -0
- package/chat/websocket-chat.service.d.ts +102 -103
- package/esm2022/chat/charts/chart/chart.component.mjs +40 -0
- package/esm2022/chat/chat-message/chat-message.component.mjs +351 -0
- package/esm2022/chat/chat-reference/chat-reference.component.mjs +40 -0
- package/esm2022/chat/chat-settings-v3/chat-settings-v3.component.mjs +118 -0
- package/esm2022/chat/chat.component.mjs +1090 -0
- package/esm2022/chat/chat.service.mjs +417 -0
- package/esm2022/chat/debug-message/debug-message.component.mjs +43 -0
- package/esm2022/chat/dialogs/delete-saved-chat.component.mjs +81 -0
- package/esm2022/chat/dialogs/rename-saved-chat.component.mjs +84 -0
- package/esm2022/chat/dialogs/updates.component.mjs +61 -0
- package/esm2022/chat/documents-upload/document-list/document-list.component.mjs +140 -0
- package/esm2022/chat/documents-upload/document-overview/document-overview.component.mjs +65 -0
- package/esm2022/chat/documents-upload/document-upload/document-upload.component.mjs +256 -0
- package/{esm2020 → esm2022}/chat/documents-upload/documents-upload.model.mjs +1 -1
- package/esm2022/chat/documents-upload/documents-upload.service.mjs +291 -0
- package/{esm2020 → esm2022}/chat/format-icon/format-icon.component.mjs +23 -23
- package/{esm2020 → esm2022}/chat/format-icon/icons.mjs +137 -137
- package/{esm2020 → esm2022}/chat/initials-avatar/initials-avatar.component.mjs +60 -60
- package/esm2022/chat/instance-manager.service.mjs +46 -0
- package/esm2022/chat/pipes/message-content.pipe.mjs +34 -0
- package/esm2022/chat/prompt.component.mjs +88 -0
- package/{esm2020 → esm2022}/chat/public-api.mjs +18 -18
- package/esm2022/chat/references/inline-image-reference.mjs +110 -0
- package/esm2022/chat/references/inline-page-reference.mjs +110 -0
- package/esm2022/chat/rest-chat.service.mjs +296 -0
- package/esm2022/chat/saved-chats/saved-chats.component.mjs +82 -0
- package/esm2022/chat/services/app.service.mjs +19 -0
- package/esm2022/chat/services/dialog.service.mjs +40 -0
- package/esm2022/chat/services/notification.service.mjs +25 -0
- package/esm2022/chat/services/principal.service.mjs +16 -0
- package/esm2022/chat/services/search.service.mjs +13 -0
- package/esm2022/chat/services/signalR.web.service.mjs +79 -0
- package/esm2022/chat/services/ui.service.mjs +61 -0
- package/esm2022/chat/services/user-settings.service.mjs +22 -0
- package/{esm2020 → esm2022}/chat/sinequa-assistant-chat.mjs +4 -4
- package/esm2022/chat/token-progress-bar/token-progress-bar.component.mjs +52 -0
- package/esm2022/chat/tooltip/tooltip.component.mjs +44 -0
- package/esm2022/chat/tooltip/tooltip.directive.mjs +203 -0
- package/esm2022/chat/types/message-content.types.mjs +2 -0
- package/esm2022/chat/types/message-reference.types.mjs +2 -0
- package/esm2022/chat/types.mjs +130 -0
- package/esm2022/chat/unified-plugins/embedded-image-reference.plugin.mjs +57 -0
- package/esm2022/chat/unified-plugins/embedded-page-reference.plugin.mjs +57 -0
- package/esm2022/chat/utils/assistant-json.mjs +12 -0
- package/esm2022/chat/websocket-chat.service.mjs +654 -0
- package/{esm2020 → esm2022}/public-api.mjs +2 -2
- package/{esm2020 → esm2022}/sinequa-assistant.mjs +4 -4
- package/fesm2022/sinequa-assistant-chat.mjs +5340 -0
- package/fesm2022/sinequa-assistant-chat.mjs.map +1 -0
- package/{fesm2015 → fesm2022}/sinequa-assistant.mjs +3 -3
- package/index.d.ts +5 -5
- package/package.json +52 -25
- package/public-api.d.ts +1 -1
- package/chat/messages/de.d.ts +0 -4
- package/chat/messages/en.d.ts +0 -4
- package/chat/messages/fr.d.ts +0 -4
- package/chat/messages/index.d.ts +0 -4
- package/esm2020/chat/charts/chart/chart.component.mjs +0 -40
- package/esm2020/chat/chat-message/chat-message.component.mjs +0 -263
- package/esm2020/chat/chat-reference/chat-reference.component.mjs +0 -40
- package/esm2020/chat/chat-settings-v3/chat-settings-v3.component.mjs +0 -117
- package/esm2020/chat/chat.component.mjs +0 -1069
- package/esm2020/chat/chat.service.mjs +0 -333
- package/esm2020/chat/debug-message/debug-message.component.mjs +0 -43
- package/esm2020/chat/documents-upload/document-list/document-list.component.mjs +0 -191
- package/esm2020/chat/documents-upload/document-overview/document-overview.component.mjs +0 -80
- package/esm2020/chat/documents-upload/document-upload/document-upload.component.mjs +0 -258
- package/esm2020/chat/documents-upload/documents-upload.service.mjs +0 -289
- package/esm2020/chat/instance-manager.service.mjs +0 -46
- package/esm2020/chat/messages/de.mjs +0 -4
- package/esm2020/chat/messages/en.mjs +0 -4
- package/esm2020/chat/messages/fr.mjs +0 -4
- package/esm2020/chat/messages/index.mjs +0 -9
- package/esm2020/chat/prompt.component.mjs +0 -88
- package/esm2020/chat/rest-chat.service.mjs +0 -241
- package/esm2020/chat/saved-chats/saved-chats.component.mjs +0 -175
- package/esm2020/chat/token-progress-bar/token-progress-bar.component.mjs +0 -54
- package/esm2020/chat/types.mjs +0 -112
- package/esm2020/chat/websocket-chat.service.mjs +0 -641
- package/fesm2015/sinequa-assistant-chat.mjs +0 -4200
- package/fesm2015/sinequa-assistant-chat.mjs.map +0 -1
- package/fesm2020/sinequa-assistant-chat.mjs +0 -4171
- package/fesm2020/sinequa-assistant-chat.mjs.map +0 -1
- package/fesm2020/sinequa-assistant.mjs +0 -9
- package/fesm2020/sinequa-assistant.mjs.map +0 -1
- /package/{fesm2015 → fesm2022}/sinequa-assistant.mjs.map +0 -0
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import { Injectable, inject } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, catchError, filter, from, map, take } from 'rxjs';
|
|
3
|
+
import { HttpClient, HttpEventType, HttpHeaders } from '@angular/common/http';
|
|
4
|
+
import { AppService } from '../services/app.service';
|
|
5
|
+
import { getToken, globalConfig, post } from '@sinequa/atomic';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class DocumentsUploadService {
|
|
8
|
+
constructor() {
|
|
9
|
+
/** Documents' upload configuration. */
|
|
10
|
+
this.uploadConfig$ = new BehaviorSubject(undefined);
|
|
11
|
+
this.appService = inject(AppService);
|
|
12
|
+
this.http = inject(HttpClient);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Initializes the file upload service with the provided chat service instance.
|
|
16
|
+
*
|
|
17
|
+
* @param chatService - An instance of ChatService. If not provided, an error is thrown.
|
|
18
|
+
* @throws {Error} If the chatService instance is not provided or if there is an error during initialization.
|
|
19
|
+
*/
|
|
20
|
+
init(chatService) {
|
|
21
|
+
if (!chatService)
|
|
22
|
+
throw new Error('A chatService instance must be provided');
|
|
23
|
+
this.chatService = chatService;
|
|
24
|
+
try {
|
|
25
|
+
this.getRequestsUrl();
|
|
26
|
+
this.getUploadConfig();
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
throw new Error(error);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Fetch the endpoint to use for the file upload related requests
|
|
34
|
+
* @throws {Error} If the property 'restEndpoint' is not provided in the assistant configuration
|
|
35
|
+
*/
|
|
36
|
+
getRequestsUrl() {
|
|
37
|
+
if (!!this.chatService.assistantConfig$.value.connectionSettings.restEndpoint) {
|
|
38
|
+
this.REQUEST_URL = this.chatService.assistantConfig$.value.connectionSettings.restEndpoint;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
throw new Error(`The property 'restEndpoint' must be provided when attempting to use 'REST' in assistant instance`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Retrieves the upload configuration for documents.
|
|
46
|
+
* The response, which contains the upload configuration, is emitted to the `uploadConfig$` observable.
|
|
47
|
+
*
|
|
48
|
+
* @throws {Error} If there is an error invoking the `documentsUploadConfigGet` action.
|
|
49
|
+
*/
|
|
50
|
+
getUploadConfig() {
|
|
51
|
+
const data = {
|
|
52
|
+
action: "documentsUploadConfigGet",
|
|
53
|
+
appName: this.appService.appName,
|
|
54
|
+
debug: this.chatService.assistantConfig$.value.defaultValues.debug
|
|
55
|
+
};
|
|
56
|
+
from(post(`plugin/${this.REQUEST_URL}`, data)).pipe(take(1), catchError((error) => {
|
|
57
|
+
throw new Error(`Error invoking documentsUploadConfigGet: ${error}`);
|
|
58
|
+
})).subscribe((res) => this.uploadConfig$.next(res));
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Uploads documents to the server.
|
|
62
|
+
*
|
|
63
|
+
* This method takes a FormData object which should contain all files to be uploaded.
|
|
64
|
+
* Each file should be appended to the FormData object with its original name.
|
|
65
|
+
*
|
|
66
|
+
* For example:
|
|
67
|
+
* ```typescript
|
|
68
|
+
* const formData = new FormData();
|
|
69
|
+
* formData.append(file.name, file.file);
|
|
70
|
+
* ```
|
|
71
|
+
*
|
|
72
|
+
* @param formData - The FormData object containing the files to be uploaded.
|
|
73
|
+
* - Each file should be appended to the FormData object with its original name.
|
|
74
|
+
* For example:
|
|
75
|
+
* ```typescript
|
|
76
|
+
* const formData = new FormData();
|
|
77
|
+
* formData.append(file.name, file.file);
|
|
78
|
+
* ```
|
|
79
|
+
*
|
|
80
|
+
* @param enableProgress - (Optional) A boolean parameter that controls whether progress reporting is enabled.
|
|
81
|
+
* - Defaults to `true`.
|
|
82
|
+
* - If `true`, the `reportProgress` option is set in the request options, enabling the track of upload progress based on the underlying browser's progress events.
|
|
83
|
+
* - If `false`, progress events are not reported.
|
|
84
|
+
*
|
|
85
|
+
* @returns An Observable that emits events of type `UploadEvent`:
|
|
86
|
+
* - `UploadProgressEvent`: Emitted during the upload process, containing:
|
|
87
|
+
* - * `type`: "uploadProgress" - The type of the event.
|
|
88
|
+
* - * `loaded`: number - The number of bytes uploaded so far.
|
|
89
|
+
* - * `total`: number - The total number of bytes to be uploaded (if available).
|
|
90
|
+
* - * `progress`: number - The percentage of upload progress (calculated as `(loaded / total) * 100`).
|
|
91
|
+
* - `UploadResponseEvent`: Emitted when the upload is complete, containing:
|
|
92
|
+
* - * `type`: "response" - The type of the event.
|
|
93
|
+
* - * `body`: `UploadResponse` - The server's response, including:
|
|
94
|
+
* - * - * `statusToken`: string - A token to track the status of the indexing process.
|
|
95
|
+
* - * - * `executionTime`: string - The time taken to execute the upload.
|
|
96
|
+
* - * - * `connectorResponse` (optional): Additional response data from the connector, containing:
|
|
97
|
+
* - * - * - * `collection`: string - The collection name.
|
|
98
|
+
* - * - * - * `action`: string - The action performed.
|
|
99
|
+
* - * - * - * `stats`: object - Statistics about the upload, including:
|
|
100
|
+
* - * - * - * - * `nbDocUpdated`: number - The number of documents updated.
|
|
101
|
+
*
|
|
102
|
+
* @throws {Error} If there is an error invoking the `documentsupload` action.
|
|
103
|
+
*
|
|
104
|
+
* Example usage:
|
|
105
|
+
* ```typescript
|
|
106
|
+
* const formData = new FormData();
|
|
107
|
+
* formData.append(file.name, file.file);
|
|
108
|
+
* this.documentsUploadService.uploadDocuments(formData).subscribe(event => {
|
|
109
|
+
* if (event.type === 'uploadProgress') {
|
|
110
|
+
* console.log(`Progress: ${event.progress}%`);
|
|
111
|
+
* } else if (event.type === 'response') {
|
|
112
|
+
* console.log('Upload complete:', event.body);
|
|
113
|
+
* }
|
|
114
|
+
* });
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
uploadDocuments(formData, enableProgress = true) {
|
|
118
|
+
// Add the required "data" field as a JSON string
|
|
119
|
+
const data = {
|
|
120
|
+
action: "documentsupload",
|
|
121
|
+
appName: this.appService.appName,
|
|
122
|
+
debug: this.chatService.assistantConfig$.value.defaultValues.debug
|
|
123
|
+
};
|
|
124
|
+
formData.append('data', JSON.stringify(data));
|
|
125
|
+
let headers = new HttpHeaders({ 'Accept': 'application/json' });
|
|
126
|
+
const token = getToken();
|
|
127
|
+
if (token) {
|
|
128
|
+
headers = headers.append('sinequa-csrf-token', token);
|
|
129
|
+
}
|
|
130
|
+
const options = {
|
|
131
|
+
headers: headers,
|
|
132
|
+
observe: 'events',
|
|
133
|
+
};
|
|
134
|
+
if (enableProgress)
|
|
135
|
+
options['reportProgress'] = true;
|
|
136
|
+
const url = `${globalConfig.backendUrl}/${globalConfig.apiPath}/plugin/${this.REQUEST_URL}`;
|
|
137
|
+
/**
|
|
138
|
+
* Need to use the HttpClient directly to avoid the JSONMethodPluginService's behavior
|
|
139
|
+
* because it is altering the request and thus making it unable to properly set the Content-Type header with the boundary
|
|
140
|
+
*/
|
|
141
|
+
return this.http.post(url, formData, options).pipe(filter((event) => event.type === HttpEventType.Response || (enableProgress && event.type === HttpEventType.UploadProgress)), map((event) => {
|
|
142
|
+
switch (event.type) {
|
|
143
|
+
case HttpEventType.UploadProgress: {
|
|
144
|
+
const { loaded = 0, total = 0 } = event;
|
|
145
|
+
return { type: 'uploadProgress', loaded, total, progress: total > 0 ? Math.round((loaded / total) * 100) : 0 };
|
|
146
|
+
}
|
|
147
|
+
case HttpEventType.Response:
|
|
148
|
+
return { type: 'response', body: event.body };
|
|
149
|
+
default:
|
|
150
|
+
throw new Error("Unexpected event type"); // Should not reach here, but for typescript sake.
|
|
151
|
+
}
|
|
152
|
+
}), catchError((error) => {
|
|
153
|
+
throw new Error(`Error invoking documentsupload: ${error}`);
|
|
154
|
+
}));
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Retrieves the indexing status of a predefined uploaded document(s)
|
|
158
|
+
* based on the provided status token returned from the upload process.
|
|
159
|
+
*
|
|
160
|
+
* @param token - The status token used to track the indexing process.
|
|
161
|
+
* @returns An Observable that emits the server response of type `IndexingResponse`.
|
|
162
|
+
* The `IndexingResponse` object contains:
|
|
163
|
+
* - `docs`: array - An array of document status objects, each containing:
|
|
164
|
+
* - * `id`: string - The document ID.
|
|
165
|
+
* - * `fileName`: string - The name of the file.
|
|
166
|
+
* - * `operation`: "Add" | "Update" - The operation performed on the document.
|
|
167
|
+
* - * `status`: "Indexing" | "Indexed" | "Error" - The status of the document.
|
|
168
|
+
* - * `previousIndexationTime`: string | null - The previous indexation time.
|
|
169
|
+
* - * `currentIndexationTime`: string | null - The current indexation time.
|
|
170
|
+
* - `executionTime`: string - The time taken to retrieve the indexing status.
|
|
171
|
+
* @throws {Error} If there is an error invoking the `documentsUploadStatus` action.
|
|
172
|
+
*/
|
|
173
|
+
getIndexingStatus(token) {
|
|
174
|
+
const data = {
|
|
175
|
+
action: "documentsUploadStatus",
|
|
176
|
+
appName: this.appService.appName,
|
|
177
|
+
statusToken: token,
|
|
178
|
+
debug: this.chatService.assistantConfig$.value.defaultValues.debug
|
|
179
|
+
};
|
|
180
|
+
return from(post(`plugin/${this.REQUEST_URL}`, data)).pipe(catchError((error) => {
|
|
181
|
+
throw new Error(`Error invoking documentsUploadStatus: ${error}`);
|
|
182
|
+
}));
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Retrieves a list of uploaded documents.
|
|
186
|
+
*
|
|
187
|
+
* @param {string[]} [columns] - Optional array of additional index columns to include for each document.
|
|
188
|
+
* @param {number} [skip] - Optional number of documents to skip for pagination. If set, count also needs to be set. No skip if not set.
|
|
189
|
+
* @param {number} [count] - Optional number of documents to take for pagination (unlimited if not set).
|
|
190
|
+
* @returns {Observable<UploadedDocuments>} An observable that emits the list of uploaded documents.
|
|
191
|
+
* The `UploadedDocuments` object contains:
|
|
192
|
+
* - `docs`: array - An array of objects representing a single document with the following properties:
|
|
193
|
+
* - * `id`: string - A unique identifier for the document.
|
|
194
|
+
* - * `fileName`: string - The name of the file.
|
|
195
|
+
* - * `title`: string - The title of the document.
|
|
196
|
+
* - * `fileExt`: string - The file extension of the document.
|
|
197
|
+
* - * `indexationTime`: string - The time when the document was indexed.
|
|
198
|
+
* - * `size`: number - The size of the document.
|
|
199
|
+
* - * `sizeDisplay`: string - A human-readable representation of the document size.
|
|
200
|
+
* - * `[key: string]`: any - Additional columns asked in the request, value of the column for the document.
|
|
201
|
+
* - `count`: number - The count of documents in the current batch or subset.
|
|
202
|
+
* - `totalCount`: number - The total count of documents available.
|
|
203
|
+
* - `executionTime`: string - The time taken to process the documents.
|
|
204
|
+
* @throws {Error} Throws an error if the request fails.
|
|
205
|
+
*/
|
|
206
|
+
getDocumentsList(columns, skip, count) {
|
|
207
|
+
const data = {
|
|
208
|
+
action: "documentsList",
|
|
209
|
+
appName: this.appService.appName,
|
|
210
|
+
debug: this.chatService.assistantConfig$.value.defaultValues.debug
|
|
211
|
+
};
|
|
212
|
+
if (columns)
|
|
213
|
+
data["columns"] = columns;
|
|
214
|
+
if (skip)
|
|
215
|
+
data["skip"] = skip;
|
|
216
|
+
if (count)
|
|
217
|
+
data["count"] = count;
|
|
218
|
+
return from(post(`plugin/${this.REQUEST_URL}`, data)).pipe(catchError((error) => {
|
|
219
|
+
throw new Error(`Error invoking documentsList: ${error}`);
|
|
220
|
+
}));
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Deletes the uploaded documents with the specified IDs.
|
|
224
|
+
*
|
|
225
|
+
* @param docIds - An array of document IDs to delete.
|
|
226
|
+
* @returns An observable that emits the server response of type `deleteDocumentsResponse`.
|
|
227
|
+
* The `deleteDocumentsResponse` object contains:
|
|
228
|
+
* - `deletedCount`: number - The number of deleted documents.
|
|
229
|
+
* - `executionTime`: string - The time taken to delete the documents.
|
|
230
|
+
* @throws {Error} If there is an error invoking the `documentsDelete` action.
|
|
231
|
+
*/
|
|
232
|
+
deleteDocuments(docIds) {
|
|
233
|
+
const data = {
|
|
234
|
+
action: "documentsDelete",
|
|
235
|
+
docIds,
|
|
236
|
+
appName: this.appService.appName,
|
|
237
|
+
debug: this.chatService.assistantConfig$.value.defaultValues.debug
|
|
238
|
+
};
|
|
239
|
+
return from(post(`plugin/${this.REQUEST_URL}`, data)).pipe(catchError((error) => {
|
|
240
|
+
throw new Error(`Error invoking documentsDelete: ${error}`);
|
|
241
|
+
}));
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Deletes all uploaded documents.
|
|
245
|
+
*
|
|
246
|
+
* @returns An observable that emits the server response of type `deleteDocumentsResponse`.
|
|
247
|
+
* The `deleteDocumentsResponse` object contains:
|
|
248
|
+
* - `deletedCount`: number - The number of deleted documents.
|
|
249
|
+
* - `executionTime`: string - The time taken to delete the documents.
|
|
250
|
+
* @throws {Error} If there is an error invoking the `documentsDeleteAll` action.
|
|
251
|
+
*/
|
|
252
|
+
deleteAllDocuments() {
|
|
253
|
+
const data = {
|
|
254
|
+
action: "documentsDeleteAll",
|
|
255
|
+
appName: this.appService.appName,
|
|
256
|
+
debug: this.chatService.assistantConfig$.value.defaultValues.debug
|
|
257
|
+
};
|
|
258
|
+
return from(post(`plugin/${this.REQUEST_URL}`, data)).pipe(catchError((error) => {
|
|
259
|
+
throw new Error(`Error invoking documentsDeleteAll: ${error}`);
|
|
260
|
+
}));
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Formats the given file size in bytes into a human-readable string.
|
|
264
|
+
*
|
|
265
|
+
* @param bytes - The size of the file in bytes.
|
|
266
|
+
* @returns A string representing the file size in a human-readable format (e.g., "10.24 KB", "1.00 MB").
|
|
267
|
+
*/
|
|
268
|
+
formatFileSize(bytes) {
|
|
269
|
+
if (bytes === 0)
|
|
270
|
+
return "0 Bytes";
|
|
271
|
+
const k = 1024;
|
|
272
|
+
const sizes = ["Bytes", "KB", "MB", "GB", "TB"];
|
|
273
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
274
|
+
return (Number.parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + " " + sizes[i]);
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Converts the given file size in bytes into megabytes.
|
|
278
|
+
*
|
|
279
|
+
* @param bytes - The size of the file in bytes.
|
|
280
|
+
* @returns The size of the file in megabytes.
|
|
281
|
+
*/
|
|
282
|
+
convertBytesToMB(bytes) {
|
|
283
|
+
return bytes / (1024 * 1024);
|
|
284
|
+
}
|
|
285
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DocumentsUploadService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
286
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DocumentsUploadService }); }
|
|
287
|
+
}
|
|
288
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DocumentsUploadService, decorators: [{
|
|
289
|
+
type: Injectable
|
|
290
|
+
}] });
|
|
291
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRzLXVwbG9hZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvZG9jdW1lbnRzLXVwbG9hZC9kb2N1bWVudHMtdXBsb2FkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXhGLE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBeUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNySCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBRy9ELE1BQU0sT0FBTyxzQkFBc0I7SUFEbkM7UUFLRSx1Q0FBdUM7UUFDdkMsa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBMkIsU0FBUyxDQUFDLENBQUM7UUFHbEUsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoQyxTQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBK1NsQztJQTdTQzs7Ozs7T0FLRztJQUNILElBQUksQ0FBQyxXQUFvQztRQUN2QyxJQUFJLENBQUMsV0FBVztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztRQUU3RSxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pCLENBQUM7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Q0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksY0FBYyxDQUFDLEtBQWE7UUFDakMsSUFBSSxLQUFLLEtBQUssQ0FBQztZQUFFLE9BQU8sU0FBUyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNmLE1BQU0sS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEQsT0FBTyxDQUNMLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUN4RSxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksZ0JBQWdCLENBQUMsS0FBYTtRQUNuQyxPQUFPLEtBQUssR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDOytHQXRUVSxzQkFBc0I7bUhBQXRCLHNCQUFzQjs7NEZBQXRCLHNCQUFzQjtrQkFEbEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2hhdFNlcnZpY2UgfSBmcm9tICcuLi9jaGF0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjYXRjaEVycm9yLCBmaWx0ZXIsIGZyb20sIG1hcCwgT2JzZXJ2YWJsZSwgdGFrZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVsZXRlRG9jdW1lbnRzUmVzcG9uc2UsIEluZGV4aW5nSW5mb3MsIFVwbG9hZENvbmZpZywgVXBsb2FkZWREb2N1bWVudHMsIFVwbG9hZEV2ZW50IH0gZnJvbSAnLi9kb2N1bWVudHMtdXBsb2FkLm1vZGVsJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFdmVudFR5cGUsIEh0dHBIZWFkZXJzLCBIdHRwUmVzcG9uc2UsIEh0dHBVcGxvYWRQcm9ncmVzc0V2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQXBwU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FwcC5zZXJ2aWNlJztcbmltcG9ydCB7IGdldFRva2VuLCBnbG9iYWxDb25maWcsIHBvc3QgfSBmcm9tICdAc2luZXF1YS9hdG9taWMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRzVXBsb2FkU2VydmljZSB7XG5cbiAgLyoqIE5hbWUgb2YgdGhlIGFzc2lzdGFudCBwbHVnaW4uICovXG4gIHB1YmxpYyBSRVFVRVNUX1VSTDogc3RyaW5nO1xuICAvKiogRG9jdW1lbnRzJyB1cGxvYWQgY29uZmlndXJhdGlvbi4gKi9cbiAgdXBsb2FkQ29uZmlnJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VXBsb2FkQ29uZmlnIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwdWJsaWMgY2hhdFNlcnZpY2U6IENoYXRTZXJ2aWNlO1xuXG4gIHB1YmxpYyBhcHBTZXJ2aWNlID0gaW5qZWN0KEFwcFNlcnZpY2UpO1xuICBwdWJsaWMgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIGZpbGUgdXBsb2FkIHNlcnZpY2Ugd2l0aCB0aGUgcHJvdmlkZWQgY2hhdCBzZXJ2aWNlIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhdFNlcnZpY2UgLSBBbiBpbnN0YW5jZSBvZiBDaGF0U2VydmljZS4gSWYgbm90IHByb3ZpZGVkLCBhbiBlcnJvciBpcyB0aHJvd24uXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgY2hhdFNlcnZpY2UgaW5zdGFuY2UgaXMgbm90IHByb3ZpZGVkIG9yIGlmIHRoZXJlIGlzIGFuIGVycm9yIGR1cmluZyBpbml0aWFsaXphdGlvbi5cbiAgICovXG4gIGluaXQoY2hhdFNlcnZpY2U6IENoYXRTZXJ2aWNlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgaWYgKCFjaGF0U2VydmljZSkgdGhyb3cgbmV3IEVycm9yKCdBIGNoYXRTZXJ2aWNlIGluc3RhbmNlIG11c3QgYmUgcHJvdmlkZWQnKTtcblxuICAgIHRoaXMuY2hhdFNlcnZpY2UgPSBjaGF0U2VydmljZTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5nZXRSZXF1ZXN0c1VybCgpO1xuICAgICAgdGhpcy5nZXRVcGxvYWRDb25maWcoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggdGhlIGVuZHBvaW50IHRvIHVzZSBmb3IgdGhlIGZpbGUgdXBsb2FkIHJlbGF0ZWQgcmVxdWVzdHNcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwcm9wZXJ0eSAncmVzdEVuZHBvaW50JyBpcyBub3QgcHJvdmlkZWQgaW4gdGhlIGFzc2lzdGFudCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBnZXRSZXF1ZXN0c1VybCgpIHtcbiAgICBpZiAoISF0aGlzLmNoYXRTZXJ2aWNlLmFzc2lzdGFudENvbmZpZyQudmFsdWUhLmNvbm5lY3Rpb25TZXR0aW5ncy5yZXN0RW5kcG9pbnQpIHtcbiAgICAgIHRoaXMuUkVRVUVTVF9VUkwgPSB0aGlzLmNoYXRTZXJ2aWNlLmFzc2lzdGFudENvbmZpZyQudmFsdWUhLmNvbm5lY3Rpb25TZXR0aW5ncy5yZXN0RW5kcG9pbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHByb3BlcnR5ICdyZXN0RW5kcG9pbnQnIG11c3QgYmUgcHJvdmlkZWQgd2hlbiBhdHRlbXB0aW5nIHRvIHVzZSAnUkVTVCcgaW4gYXNzaXN0YW50IGluc3RhbmNlYCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXBsb2FkIGNvbmZpZ3VyYXRpb24gZm9yIGRvY3VtZW50cy5cbiAgICogVGhlIHJlc3BvbnNlLCB3aGljaCBjb250YWlucyB0aGUgdXBsb2FkIGNvbmZpZ3VyYXRpb24sIGlzIGVtaXR0ZWQgdG8gdGhlIGB1cGxvYWRDb25maWckYCBvYnNlcnZhYmxlLlxuICAgKlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgaXMgYW4gZXJyb3IgaW52b2tpbmcgdGhlIGBkb2N1bWVudHNVcGxvYWRDb25maWdHZXRgIGFjdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXRVcGxvYWRDb25maWcoKTogdm9pZCB7XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGFjdGlvbjogXCJkb2N1bWVudHNVcGxvYWRDb25maWdHZXRcIixcbiAgICAgIGFwcE5hbWU6IHRoaXMuYXBwU2VydmljZS5hcHBOYW1lLFxuICAgICAgZGVidWc6IHRoaXMuY2hhdFNlcnZpY2UuYXNzaXN0YW50Q29uZmlnJC52YWx1ZSEuZGVmYXVsdFZhbHVlcy5kZWJ1Z1xuICAgIH07XG5cbiAgICBmcm9tKHBvc3Q8VXBsb2FkQ29uZmlnPihgcGx1Z2luLyR7dGhpcy5SRVFVRVNUX1VSTH1gLCBkYXRhKSkucGlwZShcbiAgICAgIHRha2UoMSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGludm9raW5nIGRvY3VtZW50c1VwbG9hZENvbmZpZ0dldDogJHtlcnJvcn1gKTtcbiAgICAgIH0pXG4gICAgKS5zdWJzY3JpYmUoKHJlczogVXBsb2FkQ29uZmlnKSA9PiB0aGlzLnVwbG9hZENvbmZpZyQubmV4dChyZXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGxvYWRzIGRvY3VtZW50cyB0byB0aGUgc2VydmVyLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCB0YWtlcyBhIEZvcm1EYXRhIG9iamVjdCB3aGljaCBzaG91bGQgY29udGFpbiBhbGwgZmlsZXMgdG8gYmUgdXBsb2FkZWQuXG4gICAqIEVhY2ggZmlsZSBzaG91bGQgYmUgYXBwZW5kZWQgdG8gdGhlIEZvcm1EYXRhIG9iamVjdCB3aXRoIGl0cyBvcmlnaW5hbCBuYW1lLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZTpcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgKiBmb3JtRGF0YS5hcHBlbmQoZmlsZS5uYW1lLCBmaWxlLmZpbGUpO1xuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIGZvcm1EYXRhIC0gVGhlIEZvcm1EYXRhIG9iamVjdCBjb250YWluaW5nIHRoZSBmaWxlcyB0byBiZSB1cGxvYWRlZC5cbiAgICogLSBFYWNoIGZpbGUgc2hvdWxkIGJlIGFwcGVuZGVkIHRvIHRoZSBGb3JtRGF0YSBvYmplY3Qgd2l0aCBpdHMgb3JpZ2luYWwgbmFtZS5cbiAgICogRm9yIGV4YW1wbGU6XG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICogZm9ybURhdGEuYXBwZW5kKGZpbGUubmFtZSwgZmlsZS5maWxlKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSBlbmFibGVQcm9ncmVzcyAtIChPcHRpb25hbCkgQSBib29sZWFuIHBhcmFtZXRlciB0aGF0IGNvbnRyb2xzIHdoZXRoZXIgcHJvZ3Jlc3MgcmVwb3J0aW5nIGlzIGVuYWJsZWQuXG4gICAqIC0gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgKiAtIElmIGB0cnVlYCwgdGhlIGByZXBvcnRQcm9ncmVzc2Agb3B0aW9uIGlzIHNldCBpbiB0aGUgcmVxdWVzdCBvcHRpb25zLCBlbmFibGluZyB0aGUgdHJhY2sgb2YgdXBsb2FkIHByb2dyZXNzIGJhc2VkIG9uIHRoZSB1bmRlcmx5aW5nIGJyb3dzZXIncyBwcm9ncmVzcyBldmVudHMuXG4gICAqIC0gSWYgYGZhbHNlYCwgcHJvZ3Jlc3MgZXZlbnRzIGFyZSBub3QgcmVwb3J0ZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBldmVudHMgb2YgdHlwZSBgVXBsb2FkRXZlbnRgOlxuICAgKiAtIGBVcGxvYWRQcm9ncmVzc0V2ZW50YDogRW1pdHRlZCBkdXJpbmcgdGhlIHVwbG9hZCBwcm9jZXNzLCBjb250YWluaW5nOlxuICAgKiAgIC0gKiAgYHR5cGVgOiBcInVwbG9hZFByb2dyZXNzXCIgLSBUaGUgdHlwZSBvZiB0aGUgZXZlbnQuXG4gICAqICAgLSAqICBgbG9hZGVkYDogbnVtYmVyIC0gVGhlIG51bWJlciBvZiBieXRlcyB1cGxvYWRlZCBzbyBmYXIuXG4gICAqICAgLSAqICBgdG90YWxgOiBudW1iZXIgLSBUaGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHVwbG9hZGVkIChpZiBhdmFpbGFibGUpLlxuICAgKiAgIC0gKiAgYHByb2dyZXNzYDogbnVtYmVyIC0gVGhlIHBlcmNlbnRhZ2Ugb2YgdXBsb2FkIHByb2dyZXNzIChjYWxjdWxhdGVkIGFzIGAobG9hZGVkIC8gdG90YWwpICogMTAwYCkuXG4gICAqIC0gYFVwbG9hZFJlc3BvbnNlRXZlbnRgOiBFbWl0dGVkIHdoZW4gdGhlIHVwbG9hZCBpcyBjb21wbGV0ZSwgY29udGFpbmluZzpcbiAgICogICAtICogIGB0eXBlYDogXCJyZXNwb25zZVwiIC0gVGhlIHR5cGUgb2YgdGhlIGV2ZW50LlxuICAgKiAgIC0gKiAgYGJvZHlgOiBgVXBsb2FkUmVzcG9uc2VgIC0gVGhlIHNlcnZlcidzIHJlc3BvbnNlLCBpbmNsdWRpbmc6XG4gICAqICAgICAtICogLSAqIGBzdGF0dXNUb2tlbmA6IHN0cmluZyAtIEEgdG9rZW4gdG8gdHJhY2sgdGhlIHN0YXR1cyBvZiB0aGUgaW5kZXhpbmcgcHJvY2Vzcy5cbiAgICogICAgIC0gKiAtICogIGBleGVjdXRpb25UaW1lYDogc3RyaW5nIC0gVGhlIHRpbWUgdGFrZW4gdG8gZXhlY3V0ZSB0aGUgdXBsb2FkLlxuICAgKiAgICAgLSAqIC0gKiAgYGNvbm5lY3RvclJlc3BvbnNlYCAob3B0aW9uYWwpOiBBZGRpdGlvbmFsIHJlc3BvbnNlIGRhdGEgZnJvbSB0aGUgY29ubmVjdG9yLCBjb250YWluaW5nOlxuICAgKiAgICAgICAtICogLSAqIC0gKiAgYGNvbGxlY3Rpb25gOiBzdHJpbmcgLSBUaGUgY29sbGVjdGlvbiBuYW1lLlxuICAgKiAgICAgICAtICogLSAqIC0gKiAgYGFjdGlvbmA6IHN0cmluZyAtIFRoZSBhY3Rpb24gcGVyZm9ybWVkLlxuICAgKiAgICAgICAtICogLSAqIC0gKiAgYHN0YXRzYDogb2JqZWN0IC0gU3RhdGlzdGljcyBhYm91dCB0aGUgdXBsb2FkLCBpbmNsdWRpbmc6XG4gICAqICAgICAgICAgLSAqIC0gKiAtICogLSAqIGBuYkRvY1VwZGF0ZWRgOiBudW1iZXIgLSBUaGUgbnVtYmVyIG9mIGRvY3VtZW50cyB1cGRhdGVkLlxuICAgKlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgaXMgYW4gZXJyb3IgaW52b2tpbmcgdGhlIGBkb2N1bWVudHN1cGxvYWRgIGFjdGlvbi5cbiAgICpcbiAgICogRXhhbXBsZSB1c2FnZTpcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgKiBmb3JtRGF0YS5hcHBlbmQoZmlsZS5uYW1lLCBmaWxlLmZpbGUpO1xuICAgKiB0aGlzLmRvY3VtZW50c1VwbG9hZFNlcnZpY2UudXBsb2FkRG9jdW1lbnRzKGZvcm1EYXRhKS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgKiAgIGlmIChldmVudC50eXBlID09PSAndXBsb2FkUHJvZ3Jlc3MnKSB7XG4gICAqICAgICBjb25zb2xlLmxvZyhgUHJvZ3Jlc3M6ICR7ZXZlbnQucHJvZ3Jlc3N9JWApO1xuICAgKiAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PT0gJ3Jlc3BvbnNlJykge1xuICAgKiAgICAgY29uc29sZS5sb2coJ1VwbG9hZCBjb21wbGV0ZTonLCBldmVudC5ib2R5KTtcbiAgICogICB9XG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyB1cGxvYWREb2N1bWVudHMoZm9ybURhdGE6IEZvcm1EYXRhLCBlbmFibGVQcm9ncmVzczogYm9vbGVhbiA9IHRydWUpOiBPYnNlcnZhYmxlPFVwbG9hZEV2ZW50PiB7XG4gICAgLy8gQWRkIHRoZSByZXF1aXJlZCBcImRhdGFcIiBmaWVsZCBhcyBhIEpTT04gc3RyaW5nXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGFjdGlvbjogXCJkb2N1bWVudHN1cGxvYWRcIixcbiAgICAgIGFwcE5hbWU6IHRoaXMuYXBwU2VydmljZS5hcHBOYW1lLFxuICAgICAgZGVidWc6IHRoaXMuY2hhdFNlcnZpY2UuYXNzaXN0YW50Q29uZmlnJC52YWx1ZSEuZGVmYXVsdFZhbHVlcy5kZWJ1Z1xuICAgIH07XG4gICAgZm9ybURhdGEuYXBwZW5kKCdkYXRhJywgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuXG4gICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoeyAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nIH0pO1xuICAgIGNvbnN0IHRva2VuID0gZ2V0VG9rZW4oKTtcbiAgICBpZih0b2tlbil7XG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5hcHBlbmQoJ3NpbmVxdWEtY3NyZi10b2tlbicsdG9rZW4pO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb25zOiBhbnkgID0ge1xuICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgIG9ic2VydmU6ICdldmVudHMnLFxuICAgIH07XG4gICAgaWYgKGVuYWJsZVByb2dyZXNzKSBvcHRpb25zWydyZXBvcnRQcm9ncmVzcyddID0gdHJ1ZTtcblxuICAgIGNvbnN0IHVybCA9IGAke2dsb2JhbENvbmZpZy5iYWNrZW5kVXJsfS8ke2dsb2JhbENvbmZpZy5hcGlQYXRofS9wbHVnaW4vJHt0aGlzLlJFUVVFU1RfVVJMfWA7XG4gICAgLyoqXG4gICAgICogTmVlZCB0byB1c2UgdGhlIEh0dHBDbGllbnQgZGlyZWN0bHkgdG8gYXZvaWQgdGhlIEpTT05NZXRob2RQbHVnaW5TZXJ2aWNlJ3MgYmVoYXZpb3JcbiAgICAgKiBiZWNhdXNlIGl0IGlzIGFsdGVyaW5nIHRoZSByZXF1ZXN0IGFuZCB0aHVzIG1ha2luZyBpdCB1bmFibGUgdG8gcHJvcGVybHkgc2V0IHRoZSBDb250ZW50LVR5cGUgaGVhZGVyIHdpdGggdGhlIGJvdW5kYXJ5XG4gICAgICovXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4odXJsLCBmb3JtRGF0YSwgb3B0aW9ucykucGlwZShcbiAgICAgIGZpbHRlcigoZXZlbnQpOiBldmVudCBpcyBIdHRwVXBsb2FkUHJvZ3Jlc3NFdmVudCB8IEh0dHBSZXNwb25zZTxhbnk+ID0+XG4gICAgICAgIGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuUmVzcG9uc2UgfHwgKGVuYWJsZVByb2dyZXNzICYmIGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3MpXG4gICAgICApLFxuICAgICAgbWFwKChldmVudCk6IFVwbG9hZEV2ZW50ID0+IHtcbiAgICAgICAgc3dpdGNoIChldmVudC50eXBlKSB7XG4gICAgICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzOiB7XG4gICAgICAgICAgICBjb25zdCB7IGxvYWRlZCA9IDAsIHRvdGFsID0gMCB9ID0gZXZlbnQ7XG4gICAgICAgICAgICByZXR1cm4geyB0eXBlOiAndXBsb2FkUHJvZ3Jlc3MnLCBsb2FkZWQsIHRvdGFsLCBwcm9ncmVzczogdG90YWwgPiAwID8gTWF0aC5yb3VuZCgobG9hZGVkIC8gdG90YWwpICogMTAwKSA6IDAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlOlxuICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogJ3Jlc3BvbnNlJywgYm9keTogZXZlbnQuYm9keSB9O1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGV2ZW50IHR5cGVcIik7IC8vIFNob3VsZCBub3QgcmVhY2ggaGVyZSwgYnV0IGZvciB0eXBlc2NyaXB0IHNha2UuXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBpbnZva2luZyBkb2N1bWVudHN1cGxvYWQ6ICR7ZXJyb3J9YCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBpbmRleGluZyBzdGF0dXMgb2YgYSBwcmVkZWZpbmVkIHVwbG9hZGVkIGRvY3VtZW50KHMpXG4gICAqIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBzdGF0dXMgdG9rZW4gcmV0dXJuZWQgZnJvbSB0aGUgdXBsb2FkIHByb2Nlc3MuXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSBzdGF0dXMgdG9rZW4gdXNlZCB0byB0cmFjayB0aGUgaW5kZXhpbmcgcHJvY2Vzcy5cbiAgICogQHJldHVybnMgQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBzZXJ2ZXIgcmVzcG9uc2Ugb2YgdHlwZSBgSW5kZXhpbmdSZXNwb25zZWAuXG4gICAqIFRoZSBgSW5kZXhpbmdSZXNwb25zZWAgb2JqZWN0IGNvbnRhaW5zOlxuICAgKiAtIGBkb2NzYDogYXJyYXkgLSBBbiBhcnJheSBvZiBkb2N1bWVudCBzdGF0dXMgb2JqZWN0cywgZWFjaCBjb250YWluaW5nOlxuICAgKiAgIC0gKiBgaWRgOiBzdHJpbmcgLSBUaGUgZG9jdW1lbnQgSUQuXG4gICAqICAgLSAqIGBmaWxlTmFtZWA6IHN0cmluZyAtIFRoZSBuYW1lIG9mIHRoZSBmaWxlLlxuICAgKiAgIC0gKiBgb3BlcmF0aW9uYDogXCJBZGRcIiB8IFwiVXBkYXRlXCIgLSBUaGUgb3BlcmF0aW9uIHBlcmZvcm1lZCBvbiB0aGUgZG9jdW1lbnQuXG4gICAqICAgLSAqIGBzdGF0dXNgOiBcIkluZGV4aW5nXCIgfCBcIkluZGV4ZWRcIiB8IFwiRXJyb3JcIiAtIFRoZSBzdGF0dXMgb2YgdGhlIGRvY3VtZW50LlxuICAgKiAgIC0gKiBgcHJldmlvdXNJbmRleGF0aW9uVGltZWA6IHN0cmluZyB8IG51bGwgLSBUaGUgcHJldmlvdXMgaW5kZXhhdGlvbiB0aW1lLlxuICAgKiAgIC0gKiBgY3VycmVudEluZGV4YXRpb25UaW1lYDogc3RyaW5nIHwgbnVsbCAtIFRoZSBjdXJyZW50IGluZGV4YXRpb24gdGltZS5cbiAgICogLSBgZXhlY3V0aW9uVGltZWA6IHN0cmluZyAtIFRoZSB0aW1lIHRha2VuIHRvIHJldHJpZXZlIHRoZSBpbmRleGluZyBzdGF0dXMuXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSBpcyBhbiBlcnJvciBpbnZva2luZyB0aGUgYGRvY3VtZW50c1VwbG9hZFN0YXR1c2AgYWN0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldEluZGV4aW5nU3RhdHVzKHRva2VuOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEluZGV4aW5nSW5mb3M+IHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgYWN0aW9uOiBcImRvY3VtZW50c1VwbG9hZFN0YXR1c1wiLFxuICAgICAgYXBwTmFtZTogdGhpcy5hcHBTZXJ2aWNlLmFwcE5hbWUsXG4gICAgICBzdGF0dXNUb2tlbjogdG9rZW4sXG4gICAgICBkZWJ1ZzogdGhpcy5jaGF0U2VydmljZS5hc3Npc3RhbnRDb25maWckLnZhbHVlIS5kZWZhdWx0VmFsdWVzLmRlYnVnXG4gICAgfTtcblxuICAgIHJldHVybiBmcm9tKHBvc3Q8SW5kZXhpbmdJbmZvcz4oYHBsdWdpbi8ke3RoaXMuUkVRVUVTVF9VUkx9YCwgZGF0YSkpLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGludm9raW5nIGRvY3VtZW50c1VwbG9hZFN0YXR1czogJHtlcnJvcn1gKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBsaXN0IG9mIHVwbG9hZGVkIGRvY3VtZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gW2NvbHVtbnNdIC0gT3B0aW9uYWwgYXJyYXkgb2YgYWRkaXRpb25hbCBpbmRleCBjb2x1bW5zIHRvIGluY2x1ZGUgZm9yIGVhY2ggZG9jdW1lbnQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2tpcF0gLSBPcHRpb25hbCBudW1iZXIgb2YgZG9jdW1lbnRzIHRvIHNraXAgZm9yIHBhZ2luYXRpb24uIElmIHNldCwgY291bnQgYWxzbyBuZWVkcyB0byBiZSBzZXQuIE5vIHNraXAgaWYgbm90IHNldC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtjb3VudF0gLSBPcHRpb25hbCBudW1iZXIgb2YgZG9jdW1lbnRzIHRvIHRha2UgZm9yIHBhZ2luYXRpb24gKHVubGltaXRlZCBpZiBub3Qgc2V0KS5cbiAgICogQHJldHVybnMge09ic2VydmFibGU8VXBsb2FkZWREb2N1bWVudHM+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGxpc3Qgb2YgdXBsb2FkZWQgZG9jdW1lbnRzLlxuICAgKiBUaGUgYFVwbG9hZGVkRG9jdW1lbnRzYCBvYmplY3QgY29udGFpbnM6XG4gICAqIC0gYGRvY3NgOiBhcnJheSAtIEFuIGFycmF5IG9mIG9iamVjdHMgcmVwcmVzZW50aW5nIGEgc2luZ2xlIGRvY3VtZW50IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKiAgIC0gKiBgaWRgOiBzdHJpbmcgLSBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgZG9jdW1lbnQuXG4gICAqICAgLSAqIGBmaWxlTmFtZWA6IHN0cmluZyAtIFRoZSBuYW1lIG9mIHRoZSBmaWxlLlxuICAgKiAgIC0gKiBgdGl0bGVgOiBzdHJpbmcgLSBUaGUgdGl0bGUgb2YgdGhlIGRvY3VtZW50LlxuICAgKiAgIC0gKiBgZmlsZUV4dGA6IHN0cmluZyAtIFRoZSBmaWxlIGV4dGVuc2lvbiBvZiB0aGUgZG9jdW1lbnQuXG4gICAqICAgLSAqIGBpbmRleGF0aW9uVGltZWA6IHN0cmluZyAtIFRoZSB0aW1lIHdoZW4gdGhlIGRvY3VtZW50IHdhcyBpbmRleGVkLlxuICAgKiAgIC0gKiBgc2l6ZWA6IG51bWJlciAtIFRoZSBzaXplIG9mIHRoZSBkb2N1bWVudC5cbiAgICogICAtICogYHNpemVEaXNwbGF5YDogc3RyaW5nIC0gQSBodW1hbi1yZWFkYWJsZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZG9jdW1lbnQgc2l6ZS5cbiAgICogICAtICogYFtrZXk6IHN0cmluZ11gOiBhbnkgLSBBZGRpdGlvbmFsIGNvbHVtbnMgYXNrZWQgaW4gdGhlIHJlcXVlc3QsIHZhbHVlIG9mIHRoZSBjb2x1bW4gZm9yIHRoZSBkb2N1bWVudC5cbiAgICogLSBgY291bnRgOiBudW1iZXIgLSBUaGUgY291bnQgb2YgZG9jdW1lbnRzIGluIHRoZSBjdXJyZW50IGJhdGNoIG9yIHN1YnNldC5cbiAgICogLSBgdG90YWxDb3VudGA6IG51bWJlciAtIFRoZSB0b3RhbCBjb3VudCBvZiBkb2N1bWVudHMgYXZhaWxhYmxlLlxuICAgKiAtIGBleGVjdXRpb25UaW1lYDogc3RyaW5nIC0gVGhlIHRpbWUgdGFrZW4gdG8gcHJvY2VzcyB0aGUgZG9jdW1lbnRzLlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gVGhyb3dzIGFuIGVycm9yIGlmIHRoZSByZXF1ZXN0IGZhaWxzLlxuICAgKi9cbiAgcHVibGljIGdldERvY3VtZW50c0xpc3QoY29sdW1ucz86IHN0cmluZ1tdLCBza2lwPzogbnVtYmVyLCBjb3VudD86IG51bWJlcik6IE9ic2VydmFibGU8VXBsb2FkZWREb2N1bWVudHM+IHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgYWN0aW9uOiBcImRvY3VtZW50c0xpc3RcIixcbiAgICAgIGFwcE5hbWU6IHRoaXMuYXBwU2VydmljZS5hcHBOYW1lLFxuICAgICAgZGVidWc6IHRoaXMuY2hhdFNlcnZpY2UuYXNzaXN0YW50Q29uZmlnJC52YWx1ZSEuZGVmYXVsdFZhbHVlcy5kZWJ1Z1xuICAgIH07XG5cbiAgICBpZiAoY29sdW1ucykgZGF0YVtcImNvbHVtbnNcIl0gPSBjb2x1bW5zO1xuICAgIGlmIChza2lwKSBkYXRhW1wic2tpcFwiXSA9IHNraXA7XG4gICAgaWYgKGNvdW50KSBkYXRhW1wiY291bnRcIl0gPSBjb3VudDtcblxuICAgIHJldHVybiBmcm9tKHBvc3Q8VXBsb2FkZWREb2N1bWVudHM+KGBwbHVnaW4vJHt0aGlzLlJFUVVFU1RfVVJMfWAsIGRhdGEpKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBpbnZva2luZyBkb2N1bWVudHNMaXN0OiAke2Vycm9yfWApO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHVwbG9hZGVkIGRvY3VtZW50cyB3aXRoIHRoZSBzcGVjaWZpZWQgSURzLlxuICAgKlxuICAgKiBAcGFyYW0gZG9jSWRzIC0gQW4gYXJyYXkgb2YgZG9jdW1lbnQgSURzIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMgQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBzZXJ2ZXIgcmVzcG9uc2Ugb2YgdHlwZSBgZGVsZXRlRG9jdW1lbnRzUmVzcG9uc2VgLlxuICAgKiBUaGUgYGRlbGV0ZURvY3VtZW50c1Jlc3BvbnNlYCBvYmplY3QgY29udGFpbnM6XG4gICAqIC0gYGRlbGV0ZWRDb3VudGA6IG51bWJlciAtIFRoZSBudW1iZXIgb2YgZGVsZXRlZCBkb2N1bWVudHMuXG4gICAqIC0gYGV4ZWN1dGlvblRpbWVgOiBzdHJpbmcgLSBUaGUgdGltZSB0YWtlbiB0byBkZWxldGUgdGhlIGRvY3VtZW50cy5cbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIGlzIGFuIGVycm9yIGludm9raW5nIHRoZSBgZG9jdW1lbnRzRGVsZXRlYCBhY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZGVsZXRlRG9jdW1lbnRzKGRvY0lkczogc3RyaW5nW10pOiBPYnNlcnZhYmxlPGRlbGV0ZURvY3VtZW50c1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGFjdGlvbjogXCJkb2N1bWVudHNEZWxldGVcIixcbiAgICAgIGRvY0lkcyxcbiAgICAgIGFwcE5hbWU6IHRoaXMuYXBwU2VydmljZS5hcHBOYW1lLFxuICAgICAgZGVidWc6IHRoaXMuY2hhdFNlcnZpY2UuYXNzaXN0YW50Q29uZmlnJC52YWx1ZSEuZGVmYXVsdFZhbHVlcy5kZWJ1Z1xuICAgIH07XG5cbiAgICByZXR1cm4gZnJvbShwb3N0PGRlbGV0ZURvY3VtZW50c1Jlc3BvbnNlPihgcGx1Z2luLyR7dGhpcy5SRVFVRVNUX1VSTH1gLCBkYXRhKSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgaW52b2tpbmcgZG9jdW1lbnRzRGVsZXRlOiAke2Vycm9yfWApO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYWxsIHVwbG9hZGVkIGRvY3VtZW50cy5cbiAgICpcbiAgICogQHJldHVybnMgQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBzZXJ2ZXIgcmVzcG9uc2Ugb2YgdHlwZSBgZGVsZXRlRG9jdW1lbnRzUmVzcG9uc2VgLlxuICAgKiBUaGUgYGRlbGV0ZURvY3VtZW50c1Jlc3BvbnNlYCBvYmplY3QgY29udGFpbnM6XG4gICAqIC0gYGRlbGV0ZWRDb3VudGA6IG51bWJlciAtIFRoZSBudW1iZXIgb2YgZGVsZXRlZCBkb2N1bWVudHMuXG4gICAqIC0gYGV4ZWN1dGlvblRpbWVgOiBzdHJpbmcgLSBUaGUgdGltZSB0YWtlbiB0byBkZWxldGUgdGhlIGRvY3VtZW50cy5cbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIGlzIGFuIGVycm9yIGludm9raW5nIHRoZSBgZG9jdW1lbnRzRGVsZXRlQWxsYCBhY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZGVsZXRlQWxsRG9jdW1lbnRzKCk6IE9ic2VydmFibGU8ZGVsZXRlRG9jdW1lbnRzUmVzcG9uc2U+IHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgYWN0aW9uOiBcImRvY3VtZW50c0RlbGV0ZUFsbFwiLFxuICAgICAgYXBwTmFtZTogdGhpcy5hcHBTZXJ2aWNlLmFwcE5hbWUsXG4gICAgICBkZWJ1ZzogdGhpcy5jaGF0U2VydmljZS5hc3Npc3RhbnRDb25maWckLnZhbHVlIS5kZWZhdWx0VmFsdWVzLmRlYnVnXG4gICAgfTtcblxuICAgIHJldHVybiBmcm9tKHBvc3Q8ZGVsZXRlRG9jdW1lbnRzUmVzcG9uc2U+KGBwbHVnaW4vJHt0aGlzLlJFUVVFU1RfVVJMfWAsIGRhdGEpKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBpbnZva2luZyBkb2N1bWVudHNEZWxldGVBbGw6ICR7ZXJyb3J9YCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0cyB0aGUgZ2l2ZW4gZmlsZSBzaXplIGluIGJ5dGVzIGludG8gYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBieXRlcyAtIFRoZSBzaXplIG9mIHRoZSBmaWxlIGluIGJ5dGVzLlxuICAgKiBAcmV0dXJucyBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGZpbGUgc2l6ZSBpbiBhIGh1bWFuLXJlYWRhYmxlIGZvcm1hdCAoZS5nLiwgXCIxMC4yNCBLQlwiLCBcIjEuMDAgTUJcIikuXG4gICAqL1xuICBwdWJsaWMgZm9ybWF0RmlsZVNpemUoYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKGJ5dGVzID09PSAwKSByZXR1cm4gXCIwIEJ5dGVzXCI7XG4gICAgY29uc3QgayA9IDEwMjQ7XG4gICAgY29uc3Qgc2l6ZXMgPSBbXCJCeXRlc1wiLCBcIktCXCIsIFwiTUJcIiwgXCJHQlwiLCBcIlRCXCJdO1xuICAgIGNvbnN0IGkgPSBNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKGspKTtcbiAgICByZXR1cm4gKFxuICAgICAgTnVtYmVyLnBhcnNlRmxvYXQoKGJ5dGVzIC8gTWF0aC5wb3coaywgaSkpLnRvRml4ZWQoMikpICsgXCIgXCIgKyBzaXplc1tpXVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIGdpdmVuIGZpbGUgc2l6ZSBpbiBieXRlcyBpbnRvIG1lZ2FieXRlcy5cbiAgICpcbiAgICogQHBhcmFtIGJ5dGVzIC0gVGhlIHNpemUgb2YgdGhlIGZpbGUgaW4gYnl0ZXMuXG4gICAqIEByZXR1cm5zIFRoZSBzaXplIG9mIHRoZSBmaWxlIGluIG1lZ2FieXRlcy5cbiAgICovXG4gIHB1YmxpYyBjb252ZXJ0Qnl0ZXNUb01CKGJ5dGVzOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBieXRlcyAvICgxMDI0ICogMTAyNCk7XG4gIH1cblxufVxuIl19
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import { Component, Input, ViewEncapsulation } from '@angular/core';
|
|
2
|
-
import { defaultFormatIcons } from './icons';
|
|
3
|
-
import { CommonModule } from '@angular/common';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@angular/common";
|
|
6
|
-
export class FormatIconComponent {
|
|
7
|
-
constructor() {
|
|
8
|
-
this._formatIcons = defaultFormatIcons;
|
|
9
|
-
}
|
|
10
|
-
ngOnChanges() {
|
|
11
|
-
const icon = this.extension ? this._formatIcons[this.extension] : undefined;
|
|
12
|
-
this.icon = icon?.icon || this._formatIcons.file.icon;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
18
|
-
type: Component,
|
|
19
|
-
args: [{ selector: 'sq-format-icon', encapsulation: ViewEncapsulation.None, standalone: true, imports: [CommonModule], template: "<span *ngIf=\"icon\" class=\"{{icon}}\"></span>" }]
|
|
20
|
-
}], propDecorators: { extension: [{
|
|
21
|
-
type: Input
|
|
22
|
-
}] } });
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { Component, Input, ViewEncapsulation } from '@angular/core';
|
|
2
|
+
import { defaultFormatIcons } from './icons';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common";
|
|
6
|
+
export class FormatIconComponent {
|
|
7
|
+
constructor() {
|
|
8
|
+
this._formatIcons = defaultFormatIcons;
|
|
9
|
+
}
|
|
10
|
+
ngOnChanges() {
|
|
11
|
+
const icon = this.extension ? this._formatIcons[this.extension] : undefined;
|
|
12
|
+
this.icon = icon?.icon || this._formatIcons.file.icon;
|
|
13
|
+
}
|
|
14
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormatIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
15
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormatIconComponent, isStandalone: true, selector: "sq-format-icon", inputs: { extension: "extension" }, usesOnChanges: true, ngImport: i0, template: "<span *ngIf=\"icon\" class=\"{{icon}}\"></span>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
16
|
+
}
|
|
17
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormatIconComponent, decorators: [{
|
|
18
|
+
type: Component,
|
|
19
|
+
args: [{ selector: 'sq-format-icon', encapsulation: ViewEncapsulation.None, standalone: true, imports: [CommonModule], template: "<span *ngIf=\"icon\" class=\"{{icon}}\"></span>" }]
|
|
20
|
+
}], propDecorators: { extension: [{
|
|
21
|
+
type: Input
|
|
22
|
+
}] } });
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LWljb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvZm9ybWF0LWljb24vZm9ybWF0LWljb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvZm9ybWF0LWljb24vZm9ybWF0LWljb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWEsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBUy9DLE1BQU0sT0FBTyxtQkFBbUI7SUFQaEM7UUFXVSxpQkFBWSxHQUFHLGtCQUFrQixDQUFDO0tBUzNDO0lBTEMsV0FBVztRQUNULE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDNUUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUN4RCxDQUFDOytHQVhVLG1CQUFtQjttR0FBbkIsbUJBQW1CLG1JQ1hoQyxpREFBMkMsMkNEUy9CLFlBQVk7OzRGQUVYLG1CQUFtQjtrQkFQL0IsU0FBUzsrQkFDRSxnQkFBZ0IsaUJBRVgsaUJBQWlCLENBQUMsSUFBSSxjQUN6QixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUM7OEJBSWQsU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRlZmF1bHRGb3JtYXRJY29ucyB9IGZyb20gJy4vaWNvbnMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3EtZm9ybWF0LWljb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybWF0LWljb24uY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBGb3JtYXRJY29uQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcblxuICBASW5wdXQoKSBleHRlbnNpb246IHN0cmluZztcblxuICBwcml2YXRlIF9mb3JtYXRJY29ucyA9IGRlZmF1bHRGb3JtYXRJY29ucztcbiAgXG4gIGljb246IHN0cmluZztcblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICBjb25zdCBpY29uID0gdGhpcy5leHRlbnNpb24gPyB0aGlzLl9mb3JtYXRJY29uc1t0aGlzLmV4dGVuc2lvbl0gOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5pY29uID0gaWNvbj8uaWNvbiB8fCB0aGlzLl9mb3JtYXRJY29ucy5maWxlLmljb247XG4gIH1cblxufVxuIiwiPHNwYW4gKm5nSWY9XCJpY29uXCIgY2xhc3M9XCJ7e2ljb259fVwiPjwvc3Bhbj4iXX0=
|