cloud-ide-core 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/README.md +49 -10
  2. package/fesm2022/{cloud-ide-core-general-master-type.component-B26auJZw.mjs → cloud-ide-core-general-master-type.component-BNYoP_bS.mjs} +132 -134
  3. package/fesm2022/{cloud-ide-core-general-master-type.component-B26auJZw.mjs.map → cloud-ide-core-general-master-type.component-BNYoP_bS.mjs.map} +1 -1
  4. package/fesm2022/{cloud-ide-core-general-master-type.service-Ab64Jjps.mjs → cloud-ide-core-general-master-type.service-8JWTVijZ.mjs} +7 -7
  5. package/fesm2022/{cloud-ide-core-general-master-type.service-Ab64Jjps.mjs.map → cloud-ide-core-general-master-type.service-8JWTVijZ.mjs.map} +1 -1
  6. package/fesm2022/{cloud-ide-core-general-master.component-B6llTVoV.mjs → cloud-ide-core-general-master.component-CFGGHinl.mjs} +152 -154
  7. package/fesm2022/{cloud-ide-core-general-master.component-B6llTVoV.mjs.map → cloud-ide-core-general-master.component-CFGGHinl.mjs.map} +1 -1
  8. package/fesm2022/{cloud-ide-core-page-form.component-CaEca3mB.mjs → cloud-ide-core-page-form.component-vfE-LkTS.mjs} +25 -25
  9. package/fesm2022/{cloud-ide-core-page-form.component-CaEca3mB.mjs.map → cloud-ide-core-page-form.component-vfE-LkTS.mjs.map} +1 -1
  10. package/fesm2022/cloud-ide-core.mjs +1113 -1110
  11. package/fesm2022/cloud-ide-core.mjs.map +1 -1
  12. package/index.d.ts +1736 -3
  13. package/package.json +3 -5
  14. package/esm2022/cloud-ide-core.mjs +0 -5
  15. package/esm2022/lib/cloud-ide-core.component.mjs +0 -19
  16. package/esm2022/lib/cloud-ide-core.routes.mjs +0 -137
  17. package/esm2022/lib/cloud-ide-core.service.mjs +0 -14
  18. package/esm2022/lib/core/department-management/components/department-list/department-list.component.mjs +0 -768
  19. package/esm2022/lib/core/department-management/index.mjs +0 -5
  20. package/esm2022/lib/core/department-management/services/department-management.service.mjs +0 -187
  21. package/esm2022/lib/core/designation-management/components/designation-list/designation-list.component.mjs +0 -1122
  22. package/esm2022/lib/core/designation-management/index.mjs +0 -5
  23. package/esm2022/lib/core/designation-management/services/designation-management.service.mjs +0 -194
  24. package/esm2022/lib/core/general-master-management/components/general-master/general-master.component.mjs +0 -738
  25. package/esm2022/lib/core/general-master-management/components/general-master-type/general-master-type.component.mjs +0 -608
  26. package/esm2022/lib/core/general-master-management/services/general-master-type.service.mjs +0 -203
  27. package/esm2022/lib/core/general-master-management/services/general-master.service.mjs +0 -166
  28. package/esm2022/lib/core/grade-level-management/components/grade-level-list/grade-level-list.component.mjs +0 -794
  29. package/esm2022/lib/core/grade-level-management/index.mjs +0 -5
  30. package/esm2022/lib/core/grade-level-management/services/grade-level-management.service.mjs +0 -172
  31. package/esm2022/lib/core/menu-management/components/menu-list/menu-list.component.mjs +0 -1135
  32. package/esm2022/lib/core/menu-management/index.mjs +0 -10
  33. package/esm2022/lib/core/menu-management/interfaces/menu-item.interface.mjs +0 -11
  34. package/esm2022/lib/core/menu-management/mock-data/menu-items.json +0 -311
  35. package/esm2022/lib/core/menu-management/services/menu-management.service.mjs +0 -230
  36. package/esm2022/lib/core/page-management/components/page-controls/page-controls.component.mjs +0 -483
  37. package/esm2022/lib/core/page-management/components/page-form/page-form.component.mjs +0 -212
  38. package/esm2022/lib/core/page-management/components/page-list/page-list.component.mjs +0 -393
  39. package/esm2022/lib/core/page-management/components/page-theme/page-theme.component.mjs +0 -767
  40. package/esm2022/lib/core/page-management/index.mjs +0 -10
  41. package/esm2022/lib/core/page-management/services/page-controls.service.mjs +0 -136
  42. package/esm2022/lib/core/page-management/services/page-management.service.mjs +0 -98
  43. package/esm2022/lib/core/page-management/services/page-theme.service.mjs +0 -107
  44. package/esm2022/public-api.mjs +0 -17
  45. package/lib/cloud-ide-core.component.d.ts +0 -5
  46. package/lib/cloud-ide-core.routes.d.ts +0 -2
  47. package/lib/cloud-ide-core.service.d.ts +0 -6
  48. package/lib/core/department-management/components/department-list/department-list.component.d.ts +0 -178
  49. package/lib/core/department-management/index.d.ts +0 -2
  50. package/lib/core/department-management/services/department-management.service.d.ts +0 -68
  51. package/lib/core/designation-management/components/designation-list/designation-list.component.d.ts +0 -242
  52. package/lib/core/designation-management/index.d.ts +0 -2
  53. package/lib/core/designation-management/services/designation-management.service.d.ts +0 -69
  54. package/lib/core/general-master-management/components/general-master/general-master.component.d.ts +0 -167
  55. package/lib/core/general-master-management/components/general-master-type/general-master-type.component.d.ts +0 -129
  56. package/lib/core/general-master-management/services/general-master-type.service.d.ts +0 -75
  57. package/lib/core/general-master-management/services/general-master.service.d.ts +0 -62
  58. package/lib/core/grade-level-management/components/grade-level-list/grade-level-list.component.d.ts +0 -199
  59. package/lib/core/grade-level-management/index.d.ts +0 -2
  60. package/lib/core/grade-level-management/services/grade-level-management.service.d.ts +0 -69
  61. package/lib/core/menu-management/components/menu-list/menu-list.component.d.ts +0 -278
  62. package/lib/core/menu-management/index.d.ts +0 -3
  63. package/lib/core/menu-management/interfaces/menu-item.interface.d.ts +0 -30
  64. package/lib/core/menu-management/services/menu-management.service.d.ts +0 -85
  65. package/lib/core/page-management/components/page-controls/page-controls.component.d.ts +0 -126
  66. package/lib/core/page-management/components/page-form/page-form.component.d.ts +0 -35
  67. package/lib/core/page-management/components/page-list/page-list.component.d.ts +0 -91
  68. package/lib/core/page-management/components/page-theme/page-theme.component.d.ts +0 -189
  69. package/lib/core/page-management/index.d.ts +0 -6
  70. package/lib/core/page-management/services/page-controls.service.d.ts +0 -54
  71. package/lib/core/page-management/services/page-management.service.d.ts +0 -42
  72. package/lib/core/page-management/services/page-theme.service.d.ts +0 -43
  73. package/public-api.d.ts +0 -8
@@ -1,5 +0,0 @@
1
- // Department Management Components
2
- export * from './components/department-list/department-list.component';
3
- // Department Management Services
4
- export * from './services/department-management.service';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbG91ZC1pZGUtY29yZS9zcmMvbGliL2NvcmUvZGVwYXJ0bWVudC1tYW5hZ2VtZW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1DQUFtQztBQUNuQyxjQUFjLHdEQUF3RCxDQUFDO0FBRXZFLGlDQUFpQztBQUNqQyxjQUFjLDBDQUEwQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRGVwYXJ0bWVudCBNYW5hZ2VtZW50IENvbXBvbmVudHNcclxuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnRzL2RlcGFydG1lbnQtbGlzdC9kZXBhcnRtZW50LWxpc3QuY29tcG9uZW50JztcclxuXHJcbi8vIERlcGFydG1lbnQgTWFuYWdlbWVudCBTZXJ2aWNlc1xyXG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2RlcGFydG1lbnQtbWFuYWdlbWVudC5zZXJ2aWNlJzsgIl19
@@ -1,187 +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 DepartmentManagementService {
8
- constructor(http) {
9
- this.http = http;
10
- this.departmentListSubject = new BehaviorSubject([]);
11
- this.departmentList$ = this.departmentListSubject.asObservable();
12
- console.log('DepartmentManagementService initialized - using real API');
13
- }
14
- /**
15
- * Get department list from API
16
- */
17
- getDepartmentList(body) {
18
- const query = generateStringFromObject(body);
19
- return this.http?.get(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department, query]))
20
- .pipe(tap((response) => {
21
- if (response?.success) {
22
- this.departmentListSubject.next(response?.data || []);
23
- }
24
- }), catchError(error => {
25
- console.error('DepartmentManagementService API error:', error);
26
- return this.handleError(error);
27
- }));
28
- }
29
- /**
30
- * Get department list from cache (if available)
31
- */
32
- getDepartmentListFromCache() {
33
- return this.departmentListSubject.value;
34
- }
35
- /**
36
- * Create new department
37
- * POST ${coreRoutesUrl?.department} - payload: MDepartmentInsertUpdatePayload, response: departmentInsertUpdateControllerResponse
38
- */
39
- createDepartment(department) {
40
- console.log('Creating department:', department);
41
- const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department]);
42
- return this.http.post(url, department)
43
- .pipe(tap((response) => {
44
- if (response.success) {
45
- this.refreshDepartmentList();
46
- }
47
- }), catchError(this.handleError));
48
- }
49
- /**
50
- * Update existing department
51
- * POST ${coreRoutesUrl?.department} - payload: MDepartmentInsertUpdatePayload, response: departmentInsertUpdateControllerResponse
52
- */
53
- updateDepartment(id, department) {
54
- console.log('Updating department:', id, department);
55
- const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department]);
56
- return this.http.post(url, department)
57
- .pipe(tap((response) => {
58
- if (response.success) {
59
- this.refreshDepartmentList();
60
- }
61
- }), catchError(this.handleError));
62
- }
63
- /**
64
- * Get department by ID
65
- * GET ${coreRoutesUrl?.department}/byId/:query - payload: MDepartmentGetByIdPayload, response: departmentByIdControllerResponse
66
- */
67
- getDepartmentById(id) {
68
- console.log('Getting department by ID:', id);
69
- const payload = { sydept_id: id };
70
- const query = generateStringFromObject(payload);
71
- const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department, 'byId', query]);
72
- return this.http.get(url)
73
- .pipe(catchError(this.handleError));
74
- }
75
- /**
76
- * Delete department
77
- * DELETE ${coreRoutesUrl?.department}/:query - payload: MDepartmentDeletePayload, response: departmentDeleteControllerResponse
78
- */
79
- deleteDepartment(id) {
80
- const payload = { sydept_id: id };
81
- const query = generateStringFromObject(payload);
82
- const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department, query]);
83
- return this.http.delete(url)
84
- .pipe(tap((response) => {
85
- if (response.success) {
86
- this.refreshDepartmentList();
87
- }
88
- }), catchError(this.handleError));
89
- }
90
- /**
91
- * Delete multiple departments
92
- */
93
- deleteMultipleDepartments(ids) {
94
- console.log('Deleting multiple departments:', ids);
95
- const payload = { ids };
96
- const query = generateStringFromObject(payload);
97
- const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department, query]);
98
- return this.http.delete(url)
99
- .pipe(tap((response) => {
100
- if (response.success) {
101
- this.refreshDepartmentList();
102
- }
103
- }), catchError(this.handleError));
104
- }
105
- /**
106
- * Toggle department active status
107
- */
108
- toggleDepartmentStatus(payload) {
109
- const query = generateStringFromObject(payload);
110
- const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department, 'toggleStatus', query]);
111
- return this.http.put(url, {})
112
- .pipe(tap((response) => {
113
- if (response.success) {
114
- this.refreshDepartmentList();
115
- }
116
- }), catchError(this.handleError));
117
- }
118
- /**
119
- * Find department by ID
120
- */
121
- findDepartmentById(id, items = this.departmentListSubject.value) {
122
- for (const item of items) {
123
- if (item._id === id) {
124
- return item;
125
- }
126
- }
127
- return null;
128
- }
129
- /**
130
- * Get parent departments for dropdown selection
131
- */
132
- getParentDepartments(excludeId) {
133
- const allItems = [];
134
- const flattenItems = (items, level = 0) => {
135
- items.forEach(item => {
136
- if (item._id !== excludeId) {
137
- allItems.push({
138
- ...item,
139
- sydept_name: ' '.repeat(level) + item.sydept_name
140
- });
141
- }
142
- });
143
- };
144
- flattenItems(this.departmentListSubject.value);
145
- return allItems;
146
- }
147
- /**
148
- * Refresh department list from server
149
- */
150
- refreshDepartmentList() {
151
- const defaultBody = {
152
- pageIndex: 1,
153
- pageSize: 10
154
- };
155
- this.getDepartmentList(defaultBody).subscribe({
156
- next: () => {
157
- console.log('Department list refreshed successfully');
158
- },
159
- error: (error) => {
160
- console.error('Error refreshing department list:', error);
161
- }
162
- });
163
- }
164
- /**
165
- * Handle errors
166
- */
167
- handleError(error) {
168
- let errorMessage = 'An error occurred';
169
- if (error instanceof Error) {
170
- errorMessage = error.message;
171
- }
172
- else if (typeof error === 'string') {
173
- errorMessage = error;
174
- }
175
- console.error('Department Management Service Error:', errorMessage);
176
- return throwError(() => new Error(errorMessage));
177
- }
178
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DepartmentManagementService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
179
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DepartmentManagementService, providedIn: 'root' }); }
180
- }
181
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DepartmentManagementService, decorators: [{
182
- type: Injectable,
183
- args: [{
184
- providedIn: 'root'
185
- }]
186
- }], ctorParameters: () => [{ type: i1.HttpClient }] });
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwYXJ0bWVudC1tYW5hZ2VtZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbG91ZC1pZGUtY29yZS9zcmMvbGliL2NvcmUvZGVwYXJ0bWVudC1tYW5hZ2VtZW50L3NlcnZpY2VzL2RlcGFydG1lbnQtbWFuYWdlbWVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFjLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQ0wsUUFBUSxFQUNSLGFBQWEsRUFDYix3QkFBd0IsRUFDeEIsb0JBQW9CLEVBVXJCLE1BQU0scUJBQXFCLENBQUM7OztBQUs3QixNQUFNLE9BQU8sMkJBQTJCO0lBSXRDLFlBQW9CLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7UUFINUIsMEJBQXFCLEdBQUcsSUFBSSxlQUFlLENBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLG9CQUFlLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBR2pFLE9BQU8sQ0FBQyxHQUFHLENBQUMsMERBQTBELENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxpQkFBaUIsQ0FBQyxJQUFpQjtRQUNqQyxNQUFNLEtBQUssR0FBRyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QyxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUErQixRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsb0JBQW9CLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMs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SUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFLENBQUM7WUFDM0IsWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDL0IsQ0FBQzthQUFNLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDckMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDO1FBRUQsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNwRSxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7OEdBN01VLDJCQUEyQjtrSEFBM0IsMkJBQTJCLGNBRjFCLE1BQU07OzJGQUVQLDJCQUEyQjtrQkFIdkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFxyXG4gIGNpZGVQYXRoLCBcclxuICBjb3JlUm91dGVzVXJsLCBcclxuICBnZW5lcmF0ZVN0cmluZ0Zyb21PYmplY3QsIFxyXG4gIGhvc3RNYW5hZ2VyUm91dGVzVXJsLCBcclxuICBJQ29yZVN5ZGVwdCwgXHJcbiAgTURlcGFydG1lbnREZWxldGVQYXlsb2FkLCBcclxuICBNRGVwYXJ0bWVudEdldEJ5SWRQYXlsb2FkLCBcclxuICBkZXBhcnRtZW50QnlJZENvbnRyb2xsZXJSZXNwb25zZSwgXHJcbiAgZGVwYXJ0bWVudERlbGV0ZUNvbnRyb2xsZXJSZXNwb25zZSwgXHJcbiAgZGVwYXJ0bWVudENvbnRyb2xsZXJSZXNwb25zZSxcclxuICBNRGVwYXJ0bWVudCxcclxuICBNRGVwYXJ0bWVudFRvZ2dsZVN0YXR1c1BheWxvYWQsXHJcbiAgZGVwYXJ0bWVudFRvZ2dsZVN0YXR1c0NvbnRyb2xsZXJSZXNwb25zZVxyXG59IGZyb20gJ2Nsb3VkLWlkZS1sbXMtbW9kZWwnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRGVwYXJ0bWVudE1hbmFnZW1lbnRTZXJ2aWNlIHtcclxuICBwcml2YXRlIGRlcGFydG1lbnRMaXN0U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SUNvcmVTeWRlcHRbXT4oW10pO1xyXG4gIHB1YmxpYyBkZXBhcnRtZW50TGlzdCQgPSB0aGlzLmRlcGFydG1lbnRMaXN0U3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7XHJcbiAgICBjb25zb2xlLmxvZygnRGVwYXJ0bWVudE1hbmFnZW1lbnRTZXJ2aWNlIGluaXRpYWxpemVkIC0gdXNpbmcgcmVhbCBBUEknKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBkZXBhcnRtZW50IGxpc3QgZnJvbSBBUElcclxuICAgKi9cclxuICBnZXREZXBhcnRtZW50TGlzdChib2R5OiBNRGVwYXJ0bWVudCk6IE9ic2VydmFibGU8ZGVwYXJ0bWVudENvbnRyb2xsZXJSZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcXVlcnkgPSBnZW5lcmF0ZVN0cmluZ0Zyb21PYmplY3QoYm9keSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwPy5nZXQ8ZGVwYXJ0bWVudENvbnRyb2xsZXJSZXNwb25zZT4oY2lkZVBhdGg/LmpvaW4oW2hvc3RNYW5hZ2VyUm91dGVzVXJsPy5jaWRlU3VpdGVIb3N0LCBjb3JlUm91dGVzVXJsPy5tb2R1bGUsIGNvcmVSb3V0ZXNVcmw/LmRlcGFydG1lbnQsIHF1ZXJ5XSkpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRhcCgocmVzcG9uc2U6IGRlcGFydG1lbnRDb250cm9sbGVyUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChyZXNwb25zZT8uc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLmRlcGFydG1lbnRMaXN0U3ViamVjdC5uZXh0KHJlc3BvbnNlPy5kYXRhIHx8IFtdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0RlcGFydG1lbnRNYW5hZ2VtZW50U2VydmljZSBBUEkgZXJyb3I6JywgZXJyb3IpO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgZGVwYXJ0bWVudCBsaXN0IGZyb20gY2FjaGUgKGlmIGF2YWlsYWJsZSlcclxuICAgKi9cclxuICBnZXREZXBhcnRtZW50TGlzdEZyb21DYWNoZSgpOiBJQ29yZVN5ZGVwdFtdIHtcclxuICAgIHJldHVybiB0aGlzLmRlcGFydG1lbnRMaXN0U3ViamVjdC52YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBuZXcgZGVwYXJ0bWVudFxyXG4gICAqIFBPU1QgJHtjb3JlUm91dGVzVXJsPy5kZXBhcnRtZW50fSAtIHBheWxvYWQ6IE1EZXBhcnRtZW50SW5zZXJ0VXBkYXRlUGF5bG9hZCwgcmVzcG9uc2U6IGRlcGFydG1lbnRJbnNlcnRVcGRhdGVDb250cm9sbGVyUmVzcG9uc2VcclxuICAgKi9cclxuICBjcmVhdGVEZXBhcnRtZW50KGRlcGFydG1lbnQ6IElDb3JlU3lkZXB0KTogT2JzZXJ2YWJsZTxkZXBhcnRtZW50Q29udHJvbGxlclJlc3BvbnNlPiB7XHJcbiAgICBjb25zb2xlLmxvZygnQ3JlYXRpbmcgZGVwYXJ0bWVudDonLCBkZXBhcnRtZW50KTtcclxuICAgIGNvbnN0IHVybCA9IGNpZGVQYXRoPy5qb2luKFtob3N0TWFuYWdlclJvdXRlc1VybD8uY2lkZVN1aXRlSG9zdCwgY29yZVJvdXRlc1VybD8ubW9kdWxlLCBjb3JlUm91dGVzVXJsPy5kZXBhcnRtZW50XSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8ZGVwYXJ0bWVudENvbnRyb2xsZXJSZXNwb25zZT4odXJsLCBkZXBhcnRtZW50KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YXAoKHJlc3BvbnNlOiBkZXBhcnRtZW50Q29udHJvbGxlclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hEZXBhcnRtZW50TGlzdCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBleGlzdGluZyBkZXBhcnRtZW50XHJcbiAgICogUE9TVCAke2NvcmVSb3V0ZXNVcmw/LmRlcGFydG1lbnR9IC0gcGF5bG9hZDogTURlcGFydG1lbnRJbnNlcnRVcGRhdGVQYXlsb2FkLCByZXNwb25zZTogZGVwYXJ0bWVudEluc2VydFVwZGF0ZUNvbnRyb2xsZXJSZXNwb25zZVxyXG4gICAqL1xyXG4gIHVwZGF0ZURlcGFydG1lbnQoaWQ6IHN0cmluZywgZGVwYXJ0bWVudDogSUNvcmVTeWRlcHQpOiBPYnNlcnZhYmxlPGRlcGFydG1lbnRDb250cm9sbGVyUmVzcG9uc2U+IHtcclxuICAgIGNvbnNvbGUubG9nKCdVcGRhdGluZyBkZXBhcnRtZW50OicsIGlkLCBkZXBhcnRtZW50KTtcclxuICAgIGNvbnN0IHVybCA9IGNpZGVQYXRoPy5qb2luKFtob3N0TWFuYWdlclJvdXRlc1VybD8uY2lkZVN1aXRlSG9zdCwgY29yZVJvdXRlc1VybD8ubW9kdWxlLCBjb3JlUm91dGVzVXJsPy5kZXBhcnRtZW50XSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8ZGVwYXJ0bWVudENvbnRyb2xsZXJSZXNwb25zZT4odXJsLCBkZXBhcnRtZW50KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YXAoKHJlc3BvbnNlOiBkZXBhcnRtZW50Q29udHJvbGxlclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hEZXBhcnRtZW50TGlzdCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBkZXBhcnRtZW50IGJ5IElEXHJcbiAgICogR0VUICR7Y29yZVJvdXRlc1VybD8uZGVwYXJ0bWVudH0vYnlJZC86cXVlcnkgLSBwYXlsb2FkOiBNRGVwYXJ0bWVudEdldEJ5SWRQYXlsb2FkLCByZXNwb25zZTogZGVwYXJ0bWVudEJ5SWRDb250cm9sbGVyUmVzcG9uc2VcclxuICAgKi9cclxuICBnZXREZXBhcnRtZW50QnlJZChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxkZXBhcnRtZW50QnlJZENvbnRyb2xsZXJSZXNwb25zZT4ge1xyXG4gICAgY29uc29sZS5sb2coJ0dldHRpbmcgZGVwYXJ0bWVudCBieSBJRDonLCBpZCk7XHJcbiAgICBjb25zdCBwYXlsb2FkOiBNRGVwYXJ0bWVudEdldEJ5SWRQYXlsb2FkID0geyBzeWRlcHRfaWQ6IGlkIH07XHJcbiAgICBjb25zdCBxdWVyeSA9IGdlbmVyYXRlU3RyaW5nRnJvbU9iamVjdChwYXlsb2FkKTtcclxuICAgIGNvbnN0IHVybCA9IGNpZGVQYXRoPy5qb2luKFtob3N0TWFuYWdlclJvdXRlc1VybD8uY2lkZVN1aXRlSG9zdCwgY29yZVJvdXRlc1VybD8ubW9kdWxlLCBjb3JlUm91dGVzVXJsPy5kZXBhcnRtZW50LCAnYnlJZCcsIHF1ZXJ5XSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxkZXBhcnRtZW50QnlJZENvbnRyb2xsZXJSZXNwb25zZT4odXJsKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGUgZGVwYXJ0bWVudFxyXG4gICAqIERFTEVURSAke2NvcmVSb3V0ZXNVcmw/LmRlcGFydG1lbnR9LzpxdWVyeSAtIHBheWxvYWQ6IE1EZXBhcnRtZW50RGVsZXRlUGF5bG9hZCwgcmVzcG9uc2U6IGRlcGFydG1lbnREZWxldGVDb250cm9sbGVyUmVzcG9uc2VcclxuICAgKi9cclxuICBkZWxldGVEZXBhcnRtZW50KGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGRlcGFydG1lbnREZWxldGVDb250cm9sbGVyUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHBheWxvYWQ6IE1EZXBhcnRtZW50RGVsZXRlUGF5bG9hZCA9IHsgc3lkZXB0X2lkOiBpZCB9O1xyXG4gICAgY29uc3QgcXVlcnkgPSBnZW5lcmF0ZVN0cmluZ0Zyb21PYmplY3QocGF5bG9hZCk7XHJcbiAgICBjb25zdCB1cmwgPSBjaWRlUGF0aD8uam9pbihbaG9zdE1hbmFnZXJSb3V0ZXNVcmw/LmNpZGVTdWl0ZUhvc3QsIGNvcmVSb3V0ZXNVcmw/Lm1vZHVsZSwgY29yZVJvdXRlc1VybD8uZGVwYXJ0bWVudCwgcXVlcnldKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPGRlcGFydG1lbnREZWxldGVDb250cm9sbGVyUmVzcG9uc2U+KHVybClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFwKChyZXNwb25zZTogZGVwYXJ0bWVudERlbGV0ZUNvbnRyb2xsZXJSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoRGVwYXJ0bWVudExpc3QoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGUgbXVsdGlwbGUgZGVwYXJ0bWVudHNcclxuICAgKi9cclxuICBkZWxldGVNdWx0aXBsZURlcGFydG1lbnRzKGlkczogc3RyaW5nW10pOiBPYnNlcnZhYmxlPHsgc3VjY2VzczogYm9vbGVhbjsgbWVzc2FnZT86IHN0cmluZzsgZGF0YT86IHVua25vd24gfT4ge1xyXG4gICAgY29uc29sZS5sb2coJ0RlbGV0aW5nIG11bHRpcGxlIGRlcGFydG1lbnRzOicsIGlkcyk7XHJcbiAgICBjb25zdCBwYXlsb2FkID0geyBpZHMgfTtcclxuICAgIGNvbnN0IHF1ZXJ5ID0gZ2VuZXJhdGVTdHJpbmdGcm9tT2JqZWN0KHBheWxvYWQpO1xyXG4gICAgY29uc3QgdXJsID0gY2lkZVBhdGg/LmpvaW4oW2hvc3RNYW5hZ2VyUm91dGVzVXJsPy5jaWRlU3VpdGVIb3N0LCBjb3JlUm91dGVzVXJsPy5tb2R1bGUsIGNvcmVSb3V0ZXNVcmw/LmRlcGFydG1lbnQsIHF1ZXJ5XSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTx7IHN1Y2Nlc3M6IGJvb2xlYW47IG1lc3NhZ2U/OiBzdHJpbmc7IGRhdGE/OiB1bmtub3duIH0+KHVybClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFwKChyZXNwb25zZTogeyBzdWNjZXNzOiBib29sZWFuOyBtZXNzYWdlPzogc3RyaW5nOyBkYXRhPzogdW5rbm93biB9KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hEZXBhcnRtZW50TGlzdCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRvZ2dsZSBkZXBhcnRtZW50IGFjdGl2ZSBzdGF0dXNcclxuICAgKi9cclxuICB0b2dnbGVEZXBhcnRtZW50U3RhdHVzKHBheWxvYWQ6IE1EZXBhcnRtZW50VG9nZ2xlU3RhdHVzUGF5bG9hZCk6IE9ic2VydmFibGU8ZGVwYXJ0bWVudFRvZ2dsZVN0YXR1c0NvbnRyb2xsZXJSZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcXVlcnkgPSBnZW5lcmF0ZVN0cmluZ0Zyb21PYmplY3QocGF5bG9hZCk7IFxyXG4gICAgY29uc3QgdXJsID0gY2lkZVBhdGg/LmpvaW4oW2hvc3RNYW5hZ2VyUm91dGVzVXJsPy5jaWRlU3VpdGVIb3N0LCBjb3JlUm91dGVzVXJsPy5tb2R1bGUsIGNvcmVSb3V0ZXNVcmw/LmRlcGFydG1lbnQsICd0b2dnbGVTdGF0dXMnLCBxdWVyeV0pO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8ZGVwYXJ0bWVudFRvZ2dsZVN0YXR1c0NvbnRyb2xsZXJSZXNwb25zZT4odXJsLCB7fSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFwKChyZXNwb25zZTogZGVwYXJ0bWVudFRvZ2dsZVN0YXR1c0NvbnRyb2xsZXJSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoRGVwYXJ0bWVudExpc3QoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGaW5kIGRlcGFydG1lbnQgYnkgSURcclxuICAgKi9cclxuICBmaW5kRGVwYXJ0bWVudEJ5SWQoaWQ6IHN0cmluZywgaXRlbXM6IElDb3JlU3lkZXB0W10gPSB0aGlzLmRlcGFydG1lbnRMaXN0U3ViamVjdC52YWx1ZSk6IElDb3JlU3lkZXB0IHwgbnVsbCB7XHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcclxuICAgICAgaWYgKGl0ZW0uX2lkID09PSBpZCkge1xyXG4gICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBwYXJlbnQgZGVwYXJ0bWVudHMgZm9yIGRyb3Bkb3duIHNlbGVjdGlvblxyXG4gICAqL1xyXG4gIGdldFBhcmVudERlcGFydG1lbnRzKGV4Y2x1ZGVJZD86IHN0cmluZyk6IElDb3JlU3lkZXB0W10ge1xyXG4gICAgY29uc3QgYWxsSXRlbXM6IElDb3JlU3lkZXB0W10gPSBbXTtcclxuXHJcbiAgICBjb25zdCBmbGF0dGVuSXRlbXMgPSAoaXRlbXM6IElDb3JlU3lkZXB0W10sIGxldmVsOiBudW1iZXIgPSAwKSA9PiB7XHJcbiAgICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0uX2lkICE9PSBleGNsdWRlSWQpIHtcclxuICAgICAgICAgIGFsbEl0ZW1zLnB1c2goe1xyXG4gICAgICAgICAgICAuLi5pdGVtLFxyXG4gICAgICAgICAgICBzeWRlcHRfbmFtZTogJyAgJy5yZXBlYXQobGV2ZWwpICsgaXRlbS5zeWRlcHRfbmFtZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgZmxhdHRlbkl0ZW1zKHRoaXMuZGVwYXJ0bWVudExpc3RTdWJqZWN0LnZhbHVlKTtcclxuICAgIHJldHVybiBhbGxJdGVtcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZnJlc2ggZGVwYXJ0bWVudCBsaXN0IGZyb20gc2VydmVyXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWZyZXNoRGVwYXJ0bWVudExpc3QoKTogdm9pZCB7XHJcbiAgICBjb25zdCBkZWZhdWx0Qm9keSA9IHtcclxuICAgICAgcGFnZUluZGV4OiAxLFxyXG4gICAgICBwYWdlU2l6ZTogMTBcclxuICAgIH07XHJcbiAgICB0aGlzLmdldERlcGFydG1lbnRMaXN0KGRlZmF1bHRCb2R5KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0RlcGFydG1lbnQgbGlzdCByZWZyZXNoZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciByZWZyZXNoaW5nIGRlcGFydG1lbnQgbGlzdDonLCBlcnJvcik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlIGVycm9yc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgaGFuZGxlRXJyb3IoZXJyb3I6IHVua25vd24pOiBPYnNlcnZhYmxlPG5ldmVyPiB7XHJcbiAgICBsZXQgZXJyb3JNZXNzYWdlID0gJ0FuIGVycm9yIG9jY3VycmVkJztcclxuXHJcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xyXG4gICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGVycm9yTWVzc2FnZSA9IGVycm9yO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUuZXJyb3IoJ0RlcGFydG1lbnQgTWFuYWdlbWVudCBTZXJ2aWNlIEVycm9yOicsIGVycm9yTWVzc2FnZSk7XHJcbiAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKSk7XHJcbiAgfVxyXG59ICJdfQ==