ms-data-grid 0.0.91 → 0.0.93

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.
@@ -0,0 +1,145 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class RowActionService {
4
+ constructor() {
5
+ this.STATUS_SETS = {
6
+ EDIT_BLOCKED: [
7
+ 'expired', 'closed', 'Assigning Stop', 'Evaluation Start',
8
+ 'Evaluation Stop', 'Completed', 'approved', 'rejected',
9
+ 'partially', 'accepted'
10
+ ],
11
+ ARCHIVE_BLOCKED: [
12
+ 'approved', 'partially', 'Assigning Start',
13
+ 'Completed', 'Evaluation Start'
14
+ ],
15
+ DISPOSED: ['scrap', 'trashed', 'disposed'],
16
+ SEPARATED: ['termination', 'resignation', 'retirement', 'separated'],
17
+ UNAVAILABLE: ['unavailable', 'unAvailable']
18
+ };
19
+ this.ACTION_ALIASES = {
20
+ accept: 'view',
21
+ achive: 'unactive'
22
+ };
23
+ this.rules = {
24
+ assigningstart: (r) => r.status === 'To be start Assigning' && !r.isDeleted,
25
+ assigningstop: (r) => r.status === 'Assigning Start' && !r.isDeleted,
26
+ evaluationstart: (r) => r.status === 'Assigning Stop' && !r.isDeleted,
27
+ completed: (r) => r.status === 'Evaluation Start' && !r.isDeleted,
28
+ archive: (r) => this.canArchiveOrDelete(r),
29
+ unactive: (r) => this.canArchiveOrDelete(r),
30
+ delete: (r) => this.canArchiveOrDelete(r),
31
+ unarchive: (r) => r.isDeleted && r.availStatus !== 'disposed',
32
+ active: (r) => r.isDeleted && r.availStatus !== 'disposed',
33
+ link: (r) => !this.STATUS_SETS.UNAVAILABLE.includes(r.status) &&
34
+ !r.isDeleted &&
35
+ r.availStatus !== 'disposed' &&
36
+ r.status !== 'linked',
37
+ unlink: (r, ctx) => ctx.showUnLink === true && r.status === 'linked',
38
+ rejoin: (r) => this.STATUS_SETS.SEPARATED.includes(r.accountStatus),
39
+ settlementinfo: (r) => this.STATUS_SETS.SEPARATED.includes(r.accountStatus),
40
+ assign: (r) => r.status !== 'assigned',
41
+ edit: (r, ctx) => this.canEdit(r, ctx),
42
+ trash: (r) => !this.STATUS_SETS.DISPOSED.includes(r.availStatus),
43
+ scrap: (r) => !this.STATUS_SETS.DISPOSED.includes(r.availStatus),
44
+ retain: (r) => !this.STATUS_SETS.DISPOSED.includes(r.availStatus),
45
+ defaultgrade: (r) => r.isCustomGrade !== 'Active',
46
+ subscribe: (r, ctx) => !r.assignedToIds.includes(ctx.currentUserId),
47
+ unsubscribe: (r, ctx) => r.assignedToIds.includes(ctx.currentUserId),
48
+ changestatus: (r) => !r.isDeleted,
49
+ download: (r) => r.offerLetter !== null,
50
+ view: (r) => r.offerLetter !== null
51
+ };
52
+ }
53
+ normalizeRow(element) {
54
+ return {
55
+ isDeleted: element.is_deleted === true || element.is_deleted === 'true',
56
+ status: element.status || '',
57
+ availStatus: element.availStatus || '',
58
+ accountStatus: (element.account_status || '').toLowerCase(),
59
+ assigneeCount: element.assignee?.length ?? 0,
60
+ assignedToIds: element.assigned_to?.map((x) => x.id) ?? [],
61
+ settlementCompleted: element.settlement_completed === true,
62
+ finalSettlementCompleted: element.final_settlement_completed === true,
63
+ storeEdit: element.store_edit !== false,
64
+ isOwner: element.is_owner ?? true,
65
+ isCustomGrade: element.is_custom_grade || '',
66
+ parent: element.parent,
67
+ offerLetter: element.offer_letter,
68
+ typename: element.__typename || ''
69
+ };
70
+ }
71
+ normalizeAction(action, ctx) {
72
+ let normalized = this.ACTION_ALIASES[action] || action;
73
+ if (ctx.packageData) {
74
+ if (action === 'unarchive')
75
+ return 'active';
76
+ if (action === 'archive')
77
+ return 'unactive';
78
+ }
79
+ return normalized.toLowerCase();
80
+ }
81
+ canArchiveOrDelete(r) {
82
+ return (!r.isDeleted &&
83
+ !r.settlementCompleted &&
84
+ !r.finalSettlementCompleted &&
85
+ r.availStatus !== 'reserved' &&
86
+ r.assigneeCount === 0 &&
87
+ r.availStatus !== 'disposed' &&
88
+ r.availStatus !== 'maintenance' &&
89
+ r.availStatus !== 'assigned' &&
90
+ !this.STATUS_SETS.ARCHIVE_BLOCKED.includes(r.status) &&
91
+ r.parent !== null);
92
+ }
93
+ canEdit(r, ctx) {
94
+ const isBlocked = this.STATUS_SETS.EDIT_BLOCKED.includes(r.status) ||
95
+ r.isDeleted ||
96
+ !r.storeEdit ||
97
+ r.availStatus === 'disposed' ||
98
+ r.settlementCompleted ||
99
+ r.finalSettlementCompleted;
100
+ if (isBlocked)
101
+ return false;
102
+ if (ctx.tableType === 'BusinessExpenseListing') {
103
+ return true;
104
+ }
105
+ return r.status !== 'accepted' && r.isOwner;
106
+ }
107
+ isActionValid(action, element, ctx = {}) {
108
+ const row = this.normalizeRow(element);
109
+ const normalizedAction = this.normalizeAction(action, ctx);
110
+ const rule = this.rules[normalizedAction];
111
+ if (rule) {
112
+ return rule(row, ctx);
113
+ }
114
+ return row.availStatus !== 'disposed' || row.typename === 'Alert';
115
+ }
116
+ getValidActions(actions, element, ctx = {}) {
117
+ if (!actions?.length)
118
+ return [];
119
+ let validActions = actions.filter(action => this.isActionValid(action, element, ctx));
120
+ if (ctx.tableType === 'recruitmentListing') {
121
+ validActions = this.applyRecruitmentFilters(validActions, element);
122
+ }
123
+ return validActions;
124
+ }
125
+ applyRecruitmentFilters(actions, element) {
126
+ let filtered = [...actions];
127
+ if (element?.status === 'hired' && !element?.is_deleted) {
128
+ filtered = filtered.filter(action => !['changestatus', 'unarchive', 'archive', 'edit'].includes(action));
129
+ }
130
+ if (element?.is_deleted) {
131
+ filtered = filtered.filter(action => action !== 'changestatus');
132
+ }
133
+ if (element?.offer_letter === null) {
134
+ filtered = filtered.filter(action => !['download', 'view'].includes(action));
135
+ }
136
+ return filtered;
137
+ }
138
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RowActionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
139
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RowActionService, providedIn: 'root' }); }
140
+ }
141
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RowActionService, decorators: [{
142
+ type: Injectable,
143
+ args: [{ providedIn: 'root' }]
144
+ }] });
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LWFjdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1ncmlkL3NyYy9saWIvc2VydmljZXMvcm93LWFjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBNkIzQyxNQUFNLE9BQU8sZ0JBQWdCO0lBRDdCO1FBR21CLGdCQUFXLEdBQUc7WUFDN0IsWUFBWSxFQUFFO2dCQUNaLFNBQVMsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCO2dCQUN6RCxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFVBQVU7Z0JBQ3RELFdBQVcsRUFBRSxVQUFVO2FBQ3hCO1lBQ0QsZUFBZSxFQUFFO2dCQUNmLFVBQVUsRUFBRSxXQUFXLEVBQUUsaUJBQWlCO2dCQUMxQyxXQUFXLEVBQUUsa0JBQWtCO2FBQ2hDO1lBQ0QsUUFBUSxFQUFFLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUM7WUFDMUMsU0FBUyxFQUFFLENBQUMsYUFBYSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDO1lBQ3BFLFdBQVcsRUFBRSxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUM7U0FDbkMsQ0FBQztRQUVNLG1CQUFjLEdBQTJCO1lBQ3hELE1BQU0sRUFBRSxNQUFNO1lBQ2QsTUFBTSxFQUFFLFVBQVU7U0FDbkIsQ0FBQztRQUVlLFVBQUssR0FBK0I7WUFDbkQsY0FBYyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLHVCQUF1QixJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDM0UsYUFBYSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLGlCQUFpQixJQUFJLENBQUMsQ0FBQyxDQUFDLFNB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SyxvQkFBb0IsRUFBRTtZQUMxQyxZQUFZLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNwRTtRQUVELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxPQUFpQixFQUFFLE9BQVk7UUFDN0QsSUFBSSxRQUFRLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBRTVCLElBQUksT0FBTyxFQUFFLE1BQU0sS0FBSyxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFO1lBQ3ZELFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQ2xDLENBQUMsQ0FBQyxjQUFjLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQ25FLENBQUM7U0FDSDtRQUVELElBQUksT0FBTyxFQUFFLFVBQVUsRUFBRTtZQUN2QixRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sS0FBSyxjQUFjLENBQUMsQ0FBQztTQUNqRTtRQUVELElBQUksT0FBTyxFQUFFLFlBQVksS0FBSyxJQUFJLEVBQUU7WUFDbEMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FDbEMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQ3ZDLENBQUM7U0FDSDtRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7K0dBNUtVLGdCQUFnQjttSEFBaEIsZ0JBQWdCLGNBREgsTUFBTTs7NEZBQ25CLGdCQUFnQjtrQkFENUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkNvbnRleHQge1xyXG4gIHRhYmxlVHlwZT86IHN0cmluZztcclxuICBwYWNrYWdlRGF0YT86IGJvb2xlYW47XHJcbiAgc2hvd1VuTGluaz86IGJvb2xlYW47XHJcbiAgY3VycmVudFVzZXJJZD86IHN0cmluZyB8IG51bWJlcjtcclxufVxyXG5cclxuaW50ZXJmYWNlIE5vcm1hbGl6ZWRSb3cge1xyXG4gIGlzRGVsZXRlZDogYm9vbGVhbjtcclxuICBzdGF0dXM6IHN0cmluZztcclxuICBhdmFpbFN0YXR1czogc3RyaW5nO1xyXG4gIGFjY291bnRTdGF0dXM6IHN0cmluZztcclxuICBhc3NpZ25lZUNvdW50OiBudW1iZXI7XHJcbiAgYXNzaWduZWRUb0lkczogKHN0cmluZyB8IG51bWJlcilbXTtcclxuICBzZXR0bGVtZW50Q29tcGxldGVkOiBib29sZWFuO1xyXG4gIGZpbmFsU2V0dGxlbWVudENvbXBsZXRlZDogYm9vbGVhbjtcclxuICBzdG9yZUVkaXQ6IGJvb2xlYW47XHJcbiAgaXNPd25lcjogYm9vbGVhbjtcclxuICBpc0N1c3RvbUdyYWRlOiBzdHJpbmc7XHJcbiAgcGFyZW50OiBhbnk7XHJcbiAgb2ZmZXJMZXR0ZXI6IGFueTtcclxuICB0eXBlbmFtZTogc3RyaW5nO1xyXG59XHJcblxyXG50eXBlIEFjdGlvblJ1bGUgPSAocm93OiBOb3JtYWxpemVkUm93LCBjdHg6IEFjdGlvbkNvbnRleHQpID0+IGJvb2xlYW47XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgUm93QWN0aW9uU2VydmljZSB7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgU1RBVFVTX1NFVFMgPSB7XHJcbiAgICBFRElUX0JMT0NLRUQ6IFtcclxuICAgICAgJ2V4cGlyZWQnLCAnY2xvc2VkJywgJ0Fzc2lnbmluZyBTdG9wJywgJ0V2YWx1YXRpb24gU3RhcnQnLFxyXG4gICAgICAnRXZhbHVhdGlvbiBTdG9wJywgJ0NvbXBsZXRlZCcsICdhcHByb3ZlZCcsICdyZWplY3RlZCcsXHJcbiAgICAgICdwYXJ0aWFsbHknLCAnYWNjZXB0ZWQnXHJcbiAgICBdLFxyXG4gICAgQVJDSElWRV9CTE9DS0VEOiBbXHJcbiAgICAgICdhcHByb3ZlZCcsICdwYXJ0aWFsbHknLCAnQXNzaWduaW5nIFN0YXJ0JyxcclxuICAgICAgJ0NvbXBsZXRlZCcsICdFdmFsdWF0aW9uIFN0YXJ0J1xyXG4gICAgXSxcclxuICAgIERJU1BPU0VEOiBbJ3NjcmFwJywgJ3RyYXNoZWQnLCAnZGlzcG9zZWQnXSxcclxuICAgIFNFUEFSQVRFRDogWyd0ZXJtaW5hdGlvbicsICdyZXNpZ25hdGlvbicsICdyZXRpcmVtZW50JywgJ3NlcGFyYXRlZCddLFxyXG4gICAgVU5BVkFJTEFCTEU6IFsndW5hdmFpbGFibGUnLCAndW5BdmFpbGFibGUnXVxyXG4gIH0gYXMgY29uc3Q7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgQUNUSU9OX0FMSUFTRVM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XHJcbiAgICBhY2NlcHQ6ICd2aWV3JyxcclxuICAgIGFjaGl2ZTogJ3VuYWN0aXZlJ1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgcnVsZXM6IFJlY29yZDxzdHJpbmcsIEFjdGlvblJ1bGU+ID0ge1xyXG4gICAgYXNzaWduaW5nc3RhcnQ6IChyKSA9PiByLnN0YXR1cyA9PT0gJ1RvIGJlIHN0YXJ0IEFzc2lnbmluZycgJiYgIXIuaXNEZWxldGVkLFxyXG4gICAgYXNzaWduaW5nc3RvcDogKHIpID0+IHIuc3RhdHVzID09PSAnQXNzaWduaW5nIFN0YXJ0JyAmJiAhci5pc0RlbGV0ZWQsXHJcbiAgICBldmFsdWF0aW9uc3RhcnQ6IChyKSA9PiByLnN0YXR1cyA9PT0gJ0Fzc2lnbmluZyBTdG9wJyAmJiAhci5pc0RlbGV0ZWQsXHJcbiAgICBjb21wbGV0ZWQ6IChyKSA9PiByLnN0YXR1cyA9PT0gJ0V2YWx1YXRpb24gU3RhcnQnICYmICFyLmlzRGVsZXRlZCxcclxuXHJcbiAgICBhcmNoaXZlOiAocikgPT4gdGhpcy5jYW5BcmNoaXZlT3JEZWxldGUociksXHJcbiAgICB1bmFjdGl2ZTogKHIpID0+IHRoaXMuY2FuQXJjaGl2ZU9yRGVsZXRlKHIpLFxyXG4gICAgZGVsZXRlOiAocikgPT4gdGhpcy5jYW5BcmNoaXZlT3JEZWxldGUociksXHJcblxyXG4gICAgdW5hcmNoaXZlOiAocikgPT4gci5pc0RlbGV0ZWQgJiYgci5hdmFpbFN0YXR1cyAhPT0gJ2Rpc3Bvc2VkJyxcclxuICAgIGFjdGl2ZTogKHIpID0+IHIuaXNEZWxldGVkICYmIHIuYXZhaWxTdGF0dXMgIT09ICdkaXNwb3NlZCcsXHJcblxyXG4gICAgbGluazogKHIpID0+IFxyXG4gICAgICAhdGhpcy5TVEFUVVNfU0VUUy5VTkFWQUlMQUJMRS5pbmNsdWRlcygoci5zdGF0dXMgYXMgYW55KSkgJiZcclxuICAgICAgIXIuaXNEZWxldGVkICYmXHJcbiAgICAgIHIuYXZhaWxTdGF0dXMgIT09ICdkaXNwb3NlZCcgJiZcclxuICAgICAgci5zdGF0dXMgIT09ICdsaW5rZWQnLFxyXG4gICAgdW5saW5rOiAociwgY3R4KSA9PiBjdHguc2hvd1VuTGluayA9PT0gdHJ1ZSAmJiByLnN0YXR1cyA9PT0gJ2xpbmtlZCcsXHJcblxyXG4gICAgcmVqb2luOiAocikgPT4gdGhpcy5TVEFUVVNfU0VUUy5TRVBBUkFURUQuaW5jbHVkZXMoKHIuYWNjb3VudFN0YXR1cyBhcyBhbnkpKSxcclxuICAgIHNldHRsZW1lbnRpbmZvOiAocikgPT4gdGhpcy5TVEFUVVNfU0VUUy5TRVBBUkFURUQuaW5jbHVkZXMoKHIuYWNjb3VudFN0YXR1cyBhcyBhbnkpKSxcclxuXHJcbiAgICBhc3NpZ246IChyKSA9PiByLnN0YXR1cyAhPT0gJ2Fzc2lnbmVkJyxcclxuICAgIGVkaXQ6IChyLCBjdHgpID0+IHRoaXMuY2FuRWRpdChyLCBjdHgpLFxyXG5cclxuICAgIHRyYXNoOiAocikgPT4gIXRoaXMuU1RBVFVTX1NFVFMuRElTUE9TRUQuaW5jbHVkZXMoKHIuYXZhaWxTdGF0dXMgYXMgYW55KSksXHJcbiAgICBzY3JhcDogKHIpID0+ICF0aGlzLlNUQVRVU19TRVRTLkRJU1BPU0VELmluY2x1ZGVzKChyLmF2YWlsU3RhdHVzIGFzIGFueSkpLFxyXG4gICAgcmV0YWluOiAocikgPT4gIXRoaXMuU1RBVFVTX1NFVFMuRElTUE9TRUQuaW5jbHVkZXMoKHIuYXZhaWxTdGF0dXMgYXMgYW55KSksXHJcblxyXG4gICAgZGVmYXVsdGdyYWRlOiAocikgPT4gci5pc0N1c3RvbUdyYWRlICE9PSAnQWN0aXZlJyxcclxuXHJcbiAgICBzdWJzY3JpYmU6IChyLCBjdHgpID0+ICFyLmFzc2lnbmVkVG9JZHMuaW5jbHVkZXMoKGN0eC5jdXJyZW50VXNlcklkIGFzIGFueSkpLFxyXG4gICAgdW5zdWJzY3JpYmU6IChyLCBjdHgpID0+IHIuYXNzaWduZWRUb0lkcy5pbmNsdWRlcygoY3R4LmN1cnJlbnRVc2VySWQgYXMgYW55KSksXHJcblxyXG4gICAgY2hhbmdlc3RhdHVzOiAocikgPT4gIXIuaXNEZWxldGVkLFxyXG5cclxuICAgIGRvd25sb2FkOiAocikgPT4gci5vZmZlckxldHRlciAhPT0gbnVsbCxcclxuICAgIHZpZXc6IChyKSA9PiByLm9mZmVyTGV0dGVyICE9PSBudWxsXHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBub3JtYWxpemVSb3coZWxlbWVudDogYW55KTogTm9ybWFsaXplZFJvdyB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpc0RlbGV0ZWQ6IGVsZW1lbnQuaXNfZGVsZXRlZCA9PT0gdHJ1ZSB8fCBlbGVtZW50LmlzX2RlbGV0ZWQgPT09ICd0cnVlJyxcclxuICAgICAgc3RhdHVzOiBlbGVtZW50LnN0YXR1cyB8fCAnJyxcclxuICAgICAgYXZhaWxTdGF0dXM6IGVsZW1lbnQuYXZhaWxTdGF0dXMgfHwgJycsXHJcbiAgICAgIGFjY291bnRTdGF0dXM6IChlbGVtZW50LmFjY291bnRfc3RhdHVzIHx8ICcnKS50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICBhc3NpZ25lZUNvdW50OiBlbGVtZW50LmFzc2lnbmVlPy5sZW5ndGggPz8gMCxcclxuICAgICAgYXNzaWduZWRUb0lkczogZWxlbWVudC5hc3NpZ25lZF90bz8ubWFwKCh4OiBhbnkpID0+IHguaWQpID8/IFtdLFxyXG4gICAgICBzZXR0bGVtZW50Q29tcGxldGVkOiBlbGVtZW50LnNldHRsZW1lbnRfY29tcGxldGVkID09PSB0cnVlLFxyXG4gICAgICBmaW5hbFNldHRsZW1lbnRDb21wbGV0ZWQ6IGVsZW1lbnQuZmluYWxfc2V0dGxlbWVudF9jb21wbGV0ZWQgPT09IHRydWUsXHJcbiAgICAgIHN0b3JlRWRpdDogZWxlbWVudC5zdG9yZV9lZGl0ICE9PSBmYWxzZSxcclxuICAgICAgaXNPd25lcjogZWxlbWVudC5pc19vd25lciA/PyB0cnVlLFxyXG4gICAgICBpc0N1c3RvbUdyYWRlOiBlbGVtZW50LmlzX2N1c3RvbV9ncmFkZSB8fCAnJyxcclxuICAgICAgcGFyZW50OiBlbGVtZW50LnBhcmVudCxcclxuICAgICAgb2ZmZXJMZXR0ZXI6IGVsZW1lbnQub2ZmZXJfbGV0dGVyLFxyXG4gICAgICB0eXBlbmFtZTogZWxlbWVudC5fX3R5cGVuYW1lIHx8ICcnXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBub3JtYWxpemVBY3Rpb24oYWN0aW9uOiBzdHJpbmcsIGN0eDogQWN0aW9uQ29udGV4dCk6IHN0cmluZyB7XHJcbiAgICBsZXQgbm9ybWFsaXplZCA9IHRoaXMuQUNUSU9OX0FMSUFTRVNbYWN0aW9uXSB8fCBhY3Rpb247XHJcblxyXG4gICAgaWYgKGN0eC5wYWNrYWdlRGF0YSkge1xyXG4gICAgICBpZiAoYWN0aW9uID09PSAndW5hcmNoaXZlJykgcmV0dXJuICdhY3RpdmUnO1xyXG4gICAgICBpZiAoYWN0aW9uID09PSAnYXJjaGl2ZScpIHJldHVybiAndW5hY3RpdmUnO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBub3JtYWxpemVkLnRvTG93ZXJDYXNlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbkFyY2hpdmVPckRlbGV0ZShyOiBOb3JtYWxpemVkUm93KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAhci5pc0RlbGV0ZWQgJiZcclxuICAgICAgIXIuc2V0dGxlbWVudENvbXBsZXRlZCAmJlxyXG4gICAgICAhci5maW5hbFNldHRsZW1lbnRDb21wbGV0ZWQgJiZcclxuICAgICAgci5hdmFpbFN0YXR1cyAhPT0gJ3Jlc2VydmVkJyAmJlxyXG4gICAgICByLmFzc2lnbmVlQ291bnQgPT09IDAgJiZcclxuICAgICAgci5hdmFpbFN0YXR1cyAhPT0gJ2Rpc3Bvc2VkJyAmJlxyXG4gICAgICByLmF2YWlsU3RhdHVzICE9PSAnbWFpbnRlbmFuY2UnICYmXHJcbiAgICAgIHIuYXZhaWxTdGF0dXMgIT09ICdhc3NpZ25lZCcgJiZcclxuICAgICAgIXRoaXMuU1RBVFVTX1NFVFMuQVJDSElWRV9CTE9DS0VELmluY2x1ZGVzKChyLnN0YXR1cyBhcyBhbnkpKSAmJlxyXG4gICAgICByLnBhcmVudCAhPT0gbnVsbFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FuRWRpdChyOiBOb3JtYWxpemVkUm93LCBjdHg6IEFjdGlvbkNvbnRleHQpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGlzQmxvY2tlZCA9IFxyXG4gICAgICB0aGlzLlNUQVRVU19TRVRTLkVESVRfQkxPQ0tFRC5pbmNsdWRlcygoci5zdGF0dXMgYXMgYW55KSkgfHxcclxuICAgICAgci5pc0RlbGV0ZWQgfHxcclxuICAgICAgIXIuc3RvcmVFZGl0IHx8XHJcbiAgICAgIHIuYXZhaWxTdGF0dXMgPT09ICdkaXNwb3NlZCcgfHxcclxuICAgICAgci5zZXR0bGVtZW50Q29tcGxldGVkIHx8XHJcbiAgICAgIHIuZmluYWxTZXR0bGVtZW50Q29tcGxldGVkO1xyXG5cclxuICAgIGlmIChpc0Jsb2NrZWQpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAoY3R4LnRhYmxlVHlwZSA9PT0gJ0J1c2luZXNzRXhwZW5zZUxpc3RpbmcnKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByLnN0YXR1cyAhPT0gJ2FjY2VwdGVkJyAmJiByLmlzT3duZXI7XHJcbiAgfVxyXG5cclxuICBpc0FjdGlvblZhbGlkKGFjdGlvbjogc3RyaW5nLCBlbGVtZW50OiBhbnksIGN0eDogQWN0aW9uQ29udGV4dCA9IHt9KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCByb3cgPSB0aGlzLm5vcm1hbGl6ZVJvdyhlbGVtZW50KTtcclxuICAgIGNvbnN0IG5vcm1hbGl6ZWRBY3Rpb24gPSB0aGlzLm5vcm1hbGl6ZUFjdGlvbihhY3Rpb24sIGN0eCk7XHJcbiAgICBjb25zdCBydWxlID0gdGhpcy5ydWxlc1tub3JtYWxpemVkQWN0aW9uXTtcclxuXHJcbiAgICBpZiAocnVsZSkge1xyXG4gICAgICByZXR1cm4gcnVsZShyb3csIGN0eCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJvdy5hdmFpbFN0YXR1cyAhPT0gJ2Rpc3Bvc2VkJyB8fCByb3cudHlwZW5hbWUgPT09ICdBbGVydCc7XHJcbiAgfVxyXG5cclxuICBnZXRWYWxpZEFjdGlvbnMoYWN0aW9uczogc3RyaW5nW10sIGVsZW1lbnQ6IGFueSwgY3R4OiBBY3Rpb25Db250ZXh0ID0ge30pOiBzdHJpbmdbXSB7XHJcbiAgICBpZiAoIWFjdGlvbnM/Lmxlbmd0aCkgcmV0dXJuIFtdO1xyXG4gICAgXHJcbiAgICBsZXQgdmFsaWRBY3Rpb25zID0gYWN0aW9ucy5maWx0ZXIoYWN0aW9uID0+IFxyXG4gICAgICB0aGlzLmlzQWN0aW9uVmFsaWQoYWN0aW9uLCBlbGVtZW50LCBjdHgpXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChjdHgudGFibGVUeXBlID09PSAncmVjcnVpdG1lbnRMaXN0aW5nJykge1xyXG4gICAgICB2YWxpZEFjdGlvbnMgPSB0aGlzLmFwcGx5UmVjcnVpdG1lbnRGaWx0ZXJzKHZhbGlkQWN0aW9ucywgZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHZhbGlkQWN0aW9ucztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlSZWNydWl0bWVudEZpbHRlcnMoYWN0aW9uczogc3RyaW5nW10sIGVsZW1lbnQ6IGFueSk6IHN0cmluZ1tdIHtcclxuICAgIGxldCBmaWx0ZXJlZCA9IFsuLi5hY3Rpb25zXTtcclxuXHJcbiAgICBpZiAoZWxlbWVudD8uc3RhdHVzID09PSAnaGlyZWQnICYmICFlbGVtZW50Py5pc19kZWxldGVkKSB7XHJcbiAgICAgIGZpbHRlcmVkID0gZmlsdGVyZWQuZmlsdGVyKGFjdGlvbiA9PiBcclxuICAgICAgICAhWydjaGFuZ2VzdGF0dXMnLCAndW5hcmNoaXZlJywgJ2FyY2hpdmUnLCAnZWRpdCddLmluY2x1ZGVzKGFjdGlvbilcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZWxlbWVudD8uaXNfZGVsZXRlZCkge1xyXG4gICAgICBmaWx0ZXJlZCA9IGZpbHRlcmVkLmZpbHRlcihhY3Rpb24gPT4gYWN0aW9uICE9PSAnY2hhbmdlc3RhdHVzJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGVsZW1lbnQ/Lm9mZmVyX2xldHRlciA9PT0gbnVsbCkge1xyXG4gICAgICBmaWx0ZXJlZCA9IGZpbHRlcmVkLmZpbHRlcihhY3Rpb24gPT4gXHJcbiAgICAgICAgIVsnZG93bmxvYWQnLCAndmlldyddLmluY2x1ZGVzKGFjdGlvbilcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmlsdGVyZWQ7XHJcbiAgfVxyXG59Il19