@techextensor/tab-core-utility 2.2.194 → 2.2.195
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/esm2022/index.mjs +6 -1
- package/esm2022/lib/tab-core-utility/app/constants/api-constants.mjs +41 -23
- package/esm2022/lib/tab-core-utility/app/constants/common.mjs +14 -50
- package/esm2022/lib/tab-core-utility/app/constants/storage-constants.mjs +2 -2
- package/esm2022/lib/tab-core-utility/app/crud/tab-blueprint.service.mjs +41 -14
- package/esm2022/lib/tab-core-utility/app/crud/tab-crud.service.mjs +47 -68
- package/esm2022/lib/tab-core-utility/app/crud/tab-delete.service.mjs +84 -30
- package/esm2022/lib/tab-core-utility/app/crud/tab-formio.service.mjs +141 -12
- package/esm2022/lib/tab-core-utility/app/crud/tab-get.service.mjs +137 -42
- package/esm2022/lib/tab-core-utility/app/crud/tab-insert.service.mjs +89 -38
- package/esm2022/lib/tab-core-utility/app/crud/tab-update.service.mjs +156 -128
- package/esm2022/lib/tab-core-utility/app/enums/query.enum.mjs +7 -7
- package/esm2022/lib/tab-core-utility/app/helpers/auth-response.adapter.mjs +79 -0
- package/esm2022/lib/tab-core-utility/app/helpers/common/app.helpers.mjs +32 -23
- package/esm2022/lib/tab-core-utility/app/helpers/common/dsq.helpers.mjs +9 -11
- package/esm2022/lib/tab-core-utility/app/helpers/common/meta-data.helpers.mjs +13 -13
- package/esm2022/lib/tab-core-utility/app/helpers/common/req-res.helpers.mjs +7 -45
- package/esm2022/lib/tab-core-utility/app/helpers/common/where-clause.helpers.mjs +79 -76
- package/esm2022/lib/tab-core-utility/app/helpers/login-response.adapter.mjs +76 -0
- package/esm2022/lib/tab-core-utility/app/helpers/response.adapter.mjs +42 -0
- package/esm2022/lib/tab-core-utility/app/helpers/screen/grid.helpers.mjs +8 -4
- package/esm2022/lib/tab-core-utility/app/helpers/screen/media-upload.helpers.mjs +5 -9
- package/esm2022/lib/tab-core-utility/app/helpers/screen/screen.helpers.mjs +8 -33
- package/esm2022/lib/tab-core-utility/app/helpers/transition-response.adapter.mjs +83 -0
- package/esm2022/lib/tab-core-utility/app/interfaces/auth.interface.mjs +1 -1
- package/esm2022/lib/tab-core-utility/app/interfaces/common.interface.mjs +1 -1
- package/esm2022/lib/tab-core-utility/app/interfaces/signalr.interface.mjs +42 -0
- package/esm2022/lib/tab-core-utility/app/models/api-query.class.mjs +39 -1
- package/esm2022/lib/tab-core-utility/app/models/app-field.model.mjs +36 -7
- package/esm2022/lib/tab-core-utility/app/models/app-object.model.mjs +84 -47
- package/esm2022/lib/tab-core-utility/app/models/app-screen.model.mjs +24 -13
- package/esm2022/lib/tab-core-utility/app/models/data-source-query.model.mjs +57 -23
- package/esm2022/lib/tab-core-utility/app/models/filter.model.mjs +21 -10
- package/esm2022/lib/tab-core-utility/app/models/parameter.model.mjs +12 -6
- package/esm2022/lib/tab-core-utility/app/models/sort.model.mjs +11 -4
- package/esm2022/lib/tab-core-utility/app/utils/json.util.mjs +17 -16
- package/esm2022/lib/tab-core-utility/app/utils/req-res.util.mjs +1 -55
- package/esm2022/lib/tab-core-utility/app/utils/tab-app.util.mjs +1 -164
- package/esm2022/lib/tab-core-utility/auth/auth.service.mjs +36 -11
- package/esm2022/lib/tab-core-utility/core/http-client/api.service.mjs +78 -1
- package/esm2022/lib/tab-core-utility/core/service/signalr/operation-tracker.service.mjs +90 -0
- package/esm2022/lib/tab-core-utility/core/service/signalr/signalr-infrastructure.service.mjs +268 -0
- package/esm2022/lib/tab-core-utility/core/service/signalr/signalr.service.mjs +207 -0
- package/index.d.ts +5 -0
- package/lib/tab-core-utility/app/constants/api-constants.d.ts +27 -19
- package/lib/tab-core-utility/app/constants/common.d.ts +9 -0
- package/lib/tab-core-utility/app/constants/storage-constants.d.ts +1 -1
- package/lib/tab-core-utility/app/crud/tab-blueprint.service.d.ts +14 -8
- package/lib/tab-core-utility/app/crud/tab-crud.service.d.ts +9 -7
- package/lib/tab-core-utility/app/crud/tab-delete.service.d.ts +20 -10
- package/lib/tab-core-utility/app/crud/tab-formio.service.d.ts +33 -6
- package/lib/tab-core-utility/app/crud/tab-get.service.d.ts +50 -8
- package/lib/tab-core-utility/app/crud/tab-insert.service.d.ts +16 -21
- package/lib/tab-core-utility/app/crud/tab-update.service.d.ts +34 -19
- package/lib/tab-core-utility/app/enums/query.enum.d.ts +3 -6
- package/lib/tab-core-utility/app/helpers/auth-response.adapter.d.ts +32 -0
- package/lib/tab-core-utility/app/helpers/common/app.helpers.d.ts +6 -8
- package/lib/tab-core-utility/app/helpers/common/dsq.helpers.d.ts +3 -0
- package/lib/tab-core-utility/app/helpers/common/meta-data.helpers.d.ts +3 -3
- package/lib/tab-core-utility/app/helpers/common/req-res.helpers.d.ts +7 -51
- package/lib/tab-core-utility/app/helpers/common/where-clause.helpers.d.ts +1 -0
- package/lib/tab-core-utility/app/helpers/login-response.adapter.d.ts +29 -0
- package/lib/tab-core-utility/app/helpers/response.adapter.d.ts +22 -0
- package/lib/tab-core-utility/app/helpers/screen/grid.helpers.d.ts +2 -1
- package/lib/tab-core-utility/app/helpers/screen/media-upload.helpers.d.ts +1 -1
- package/lib/tab-core-utility/app/helpers/screen/screen.helpers.d.ts +1 -0
- package/lib/tab-core-utility/app/helpers/transition-response.adapter.d.ts +30 -0
- package/lib/tab-core-utility/app/interfaces/auth.interface.d.ts +1 -1
- package/lib/tab-core-utility/app/interfaces/common.interface.d.ts +61 -9
- package/lib/tab-core-utility/app/interfaces/signalr.interface.d.ts +84 -0
- package/lib/tab-core-utility/app/models/api-query.class.d.ts +54 -9
- package/lib/tab-core-utility/app/models/app-field.model.d.ts +4 -2
- package/lib/tab-core-utility/app/models/app-object.model.d.ts +5 -3
- package/lib/tab-core-utility/app/models/app-screen.model.d.ts +2 -2
- package/lib/tab-core-utility/app/models/data-source-query.model.d.ts +7 -2
- package/lib/tab-core-utility/app/models/filter.model.d.ts +2 -2
- package/lib/tab-core-utility/app/models/parameter.model.d.ts +2 -2
- package/lib/tab-core-utility/app/models/sort.model.d.ts +1 -1
- package/lib/tab-core-utility/app/utils/json.util.d.ts +3 -2
- package/lib/tab-core-utility/app/utils/req-res.util.d.ts +1 -9
- package/lib/tab-core-utility/app/utils/tab-app.util.d.ts +0 -61
- package/lib/tab-core-utility/auth/auth.service.d.ts +6 -0
- package/lib/tab-core-utility/core/http-client/api.service.d.ts +46 -0
- package/lib/tab-core-utility/core/service/signalr/operation-tracker.service.d.ts +40 -0
- package/lib/tab-core-utility/core/service/signalr/signalr-infrastructure.service.d.ts +73 -0
- package/lib/tab-core-utility/core/service/signalr/signalr.service.d.ts +122 -0
- package/package.json +3 -2
|
@@ -1,42 +1,171 @@
|
|
|
1
1
|
import { Injectable, inject } from "@angular/core";
|
|
2
2
|
import { ApiService } from "../../core/http-client/api.service";
|
|
3
3
|
import { getHeaders } from "../utils/req-res.util";
|
|
4
|
-
import { API } from "../constants/api-constants";
|
|
4
|
+
import { API, APIServices } from "../constants/api-constants";
|
|
5
|
+
import { of, throwError } from "rxjs";
|
|
6
|
+
import { switchMap, map, catchError } from "rxjs/operators";
|
|
7
|
+
import { ConjuctionClause, FilterValueType, RelationalOperator } from "../enums/dsq.enum";
|
|
8
|
+
import { SignalRService } from "../../core/service/signalr/signalr.service";
|
|
5
9
|
import * as i0 from "@angular/core";
|
|
6
10
|
export class TabFormioService {
|
|
7
11
|
constructor() {
|
|
8
12
|
this.apiService = inject(ApiService);
|
|
13
|
+
this.signalRService = inject(SignalRService);
|
|
9
14
|
}
|
|
10
15
|
/**
|
|
11
16
|
* Fetches screen data from the server based on the screen ID and optional configuration.
|
|
17
|
+
* NEW: Uses metadata service endpoint - returns new API format directly
|
|
12
18
|
*
|
|
13
19
|
* @param screenId - The ID of the screen to retrieve.
|
|
14
20
|
* @param config - Optional configuration including layoutId and version.
|
|
15
21
|
* @param params - Additional parameters for the API call.
|
|
16
|
-
* @returns The screen data
|
|
22
|
+
* @returns The screen data in new API format (camelCase)
|
|
17
23
|
*/
|
|
18
24
|
getScreen(screenId, config, params) {
|
|
19
25
|
// Retrieve headers for the API request
|
|
20
26
|
const headers = getHeaders();
|
|
21
|
-
//
|
|
22
|
-
|
|
27
|
+
// NEW API: GET /screen/{screenId} via metadata service
|
|
28
|
+
// Query params: layoutId, version (if provided)
|
|
29
|
+
let endpoint = `${API.screen}/${screenId}`;
|
|
30
|
+
const queryParams = [];
|
|
31
|
+
if (config?.layoutId) {
|
|
32
|
+
queryParams.push(`layoutId=${config.layoutId}`);
|
|
33
|
+
}
|
|
34
|
+
if (config?.version) {
|
|
35
|
+
queryParams.push(`version=${config.version}`);
|
|
36
|
+
}
|
|
37
|
+
if (queryParams.length > 0) {
|
|
38
|
+
endpoint += `?${queryParams.join('&')}`;
|
|
39
|
+
}
|
|
40
|
+
return this.apiService.getFromService(APIServices.metadataService, endpoint, params, headers);
|
|
23
41
|
}
|
|
24
42
|
/**
|
|
25
43
|
* Retrieves the submission data from the server.
|
|
26
|
-
*
|
|
27
|
-
*
|
|
44
|
+
* NEW: Uses formio service endpoint - returns new API format directly
|
|
45
|
+
*
|
|
46
|
+
* @param screenId - The ID of the screen to retrieve data for
|
|
47
|
+
* @param requestPayload - Request payload containing Reqtokens and other parameters
|
|
48
|
+
* @returns The screen data in new API format (camelCase)
|
|
28
49
|
*/
|
|
29
50
|
getScreenData(screenId, requestPayload) {
|
|
30
51
|
const headers = getHeaders();
|
|
31
|
-
|
|
52
|
+
// NEW API: POST /formio/screendata/{screenId} via formio service
|
|
53
|
+
return this.apiService.postToService(APIServices.formioService, `${API.screenData}/${screenId}`, requestPayload, headers);
|
|
32
54
|
}
|
|
33
55
|
/**
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
56
|
+
* Process form request - handles both SYNC and ASYNC operations transparently
|
|
57
|
+
*
|
|
58
|
+
* SYNC Operation: Backend returns insertedId immediately → Fetch full record → Return
|
|
59
|
+
* ASYNC Operation: Backend returns correlationId → Wait for SignalR notification → Fetch full record → Return
|
|
60
|
+
*
|
|
61
|
+
* Developer code stays the same for both cases - platform handles complexity
|
|
62
|
+
*
|
|
63
|
+
* @param data Object containing submission data (ScreenId, Data)
|
|
64
|
+
* @returns Observable with full record data (always returns complete record)
|
|
65
|
+
*/
|
|
37
66
|
processRequest(data) {
|
|
38
67
|
const headers = getHeaders();
|
|
39
|
-
return this.apiService.
|
|
68
|
+
return this.apiService.postToService(APIServices.formioService, `${API.processRequest}`, data, headers).pipe(switchMap((response) => {
|
|
69
|
+
// Check for success
|
|
70
|
+
if (!response?.IsSuccess) {
|
|
71
|
+
console.error('[TabFormioService] ProcessRequest failed:', response?.Errors);
|
|
72
|
+
return of(response);
|
|
73
|
+
}
|
|
74
|
+
// CASE 1: SYNC - Has insertedId immediately (not null)
|
|
75
|
+
if (response?.Result?.insertedId) {
|
|
76
|
+
return this.handleSyncOperation(response);
|
|
77
|
+
}
|
|
78
|
+
// CASE 2: ASYNC - Has CorrelationId and insertedId is null
|
|
79
|
+
else if (response?.CorrelationId) {
|
|
80
|
+
return this.handleAsyncOperation(response);
|
|
81
|
+
}
|
|
82
|
+
// CASE 3: Other response (return as-is)
|
|
83
|
+
return of(response);
|
|
84
|
+
}), catchError((error) => {
|
|
85
|
+
console.error('[TabFormioService] ProcessRequest error:', error);
|
|
86
|
+
return throwError(() => error);
|
|
87
|
+
}));
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Handle SYNC operation - fetch full record immediately
|
|
91
|
+
*/
|
|
92
|
+
handleSyncOperation(response) {
|
|
93
|
+
const { insertedId, objectName, primaryKeyField } = response?.Result || {};
|
|
94
|
+
if (!objectName || !insertedId) {
|
|
95
|
+
console.error('[TabFormioService] Missing objectName or insertedId in sync response');
|
|
96
|
+
return of(response);
|
|
97
|
+
}
|
|
98
|
+
const pkField = primaryKeyField || 'Id'; // Default to 'Id' if not provided
|
|
99
|
+
return this.fetchFullRecord(objectName, insertedId, pkField).pipe(map((fullRecord) => ({
|
|
100
|
+
...response,
|
|
101
|
+
Result: fullRecord
|
|
102
|
+
})), catchError((error) => {
|
|
103
|
+
console.error('[TabFormioService] Failed to fetch full record:', error);
|
|
104
|
+
// Return partial response if fetch fails
|
|
105
|
+
return of(response);
|
|
106
|
+
}));
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Handle ASYNC operation - wait for SignalR notification, then fetch full record
|
|
110
|
+
*/
|
|
111
|
+
handleAsyncOperation(response) {
|
|
112
|
+
const correlationId = response?.CorrelationId;
|
|
113
|
+
const primaryKeyField = response?.Result?.primaryKeyField || 'Id'; // Get from original response
|
|
114
|
+
if (!correlationId) {
|
|
115
|
+
console.error('[TabFormioService] Missing correlationId in async response');
|
|
116
|
+
return of(response);
|
|
117
|
+
}
|
|
118
|
+
// Wait for SignalR notification with matching correlationId
|
|
119
|
+
return this.signalRService.waitForOperation(correlationId).pipe(switchMap((notification) => {
|
|
120
|
+
// Check if operation succeeded
|
|
121
|
+
if (!notification.isSuccess) {
|
|
122
|
+
return throwError(() => new Error(notification.errorMessage || 'Operation failed'));
|
|
123
|
+
}
|
|
124
|
+
// Fetch full record using result from notification
|
|
125
|
+
return this.fetchFullRecord(notification.entityName, notification.result?.[0], primaryKeyField);
|
|
126
|
+
}),
|
|
127
|
+
// Build normalized response
|
|
128
|
+
map((fullRecord) => ({
|
|
129
|
+
...response,
|
|
130
|
+
Result: fullRecord
|
|
131
|
+
})),
|
|
132
|
+
// Handle errors (timeout, fetch failure, etc.)
|
|
133
|
+
catchError((error) => {
|
|
134
|
+
if (error.message === 'Operation timed out') {
|
|
135
|
+
return throwError(() => new Error('Operation timed out. The operation may still complete in the background. Please refresh to see the result.'));
|
|
136
|
+
}
|
|
137
|
+
return throwError(() => error);
|
|
138
|
+
}));
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Fetch full record from CRUD service
|
|
142
|
+
* @param objectName - Entity/Table name
|
|
143
|
+
* @param recordId - Record ID to fetch
|
|
144
|
+
* @param primaryKeyField - Primary key field name (defaults to 'Id')
|
|
145
|
+
*/
|
|
146
|
+
fetchFullRecord(objectName, recordId, primaryKeyField = 'Id') {
|
|
147
|
+
return this.apiService.postToService(APIServices.crudService, API.QueriesSelect, {
|
|
148
|
+
EntityName: objectName,
|
|
149
|
+
ResultField_AppfieldIds: ['*'],
|
|
150
|
+
whereClause: {
|
|
151
|
+
filters: [
|
|
152
|
+
{
|
|
153
|
+
fieldName: primaryKeyField, // Use dynamic primary key field
|
|
154
|
+
operator: RelationalOperator.EqualTo,
|
|
155
|
+
value: recordId,
|
|
156
|
+
valueType: FilterValueType.Literal,
|
|
157
|
+
conjunction: ConjuctionClause.AND,
|
|
158
|
+
groupId: 0,
|
|
159
|
+
sequence: 1
|
|
160
|
+
}
|
|
161
|
+
]
|
|
162
|
+
},
|
|
163
|
+
}).pipe(map((selectResponse) => {
|
|
164
|
+
if (selectResponse?.Result && selectResponse?.Result?.length) {
|
|
165
|
+
return selectResponse.Result[0];
|
|
166
|
+
}
|
|
167
|
+
throw new Error('Record not found after operation');
|
|
168
|
+
}));
|
|
40
169
|
}
|
|
41
170
|
/**
|
|
42
171
|
* Retrieves the formIO components for the given appObjectId and type.
|
|
@@ -56,4 +185,4 @@ export class TabFormioService {
|
|
|
56
185
|
type: Injectable,
|
|
57
186
|
args: [{ providedIn: 'root' }]
|
|
58
187
|
}], null, null); })();
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLWZvcm1pby5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kYXRhLWFjY2Vzcy9zcmMvbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL2NydWQvdGFiLWZvcm1pby5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQU1qRCxNQUFNLE9BQU8sZ0JBQWdCO0lBRDdCO1FBRW1CLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7S0ErRGxEO0lBN0RDOzs7Ozs7O09BT0c7SUFDSCxTQUFTLENBQUMsUUFBZ0IsRUFBRSxNQUF3QixFQUFFLE1BQVk7UUFDaEUsdUNBQXVDO1FBQ3ZDLE1BQU0sT0FBTyxHQUFHLFVBQVUsRUFBRSxDQUFDO1FBQzdCLDBFQUEwRTtRQUMxRSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUN4QixHQUFHLEdBQUcsQ0FBQyxTQUFTLGFBQWEsUUFBUSxHQUFHLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLGFBQWEsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsWUFBWSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUN4SixNQUFNLEVBQ04sT0FBTyxDQUNSLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGFBQWEsQ0FBQyxRQUFnQixFQUFFLGNBQW1CO1FBQ2pELE1BQU0sT0FBTyxHQUFHLFVBQVUsRUFBRSxDQUFDO1FBQzdCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQ3pCLEdBQUcsR0FBRyxDQUFDLGFBQWEsSUFBSSxRQUFRLEVBQUUsRUFDbEMsY0FBYyxFQUNkLE9BQU8sQ0FDUixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7TUFHRTtJQUNGLGNBQWMsQ0FBQyxJQUEyQjtRQUN4QyxNQUFNLE9BQU8sR0FBRyxVQUFVLEVBQUUsQ0FBQztRQUM3QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUN6QixHQUFHLEdBQUcsQ0FBQyxjQUFjLEVBQUUsRUFDdkIsSUFBSSxFQUNKLE9BQU8sQ0FDUixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHFCQUFxQixDQUFDLFdBQW1CLEVBQUUsSUFBNEIsRUFBRSxNQUFZO1FBQ25GLE1BQU0sT0FBTyxHQUFHLFVBQVUsRUFBRSxDQUFDO1FBQzdCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQ3hCLEdBQUcsR0FBRyxDQUFDLHFCQUFxQixnQkFBZ0IsV0FBVyxTQUFTLElBQUksRUFBRSxFQUN0RSxNQUFNLEVBQ04sT0FBTyxDQUNSLENBQUM7SUFDSixDQUFDO2lGQS9EVSxnQkFBZ0I7dUVBQWhCLGdCQUFnQixXQUFoQixnQkFBZ0IsbUJBREgsTUFBTTs7aUZBQ25CLGdCQUFnQjtjQUQ1QixVQUFVO2VBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQXBpU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2h0dHAtY2xpZW50L2FwaS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IGdldEhlYWRlcnMgfSBmcm9tIFwiLi4vdXRpbHMvcmVxLXJlcy51dGlsXCI7XHJcbmltcG9ydCB7IEFQSSB9IGZyb20gXCIuLi9jb25zdGFudHMvYXBpLWNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBDb21tb25BcGlSZXNwb25zZSwgR2V0U2NyZWVuQ29uZmlnLCBQcm9jZXNzUmVxdWVzdFBheWxvYWQgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9jb21tb24uaW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBCdWlsZEZvcm1Db21wb25lbnRUeXBlIH0gZnJvbSBcIi4uL2VudW1zL2NvbW1vbi5lbnVtXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgVGFiRm9ybWlvU2VydmljZSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBhcGlTZXJ2aWNlID0gaW5qZWN0KEFwaVNlcnZpY2UpO1xyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIHNjcmVlbiBkYXRhIGZyb20gdGhlIHNlcnZlciBiYXNlZCBvbiB0aGUgc2NyZWVuIElEIGFuZCBvcHRpb25hbCBjb25maWd1cmF0aW9uLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBzY3JlZW5JZCAtIFRoZSBJRCBvZiB0aGUgc2NyZWVuIHRvIHJldHJpZXZlLlxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIGluY2x1ZGluZyBsYXlvdXRJZCBhbmQgdmVyc2lvbi5cclxuICAgKiBAcGFyYW0gcGFyYW1zIC0gQWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUgQVBJIGNhbGwuXHJcbiAgICogQHJldHVybnMgVGhlIHNjcmVlbiBkYXRhIGlmIGhlYWRlcnMgYXJlIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIG51bGwuXHJcbiAgICovXHJcbiAgZ2V0U2NyZWVuKHNjcmVlbklkOiBzdHJpbmcsIGNvbmZpZz86IEdldFNjcmVlbkNvbmZpZywgcGFyYW1zPzogYW55KTogT2JzZXJ2YWJsZTxDb21tb25BcGlSZXNwb25zZT4ge1xyXG4gICAgLy8gUmV0cmlldmUgaGVhZGVycyBmb3IgdGhlIEFQSSByZXF1ZXN0XHJcbiAgICBjb25zdCBoZWFkZXJzID0gZ2V0SGVhZGVycygpO1xyXG4gICAgLy8gQ29uc3RydWN0IHRoZSBBUEkgZW5kcG9pbnQgd2l0aCB0aGUgc2NyZWVuSWQgYW5kIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb25cclxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UuZ2V0KFxyXG4gICAgICBgJHtBUEkuZ2V0U2NyZWVufT9zY3JlZW5JZD0ke3NjcmVlbklkfSR7Y29uZmlnPy5sYXlvdXRJZCA/IGAmbGF5b3V0SWQ9JHtjb25maWc/LmxheW91dElkfWAgOiAnJ30ke2NvbmZpZz8udmVyc2lvbiA/IGAmdmVyc2lvbj0ke2NvbmZpZz8udmVyc2lvbn1gIDogJyd9YCxcclxuICAgICAgcGFyYW1zLFxyXG4gICAgICBoZWFkZXJzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIHRoZSBzdWJtaXNzaW9uIGRhdGEgZnJvbSB0aGUgc2VydmVyLlxyXG4gICAqIEBwYXJhbSBkYXRhIC0gT2JqZWN0IGNvbnRhaW5pbmcgc2NyZWVuSWQgYW5kIHJlcXRva2Vuc1xyXG4gICAqIEByZXR1cm5zIEEgU3ViamVjdCBlbWl0dGluZyB0aGUgc3VibWlzc2lvbiBkYXRhIG9yIHVuZGVmaW5lZC5cclxuICAgKi9cclxuICBnZXRTY3JlZW5EYXRhKHNjcmVlbklkOiBzdHJpbmcsIHJlcXVlc3RQYXlsb2FkOiBhbnkpOiBPYnNlcnZhYmxlPENvbW1vbkFwaVJlc3BvbnNlPiB7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gZ2V0SGVhZGVycygpO1xyXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5wb3N0KFxyXG4gICAgICBgJHtBUEkuZ2V0U2NyZWVuRGF0YX0vJHtzY3JlZW5JZH1gLFxyXG4gICAgICByZXF1ZXN0UGF5bG9hZCxcclxuICAgICAgaGVhZGVyc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICogQ2FsbGVkIHdoZW4gdGhlIGZvcm0gaXMgc3VibWl0dGVkLlxyXG4gICogQHBhcmFtIGRhdGEgT2JqZWN0IGNvbnRhaW5pbmcgc3VibWlzc2lvbiBkYXRhLlxyXG4gICovXHJcbiAgcHJvY2Vzc1JlcXVlc3QoZGF0YTogUHJvY2Vzc1JlcXVlc3RQYXlsb2FkKTogT2JzZXJ2YWJsZTxDb21tb25BcGlSZXNwb25zZT4ge1xyXG4gICAgY29uc3QgaGVhZGVycyA9IGdldEhlYWRlcnMoKTtcclxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UucG9zdChcclxuICAgICAgYCR7QVBJLnByb2Nlc3NSZXF1ZXN0fWAsXHJcbiAgICAgIGRhdGEsXHJcbiAgICAgIGhlYWRlcnNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgdGhlIGZvcm1JTyBjb21wb25lbnRzIGZvciB0aGUgZ2l2ZW4gYXBwT2JqZWN0SWQgYW5kIHR5cGUuXHJcbiAgICogQHBhcmFtIGFwcE9iamVjdElkIC0gVGhlIElEIG9mIHRoZSBhcHAgb2JqZWN0LlxyXG4gICAqIEBwYXJhbSB0eXBlIC0gVGhlIHR5cGUgb2YgdGhlIGNvbXBvbmVudHMgdG8gcmV0cmlldmUuIENhbiBiZSBlaXRoZXIgJ0NvbW1vbkZpbHRlcicgb3IgJ0J1bGtVcGRhdGUnXHJcbiAgICogQHBhcmFtIHBhcmFtcyAtIEFkZGl0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIEFQSSBjYWxsLlxyXG4gICAqIEByZXR1cm5zIFRoZSBmb3JtSU8gY29tcG9uZW50cyBpbiB0aGUgcmVzcG9uc2UgYm9keS5cclxuICAgKi9cclxuICBidWlsZEZvcm1JT0NvbXBvbmVudHMoYXBwT2JqZWN0SWQ6IHN0cmluZywgdHlwZTogQnVpbGRGb3JtQ29tcG9uZW50VHlwZSwgcGFyYW1zPzogYW55KTogT2JzZXJ2YWJsZTxDb21tb25BcGlSZXNwb25zZT4ge1xyXG4gICAgY29uc3QgaGVhZGVycyA9IGdldEhlYWRlcnMoKTtcclxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UuZ2V0KFxyXG4gICAgICBgJHtBUEkuQnVpbGRGb3JtSU9Db21wb25lbnRzfT9hcHBPYmplY3RJZD0ke2FwcE9iamVjdElkfSZUeXBlPSR7dHlwZX1gLFxyXG4gICAgICBwYXJhbXMsXHJcbiAgICAgIGhlYWRlcnNcclxuICAgICk7XHJcbiAgfVxyXG59Il19
|
|
188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLWZvcm1pby5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kYXRhLWFjY2Vzcy9zcmMvbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL2NydWQvdGFiLWZvcm1pby5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU5RCxPQUFPLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDMUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOztBQUc1RSxNQUFNLE9BQU8sZ0JBQWdCO0lBRDdCO1FBRW1CLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEMsbUJBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7S0FzTzFEO0lBcE9DOzs7Ozs7OztPQVFHO0lBQ0gsU0FBUyxDQUFDLFFBQWdCLEVBQUUsTUFBd0IsRUFBRSxNQUFZO1FBQ2hFLHVDQUF1QztRQUN2QyxNQUFNLE9BQU8sR0FBRyxVQUFVLEVBQUUsQ0FBQztRQUU3Qix1REFBdUQ7UUFDdkQsZ0RBQWdEO1FBQ2hELElBQUksUUFBUSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1B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d0JBQ3BDLEtBQUssRUFBRSxRQUFRO3dCQUNmLFNBQVMsRUFBRSxlQUFlLENBQUMsT0FBTzt3QkFDbEMsV0FBVyxFQUFFLGdCQUFnQixDQUFDLEdBQUc7d0JBQ2pDLE9BQU8sRUFBRSxDQUFDO3dCQUNWLFFBQVEsRUFBRSxDQUFDO3FCQUNaO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxDQUFDLGNBQWlDLEVBQUUsRUFBRTtZQUN4QyxJQUFJLGNBQWMsRUFBRSxNQUFNLElBQUksY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQztnQkFDN0QsT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxxQkFBcUIsQ0FBQyxXQUFtQixFQUFFLElBQTRCLEVBQUUsTUFBWTtRQUNuRixNQUFNLE9BQU8sR0FBRyxVQUFVLEVBQUUsQ0FBQztRQUM3QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUN4QixHQUFHLEdBQUcsQ0FBQyxxQkFBcUIsZ0JBQWdCLFdBQVcsU0FBUyxJQUFJLEVBQUUsRUFDdEUsTUFBTSxFQUNOLE9BQU8sQ0FDUixDQUFDO0lBQ0osQ0FBQztpRkF2T1UsZ0JBQWdCO3VFQUFoQixnQkFBZ0IsV0FBaEIsZ0JBQWdCLG1CQURILE1BQU07O2lGQUNuQixnQkFBZ0I7Y0FENUIsVUFBVTtlQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEFwaVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9odHRwLWNsaWVudC9hcGkuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBnZXRIZWFkZXJzIH0gZnJvbSBcIi4uL3V0aWxzL3JlcS1yZXMudXRpbFwiO1xyXG5pbXBvcnQgeyBBUEksIEFQSVNlcnZpY2VzIH0gZnJvbSBcIi4uL2NvbnN0YW50cy9hcGktY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IENvbW1vbkFwaVJlc3BvbnNlLCBHZXRTY3JlZW5Db25maWcsIFByb2Nlc3NSZXF1ZXN0UGF5bG9hZCB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL2NvbW1vbi5pbnRlcmZhY2VcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBzd2l0Y2hNYXAsIG1hcCwgY2F0Y2hFcnJvciB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBCdWlsZEZvcm1Db21wb25lbnRUeXBlIH0gZnJvbSBcIi4uL2VudW1zL2NvbW1vbi5lbnVtXCI7XHJcbmltcG9ydCB7IENvbmp1Y3Rpb25DbGF1c2UsIEZpbHRlclZhbHVlVHlwZSwgUmVsYXRpb25hbE9wZXJhdG9yIH0gZnJvbSBcIi4uL2VudW1zL2RzcS5lbnVtXCI7XHJcbmltcG9ydCB7IFNpZ25hbFJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvc2VydmljZS9zaWduYWxyL3NpZ25hbHIuc2VydmljZVwiO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFRhYkZvcm1pb1NlcnZpY2Uge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpU2VydmljZSA9IGluamVjdChBcGlTZXJ2aWNlKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHNpZ25hbFJTZXJ2aWNlID0gaW5qZWN0KFNpZ25hbFJTZXJ2aWNlKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyBzY3JlZW4gZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgYmFzZWQgb24gdGhlIHNjcmVlbiBJRCBhbmQgb3B0aW9uYWwgY29uZmlndXJhdGlvbi5cclxuICAgKiBORVc6IFVzZXMgbWV0YWRhdGEgc2VydmljZSBlbmRwb2ludCAtIHJldHVybnMgbmV3IEFQSSBmb3JtYXQgZGlyZWN0bHlcclxuICAgKlxyXG4gICAqIEBwYXJhbSBzY3JlZW5JZCAtIFRoZSBJRCBvZiB0aGUgc2NyZWVuIHRvIHJldHJpZXZlLlxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIGluY2x1ZGluZyBsYXlvdXRJZCBhbmQgdmVyc2lvbi5cclxuICAgKiBAcGFyYW0gcGFyYW1zIC0gQWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUgQVBJIGNhbGwuXHJcbiAgICogQHJldHVybnMgVGhlIHNjcmVlbiBkYXRhIGluIG5ldyBBUEkgZm9ybWF0IChjYW1lbENhc2UpXHJcbiAgICovXHJcbiAgZ2V0U2NyZWVuKHNjcmVlbklkOiBzdHJpbmcsIGNvbmZpZz86IEdldFNjcmVlbkNvbmZpZywgcGFyYW1zPzogYW55KTogT2JzZXJ2YWJsZTxDb21tb25BcGlSZXNwb25zZT4ge1xyXG4gICAgLy8gUmV0cmlldmUgaGVhZGVycyBmb3IgdGhlIEFQSSByZXF1ZXN0XHJcbiAgICBjb25zdCBoZWFkZXJzID0gZ2V0SGVhZGVycygpO1xyXG5cclxuICAgIC8vIE5FVyBBUEk6IEdFVCAvc2NyZWVuL3tzY3JlZW5JZH0gdmlhIG1ldGFkYXRhIHNlcnZpY2VcclxuICAgIC8vIFF1ZXJ5IHBhcmFtczogbGF5b3V0SWQsIHZlcnNpb24gKGlmIHByb3ZpZGVkKVxyXG4gICAgbGV0IGVuZHBvaW50ID0gYCR7QVBJLnNjcmVlbn0vJHtzY3JlZW5JZH1gO1xyXG4gICAgY29uc3QgcXVlcnlQYXJhbXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgaWYgKGNvbmZpZz8ubGF5b3V0SWQpIHtcclxuICAgICAgcXVlcnlQYXJhbXMucHVzaChgbGF5b3V0SWQ9JHtjb25maWcubGF5b3V0SWR9YCk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29uZmlnPy52ZXJzaW9uKSB7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zLnB1c2goYHZlcnNpb249JHtjb25maWcudmVyc2lvbn1gKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocXVlcnlQYXJhbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBlbmRwb2ludCArPSBgPyR7cXVlcnlQYXJhbXMuam9pbignJicpfWA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5nZXRGcm9tU2VydmljZShcclxuICAgICAgQVBJU2VydmljZXMubWV0YWRhdGFTZXJ2aWNlLFxyXG4gICAgICBlbmRwb2ludCxcclxuICAgICAgcGFyYW1zLFxyXG4gICAgICBoZWFkZXJzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIHRoZSBzdWJtaXNzaW9uIGRhdGEgZnJvbSB0aGUgc2VydmVyLlxyXG4gICAqIE5FVzogVXNlcyBmb3JtaW8gc2VydmljZSBlbmRwb2ludCAtIHJldHVybnMgbmV3IEFQSSBmb3JtYXQgZGlyZWN0bHlcclxuICAgKlxyXG4gICAqIEBwYXJhbSBzY3JlZW5JZCAtIFRoZSBJRCBvZiB0aGUgc2NyZWVuIHRvIHJldHJpZXZlIGRhdGEgZm9yXHJcbiAgICogQHBhcmFtIHJlcXVlc3RQYXlsb2FkIC0gUmVxdWVzdCBwYXlsb2FkIGNvbnRhaW5pbmcgUmVxdG9rZW5zIGFuZCBvdGhlciBwYXJhbWV0ZXJzXHJcbiAgICogQHJldHVybnMgVGhlIHNjcmVlbiBkYXRhIGluIG5ldyBBUEkgZm9ybWF0IChjYW1lbENhc2UpXHJcbiAgICovXHJcbiAgZ2V0U2NyZWVuRGF0YShzY3JlZW5JZDogc3RyaW5nLCByZXF1ZXN0UGF5bG9hZDogYW55KTogT2JzZXJ2YWJsZTxDb21tb25BcGlSZXNwb25zZT4ge1xyXG4gICAgY29uc3QgaGVhZGVycyA9IGdldEhlYWRlcnMoKTtcclxuXHJcbiAgICAvLyBORVcgQVBJOiBQT1NUIC9mb3JtaW8vc2NyZWVuZGF0YS97c2NyZWVuSWR9IHZpYSBmb3JtaW8gc2VydmljZVxyXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5wb3N0VG9TZXJ2aWNlKFxyXG4gICAgICBBUElTZXJ2aWNlcy5mb3JtaW9TZXJ2aWNlLFxyXG4gICAgICBgJHtBUEkuc2NyZWVuRGF0YX0vJHtzY3JlZW5JZH1gLFxyXG4gICAgICByZXF1ZXN0UGF5bG9hZCxcclxuICAgICAgaGVhZGVyc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb2Nlc3MgZm9ybSByZXF1ZXN0IC0gaGFuZGxlcyBib3RoIFNZTkMgYW5kIEFTWU5DIG9wZXJhdGlvbnMgdHJhbnNwYXJlbnRseVxyXG4gICAqXHJcbiAgICogU1lOQyBPcGVyYXRpb246IEJhY2tlbmQgcmV0dXJucyBpbnNlcnRlZElkIGltbWVkaWF0ZWx5IOKGkiBGZXRjaCBmdWxsIHJlY29yZCDihpIgUmV0dXJuXHJcbiAgICogQVNZTkMgT3BlcmF0aW9uOiBCYWNrZW5kIHJldHVybnMgY29ycmVsYXRpb25JZCDihpIgV2FpdCBmb3IgU2lnbmFsUiBub3RpZmljYXRpb24g4oaSIEZldGNoIGZ1bGwgcmVjb3JkIOKGkiBSZXR1cm5cclxuICAgKlxyXG4gICAqIERldmVsb3BlciBjb2RlIHN0YXlzIHRoZSBzYW1lIGZvciBib3RoIGNhc2VzIC0gcGxhdGZvcm0gaGFuZGxlcyBjb21wbGV4aXR5XHJcbiAgICpcclxuICAgKiBAcGFyYW0gZGF0YSBPYmplY3QgY29udGFpbmluZyBzdWJtaXNzaW9uIGRhdGEgKFNjcmVlbklkLCBEYXRhKVxyXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgd2l0aCBmdWxsIHJlY29yZCBkYXRhIChhbHdheXMgcmV0dXJucyBjb21wbGV0ZSByZWNvcmQpXHJcbiAgICovXHJcbiAgcHJvY2Vzc1JlcXVlc3QoZGF0YTogUHJvY2Vzc1JlcXVlc3RQYXlsb2FkKTogT2JzZXJ2YWJsZTxDb21tb25BcGlSZXNwb25zZT4ge1xyXG4gICAgY29uc3QgaGVhZGVycyA9IGdldEhlYWRlcnMoKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLnBvc3RUb1NlcnZpY2UoXHJcbiAgICAgIEFQSVNlcnZpY2VzLmZvcm1pb1NlcnZpY2UsXHJcbiAgICAgIGAke0FQSS5wcm9jZXNzUmVxdWVzdH1gLFxyXG4gICAgICBkYXRhLFxyXG4gICAgICBoZWFkZXJzXHJcbiAgICApLnBpcGUoXHJcbiAgICAgIHN3aXRjaE1hcCgocmVzcG9uc2U6IENvbW1vbkFwaVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgLy8gQ2hlY2sgZm9yIHN1Y2Nlc3NcclxuICAgICAgICBpZiAoIXJlc3BvbnNlPy5Jc1N1Y2Nlc3MpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tUYWJGb3JtaW9TZXJ2aWNlXSBQcm9jZXNzUmVxdWVzdCBmYWlsZWQ6JywgcmVzcG9uc2U/LkVycm9ycyk7XHJcbiAgICAgICAgICByZXR1cm4gb2YocmVzcG9uc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ0FTRSAxOiBTWU5DIC0gSGFzIGluc2VydGVkSWQgaW1tZWRpYXRlbHkgKG5vdCBudWxsKVxyXG4gICAgICAgIGlmIChyZXNwb25zZT8uUmVzdWx0Py5pbnNlcnRlZElkKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVTeW5jT3BlcmF0aW9uKHJlc3BvbnNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENBU0UgMjogQVNZTkMgLSBIYXMgQ29ycmVsYXRpb25JZCBhbmQgaW5zZXJ0ZWRJZCBpcyBudWxsXHJcbiAgICAgICAgZWxzZSBpZiAocmVzcG9uc2U/LkNvcnJlbGF0aW9uSWQpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZUFzeW5jT3BlcmF0aW9uKHJlc3BvbnNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENBU0UgMzogT3RoZXIgcmVzcG9uc2UgKHJldHVybiBhcy1pcylcclxuICAgICAgICByZXR1cm4gb2YocmVzcG9uc2UpO1xyXG4gICAgICB9KSxcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdbVGFiRm9ybWlvU2VydmljZV0gUHJvY2Vzc1JlcXVlc3QgZXJyb3I6JywgZXJyb3IpO1xyXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUgU1lOQyBvcGVyYXRpb24gLSBmZXRjaCBmdWxsIHJlY29yZCBpbW1lZGlhdGVseVxyXG4gICAqL1xyXG4gIHByaXZhdGUgaGFuZGxlU3luY09wZXJhdGlvbihyZXNwb25zZTogQ29tbW9uQXBpUmVzcG9uc2UpOiBPYnNlcnZhYmxlPENvbW1vbkFwaVJlc3BvbnNlPiB7XHJcbiAgICBjb25zdCB7IGluc2VydGVkSWQsIG9iamVjdE5hbWUsIHByaW1hcnlLZXlGaWVsZCB9ID0gcmVzcG9uc2U/LlJlc3VsdCB8fCB7fTtcclxuXHJcbiAgICBpZiAoIW9iamVjdE5hbWUgfHwgIWluc2VydGVkSWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignW1RhYkZvcm1pb1NlcnZpY2VdIE1pc3Npbmcgb2JqZWN0TmFtZSBvciBpbnNlcnRlZElkIGluIHN5bmMgcmVzcG9uc2UnKTtcclxuICAgICAgcmV0dXJuIG9mKHJlc3BvbnNlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwa0ZpZWxkID0gcHJpbWFyeUtleUZpZWxkIHx8ICdJZCc7IC8vIERlZmF1bHQgdG8gJ0lkJyBpZiBub3QgcHJvdmlkZWRcclxuXHJcbiAgICByZXR1cm4gdGhpcy5mZXRjaEZ1bGxSZWNvcmQob2JqZWN0TmFtZSwgaW5zZXJ0ZWRJZCwgcGtGaWVsZCkucGlwZShcclxuICAgICAgbWFwKChmdWxsUmVjb3JkKSA9PiAoe1xyXG4gICAgICAgIC4uLnJlc3BvbnNlLFxyXG4gICAgICAgIFJlc3VsdDogZnVsbFJlY29yZFxyXG4gICAgICB9KSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignW1RhYkZvcm1pb1NlcnZpY2VdIEZhaWxlZCB0byBmZXRjaCBmdWxsIHJlY29yZDonLCBlcnJvcik7XHJcbiAgICAgICAgLy8gUmV0dXJuIHBhcnRpYWwgcmVzcG9uc2UgaWYgZmV0Y2ggZmFpbHNcclxuICAgICAgICByZXR1cm4gb2YocmVzcG9uc2UpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSBBU1lOQyBvcGVyYXRpb24gLSB3YWl0IGZvciBTaWduYWxSIG5vdGlmaWNhdGlvbiwgdGhlbiBmZXRjaCBmdWxsIHJlY29yZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgaGFuZGxlQXN5bmNPcGVyYXRpb24ocmVzcG9uc2U6IENvbW1vbkFwaVJlc3BvbnNlKTogT2JzZXJ2YWJsZTxDb21tb25BcGlSZXNwb25zZT4ge1xyXG4gICAgY29uc3QgY29ycmVsYXRpb25JZCA9IHJlc3BvbnNlPy5Db3JyZWxhdGlvbklkO1xyXG4gICAgY29uc3QgcHJpbWFyeUtleUZpZWxkID0gcmVzcG9uc2U/LlJlc3VsdD8ucHJpbWFyeUtleUZpZWxkIHx8ICdJZCc7IC8vIEdldCBmcm9tIG9yaWdpbmFsIHJlc3BvbnNlXHJcblxyXG4gICAgaWYgKCFjb3JyZWxhdGlvbklkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tUYWJGb3JtaW9TZXJ2aWNlXSBNaXNzaW5nIGNvcnJlbGF0aW9uSWQgaW4gYXN5bmMgcmVzcG9uc2UnKTtcclxuICAgICAgcmV0dXJuIG9mKHJlc3BvbnNlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBXYWl0IGZvciBTaWduYWxSIG5vdGlmaWNhdGlvbiB3aXRoIG1hdGNoaW5nIGNvcnJlbGF0aW9uSWRcclxuICAgIHJldHVybiB0aGlzLnNpZ25hbFJTZXJ2aWNlLndhaXRGb3JPcGVyYXRpb24oY29ycmVsYXRpb25JZCkucGlwZShcclxuICAgICAgc3dpdGNoTWFwKChub3RpZmljYXRpb24pID0+IHtcclxuICAgICAgICAvLyBDaGVjayBpZiBvcGVyYXRpb24gc3VjY2VlZGVkXHJcbiAgICAgICAgaWYgKCFub3RpZmljYXRpb24uaXNTdWNjZXNzKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihcclxuICAgICAgICAgICAgKCkgPT4gbmV3IEVycm9yKG5vdGlmaWNhdGlvbi5lcnJvck1lc3NhZ2UgfHwgJ09wZXJhdGlvbiBmYWlsZWQnKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEZldGNoIGZ1bGwgcmVjb3JkIHVzaW5nIHJlc3VsdCBmcm9tIG5vdGlmaWNhdGlvblxyXG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoRnVsbFJlY29yZChub3RpZmljYXRpb24uZW50aXR5TmFtZSwgbm90aWZpY2F0aW9uLnJlc3VsdD8uWzBdLCBwcmltYXJ5S2V5RmllbGQpO1xyXG4gICAgICB9KSxcclxuXHJcbiAgICAgIC8vIEJ1aWxkIG5vcm1hbGl6ZWQgcmVzcG9uc2VcclxuICAgICAgbWFwKChmdWxsUmVjb3JkKSA9PiAoe1xyXG4gICAgICAgIC4uLnJlc3BvbnNlLFxyXG4gICAgICAgIFJlc3VsdDogZnVsbFJlY29yZFxyXG4gICAgICB9KSksXHJcblxyXG4gICAgICAvLyBIYW5kbGUgZXJyb3JzICh0aW1lb3V0LCBmZXRjaCBmYWlsdXJlLCBldGMuKVxyXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgIGlmIChlcnJvci5tZXNzYWdlID09PSAnT3BlcmF0aW9uIHRpbWVkIG91dCcpIHtcclxuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxyXG4gICAgICAgICAgICAoKSA9PlxyXG4gICAgICAgICAgICAgIG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICAgICdPcGVyYXRpb24gdGltZWQgb3V0LiBUaGUgb3BlcmF0aW9uIG1heSBzdGlsbCBjb21wbGV0ZSBpbiB0aGUgYmFja2dyb3VuZC4gUGxlYXNlIHJlZnJlc2ggdG8gc2VlIHRoZSByZXN1bHQuJ1xyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaCBmdWxsIHJlY29yZCBmcm9tIENSVUQgc2VydmljZVxyXG4gICAqIEBwYXJhbSBvYmplY3ROYW1lIC0gRW50aXR5L1RhYmxlIG5hbWVcclxuICAgKiBAcGFyYW0gcmVjb3JkSWQgLSBSZWNvcmQgSUQgdG8gZmV0Y2hcclxuICAgKiBAcGFyYW0gcHJpbWFyeUtleUZpZWxkIC0gUHJpbWFyeSBrZXkgZmllbGQgbmFtZSAoZGVmYXVsdHMgdG8gJ0lkJylcclxuICAgKi9cclxuICBwcml2YXRlIGZldGNoRnVsbFJlY29yZChvYmplY3ROYW1lOiBzdHJpbmcsIHJlY29yZElkOiBzdHJpbmcsIHByaW1hcnlLZXlGaWVsZCA9ICdJZCcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5wb3N0VG9TZXJ2aWNlKFxyXG4gICAgICBBUElTZXJ2aWNlcy5jcnVkU2VydmljZSxcclxuICAgICAgQVBJLlF1ZXJpZXNTZWxlY3QsXHJcbiAgICAgIHtcclxuICAgICAgICBFbnRpdHlOYW1lOiBvYmplY3ROYW1lLFxyXG4gICAgICAgIFJlc3VsdEZpZWxkX0FwcGZpZWxkSWRzOiBbJyonXSxcclxuICAgICAgICB3aGVyZUNsYXVzZToge1xyXG4gICAgICAgICAgZmlsdGVyczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZmllbGROYW1lOiBwcmltYXJ5S2V5RmllbGQsIC8vIFVzZSBkeW5hbWljIHByaW1hcnkga2V5IGZpZWxkXHJcbiAgICAgICAgICAgICAgb3BlcmF0b3I6IFJlbGF0aW9uYWxPcGVyYXRvci5FcXVhbFRvLFxyXG4gICAgICAgICAgICAgIHZhbHVlOiByZWNvcmRJZCxcclxuICAgICAgICAgICAgICB2YWx1ZVR5cGU6IEZpbHRlclZhbHVlVHlwZS5MaXRlcmFsLFxyXG4gICAgICAgICAgICAgIGNvbmp1bmN0aW9uOiBDb25qdWN0aW9uQ2xhdXNlLkFORCxcclxuICAgICAgICAgICAgICBncm91cElkOiAwLFxyXG4gICAgICAgICAgICAgIHNlcXVlbmNlOiAxXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIF1cclxuICAgICAgICB9LFxyXG4gICAgICB9KS5waXBlKFxyXG4gICAgICAgIG1hcCgoc2VsZWN0UmVzcG9uc2U6IENvbW1vbkFwaVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0UmVzcG9uc2U/LlJlc3VsdCAmJiBzZWxlY3RSZXNwb25zZT8uUmVzdWx0Py5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdFJlc3BvbnNlLlJlc3VsdFswXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVjb3JkIG5vdCBmb3VuZCBhZnRlciBvcGVyYXRpb24nKTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIHRoZSBmb3JtSU8gY29tcG9uZW50cyBmb3IgdGhlIGdpdmVuIGFwcE9iamVjdElkIGFuZCB0eXBlLlxyXG4gICAqIEBwYXJhbSBhcHBPYmplY3RJZCAtIFRoZSBJRCBvZiB0aGUgYXBwIG9iamVjdC5cclxuICAgKiBAcGFyYW0gdHlwZSAtIFRoZSB0eXBlIG9mIHRoZSBjb21wb25lbnRzIHRvIHJldHJpZXZlLiBDYW4gYmUgZWl0aGVyICdDb21tb25GaWx0ZXInIG9yICdCdWxrVXBkYXRlJ1xyXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBBZGRpdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHRoZSBBUEkgY2FsbC5cclxuICAgKiBAcmV0dXJucyBUaGUgZm9ybUlPIGNvbXBvbmVudHMgaW4gdGhlIHJlc3BvbnNlIGJvZHkuXHJcbiAgICovXHJcbiAgYnVpbGRGb3JtSU9Db21wb25lbnRzKGFwcE9iamVjdElkOiBzdHJpbmcsIHR5cGU6IEJ1aWxkRm9ybUNvbXBvbmVudFR5cGUsIHBhcmFtcz86IGFueSk6IE9ic2VydmFibGU8Q29tbW9uQXBpUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBnZXRIZWFkZXJzKCk7XHJcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLmdldChcclxuICAgICAgYCR7QVBJLkJ1aWxkRm9ybUlPQ29tcG9uZW50c30/YXBwT2JqZWN0SWQ9JHthcHBPYmplY3RJZH0mVHlwZT0ke3R5cGV9YCxcclxuICAgICAgcGFyYW1zLFxyXG4gICAgICBoZWFkZXJzXHJcbiAgICApO1xyXG4gIH1cclxufSJdfQ==
|