bx-rest 1.5.0 → 1.6.0

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 (181) hide show
  1. package/CHANGELOG.md +177 -0
  2. package/README.en.md +116 -5
  3. package/README.md +117 -5
  4. package/esm2022/functions/errors.mjs +17 -5
  5. package/esm2022/functions/mapResult.mjs +4 -2
  6. package/esm2022/functions/uniqueElementCode.mjs +24 -0
  7. package/esm2022/map/disk.mjs +13 -0
  8. package/esm2022/map/im/recent.mjs +1 -9
  9. package/esm2022/map/task.mjs +11 -5
  10. package/esm2022/map/tasks/task.mjs +3 -3
  11. package/esm2022/map/tasks.mjs +4 -3
  12. package/esm2022/map/user.mjs +5 -4
  13. package/esm2022/public-api.mjs +2 -2
  14. package/esm2022/request-navvy/bizproc.mjs +19 -10
  15. package/esm2022/request-navvy/calendar/event.mjs +1 -9
  16. package/esm2022/request-navvy/disk/operation.mjs +3 -10
  17. package/esm2022/request-navvy/pull/config.mjs +1 -3
  18. package/esm2022/request-navvy/socialnetwork/api/livefeed.mjs +1 -5
  19. package/esm2022/request-navvy/task/operation/elapseditem.mjs +14 -71
  20. package/esm2022/request-navvy/tasks/task.mjs +1 -119
  21. package/esm2022/rest/map.mjs +3 -3
  22. package/esm2022/rest/navvy.mjs +66 -64
  23. package/esm2022/services/base.mjs +7 -7
  24. package/esm2022/services/context.mjs +59 -0
  25. package/esm2022/services/http/HttpBX.mjs +55 -20
  26. package/esm2022/services/http/authRefresh.mjs +25 -23
  27. package/esm2022/services/http/http.mjs +14 -69
  28. package/esm2022/services/http/middleware.mjs +149 -0
  29. package/esm2022/services/http/sessionKey.mjs +16 -5
  30. package/esm2022/services/http/transport.mjs +5 -0
  31. package/esm2022/services/navvy/extends/navvy-pag-base.mjs +63 -9
  32. package/esm2022/services/navvy/navvy-alternative-pagination-navigation.mjs +21 -71
  33. package/esm2022/services/navvy/navvy-pag-nav-result-key-object.mjs +10 -49
  34. package/esm2022/services/navvy/navvy-pag-nav-result-key.mjs +14 -73
  35. package/esm2022/services/navvy/navvy-pag-nav-tasks.mjs +4 -76
  36. package/esm2022/services/navvy/navvy-pag-nav-with-useless-key.mjs +10 -76
  37. package/esm2022/services/navvy/navvy-pag.mjs +7 -65
  38. package/esm2022/services/navvy/navvy-support.mjs +2 -15
  39. package/esm2022/services/navvy.mjs +18 -31
  40. package/esm2022/typification/rest/calendar/event/get.mjs +1 -1
  41. package/esm2022/typification/rest/settings.mjs +1 -1
  42. package/esm2022/typification/rest/tasks/task/get.mjs +1 -1
  43. package/esm2022/typification/rest/user/user.mjs +1 -1
  44. package/esm2022/typification/settings.mjs +1 -1
  45. package/fesm2022/bx-rest.mjs +860 -2038
  46. package/fesm2022/bx-rest.mjs.map +1 -1
  47. package/functions/errors.d.ts +9 -0
  48. package/functions/uniqueElementCode.d.ts +12 -0
  49. package/map/disk.d.ts +10 -0
  50. package/map/task.d.ts +3 -3
  51. package/map/tasks/task.d.ts +1 -1
  52. package/map/tasks.d.ts +1 -1
  53. package/package.json +5 -2
  54. package/public-api.d.ts +7 -3
  55. package/request-navvy/pull/config.d.ts +0 -2
  56. package/rest/map.d.ts +2 -2
  57. package/rest/navvy.d.ts +9 -0
  58. package/services/context.d.ts +43 -0
  59. package/services/http/HttpBX.d.ts +10 -0
  60. package/services/http/authRefresh.d.ts +5 -1
  61. package/services/http/http.d.ts +12 -9
  62. package/services/http/middleware.d.ts +31 -0
  63. package/services/http/sessionKey.d.ts +10 -0
  64. package/services/http/transport.d.ts +28 -0
  65. package/services/navvy/extends/navvy-pag-base.d.ts +16 -2
  66. package/services/navvy/navvy-alternative-pagination-navigation.d.ts +5 -2
  67. package/services/navvy/navvy-pag-nav-result-key-object.d.ts +0 -2
  68. package/services/navvy/navvy-pag-nav-result-key.d.ts +1 -4
  69. package/services/navvy/navvy-pag-nav-tasks.d.ts +2 -9
  70. package/services/navvy/navvy-pag-nav-with-useless-key.d.ts +0 -2
  71. package/services/navvy/navvy-pag.d.ts +0 -2
  72. package/services/navvy/navvy-support.d.ts +0 -10
  73. package/services/navvy.d.ts +1 -0
  74. package/typification/rest/calendar/event/get.d.ts +1 -1
  75. package/typification/rest/settings.d.ts +1 -0
  76. package/typification/rest/user/user.d.ts +3 -3
  77. package/typification/settings.d.ts +34 -0
  78. package/esm2022/functions/errorHandler.mjs +0 -34
  79. package/esm2022/request/app.mjs +0 -13
  80. package/esm2022/request/bizproc/activity.mjs +0 -3
  81. package/esm2022/request/bizproc/event.mjs +0 -3
  82. package/esm2022/request/bizproc/robot.mjs +0 -3
  83. package/esm2022/request/bizproc/task.mjs +0 -3
  84. package/esm2022/request/bizproc/workflow/instance.mjs +0 -3
  85. package/esm2022/request/bizproc/workflow/template.mjs +0 -3
  86. package/esm2022/request/bizproc/workflow.mjs +0 -18
  87. package/esm2022/request/bizproc.mjs +0 -15
  88. package/esm2022/request/department.mjs +0 -26
  89. package/esm2022/request/disk/attachedObject.mjs +0 -14
  90. package/esm2022/request/disk/file.mjs +0 -18
  91. package/esm2022/request/disk/folder.mjs +0 -117
  92. package/esm2022/request/disk.mjs +0 -11
  93. package/esm2022/request/lists/element.mjs +0 -18
  94. package/esm2022/request/lists/field.mjs +0 -35
  95. package/esm2022/request/lists.mjs +0 -86
  96. package/esm2022/request/log/blogcomment.mjs +0 -3
  97. package/esm2022/request/log/blogpost.mjs +0 -18
  98. package/esm2022/request/log.mjs +0 -9
  99. package/esm2022/request/pull/application/config.mjs +0 -11
  100. package/esm2022/request/pull/channel/public.mjs +0 -18
  101. package/esm2022/request/pull/config.mjs +0 -13
  102. package/esm2022/request/pull.mjs +0 -11
  103. package/esm2022/request/server.mjs +0 -14
  104. package/esm2022/request/socialnetwork/api/contentview.mjs +0 -14
  105. package/esm2022/request/socialnetwork/api/livefeed/blogpost/important.mjs +0 -14
  106. package/esm2022/request/socialnetwork/api/livefeed/blogpost.mjs +0 -7
  107. package/esm2022/request/socialnetwork/api/livefeed.mjs +0 -7
  108. package/esm2022/request/socialnetwork/api.mjs +0 -9
  109. package/esm2022/request/socialnetwork.mjs +0 -8
  110. package/esm2022/request/sonet_group.mjs +0 -24
  111. package/esm2022/request/task/commentitem.mjs +0 -32
  112. package/esm2022/request/task/elapseditem.mjs +0 -40
  113. package/esm2022/request/task/item/userfield.mjs +0 -14
  114. package/esm2022/request/task/item.mjs +0 -7
  115. package/esm2022/request/task/planner.mjs +0 -11
  116. package/esm2022/request/task.mjs +0 -13
  117. package/esm2022/request/tasks/task/result.mjs +0 -22
  118. package/esm2022/request/tasks/task.mjs +0 -110
  119. package/esm2022/request/tasks.mjs +0 -7
  120. package/esm2022/request/user/userfield.mjs +0 -14
  121. package/esm2022/request/user.mjs +0 -40
  122. package/esm2022/rest/base.mjs +0 -39
  123. package/esm2022/services/http/HttpData.mjs +0 -77
  124. package/esm2022/services/http/base/base.mjs +0 -4
  125. package/esm2022/services/http/httpNavvy.mjs +0 -14
  126. package/esm2022/typification/base/answers.mjs +0 -438
  127. package/esm2022/typification/base/params.mjs +0 -525
  128. package/esm2022/typification/base/workpiece/methods-list.mjs +0 -2
  129. package/esm2022/typification/base/workpiece/methods.mjs +0 -2
  130. package/functions/errorHandler.d.ts +0 -10
  131. package/request/app.d.ts +0 -8
  132. package/request/bizproc/activity.d.ts +0 -2
  133. package/request/bizproc/event.d.ts +0 -2
  134. package/request/bizproc/robot.d.ts +0 -2
  135. package/request/bizproc/task.d.ts +0 -2
  136. package/request/bizproc/workflow/instance.d.ts +0 -2
  137. package/request/bizproc/workflow/template.d.ts +0 -2
  138. package/request/bizproc/workflow.d.ts +0 -13
  139. package/request/bizproc.d.ts +0 -12
  140. package/request/department.d.ts +0 -18
  141. package/request/disk/attachedObject.d.ts +0 -8
  142. package/request/disk/file.d.ts +0 -10
  143. package/request/disk/folder.d.ts +0 -96
  144. package/request/disk.d.ts +0 -8
  145. package/request/lists/element.d.ts +0 -11
  146. package/request/lists/field.d.ts +0 -11
  147. package/request/lists.d.ts +0 -31
  148. package/request/log/blogcomment.d.ts +0 -2
  149. package/request/log/blogpost.d.ts +0 -11
  150. package/request/log.d.ts +0 -6
  151. package/request/pull/application/config.d.ts +0 -5
  152. package/request/pull/channel/public.d.ts +0 -5
  153. package/request/pull/config.d.ts +0 -7
  154. package/request/pull.d.ts +0 -8
  155. package/request/server.d.ts +0 -7
  156. package/request/socialnetwork/api/contentview.d.ts +0 -6
  157. package/request/socialnetwork/api/livefeed/blogpost/important.d.ts +0 -6
  158. package/request/socialnetwork/api/livefeed/blogpost.d.ts +0 -4
  159. package/request/socialnetwork/api/livefeed.d.ts +0 -4
  160. package/request/socialnetwork/api.d.ts +0 -6
  161. package/request/socialnetwork.d.ts +0 -4
  162. package/request/sonet_group.d.ts +0 -8
  163. package/request/task/commentitem.d.ts +0 -23
  164. package/request/task/elapseditem.d.ts +0 -26
  165. package/request/task/item/userfield.d.ts +0 -6
  166. package/request/task/item.d.ts +0 -4
  167. package/request/task/planner.d.ts +0 -4
  168. package/request/task.d.ts +0 -10
  169. package/request/tasks/task/result.d.ts +0 -13
  170. package/request/tasks/task.d.ts +0 -37
  171. package/request/tasks.d.ts +0 -4
  172. package/request/user/userfield.d.ts +0 -8
  173. package/request/user.d.ts +0 -24
  174. package/rest/base.d.ts +0 -33
  175. package/services/http/HttpData.d.ts +0 -7
  176. package/services/http/base/base.d.ts +0 -7
  177. package/services/http/httpNavvy.d.ts +0 -10
  178. package/typification/base/answers.d.ts +0 -12
  179. package/typification/base/params.d.ts +0 -16
  180. package/typification/base/workpiece/methods-list.d.ts +0 -247
  181. package/typification/base/workpiece/methods.d.ts +0 -20
@@ -1,7 +1,23 @@
1
+ import { concatMap, from, toArray } from 'rxjs';
1
2
  import { catchError, map } from 'rxjs/operators';
3
+ import clone from 'just-clone';
2
4
  import { BXRestMapResult, instanceOfiBXRestAnswerSuccess } from '../../../functions/mapResult';
3
5
  import { HttpBXServices } from '../../http/HttpBX';
4
6
  import { BXRestApiError, bxRestApiErrorFromHttp, getAuthRefreshError, parseBXRestErrorBody, } from '../../../functions/errors';
7
+ import { serializeBitrixParams } from '../../../functions/serializeBitrixParams';
8
+ /** Больше команд в одном запросе `batch` Bitrix не принимает. */
9
+ const BATCH_COMMANDS_LIMIT = 50;
10
+ /**
11
+ * Параметры остальных страниц для методов с постраничной навигацией через `start`.
12
+ * Отсчёт идёт от `start` самого запроса: первая страница уже получена именно с него.
13
+ */
14
+ export function offsetPageParams(param, total, pageSize) {
15
+ const pages = [];
16
+ for (let start = (Number(param?.start) || 0) + pageSize; start < (total ?? 0); start += pageSize) {
17
+ pages.push({ ...clone(param), start });
18
+ }
19
+ return pages;
20
+ }
5
21
  export class NavvyPagBase {
6
22
  constructor(url, param, map = undefined, restApi = false) {
7
23
  this.url = url;
@@ -45,13 +61,7 @@ export class NavvyPagBase {
45
61
  }
46
62
  mapAndError(request, options) {
47
63
  const method = this.http.getNameMethod(this.url);
48
- return request.pipe(map(v => {
49
- if (options?.throwOnApiError && v && !instanceOfiBXRestAnswerSuccess(v)) {
50
- throw this.apiErrorFromBody(v);
51
- }
52
- return BXRestMapResult(v);
53
- }), catchError((err) => {
54
- console.error(err);
64
+ return request.pipe(catchError((err) => {
55
65
  if (err instanceof BXRestApiError) {
56
66
  throw err;
57
67
  }
@@ -71,6 +81,14 @@ export class NavvyPagBase {
71
81
  Object.assign(error, { authRefreshError });
72
82
  }
73
83
  throw error;
84
+ }), map(v => {
85
+ if (v && typeof v !== 'object') {
86
+ throw this.notRestAnswerError();
87
+ }
88
+ if (options?.throwOnApiError && v && !instanceOfiBXRestAnswerSuccess(v)) {
89
+ throw this.apiErrorFromBody(v);
90
+ }
91
+ return BXRestMapResult(v);
74
92
  }));
75
93
  }
76
94
  /**
@@ -79,15 +97,51 @@ export class NavvyPagBase {
79
97
  */
80
98
  resFirstPage() {
81
99
  return this.resVanilla().pipe(map(v => {
82
- if (v && !instanceOfiBXRestAnswerSuccess(v)) {
100
+ if (!v || typeof v !== 'object') {
101
+ throw this.notRestAnswerError();
102
+ }
103
+ if (!instanceOfiBXRestAnswerSuccess(v)) {
83
104
  throw this.apiErrorFromBody(v);
84
105
  }
85
106
  return v;
86
107
  }));
87
108
  }
109
+ /**
110
+ * Остальные страницы для `.resAll()`, в порядке `params`. Команды уходят через `batch`,
111
+ * пакеты — по очереди. Ошибка любой страницы завершает весь запрос: неполный список
112
+ * выглядел бы для вызывающего кода как полный.
113
+ */
114
+ resPages(params) {
115
+ const method = this.http.getNameMethod(this.url);
116
+ const commands = params.map(param => method + '?' + serializeBitrixParams(param));
117
+ const batches = [];
118
+ for (let i = 0; i < commands.length; i += BATCH_COMMANDS_LIMIT) {
119
+ batches.push(commands.slice(i, i + BATCH_COMMANDS_LIMIT));
120
+ }
121
+ return from(batches).pipe(concatMap(cmd => this.http.post(['batch'], { halt: 1, cmd }, false, this.requestHeaders)), map(answer => this.batchPages(answer)), toArray(), map(pages => pages.flat()));
122
+ }
123
+ batchPages(answer) {
124
+ if (!answer || typeof answer !== 'object') {
125
+ throw this.notRestAnswerError();
126
+ }
127
+ if (!instanceOfiBXRestAnswerSuccess(answer)) {
128
+ throw this.apiErrorFromBody(answer);
129
+ }
130
+ // Портал отдаёт result_error массивом, когда ошибок нет, и объектом с ключами команд, когда есть
131
+ const failed = Object.values(answer.result?.result_error ?? {})[0];
132
+ if (failed) {
133
+ const parsed = parseBXRestErrorBody(failed);
134
+ throw new BXRestApiError(parsed?.error, parsed?.error_description, { method: this.http.getNameMethod(this.url) });
135
+ }
136
+ return Object.values(answer.result?.result ?? {}).filter(Boolean);
137
+ }
138
+ // В тексте ошибки — только метод, без тела ответа: это может быть целая HTML-страница
139
+ notRestAnswerError() {
140
+ return new Error(`Bitrix24 answered ${this.http.getNameMethod(this.url)} with a body that is not a REST response.`);
141
+ }
88
142
  apiErrorFromBody(v) {
89
143
  const parsed = parseBXRestErrorBody(v);
90
144
  return new BXRestApiError(parsed ? parsed.error : v.error, parsed ? parsed.error_description : v.error_description, { method: this.http.getNameMethod(this.url) });
91
145
  }
92
146
  }
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2dnktcGFnLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ieC1yZXN0L3NyYy9zZXJ2aWNlcy9uYXZ2eS9leHRlbmRzL25hdnZ5LXBhZy1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDhCQUE4QixDQUFBO0FBQzlGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUVsRCxPQUFPLEVBQ0wsY0FBYyxFQUFFLHNCQUFzQixFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixHQUNsRixNQUFNLDJCQUEyQixDQUFBO0FBaUJsQyxNQUFNLE9BQWdCLFlBQVk7SUFNaEMsWUFDWSxHQUFhLEVBQ2IsS0FBUSxFQUNSLE1BQTRELFNBQVMsRUFDckUsVUFBVSxLQUFLO1FBSGYsUUFBRyxHQUFILEdBQUcsQ0FBVTtRQUNiLFVBQUssR0FBTCxLQUFLLENBQUc7UUFDUixRQUFHLEdBQUgsR0FBRyxDQUFrRTtRQUNyRSxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBTjNCLGFBQVEsR0FBRyxFQUFFLENBQUEsQ0FBQyw4QkFBOEI7UUFRMUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILFdBQVcsQ0FBQyxPQUErQjtRQUN6QyxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUE7UUFDNUQsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJ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LElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDNUMsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDaEMsQ0FBQztZQUNELE9BQU8sQ0FBQyxDQUFBO1FBQ1YsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtJQUNILENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxDQUFxQjtRQUM1QyxNQUFNLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN0QyxPQUFPLElBQUksY0FBYyxDQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEVBQ3ZELEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUM5QyxDQUFBO0lBQ0gsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnXHJcbmltcG9ydCB7IGlCWFJlc3RBbnN3ZXIsIGlCWFJlc3RBbnN3ZXJFcnJvciB9IGZyb20gJy4uLy4uLy4uL3R5cGlmaWNhdGlvbi9yZXN0L2Jhc2UvYW5zd2VyJ1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcclxuaW1wb3J0IHsgQlhSZXN0TWFwUmVzdWx0LCBpbnN0YW5jZU9maUJYUmVzdEFuc3dlclN1Y2Nlc3MgfSBmcm9tICcuLi8uLi8uLi9mdW5jdGlvbnMvbWFwUmVzdWx0J1xyXG5pbXBvcnQgeyBIdHRwQlhTZXJ2aWNlcyB9IGZyb20gJy4uLy4uL2h0dHAvSHR0cEJYJ1xyXG5pbXBvcnQgeyBSZXR1cm5UeXBlTmF2dnkgfSBmcm9tICcuLi9uYXZ2eS1zdXBwb3J0J1xyXG5pbXBvcnQge1xyXG4gIEJYUmVzdEFwaUVycm9yLCBieFJlc3RBcGlFcnJvckZyb21IdHRwLCBnZXRBdXRoUmVmcmVzaEVycm9yLCBwYXJzZUJYUmVzdEVycm9yQm9keSxcclxufSBmcm9tICcuLi8uLi8uLi9mdW5jdGlvbnMvZXJyb3JzJ1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBCWFJlc3RSZXNPcHRpb25zIHtcclxuICAvKipcclxuICAgKiBXaGVuIGB0cnVlYCwgYSBCaXRyaXgtbGV2ZWwgQVBJIGVycm9yIHRoYXQgY29tZXMgaW4gdGhlIGJvZHkgb2YgYSAyeHhcclxuICAgKiByZXNwb25zZSBtYWtlcyB0aGUgYE9ic2VydmFibGVgIHJldHVybmVkIGJ5IGAucmVzKClgIGVycm9yIG91dCB3aXRoIGFcclxuICAgKiBgQlhSZXN0QXBpRXJyb3JgIGluc3RlYWQgb2YgcmVzb2x2aW5nIHdpdGggYHVuZGVmaW5lZGAuXHJcbiAgICpcclxuICAgKiBFcnJvcnMgdGhhdCBCaXRyaXggc2VuZHMgd2l0aCBhIG5vbi0yeHggSFRUUCBzdGF0dXMgKG1vc3Qgb2YgdGhlbSwgZS5nLlxyXG4gICAqIGBleHBpcmVkX3Rva2VuYCwgYElOU1VGRklDSUVOVF9TQ09QRWApIGZhaWwgd2l0aCBgQlhSZXN0QXBpRXJyb3JgXHJcbiAgICogcmVnYXJkbGVzcyBvZiB0aGlzIG9wdGlvbi5cclxuICAgKlxyXG4gICAqIERlZmF1bHQ6IGBmYWxzZWAgKHByZXNlcnZlcyB0aGUgaGlzdG9yaWNhbCBgLnJlcygpYCBiZWhhdmlvdXIpLlxyXG4gICAqL1xyXG4gIHRocm93T25BcGlFcnJvcj86IGJvb2xlYW5cclxufVxyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5hdnZ5UGFnQmFzZTxULCBSLCBQPiB7XHJcblxyXG4gIHByb3RlY3RlZCByZWFkb25seSBodHRwOiBIdHRwQlhTZXJ2aWNlc1xyXG4gIHByb3RlY3RlZCByZXF1ZXN0SGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cclxuICBwYWdlU2l6ZSA9IDUwIC8vINGB0YLQsNC90LTQsNGA0YLQvdGL0Lkg0YDQsNC30LzQtdGAINGB0YLRgNCw0L3QuNGG0YtcclxuXHJcbiAgcHVibGljIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIHVybDogc3RyaW5nW10sXHJcbiAgICBwcm90ZWN0ZWQgcGFyYW06IFAsXHJcbiAgICBwcm90ZWN0ZWQgbWFwOiAoKHBhcmFtOiBUfCB1bmRlZmluZWQpID0+IFIgfCB1bmRlZmluZWQpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxyXG4gICAgcHJvdGVjdGVkIHJlc3RBcGkgPSBmYWxzZVxyXG4gICkge1xyXG4gICAgdGhpcy5odHRwID0gbmV3IEh0dHBCWFNlcnZpY2VzKClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhUVFAt0LfQsNCz0L7Qu9C+0LLQutC4INGC0L7Qu9GM0LrQviDQtNC70Y8g0Y3RgtC+0LPQviDQt9Cw0L/RgNC+0YHQsCDigJQg0L/QvtCy0LXRgNGFIGBCWFJlc3RTZXR0aW5ncy5oZWFkZXJzYFxyXG4gICAqICjQv9GA0Lgg0YHQvtCy0L/QsNC00LXQvdC40Lgg0LjQvNC10L3QuCDQv9C+0LHQtdC20LTQsNC10YIg0LfQvdCw0YfQtdC90LjQtSDQvtGC0YHRjtC00LApLiDQn9C+0LLRgtC+0YDQvdGL0LUg0LLRi9C30L7QstGLXHJcbiAgICog0LTQvtC/0L7Qu9C90Y/RjtGCINGD0LbQtSDQt9Cw0LTQsNC90L3Ri9C1INC30LDQs9C+0LvQvtCy0LrQuC4g0JTQtdC50YHRgtCy0YPQtdGCINC90LAgYC5yZXMoKWAsIGAucmVzVmFuaWxsYSgpYCxcclxuICAgKiBgLm1hcEZvclZhbmlsbGEoKWAg0Lgg0L3QsCDQstGB0LUgYmF0Y2gt0LfQsNC/0YDQvtGB0YsgYC5yZXNBbGwoKWAuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIGJ4LmNybS5kZWFsLmxpc3QoeyAuLi4gfSkud2l0aEhlYWRlcnMoeyAnWC1SZXF1ZXN0LVNvdXJjZSc6ICdyZXBvcnQnIH0pLnJlc0FsbCgpXHJcbiAgICovXHJcbiAgd2l0aEhlYWRlcnMoaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHRoaXMge1xyXG4gICAgdGhpcy5yZXF1ZXN0SGVhZGVycyA9IHsgLi4udGhpcy5yZXF1ZXN0SGVhZGVycywgLi4uaGVhZGVycyB9XHJcbiAgICByZXR1cm4gdGhpc1xyXG4gIH1cclxuXHJcbiAgcmVzVmFuaWxsYSgpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxUPih0aGlzLnVybCwgdGhpcy5wYXJhbSwgdGhpcy5yZXN0QXBpLCB0aGlzLnJlcXVlc3RIZWFkZXJzKVxyXG4gIH1cclxuXHJcbiAgbWFwRm9yVmFuaWxsYSgpOiBPYnNlcnZhYmxlPGlCWFJlc3RBbnN3ZXI8UmV0dXJuVHlwZU5hdnZ5PFQsIFI+PiB8IHVuZGVmaW5lZD4ge1xyXG4gICAgcmV0dXJuIHRoaXMucmVzVmFuaWxsYSgpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+IHtcclxuICAgICAgICAgIGlmICh2ICYmIGluc3RhbmNlT2ZpQlhSZXN0QW5zd2VyU3VjY2Vzcyh2KSAmJiB0aGlzLm1hcCkge1xyXG4gICAgICAgICAgICAvLyDQn9GA0LjQvNC10L3Rj9C10LwgdGhpcy5tYXAg0Lgg0Y/QstC90L4g0L/RgNC40LLQvtC00LjQvCDRgtC40L8g0YDQtdC30YPQu9GM0YLQsNGC0LBcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5tYXAodi5yZXN1bHQgYXMgVCkgYXMgUmV0dXJuVHlwZU5hdnZ5PFQsIFI+XHJcbiAgICAgICAgICAgIHJldHVybiB7IC4uLnYsIC4uLntyZXN1bHQ6IHJlc3VsdH0gfSBhcyBpQlhSZXN0QW5zd2VyPFJldHVyblR5cGVOYXZ2eTxULCBSPj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB2IGFzIGlCWFJlc3RBbnN3ZXI8UmV0dXJuVHlwZU5hdnZ5PFQsIFI+PiB8IHVuZGVmaW5lZFxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICB9XHJcblxyXG4gIHJlcyhvcHRpb25zPzogQlhSZXN0UmVzT3B0aW9ucykge1xyXG4gICAgcmV0dXJuIHRoaXMubWFwQW5kRXJyb3IodGhpcy5yZXNWYW5pbGxhKCksIG9wdGlvbnMpLnBpcGUoXHJcbiAgICAgIG1hcCh2ID0+ICh2ICYmIHRoaXMubWFwKVxyXG4gICAgICAgID8gdGhpcy5tYXAodilcclxuICAgICAgICA6IHZcclxuICAgICAgKVxyXG4gICAgKSBhcyBPYnNlcnZhYmxlPFJldHVyblR5cGVOYXZ2eTxULCBSPiB8IHVuZGVmaW5lZD5cclxuICB9XHJcblxyXG4gIG1hcEFuZEVycm9yPFQ+KFxyXG4gICAgcmVxdWVzdDogT2JzZXJ2YWJsZTxpQlhSZXN0QW5zd2VyPFQ+IHwgdW5kZWZpbmVkPixcclxuICAgIG9wdGlvbnM/OiBCWFJlc3RSZXNPcHRpb25zXHJcbiAgKSB7XHJcbiAgICBjb25zdCBtZXRob2QgPSB0aGlzLmh0dHAuZ2V0TmFtZU1ldGhvZCh0aGlzLnVybClcclxuICAgIHJldHVybiByZXF1ZXN0LnBpcGUoXHJcbiAgICAgIG1hcCh2ID0+IHtcclxuICAgICAgICBpZiAob3B0aW9ucz8udGhyb3dPbkFwaUVycm9yICYmIHYgJiYgIWluc3RhbmNlT2ZpQlhSZXN0QW5zd2VyU3VjY2Vzcyh2KSkge1xyXG4gICAgICAgICAgdGhyb3cgdGhpcy5hcGlFcnJvckZyb21Cb2R5KHYpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBCWFJlc3RNYXBSZXN1bHQodilcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEJYUmVzdEFwaUVycm9yKSB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8g0JHQvtC70YzRiNC40L3RgdGC0LLQviDQvtGI0LjQsdC+0LogQml0cml4INC/0YDQuNGF0L7QtNC40YIg0YHQviDRgdGC0LDRgtGD0YHQvtC8INC90LUgMnh4LCDQuCBheGlvc1xyXG4gICAgICAgIC8vINC+0YLQutC70L7QvdGP0LXRgiDRgtCw0LrQvtC5INC+0YLQstC10YIg4oCUINC00L7RgdGC0LDRkdC8INC40Lcg0L3QtdCz0L4g0LrQvtC0INC4INC+0L/QuNGB0LDQvdC40LUg0L7RiNC40LHQutC4LFxyXG4gICAgICAgIC8vINCwINC90LUg0L7RgtC00LDRkdC8INCx0LXQt9C70LjQutC+0LUgXCJBeGlvc0Vycm9yOiBSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlIDQwMFwiLlxyXG4gICAgICAgIGNvbnN0IGFwaUVycm9yID0gYnhSZXN0QXBpRXJyb3JGcm9tSHR0cChlcnIsIG1ldGhvZClcclxuICAgICAgICBpZiAoYXBpRXJyb3IpIHtcclxuICAgICAgICAgIHRocm93IGFwaUVycm9yXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vINCh0L7QvtCx0YnQtdC90LjQtSDQv9GA0LXQttC90LXQtSwg0L3QviDQuNGB0YXQvtC00L3QsNGPINC+0YjQuNCx0LrQsCDQvtGB0YLQsNGR0YLRgdGPINCyIGNhdXNlIOKAlCDQsdC10Lcg0L3QtdGRXHJcbiAgICAgICAgLy8g0YLQtdGA0Y/Qu9GB0Y8gSFRUUC3RgdGC0LDRgtGD0YEg0L7RgtCy0LXRgtCwINC90LUg0L7RgiBCaXRyaXggKNC90LDQv9GA0LjQvNC10YAsINC/0YPRgdGC0L7Qs9C+IDQwMSDQvtGCXHJcbiAgICAgICAgLy8g0LHRjdC60LXQvdC0LdC/0YDQvtC60YHQuCk6INC+0L0g0LHRi9C7INGC0L7Qu9GM0LrQviDQsiDRgtC10LrRgdGC0LUg0YHQvtC+0LHRidC10L3QuNGPLlxyXG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKChlcnIuZXJyb3IpID8gZXJyLmVycm9yIDogZXJyLCB7IGNhdXNlOiBlcnIgfSlcclxuICAgICAgICBjb25zdCBhdXRoUmVmcmVzaEVycm9yID0gZ2V0QXV0aFJlZnJlc2hFcnJvcihlcnIpXHJcbiAgICAgICAgaWYgKGF1dGhSZWZyZXNoRXJyb3IgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihlcnJvciwgeyBhdXRoUmVmcmVzaEVycm9yIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRocm93IGVycm9yXHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDQn9C10YDQstCw0Y8g0YHRgtGA0LDQvdC40YbQsCDQtNC70Y8gYC5yZXNBbGwoKWAuINCe0YjQuNCx0LrQsCBCaXRyaXgg0LIg0YLQtdC70LUg0L7RgtCy0LXRgtCwIDJ4eCDRgdGC0LDQvdC+0LLQuNGC0YHRjyBgQlhSZXN0QXBpRXJyb3JgOlxyXG4gICAqINGB0YLRgNCw0L3QuNGGINCyINGC0LDQutC+0Lwg0L7RgtCy0LXRgtC1INC90LXRgiwg0Lgg0LHQtdC3INGN0YLQvtCz0L4gYC5yZXNBbGwoKWAg0LfQsNCy0LXRgNGI0LjQu9GB0Y8g0LHRiyDQsdC10LfQu9C40LrQuNC8IGBFbXB0eUVycm9yYC5cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgcmVzRmlyc3RQYWdlKCk6IE9ic2VydmFibGU8aUJYUmVzdEFuc3dlcjxUPiB8IHVuZGVmaW5lZD4ge1xyXG4gICAgcmV0dXJuIHRoaXMucmVzVmFuaWxsYSgpLnBpcGUoXHJcbiAgICAgIG1hcCh2ID0+IHtcclxuICAgICAgICBpZiAodiAmJiAhaW5zdGFuY2VPZmlCWFJlc3RBbnN3ZXJTdWNjZXNzKHYpKSB7XHJcbiAgICAgICAgICB0aHJvdyB0aGlzLmFwaUVycm9yRnJvbUJvZHkodilcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZcclxuICAgICAgfSlcclxuICAgIClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBpRXJyb3JGcm9tQm9keSh2OiBpQlhSZXN0QW5zd2VyRXJyb3IpIHtcclxuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlQlhSZXN0RXJyb3JCb2R5KHYpXHJcbiAgICByZXR1cm4gbmV3IEJYUmVzdEFwaUVycm9yKFxyXG4gICAgICBwYXJzZWQgPyBwYXJzZWQuZXJyb3IgOiB2LmVycm9yLFxyXG4gICAgICBwYXJzZWQgPyBwYXJzZWQuZXJyb3JfZGVzY3JpcHRpb24gOiB2LmVycm9yX2Rlc2NyaXB0aW9uLFxyXG4gICAgICB7IG1ldGhvZDogdGhpcy5odHRwLmdldE5hbWVNZXRob2QodGhpcy51cmwpIH1cclxuICAgIClcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2dnktcGFnLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ieC1yZXN0L3NyYy9zZXJ2aWNlcy9uYXZ2eS9leHRlbmRzL25hdnZ5LXBhZy1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUUzRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ2hELE9BQU8sS0FBSyxNQUFNLFlBQVksQ0FBQTtBQUM5QixPQUFPLEVBQUUsZUFBZSxFQUFFLDhCQUE4QixFQUFFLE1BQU0sOEJBQThCLENBQUE7QUFDOUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRWxELE9BQU8sRUFDTCxjQUFjLEVBQUUsc0JBQXNCLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEdBQ2xGLE1BQU0sMkJBQTJCLENBQUE7QUFHbEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUE7QUFFaEYsaUVBQWlFO0FBQ2pFLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFBO0FBaUIvQjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQThCLEtBQVEsRUFBRSxLQUF5QixFQUFFLFFBQWdCO0lBQ2pILE1BQU0sS0FBSyxHQUFRLEVBQUUsQ0FBQTtJQUNyQixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxRQUFRLEVBQUUsS0FBSyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNqRyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQTtJQUN4QyxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDO0FBRUQsTUFBTSxPQUFnQixZQUFZO0lBTWhDLFlBQ1ksR0FBYSxFQUNiLEtBQVEsRUFDUixNQUE0RCxTQUFTLEVBQ3JFLFVBQVUsS0FBSztRQUhmLFFBQUcsR0FBSCxHQUFHLENBQVU7UUFDYixVQUFLLEdBQUwsS0FBSyxDQUFHO1FBQ1IsUUFBRyxHQUFILEdBQUcsQ0FBa0U7UUFDckUsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQU4zQixhQUFRLEdBQUcsRUFBRSxDQUFBLENBQUMsOEJBQThCO1FBUTFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQTtJQUNsQyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxXQUFXLENBQUMsT0FBK0I7UUFDekMsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFBO1FBQzVELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUNuRixDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRTthQUNyQixJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sSUFBSSxDQUFDLElBQUksOEJBQThCLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUN2RCxvREFBb0Q7Z0JBQ3BELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQVcsQ0FBMEIsQ0FBQTtnQkFDL0QsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFDLEVBQTBDLENBQUE7WUFDOUUsQ0FBQztZQUNELE9BQU8sQ0FBcUQsQ0FBQTtRQUM5RCxDQUFDLENBQUMsQ0FDSCxDQUFBO0lBQ0wsQ0FBQztJQUVELEdBQUcsQ0FBQyxPQUEwQjtRQUM1QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDdEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUN0QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDYixDQUFDLENBQUMsQ0FBQyxDQUNKLENBQytDLENBQUE7SUFDcEQsQ0FBQztJQUVELFdBQVcsQ0FDVCxPQUFpRCxFQUNqRCxPQUEwQjtRQUUxQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDaEQsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUNqQixVQUFVLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUN0QixJQUFJLEdBQUcsWUFBWSxjQUFjLEVBQUUsQ0FBQztnQkFDbEMsTUFBTSxHQUFHLENBQUE7WUFDWCxDQUFDO1lBQ0QsaUVBQWlFO1lBQ2pFLGlFQUFpRTtZQUNqRSwwRUFBMEU7WUFDMUUsTUFBTSxRQUFRLEdBQUcsc0JBQXNCLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFBO1lBQ3BELElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2IsTUFBTSxRQUFRLENBQUE7WUFDaEIsQ0FBQztZQUNELG1FQUFtRTtZQUNuRSxvRUFBb0U7WUFDcEUsb0RBQW9EO1lBQ3BELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQTtZQUN0RSxNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ2pELElBQUksZ0JBQWdCLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFBO1lBQzVDLENBQUM7WUFDRCxNQUFNLEtBQUssQ0FBQTtRQUNiLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUMvQixNQUFNLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFBO1lBQ2pDLENBQUM7WUFDRCxJQUFJLE9BQU8sRUFBRSxlQUFlLElBQUksQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDeEUsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDaEMsQ0FBQztZQUNELE9BQU8sZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzNCLENBQUMsQ0FBQyxDQUNILENBQUE7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ08sWUFBWTtRQUNwQixPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ2hDLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUE7WUFDakMsQ0FBQztZQUNELElBQUksQ0FBQyw4QkFBOEIsQ0FBSSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMxQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNoQyxDQUFDO1lBQ0QsT0FBTyxDQUFDLENBQUE7UUFDVixDQUFDLENBQUMsQ0FDSCxDQUFBO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDTyxRQUFRLENBQU8sTUFBVztRQUNsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDaEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxHQUFHLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUNqRixNQUFNLE9BQU8sR0FBZSxFQUFFLENBQUE7UUFFOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLG9CQUFvQixFQUFFLENBQUM7WUFDL0QsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyxDQUFBO1FBQzNELENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQ3ZCLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUF1QixDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQy9HLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQU8sTUFBTSxDQUFDLENBQUMsRUFDNUMsT0FBTyxFQUFFLEVBQ1QsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBWSxDQUFDLENBQ3JDLENBQUE7SUFDSCxDQUFDO0lBRU8sVUFBVSxDQUFPLE1BQXVEO1FBQzlFLElBQUksQ0FBQyxNQUFNLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDMUMsTUFBTSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQTtRQUNqQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLDhCQUE4QixDQUF1QixNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2xFLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3JDLENBQUM7UUFDRCxpR0FBaUc7UUFDakcsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNsRSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsTUFBTSxNQUFNLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDM0MsTUFBTSxJQUFJLGNBQWMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ25ILENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBVyxDQUFBO0lBQzdFLENBQUM7SUFFRCxzRkFBc0Y7SUFDOUUsa0JBQWtCO1FBQ3hCLE9BQU8sSUFBSSxLQUFLLENBQUMscUJBQXFCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsMkNBQTJDLENBQUMsQ0FBQTtJQUNySCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsQ0FBcUI7UUFDNUMsTUFBTSxNQUFNLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdEMsT0FBTyxJQUFJLGNBQWMsQ0FDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUN2RCxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FDOUMsQ0FBQTtJQUNILENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbmNhdE1hcCwgZnJvbSwgT2JzZXJ2YWJsZSwgdG9BcnJheSB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBpQlhSZXN0QW5zd2VyLCBpQlhSZXN0QW5zd2VyRXJyb3IsIGlCWFJlc3RBbnN3ZXJTdWNjZXNzIH0gZnJvbSAnLi4vLi4vLi4vdHlwaWZpY2F0aW9uL3Jlc3QvYmFzZS9hbnN3ZXInXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCBjbG9uZSBmcm9tICdqdXN0LWNsb25lJ1xuaW1wb3J0IHsgQlhSZXN0TWFwUmVzdWx0LCBpbnN0YW5jZU9maUJYUmVzdEFuc3dlclN1Y2Nlc3MgfSBmcm9tICcuLi8uLi8uLi9mdW5jdGlvbnMvbWFwUmVzdWx0J1xuaW1wb3J0IHsgSHR0cEJYU2VydmljZXMgfSBmcm9tICcuLi8uLi9odHRwL0h0dHBCWCdcbmltcG9ydCB7IFJldHVyblR5cGVOYXZ2eSB9IGZyb20gJy4uL25hdnZ5LXN1cHBvcnQnXG5pbXBvcnQge1xuICBCWFJlc3RBcGlFcnJvciwgYnhSZXN0QXBpRXJyb3JGcm9tSHR0cCwgZ2V0QXV0aFJlZnJlc2hFcnJvciwgcGFyc2VCWFJlc3RFcnJvckJvZHksXG59IGZyb20gJy4uLy4uLy4uL2Z1bmN0aW9ucy9lcnJvcnMnXG5pbXBvcnQgeyBpQlhSZXN0UGFnaW5hdGlvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGlmaWNhdGlvbi9yZXN0L2Jhc2UvYXBpLXBhZ2luYXRpb24tYngnXG5pbXBvcnQgeyBpQlhSZXN0QmF0Y2ggfSBmcm9tICcuLi8uLi8uLi90eXBpZmljYXRpb24vcmVzdC9iYXRjaCdcbmltcG9ydCB7IHNlcmlhbGl6ZUJpdHJpeFBhcmFtcyB9IGZyb20gJy4uLy4uLy4uL2Z1bmN0aW9ucy9zZXJpYWxpemVCaXRyaXhQYXJhbXMnXG5cbi8qKiDQkdC+0LvRjNGI0LUg0LrQvtC80LDQvdC0INCyINC+0LTQvdC+0Lwg0LfQsNC/0YDQvtGB0LUgYGJhdGNoYCBCaXRyaXgg0L3QtSDQv9GA0LjQvdC40LzQsNC10YIuICovXG5jb25zdCBCQVRDSF9DT01NQU5EU19MSU1JVCA9IDUwXG5cbmV4cG9ydCBpbnRlcmZhY2UgQlhSZXN0UmVzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGVuIGB0cnVlYCwgYSBCaXRyaXgtbGV2ZWwgQVBJIGVycm9yIHRoYXQgY29tZXMgaW4gdGhlIGJvZHkgb2YgYSAyeHhcbiAgICogcmVzcG9uc2UgbWFrZXMgdGhlIGBPYnNlcnZhYmxlYCByZXR1cm5lZCBieSBgLnJlcygpYCBlcnJvciBvdXQgd2l0aCBhXG4gICAqIGBCWFJlc3RBcGlFcnJvcmAgaW5zdGVhZCBvZiByZXNvbHZpbmcgd2l0aCBgdW5kZWZpbmVkYC5cbiAgICpcbiAgICogRXJyb3JzIHRoYXQgQml0cml4IHNlbmRzIHdpdGggYSBub24tMnh4IEhUVFAgc3RhdHVzIChtb3N0IG9mIHRoZW0sIGUuZy5cbiAgICogYGV4cGlyZWRfdG9rZW5gLCBgSU5TVUZGSUNJRU5UX1NDT1BFYCkgZmFpbCB3aXRoIGBCWFJlc3RBcGlFcnJvcmBcbiAgICogcmVnYXJkbGVzcyBvZiB0aGlzIG9wdGlvbi5cbiAgICpcbiAgICogRGVmYXVsdDogYGZhbHNlYCAocHJlc2VydmVzIHRoZSBoaXN0b3JpY2FsIGAucmVzKClgIGJlaGF2aW91cikuXG4gICAqL1xuICB0aHJvd09uQXBpRXJyb3I/OiBib29sZWFuXG59XG5cbi8qKlxuICog0J/QsNGA0LDQvNC10YLRgNGLINC+0YHRgtCw0LvRjNC90YvRhSDRgdGC0YDQsNC90LjRhiDQtNC70Y8g0LzQtdGC0L7QtNC+0LIg0YEg0L/QvtGB0YLRgNCw0L3QuNGH0L3QvtC5INC90LDQstC40LPQsNGG0LjQtdC5INGH0LXRgNC10LcgYHN0YXJ0YC5cbiAqINCe0YLRgdGH0ZHRgiDQuNC00ZHRgiDQvtGCIGBzdGFydGAg0YHQsNC80L7Qs9C+INC30LDQv9GA0L7RgdCwOiDQv9C10YDQstCw0Y8g0YHRgtGA0LDQvdC40YbQsCDRg9C20LUg0L/QvtC70YPRh9C10L3QsCDQuNC80LXQvdC90L4g0YEg0L3QtdCz0L4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvZmZzZXRQYWdlUGFyYW1zPFAgZXh0ZW5kcyBpQlhSZXN0UGFnaW5hdGlvbj4ocGFyYW06IFAsIHRvdGFsOiBudW1iZXIgfCB1bmRlZmluZWQsIHBhZ2VTaXplOiBudW1iZXIpOiBQW10ge1xuICBjb25zdCBwYWdlczogUFtdID0gW11cbiAgZm9yIChsZXQgc3RhcnQgPSAoTnVtYmVyKHBhcmFtPy5zdGFydCkgfHwgMCkgKyBwYWdlU2l6ZTsgc3RhcnQgPCAodG90YWwgPz8gMCk7IHN0YXJ0ICs9IHBhZ2VTaXplKSB7XG4gICAgcGFnZXMucHVzaCh7IC4uLmNsb25lKHBhcmFtKSwgc3RhcnQgfSlcbiAgfVxuICByZXR1cm4gcGFnZXNcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5hdnZ5UGFnQmFzZTxULCBSLCBQPiB7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGh0dHA6IEh0dHBCWFNlcnZpY2VzXG4gIHByb3RlY3RlZCByZXF1ZXN0SGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgcGFnZVNpemUgPSA1MCAvLyDRgdGC0LDQvdC00LDRgNGC0L3Ri9C5INGA0LDQt9C80LXRgCDRgdGC0YDQsNC90LjRhtGLXG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB1cmw6IHN0cmluZ1tdLFxuICAgIHByb3RlY3RlZCBwYXJhbTogUCxcbiAgICBwcm90ZWN0ZWQgbWFwOiAoKHBhcmFtOiBUfCB1bmRlZmluZWQpID0+IFIgfCB1bmRlZmluZWQpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuICAgIHByb3RlY3RlZCByZXN0QXBpID0gZmFsc2VcbiAgKSB7XG4gICAgdGhpcy5odHRwID0gbmV3IEh0dHBCWFNlcnZpY2VzKClcbiAgfVxuXG4gIC8qKlxuICAgKiBIVFRQLdC30LDQs9C+0LvQvtCy0LrQuCDRgtC+0LvRjNC60L4g0LTQu9GPINGN0YLQvtCz0L4g0LfQsNC/0YDQvtGB0LAg4oCUINC/0L7QstC10YDRhSBgQlhSZXN0U2V0dGluZ3MuaGVhZGVyc2BcbiAgICogKNC/0YDQuCDRgdC+0LLQv9Cw0LTQtdC90LjQuCDQuNC80LXQvdC4INC/0L7QsdC10LbQtNCw0LXRgiDQt9C90LDRh9C10L3QuNC1INC+0YLRgdGO0LTQsCkuINCf0L7QstGC0L7RgNC90YvQtSDQstGL0LfQvtCy0YtcbiAgICog0LTQvtC/0L7Qu9C90Y/RjtGCINGD0LbQtSDQt9Cw0LTQsNC90L3Ri9C1INC30LDQs9C+0LvQvtCy0LrQuC4g0JTQtdC50YHRgtCy0YPQtdGCINC90LAgYC5yZXMoKWAsIGAucmVzVmFuaWxsYSgpYCxcbiAgICogYC5tYXBGb3JWYW5pbGxhKClgINC4INC90LAg0LLRgdC1IGJhdGNoLdC30LDQv9GA0L7RgdGLIGAucmVzQWxsKClgLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBieC5jcm0uZGVhbC5saXN0KHsgLi4uIH0pLndpdGhIZWFkZXJzKHsgJ1gtUmVxdWVzdC1Tb3VyY2UnOiAncmVwb3J0JyB9KS5yZXNBbGwoKVxuICAgKi9cbiAgd2l0aEhlYWRlcnMoaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHRoaXMge1xuICAgIHRoaXMucmVxdWVzdEhlYWRlcnMgPSB7IC4uLnRoaXMucmVxdWVzdEhlYWRlcnMsIC4uLmhlYWRlcnMgfVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICByZXNWYW5pbGxhKCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxUPih0aGlzLnVybCwgdGhpcy5wYXJhbSwgdGhpcy5yZXN0QXBpLCB0aGlzLnJlcXVlc3RIZWFkZXJzKVxuICB9XG5cbiAgbWFwRm9yVmFuaWxsYSgpOiBPYnNlcnZhYmxlPGlCWFJlc3RBbnN3ZXI8UmV0dXJuVHlwZU5hdnZ5PFQsIFI+PiB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLnJlc1ZhbmlsbGEoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCh2ID0+IHtcbiAgICAgICAgICBpZiAodiAmJiBpbnN0YW5jZU9maUJYUmVzdEFuc3dlclN1Y2Nlc3ModikgJiYgdGhpcy5tYXApIHtcbiAgICAgICAgICAgIC8vINCf0YDQuNC80LXQvdGP0LXQvCB0aGlzLm1hcCDQuCDRj9Cy0L3QviDQv9GA0LjQstC+0LTQuNC8INGC0LjQvyDRgNC10LfRg9C70YzRgtCw0YLQsFxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5tYXAodi5yZXN1bHQgYXMgVCkgYXMgUmV0dXJuVHlwZU5hdnZ5PFQsIFI+XG4gICAgICAgICAgICByZXR1cm4geyAuLi52LCAuLi57cmVzdWx0OiByZXN1bHR9IH0gYXMgaUJYUmVzdEFuc3dlcjxSZXR1cm5UeXBlTmF2dnk8VCwgUj4+XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2IGFzIGlCWFJlc3RBbnN3ZXI8UmV0dXJuVHlwZU5hdnZ5PFQsIFI+PiB8IHVuZGVmaW5lZFxuICAgICAgICB9KVxuICAgICAgKVxuICB9XG5cbiAgcmVzKG9wdGlvbnM/OiBCWFJlc3RSZXNPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwQW5kRXJyb3IodGhpcy5yZXNWYW5pbGxhKCksIG9wdGlvbnMpLnBpcGUoXG4gICAgICBtYXAodiA9PiAodiAmJiB0aGlzLm1hcClcbiAgICAgICAgPyB0aGlzLm1hcCh2KVxuICAgICAgICA6IHZcbiAgICAgIClcbiAgICApIGFzIE9ic2VydmFibGU8UmV0dXJuVHlwZU5hdnZ5PFQsIFI+IHwgdW5kZWZpbmVkPlxuICB9XG5cbiAgbWFwQW5kRXJyb3I8VD4oXG4gICAgcmVxdWVzdDogT2JzZXJ2YWJsZTxpQlhSZXN0QW5zd2VyPFQ+IHwgdW5kZWZpbmVkPixcbiAgICBvcHRpb25zPzogQlhSZXN0UmVzT3B0aW9uc1xuICApIHtcbiAgICBjb25zdCBtZXRob2QgPSB0aGlzLmh0dHAuZ2V0TmFtZU1ldGhvZCh0aGlzLnVybClcbiAgICByZXR1cm4gcmVxdWVzdC5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEJYUmVzdEFwaUVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgZXJyXG4gICAgICAgIH1cbiAgICAgICAgLy8g0JHQvtC70YzRiNC40L3RgdGC0LLQviDQvtGI0LjQsdC+0LogQml0cml4INC/0YDQuNGF0L7QtNC40YIg0YHQviDRgdGC0LDRgtGD0YHQvtC8INC90LUgMnh4LCDQuCBheGlvc1xuICAgICAgICAvLyDQvtGC0LrQu9C+0L3Rj9C10YIg0YLQsNC60L7QuSDQvtGC0LLQtdGCIOKAlCDQtNC+0YHRgtCw0ZHQvCDQuNC3INC90LXQs9C+INC60L7QtCDQuCDQvtC/0LjRgdCw0L3QuNC1INC+0YjQuNCx0LrQuCxcbiAgICAgICAgLy8g0LAg0L3QtSDQvtGC0LTQsNGR0Lwg0LHQtdC30LvQuNC60L7QtSBcIkF4aW9zRXJyb3I6IFJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgNDAwXCIuXG4gICAgICAgIGNvbnN0IGFwaUVycm9yID0gYnhSZXN0QXBpRXJyb3JGcm9tSHR0cChlcnIsIG1ldGhvZClcbiAgICAgICAgaWYgKGFwaUVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgYXBpRXJyb3JcbiAgICAgICAgfVxuICAgICAgICAvLyDQodC+0L7QsdGJ0LXQvdC40LUg0L/RgNC10LbQvdC10LUsINC90L4g0LjRgdGF0L7QtNC90LDRjyDQvtGI0LjQsdC60LAg0L7RgdGC0LDRkdGC0YHRjyDQsiBjYXVzZSDigJQg0LHQtdC3INC90LXRkVxuICAgICAgICAvLyDRgtC10YDRj9C70YHRjyBIVFRQLdGB0YLQsNGC0YPRgSDQvtGC0LLQtdGC0LAg0L3QtSDQvtGCIEJpdHJpeCAo0L3QsNC/0YDQuNC80LXRgCwg0L/Rg9GB0YLQvtCz0L4gNDAxINC+0YJcbiAgICAgICAgLy8g0LHRjdC60LXQvdC0LdC/0YDQvtC60YHQuCk6INC+0L0g0LHRi9C7INGC0L7Qu9GM0LrQviDQsiDRgtC10LrRgdGC0LUg0YHQvtC+0LHRidC10L3QuNGPLlxuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcigoZXJyLmVycm9yKSA/IGVyci5lcnJvciA6IGVyciwgeyBjYXVzZTogZXJyIH0pXG4gICAgICAgIGNvbnN0IGF1dGhSZWZyZXNoRXJyb3IgPSBnZXRBdXRoUmVmcmVzaEVycm9yKGVycilcbiAgICAgICAgaWYgKGF1dGhSZWZyZXNoRXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24oZXJyb3IsIHsgYXV0aFJlZnJlc2hFcnJvciB9KVxuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9KSxcbiAgICAgIG1hcCh2ID0+IHtcbiAgICAgICAgaWYgKHYgJiYgdHlwZW9mIHYgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5ub3RSZXN0QW5zd2VyRXJyb3IoKVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zPy50aHJvd09uQXBpRXJyb3IgJiYgdiAmJiAhaW5zdGFuY2VPZmlCWFJlc3RBbnN3ZXJTdWNjZXNzKHYpKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5hcGlFcnJvckZyb21Cb2R5KHYpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEJYUmVzdE1hcFJlc3VsdCh2KVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICAvKipcbiAgICog0J/QtdGA0LLQsNGPINGB0YLRgNCw0L3QuNGG0LAg0LTQu9GPIGAucmVzQWxsKClgLiDQntGI0LjQsdC60LAgQml0cml4INCyINGC0LXQu9C1INC+0YLQstC10YLQsCAyeHgg0YHRgtCw0L3QvtCy0LjRgtGB0Y8gYEJYUmVzdEFwaUVycm9yYDpcbiAgICog0YHRgtGA0LDQvdC40YYg0LIg0YLQsNC60L7QvCDQvtGC0LLQtdGC0LUg0L3QtdGCLCDQuCDQsdC10Lcg0Y3RgtC+0LPQviBgLnJlc0FsbCgpYCDQt9Cw0LLQtdGA0YjQuNC70YHRjyDQsdGLINCx0LXQt9C70LjQutC40LwgYEVtcHR5RXJyb3JgLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc0ZpcnN0UGFnZSgpOiBPYnNlcnZhYmxlPGlCWFJlc3RBbnN3ZXJTdWNjZXNzPFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMucmVzVmFuaWxsYSgpLnBpcGUoXG4gICAgICBtYXAodiA9PiB7XG4gICAgICAgIGlmICghdiB8fCB0eXBlb2YgdiAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLm5vdFJlc3RBbnN3ZXJFcnJvcigpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpbnN0YW5jZU9maUJYUmVzdEFuc3dlclN1Y2Nlc3M8VD4odikpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmFwaUVycm9yRnJvbUJvZHkodilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdlxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICAvKipcbiAgICog0J7RgdGC0LDQu9GM0L3Ri9C1INGB0YLRgNCw0L3QuNGG0Ysg0LTQu9GPIGAucmVzQWxsKClgLCDQsiDQv9C+0YDRj9C00LrQtSBgcGFyYW1zYC4g0JrQvtC80LDQvdC00Ysg0YPRhdC+0LTRj9GCINGH0LXRgNC10LcgYGJhdGNoYCxcbiAgICog0L/QsNC60LXRgtGLIOKAlCDQv9C+INC+0YfQtdGA0LXQtNC4LiDQntGI0LjQsdC60LAg0LvRjtCx0L7QuSDRgdGC0YDQsNC90LjRhtGLINC30LDQstC10YDRiNCw0LXRgiDQstC10YHRjCDQt9Cw0L/RgNC+0YE6INC90LXQv9C+0LvQvdGL0Lkg0YHQv9C40YHQvtC6XG4gICAqINCy0YvQs9C70Y/QtNC10Lsg0LHRiyDQtNC70Y8g0LLRi9C30YvQstCw0Y7RidC10LPQviDQutC+0LTQsCDQutCw0Log0L/QvtC70L3Ri9C5LlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc1BhZ2VzPFBhZ2U+KHBhcmFtczogUFtdKTogT2JzZXJ2YWJsZTxQYWdlW10+IHtcbiAgICBjb25zdCBtZXRob2QgPSB0aGlzLmh0dHAuZ2V0TmFtZU1ldGhvZCh0aGlzLnVybClcbiAgICBjb25zdCBjb21tYW5kcyA9IHBhcmFtcy5tYXAocGFyYW0gPT4gbWV0aG9kICsgJz8nICsgc2VyaWFsaXplQml0cml4UGFyYW1zKHBhcmFtKSlcbiAgICBjb25zdCBiYXRjaGVzOiBzdHJpbmdbXVtdID0gW11cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tbWFuZHMubGVuZ3RoOyBpICs9IEJBVENIX0NPTU1BTkRTX0xJTUlUKSB7XG4gICAgICBiYXRjaGVzLnB1c2goY29tbWFuZHMuc2xpY2UoaSwgaSArIEJBVENIX0NPTU1BTkRTX0xJTUlUKSlcbiAgICB9XG5cbiAgICByZXR1cm4gZnJvbShiYXRjaGVzKS5waXBlKFxuICAgICAgY29uY2F0TWFwKGNtZCA9PiB0aGlzLmh0dHAucG9zdDxpQlhSZXN0QmF0Y2g8UGFnZVtdPj4oWydiYXRjaCddLCB7IGhhbHQ6IDEsIGNtZCB9LCBmYWxzZSwgdGhpcy5yZXF1ZXN0SGVhZGVycykpLFxuICAgICAgbWFwKGFuc3dlciA9PiB0aGlzLmJhdGNoUGFnZXM8UGFnZT4oYW5zd2VyKSksXG4gICAgICB0b0FycmF5KCksXG4gICAgICBtYXAocGFnZXMgPT4gcGFnZXMuZmxhdCgpIGFzIFBhZ2VbXSlcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGJhdGNoUGFnZXM8UGFnZT4oYW5zd2VyOiBpQlhSZXN0QW5zd2VyPGlCWFJlc3RCYXRjaDxQYWdlW10+PiB8IHVuZGVmaW5lZCk6IFBhZ2VbXSB7XG4gICAgaWYgKCFhbnN3ZXIgfHwgdHlwZW9mIGFuc3dlciAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IHRoaXMubm90UmVzdEFuc3dlckVycm9yKClcbiAgICB9XG4gICAgaWYgKCFpbnN0YW5jZU9maUJYUmVzdEFuc3dlclN1Y2Nlc3M8aUJYUmVzdEJhdGNoPFBhZ2VbXT4+KGFuc3dlcikpIHtcbiAgICAgIHRocm93IHRoaXMuYXBpRXJyb3JGcm9tQm9keShhbnN3ZXIpXG4gICAgfVxuICAgIC8vINCf0L7RgNGC0LDQuyDQvtGC0LTQsNGR0YIgcmVzdWx0X2Vycm9yINC80LDRgdGB0LjQstC+0LwsINC60L7Qs9C00LAg0L7RiNC40LHQvtC6INC90LXRgiwg0Lgg0L7QsdGK0LXQutGC0L7QvCDRgSDQutC70Y7Rh9Cw0LzQuCDQutC+0LzQsNC90LQsINC60L7Qs9C00LAg0LXRgdGC0YxcbiAgICBjb25zdCBmYWlsZWQgPSBPYmplY3QudmFsdWVzKGFuc3dlci5yZXN1bHQ/LnJlc3VsdF9lcnJvciA/PyB7fSlbMF1cbiAgICBpZiAoZmFpbGVkKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUJYUmVzdEVycm9yQm9keShmYWlsZWQpXG4gICAgICB0aHJvdyBuZXcgQlhSZXN0QXBpRXJyb3IocGFyc2VkPy5lcnJvciwgcGFyc2VkPy5lcnJvcl9kZXNjcmlwdGlvbiwgeyBtZXRob2Q6IHRoaXMuaHR0cC5nZXROYW1lTWV0aG9kKHRoaXMudXJsKSB9KVxuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhhbnN3ZXIucmVzdWx0Py5yZXN1bHQgPz8ge30pLmZpbHRlcihCb29sZWFuKSBhcyBQYWdlW11cbiAgfVxuXG4gIC8vINCSINGC0LXQutGB0YLQtSDQvtGI0LjQsdC60Lgg4oCUINGC0L7Qu9GM0LrQviDQvNC10YLQvtC0LCDQsdC10Lcg0YLQtdC70LAg0L7RgtCy0LXRgtCwOiDRjdGC0L4g0LzQvtC20LXRgiDQsdGL0YLRjCDRhtC10LvQsNGPIEhUTUwt0YHRgtGA0LDQvdC40YbQsFxuICBwcml2YXRlIG5vdFJlc3RBbnN3ZXJFcnJvcigpIHtcbiAgICByZXR1cm4gbmV3IEVycm9yKGBCaXRyaXgyNCBhbnN3ZXJlZCAke3RoaXMuaHR0cC5nZXROYW1lTWV0aG9kKHRoaXMudXJsKX0gd2l0aCBhIGJvZHkgdGhhdCBpcyBub3QgYSBSRVNUIHJlc3BvbnNlLmApXG4gIH1cblxuICBwcml2YXRlIGFwaUVycm9yRnJvbUJvZHkodjogaUJYUmVzdEFuc3dlckVycm9yKSB7XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VCWFJlc3RFcnJvckJvZHkodilcbiAgICByZXR1cm4gbmV3IEJYUmVzdEFwaUVycm9yKFxuICAgICAgcGFyc2VkID8gcGFyc2VkLmVycm9yIDogdi5lcnJvcixcbiAgICAgIHBhcnNlZCA/IHBhcnNlZC5lcnJvcl9kZXNjcmlwdGlvbiA6IHYuZXJyb3JfZGVzY3JpcHRpb24sXG4gICAgICB7IG1ldGhvZDogdGhpcy5odHRwLmdldE5hbWVNZXRob2QodGhpcy51cmwpIH1cbiAgICApXG4gIH1cblxufVxuIl19
@@ -1,10 +1,7 @@
1
- import { concatMap, from, last, mergeMap, shareReplay, throwError, toArray } from 'rxjs';
1
+ import { mergeMap, shareReplay } from 'rxjs';
2
2
  import clone from 'just-clone';
3
- import { catchError, map } from 'rxjs/operators';
4
- import { instanceOfiBXRestAnswerSuccess } from '../../functions/mapResult';
3
+ import { map } from 'rxjs/operators';
5
4
  import { NavvyPagBase } from './extends/navvy-pag-base';
6
- import { serializeBitrixParams } from '../../functions/serializeBitrixParams';
7
- import { BXRest } from '../../rest/base';
8
5
  /**
9
6
  * Класс-прослойка-обработчик для методов работающих на альтернативной постраничной навигации тика как методы по
10
7
  * затраченному времени на задачи https://dev.1c-bitrix.ru/rest_help/tasks/task/elapseditem/index.php
@@ -13,72 +10,25 @@ import { BXRest } from '../../rest/base';
13
10
  */
14
11
  export class NavvyAlterPagNav extends NavvyPagBase {
15
12
  resAll() {
16
- let save = [];
17
- return this.resultAllEnd()
18
- .pipe(map(v => {
19
- if (v) {
20
- save.push(...v);
21
- }
22
- return save;
23
- }), last(), shareReplay(1));
13
+ return this.resFirstPage().pipe(mergeMap(first => this.resPages(first.next ? this.pageParams(first.total) : []).pipe(map(pages => {
14
+ const items = [first.result ?? [], ...pages].flat();
15
+ return ((this.map ? this.map(items) : items) ?? []);
16
+ }))),
17
+ // refCount: без подписчиков оставшиеся страницы запрашивать незачем
18
+ shareReplay({ bufferSize: 1, refCount: true }));
24
19
  }
25
- resultAllEnd() {
26
- let BXRestClass = new BXRest();
27
- // return this.mapForVanillaEnd(this.func, this.param)
28
- return this.resFirstPage().pipe(mergeMap(items => {
29
- if (items && instanceOfiBXRestAnswerSuccess(items)) {
30
- if (items.total && items.next) {
31
- const count = [...Array(Math.floor(items.total / this.pageSize)).keys()];
32
- // Разделяем массив на блоки
33
- const chunks = [];
34
- for (let i = 0; i < count.length; i += this.pageSize) {
35
- chunks.push(count.slice(i, i + this.pageSize));
36
- }
37
- const batchRequests = chunks.map(chunk => {
38
- return BXRestClass.batch({
39
- halt: 1,
40
- cmd: chunk.map(i => {
41
- const param = clone(this.param);
42
- if (!param.PARAMS) {
43
- param.PARAMS = {
44
- NAV_PARAMS: {
45
- iNumPage: 0,
46
- nPageSize: 50
47
- }
48
- };
49
- }
50
- // Устанавливаем start в зависимости от индекса
51
- param.PARAMS.NAV_PARAMS.iNumPage = i + 2; // первая страница уже есть, старт со второй
52
- // Формируем строку запроса
53
- return this.http.getNameMethod(this.url)
54
- + '?' + serializeBitrixParams(param);
55
- })
56
- }, this.requestHeaders);
57
- });
58
- return from(batchRequests).pipe(concatMap(request => request), // Выполняет запросы по очереди
59
- toArray(), // Собирает все результаты в массив
60
- map(results => {
61
- const res = items.result;
62
- for (let result of results) {
63
- if (result && instanceOfiBXRestAnswerSuccess(result) && result.result && result.result.result) {
64
- res.push(...result.result.result.map(i => i).flat());
65
- }
66
- }
67
- return (this.map) ?
68
- this.map(res)
69
- : res;
70
- }));
71
- }
72
- }
73
- return this.mapResultForGetAll(items);
74
- }), catchError(err => {
75
- // this.snackBar.error("Проблемы с поточным получение затреканого времени")
76
- console.error(err);
77
- return throwError(() => err);
78
- }));
79
- }
80
- mapResultForGetAll(items) {
81
- return (instanceOfiBXRestAnswerSuccess(items)) ? from([items.result]).pipe(map(v => (v && this.map) ? this.map(v) : v)) : from([]);
20
+ /**
21
+ * Параметры остальных страниц. Размер страницы берётся из запроса: портал ограничивает
22
+ * его 50 записями, но вызывающий код может попросить и меньше.
23
+ */
24
+ pageParams(total = 0) {
25
+ const nav = this.param.PARAMS?.NAV_PARAMS;
26
+ const nPageSize = Math.min(nav?.nPageSize || this.pageSize, this.pageSize);
27
+ const pages = [];
28
+ for (let iNumPage = (nav?.iNumPage || 1) + 1; iNumPage <= Math.ceil(total / nPageSize); iNumPage++) {
29
+ pages.push({ ...clone(this.param), PARAMS: { ...this.param.PARAMS, NAV_PARAMS: { ...nav, nPageSize, iNumPage } } });
30
+ }
31
+ return pages;
82
32
  }
83
33
  }
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2dnktYWx0ZXJuYXRpdmUtcGFnaW5hdGlvbi1uYXZpZ2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYngtcmVzdC9zcmMvc2VydmljZXMvbmF2dnkvbmF2dnktYWx0ZXJuYXRpdmUtcGFnaW5hdGlvbi1uYXZpZ2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFFeEYsT0FBTyxLQUFLLE1BQU0sWUFBWSxDQUFBO0FBQzlCLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFHaEQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFDMUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQ3ZELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFBO0FBQzdFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUV4Qzs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxnQkFBK0QsU0FBUSxZQUF5QjtJQUUzRyxNQUFNO1FBQ0osSUFBSSxJQUFJLEdBQTRCLEVBQUUsQ0FBQTtRQUN0QyxPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUU7YUFDdkIsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNKLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQTRCLENBQUMsQ0FBQTtZQUM1QyxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDLENBQ0YsRUFDRCxJQUFJLEVBQUUsRUFDTixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FB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QUM7d0JBRUQsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOzRCQUNqQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQzs0QkFDYixDQUFDLENBQUMsR0FBRyxDQUFBO29CQUNULENBQUMsQ0FBQyxDQUNILENBQUE7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN2QyxDQUFDLENBQ0YsRUFDRCxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDZiwyRUFBMkU7WUFDM0UsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNsQixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUM5QixDQUFDLENBQUMsQ0FDSCxDQUFBO0lBQ0gsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEtBQXFDO1FBQzlELE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3hFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQzVDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUE2QixDQUFDLENBQUE7SUFDekMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29uY2F0TWFwLCBmcm9tLCBsYXN0LCBtZXJnZU1hcCwgc2hhcmVSZXBsYXksIHRocm93RXJyb3IsIHRvQXJyYXkgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgaUJYUmVzdEFuc3dlciB9IGZyb20gJy4uLy4uL3R5cGlmaWNhdGlvbi9yZXN0L2Jhc2UvYW5zd2VyJ1xuaW1wb3J0IGNsb25lIGZyb20gJ2p1c3QtY2xvbmUnXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7IFJldHVyblR5cGVOYXZ2eSB9IGZyb20gJy4vbmF2dnktc3VwcG9ydCdcbmltcG9ydCB7IGlCWFJlc3RBbHRlcm5hdGl2ZVBhZ2luYXRpb24gfSBmcm9tICcuLi8uLi90eXBpZmljYXRpb24vcmVzdC9iYXNlL2FwaS1wYWdpbmF0aW9uLWJ4J1xuaW1wb3J0IHsgaW5zdGFuY2VPZmlCWFJlc3RBbnN3ZXJTdWNjZXNzIH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zL21hcFJlc3VsdCdcbmltcG9ydCB7IE5hdnZ5UGFnQmFzZSB9IGZyb20gJy4vZXh0ZW5kcy9uYXZ2eS1wYWctYmFzZSdcbmltcG9ydCB7IHNlcmlhbGl6ZUJpdHJpeFBhcmFtcyB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucy9zZXJpYWxpemVCaXRyaXhQYXJhbXMnXG5pbXBvcnQgeyBCWFJlc3QgfSBmcm9tICcuLi8uLi9yZXN0L2Jhc2UnXG5cbi8qKlxuICog0JrQu9Cw0YHRgS3Qv9GA0L7RgdC70L7QudC60LAt0L7QsdGA0LDQsdC+0YLRh9C40Log0LTQu9GPINC80LXRgtC+0LTQvtCyINGA0LDQsdC+0YLQsNGO0YnQuNGFINC90LAg0LDQu9GM0YLQtdGA0L3QsNGC0LjQstC90L7QuSDQv9C+0YHRgtGA0LDQvdC40YfQvdC+0Lkg0L3QsNCy0LjQs9Cw0YbQuNC4INGC0LjQutCwINC60LDQuiDQvNC10YLQvtC00Ysg0L/QvlxuICog0LfQsNGC0YDQsNGH0LXQvdC90L7QvNGDINCy0YDQtdC80LXQvdC4INC90LAg0LfQsNC00LDRh9C4IGh0dHBzOi8vZGV2LjFjLWJpdHJpeC5ydS9yZXN0X2hlbHAvdGFza3MvdGFzay9lbGFwc2VkaXRlbS9pbmRleC5waHBcbiAqXG4gKiDQvdC1INC30LDQstC10YDRiNC10L3QvdGL0Lkg0LrQu9Cw0YHRgSwg0YDQsNCx0L7RgtCw0LXQvCDQvtGCINGH0LDRgdGC0L3QvtCz0L4g0Log0L7QsdGJ0LXQvNGDXG4gKi9cbmV4cG9ydCBjbGFzcyBOYXZ2eUFsdGVyUGFnTmF2PFQsIFIsIFAgZXh0ZW5kcyBpQlhSZXN0QWx0ZXJuYXRpdmVQYWdpbmF0aW9uPiBleHRlbmRzIE5hdnZ5UGFnQmFzZTxUW10sIFJbXSwgUD4ge1xuXG4gIHJlc0FsbCgpIHtcbiAgICBsZXQgc2F2ZTogUmV0dXJuVHlwZU5hdnZ5PFQsIFI+W10gPSBbXVxuICAgIHJldHVybiB0aGlzLnJlc3VsdEFsbEVuZCgpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHYgPT4ge1xuICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgc2F2ZS5wdXNoKC4uLnYgYXMgUmV0dXJuVHlwZU5hdnZ5PFQsIFI+W10pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2F2ZVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgbGFzdCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSByZXN1bHRBbGxFbmQoKSB7XG4gICAgbGV0IEJYUmVzdENsYXNzID0gbmV3IEJYUmVzdCgpXG4gICAgLy8gcmV0dXJuICB0aGlzLm1hcEZvclZhbmlsbGFFbmQodGhpcy5mdW5jLCB0aGlzLnBhcmFtKVxuICAgIHJldHVybiB0aGlzLnJlc0ZpcnN0UGFnZSgpLnBpcGUoXG4gICAgICBtZXJnZU1hcChcbiAgICAgICAgaXRlbXMgPT4ge1xuICAgICAgICAgIGlmIChpdGVtcyAmJiBpbnN0YW5jZU9maUJYUmVzdEFuc3dlclN1Y2Nlc3MoaXRlbXMpKSB7XG4gICAgICAgICAgICBpZiAoaXRlbXMudG90YWwgJiYgaXRlbXMubmV4dCkge1xuICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IFsuLi5BcnJheShNYXRoLmZsb29yKGl0ZW1zLnRvdGFsIC8gdGhpcy5wYWdlU2l6ZSkpLmtleXMoKV1cblxuICAgICAgICAgICAgICAvLyDQoNCw0LfQtNC10LvRj9C10Lwg0LzQsNGB0YHQuNCyINC90LAg0LHQu9C+0LrQuFxuICAgICAgICAgICAgICBjb25zdCBjaHVua3MgPSBbXVxuXG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQubGVuZ3RoOyBpICs9IHRoaXMucGFnZVNpemUpIHtcbiAgICAgICAgICAgICAgICBjaHVua3MucHVzaChjb3VudC5zbGljZShpLCBpICsgdGhpcy5wYWdlU2l6ZSkpXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBiYXRjaFJlcXVlc3RzID0gY2h1bmtzLm1hcChjaHVuayA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEJYUmVzdENsYXNzLmJhdGNoPFRbXVtdPih7XG4gICAgICAgICAgICAgICAgICBoYWx0OiAxLFxuICAgICAgICAgICAgICAgICAgY21kOiBjaHVuay5tYXAoaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtID0gY2xvbmUodGhpcy5wYXJhbSlcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmFtLlBBUkFNUykge1xuICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLlBBUkFNUyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIE5BVl9QQVJBTVM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaU51bVBhZ2U6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5QYWdlU2l6ZTogNTBcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyDQo9GB0YLQsNC90LDQstC70LjQstCw0LXQvCBzdGFydCDQsiDQt9Cw0LLQuNGB0LjQvNC+0YHRgtC4INC+0YIg0LjQvdC00LXQutGB0LBcbiAgICAgICAgICAgICAgICAgICAgcGFyYW0uUEFSQU1TIS5OQVZfUEFSQU1TLmlOdW1QYWdlID0gaSArIDIgLy8g0L/QtdGA0LLQsNGPINGB0YLRgNCw0L3QuNGG0LAg0YPQttC1INC10YHRgtGMLCDRgdGC0LDRgNGCINGB0L4g0LLRgtC+0YDQvtC5XG5cbiAgICAgICAgICAgICAgICAgICAgLy8g0KTQvtGA0LzQuNGA0YPQtdC8INGB0YLRgNC+0LrRgyDQt9Cw0L/RgNC+0YHQsFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldE5hbWVNZXRob2QodGhpcy51cmwpXG4gICAgICAgICAgICAgICAgICAgICAgKyAnPycgKyBzZXJpYWxpemVCaXRyaXhQYXJhbXMocGFyYW0pXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0sIHRoaXMucmVxdWVzdEhlYWRlcnMpXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgcmV0dXJuIGZyb20oYmF0Y2hSZXF1ZXN0cykucGlwZShcbiAgICAgICAgICAgICAgICBjb25jYXRNYXAocmVxdWVzdCA9PiByZXF1ZXN0KSwgLy8g0JLRi9C/0L7Qu9C90Y/QtdGCINC30LDQv9GA0L7RgdGLINC/0L4g0L7Rh9C10YDQtdC00LhcbiAgICAgICAgICAgICAgICB0b0FycmF5KCksIC8vINCh0L7QsdC40YDQsNC10YIg0LLRgdC1INGA0LXQt9GD0LvRjNGC0LDRgtGLINCyINC80LDRgdGB0LjQslxuICAgICAgICAgICAgICAgIG1hcChyZXN1bHRzID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGl0ZW1zLnJlc3VsdCBhcyBUW11cbiAgICAgICAgICAgICAgICAgIGZvciAobGV0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgaW5zdGFuY2VPZmlCWFJlc3RBbnN3ZXJTdWNjZXNzKHJlc3VsdCkgJiYgcmVzdWx0LnJlc3VsdCAmJiByZXN1bHQucmVzdWx0LnJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKC4uLnJlc3VsdC5yZXN1bHQucmVzdWx0Lm1hcChpID0+IGkpLmZsYXQoKSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMubWFwKSA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwKHJlcylcbiAgICAgICAgICAgICAgICAgICAgOiByZXNcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHRoaXMubWFwUmVzdWx0Rm9yR2V0QWxsKGl0ZW1zKVxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAvLyB0aGlzLnNuYWNrQmFyLmVycm9yKFwi0J/RgNC+0LHQu9C10LzRiyDRgSDQv9C+0YLQvtGH0L3Ri9C8INC/0L7Qu9GD0YfQtdC90LjQtSDQt9Cw0YLRgNC10LrQsNC90L7Qs9C+INCy0YDQtdC80LXQvdC4XCIpXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnIpXG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgbWFwUmVzdWx0Rm9yR2V0QWxsKGl0ZW1zOiBpQlhSZXN0QW5zd2VyPFRbXT4gfCB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gKGluc3RhbmNlT2ZpQlhSZXN0QW5zd2VyU3VjY2VzcyhpdGVtcykpID8gZnJvbShbaXRlbXMucmVzdWx0XSkucGlwZShcbiAgICAgIG1hcCh2ID0+ICh2ICYmIHRoaXMubWFwKSA/IHRoaXMubWFwKHYpIDogdilcbiAgICApIDogZnJvbShbXSBhcyBSZXR1cm5UeXBlTmF2dnk8VCwgUj5bXSlcbiAgfVxufVxuIl19
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2dnktYWx0ZXJuYXRpdmUtcGFnaW5hdGlvbi1uYXZpZ2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYngtcmVzdC9zcmMvc2VydmljZXMvbmF2dnkvbmF2dnktYWx0ZXJuYXRpdmUtcGFnaW5hdGlvbi1uYXZpZ2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzVDLE9BQU8sS0FBSyxNQUFNLFlBQVksQ0FBQTtBQUM5QixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFHcEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBRXZEOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLGdCQUErRCxTQUFRLFlBQXlCO0lBRTNHLE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQzdCLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdkYsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1YsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBUyxDQUFBO1lBQzFELE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBNEIsQ0FBQTtRQUNoRixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0Ysb0VBQW9FO1FBQ3BFLFdBQVcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQy9DLENBQUE7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssVUFBVSxDQUFDLEtBQUssR0FBRyxDQUFDO1FBQzFCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQTtRQUN6QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxTQUFTLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDMUUsTUFBTSxLQUFLLEdBQVEsRUFBRSxDQUFBO1FBRXJCLEtBQUssSUFBSSxRQUFRLEdBQUcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUNuRyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ3JILENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1lcmdlTWFwLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMnXG5pbXBvcnQgY2xvbmUgZnJvbSAnanVzdC1jbG9uZSdcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IHsgUmV0dXJuVHlwZU5hdnZ5IH0gZnJvbSAnLi9uYXZ2eS1zdXBwb3J0J1xuaW1wb3J0IHsgaUJYUmVzdEFsdGVybmF0aXZlUGFnaW5hdGlvbiB9IGZyb20gJy4uLy4uL3R5cGlmaWNhdGlvbi9yZXN0L2Jhc2UvYXBpLXBhZ2luYXRpb24tYngnXG5pbXBvcnQgeyBOYXZ2eVBhZ0Jhc2UgfSBmcm9tICcuL2V4dGVuZHMvbmF2dnktcGFnLWJhc2UnXG5cbi8qKlxuICog0JrQu9Cw0YHRgS3Qv9GA0L7RgdC70L7QudC60LAt0L7QsdGA0LDQsdC+0YLRh9C40Log0LTQu9GPINC80LXRgtC+0LTQvtCyINGA0LDQsdC+0YLQsNGO0YnQuNGFINC90LAg0LDQu9GM0YLQtdGA0L3QsNGC0LjQstC90L7QuSDQv9C+0YHRgtGA0LDQvdC40YfQvdC+0Lkg0L3QsNCy0LjQs9Cw0YbQuNC4INGC0LjQutCwINC60LDQuiDQvNC10YLQvtC00Ysg0L/QvlxuICog0LfQsNGC0YDQsNGH0LXQvdC90L7QvNGDINCy0YDQtdC80LXQvdC4INC90LAg0LfQsNC00LDRh9C4IGh0dHBzOi8vZGV2LjFjLWJpdHJpeC5ydS9yZXN0X2hlbHAvdGFza3MvdGFzay9lbGFwc2VkaXRlbS9pbmRleC5waHBcbiAqXG4gKiDQvdC1INC30LDQstC10YDRiNC10L3QvdGL0Lkg0LrQu9Cw0YHRgSwg0YDQsNCx0L7RgtCw0LXQvCDQvtGCINGH0LDRgdGC0L3QvtCz0L4g0Log0L7QsdGJ0LXQvNGDXG4gKi9cbmV4cG9ydCBjbGFzcyBOYXZ2eUFsdGVyUGFnTmF2PFQsIFIsIFAgZXh0ZW5kcyBpQlhSZXN0QWx0ZXJuYXRpdmVQYWdpbmF0aW9uPiBleHRlbmRzIE5hdnZ5UGFnQmFzZTxUW10sIFJbXSwgUD4ge1xuXG4gIHJlc0FsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNGaXJzdFBhZ2UoKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoZmlyc3QgPT4gdGhpcy5yZXNQYWdlczxUW10+KGZpcnN0Lm5leHQgPyB0aGlzLnBhZ2VQYXJhbXMoZmlyc3QudG90YWwpIDogW10pLnBpcGUoXG4gICAgICAgIG1hcChwYWdlcyA9PiB7XG4gICAgICAgICAgY29uc3QgaXRlbXMgPSBbZmlyc3QucmVzdWx0ID8/IFtdLCAuLi5wYWdlc10uZmxhdCgpIGFzIFRbXVxuICAgICAgICAgIHJldHVybiAoKHRoaXMubWFwID8gdGhpcy5tYXAoaXRlbXMpIDogaXRlbXMpID8/IFtdKSBhcyBSZXR1cm5UeXBlTmF2dnk8VCwgUj5bXVxuICAgICAgICB9KVxuICAgICAgKSksXG4gICAgICAvLyByZWZDb3VudDog0LHQtdC3INC/0L7QtNC/0LjRgdGH0LjQutC+0LIg0L7RgdGC0LDQstGI0LjQtdGB0Y8g0YHRgtGA0LDQvdC40YbRiyDQt9Cw0L/RgNCw0YjQuNCy0LDRgtGMINC90LXQt9Cw0YfQtdC8XG4gICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqINCf0LDRgNCw0LzQtdGC0YDRiyDQvtGB0YLQsNC70YzQvdGL0YUg0YHRgtGA0LDQvdC40YYuINCg0LDQt9C80LXRgCDRgdGC0YDQsNC90LjRhtGLINCx0LXRgNGR0YLRgdGPINC40Lcg0LfQsNC/0YDQvtGB0LA6INC/0L7RgNGC0LDQuyDQvtCz0YDQsNC90LjRh9C40LLQsNC10YJcbiAgICog0LXQs9C+IDUwINC30LDQv9C40YHRj9C80LgsINC90L4g0LLRi9C30YvQstCw0Y7RidC40Lkg0LrQvtC0INC80L7QttC10YIg0L/QvtC/0YDQvtGB0LjRgtGMINC4INC80LXQvdGM0YjQtS5cbiAgICovXG4gIHByaXZhdGUgcGFnZVBhcmFtcyh0b3RhbCA9IDApOiBQW10ge1xuICAgIGNvbnN0IG5hdiA9IHRoaXMucGFyYW0uUEFSQU1TPy5OQVZfUEFSQU1TXG4gICAgY29uc3QgblBhZ2VTaXplID0gTWF0aC5taW4obmF2Py5uUGFnZVNpemUgfHwgdGhpcy5wYWdlU2l6ZSwgdGhpcy5wYWdlU2l6ZSlcbiAgICBjb25zdCBwYWdlczogUFtdID0gW11cblxuICAgIGZvciAobGV0IGlOdW1QYWdlID0gKG5hdj8uaU51bVBhZ2UgfHwgMSkgKyAxOyBpTnVtUGFnZSA8PSBNYXRoLmNlaWwodG90YWwgLyBuUGFnZVNpemUpOyBpTnVtUGFnZSsrKSB7XG4gICAgICBwYWdlcy5wdXNoKHsgLi4uY2xvbmUodGhpcy5wYXJhbSksIFBBUkFNUzogeyAuLi50aGlzLnBhcmFtLlBBUkFNUywgTkFWX1BBUkFNUzogeyAuLi5uYXYsIG5QYWdlU2l6ZSwgaU51bVBhZ2UgfSB9IH0pXG4gICAgfVxuICAgIHJldHVybiBwYWdlc1xuICB9XG59XG4iXX0=
@@ -1,10 +1,6 @@
1
- import { concatMap, from, last, map, mergeMap, shareReplay, throwError, toArray } from 'rxjs';
2
- import { catchError } from 'rxjs/operators';
3
- import clone from 'just-clone';
4
- import { instanceOfiBXRestAnswerSuccess } from '../../functions/mapResult';
5
- import { serializeBitrixParams } from '../../functions/serializeBitrixParams';
6
- import { BXRest } from '../../rest/base';
7
- import { NavvyPagBase } from './extends/navvy-pag-base';
1
+ import { mergeMap, shareReplay } from 'rxjs';
2
+ import { map } from 'rxjs/operators';
3
+ import { NavvyPagBase, offsetPageParams } from './extends/navvy-pag-base';
8
4
  /** Пагинация для методов, возвращающих коллекцию как объект с идентификаторами в ключах. */
9
5
  export class NavvyPagNavResultKeyObject extends NavvyPagBase {
10
6
  constructor(url, param, key, mapResult) {
@@ -13,47 +9,12 @@ export class NavvyPagNavResultKeyObject extends NavvyPagBase {
13
9
  this.key = key;
14
10
  }
15
11
  resAll() {
16
- return this.resultAllEnd().pipe(last(), shareReplay(1));
17
- }
18
- resultAllEnd() {
19
- const bxRest = new BXRest();
20
- return this.resFirstPage().pipe(mergeMap(items => {
21
- if (!items || !instanceOfiBXRestAnswerSuccess(items)) {
22
- return from([]);
23
- }
24
- if (!items.total || items.total <= this.pageSize) {
25
- return this.mapResult(items);
26
- }
27
- const pageCount = Math.ceil(items.total / this.pageSize);
28
- const commands = Array.from({ length: pageCount - 1 }, (_, index) => {
29
- const param = clone(this.param);
30
- param.start = (index + 1) * this.pageSize;
31
- return bxRest.batch({
32
- halt: 1,
33
- cmd: [this.http.getNameMethod(this.url) + '?' + serializeBitrixParams(param)]
34
- }, this.requestHeaders);
35
- });
36
- return from(commands).pipe(concatMap(request => request), toArray(), mergeMap(results => {
37
- const merged = { ...(items.result?.[this.key] ?? {}) };
38
- for (const result of results) {
39
- if (result && instanceOfiBXRestAnswerSuccess(result)) {
40
- for (const page of result.result?.result ?? []) {
41
- Object.assign(merged, page?.[this.key] ?? {});
42
- }
43
- }
44
- }
45
- return this.mapResult({ result: { [this.key]: merged } });
46
- }));
47
- }), catchError(error => {
48
- console.error(error);
49
- return throwError(() => error);
50
- }));
51
- }
52
- mapResult(items) {
53
- if (!instanceOfiBXRestAnswerSuccess(items)) {
54
- return from([]);
55
- }
56
- return from([items.result]).pipe(map(value => this.map?.(value)));
12
+ return this.resFirstPage().pipe(mergeMap(first => this.resPages(offsetPageParams(this.param, first.total, this.pageSize)).pipe(map(pages => {
13
+ const merged = Object.assign({}, first.result?.[this.key], ...pages.map(page => page[this.key]));
14
+ return this.map?.({ ...first.result, [this.key]: merged });
15
+ }))),
16
+ // refCount: без подписчиков оставшиеся страницы запрашивать незачем
17
+ shareReplay({ bufferSize: 1, refCount: true }));
57
18
  }
58
19
  }
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2dnktcGFnLW5hdi1yZXN1bHQta2V5LW9iamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3NlcnZpY2VzL25hdnZ5L25hdnZ5LXBhZy1uYXYtcmVzdWx0LWtleS1vYmplY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDN0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQzNDLE9BQU8sS0FBSyxNQUFNLFlBQVksQ0FBQTtBQUc5QixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUMxRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQTtBQUM3RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBSXZELDRGQUE0RjtBQUM1RixNQUFNLE9BQU8sMEJBS1gsU0FBUSxZQUE2QztJQUNyRCxZQUNFLEdBQWEsRUFDYixLQUFRLEVBQ1MsR0FBTSxFQUN2QixTQUEyRTtRQUUzRSxtR0FBbUc7UUFDbkcsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBbUIsQ0FBQyxDQUFDLENBQUE7UUFKL0UsUUFBRyxHQUFILEdBQUcsQ0FBRztJQUt6QixDQUFDO0lBRUQsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FB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QUFDLENBQ0gsQ0FBQTtJQUNILENBQUM7SUFFTyxTQUFTLENBQUMsS0FBNkM7UUFDN0QsSUFBSSxDQUFDLDhCQUE4QixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDM0MsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDakIsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUM5QixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDaEMsQ0FBQTtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbmNhdE1hcCwgZnJvbSwgbGFzdCwgbWFwLCBtZXJnZU1hcCwgc2hhcmVSZXBsYXksIHRocm93RXJyb3IsIHRvQXJyYXkgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IGNsb25lIGZyb20gJ2p1c3QtY2xvbmUnXG5pbXBvcnQgeyBpQlhSZXN0UGFnaW5hdGlvbiB9IGZyb20gJy4uLy4uL3R5cGlmaWNhdGlvbi9yZXN0L2Jhc2UvYXBpLXBhZ2luYXRpb24tYngnXG5pbXBvcnQgeyBpQlhSZXN0QW5zd2VyIH0gZnJvbSAnLi4vLi4vdHlwaWZpY2F0aW9uL3Jlc3QvYmFzZS9hbnN3ZXInXG5pbXBvcnQgeyBpbnN0YW5jZU9maUJYUmVzdEFuc3dlclN1Y2Nlc3MgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMvbWFwUmVzdWx0J1xuaW1wb3J0IHsgc2VyaWFsaXplQml0cml4UGFyYW1zIH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zL3NlcmlhbGl6ZUJpdHJpeFBhcmFtcydcbmltcG9ydCB7IEJYUmVzdCB9IGZyb20gJy4uLy4uL3Jlc3QvYmFzZSdcbmltcG9ydCB7IE5hdnZ5UGFnQmFzZSB9IGZyb20gJy4vZXh0ZW5kcy9uYXZ2eS1wYWctYmFzZSdcblxudHlwZSBLZXllZE9iamVjdFJlc3VsdDxLIGV4dGVuZHMgc3RyaW5nLCBUPiA9IFJlY29yZDxLLCBSZWNvcmQ8c3RyaW5nLCBUPiB8IHVuZGVmaW5lZD5cblxuLyoqINCf0LDQs9C40L3QsNGG0LjRjyDQtNC70Y8g0LzQtdGC0L7QtNC+0LIsINCy0L7Qt9Cy0YDQsNGJ0LDRjtGJ0LjRhSDQutC+0LvQu9C10LrRhtC40Y4g0LrQsNC6INC+0LHRitC10LrRgiDRgSDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNCw0LzQuCDQsiDQutC70Y7Rh9Cw0YUuICovXG5leHBvcnQgY2xhc3MgTmF2dnlQYWdOYXZSZXN1bHRLZXlPYmplY3Q8XG4gIFQsXG4gIFIsXG4gIFAgZXh0ZW5kcyBpQlhSZXN0UGFnaW5hdGlvbixcbiAgSyBleHRlbmRzIHN0cmluZ1xuPiBleHRlbmRzIE5hdnZ5UGFnQmFzZTxLZXllZE9iamVjdFJlc3VsdDxLLCBUPiwgUltdLCBQPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHVybDogc3RyaW5nW10sXG4gICAgcGFyYW06IFAsXG4gICAgcHJpdmF0ZSByZWFkb25seSBrZXk6IEssXG4gICAgbWFwUmVzdWx0PzogKHBhcmFtOiBLZXllZE9iamVjdFJlc3VsdDxLLCBUPiB8IHVuZGVmaW5lZCkgPT4gUltdIHwgdW5kZWZpbmVkXG4gICkge1xuICAgIC8vINCR0LXQtyDRgdCy0L7QtdCz0L4gbWFwINGA0LXQt9GD0LvRjNGC0LDRgiDigJQg0LfQvdCw0YfQtdC90LjRjyDQvtCx0YrQtdC60YLQsCDQv9C+INC60LvRjtGH0YMsINC60LDQuiDQuCDQvtCx0LXRidCw0Y7RgiDRgtC40L/RiyBgLnJlcygpYCDQuCBgLnJlc0FsbCgpYC5cbiAgICBzdXBlcih1cmwsIHBhcmFtLCBtYXBSZXN1bHQgPz8gKHJlc3VsdCA9PiBPYmplY3QudmFsdWVzKHJlc3VsdD8uW2tleV0gPz8ge30pIGFzIHVua25vd24gYXMgUltdKSlcbiAgfVxuXG4gIHJlc0FsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXN1bHRBbGxFbmQoKS5waXBlKGxhc3QoKSwgc2hhcmVSZXBsYXkoMSkpXG4gIH1cblxuICBwcml2YXRlIHJlc3VsdEFsbEVuZCgpIHtcbiAgICBjb25zdCBieFJlc3QgPSBuZXcgQlhSZXN0KClcblxuICAgIHJldHVybiB0aGlzLnJlc0ZpcnN0UGFnZSgpLnBpcGUoXG4gICAgICBtZXJnZU1hcChpdGVtcyA9PiB7XG4gICAgICAgIGlmICghaXRlbXMgfHwgIWluc3RhbmNlT2ZpQlhSZXN0QW5zd2VyU3VjY2VzcyhpdGVtcykpIHtcbiAgICAgICAgICByZXR1cm4gZnJvbShbXSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXRlbXMudG90YWwgfHwgaXRlbXMudG90YWwgPD0gdGhpcy5wYWdlU2l6ZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLm1hcFJlc3VsdChpdGVtcylcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhZ2VDb3VudCA9IE1hdGguY2VpbChpdGVtcy50b3RhbCAvIHRoaXMucGFnZVNpemUpXG4gICAgICAgIGNvbnN0IGNvbW1hbmRzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogcGFnZUNvdW50IC0gMSB9LCAoXywgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJhbSA9IGNsb25lKHRoaXMucGFyYW0pXG4gICAgICAgICAgcGFyYW0uc3RhcnQgPSAoaW5kZXggKyAxKSAqIHRoaXMucGFnZVNpemVcbiAgICAgICAgICByZXR1cm4gYnhSZXN0LmJhdGNoPEtleWVkT2JqZWN0UmVzdWx0PEssIFQ+W10+KHtcbiAgICAgICAgICAgIGhhbHQ6IDEsXG4gICAgICAgICAgICBjbWQ6IFt0aGlzLmh0dHAuZ2V0TmFtZU1ldGhvZCh0aGlzLnVybCkgKyAnPycgKyBzZXJpYWxpemVCaXRyaXhQYXJhbXMocGFyYW0pXVxuICAgICAgICAgIH0sIHRoaXMucmVxdWVzdEhlYWRlcnMpXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmV0dXJuIGZyb20oY29tbWFuZHMpLnBpcGUoXG4gICAgICAgICAgY29uY2F0TWFwKHJlcXVlc3QgPT4gcmVxdWVzdCksXG4gICAgICAgICAgdG9BcnJheSgpLFxuICAgICAgICAgIG1lcmdlTWFwKHJlc3VsdHMgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWVyZ2VkID0geyAuLi4oaXRlbXMucmVzdWx0Py5bdGhpcy5rZXldID8/IHt9KSB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiBpbnN0YW5jZU9maUJYUmVzdEFuc3dlclN1Y2Nlc3MocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGFnZSBvZiByZXN1bHQucmVzdWx0Py5yZXN1bHQgPz8gW10pIHtcbiAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obWVyZ2VkLCBwYWdlPy5bdGhpcy5rZXldID8/IHt9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXBSZXN1bHQoeyByZXN1bHQ6IHsgW3RoaXMua2V5XTogbWVyZ2VkIH0gYXMgS2V5ZWRPYmplY3RSZXN1bHQ8SywgVD4gfSlcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcilcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBSZXN1bHQoaXRlbXM6IGlCWFJlc3RBbnN3ZXI8S2V5ZWRPYmplY3RSZXN1bHQ8SywgVD4+KSB7XG4gICAgaWYgKCFpbnN0YW5jZU9maUJYUmVzdEFuc3dlclN1Y2Nlc3MoaXRlbXMpKSB7XG4gICAgICByZXR1cm4gZnJvbShbXSlcbiAgICB9XG5cbiAgICByZXR1cm4gZnJvbShbaXRlbXMucmVzdWx0XSkucGlwZShcbiAgICAgIG1hcCh2YWx1ZSA9PiB0aGlzLm1hcD8uKHZhbHVlKSlcbiAgICApXG4gIH1cbn1cbiJdfQ==
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2dnktcGFnLW5hdi1yZXN1bHQta2V5LW9iamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3NlcnZpY2VzL25hdnZ5L25hdnZ5LXBhZy1uYXYtcmVzdWx0LWtleS1vYmplY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDNUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRXBDLE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUl6RSw0RkFBNEY7QUFDNUYsTUFBTSxPQUFPLDBCQUtYLFNBQVEsWUFBNkM7SUFDckQsWUFDRSxHQUFhLEVBQ2IsS0FBUSxFQUNTLEdBQU0sRUFDdkIsU0FBMkU7UUFFM0UsbUdBQW1HO1FBQ25HLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQW1CLENBQUMsQ0FBQyxDQUFBO1FBSi9FLFFBQUcsR0FBSCxHQUFHLENBQUc7SUFLekIsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQzdCLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQTBCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3JILEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNWLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDaEcsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUE2QixDQUFDLENBQUE7UUFDdkYsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNGLG9FQUFvRTtRQUNwRSxXQUFXLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUMvQyxDQUFBO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWVyZ2VNYXAsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcydcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IHsgaUJYUmVzdFBhZ2luYXRpb24gfSBmcm9tICcuLi8uLi90eXBpZmljYXRpb24vcmVzdC9iYXNlL2FwaS1wYWdpbmF0aW9uLWJ4J1xuaW1wb3J0IHsgTmF2dnlQYWdCYXNlLCBvZmZzZXRQYWdlUGFyYW1zIH0gZnJvbSAnLi9leHRlbmRzL25hdnZ5LXBhZy1iYXNlJ1xuXG50eXBlIEtleWVkT2JqZWN0UmVzdWx0PEsgZXh0ZW5kcyBzdHJpbmcsIFQ+ID0gUmVjb3JkPEssIFJlY29yZDxzdHJpbmcsIFQ+IHwgdW5kZWZpbmVkPlxuXG4vKiog0J/QsNCz0LjQvdCw0YbQuNGPINC00LvRjyDQvNC10YLQvtC00L7Qsiwg0LLQvtC30LLRgNCw0YnQsNGO0YnQuNGFINC60L7Qu9C70LXQutGG0LjRjiDQutCw0Log0L7QsdGK0LXQutGCINGBINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0LDQvNC4INCyINC60LvRjtGH0LDRhS4gKi9cbmV4cG9ydCBjbGFzcyBOYXZ2eVBhZ05hdlJlc3VsdEtleU9iamVjdDxcbiAgVCxcbiAgUixcbiAgUCBleHRlbmRzIGlCWFJlc3RQYWdpbmF0aW9uLFxuICBLIGV4dGVuZHMgc3RyaW5nXG4+IGV4dGVuZHMgTmF2dnlQYWdCYXNlPEtleWVkT2JqZWN0UmVzdWx0PEssIFQ+LCBSW10sIFA+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgdXJsOiBzdHJpbmdbXSxcbiAgICBwYXJhbTogUCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGtleTogSyxcbiAgICBtYXBSZXN1bHQ/OiAocGFyYW06IEtleWVkT2JqZWN0UmVzdWx0PEssIFQ+IHwgdW5kZWZpbmVkKSA9PiBSW10gfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgLy8g0JHQtdC3INGB0LLQvtC10LPQviBtYXAg0YDQtdC30YPQu9GM0YLQsNGCIOKAlCDQt9C90LDRh9C10L3QuNGPINC+0LHRitC10LrRgtCwINC/0L4g0LrQu9GO0YfRgywg0LrQsNC6INC4INC+0LHQtdGJ0LDRjtGCINGC0LjQv9GLIGAucmVzKClgINC4IGAucmVzQWxsKClgLlxuICAgIHN1cGVyKHVybCwgcGFyYW0sIG1hcFJlc3VsdCA/PyAocmVzdWx0ID0+IE9iamVjdC52YWx1ZXMocmVzdWx0Py5ba2V5XSA/PyB7fSkgYXMgdW5rbm93biBhcyBSW10pKVxuICB9XG5cbiAgcmVzQWxsKCkge1xuICAgIHJldHVybiB0aGlzLnJlc0ZpcnN0UGFnZSgpLnBpcGUoXG4gICAgICBtZXJnZU1hcChmaXJzdCA9PiB0aGlzLnJlc1BhZ2VzPEtleWVkT2JqZWN0UmVzdWx0PEssIFQ+PihvZmZzZXRQYWdlUGFyYW1zKHRoaXMucGFyYW0sIGZpcnN0LnRvdGFsLCB0aGlzLnBhZ2VTaXplKSkucGlwZShcbiAgICAgICAgbWFwKHBhZ2VzID0+IHtcbiAgICAgICAgICBjb25zdCBtZXJnZWQgPSBPYmplY3QuYXNzaWduKHt9LCBmaXJzdC5yZXN1bHQ/Llt0aGlzLmtleV0sIC4uLnBhZ2VzLm1hcChwYWdlID0+IHBhZ2VbdGhpcy5rZXldKSlcbiAgICAgICAgICByZXR1cm4gdGhpcy5tYXA/Lih7IC4uLmZpcnN0LnJlc3VsdCwgW3RoaXMua2V5XTogbWVyZ2VkIH0gYXMgS2V5ZWRPYmplY3RSZXN1bHQ8SywgVD4pXG4gICAgICAgIH0pXG4gICAgICApKSxcbiAgICAgIC8vIHJlZkNvdW50OiDQsdC10Lcg0L/QvtC00L/QuNGB0YfQuNC60L7QsiDQvtGB0YLQsNCy0YjQuNC10YHRjyDRgdGC0YDQsNC90LjRhtGLINC30LDQv9GA0LDRiNC40LLQsNGC0Ywg0L3QtdC30LDRh9C10LxcbiAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSlcbiAgICApXG4gIH1cbn1cbiJdfQ==
@@ -1,80 +1,21 @@
1
- import { concatMap, from, last, mergeMap, shareReplay, throwError, toArray } from 'rxjs';
2
- import { catchError, map } from 'rxjs/operators';
3
- import clone from 'just-clone';
4
- import { instanceOfiBXRestAnswerSuccess } from '../../functions/mapResult';
5
- import { NavvyPagBase } from './extends/navvy-pag-base';
6
- import { serializeBitrixParams } from '../../functions/serializeBitrixParams';
7
- import { BXRest } from '../../rest/base';
1
+ import { mergeMap, shareReplay } from 'rxjs';
2
+ import { map } from 'rxjs/operators';
3
+ import { NavvyPagBase, offsetPageParams } from './extends/navvy-pag-base';
8
4
  export class NavvyPagNavResultKey extends NavvyPagBase {
9
- constructor(url, param, key, map) {
5
+ constructor(url, param, key, map, restApi) {
10
6
  // Без своего map результат — массив по ключу, как и обещают типы `.res()` и `.resAll()`.
11
- // Иначе `.res()` отдал бы весь объект `{ items: [...] }`, а `.resAll()` упал бы на нём
12
- // при 50 записях и меньше: первая страница разворачивается через `save.push(...v)`.
13
- super(url, param, map ?? (result => (result?.[key] ?? [])));
7
+ // Иначе `.res()` отдал бы весь объект `{ items: [...] }`.
8
+ super(url, param, map ?? (result => (result?.[key] ?? [])), restApi);
14
9
  this.key = key;
15
- this.save = [];
16
10
  }
17
11
  resAll() {
18
- let save = [];
19
- return this.resultAllEnd()
20
- .pipe(map(v => {
21
- if (v) {
22
- save.push(...v);
23
- }
24
- return save;
25
- }), last(), shareReplay(1));
26
- }
27
- resultAllEnd() {
28
- let BXRestClass = new BXRest();
29
- return this.resFirstPage().pipe(mergeMap(items => {
30
- if (items && instanceOfiBXRestAnswerSuccess(items)) {
31
- this.save = [];
32
- if (items.total && items.total > 50) {
33
- const mathFloor = Math.floor(items.total / this.pageSize);
34
- const count = (mathFloor === items.total / this.pageSize)
35
- ? [...Array(mathFloor - 1).keys()]
36
- : [...Array(mathFloor).keys()];
37
- const chunks = [];
38
- for (let i = 0; i < count.length; i += this.pageSize) {
39
- chunks.push(count.slice(i, i + this.pageSize));
40
- }
41
- const batchRequests = chunks.map(chunk => {
42
- return BXRestClass.batch({
43
- halt: 1,
44
- cmd: chunk.map(i => {
45
- const param = clone(this.param);
46
- param.start = (i + 1) * this.pageSize;
47
- return this.http.getNameMethod(this.url)
48
- + '?' + serializeBitrixParams(param);
49
- })
50
- }, this.requestHeaders);
51
- });
52
- return from(batchRequests).pipe(concatMap(request => request), toArray(), map(results => {
53
- const firstPage = items.result?.[this.key];
54
- if (firstPage) {
55
- const res = firstPage;
56
- for (let result of results) {
57
- if (result && instanceOfiBXRestAnswerSuccess(result) && result.result && result.result.result) {
58
- res.push(...result.result.result.filter(i => i).map(i => i[this.key]).flat());
59
- }
60
- }
61
- return (this.map) ?
62
- this.map({ [this.key]: res })
63
- : res;
64
- }
65
- throw new Error('wrong batch');
66
- }));
67
- }
68
- return this.mapResForGetAll(items);
69
- }
70
- return this.mapResForGetAll(items);
71
- }), catchError(err => {
72
- console.error(err);
73
- return throwError(() => err);
74
- }));
75
- }
76
- mapResForGetAll(items) {
77
- return (instanceOfiBXRestAnswerSuccess(items)) ? from([items.result]).pipe(map(v => (v && this.map) ? this.map(v) : v)) : from([]);
12
+ return this.resFirstPage().pipe(mergeMap(first => this.resPages(offsetPageParams(this.param, first.total, this.pageSize)).pipe(map(pages => {
13
+ const items = [first.result, ...pages].flatMap(page => page?.[this.key] ?? []);
14
+ const joined = { ...first.result, [this.key]: items };
15
+ return (this.map?.(joined) ?? []);
16
+ }))),
17
+ // refCount: без подписчиков оставшиеся страницы запрашивать незачем
18
+ shareReplay({ bufferSize: 1, refCount: true }));
78
19
  }
79
20
  }
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2dnktcGFnLW5hdi1yZXN1bHQta2V5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYngtcmVzdC9zcmMvc2VydmljZXMvbmF2dnkvbmF2dnktcGFnLW5hdi1yZXN1bHQta2V5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDeEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNoRCxPQUFPLEtBQUssTUFBTSxZQUFZLENBQUE7QUFJOUIsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFDMUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQ3ZELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFBO0FBQzdFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUl4QyxNQUFNLE9BQU8sb0JBQ1gsU0FBUSxZQUF1QztJQUkvQyxZQUNFLEdBQWEsRUFDYixLQUFRLEVBQ1MsR0FBTSxFQUN2QixHQUErRDtRQUUvRCx5RkFBeUY7UUFDekYsdUZBQXVGO1FBQ3ZGLG9GQUFvRjtRQUNwRixLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFtQixDQUFDLENBQUMsQ0FBQTtRQU41RCxRQUFHLEdBQUgsR0FBRyxDQUFHO1FBTHpCLFNBQUksR0FBNEIsRUFBRSxDQUFBO0lBWWxDLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxJQUFJLEdBQTRCLEVBQUUsQ0FBQTtRQUN0QyxPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUU7YUFDdkIsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNKLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQTRCLENBQUMsQ0FBQTtZQUM1QyxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDLENBQ0YsRUFDRCxJQUFJLEVBQUUsRUFDTixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQTtJQUNMLENBQUM7SUFFTyxZQUFZO1FBQ2xCLElBQUksV0FBVyxHQUFHLElBQUksTUFBTSxFQUFFLENBQUE7UUFDOUIsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUM3QixRQUFRLENBQ04sS0FBSyxDQUFDLEVBQUU7WUFDTixJQUFJLEtBQUssSUFBSSw4QkFBOEIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNuRCxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQTtnQkFDZCxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLEVBQUUsQ0FBQztvQkFDcEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtvQkFDekQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO3dCQUN2RCxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQ2xDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUE7b0JBQ2hDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQTtvQkFFakIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDckQsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7b0JBQ2hELENBQUM7b0JBRUQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTt3QkFDdkMsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFzQjs0QkFDNUMsSUFBSSxFQUFFLENBQUM7NEJBQ1AsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0NBQ2pCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7Z0NBQy9CLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQTtnQ0FFckMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO3NDQUNwQyxHQUFHLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUE7NEJBQ3hDLENBQUMsQ0FBQzt5QkFDSCxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtvQkFDekIsQ0FBQyxDQUFDLENBQUE7b0JBRUYsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUM3QixTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFDN0IsT0FBTyxFQUFFLEVBQ1QsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO3dCQUNaLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7d0JBQzFDLElBQUksU0FBUyxFQUFFLENBQUM7NEJBQ2QsTUFBTSxHQUFHLEdBQUcsU0FBZ0IsQ0FBQTs0QkFFNUIsS0FBSyxJQUFJLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztnQ0FDM0IsSUFBSSxNQUFNLElBQUksOEJBQThCLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO29DQUM5RixHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBUyxDQUFDLENBQUE7Z0NBQ3RGLENBQUM7NEJBQ0gsQ0FBQzs0QkFFRCxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0NBQ2pCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQXVCLENBQUM7Z0NBQ2xELENBQUMsQ0FBQyxHQUFHLENBQUE7d0JBQ1QsQ0FBQzt3QkFFRCxNQUFNLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFBO29CQUNoQyxDQUFDLENBQUMsQ0FDSCxDQUFBO2dCQUNILENBQUM7Z0JBRUQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ3BDLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDcEMsQ0FBQyxDQUNGLEVBQ0QsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNsQixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUM5QixDQUFDLENBQUMsQ0FDSCxDQUFBO0lBQ0gsQ0FBQztJQUVPLGVBQWUsQ0FBQyxLQUFtRDtRQUN6RSxPQUFPLENBQUMsOEJBQThCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUN4RSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUM1QyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDZCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25jYXRNYXAsIGZyb20sIGxhc3QsIG1lcmdlTWFwLCBzaGFyZVJlcGxheSwgdGhyb3dFcnJvciwgdG9BcnJheSB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCBjbG9uZSBmcm9tICdqdXN0LWNsb25lJ1xuaW1wb3J0IHsgaUJYUmVzdFBhZ2luYXRpb24gfSBmcm9tICcuLi8uLi90eXBpZmljYXRpb24vcmVzdC9iYXNlL2FwaS1wYWdpbmF0aW9uLWJ4J1xuaW1wb3J0IHsgUmV0dXJuVHlwZU5hdnZ5IH0gZnJvbSAnLi9uYXZ2eS1zdXBwb3J0J1xuaW1wb3J0IHsgaUJYUmVzdEFuc3dlciB9IGZyb20gJy4uLy4uL3R5cGlmaWNhdGlvbi9yZXN0L2Jhc2UvYW5zd2VyJ1xuaW1wb3J0IHsgaW5zdGFuY2VPZmlCWFJlc3RBbnN3ZXJTdWNjZXNzIH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zL21hcFJlc3VsdCdcbmltcG9ydCB7IE5hdnZ5UGFnQmFzZSB9IGZyb20gJy4vZXh0ZW5kcy9uYXZ2eS1wYWctYmFzZSdcbmltcG9ydCB7IHNlcmlhbGl6ZUJpdHJpeFBhcmFtcyB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucy9zZXJpYWxpemVCaXRyaXhQYXJhbXMnXG5pbXBvcnQgeyBCWFJlc3QgfSBmcm9tICcuLi8uLi9yZXN0L2Jhc2UnXG5cbnR5cGUgS2V5ZWRSZXN1bHQ8SyBleHRlbmRzIHN0cmluZywgVD4gPSBSZWNvcmQ8SywgVFtdIHwgdW5kZWZpbmVkPlxuXG5leHBvcnQgY2xhc3MgTmF2dnlQYWdOYXZSZXN1bHRLZXk8VCwgUiwgUCBleHRlbmRzIGlCWFJlc3RQYWdpbmF0aW9uLCBLIGV4dGVuZHMgc3RyaW5nPlxuICBleHRlbmRzIE5hdnZ5UGFnQmFzZTxLZXllZFJlc3VsdDxLLCBUPiwgUltdLCBQPiB7XG5cbiAgc2F2ZTogUmV0dXJuVHlwZU5hdnZ5PFQsIFI+W10gPSBbXVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHVybDogc3RyaW5nW10sXG4gICAgcGFyYW06IFAsXG4gICAgcHJpdmF0ZSByZWFkb25seSBrZXk6IEssXG4gICAgbWFwPzogKHBhcmFtOiBLZXllZFJlc3VsdDxLLCBUPiB8IHVuZGVmaW5lZCkgPT4gUltdIHwgdW5kZWZpbmVkXG4gICkge1xuICAgIC8vINCR0LXQtyDRgdCy0L7QtdCz0L4gbWFwINGA0LXQt9GD0LvRjNGC0LDRgiDigJQg0LzQsNGB0YHQuNCyINC/0L4g0LrQu9GO0YfRgywg0LrQsNC6INC4INC+0LHQtdGJ0LDRjtGCINGC0LjQv9GLIGAucmVzKClgINC4IGAucmVzQWxsKClgLlxuICAgIC8vINCY0L3QsNGH0LUgYC5yZXMoKWAg0L7RgtC00LDQuyDQsdGLINCy0LXRgdGMINC+0LHRitC10LrRgiBgeyBpdGVtczogWy4uLl0gfWAsINCwIGAucmVzQWxsKClgINGD0L/QsNC7INCx0Ysg0L3QsCDQvdGR0LxcbiAgICAvLyDQv9GA0LggNTAg0LfQsNC/0LjRgdGP0YUg0Lgg0LzQtdC90YzRiNC1OiDQv9C10YDQstCw0Y8g0YHRgtGA0LDQvdC40YbQsCDRgNCw0LfQstC+0YDQsNGH0LjQstCw0LXRgtGB0Y8g0YfQtdGA0LXQtyBgc2F2ZS5wdXNoKC4uLnYpYC5cbiAgICBzdXBlcih1cmwsIHBhcmFtLCBtYXAgPz8gKHJlc3VsdCA9PiAocmVzdWx0Py5ba2V5XSA/PyBbXSkgYXMgdW5rbm93biBhcyBSW10pKVxuICB9XG5cbiAgcmVzQWxsKCkge1xuICAgIGxldCBzYXZlOiBSZXR1cm5UeXBlTmF2dnk8VCwgUj5bXSA9IFtdXG4gICAgcmV0dXJuIHRoaXMucmVzdWx0QWxsRW5kKClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAodiA9PiB7XG4gICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICBzYXZlLnB1c2goLi4udiBhcyBSZXR1cm5UeXBlTmF2dnk8VCwgUj5bXSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzYXZlXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICBsYXN0KCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIHJlc3VsdEFsbEVuZCgpIHtcbiAgICBsZXQgQlhSZXN0Q2xhc3MgPSBuZXcgQlhSZXN0KClcbiAgICByZXR1cm4gdGhpcy5yZXNGaXJzdFBhZ2UoKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoXG4gICAgICAgIGl0ZW1zID0+IHtcbiAgICAgICAgICBpZiAoaXRlbXMgJiYgaW5zdGFuY2VPZmlCWFJlc3RBbnN3ZXJTdWNjZXNzKGl0ZW1zKSkge1xuICAgICAgICAgICAgdGhpcy5zYXZlID0gW11cbiAgICAgICAgICAgIGlmIChpdGVtcy50b3RhbCAmJiBpdGVtcy50b3RhbCA+IDUwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG1hdGhGbG9vciA9IE1hdGguZmxvb3IoaXRlbXMudG90YWwgLyB0aGlzLnBhZ2VTaXplKVxuICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IChtYXRoRmxvb3IgPT09IGl0ZW1zLnRvdGFsIC8gdGhpcy5wYWdlU2l6ZSlcbiAgICAgICAgICAgICAgICA/IFsuLi5BcnJheShtYXRoRmxvb3IgLSAxKS5rZXlzKCldXG4gICAgICAgICAgICAgICAgOiBbLi4uQXJyYXkobWF0aEZsb29yKS5rZXlzKCldXG4gICAgICAgICAgICAgIGNvbnN0IGNodW5rcyA9IFtdXG5cbiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudC5sZW5ndGg7IGkgKz0gdGhpcy5wYWdlU2l6ZSkge1xuICAgICAgICAgICAgICAgIGNodW5rcy5wdXNoKGNvdW50LnNsaWNlKGksIGkgKyB0aGlzLnBhZ2VTaXplKSlcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGJhdGNoUmVxdWVzdHMgPSBjaHVua3MubWFwKGNodW5rID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQlhSZXN0Q2xhc3MuYmF0Y2g8S2V5ZWRSZXN1bHQ8SywgVD5bXT4oe1xuICAgICAgICAgICAgICAgICAgaGFsdDogMSxcbiAgICAgICAgICAgICAgICAgIGNtZDogY2h1bmsubWFwKGkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJhbSA9IGNsb25lKHRoaXMucGFyYW0pXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtLnN0YXJ0ID0gKGkgKyAxKSAqIHRoaXMucGFnZVNpemVcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldE5hbWVNZXRob2QodGhpcy51cmwpXG4gICAgICAgICAgICAgICAgICAgICAgKyAnPycgKyBzZXJpYWxpemVCaXRyaXhQYXJhbXMocGFyYW0pXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0sIHRoaXMucmVxdWVzdEhlYWRlcnMpXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgcmV0dXJuIGZyb20oYmF0Y2hSZXF1ZXN0cykucGlwZShcbiAgICAgICAgICAgICAgICBjb25jYXRNYXAocmVxdWVzdCA9PiByZXF1ZXN0KSxcbiAgICAgICAgICAgICAgICB0b0FycmF5KCksXG4gICAgICAgICAgICAgICAgbWFwKHJlc3VsdHMgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RQYWdlID0gaXRlbXMucmVzdWx0Py5bdGhpcy5rZXldXG4gICAgICAgICAgICAgICAgICBpZiAoZmlyc3RQYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGZpcnN0UGFnZSBhcyBUW11cblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgaW5zdGFuY2VPZmlCWFJlc3RBbnN3ZXJTdWNjZXNzKHJlc3VsdCkgJiYgcmVzdWx0LnJlc3VsdCAmJiByZXN1bHQucmVzdWx0LnJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goLi4ucmVzdWx0LnJlc3VsdC5yZXN1bHQuZmlsdGVyKGkgPT4gaSkubWFwKGkgPT4gaVt0aGlzLmtleV0pLmZsYXQoKSBhcyBUW10pXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLm1hcCkgP1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFwKHsgW3RoaXMua2V5XTogcmVzIH0gYXMgS2V5ZWRSZXN1bHQ8SywgVD4pXG4gICAgICAgICAgICAgICAgICAgICAgOiByZXNcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd3cm9uZyBiYXRjaCcpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXBSZXNGb3JHZXRBbGwoaXRlbXMpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLm1hcFJlc0ZvckdldEFsbChpdGVtcylcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycilcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBSZXNGb3JHZXRBbGwoaXRlbXM6IGlCWFJlc3RBbnN3ZXI8S2V5ZWRSZXN1bHQ8SywgVD4+IHwgdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIChpbnN0YW5jZU9maUJYUmVzdEFuc3dlclN1Y2Nlc3MoaXRlbXMpKSA/IGZyb20oW2l0ZW1zLnJlc3VsdF0pLnBpcGUoXG4gICAgICBtYXAodiA9PiAodiAmJiB0aGlzLm1hcCkgPyB0aGlzLm1hcCh2KSA6IHYpXG4gICAgKSA6IGZyb20oW10pXG4gIH1cbn1cbiJdfQ==
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2dnktcGFnLW5hdi1yZXN1bHQta2V5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYngtcmVzdC9zcmMvc2VydmljZXMvbmF2dnkvbmF2dnktcGFnLW5hdi1yZXN1bHQta2V5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzVDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUdwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFJekUsTUFBTSxPQUFPLG9CQUNYLFNBQVEsWUFBdUM7SUFFL0MsWUFDRSxHQUFhLEVBQ2IsS0FBUSxFQUNTLEdBQU0sRUFDdkIsR0FBK0QsRUFDL0QsT0FBaUI7UUFFakIseUZBQXlGO1FBQ3pGLDBEQUEwRDtRQUMxRCxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFtQixDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFOckUsUUFBRyxHQUFILEdBQUcsQ0FBRztJQU96QixDQUFDO0lBRUQsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FDN0IsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBb0IsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDL0csR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1YsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBUSxDQUFBO1lBQ3JGLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBdUIsQ0FBQTtZQUMxRSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBNEIsQ0FBQTtRQUM5RCxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0Ysb0VBQW9FO1FBQ3BFLFdBQVcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQy9DLENBQUE7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtZXJnZU1hcCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5pbXBvcnQgeyBpQlhSZXN0UGFnaW5hdGlvbiB9IGZyb20gJy4uLy4uL3R5cGlmaWNhdGlvbi9yZXN0L2Jhc2UvYXBpLXBhZ2luYXRpb24tYngnXG5pbXBvcnQgeyBSZXR1cm5UeXBlTmF2dnkgfSBmcm9tICcuL25hdnZ5LXN1cHBvcnQnXG5pbXBvcnQgeyBOYXZ2eVBhZ0Jhc2UsIG9mZnNldFBhZ2VQYXJhbXMgfSBmcm9tICcuL2V4dGVuZHMvbmF2dnktcGFnLWJhc2UnXG5cbnR5cGUgS2V5ZWRSZXN1bHQ8SyBleHRlbmRzIHN0cmluZywgVD4gPSBSZWNvcmQ8SywgVFtdIHwgdW5kZWZpbmVkPlxuXG5leHBvcnQgY2xhc3MgTmF2dnlQYWdOYXZSZXN1bHRLZXk8VCwgUiwgUCBleHRlbmRzIGlCWFJlc3RQYWdpbmF0aW9uLCBLIGV4dGVuZHMgc3RyaW5nPlxuICBleHRlbmRzIE5hdnZ5UGFnQmFzZTxLZXllZFJlc3VsdDxLLCBUPiwgUltdLCBQPiB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgdXJsOiBzdHJpbmdbXSxcbiAgICBwYXJhbTogUCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGtleTogSyxcbiAgICBtYXA/OiAocGFyYW06IEtleWVkUmVzdWx0PEssIFQ+IHwgdW5kZWZpbmVkKSA9PiBSW10gfCB1bmRlZmluZWQsXG4gICAgcmVzdEFwaT86IGJvb2xlYW5cbiAgKSB7XG4gICAgLy8g0JHQtdC3INGB0LLQvtC10LPQviBtYXAg0YDQtdC30YPQu9GM0YLQsNGCIOKAlCDQvNCw0YHRgdC40LIg0L/QviDQutC70Y7Rh9GDLCDQutCw0Log0Lgg0L7QsdC10YnQsNGO0YIg0YLQuNC/0YsgYC5yZXMoKWAg0LggYC5yZXNBbGwoKWAuXG4gICAgLy8g0JjQvdCw0YfQtSBgLnJlcygpYCDQvtGC0LTQsNC7INCx0Ysg0LLQtdGB0Ywg0L7QsdGK0LXQutGCIGB7IGl0ZW1zOiBbLi4uXSB9YC5cbiAgICBzdXBlcih1cmwsIHBhcmFtLCBtYXAgPz8gKHJlc3VsdCA9PiAocmVzdWx0Py5ba2V5XSA/PyBbXSkgYXMgdW5rbm93biBhcyBSW10pLCByZXN0QXBpKVxuICB9XG5cbiAgcmVzQWxsKCkge1xuICAgIHJldHVybiB0aGlzLnJlc0ZpcnN0UGFnZSgpLnBpcGUoXG4gICAgICBtZXJnZU1hcChmaXJzdCA9PiB0aGlzLnJlc1BhZ2VzPEtleWVkUmVzdWx0PEssIFQ+PihvZmZzZXRQYWdlUGFyYW1zKHRoaXMucGFyYW0sIGZpcnN0LnRvdGFsLCB0aGlzLnBhZ2VTaXplKSkucGlwZShcbiAgICAgICAgbWFwKHBhZ2VzID0+IHtcbiAgICAgICAgICBjb25zdCBpdGVtcyA9IFtmaXJzdC5yZXN1bHQsIC4uLnBhZ2VzXS5mbGF0TWFwKHBhZ2UgPT4gcGFnZT8uW3RoaXMua2V5XSA/PyBbXSkgYXMgVFtdXG4gICAgICAgICAgY29uc3Qgam9pbmVkID0geyAuLi5maXJzdC5yZXN1bHQsIFt0aGlzLmtleV06IGl0ZW1zIH0gYXMgS2V5ZWRSZXN1bHQ8SywgVD5cbiAgICAgICAgICByZXR1cm4gKHRoaXMubWFwPy4oam9pbmVkKSA/PyBbXSkgYXMgUmV0dXJuVHlwZU5hdnZ5PFQsIFI+W11cbiAgICAgICAgfSlcbiAgICAgICkpLFxuICAgICAgLy8gcmVmQ291bnQ6INCx0LXQtyDQv9C+0LTQv9C40YHRh9C40LrQvtCyINC+0YHRgtCw0LLRiNC40LXRgdGPINGB0YLRgNCw0L3QuNGG0Ysg0LfQsNC/0YDQsNGI0LjQstCw0YLRjCDQvdC10LfQsNGH0LXQvFxuICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KVxuICAgIClcbiAgfVxufVxuIl19