cloud-ide-core 1.0.1 → 1.0.4
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/README.md +49 -10
- package/fesm2022/{cloud-ide-core-general-master-type.component-B26auJZw.mjs → cloud-ide-core-general-master-type.component-OPaXxAXW.mjs} +133 -135
- package/fesm2022/{cloud-ide-core-general-master-type.component-B26auJZw.mjs.map → cloud-ide-core-general-master-type.component-OPaXxAXW.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-core-general-master-type.service-Ab64Jjps.mjs → cloud-ide-core-general-master-type.service-8JWTVijZ.mjs} +7 -7
- package/fesm2022/{cloud-ide-core-general-master-type.service-Ab64Jjps.mjs.map → cloud-ide-core-general-master-type.service-8JWTVijZ.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-core-general-master.component-B6llTVoV.mjs → cloud-ide-core-general-master.component-BEHWqXvF.mjs} +153 -155
- package/fesm2022/{cloud-ide-core-general-master.component-B6llTVoV.mjs.map → cloud-ide-core-general-master.component-BEHWqXvF.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-core-page-form.component-CaEca3mB.mjs → cloud-ide-core-page-form.component-BatglsBU.mjs} +26 -26
- package/fesm2022/{cloud-ide-core-page-form.component-CaEca3mB.mjs.map → cloud-ide-core-page-form.component-BatglsBU.mjs.map} +1 -1
- package/fesm2022/cloud-ide-core.mjs +5089 -1116
- package/fesm2022/cloud-ide-core.mjs.map +1 -1
- package/index.d.ts +2111 -3
- package/package.json +3 -5
- package/esm2022/cloud-ide-core.mjs +0 -5
- package/esm2022/lib/cloud-ide-core.component.mjs +0 -19
- package/esm2022/lib/cloud-ide-core.routes.mjs +0 -137
- package/esm2022/lib/cloud-ide-core.service.mjs +0 -14
- package/esm2022/lib/core/department-management/components/department-list/department-list.component.mjs +0 -768
- package/esm2022/lib/core/department-management/index.mjs +0 -5
- package/esm2022/lib/core/department-management/services/department-management.service.mjs +0 -187
- package/esm2022/lib/core/designation-management/components/designation-list/designation-list.component.mjs +0 -1122
- package/esm2022/lib/core/designation-management/index.mjs +0 -5
- package/esm2022/lib/core/designation-management/services/designation-management.service.mjs +0 -194
- package/esm2022/lib/core/general-master-management/components/general-master/general-master.component.mjs +0 -738
- package/esm2022/lib/core/general-master-management/components/general-master-type/general-master-type.component.mjs +0 -608
- package/esm2022/lib/core/general-master-management/services/general-master-type.service.mjs +0 -203
- package/esm2022/lib/core/general-master-management/services/general-master.service.mjs +0 -166
- package/esm2022/lib/core/grade-level-management/components/grade-level-list/grade-level-list.component.mjs +0 -794
- package/esm2022/lib/core/grade-level-management/index.mjs +0 -5
- package/esm2022/lib/core/grade-level-management/services/grade-level-management.service.mjs +0 -172
- package/esm2022/lib/core/menu-management/components/menu-list/menu-list.component.mjs +0 -1135
- package/esm2022/lib/core/menu-management/index.mjs +0 -10
- package/esm2022/lib/core/menu-management/interfaces/menu-item.interface.mjs +0 -11
- package/esm2022/lib/core/menu-management/mock-data/menu-items.json +0 -311
- package/esm2022/lib/core/menu-management/services/menu-management.service.mjs +0 -230
- package/esm2022/lib/core/page-management/components/page-controls/page-controls.component.mjs +0 -483
- package/esm2022/lib/core/page-management/components/page-form/page-form.component.mjs +0 -212
- package/esm2022/lib/core/page-management/components/page-list/page-list.component.mjs +0 -393
- package/esm2022/lib/core/page-management/components/page-theme/page-theme.component.mjs +0 -767
- package/esm2022/lib/core/page-management/index.mjs +0 -10
- package/esm2022/lib/core/page-management/services/page-controls.service.mjs +0 -136
- package/esm2022/lib/core/page-management/services/page-management.service.mjs +0 -98
- package/esm2022/lib/core/page-management/services/page-theme.service.mjs +0 -107
- package/esm2022/public-api.mjs +0 -17
- package/lib/cloud-ide-core.component.d.ts +0 -5
- package/lib/cloud-ide-core.routes.d.ts +0 -2
- package/lib/cloud-ide-core.service.d.ts +0 -6
- package/lib/core/department-management/components/department-list/department-list.component.d.ts +0 -178
- package/lib/core/department-management/index.d.ts +0 -2
- package/lib/core/department-management/services/department-management.service.d.ts +0 -68
- package/lib/core/designation-management/components/designation-list/designation-list.component.d.ts +0 -242
- package/lib/core/designation-management/index.d.ts +0 -2
- package/lib/core/designation-management/services/designation-management.service.d.ts +0 -69
- package/lib/core/general-master-management/components/general-master/general-master.component.d.ts +0 -167
- package/lib/core/general-master-management/components/general-master-type/general-master-type.component.d.ts +0 -129
- package/lib/core/general-master-management/services/general-master-type.service.d.ts +0 -75
- package/lib/core/general-master-management/services/general-master.service.d.ts +0 -62
- package/lib/core/grade-level-management/components/grade-level-list/grade-level-list.component.d.ts +0 -199
- package/lib/core/grade-level-management/index.d.ts +0 -2
- package/lib/core/grade-level-management/services/grade-level-management.service.d.ts +0 -69
- package/lib/core/menu-management/components/menu-list/menu-list.component.d.ts +0 -278
- package/lib/core/menu-management/index.d.ts +0 -3
- package/lib/core/menu-management/interfaces/menu-item.interface.d.ts +0 -30
- package/lib/core/menu-management/services/menu-management.service.d.ts +0 -85
- package/lib/core/page-management/components/page-controls/page-controls.component.d.ts +0 -126
- package/lib/core/page-management/components/page-form/page-form.component.d.ts +0 -35
- package/lib/core/page-management/components/page-list/page-list.component.d.ts +0 -91
- package/lib/core/page-management/components/page-theme/page-theme.component.d.ts +0 -189
- package/lib/core/page-management/index.d.ts +0 -6
- package/lib/core/page-management/services/page-controls.service.d.ts +0 -54
- package/lib/core/page-management/services/page-management.service.d.ts +0 -42
- package/lib/core/page-management/services/page-theme.service.d.ts +0 -43
- package/public-api.d.ts +0 -8
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
// Grade Level Management Components
|
|
2
|
-
export * from './components/grade-level-list/grade-level-list.component';
|
|
3
|
-
// Grade Level Management Services
|
|
4
|
-
export * from './services/grade-level-management.service';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbG91ZC1pZGUtY29yZS9zcmMvbGliL2NvcmUvZ3JhZGUtbGV2ZWwtbWFuYWdlbWVudC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQ0FBb0M7QUFDcEMsY0FBYywwREFBMEQsQ0FBQztBQUV6RSxrQ0FBa0M7QUFDbEMsY0FBYywyQ0FBMkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdyYWRlIExldmVsIE1hbmFnZW1lbnQgQ29tcG9uZW50c1xyXG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvZ3JhZGUtbGV2ZWwtbGlzdC9ncmFkZS1sZXZlbC1saXN0LmNvbXBvbmVudCc7XHJcblxyXG4vLyBHcmFkZSBMZXZlbCBNYW5hZ2VtZW50IFNlcnZpY2VzXHJcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvZ3JhZGUtbGV2ZWwtbWFuYWdlbWVudC5zZXJ2aWNlJzsgIl19
|
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { throwError, BehaviorSubject } from 'rxjs';
|
|
3
|
-
import { catchError, tap } from 'rxjs/operators';
|
|
4
|
-
import { cidePath, coreRoutesUrl, generateStringFromObject, hostManagerRoutesUrl } from 'cloud-ide-lms-model';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/common/http";
|
|
7
|
-
export class GradeLevelManagementService {
|
|
8
|
-
constructor(http) {
|
|
9
|
-
this.http = http;
|
|
10
|
-
this.apiUrl = `${coreRoutesUrl?.gradeLevel}`;
|
|
11
|
-
this.gradeLevelListSubject = new BehaviorSubject([]);
|
|
12
|
-
this.gradeLevelList$ = this.gradeLevelListSubject.asObservable();
|
|
13
|
-
console.log('GradeLevelManagementService initialized - using real API');
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Get grade level list from API
|
|
17
|
-
*/
|
|
18
|
-
getGradeLevelList(body) {
|
|
19
|
-
const query = generateStringFromObject(body);
|
|
20
|
-
return this.http?.get(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, query]))
|
|
21
|
-
.pipe(tap((response) => {
|
|
22
|
-
if (response?.success) {
|
|
23
|
-
this.gradeLevelListSubject.next(response?.data || []);
|
|
24
|
-
}
|
|
25
|
-
}), catchError(error => {
|
|
26
|
-
console.error('GradeLevelManagementService API error:', error);
|
|
27
|
-
return this.handleError(error);
|
|
28
|
-
}));
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Get grade level list from cache (if available)
|
|
32
|
-
*/
|
|
33
|
-
getGradeLevelListFromCache() {
|
|
34
|
-
return this.gradeLevelListSubject.value;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Create new grade level
|
|
38
|
-
* POST ${coreRoutesUrl?.gradeLevel} - payload: MGradeLevel, response: gradeLevelInsertUpdateControllerResponse
|
|
39
|
-
*/
|
|
40
|
-
createGradeLevel(gradeLevel) {
|
|
41
|
-
console.log('Creating grade level:', gradeLevel);
|
|
42
|
-
const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel]);
|
|
43
|
-
return this.http.post(url, gradeLevel)
|
|
44
|
-
.pipe(tap((response) => {
|
|
45
|
-
if (response.success) {
|
|
46
|
-
this.refreshGradeLevelList();
|
|
47
|
-
}
|
|
48
|
-
}), catchError(this.handleError));
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Update existing grade level
|
|
52
|
-
* POST ${coreRoutesUrl?.gradeLevel} - payload: MGradeLevel, response: gradeLevelInsertUpdateControllerResponse
|
|
53
|
-
*/
|
|
54
|
-
updateGradeLevel(id, gradeLevel) {
|
|
55
|
-
console.log('Updating grade level:', id, gradeLevel);
|
|
56
|
-
const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel]);
|
|
57
|
-
return this.http.post(url, gradeLevel)
|
|
58
|
-
.pipe(tap((response) => {
|
|
59
|
-
if (response.success) {
|
|
60
|
-
this.refreshGradeLevelList();
|
|
61
|
-
}
|
|
62
|
-
}), catchError(this.handleError));
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Get grade level by ID
|
|
66
|
-
* GET ${coreRoutesUrl?.gradeLevel}/byId/:query - payload: { id }, response: gradeLevelByIdControllerResponse
|
|
67
|
-
*/
|
|
68
|
-
getGradeLevelById(id) {
|
|
69
|
-
console.log('Getting grade level by ID:', id);
|
|
70
|
-
const payload = { id };
|
|
71
|
-
const query = generateStringFromObject(payload);
|
|
72
|
-
const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, 'byId', query]);
|
|
73
|
-
return this.http.get(url)
|
|
74
|
-
.pipe(catchError(this.handleError));
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Delete grade level
|
|
78
|
-
* DELETE ${coreRoutesUrl?.gradeLevel}/:query - payload: { id }, response: { success: boolean }
|
|
79
|
-
*/
|
|
80
|
-
deleteGradeLevel(id) {
|
|
81
|
-
const payload = { id };
|
|
82
|
-
const query = generateStringFromObject(payload);
|
|
83
|
-
const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, query]);
|
|
84
|
-
return this.http.delete(url)
|
|
85
|
-
.pipe(tap((response) => {
|
|
86
|
-
if (response.success) {
|
|
87
|
-
this.refreshGradeLevelList();
|
|
88
|
-
}
|
|
89
|
-
}), catchError(this.handleError));
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Delete multiple grade levels
|
|
93
|
-
*/
|
|
94
|
-
deleteMultipleGradeLevels(ids) {
|
|
95
|
-
console.log('Deleting multiple grade levels:', ids);
|
|
96
|
-
const payload = { ids };
|
|
97
|
-
const query = generateStringFromObject(payload);
|
|
98
|
-
const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, query]);
|
|
99
|
-
return this.http.delete(url)
|
|
100
|
-
.pipe(tap((response) => {
|
|
101
|
-
if (response.success) {
|
|
102
|
-
this.refreshGradeLevelList();
|
|
103
|
-
}
|
|
104
|
-
}), catchError(this.handleError));
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Toggle grade level active status
|
|
108
|
-
*/
|
|
109
|
-
toggleGradeLevelStatus(id) {
|
|
110
|
-
console.log('Toggling grade level status:', id);
|
|
111
|
-
const payload = { id };
|
|
112
|
-
const query = generateStringFromObject(payload);
|
|
113
|
-
const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, query]);
|
|
114
|
-
return this.http.put(url, {})
|
|
115
|
-
.pipe(tap((response) => {
|
|
116
|
-
if (response.success) {
|
|
117
|
-
this.refreshGradeLevelList();
|
|
118
|
-
}
|
|
119
|
-
}), catchError(this.handleError));
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Find grade level by ID
|
|
123
|
-
*/
|
|
124
|
-
findGradeLevelById(id, items = this.gradeLevelListSubject.value) {
|
|
125
|
-
for (const item of items) {
|
|
126
|
-
if (item._id === id) {
|
|
127
|
-
return item;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
return null;
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Refresh grade level list from server
|
|
134
|
-
*/
|
|
135
|
-
refreshGradeLevelList() {
|
|
136
|
-
const defaultBody = {
|
|
137
|
-
pageIndex: 1,
|
|
138
|
-
pageSize: 10
|
|
139
|
-
};
|
|
140
|
-
this.getGradeLevelList(defaultBody).subscribe({
|
|
141
|
-
next: () => {
|
|
142
|
-
console.log('Grade level list refreshed successfully');
|
|
143
|
-
},
|
|
144
|
-
error: (error) => {
|
|
145
|
-
console.error('Error refreshing grade level list:', error);
|
|
146
|
-
}
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* Handle errors
|
|
151
|
-
*/
|
|
152
|
-
handleError(error) {
|
|
153
|
-
let errorMessage = 'An error occurred';
|
|
154
|
-
if (error instanceof Error) {
|
|
155
|
-
errorMessage = error.message;
|
|
156
|
-
}
|
|
157
|
-
else if (typeof error === 'string') {
|
|
158
|
-
errorMessage = error;
|
|
159
|
-
}
|
|
160
|
-
console.error('Grade Level Management Service Error:', errorMessage);
|
|
161
|
-
return throwError(() => new Error(errorMessage));
|
|
162
|
-
}
|
|
163
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: GradeLevelManagementService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
164
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: GradeLevelManagementService, providedIn: 'root' }); }
|
|
165
|
-
}
|
|
166
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: GradeLevelManagementService, decorators: [{
|
|
167
|
-
type: Injectable,
|
|
168
|
-
args: [{
|
|
169
|
-
providedIn: 'root'
|
|
170
|
-
}]
|
|
171
|
-
}], ctorParameters: () => [{ type: i1.HttpClient }] });
|
|
172
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhZGUtbGV2ZWwtbWFuYWdlbWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xvdWQtaWRlLWNvcmUvc3JjL2xpYi9jb3JlL2dyYWRlLWxldmVsLW1hbmFnZW1lbnQvc2VydmljZXMvZ3JhZGUtbGV2ZWwtbWFuYWdlbWVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFjLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQ0wsUUFBUSxFQUNSLGFBQWEsRUFDYix3QkFBd0IsRUFDeEIsb0JBQW9CLEVBS3JCLE1BQU0scUJBQXFCLENBQUM7OztBQUs3QixNQUFNLE9BQU8sMkJBQTJCO0lBS3RDLFlBQW9CLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7UUFKNUIsV0FBTSxHQUFHLEdBQUcsYUFBYSxFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQ3hDLDBCQUFxQixHQUFHLElBQUksZUFBZSxDQUFnQixFQUFFLENBQUMsQ0FBQztRQUNoRSxvQkFBZSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUdqRSxPQUFPLENBQUMsR0FBRyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCLENBQUMsSUFBaUI7UUFDakMsTUFBTSxLQUFLLEdBQUcsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBK0IsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLG9CQUFvQixFQUFFLGFBQWEsRUFBRSxh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O29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgXHJcbiAgY2lkZVBhdGgsIFxyXG4gIGNvcmVSb3V0ZXNVcmwsIFxyXG4gIGdlbmVyYXRlU3RyaW5nRnJvbU9iamVjdCwgXHJcbiAgaG9zdE1hbmFnZXJSb3V0ZXNVcmwsIFxyXG4gIElDb3JlU3lkc2dsLCBcclxuICBncmFkZUxldmVsQ29udHJvbGxlclJlc3BvbnNlLCBcclxuICBncmFkZUxldmVsQnlJZENvbnRyb2xsZXJSZXNwb25zZSxcclxuICBNR3JhZGVMZXZlbFxyXG59IGZyb20gJ2Nsb3VkLWlkZS1sbXMtbW9kZWwnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgR3JhZGVMZXZlbE1hbmFnZW1lbnRTZXJ2aWNlIHtcclxuICBwcml2YXRlIGFwaVVybCA9IGAke2NvcmVSb3V0ZXNVcmw/LmdyYWRlTGV2ZWx9YDtcclxuICBwcml2YXRlIGdyYWRlTGV2ZWxMaXN0U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SUNvcmVTeWRzZ2xbXT4oW10pO1xyXG4gIHB1YmxpYyBncmFkZUxldmVsTGlzdCQgPSB0aGlzLmdyYWRlTGV2ZWxMaXN0U3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7XHJcbiAgICBjb25zb2xlLmxvZygnR3JhZGVMZXZlbE1hbmFnZW1lbnRTZXJ2aWNlIGluaXRpYWxpemVkIC0gdXNpbmcgcmVhbCBBUEknKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBncmFkZSBsZXZlbCBsaXN0IGZyb20gQVBJXHJcbiAgICovXHJcbiAgZ2V0R3JhZGVMZXZlbExpc3QoYm9keTogTUdyYWRlTGV2ZWwpOiBPYnNlcnZhYmxlPGdyYWRlTGV2ZWxDb250cm9sbGVyUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHF1ZXJ5ID0gZ2VuZXJhdGVTdHJpbmdGcm9tT2JqZWN0KGJvZHkpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cD8uZ2V0PGdyYWRlTGV2ZWxDb250cm9sbGVyUmVzcG9uc2U+KGNpZGVQYXRoPy5qb2luKFtob3N0TWFuYWdlclJvdXRlc1VybD8uY2lkZVN1aXRlSG9zdCwgY29yZVJvdXRlc1VybD8ubW9kdWxlLCBjb3JlUm91dGVzVXJsPy5ncmFkZUxldmVsLCBxdWVyeV0pKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YXAoKHJlc3BvbnNlOiBncmFkZUxldmVsQ29udHJvbGxlclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2U/LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5ncmFkZUxldmVsTGlzdFN1YmplY3QubmV4dChyZXNwb25zZT8uZGF0YSB8fCBbXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdHcmFkZUxldmVsTWFuYWdlbWVudFNlcnZpY2UgQVBJIGVycm9yOicsIGVycm9yKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGdyYWRlIGxldmVsIGxpc3QgZnJvbSBjYWNoZSAoaWYgYXZhaWxhYmxlKVxyXG4gICAqL1xyXG4gIGdldEdyYWRlTGV2ZWxMaXN0RnJvbUNhY2hlKCk6IElDb3JlU3lkc2dsW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ3JhZGVMZXZlbExpc3RTdWJqZWN0LnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIG5ldyBncmFkZSBsZXZlbFxyXG4gICAqIFBPU1QgJHtjb3JlUm91dGVzVXJsPy5ncmFkZUxldmVsfSAtIHBheWxvYWQ6IE1HcmFkZUxldmVsLCByZXNwb25zZTogZ3JhZGVMZXZlbEluc2VydFVwZGF0ZUNvbnRyb2xsZXJSZXNwb25zZVxyXG4gICAqL1xyXG4gIGNyZWF0ZUdyYWRlTGV2ZWwoZ3JhZGVMZXZlbDogSUNvcmVTeWRzZ2wpOiBPYnNlcnZhYmxlPGdyYWRlTGV2ZWxDb250cm9sbGVyUmVzcG9uc2U+IHtcclxuICAgIGNvbnNvbGUubG9nKCdDcmVhdGluZyBncmFkZSBsZXZlbDonLCBncmFkZUxldmVsKTtcclxuICAgIGNvbnN0IHVybCA9IGNpZGVQYXRoPy5qb2luKFtob3N0TWFuYWdlclJvdXRlc1VybD8uY2lkZVN1aXRlSG9zdCwgY29yZVJvdXRlc1VybD8ubW9kdWxlLCBjb3JlUm91dGVzVXJsPy5ncmFkZUxldmVsXSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8Z3JhZGVMZXZlbENvbnRyb2xsZXJSZXNwb25zZT4odXJsLCBncmFkZUxldmVsKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YXAoKHJlc3BvbnNlOiBncmFkZUxldmVsQ29udHJvbGxlclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hHcmFkZUxldmVsTGlzdCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBleGlzdGluZyBncmFkZSBsZXZlbFxyXG4gICAqIFBPU1QgJHtjb3JlUm91dGVzVXJsPy5ncmFkZUxldmVsfSAtIHBheWxvYWQ6IE1HcmFkZUxldmVsLCByZXNwb25zZTogZ3JhZGVMZXZlbEluc2VydFVwZGF0ZUNvbnRyb2xsZXJSZXNwb25zZVxyXG4gICAqL1xyXG4gIHVwZGF0ZUdyYWRlTGV2ZWwoaWQ6IHN0cmluZywgZ3JhZGVMZXZlbDogSUNvcmVTeWRzZ2wpOiBPYnNlcnZhYmxlPGdyYWRlTGV2ZWxDb250cm9sbGVyUmVzcG9uc2U+IHtcclxuICAgIGNvbnNvbGUubG9nKCdVcGRhdGluZyBncmFkZSBsZXZlbDonLCBpZCwgZ3JhZGVMZXZlbCk7XHJcbiAgICBjb25zdCB1cmwgPSBjaWRlUGF0aD8uam9pbihbaG9zdE1hbmFnZXJSb3V0ZXNVcmw/LmNpZGVTdWl0ZUhvc3QsIGNvcmVSb3V0ZXNVcmw/Lm1vZHVsZSwgY29yZVJvdXRlc1VybD8uZ3JhZGVMZXZlbF0pO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGdyYWRlTGV2ZWxDb250cm9sbGVyUmVzcG9uc2U+KHVybCwgZ3JhZGVMZXZlbClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFwKChyZXNwb25zZTogZ3JhZGVMZXZlbENvbnRyb2xsZXJSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoR3JhZGVMZXZlbExpc3QoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgZ3JhZGUgbGV2ZWwgYnkgSURcclxuICAgKiBHRVQgJHtjb3JlUm91dGVzVXJsPy5ncmFkZUxldmVsfS9ieUlkLzpxdWVyeSAtIHBheWxvYWQ6IHsgaWQgfSwgcmVzcG9uc2U6IGdyYWRlTGV2ZWxCeUlkQ29udHJvbGxlclJlc3BvbnNlXHJcbiAgICovXHJcbiAgZ2V0R3JhZGVMZXZlbEJ5SWQoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Z3JhZGVMZXZlbEJ5SWRDb250cm9sbGVyUmVzcG9uc2U+IHtcclxuICAgIGNvbnNvbGUubG9nKCdHZXR0aW5nIGdyYWRlIGxldmVsIGJ5IElEOicsIGlkKTtcclxuICAgIGNvbnN0IHBheWxvYWQgPSB7IGlkIH07XHJcbiAgICBjb25zdCBxdWVyeSA9IGdlbmVyYXRlU3RyaW5nRnJvbU9iamVjdChwYXlsb2FkKTtcclxuICAgIGNvbnN0IHVybCA9IGNpZGVQYXRoPy5qb2luKFtob3N0TWFuYWdlclJvdXRlc1VybD8uY2lkZVN1aXRlSG9zdCwgY29yZVJvdXRlc1VybD8ubW9kdWxlLCBjb3JlUm91dGVzVXJsPy5ncmFkZUxldmVsLCAnYnlJZCcsIHF1ZXJ5XSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxncmFkZUxldmVsQnlJZENvbnRyb2xsZXJSZXNwb25zZT4odXJsKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGUgZ3JhZGUgbGV2ZWxcclxuICAgKiBERUxFVEUgJHtjb3JlUm91dGVzVXJsPy5ncmFkZUxldmVsfS86cXVlcnkgLSBwYXlsb2FkOiB7IGlkIH0sIHJlc3BvbnNlOiB7IHN1Y2Nlc3M6IGJvb2xlYW4gfVxyXG4gICAqL1xyXG4gIGRlbGV0ZUdyYWRlTGV2ZWwoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8eyBzdWNjZXNzOiBib29sZWFuOyBtZXNzYWdlPzogc3RyaW5nOyBkYXRhPzogdW5rbm93biB9PiB7XHJcbiAgICBjb25zdCBwYXlsb2FkID0geyBpZCB9O1xyXG4gICAgY29uc3QgcXVlcnkgPSBnZW5lcmF0ZVN0cmluZ0Zyb21PYmplY3QocGF5bG9hZCk7XHJcbiAgICBjb25zdCB1cmwgPSBjaWRlUGF0aD8uam9pbihbaG9zdE1hbmFnZXJSb3V0ZXNVcmw/LmNpZGVTdWl0ZUhvc3QsIGNvcmVSb3V0ZXNVcmw/Lm1vZHVsZSwgY29yZVJvdXRlc1VybD8uZ3JhZGVMZXZlbCwgcXVlcnldKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPHsgc3VjY2VzczogYm9vbGVhbjsgbWVzc2FnZT86IHN0cmluZzsgZGF0YT86IHVua25vd24gfT4odXJsKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YXAoKHJlc3BvbnNlOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IG1lc3NhZ2U/OiBzdHJpbmc7IGRhdGE/OiB1bmtub3duIH0pID0+IHtcclxuICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaEdyYWRlTGV2ZWxMaXN0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlIG11bHRpcGxlIGdyYWRlIGxldmVsc1xyXG4gICAqL1xyXG4gIGRlbGV0ZU11bHRpcGxlR3JhZGVMZXZlbHMoaWRzOiBzdHJpbmdbXSk6IE9ic2VydmFibGU8eyBzdWNjZXNzOiBib29sZWFuOyBtZXNzYWdlPzogc3RyaW5nOyBkYXRhPzogdW5rbm93biB9PiB7XHJcbiAgICBjb25zb2xlLmxvZygnRGVsZXRpbmcgbXVsdGlwbGUgZ3JhZGUgbGV2ZWxzOicsIGlkcyk7XHJcbiAgICBjb25zdCBwYXlsb2FkID0geyBpZHMgfTtcclxuICAgIGNvbnN0IHF1ZXJ5ID0gZ2VuZXJhdGVTdHJpbmdGcm9tT2JqZWN0KHBheWxvYWQpO1xyXG4gICAgY29uc3QgdXJsID0gY2lkZVBhdGg/LmpvaW4oW2hvc3RNYW5hZ2VyUm91dGVzVXJsPy5jaWRlU3VpdGVIb3N0LCBjb3JlUm91dGVzVXJsPy5tb2R1bGUsIGNvcmVSb3V0ZXNVcmw/LmdyYWRlTGV2ZWwsIHF1ZXJ5XSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTx7IHN1Y2Nlc3M6IGJvb2xlYW47IG1lc3NhZ2U/OiBzdHJpbmc7IGRhdGE/OiB1bmtub3duIH0+KHVybClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFwKChyZXNwb25zZTogeyBzdWNjZXNzOiBib29sZWFuOyBtZXNzYWdlPzogc3RyaW5nOyBkYXRhPzogdW5rbm93biB9KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hHcmFkZUxldmVsTGlzdCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRvZ2dsZSBncmFkZSBsZXZlbCBhY3RpdmUgc3RhdHVzXHJcbiAgICovXHJcbiAgdG9nZ2xlR3JhZGVMZXZlbFN0YXR1cyhpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxncmFkZUxldmVsQ29udHJvbGxlclJlc3BvbnNlPiB7XHJcbiAgICBjb25zb2xlLmxvZygnVG9nZ2xpbmcgZ3JhZGUgbGV2ZWwgc3RhdHVzOicsIGlkKTtcclxuICAgIGNvbnN0IHBheWxvYWQgPSB7IGlkIH07XHJcbiAgICBjb25zdCBxdWVyeSA9IGdlbmVyYXRlU3RyaW5nRnJvbU9iamVjdChwYXlsb2FkKTtcclxuICAgIGNvbnN0IHVybCA9IGNpZGVQYXRoPy5qb2luKFtob3N0TWFuYWdlclJvdXRlc1VybD8uY2lkZVN1aXRlSG9zdCwgY29yZVJvdXRlc1VybD8ubW9kdWxlLCBjb3JlUm91dGVzVXJsPy5ncmFkZUxldmVsLCBxdWVyeV0pO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8Z3JhZGVMZXZlbENvbnRyb2xsZXJSZXNwb25zZT4odXJsLCB7fSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFwKChyZXNwb25zZTogZ3JhZGVMZXZlbENvbnRyb2xsZXJSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoR3JhZGVMZXZlbExpc3QoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGaW5kIGdyYWRlIGxldmVsIGJ5IElEXHJcbiAgICovXHJcbiAgZmluZEdyYWRlTGV2ZWxCeUlkKGlkOiBzdHJpbmcsIGl0ZW1zOiBJQ29yZVN5ZHNnbFtdID0gdGhpcy5ncmFkZUxldmVsTGlzdFN1YmplY3QudmFsdWUpOiBJQ29yZVN5ZHNnbCB8IG51bGwge1xyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XHJcbiAgICAgIGlmIChpdGVtLl9pZCA9PT0gaWQpIHtcclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWZyZXNoIGdyYWRlIGxldmVsIGxpc3QgZnJvbSBzZXJ2ZXJcclxuICAgKi9cclxuICBwcml2YXRlIHJlZnJlc2hHcmFkZUxldmVsTGlzdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRlZmF1bHRCb2R5ID0ge1xyXG4gICAgICBwYWdlSW5kZXg6IDEsXHJcbiAgICAgIHBhZ2VTaXplOiAxMFxyXG4gICAgfTtcclxuICAgIHRoaXMuZ2V0R3JhZGVMZXZlbExpc3QoZGVmYXVsdEJvZHkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnR3JhZGUgbGV2ZWwgbGlzdCByZWZyZXNoZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciByZWZyZXNoaW5nIGdyYWRlIGxldmVsIGxpc3Q6JywgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSBlcnJvcnNcclxuICAgKi9cclxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiB1bmtub3duKTogT2JzZXJ2YWJsZTxuZXZlcj4ge1xyXG4gICAgbGV0IGVycm9yTWVzc2FnZSA9ICdBbiBlcnJvciBvY2N1cnJlZCc7XHJcblxyXG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcclxuICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVycm9yID09PSAnc3RyaW5nJykge1xyXG4gICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvcjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmVycm9yKCdHcmFkZSBMZXZlbCBNYW5hZ2VtZW50IFNlcnZpY2UgRXJyb3I6JywgZXJyb3JNZXNzYWdlKTtcclxuICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpKTtcclxuICB9XHJcbn0gIl19
|