bx-rest 0.0.17 → 0.0.19

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 (85) hide show
  1. package/consts/part-name-metods.d.ts +74 -0
  2. package/consts/time.d.ts +3 -0
  3. package/esm2020/consts/part-name-metods.mjs +75 -0
  4. package/esm2020/consts/time.mjs +4 -0
  5. package/esm2020/functions/mapResult.mjs +7 -0
  6. package/esm2020/functions/serializeJavascript.mjs +200 -0
  7. package/esm2020/map/base.mjs +14 -0
  8. package/esm2020/map/lists/element.mjs +22 -0
  9. package/esm2020/public-api.mjs +2 -2
  10. package/esm2020/request/bx-rest.module.mjs +28 -0
  11. package/esm2020/request/lists/element.mjs +22 -0
  12. package/esm2020/request/lists.mjs +25 -0
  13. package/esm2020/request/user.mjs +204 -0
  14. package/esm2020/rest.mjs +31 -0
  15. package/esm2020/services/base.mjs +174 -0
  16. package/esm2020/services/http/HttpBX.mjs +128 -0
  17. package/esm2020/services/http/HttpData.mjs +124 -0
  18. package/esm2020/services/http/base/base.mjs +29 -0
  19. package/esm2020/services/http/base/http.mjs +28 -0
  20. package/esm2020/services/http/http.mjs +135 -0
  21. package/esm2020/services/http/sessionKey.mjs +180 -0
  22. package/esm2020/services/map/base.mjs +14 -0
  23. package/esm2020/services/map/rest/user.mjs +89 -0
  24. package/esm2020/services/snack-bar/snack-bar.service.mjs +42 -0
  25. package/esm2020/services/snack-bar/toast-message/toast-message.component.mjs +31 -0
  26. package/esm2020/services/vanilla/JSON.mjs +20 -0
  27. package/esm2020/services/vanilla/localStorage.mjs +35 -0
  28. package/esm2020/services/vanilla//321/201ookies.mjs +44 -0
  29. package/esm2020/store/auth.mjs +26 -0
  30. package/esm2020/store/users.mjs +67 -0
  31. package/esm2020/typification/auth/save.mjs +2 -0
  32. package/esm2020/typification/rest/api-lib.mjs +21 -0
  33. package/esm2020/typification/rest/base/YesNo.mjs +2 -0
  34. package/esm2020/typification/rest/base/httpAnswerBX.mjs +2 -0
  35. package/esm2020/typification/rest/batch/batchRequestParam.mjs +2 -0
  36. package/esm2020/typification/rest/lib.mjs +2 -0
  37. package/esm2020/typification/rest/lists/element/get.mjs +2 -0
  38. package/esm2020/typification/rest/settings.mjs +2 -0
  39. package/esm2020/typification/rest/support/param.mjs +2 -0
  40. package/esm2020/typification/rest/user/UserFilterSearch.mjs +2 -0
  41. package/esm2020/typification/rest/user/get.mjs +2 -0
  42. package/esm2020/typification/rest/user/user.mjs +2 -0
  43. package/fesm2015/bx-rest.mjs +248 -0
  44. package/fesm2015/bx-rest.mjs.map +1 -1
  45. package/fesm2020/bx-rest.mjs +245 -0
  46. package/fesm2020/bx-rest.mjs.map +1 -1
  47. package/functions/mapResult.d.ts +2 -0
  48. package/functions/serializeJavascript.d.ts +2 -0
  49. package/map/base.d.ts +6 -0
  50. package/map/lists/element.d.ts +8 -0
  51. package/package.json +1 -1
  52. package/public-api.d.ts +1 -1
  53. package/request/bx-rest.module.d.ts +8 -0
  54. package/request/lists/element.d.ts +19 -0
  55. package/request/lists.d.ts +15 -0
  56. package/request/user.d.ts +51 -0
  57. package/rest.d.ts +11 -0
  58. package/services/base.d.ts +32 -0
  59. package/services/http/HttpBX.d.ts +26 -0
  60. package/services/http/HttpData.d.ts +13 -0
  61. package/services/http/base/base.d.ts +16 -0
  62. package/services/http/base/http.d.ts +7 -0
  63. package/services/http/http.d.ts +31 -0
  64. package/services/http/sessionKey.d.ts +34 -0
  65. package/services/map/base.d.ts +6 -0
  66. package/services/map/rest/user.d.ts +12 -0
  67. package/services/snack-bar/snack-bar.service.d.ts +12 -0
  68. package/services/snack-bar/toast-message/toast-message.component.d.ts +16 -0
  69. package/services/vanilla/JSON.d.ts +7 -0
  70. package/services/vanilla/localStorage.d.ts +10 -0
  71. package/services/vanilla//321/201ookies.d.ts +9 -0
  72. package/store/auth.d.ts +20 -0
  73. package/store/users.d.ts +34 -0
  74. package/typification/auth/save.d.ts +14 -0
  75. package/typification/rest/api-lib.d.ts +9 -0
  76. package/typification/rest/base/YesNo.d.ts +1 -0
  77. package/typification/rest/base/httpAnswerBX.d.ts +15 -0
  78. package/typification/rest/batch/batchRequestParam.d.ts +16 -0
  79. package/typification/rest/lib.d.ts +18 -0
  80. package/typification/rest/lists/element/get.d.ts +28 -0
  81. package/typification/rest/settings.d.ts +6 -0
  82. package/typification/rest/support/param.d.ts +5 -0
  83. package/typification/rest/user/UserFilterSearch.d.ts +43 -0
  84. package/typification/rest/user/get.d.ts +13 -0
  85. package/typification/rest/user/user.d.ts +62 -0
@@ -0,0 +1,204 @@
1
+ import { of } from 'rxjs';
2
+ import { first, map, mergeMap, tap } from 'rxjs/operators';
3
+ import clone from 'just-clone';
4
+ import HttpBXServices from '../services/http/HttpBX';
5
+ import { saveArr, saveSelf } from '../store/users';
6
+ // import DateTrace from 'bx-rest/services/api/trace/metods/date'
7
+ import SnackBarService from '../services/snack-bar/snack-bar.service';
8
+ import { $get, $list, $search, $update, $user } from '../consts/part-name-metods';
9
+ import { Injectable } from '@angular/core';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@ngrx/store";
12
+ import * as i2 from "../services/map/rest/user";
13
+ export class BXRestUser {
14
+ constructor(http, snackBar,
15
+ // private img: ImgServices,
16
+ //private dateTrace: DateTrace,
17
+ store, userMap) {
18
+ this.http = http;
19
+ this.snackBar = snackBar;
20
+ this.store = store;
21
+ this.userMap = userMap;
22
+ this.url = {
23
+ admin: [$user, 'admin'],
24
+ get: [$user, $get],
25
+ current: [$user, 'current'],
26
+ update: [$user, $update],
27
+ search: [$user, $search],
28
+ access: [$user, 'access'],
29
+ // AU - все авторизованные пользователи
30
+ // D1 - подразделение с id=1
31
+ // G1 - группа с id=1
32
+ fields: [$user, 'fields'],
33
+ userfield: {
34
+ list: [$user, 'userfield', $list]
35
+ }
36
+ };
37
+ this.def = {
38
+ params: { ACTIVE: 1, start: 0 }
39
+ };
40
+ this.user$ = this.store.select('users');
41
+ }
42
+ admin() {
43
+ return this.http.get(this.url.admin);
44
+ }
45
+ get(params = {}) {
46
+ let copyParams = clone(params);
47
+ this.setDefParam(copyParams);
48
+ return this.http.post(this.url.get, copyParams, 'Не удалось получить пользователей')
49
+ .pipe(tap(v => {
50
+ if (v && v.result) {
51
+ this.saveArrUser(v.result);
52
+ }
53
+ }));
54
+ }
55
+ current(update = false) {
56
+ if (update) {
57
+ return this.getSelfHttp();
58
+ }
59
+ else {
60
+ return this.user$.pipe(mergeMap(v => {
61
+ if (v && v.self) {
62
+ return of(v.self);
63
+ }
64
+ else {
65
+ return this.getSelfHttp();
66
+ }
67
+ }), first());
68
+ }
69
+ }
70
+ getSelfHttp() {
71
+ return this.http.get(this.url.current, {}, 'Не удалось получить пользователя')
72
+ .pipe(map(v => {
73
+ if (v && v.result) {
74
+ return this.userMap.HttpToBX(v.result);
75
+ }
76
+ return undefined;
77
+ }), tap(v => {
78
+ if (v) {
79
+ this.store.dispatch(saveSelf({ self: v }));
80
+ }
81
+ }));
82
+ }
83
+ access(access, textError = 'Не удалось получить права') {
84
+ return this.http.get(this.url.access, { ACCESS: access }, textError);
85
+ }
86
+ // getAll(params: iBXGetParam = {}): Observable<iBXRestUser [] | undefined> {
87
+ // if (!Object.keys(params).length) {
88
+ // params = clone(this.def.params)
89
+ // }
90
+ //
91
+ // const saveAllUser = compare(params, this.def.params)
92
+ // return this.user$.pipe(
93
+ // take(1),
94
+ // mergeMap(v => {
95
+ // if (v.load.all) {
96
+ // if (compare(this.def.params, params)) {
97
+ // return of(clone(v.data))
98
+ // }
99
+ // }
100
+ //
101
+ // return this.getEndArray(params).pipe(
102
+ // take(1),
103
+ // map(v => {
104
+ // if (v && v.result) {
105
+ // let cl = clone(v.result)
106
+ // return this.saveArrUser(cl)
107
+ // }
108
+ // return undefined
109
+ // }),
110
+ // )
111
+ // }),
112
+ // tap(v => {
113
+ // if (v && v.length && saveAllUser) {
114
+ // this.store.dispatch(loadAll({load: true}))
115
+ // }
116
+ // params.start = this.def.params.start
117
+ // })
118
+ // )
119
+ // }
120
+ saveArrUser(users) {
121
+ let result = [];
122
+ for (const user of users) {
123
+ result.push(this.userMap.HttpToBX(user));
124
+ }
125
+ this.store.dispatch(saveArr({ arr: result }));
126
+ return result;
127
+ }
128
+ search(params) {
129
+ if (typeof params === 'string') {
130
+ params = { FIND: params };
131
+ }
132
+ if (typeof params.ACTIVE !== 'boolean') {
133
+ params.ACTIVE = true;
134
+ }
135
+ return this.http.get(this.url.search, params, 'Сервер не отвечает на запрос поиска');
136
+ }
137
+ fields() {
138
+ return this.http.get(this.url.fields);
139
+ }
140
+ update(user, fieldUpdate) {
141
+ if (fieldUpdate && fieldUpdate.length) {
142
+ let sendData = {
143
+ ID: user.ID,
144
+ };
145
+ const userBX = this.userMap.BXtoHttp(user);
146
+ for (const field of fieldUpdate) {
147
+ if (userBX[field]) {
148
+ sendData[field] = userBX[field];
149
+ }
150
+ else {
151
+ this.snackBar.error('Одно из указанных полей отправлено не верно');
152
+ }
153
+ }
154
+ return this.http.post(this.url.update, sendData, 'Не удалось обновить пользователя с ID' + user.ID);
155
+ }
156
+ else {
157
+ this.snackBar.error('Не указано ни одно поле для редактирования пользователя');
158
+ return of({});
159
+ }
160
+ }
161
+ // getEndArray(params: UserFilter = {}): Observable<iHttpAnswerBX<iBXRestUserHttp[]> | undefined> {
162
+ // return this.get(params).pipe(
163
+ // mergeMap(items => {
164
+ // if (items && items.result && typeof items.result === 'object') {
165
+ // if (items.next) {
166
+ // params.start = items.next
167
+ // return this.getEndArray(params).pipe(map(vEnd => {
168
+ // if (vEnd && items.result && vEnd.result) {
169
+ // return {result: [...items.result, ...vEnd.result]}
170
+ // }
171
+ // return (items) ? items : undefined
172
+ // }))
173
+ // }
174
+ // return of(items)
175
+ // } else {
176
+ // return of(undefined)
177
+ // }
178
+ // }),
179
+ // )
180
+ // }
181
+ setDefParam(params) {
182
+ if (!params.hasOwnProperty('ACTIVE')) {
183
+ params.ACTIVE = this.def.params.ACTIVE;
184
+ }
185
+ if (params.ACTIVE && params.ACTIVE === 2) {
186
+ delete params.ACTIVE;
187
+ }
188
+ if (!params.hasOwnProperty('start')) {
189
+ params.start = this.def.params.start;
190
+ }
191
+ if (params.UF_DEPARTMENT && !params.UF_DEPARTMENT.length) {
192
+ delete params.UF_DEPARTMENT;
193
+ }
194
+ }
195
+ }
196
+ BXRestUser.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BXRestUser, deps: [{ token: HttpBXServices }, { token: SnackBarService }, { token: i1.Store }, { token: i2.BitrixApiUserMapServices }], target: i0.ɵɵFactoryTarget.Injectable });
197
+ BXRestUser.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BXRestUser, providedIn: 'root' });
198
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BXRestUser, decorators: [{
199
+ type: Injectable,
200
+ args: [{
201
+ providedIn: 'root'
202
+ }]
203
+ }], ctorParameters: function () { return [{ type: HttpBXServices }, { type: SnackBarService }, { type: i1.Store }, { type: i2.BitrixApiUserMapServices }]; } });
204
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3JlcXVlc3QvdXNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ3JDLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUMxRCxPQUFPLEtBQUssTUFBTSxZQUFZLENBQUE7QUFFOUIsT0FBTyxjQUFjLE1BQU0seUJBQXlCLENBQUE7QUFHcEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQWMsTUFBTSxnQkFBZ0IsQ0FBQTtBQUU5RCxpRUFBaUU7QUFDakUsT0FBTyxlQUFlLE1BQU0seUNBQXlDLENBQUE7QUFHckUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUNqRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBOzs7O0FBSzFDLE1BQU0sT0FBTyxVQUFVO0lBd0JyQixZQUNVLElBQW9CLEVBQ3BCLFFBQXlCO0lBQ2pDLDRCQUE0QjtJQUM1QiwrQkFBK0I7SUFDdkIsS0FBbUMsRUFDbkMsT0FBaUM7UUFMakMsU0FBSSxHQUFKLElBQUksQ0FBZ0I7UUFDcEIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFHekIsVUFBSyxHQUFMLEtBQUssQ0FBOEI7UUFDbkMsWUFBTyxHQUFQLE9BQU8sQ0FBMEI7UUE1QjNDLFFBQUcsR0FBRztZQUNKLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7WUFDdkIsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQztZQUNsQixPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDO1lBQzNCLE1BQU0sRUFBRSxD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QUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgZmlyc3QsIG1hcCwgbWVyZ2VNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IGNsb25lIGZyb20gJ2p1c3QtY2xvbmUnXG5pbXBvcnQgeyBpQlhHZXRQYXJhbSB9IGZyb20gJy4uL3R5cGlmaWNhdGlvbi9yZXN0L3VzZXIvZ2V0J1xuaW1wb3J0IEh0dHBCWFNlcnZpY2VzIGZyb20gJy4uL3NlcnZpY2VzL2h0dHAvSHR0cEJYJ1xuaW1wb3J0IFVzZXJGaWx0ZXJTZWFyY2ggZnJvbSAnLi4vdHlwaWZpY2F0aW9uL3Jlc3QvdXNlci9Vc2VyRmlsdGVyU2VhcmNoJ1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSdcbmltcG9ydCB7IHNhdmVBcnIsIHNhdmVTZWxmLCBzdG9yZVVzZXJzIH0gZnJvbSAnLi4vc3RvcmUvdXNlcnMnXG5pbXBvcnQgeyBCaXRyaXhBcGlVc2VyTWFwU2VydmljZXMgfSBmcm9tICcuLi9zZXJ2aWNlcy9tYXAvcmVzdC91c2VyJ1xuLy8gaW1wb3J0IERhdGVUcmFjZSBmcm9tICdieC1yZXN0L3NlcnZpY2VzL2FwaS90cmFjZS9tZXRvZHMvZGF0ZSdcbmltcG9ydCBTbmFja0JhclNlcnZpY2UgZnJvbSAnLi4vc2VydmljZXMvc25hY2stYmFyL3NuYWNrLWJhci5zZXJ2aWNlJ1xuaW1wb3J0IGlIdHRwQW5zd2VyQlggZnJvbSAnLi4vdHlwaWZpY2F0aW9uL3Jlc3QvYmFzZS9odHRwQW5zd2VyQlgnXG5pbXBvcnQgeyBpQlhSZXN0VXNlciwgaUJYUmVzdFVzZXJIdHRwLCBpQlhSZXN0VXNlckh0dHBGaWVsZCB9IGZyb20gJy4uL3R5cGlmaWNhdGlvbi9yZXN0L3VzZXIvdXNlcidcbmltcG9ydCB7ICRnZXQsICRsaXN0LCAkc2VhcmNoLCAkdXBkYXRlLCAkdXNlciB9IGZyb20gJy4uL2NvbnN0cy9wYXJ0LW5hbWUtbWV0b2RzJ1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEJYUmVzdFVzZXIge1xuXG4gIHVybCA9IHtcbiAgICBhZG1pbjogWyR1c2VyLCAnYWRtaW4nXSxcbiAgICBnZXQ6IFskdXNlciwgJGdldF0sXG4gICAgY3VycmVudDogWyR1c2VyLCAnY3VycmVudCddLFxuICAgIHVwZGF0ZTogWyR1c2VyLCAkdXBkYXRlXSxcbiAgICBzZWFyY2g6IFskdXNlciwgJHNlYXJjaF0sXG4gICAgYWNjZXNzOiBbJHVzZXIsICdhY2Nlc3MnXSwgLy8gVTEgLSDQv9C+0LvRjNC30L7QstCw0YLQtdC70Ywg0YEgaWQgPTFcbiAgICAvLyBBVSAtINCy0YHQtSDQsNCy0YLQvtGA0LjQt9C+0LLQsNC90L3Ri9C1INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQuFxuICAgIC8vIEQxIC0g0L/QvtC00YDQsNC30LTQtdC70LXQvdC40LUg0YEgaWQ9MVxuICAgIC8vIEcxIC0g0LPRgNGD0L/Qv9CwINGBIGlkPTFcbiAgICBmaWVsZHM6IFskdXNlciwgJ2ZpZWxkcyddLFxuICAgIHVzZXJmaWVsZDoge1xuICAgICAgbGlzdDogWyR1c2VyLCAndXNlcmZpZWxkJywgJGxpc3RdXG4gICAgfVxuICB9XG5cbiAgZGVmOiB7IHBhcmFtczogeyBBQ1RJVkU6IDEsIHN0YXJ0OiAwIH0gfSA9IHtcbiAgICBwYXJhbXM6IHtBQ1RJVkU6IDEsIHN0YXJ0OiAwfVxuICB9XG5cbiAgdXNlciQ6IE9ic2VydmFibGU8c3RvcmVVc2Vycz5cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBCWFNlcnZpY2VzLFxuICAgIHByaXZhdGUgc25hY2tCYXI6IFNuYWNrQmFyU2VydmljZSxcbiAgICAvLyBwcml2YXRlIGltZzogSW1nU2VydmljZXMsXG4gICAgLy9wcml2YXRlIGRhdGVUcmFjZTogRGF0ZVRyYWNlLFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlPHsgdXNlcnM6IHN0b3JlVXNlcnMgfT4sXG4gICAgcHJpdmF0ZSB1c2VyTWFwOiBCaXRyaXhBcGlVc2VyTWFwU2VydmljZXMsXG4gICkge1xuICAgIHRoaXMudXNlciQgPSB0aGlzLnN0b3JlLnNlbGVjdCgndXNlcnMnKVxuICB9XG5cbiAgYWRtaW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8aUh0dHBBbnN3ZXJCWDxib29sZWFuPj4odGhpcy51cmwuYWRtaW4pXG4gIH1cblxuICBnZXQocGFyYW1zOiBpQlhHZXRQYXJhbSA9IHt9KTogT2JzZXJ2YWJsZTxpSHR0cEFuc3dlckJYPGlCWFJlc3RVc2VySHR0cFtdPiB8IHVuZGVmaW5lZD4ge1xuICAgIGxldCBjb3B5UGFyYW1zID0gY2xvbmUocGFyYW1zKVxuICAgIHRoaXMuc2V0RGVmUGFyYW0oY29weVBhcmFtcylcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8aUh0dHBBbnN3ZXJCWDxpQlhSZXN0VXNlckh0dHBbXT4gfCB1bmRlZmluZWQ+XG4gICAgKHRoaXMudXJsLmdldCwgY29weVBhcmFtcywgJ9Cd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QvtC70YPRh9C40YLRjCDQv9C+0LvRjNC30L7QstCw0YLQtdC70LXQuScpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKHYgPT4ge1xuICAgICAgICAgIGlmICh2ICYmIHYucmVzdWx0KSB7XG4gICAgICAgICAgICB0aGlzLnNhdmVBcnJVc2VyKHYucmVzdWx0KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgfVxuXG4gIGN1cnJlbnQodXBkYXRlID0gZmFsc2UpIHtcbiAgICBpZiAodXBkYXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTZWxmSHR0cCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnVzZXIkLnBpcGUoXG4gICAgICAgIG1lcmdlTWFwKHYgPT4ge1xuICAgICAgICAgIGlmICh2ICYmIHYuc2VsZikge1xuICAgICAgICAgICAgcmV0dXJuIG9mKHYuc2VsZilcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VsZkh0dHAoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIGZpcnN0KClcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGZIdHRwKCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGlIdHRwQW5zd2VyQlg8aUJYUmVzdFVzZXJIdHRwPj5cbiAgICAodGhpcy51cmwuY3VycmVudCwge30sICfQndC1INGD0LTQsNC70L7RgdGMINC/0L7Qu9GD0YfQuNGC0Ywg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPJylcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAodiA9PiB7XG4gICAgICAgICAgaWYgKHYgJiYgdi5yZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVzZXJNYXAuSHR0cFRvQlgodi5yZXN1bHQpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCh2ID0+IHtcbiAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChzYXZlU2VsZih7c2VsZjogdn0pKVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICApXG4gIH1cblxuICBhY2Nlc3MoYWNjZXNzOiBzdHJpbmdbXSwgdGV4dEVycm9yID0gJ9Cd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QvtC70YPRh9C40YLRjCDQv9GA0LDQstCwJykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGlIdHRwQW5zd2VyQlg8Ym9vbGVhbj4gfCB1bmRlZmluZWQ+KHRoaXMudXJsLmFjY2Vzcywge0FDQ0VTUzogYWNjZXNzfSwgdGV4dEVycm9yKVxuICB9XG5cbiAgLy8gZ2V0QWxsKHBhcmFtczogaUJYR2V0UGFyYW0gPSB7fSk6IE9ic2VydmFibGU8aUJYUmVzdFVzZXIgW10gfCB1bmRlZmluZWQ+IHtcbiAgLy8gICBpZiAoIU9iamVjdC5rZXlzKHBhcmFtcykubGVuZ3RoKSB7XG4gIC8vICAgICBwYXJhbXMgPSBjbG9uZSh0aGlzLmRlZi5wYXJhbXMpXG4gIC8vICAgfVxuICAvL1xuICAvLyAgIGNvbnN0IHNhdmVBbGxVc2VyID0gY29tcGFyZShwYXJhbXMsIHRoaXMuZGVmLnBhcmFtcylcbiAgLy8gICByZXR1cm4gdGhpcy51c2VyJC5waXBlKFxuICAvLyAgICAgdGFrZSgxKSxcbiAgLy8gICAgIG1lcmdlTWFwKHYgPT4ge1xuICAvLyAgICAgICBpZiAodi5sb2FkLmFsbCkge1xuICAvLyAgICAgICAgIGlmIChjb21wYXJlKHRoaXMuZGVmLnBhcmFtcywgcGFyYW1zKSkge1xuICAvLyAgICAgICAgICAgcmV0dXJuIG9mKGNsb25lKHYuZGF0YSkpXG4gIC8vICAgICAgICAgfVxuICAvLyAgICAgICB9XG4gIC8vXG4gIC8vICAgICAgIHJldHVybiB0aGlzLmdldEVuZEFycmF5KHBhcmFtcykucGlwZShcbiAgLy8gICAgICAgICB0YWtlKDEpLFxuICAvLyAgICAgICAgIG1hcCh2ID0+IHtcbiAgLy8gICAgICAgICAgIGlmICh2ICYmIHYucmVzdWx0KSB7XG4gIC8vICAgICAgICAgICAgIGxldCBjbCA9IGNsb25lKHYucmVzdWx0KVxuICAvLyAgICAgICAgICAgICByZXR1cm4gdGhpcy5zYXZlQXJyVXNlcihjbClcbiAgLy8gICAgICAgICAgIH1cbiAgLy8gICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgLy8gICAgICAgICB9KSxcbiAgLy8gICAgICAgKVxuICAvLyAgICAgfSksXG4gIC8vICAgICB0YXAodiA9PiB7XG4gIC8vICAgICAgIGlmICh2ICYmIHYubGVuZ3RoICYmIHNhdmVBbGxVc2VyKSB7XG4gIC8vICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChsb2FkQWxsKHtsb2FkOiB0cnVlfSkpXG4gIC8vICAgICAgIH1cbiAgLy8gICAgICAgcGFyYW1zLnN0YXJ0ID0gdGhpcy5kZWYucGFyYW1zLnN0YXJ0XG4gIC8vICAgICB9KVxuICAvLyAgIClcbiAgLy8gfVxuXG4gIHByaXZhdGUgc2F2ZUFyclVzZXIodXNlcnM6IGlCWFJlc3RVc2VySHR0cFtdKSB7XG4gICAgbGV0IHJlc3VsdDogaUJYUmVzdFVzZXIgW10gPSBbXVxuICAgIGZvciAoY29uc3QgdXNlciBvZiB1c2Vycykge1xuICAgICAgcmVzdWx0LnB1c2godGhpcy51c2VyTWFwLkh0dHBUb0JYKHVzZXIpKVxuICAgIH1cbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKHNhdmVBcnIoe2FycjogcmVzdWx0fSkpXG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBzZWFyY2gocGFyYW1zOiBzdHJpbmcgfCBVc2VyRmlsdGVyU2VhcmNoKSB7XG4gICAgaWYgKHR5cGVvZiBwYXJhbXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBwYXJhbXMgPSB7RklORDogcGFyYW1zfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHBhcmFtcy5BQ1RJVkUgIT09ICdib29sZWFuJykge1xuICAgICAgcGFyYW1zLkFDVElWRSA9IHRydWVcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8aUh0dHBBbnN3ZXJCWDxpQlhSZXN0VXNlckh0dHBbXT4+KFxuICAgICAgdGhpcy51cmwuc2VhcmNoLFxuICAgICAgcGFyYW1zLFxuICAgICAgJ9Ch0LXRgNCy0LXRgCDQvdC1INC+0YLQstC10YfQsNC10YIg0L3QsCDQt9Cw0L/RgNC+0YEg0L/QvtC40YHQutCwJ1xuICAgIClcbiAgfVxuXG4gIGZpZWxkcygpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxpSHR0cEFuc3dlckJYPGlCWFJlc3RVc2VySHR0cEZpZWxkPj4odGhpcy51cmwuZmllbGRzKVxuICB9XG5cbiAgdXBkYXRlKHVzZXI6IGlCWFJlc3RVc2VyLCBmaWVsZFVwZGF0ZTogc3RyaW5nW10pIHtcbiAgICBpZiAoZmllbGRVcGRhdGUgJiYgZmllbGRVcGRhdGUubGVuZ3RoKSB7XG4gICAgICBsZXQgc2VuZERhdGE6IGFueSA9IHtcbiAgICAgICAgSUQ6IHVzZXIuSUQsXG4gICAgICB9XG4gICAgICBjb25zdCB1c2VyQlggPSB0aGlzLnVzZXJNYXAuQlh0b0h0dHAodXNlcilcbiAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRVcGRhdGUpIHtcbiAgICAgICAgaWYgKHVzZXJCWFtmaWVsZF0pIHtcbiAgICAgICAgICBzZW5kRGF0YVtmaWVsZF0gPSB1c2VyQlhbZmllbGRdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5lcnJvcign0J7QtNC90L4g0LjQtyDRg9C60LDQt9Cw0L3QvdGL0YUg0L/QvtC70LXQuSDQvtGC0L/RgNCw0LLQu9C10L3QviDQvdC1INCy0LXRgNC90L4nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8aUh0dHBBbnN3ZXJCWDxpQlhSZXN0VXNlckh0dHBbXT4+KFxuICAgICAgICB0aGlzLnVybC51cGRhdGUsIHNlbmREYXRhLFxuICAgICAgICAn0J3QtSDRg9C00LDQu9C+0YHRjCDQvtCx0L3QvtCy0LjRgtGMINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDRgSBJRCcgKyB1c2VyLklEXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc25hY2tCYXIuZXJyb3IoJ9Cd0LUg0YPQutCw0LfQsNC90L4g0L3QuCDQvtC00L3QviDQv9C+0LvQtSDQtNC70Y8g0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjRjyDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8nKVxuICAgICAgcmV0dXJuIG9mKHt9KVxuICAgIH1cbiAgfVxuXG4gIC8vIGdldEVuZEFycmF5KHBhcmFtczogVXNlckZpbHRlciA9IHt9KTogT2JzZXJ2YWJsZTxpSHR0cEFuc3dlckJYPGlCWFJlc3RVc2VySHR0cFtdPiB8IHVuZGVmaW5lZD4ge1xuICAvLyAgIHJldHVybiB0aGlzLmdldChwYXJhbXMpLnBpcGUoXG4gIC8vICAgICBtZXJnZU1hcChpdGVtcyA9PiB7XG4gIC8vICAgICAgIGlmIChpdGVtcyAmJiBpdGVtcy5yZXN1bHQgJiYgdHlwZW9mIGl0ZW1zLnJlc3VsdCA9PT0gJ29iamVjdCcpIHtcbiAgLy8gICAgICAgICBpZiAoaXRlbXMubmV4dCkge1xuICAvLyAgICAgICAgICAgcGFyYW1zLnN0YXJ0ID0gaXRlbXMubmV4dFxuICAvLyAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RW5kQXJyYXkocGFyYW1zKS5waXBlKG1hcCh2RW5kID0+IHtcbiAgLy8gICAgICAgICAgICAgaWYgKHZFbmQgJiYgaXRlbXMucmVzdWx0ICYmIHZFbmQucmVzdWx0KSB7XG4gIC8vICAgICAgICAgICAgICAgcmV0dXJuIHtyZXN1bHQ6IFsuLi5pdGVtcy5yZXN1bHQsIC4uLnZFbmQucmVzdWx0XX1cbiAgLy8gICAgICAgICAgICAgfVxuICAvLyAgICAgICAgICAgICByZXR1cm4gKGl0ZW1zKSA/IGl0ZW1zIDogdW5kZWZpbmVkXG4gIC8vICAgICAgICAgICB9KSlcbiAgLy8gICAgICAgICB9XG4gIC8vICAgICAgICAgcmV0dXJuIG9mKGl0ZW1zKVxuICAvLyAgICAgICB9IGVsc2Uge1xuICAvLyAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpXG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH0pLFxuICAvLyAgIClcbiAgLy8gfVxuXG4gICBwcml2YXRlIHNldERlZlBhcmFtKHBhcmFtczogaUJYR2V0UGFyYW0pIHtcbiAgICBpZiAoIXBhcmFtcy5oYXNPd25Qcm9wZXJ0eSgnQUNUSVZFJykpIHtcbiAgICAgIHBhcmFtcy5BQ1RJVkUgPSB0aGlzLmRlZi5wYXJhbXMuQUNUSVZFXG4gICAgfVxuICAgIGlmIChwYXJhbXMuQUNUSVZFICYmIHBhcmFtcy5BQ1RJVkUgPT09IDIpIHtcbiAgICAgIGRlbGV0ZSBwYXJhbXMuQUNUSVZFXG4gICAgfVxuICAgIGlmICghcGFyYW1zLmhhc093blByb3BlcnR5KCdzdGFydCcpKSB7XG4gICAgICBwYXJhbXMuc3RhcnQgPSB0aGlzLmRlZi5wYXJhbXMuc3RhcnRcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLlVGX0RFUEFSVE1FTlQgJiYgIXBhcmFtcy5VRl9ERVBBUlRNRU5ULmxlbmd0aCkge1xuICAgICAgZGVsZXRlIHBhcmFtcy5VRl9ERVBBUlRNRU5UXG4gICAgfVxuICB9XG59XG5cbiJdfQ==
@@ -0,0 +1,31 @@
1
+ import { Observable } from 'rxjs';
2
+ import BXRestListsElementMap from './map/lists/element';
3
+ import { map } from 'rxjs/operators';
4
+ import { mapResult } from './functions/mapResult';
5
+ class BXRestBase {
6
+ constructor(user, lists) {
7
+ this.user = user;
8
+ this.lists = lists;
9
+ }
10
+ }
11
+ export class BXRest extends new Proxy(BXRestBase, {
12
+ get(target, prop, receiver) {
13
+ const res = Reflect.get(target, prop, receiver);
14
+ console.log('res', res);
15
+ if (res in Observable) {
16
+ let mapRes = new BXRestListsElementMap();
17
+ console.log('res', res);
18
+ return Reflect.get(target, prop, receiver).pipe(
19
+ // @ts-ignore
20
+ map(v => (v && v.result)
21
+ // @ts-ignore
22
+ ? Object.assign(v, { result: v.result.map(i => mapRes.get(i)) })
23
+ : undefined),
24
+ // @ts-ignore
25
+ map(v => mapResult(v)));
26
+ }
27
+ return res;
28
+ }
29
+ }) {
30
+ }
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3Jlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNqQyxPQUFPLHFCQUFxQixNQUFNLHFCQUFxQixDQUFBO0FBQ3ZELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNwQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFHakQsTUFBTSxVQUFVO0lBQ2QsWUFDUyxJQUFnQixFQUNoQixLQUFrQjtRQURsQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFVBQUssR0FBTCxLQUFLLENBQWE7SUFFM0IsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLE1BQU8sU0FBUSxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7SUFDaEQsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUTtRQUN4QixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDL0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDdkIsSUFBSSxHQUFHLElBQUksVUFBVSxFQUFFO1lBQ3JCLElBQUksTUFBTSxHQUFHLElBQUkscUJBQXFCLEVBQUUsQ0FBQTtZQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQTtZQUN2QixPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxJQUFJO1lBQzdDLGFBQWE7WUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUN0QixhQUFhO2dCQUNiLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDO2dCQUM5RCxDQUFDLENBQUMsU0FBUyxDQUNaO1lBQ0QsYUFBYTtZQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN2QixDQUFBO1NBQ0Y7UUFDRCxPQUFPLEdBQUcsQ0FBQTtJQUNaLENBQUM7Q0FDRixDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHsgQlhSZXN0VXNlciB9IGZyb20gJy4vcmVxdWVzdC91c2VyJ1xyXG5pbXBvcnQgQlhSZXN0TGlzdHMgZnJvbSAnLi9yZXF1ZXN0L2xpc3RzJ1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcydcclxuaW1wb3J0IEJYUmVzdExpc3RzRWxlbWVudE1hcCBmcm9tICcuL21hcC9saXN0cy9lbGVtZW50J1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcclxuaW1wb3J0IHsgbWFwUmVzdWx0IH0gZnJvbSAnLi9mdW5jdGlvbnMvbWFwUmVzdWx0J1xyXG5cclxuXHJcbmNsYXNzIEJYUmVzdEJhc2Uge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHVzZXI6IEJYUmVzdFVzZXIsXHJcbiAgICBwdWJsaWMgbGlzdHM6IEJYUmVzdExpc3RzXHJcbiAgKSB7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQlhSZXN0IGV4dGVuZHMgbmV3IFByb3h5KEJYUmVzdEJhc2UsIHtcclxuICBnZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikge1xyXG4gICAgY29uc3QgcmVzID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcilcclxuICAgIGNvbnNvbGUubG9nKCdyZXMnLCByZXMpXHJcbiAgICBpZiAocmVzIGluIE9ic2VydmFibGUpIHtcclxuICAgICAgbGV0IG1hcFJlcyA9IG5ldyBCWFJlc3RMaXN0c0VsZW1lbnRNYXAoKVxyXG4gICAgICBjb25zb2xlLmxvZygncmVzJywgcmVzKVxyXG4gICAgICByZXR1cm4gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikucGlwZShcclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgbWFwKHYgPT4gKHYgJiYgdi5yZXN1bHQpXHJcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICA/IE9iamVjdC5hc3NpZ24odiwge3Jlc3VsdDogdi5yZXN1bHQubWFwKGkgPT4gbWFwUmVzLmdldChpKSl9KVxyXG4gICAgICAgICAgOiB1bmRlZmluZWRcclxuICAgICAgICApLFxyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICBtYXAodiA9PiBtYXBSZXN1bHQodikpXHJcbiAgICAgIClcclxuICAgIH1cclxuICAgIHJldHVybiByZXNcclxuICB9XHJcbn0pIHtcclxufVxyXG4iXX0=
@@ -0,0 +1,174 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { time } from '../consts/time';
3
+ // import { environment } from 'bx-rest/environments/environment'
4
+ import { DateTime } from 'luxon';
5
+ import * as i0 from "@angular/core";
6
+ export class BaseServices {
7
+ toStr(val) {
8
+ return (val) ? String(val) : '';
9
+ }
10
+ toNum(val) {
11
+ return (val && Number(val)) ? Number(val) : 0;
12
+ }
13
+ toDate(val, format, opt) {
14
+ if (val instanceof Date) {
15
+ return val;
16
+ }
17
+ else if (typeof val == 'string') {
18
+ if (format) {
19
+ if (opt) {
20
+ return DateTime.fromFormat(val, format, opt).toJSDate();
21
+ }
22
+ return DateTime.fromFormat(val, format).toJSDate();
23
+ }
24
+ else {
25
+ return new Date(val);
26
+ }
27
+ }
28
+ else if (typeof val == 'number') {
29
+ return new Date(val);
30
+ }
31
+ console.error('Wrong date format', val, format);
32
+ throw 'Wrong date format';
33
+ }
34
+ getBXStrTime(date) {
35
+ return this.toISOStringWithTimezone(date);
36
+ }
37
+ toISOStringWithTimezone(date) {
38
+ const tzOffset = -date.getTimezoneOffset();
39
+ const diff = tzOffset >= 0 ? '+' : '-';
40
+ const pad = (n) => `${Math.floor(Math.abs(n))}`.padStart(2, '0');
41
+ return date.getFullYear() +
42
+ '-' + pad(date.getMonth() + 1) +
43
+ '-' + pad(date.getDate()) +
44
+ 'T' + pad(date.getHours()) +
45
+ ':' + pad(date.getMinutes()) +
46
+ ':' + pad(date.getSeconds()) +
47
+ diff + pad(tzOffset / 60) +
48
+ ':' + pad(tzOffset % 60);
49
+ }
50
+ ;
51
+ toBool(val) {
52
+ switch (typeof val) {
53
+ case 'string':
54
+ val = val.toLowerCase();
55
+ if (val === 'n' || val === 'y') { // битриксовые понятия о bool
56
+ return val === 'y';
57
+ }
58
+ else if (val === 'true' || val === 'false') { // битриксовые понятия о bool
59
+ return val === 'true';
60
+ }
61
+ else {
62
+ return false;
63
+ }
64
+ default:
65
+ return Boolean(val);
66
+ }
67
+ }
68
+ toBXYorN(val) {
69
+ return (val) ? 'Y' : 'N';
70
+ }
71
+ typeof(val) {
72
+ return typeof val;
73
+ }
74
+ typeDefClass(val) {
75
+ if (val) {
76
+ if (val instanceof Date) {
77
+ return 'date';
78
+ }
79
+ return undefined;
80
+ }
81
+ else {
82
+ return null;
83
+ }
84
+ }
85
+ toJSON(val) {
86
+ return JSON.stringify(val);
87
+ }
88
+ fromJSON(val) {
89
+ return JSON.parse(val);
90
+ }
91
+ prepareBaseAddress(url, add = '') {
92
+ if (url.search('https://') !== 0 && url.search('http://')) {
93
+ url = 'https://' + url;
94
+ }
95
+ if (url.lastIndexOf('/') !== (url.length - 1)) {
96
+ url = url + '/';
97
+ }
98
+ url = url + add;
99
+ return url;
100
+ }
101
+ getHomeAddress() {
102
+ // return this.prepareBaseAddress(environment.urls.home)
103
+ return this.prepareBaseAddress('b24.trace-studio.com');
104
+ }
105
+ dateDiff(a, b) {
106
+ return new Date(a.valueOf() - b.valueOf());
107
+ }
108
+ dateDiffInDays(a, b) {
109
+ return Math.floor(this.dateDiff(a, b).valueOf() / time.oneDayMilliseconds);
110
+ }
111
+ getBase64File(file) {
112
+ return new Promise((resolve, reject) => {
113
+ const reader = new FileReader();
114
+ reader.readAsDataURL(file);
115
+ reader.onload = () => resolve(reader.result);
116
+ reader.onerror = error => reject(error);
117
+ });
118
+ }
119
+ async getBase64FileLikeStr(file) {
120
+ let result = await this.getBase64File(file);
121
+ if (typeof result === 'string') {
122
+ let split = result.split(',');
123
+ return {
124
+ header: split[0],
125
+ val: split[1]
126
+ };
127
+ }
128
+ return undefined;
129
+ }
130
+ sumArray(numbers) {
131
+ return numbers.reduce((a, b) => {
132
+ return a + b;
133
+ });
134
+ }
135
+ isItTheSameDate(date1, date2) {
136
+ return date1.getDate() === date2.getDate()
137
+ && date1.getMonth() === date2.getMonth()
138
+ && date1.getFullYear() === date2.getFullYear();
139
+ }
140
+ toUnix(date) {
141
+ return Math.floor(date.valueOf() / 1000);
142
+ }
143
+ arrSum(x) {
144
+ let s = 0;
145
+ for (let i = 0; i < x.length; i++) {
146
+ s += x[i];
147
+ }
148
+ return s;
149
+ }
150
+ getBaseUrlHttps(url, component = false) {
151
+ if (component) {
152
+ return encodeURI(this.cropUrl(url) + '/');
153
+ }
154
+ else {
155
+ return encodeURI('https://' + this.cropUrl(url) + '/');
156
+ }
157
+ }
158
+ cropUrl(url) {
159
+ url = (url) ? url.replace('https://', '') : '';
160
+ url = (url) ? url.replace('http://', '') : '';
161
+ url = (url) ? url.replace('https:', '') : '';
162
+ url = (url) ? url.replace('http:', '') : '';
163
+ return url;
164
+ }
165
+ }
166
+ BaseServices.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BaseServices, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
167
+ BaseServices.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BaseServices, providedIn: 'root' });
168
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BaseServices, decorators: [{
169
+ type: Injectable,
170
+ args: [{
171
+ providedIn: 'root'
172
+ }]
173
+ }] });
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3NlcnZpY2VzL2Jhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDckMsaUVBQWlFO0FBQ2pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUE7O0FBTWhDLE1BQU0sT0FBTyxZQUFZO0lBRXJCLEtBQUssQ0FBQyxHQUFRO1FBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUNuQyxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQVE7UUFDVixPQUFPLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqRCxDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQTJCLEVBQUUsTUFBZSxFQUFFLEdBQXFCO1FBQ3RFLElBQUksR0FBRyxZQUFZLElBQUksRUFBRTtZQUNyQixPQUFPLEdBQUcsQ0FBQTtTQUNiO2FBQU0sSUFBSSxPQUFPLEdBQUcsSUFBSSxRQUFRLEVBQUU7WUFDL0IsSUFBSSxNQUFNLEVBQUU7Z0JBQ1IsSUFBSSxHQUFHLEVBQUU7b0JBQ0wsT0FBTyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUE7aUJBQzFEO2dCQUNELE9BQU8sUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUE7YUFDckQ7aUJBQU07Z0JB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QUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUM1QyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUMzQyxPQUFPLEdBQUcsQ0FBQTtJQUNkLENBQUM7O3lHQWhMUSxZQUFZOzZHQUFaLFlBQVksY0FGVCxNQUFNOzJGQUVULFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcbmltcG9ydCB7IHRpbWUgfSBmcm9tICcuLi9jb25zdHMvdGltZSdcclxuLy8gaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tICdieC1yZXN0L2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCdcclxuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tICdsdXhvbidcclxuaW1wb3J0IHsgRGF0ZVRpbWVPcHRpb25zIH0gZnJvbSAnbHV4b24vc3JjL2RhdGV0aW1lJ1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYXNlU2VydmljZXMge1xyXG5cclxuICAgIHRvU3RyKHZhbDogYW55KTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gKHZhbCkgPyBTdHJpbmcodmFsKSA6ICcnXHJcbiAgICB9XHJcblxyXG4gICAgdG9OdW0odmFsOiBhbnkpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiAodmFsICYmIE51bWJlcih2YWwpKSA/IE51bWJlcih2YWwpIDogMFxyXG4gICAgfVxyXG5cclxuICAgIHRvRGF0ZSh2YWw6IG51bWJlciB8IHN0cmluZyB8IERhdGUsIGZvcm1hdD86IHN0cmluZywgb3B0PzogRGF0ZVRpbWVPcHRpb25zKTogRGF0ZSB7XHJcbiAgICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbFxyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoZm9ybWF0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERhdGVUaW1lLmZyb21Gb3JtYXQodmFsLCBmb3JtYXQsIG9wdCkudG9KU0RhdGUoKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIERhdGVUaW1lLmZyb21Gb3JtYXQodmFsLCBmb3JtYXQpLnRvSlNEYXRlKClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWwpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbClcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignV3JvbmcgZGF0ZSBmb3JtYXQnLCB2YWwsIGZvcm1hdClcclxuICAgICAgICB0aHJvdyAnV3JvbmcgZGF0ZSBmb3JtYXQnXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QlhTdHJUaW1lKGRhdGU6IERhdGUpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvSVNPU3RyaW5nV2l0aFRpbWV6b25lKGRhdGUpXHJcbiAgICB9XHJcblxyXG4gICAgdG9JU09TdHJpbmdXaXRoVGltZXpvbmUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgdHpPZmZzZXQgPSAtZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpXHJcbiAgICAgICAgY29uc3QgZGlmZiA9IHR6T2Zmc2V0ID49IDAgPyAnKycgOiAnLSdcclxuICAgICAgICBjb25zdCBwYWQgPSAobjogbnVtYmVyKSA9PiBgJHtNYXRoLmZsb29yKE1hdGguYWJzKG4pKX1gLnBhZFN0YXJ0KDIsICcwJylcclxuICAgICAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpICtcclxuICAgICAgICAgICAgJy0nICsgcGFkKGRhdGUuZ2V0TW9udGgoKSArIDEpICtcclxuICAgICAgICAgICAgJy0nICsgcGFkKGRhdGUuZ2V0RGF0ZSgpKSArXHJcbiAgICAgICAgICAgICdUJyArIHBhZChkYXRlLmdldEhvdXJzKCkpICtcclxuICAgICAgICAgICAgJzonICsgcGFkKGRhdGUuZ2V0TWludXRlcygpKSArXHJcbiAgICAgICAgICAgICc6JyArIHBhZChkYXRlLmdldFNlY29uZHMoKSkgK1xyXG4gICAgICAgICAgICBkaWZmICsgcGFkKHR6T2Zmc2V0IC8gNjApICtcclxuICAgICAgICAgICAgJzonICsgcGFkKHR6T2Zmc2V0ICUgNjApXHJcbiAgICB9O1xyXG5cclxuICAgIHRvQm9vbCh2YWw6IGFueSkge1xyXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbCkge1xyXG4gICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxyXG4gICAgICAgICAgICAgICAgdmFsID0gdmFsLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgIGlmICh2YWwgPT09ICduJyB8fCB2YWwgPT09ICd5JykgeyAvLyDQsdC40YLRgNC40LrRgdC+0LLRi9C1INC/0L7QvdGP0YLQuNGPINC+IGJvb2xcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsID09PSAneSdcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsID09PSAndHJ1ZScgfHwgdmFsID09PSAnZmFsc2UnKSB7IC8vINCx0LjRgtGA0LjQutGB0L7QstGL0LUg0L/QvtC90Y/RgtC40Y8g0L4gYm9vbFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWwgPT09ICd0cnVlJ1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBCb29sZWFuKHZhbClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdG9CWFlvck4odmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgcmV0dXJuICh2YWwpID8gJ1knIDogJ04nXHJcbiAgICB9XHJcblxyXG4gICAgdHlwZW9mKHZhbDogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWxcclxuICAgIH1cclxuXHJcbiAgICB0eXBlRGVmQ2xhc3ModmFsOiBvYmplY3QpOiB1bmRlZmluZWQgfCBudWxsIHwgJ2RhdGUnIHtcclxuICAgICAgICBpZiAodmFsKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RhdGUnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRvSlNPTih2YWw6IG9iamVjdCkge1xyXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWwpXHJcbiAgICB9XHJcblxyXG4gICAgZnJvbUpTT048VD4odmFsOiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh2YWwpXHJcbiAgICB9XHJcblxyXG4gICAgcHJlcGFyZUJhc2VBZGRyZXNzKHVybDogc3RyaW5nLCBhZGQ6IHN0cmluZyA9ICcnKSB7XHJcbiAgICAgICAgaWYgKHVybC5zZWFyY2goJ2h0dHBzOi8vJykgIT09IDAgJiYgdXJsLnNlYXJjaCgnaHR0cDovLycpKSB7XHJcbiAgICAgICAgICAgIHVybCA9ICdodHRwczovLycgKyB1cmxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh1cmwubGFzdEluZGV4T2YoJy8nKSAhPT0gKHVybC5sZW5ndGggLSAxKSkge1xyXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyAnLydcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHVybCA9IHVybCArIGFkZFxyXG5cclxuICAgICAgICByZXR1cm4gdXJsXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SG9tZUFkZHJlc3MoKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIHRoaXMucHJlcGFyZUJhc2VBZGRyZXNzKGVudmlyb25tZW50LnVybHMuaG9tZSlcclxuICAgICAgICByZXR1cm4gdGhpcy5wcmVwYXJlQmFzZUFkZHJlc3MoJ2IyNC50cmFjZS1zdHVkaW8uY29tJylcclxuICAgIH1cclxuXHJcbiAgICBkYXRlRGlmZihhOiBEYXRlLCBiOiBEYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGEudmFsdWVPZigpIC0gYi52YWx1ZU9mKCkpXHJcbiAgICB9XHJcblxyXG4gICAgZGF0ZURpZmZJbkRheXMoYTogRGF0ZSwgYjogRGF0ZSkge1xyXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMuZGF0ZURpZmYoYSwgYikudmFsdWVPZigpIC8gdGltZS5vbmVEYXlNaWxsaXNlY29uZHMpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEJhc2U2NEZpbGUoZmlsZTogRmlsZSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcclxuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSlcclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdClcclxuICAgICAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSBlcnJvciA9PiByZWplY3QoZXJyb3IpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRCYXNlNjRGaWxlTGlrZVN0cihmaWxlOiBGaWxlKTogUHJvbWlzZTx7IGhlYWRlcjogc3RyaW5nLCB2YWw6IHN0cmluZyB9IHwgdW5kZWZpbmVkPiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0QmFzZTY0RmlsZShmaWxlKVxyXG4gICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBsZXQgc3BsaXQgPSByZXN1bHQuc3BsaXQoJywnKVxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVyOiBzcGxpdFswXSxcclxuICAgICAgICAgICAgICAgIHZhbDogc3BsaXRbMV1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICB9XHJcblxyXG4gICAgc3VtQXJyYXkobnVtYmVyczogbnVtYmVyW10pIHtcclxuICAgICAgICByZXR1cm4gbnVtYmVycy5yZWR1Y2UoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGEgKyBiO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgaXNJdFRoZVNhbWVEYXRlKGRhdGUxOiBEYXRlLCBkYXRlMjogRGF0ZSkge1xyXG4gICAgICAgIHJldHVybiBkYXRlMS5nZXREYXRlKCkgPT09IGRhdGUyLmdldERhdGUoKVxyXG4gICAgICAgICAgICAmJiBkYXRlMS5nZXRNb250aCgpID09PSBkYXRlMi5nZXRNb250aCgpXHJcbiAgICAgICAgICAgICYmIGRhdGUxLmdldEZ1bGxZZWFyKCkgPT09IGRhdGUyLmdldEZ1bGxZZWFyKClcclxuICAgIH1cclxuXHJcbiAgICB0b1VuaXgoZGF0ZTogRGF0ZSkge1xyXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKGRhdGUudmFsdWVPZigpIC8gMTAwMClcclxuICAgIH1cclxuXHJcbiAgICBhcnJTdW0oeDogbnVtYmVyW10pIHtcclxuICAgICAgICBsZXQgcyA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgKz0geFtpXVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc1xyXG4gICAgfVxyXG5cclxuICAgIGdldEJhc2VVcmxIdHRwcyh1cmw6IHN0cmluZywgY29tcG9uZW50ID0gZmFsc2UpIHtcclxuICAgICAgICBpZiAoY29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVVUkkodGhpcy5jcm9wVXJsKHVybCkgKyAnLycpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVVUkkoJ2h0dHBzOi8vJyArIHRoaXMuY3JvcFVybCh1cmwpICsgJy8nKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY3JvcFVybCh1cmw6IHN0cmluZykge1xyXG4gICAgICAgIHVybCA9ICh1cmwpID8gdXJsLnJlcGxhY2UoJ2h0dHBzOi8vJywgJycpIDogJydcclxuICAgICAgICB1cmwgPSAodXJsKSA/IHVybC5yZXBsYWNlKCdodHRwOi8vJywgJycpIDogJydcclxuICAgICAgICB1cmwgPSAodXJsKSA/IHVybC5yZXBsYWNlKCdodHRwczonLCAnJykgOiAnJ1xyXG4gICAgICAgIHVybCA9ICh1cmwpID8gdXJsLnJlcGxhY2UoJ2h0dHA6JywgJycpIDogJydcclxuICAgICAgICByZXR1cm4gdXJsXHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,128 @@
1
+ import { throwError, take, mergeMap, forkJoin } from 'rxjs';
2
+ import { catchError, map } from 'rxjs/operators';
3
+ import { Injectable } from '@angular/core';
4
+ import clone from 'just-clone';
5
+ import BaseHttpServices from '../../services/http/http';
6
+ import flatten from 'just-flatten-it';
7
+ import * as i0 from "@angular/core";
8
+ export default class HttpBXServices extends BaseHttpServices {
9
+ timeNowOnServer() {
10
+ return this.httpGet('server.time').pipe(map(v => {
11
+ if (v && v.result) {
12
+ return new Date(v.result);
13
+ }
14
+ return undefined;
15
+ }));
16
+ }
17
+ /**
18
+ * Это пиздец а не метод
19
+ * @param param
20
+ */
21
+ branch(param) {
22
+ let prepareParam = Object.entries(this.prepareBatch(param));
23
+ const size = 50; // больше не отдаст
24
+ let subarray = []; //массив в который будет выведен результат.
25
+ for (let i = 0; i < Math.ceil(prepareParam.length / size); i++) {
26
+ subarray[i] = prepareParam.slice((i * size), (i * size) + size);
27
+ }
28
+ return forkJoin(subarray.map(i => {
29
+ return this.httpPost('batch.json', {
30
+ halt: 0,
31
+ cmd: Object.assign({}, ...i.map(x => {
32
+ return { [x[0]]: x[1] };
33
+ }))
34
+ });
35
+ }));
36
+ }
37
+ prepareBatch(param) {
38
+ let res = Object.keys(param).reduce((obj, key) => {
39
+ obj[key] = '';
40
+ return obj;
41
+ }, {});
42
+ for (let key in param) {
43
+ if (typeof key === 'string' || typeof key === 'number' && param[key].param) {
44
+ res[key] = param[key].name + '?' + this.getHttpParamsGet(param[key].param).toString();
45
+ }
46
+ }
47
+ return res;
48
+ }
49
+ mapBranchResult(res) {
50
+ return Object.assign([], ...res.map(i => (i.result && i.result.result) ? i.result.result : undefined));
51
+ }
52
+ mapBranchResultWithoutKey(res) {
53
+ return flatten(Object.assign([], ...res.map(i => (i.result && i.result.result) ? i.result.result : undefined)));
54
+ }
55
+ post(name, params = {}, textError = '', settings = this.defSettings) {
56
+ return this.httpPost(this.getNameMethod(name), params, textError, settings);
57
+ }
58
+ get(name, params = {}, textError = '', settings = this.defSettings) {
59
+ return this.httpGet(this.getNameMethod(name), params, textError, settings);
60
+ }
61
+ httpPost(url, params = {}, textError = '', settings = this.defSettings) {
62
+ return this.session.getAuthParams().pipe(mergeMap(auth => {
63
+ if (auth) {
64
+ const paramsClone = clone(params);
65
+ paramsClone[this.session.getKeyAuth()] = auth;
66
+ return this.session.getBaseUrl().pipe(mergeMap(v => {
67
+ if (v) {
68
+ return this.http.post(this.prepareBaseAddress(v) + url, this.getHttpParamsPost(paramsClone, new FormData(), false, [], settings))
69
+ .pipe(take(1), catchError(err => {
70
+ if (!textError.length && err.error.error_description) {
71
+ textError = err.error.error_description;
72
+ }
73
+ this.snackBar.error('Ошибка: ' + textError);
74
+ return throwError(() => err);
75
+ }));
76
+ }
77
+ return throwError(() => 'get base url error');
78
+ }));
79
+ }
80
+ else {
81
+ this.snackBar.error('Error: Auth not get');
82
+ return throwError(() => 'auth not get');
83
+ }
84
+ }));
85
+ }
86
+ httpGet(url, params = {}, textError = '', settings = this.defSettings) {
87
+ return this.session.getAuthParams().pipe(mergeMap(auth => {
88
+ if (auth) {
89
+ if (params === null) {
90
+ params = {};
91
+ }
92
+ const paramsClone = clone(params);
93
+ paramsClone[this.session.getKeyAuth()] = auth;
94
+ let options = {
95
+ params: this.getHttpParamsGet(paramsClone)
96
+ };
97
+ return this.session.getBaseUrl().pipe(mergeMap(v => {
98
+ if (v) {
99
+ return this.http.get(this.prepareBaseAddress(v) + url, options).pipe(take(1), catchError(err => {
100
+ if (!textError.length && err.error.error_description) {
101
+ textError = err.error.error_description;
102
+ }
103
+ this.snackBar.error('Ошибка: ' + textError);
104
+ return throwError(() => err);
105
+ }));
106
+ }
107
+ return throwError(() => 'get base url error');
108
+ }));
109
+ }
110
+ else {
111
+ this.snackBar.error('Error: Auth not get');
112
+ return throwError(() => 'auth not get');
113
+ }
114
+ }));
115
+ }
116
+ getNameMethod(arr) {
117
+ return arr.join('.');
118
+ }
119
+ }
120
+ HttpBXServices.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: HttpBXServices, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
121
+ HttpBXServices.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: HttpBXServices, providedIn: 'root' });
122
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: HttpBXServices, decorators: [{
123
+ type: Injectable,
124
+ args: [{
125
+ providedIn: 'root'
126
+ }]
127
+ }] });
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSHR0cEJYLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYngtcmVzdC9zcmMvc2VydmljZXMvaHR0cC9IdHRwQlgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUN2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ2hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDMUMsT0FBTyxLQUFLLE1BQU0sWUFBWSxDQUFBO0FBRTlCLE9BQU8sZ0JBQWdCLE1BQU0sMEJBQTBCLENBQUE7QUFNdkQsT0FBTyxPQUFPLE1BQU0saUJBQWlCLENBQUE7O0FBS3JDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sY0FBZSxTQUFRLGdCQUFnQjtJQUVqRCxlQUFlO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBb0MsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUN4RSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFO2dCQUNqQixPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQTthQUMxQjtZQUNELE9BQU8sU0FBUyxDQUFBO1FBQ2xCLENBQUMsQ0FBQyxDQUNILENBQUE7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ00sTUFBTSxDQUFPLEtBQXlEO1FBQzdFLElBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQVMsSUFBSSxDQUFDLFlBQVksQ0FBSSxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQ3RFLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQSxDQUFDLG1CQUFtQjtRQUNuQyxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUEsQ0FBQywyQ0FBMkM7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Y0FBYzsrR0FBZCxjQUFjLGNBRnJCLE1BQU07MkZBRUMsY0FBYztrQkFIbEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yLCB0YWtlLCBtZXJnZU1hcCwgZm9ya0pvaW4gfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCBjbG9uZSBmcm9tICdqdXN0LWNsb25lJ1xuaW1wb3J0IHsgaUh0dHBQYXJhbVNldHRpbmdzIH0gZnJvbSAnLi4vLi4vdHlwaWZpY2F0aW9uL3Jlc3Qvc2V0dGluZ3MnXG5pbXBvcnQgQmFzZUh0dHBTZXJ2aWNlcyBmcm9tICcuLi8uLi9zZXJ2aWNlcy9odHRwL2h0dHAnXG5pbXBvcnQge1xuICBpQmF0Y2hSZXF1ZXN0QW5zd2VyLCBpQmF0Y2hSZXF1ZXN0UGFyYW0sXG4gIGlCYXRjaFJlcXVlc3RQYXJhbUFycixcbiAgaUJhdGNoUmVxdWVzdFBhcmFtSHR0cCwga2V5QmF0Y2hcbn0gZnJvbSAnLi4vLi4vdHlwaWZpY2F0aW9uL3Jlc3QvYmF0Y2gvYmF0Y2hSZXF1ZXN0UGFyYW0nXG5pbXBvcnQgZmxhdHRlbiBmcm9tICdqdXN0LWZsYXR0ZW4taXQnXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSHR0cEJYU2VydmljZXMgZXh0ZW5kcyBCYXNlSHR0cFNlcnZpY2VzIHtcblxuICBvdmVycmlkZSB0aW1lTm93T25TZXJ2ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cEdldDx7IHJlc3VsdD86IERhdGUsIGVycm9yPzogc3RyaW5nIH0+KCdzZXJ2ZXIudGltZScpLnBpcGUoXG4gICAgICBtYXAodiA9PiB7XG4gICAgICAgIGlmICh2ICYmIHYucmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHYucmVzdWx0KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgIH0pLFxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiDQrdGC0L4g0L/QuNC30LTQtdGGINCwINC90LUg0LzQtdGC0L7QtFxuICAgKiBAcGFyYW0gcGFyYW1cbiAgICovXG4gIG92ZXJyaWRlIGJyYW5jaDxULCBBPihwYXJhbTogaUJhdGNoUmVxdWVzdFBhcmFtQXJyPFQ+IHwgaUJhdGNoUmVxdWVzdFBhcmFtPFQ+W10pOiBPYnNlcnZhYmxlPGlCYXRjaFJlcXVlc3RBbnN3ZXI8QT5bXSB8IHVuZGVmaW5lZD4ge1xuICAgIGxldCBwcmVwYXJlUGFyYW0gPSBPYmplY3QuZW50cmllczxzdHJpbmc+KHRoaXMucHJlcGFyZUJhdGNoPFQ+KHBhcmFtKSlcbiAgICBjb25zdCBzaXplID0gNTAgLy8g0LHQvtC70YzRiNC1INC90LUg0L7RgtC00LDRgdGCXG4gICAgbGV0IHN1YmFycmF5ID0gW10gLy/QvNCw0YHRgdC40LIg0LIg0LrQvtGC0L7RgNGL0Lkg0LHRg9C00LXRgiDQstGL0LLQtdC00LXQvSDRgNC10LfRg9C70YzRgtCw0YIuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLmNlaWwocHJlcGFyZVBhcmFtLmxlbmd0aCAvIHNpemUpOyBpKyspIHtcbiAgICAgIHN1YmFycmF5W2ldID0gcHJlcGFyZVBhcmFtLnNsaWNlKChpICogc2l6ZSksIChpICogc2l6ZSkgKyBzaXplKVxuICAgIH1cblxuICAgIHJldHVybiBmb3JrSm9pbihcbiAgICAgIHN1YmFycmF5Lm1hcChpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFBvc3QoJ2JhdGNoLmpzb24nLCB7XG4gICAgICAgICAgaGFsdDogMCxcbiAgICAgICAgICBjbWQ6IE9iamVjdC5hc3NpZ24oe30sIC4uLmkubWFwKHggPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtbeFswXV06IHhbMV19XG4gICAgICAgICAgfSkpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgICkgYXMgT2JzZXJ2YWJsZTxpQmF0Y2hSZXF1ZXN0QW5zd2VyPEE+W10+XG4gIH1cblxuICBvdmVycmlkZSBwcmVwYXJlQmF0Y2g8VD4ocGFyYW06IGlCYXRjaFJlcXVlc3RQYXJhbUFycjxUPiB8IGlCYXRjaFJlcXVlc3RQYXJhbTxUPltdKTogaUJhdGNoUmVxdWVzdFBhcmFtSHR0cCB7XG4gICAgbGV0IHJlczogaUJhdGNoUmVxdWVzdFBhcmFtSHR0cCA9IE9iamVjdC5rZXlzKHBhcmFtKS5yZWR1Y2UoXG4gICAgICAob2JqLCBrZXkpID0+IHtcbiAgICAgICAgb2JqW2tleV0gPSAnJztcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgIH0sXG4gICAgICB7fSBhcyBpQmF0Y2hSZXF1ZXN0UGFyYW1IdHRwXG4gICAgKTtcbiAgICBmb3IgKGxldCBrZXkgaW4gcGFyYW0pIHtcbiAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyB8fCB0eXBlb2Yga2V5ID09PSAnbnVtYmVyJyAmJiBwYXJhbVtrZXldLnBhcmFtKSB7XG4gICAgICAgIHJlc1trZXldID0gcGFyYW1ba2V5XS5uYW1lICsgJz8nICsgdGhpcy5nZXRIdHRwUGFyYW1zR2V0KHBhcmFtW2tleV0ucGFyYW0pLnRvU3RyaW5nKClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc1xuICB9XG5cbiAgb3ZlcnJpZGUgbWFwQnJhbmNoUmVzdWx0PFQ+KHJlczogaUJhdGNoUmVxdWVzdEFuc3dlcjxUPltdKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oW10sIC4uLnJlcy5tYXAoaSA9PiAoaS5yZXN1bHQgJiYgaS5yZXN1bHQucmVzdWx0KSA/IGkucmVzdWx0LnJlc3VsdCA6IHVuZGVmaW5lZCkpIGFzIHtcbiAgICAgIFtrZXk6IGtleUJhdGNoXTogVFxuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIG1hcEJyYW5jaFJlc3VsdFdpdGhvdXRLZXk8VD4ocmVzOiBpQmF0Y2hSZXF1ZXN0QW5zd2VyPFQ+W10pOiBUW10ge1xuICAgIHJldHVybiBmbGF0dGVuPFQ+KE9iamVjdC5hc3NpZ24oW10sIC4uLnJlcy5tYXAoaSA9PiAoaS5yZXN1bHQgJiYgaS5yZXN1bHQucmVzdWx0KSA/IGkucmVzdWx0LnJlc3VsdCA6IHVuZGVmaW5lZCkpKVxuICB9XG5cbiAgb3ZlcnJpZGUgcG9zdDxUPihuYW1lOiBzdHJpbmdbXSxcbiAgICAgICAgICAgICAgICAgICBwYXJhbXM6IGFueSA9IHt9LFxuICAgICAgICAgICAgICAgICAgIHRleHRFcnJvciA9ICcnLFxuICAgICAgICAgICAgICAgICAgIHNldHRpbmdzOiBpSHR0cFBhcmFtU2V0dGluZ3MgPSB0aGlzLmRlZlNldHRpbmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFBvc3Q8VD4odGhpcy5nZXROYW1lTWV0aG9kKG5hbWUpLCBwYXJhbXMsIHRleHRFcnJvciwgc2V0dGluZ3MpXG4gIH1cblxuICBvdmVycmlkZSBnZXQ8VD4obmFtZTogc3RyaW5nW10sXG4gICAgICAgICAgICAgICAgICBwYXJhbXM6IGFueSA9IHt9LFxuICAgICAgICAgICAgICAgICAgdGV4dEVycm9yID0gJycsXG4gICAgICAgICAgICAgICAgICBzZXR0aW5nczogaUh0dHBQYXJhbVNldHRpbmdzID0gdGhpcy5kZWZTZXR0aW5ncykge1xuICAgIHJldHVybiB0aGlzLmh0dHBHZXQ8VD4odGhpcy5nZXROYW1lTWV0aG9kKG5hbWUpLCBwYXJhbXMsIHRleHRFcnJvciwgc2V0dGluZ3MpXG4gIH1cblxuICBvdmVycmlkZSBodHRwUG9zdDxUPih1cmw6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBhbnkgPSB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgdGV4dEVycm9yID0gJycsXG4gICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzOiBpSHR0cFBhcmFtU2V0dGluZ3MgPSB0aGlzLmRlZlNldHRpbmdzXG4gICk6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb24uZ2V0QXV0aFBhcmFtcygpLnBpcGUoXG4gICAgICBtZXJnZU1hcChhdXRoID0+IHtcbiAgICAgICAgaWYgKGF1dGgpIHtcbiAgICAgICAgICBjb25zdCBwYXJhbXNDbG9uZSA9IGNsb25lKHBhcmFtcylcbiAgICAgICAgICBwYXJhbXNDbG9uZVt0aGlzLnNlc3Npb24uZ2V0S2V5QXV0aCgpXSA9IGF1dGhcbiAgICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdldEJhc2VVcmwoKS5waXBlKG1lcmdlTWFwKHYgPT4ge1xuICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFQgfCB1bmRlZmluZWQ+KFxuICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZUJhc2VBZGRyZXNzKHYpICsgdXJsLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0SHR0cFBhcmFtc1Bvc3QocGFyYW1zQ2xvbmUsIG5ldyBGb3JtRGF0YSgpLCBmYWxzZSwgW10sIHNldHRpbmdzKSlcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGV4dEVycm9yLmxlbmd0aCAmJiBlcnIuZXJyb3IuZXJyb3JfZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0RXJyb3IgPSBlcnIuZXJyb3IuZXJyb3JfZGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIuZXJyb3IoJ9Ce0YjQuNCx0LrQsDogJyArIHRleHRFcnJvcilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyKVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiAnZ2V0IGJhc2UgdXJsIGVycm9yJylcbiAgICAgICAgICB9KSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLmVycm9yKCdFcnJvcjogQXV0aCBub3QgZ2V0JylcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiAnYXV0aCBub3QgZ2V0JylcbiAgICAgICAgfVxuICAgICAgfSkpXG4gIH1cblxuICBvdmVycmlkZSBodHRwR2V0PFQ+KFxuICAgIHVybDogc3RyaW5nLFxuICAgIHBhcmFtczogYW55ID0ge30sXG4gICAgdGV4dEVycm9yID0gJycsXG4gICAgc2V0dGluZ3M6IGlIdHRwUGFyYW1TZXR0aW5ncyA9IHRoaXMuZGVmU2V0dGluZ3NcbiAgKTogT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRBdXRoUGFyYW1zKCkucGlwZShcbiAgICAgIG1lcmdlTWFwKGF1dGggPT4ge1xuICAgICAgICBpZiAoYXV0aCkge1xuICAgICAgICAgIGlmIChwYXJhbXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IHt9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHBhcmFtc0Nsb25lID0gY2xvbmUocGFyYW1zKVxuICAgICAgICAgIHBhcmFtc0Nsb25lW3RoaXMuc2Vzc2lvbi5nZXRLZXlBdXRoKCldID0gYXV0aFxuICAgICAgICAgIGxldCBvcHRpb25zID0ge1xuICAgICAgICAgICAgcGFyYW1zOiB0aGlzLmdldEh0dHBQYXJhbXNHZXQocGFyYW1zQ2xvbmUpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRCYXNlVXJsKCkucGlwZShcbiAgICAgICAgICAgIG1lcmdlTWFwKHYgPT4ge1xuICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFQ+KHRoaXMucHJlcGFyZUJhc2VBZGRyZXNzKHYpICsgdXJsLCBvcHRpb25zKS5waXBlKFxuICAgICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZXh0RXJyb3IubGVuZ3RoICYmIGVyci5lcnJvci5lcnJvcl9kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgIHRleHRFcnJvciA9IGVyci5lcnJvci5lcnJvcl9kZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5lcnJvcign0J7RiNC40LHQutCwOiAnICsgdGV4dEVycm9yKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnIpXG4gICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiAnZ2V0IGJhc2UgdXJsIGVycm9yJylcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIuZXJyb3IoJ0Vycm9yOiBBdXRoIG5vdCBnZXQnKVxuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+ICdhdXRoIG5vdCBnZXQnKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIG92ZXJyaWRlIGdldE5hbWVNZXRob2QoYXJyOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiBhcnIuam9pbignLicpXG4gIH1cblxufVxuXG4iXX0=