@po-ui/ng-sync 18.23.0 → 19.0.0-next.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 (77) hide show
  1. package/fesm2022/po-ui-ng-sync.mjs +37 -19
  2. package/fesm2022/po-ui-ng-sync.mjs.map +1 -1
  3. package/lib/services/po-http-client/po-http-client.service.d.ts +8 -8
  4. package/lib/services/po-sync/interfaces/po-sync-response.interface.d.ts +1 -1
  5. package/package.json +13 -15
  6. package/po-ui-ng-sync-19.0.0-next.0.tgz +0 -0
  7. package/schematics/collection.json +5 -0
  8. package/schematics/migrations.json +6 -1
  9. package/schematics/ng-add/index.d.ts +1 -5
  10. package/schematics/ng-add/index.js +3 -37
  11. package/schematics/ng-add/index.js.map +1 -1
  12. package/schematics/ng-add/setup-project.d.ts +2 -0
  13. package/schematics/ng-add/setup-project.js +179 -0
  14. package/schematics/ng-add/setup-project.js.map +1 -0
  15. package/schematics/ng-generate/schema/index.js +1 -1
  16. package/schematics/ng-generate/schema/index.js.map +1 -1
  17. package/schematics/ng-update/v14/index.js +2 -2
  18. package/schematics/ng-update/v14/index.js.map +1 -1
  19. package/schematics/ng-update/v15/index.js +2 -2
  20. package/schematics/ng-update/v15/index.js.map +1 -1
  21. package/schematics/ng-update/v16/index.js +2 -2
  22. package/schematics/ng-update/v16/index.js.map +1 -1
  23. package/schematics/ng-update/v17/index.js +2 -2
  24. package/schematics/ng-update/v17/index.js.map +1 -1
  25. package/schematics/ng-update/v18/index.js +2 -2
  26. package/schematics/ng-update/v18/index.js.map +1 -1
  27. package/schematics/ng-update/v19/changes.d.ts +2 -0
  28. package/schematics/ng-update/v19/changes.js +14 -0
  29. package/schematics/ng-update/v19/changes.js.map +1 -0
  30. package/schematics/ng-update/v19/index.d.ts +1 -0
  31. package/schematics/ng-update/v19/index.js +16 -0
  32. package/schematics/ng-update/v19/index.js.map +1 -0
  33. package/schematics/ng-update/v2/index.js +3 -4
  34. package/schematics/ng-update/v2/index.js.map +1 -1
  35. package/schematics/ng-update/v3/index.js +2 -3
  36. package/schematics/ng-update/v3/index.js.map +1 -1
  37. package/schematics/ng-update/v4/index.js +2 -2
  38. package/schematics/ng-update/v4/index.js.map +1 -1
  39. package/schematics/ng-update/v5/index.js +2 -2
  40. package/schematics/ng-update/v5/index.js.map +1 -1
  41. package/schematics/ng-update/v6/index.js +2 -2
  42. package/schematics/ng-update/v6/index.js.map +1 -1
  43. package/esm2022/lib/index.mjs +0 -15
  44. package/esm2022/lib/models/index.mjs +0 -6
  45. package/esm2022/lib/models/po-data-message.model.mjs +0 -57
  46. package/esm2022/lib/models/po-data-transform.model.mjs +0 -23
  47. package/esm2022/lib/models/po-entity/po-entity.model.mjs +0 -217
  48. package/esm2022/lib/models/po-event-sourcing-error-response.model.mjs +0 -21
  49. package/esm2022/lib/models/po-network-status.model.mjs +0 -45
  50. package/esm2022/lib/models/po-network-type.enum.mjs +0 -30
  51. package/esm2022/lib/models/po-query-builder/po-query-builder.model.mjs +0 -246
  52. package/esm2022/lib/models/po-request-type.enum.mjs +0 -16
  53. package/esm2022/lib/po-sync.module.mjs +0 -40
  54. package/esm2022/lib/services/po-event-sourcing/enums/po-event-sourcing-operation.enum.mjs +0 -17
  55. package/esm2022/lib/services/po-event-sourcing/index.mjs +0 -4
  56. package/esm2022/lib/services/po-event-sourcing/interfaces/po-event-sourcing-item.interface.mjs +0 -2
  57. package/esm2022/lib/services/po-event-sourcing/interfaces/po-event-sourcing-summary-item.interface.mjs +0 -2
  58. package/esm2022/lib/services/po-event-sourcing/po-event-sourcing.service.mjs +0 -379
  59. package/esm2022/lib/services/po-http-client/interfaces/po-http-header-option.interface.mjs +0 -11
  60. package/esm2022/lib/services/po-http-client/interfaces/po-http-request-data.interface.mjs +0 -2
  61. package/esm2022/lib/services/po-http-client/interfaces/po-response-api.interface.mjs +0 -2
  62. package/esm2022/lib/services/po-http-client/po-http-client.service.mjs +0 -149
  63. package/esm2022/lib/services/po-http-client/po-http-request-type.enum.mjs +0 -25
  64. package/esm2022/lib/services/po-network/po-network.service.mjs +0 -59
  65. package/esm2022/lib/services/po-schema/index.mjs +0 -4
  66. package/esm2022/lib/services/po-schema/po-schema-definition/po-schema-definition.service.mjs +0 -78
  67. package/esm2022/lib/services/po-schema/po-schema-util/po-schema-util.model.mjs +0 -124
  68. package/esm2022/lib/services/po-schema/po-schema.service.mjs +0 -176
  69. package/esm2022/lib/services/po-sync/interfaces/po-sync-config.interface.mjs +0 -2
  70. package/esm2022/lib/services/po-sync/interfaces/po-sync-field-options.interface.mjs +0 -2
  71. package/esm2022/lib/services/po-sync/interfaces/po-sync-response.interface.mjs +0 -2
  72. package/esm2022/lib/services/po-sync/interfaces/po-sync-schema.interface.mjs +0 -2
  73. package/esm2022/lib/services/po-sync/po-sync.service.mjs +0 -336
  74. package/esm2022/lib/utils/utils.mjs +0 -63
  75. package/esm2022/po-ui-ng-sync.mjs +0 -5
  76. package/esm2022/public-api.mjs +0 -2
  77. package/po-ui-ng-sync-18.23.0.tgz +0 -0
@@ -1,379 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { StatusCodes } from 'http-status-codes';
3
- import { Observable, of, Subject } from 'rxjs';
4
- import { expand, map, reduce } from 'rxjs/operators';
5
- import { toBase64, toFile } from '../../utils/utils';
6
- import { PoEventSourcingErrorResponse } from '../../models/po-event-sourcing-error-response.model';
7
- import { PoEventSourcingOperation } from './enums/po-event-sourcing-operation.enum';
8
- import { PoHttpRequestType } from '../po-http-client/po-http-request-type.enum';
9
- import { PoRequestType } from '../../models/po-request-type.enum';
10
- import { PoSchemaUtil } from './../po-schema/po-schema-util/po-schema-util.model';
11
- import * as i0 from "@angular/core";
12
- import * as i1 from "./../po-schema/po-schema-definition/po-schema-definition.service";
13
- import * as i2 from "./../po-schema/po-schema.service";
14
- import * as i3 from "@po-ui/ng-storage";
15
- import * as i4 from "./../po-http-client/po-http-client.service";
16
- export class PoEventSourcingService {
17
- poSchemaDefinition;
18
- poSchemaService;
19
- poStorage;
20
- poHttpClient;
21
- static event_sourcing_name = 'EventSourcing';
22
- static VALID_HTTP_STATUS_CODES = [
23
- StatusCodes.OK, // 200
24
- StatusCodes.CREATED, // 201
25
- StatusCodes.ACCEPTED, // 202
26
- StatusCodes.NON_AUTHORITATIVE_INFORMATION, // 203
27
- StatusCodes.NO_CONTENT, // 204
28
- StatusCodes.RESET_CONTENT, // 205
29
- StatusCodes.PARTIAL_CONTENT, // 206
30
- StatusCodes.MULTI_STATUS // 207
31
- ];
32
- config;
33
- stoppedQueueEventSourcing = false;
34
- emitter;
35
- eventSub;
36
- responseSubject = new Subject();
37
- schemasSyncConfig = {};
38
- constructor(poSchemaDefinition, poSchemaService, poStorage, poHttpClient) {
39
- this.poSchemaDefinition = poSchemaDefinition;
40
- this.poSchemaService = poSchemaService;
41
- this.poStorage = poStorage;
42
- this.poHttpClient = poHttpClient;
43
- }
44
- static getUrl(eventSourcingItem, schema, requestType) {
45
- const schemaUrl = PoSchemaUtil.getUrl(schema, requestType);
46
- const schemaId = eventSourcingItem.record[schema.idField];
47
- if (requestType === PoRequestType.GET) {
48
- return schemaUrl;
49
- }
50
- if ([PoRequestType.DELETE, PoRequestType.PATCH].includes(requestType)) {
51
- return schemaUrl ? `${schemaUrl}/${schemaId}` : `${PoSchemaUtil.getUrl(schema, PoRequestType.GET)}/${schemaId}`;
52
- }
53
- if (requestType === PoRequestType.POST) {
54
- return schemaUrl ? schemaUrl : PoSchemaUtil.getUrl(schema, PoRequestType.GET);
55
- }
56
- }
57
- create(schemaName, newItem, customRequestId) {
58
- const eventSourcingItem = this.createEventSourcingItem(PoEventSourcingOperation.Insert, newItem, schemaName, customRequestId);
59
- return this.insertEventSourcingQueue(eventSourcingItem);
60
- }
61
- async createBatchEvents(schemaName, eventList) {
62
- const eventSourcingList = this.createEventSourcingList(schemaName, eventList);
63
- await this.poStorage.appendArrayToArray(PoEventSourcingService.event_sourcing_name, eventSourcingList);
64
- this.notifyEventCreation();
65
- }
66
- /**
67
- * Destrói a chave do *storage* que contém a fila de dados que estão esperando para serem enviados ao
68
- * servidor *(EventSourcing)*.
69
- *
70
- * @returns {Promise<void>} Promessa que é resolvida quando a chave referente a fila de *EventSourcing* for destruída.
71
- */
72
- destroyEventSourcingQueue() {
73
- return this.poStorage.remove(PoEventSourcingService.event_sourcing_name);
74
- }
75
- async httpCommand(httpOperationData, customRequestId) {
76
- httpOperationData = await this.serializeBody(httpOperationData);
77
- const eventSourcingItem = this.createEventSourcingItem(PoEventSourcingOperation.Http, httpOperationData, undefined, customRequestId);
78
- await this.insertEventSourcingQueue(eventSourcingItem);
79
- return eventSourcingItem.id;
80
- }
81
- responsesSubject() {
82
- return this.responseSubject.asObservable();
83
- }
84
- onSaveData() {
85
- if (!this.eventSub) {
86
- this.eventSub = Observable.create(subscriber => (this.emitter = subscriber));
87
- }
88
- return this.eventSub;
89
- }
90
- remove(schemaName, itemToDelete, customRequestId) {
91
- const eventSourcingItem = this.createEventSourcingItem(PoEventSourcingOperation.Delete, itemToDelete, schemaName, customRequestId);
92
- return this.insertEventSourcingQueue(eventSourcingItem);
93
- }
94
- removeEventSourcingItem(idEventSourcingItem) {
95
- return this.poStorage.removeItemFromArray(PoEventSourcingService.event_sourcing_name, 'id', idEventSourcingItem);
96
- }
97
- syncGet() {
98
- const syncGetFunction = async () => this.poSchemaDefinition.getAll().then(schemas => {
99
- const schemaPromises = this.updateStorageSchemas(schemas);
100
- return Promise.all(schemaPromises);
101
- });
102
- return this.poSchemaService.limitedCallWrap(syncGetFunction);
103
- }
104
- async syncSend() {
105
- const syncSendFunction = async () => {
106
- const itemOfQueue = await this.poStorage.getFirstItem(PoEventSourcingService.event_sourcing_name);
107
- if (itemOfQueue) {
108
- await this.selectOperation(itemOfQueue);
109
- }
110
- if (this.stoppedQueueEventSourcing || !itemOfQueue) {
111
- this.stoppedQueueEventSourcing = false;
112
- return Promise.resolve();
113
- }
114
- return syncSendFunction();
115
- };
116
- return this.poSchemaService.limitedCallWrap(syncSendFunction);
117
- }
118
- update(schemaName, itemUpdated, customRequestId) {
119
- const eventSourcingItem = this.createEventSourcingItem(PoEventSourcingOperation.Update, itemUpdated, schemaName, customRequestId);
120
- return this.insertEventSourcingQueue(eventSourcingItem);
121
- }
122
- /* Avalia se o body é do tipo File e se for converte para base64 */
123
- async serializeBody(requestData) {
124
- let { body, mimeType, bodyType, fileName } = requestData;
125
- if (body instanceof File) {
126
- bodyType = 'File';
127
- mimeType = body.type;
128
- fileName = body.name;
129
- body = await toBase64(body);
130
- }
131
- return { ...requestData, body, mimeType, bodyType, fileName };
132
- }
133
- buildUrlParams(schema, baseUrl, pageNumber) {
134
- const params = [];
135
- params.push(`${this.config.dataTransform.getPageSizeParamName()}=${schema.pageSize}`);
136
- params.push(`${this.config.dataTransform.getPageParamName()}=${pageNumber}`);
137
- return `${baseUrl}?${params.join('&')}`;
138
- }
139
- checkRecordIdExists(recordId, operation) {
140
- if (!recordId) {
141
- const error = {
142
- message: 'Identifier not defined',
143
- operation: operation
144
- };
145
- throw new PoEventSourcingErrorResponse(error);
146
- }
147
- }
148
- concatPageItems(pageAcumulator, requestBody) {
149
- if (requestBody[this.config.dataTransform.getItemsFieldName()]) {
150
- pageAcumulator.data = [...pageAcumulator.data, ...requestBody[this.config.dataTransform.getItemsFieldName()]];
151
- }
152
- return pageAcumulator;
153
- }
154
- createEventSourcingItem(operation, newItem, schemaName, customRequestId, id) {
155
- if (!schemaName && operation !== PoEventSourcingOperation.Http) {
156
- throw new Error('PoSyncSchema is not defined.');
157
- }
158
- return {
159
- id: id ? id : new Date().getTime(),
160
- dateTime: new Date().getTime(),
161
- schema: schemaName,
162
- operation: operation,
163
- record: newItem,
164
- customRequestId: customRequestId
165
- };
166
- }
167
- createEventSourcingList(schemaName, eventList) {
168
- return eventList.map((eventItem, index) => {
169
- const id = new Date().getTime() + index;
170
- return this.createEventSourcingItem(eventItem.operation, eventItem.record, schemaName, eventItem.customRequestId, id);
171
- });
172
- }
173
- createSchemaSyncConfig(schemaName) {
174
- this.schemasSyncConfig[schemaName] = {
175
- page: undefined,
176
- currentUrlDiff: undefined,
177
- responseDate: undefined
178
- };
179
- }
180
- async deleteOperation(eventSourcingItem) {
181
- try {
182
- const schema = await this.poSchemaDefinition.get(eventSourcingItem.schema);
183
- const recordId = eventSourcingItem.record[schema.idField];
184
- this.checkRecordIdExists(recordId, PoEventSourcingOperation.Delete);
185
- const url = PoEventSourcingService.getUrl(eventSourcingItem, schema, PoRequestType.DELETE);
186
- const response = await this.sendServerItem(url, PoHttpRequestType.DELETE);
187
- await this.removeEventSourcingValidItem(response.status, eventSourcingItem);
188
- return await this.sendResponseSubject(eventSourcingItem, response);
189
- }
190
- catch (errorResponse) {
191
- return this.sendResponseSubject(eventSourcingItem, errorResponse, true);
192
- }
193
- }
194
- diffServerItems(currentUrlDiff) {
195
- return this.poHttpClient.get(currentUrlDiff);
196
- }
197
- getBodyAndDate(schemaName, response) {
198
- const getDateFieldName = this.config.dataTransform.getDateFieldName();
199
- const responseSyncDate = response.body[getDateFieldName];
200
- this.schemasSyncConfig[schemaName]['responseDate'] = responseSyncDate;
201
- return response.body;
202
- }
203
- async getServerDiffRecords(schema, baseUrl) {
204
- const initialAcumulatorPage = { entity: schema.name, data: [] };
205
- const diffUrl = this.schemasSyncConfig[schema.name]['currentUrlDiff'];
206
- const serverResponse = await this.diffServerItems(diffUrl)
207
- .pipe(map(response => this.getBodyAndDate(schema.name, response)), expand(data => this.paginateSchemaData(data, schema, baseUrl)), reduce((pageAcumulator, requestBody) => this.concatPageItems(pageAcumulator, requestBody), initialAcumulatorPage))
208
- .toPromise();
209
- return serverResponse.data;
210
- }
211
- async httpOperation(eventSourcingItem) {
212
- try {
213
- const requestData = await this.createPoHttpRequestData(eventSourcingItem.record.url, eventSourcingItem.record.method, eventSourcingItem.record, eventSourcingItem.record.headers);
214
- const response = await this.poHttpClient.createRequest(requestData).toPromise();
215
- const poHttpCommandResponse = {
216
- id: eventSourcingItem.id,
217
- customRequestId: eventSourcingItem.customRequestId,
218
- request: eventSourcingItem.record,
219
- response: response
220
- };
221
- this.responseSubject.next(poHttpCommandResponse);
222
- return this.removeEventSourcingValidItem(response.status, eventSourcingItem);
223
- }
224
- catch (errorHttpClient) {
225
- return this.sendResponseSubject(eventSourcingItem, errorHttpClient, true);
226
- }
227
- }
228
- async insertEventSourcingQueue(eventSourcingItem) {
229
- const eventSourcingUpdatedQueue = await this.poStorage.appendItemToArray(PoEventSourcingService.event_sourcing_name, eventSourcingItem);
230
- this.notifyEventCreation();
231
- return Promise.resolve(eventSourcingUpdatedQueue);
232
- }
233
- async insertOperation(currentEventSourcingItem) {
234
- const schema = await this.poSchemaDefinition.get(currentEventSourcingItem.schema);
235
- const url = PoEventSourcingService.getUrl(currentEventSourcingItem, schema, PoRequestType.POST);
236
- try {
237
- const response = await this.sendServerItem(url, PoHttpRequestType.POST, currentEventSourcingItem.record);
238
- const recordUpdatedByServer = response.body;
239
- await this.removeEventSourcingValidItem(response.status, currentEventSourcingItem);
240
- const id = currentEventSourcingItem.record[PoSchemaUtil.syncInternalIdFieldName];
241
- await this.poSchemaService.update(schema, recordUpdatedByServer, id);
242
- const eventSourcingItems = await this.poStorage.get(PoEventSourcingService.event_sourcing_name);
243
- await this.updatePendingEventSourcing(currentEventSourcingItem, schema.idField, recordUpdatedByServer, eventSourcingItems);
244
- return this.sendResponseSubject(currentEventSourcingItem, response);
245
- }
246
- catch (errorHttpClient) {
247
- return this.sendResponseSubject(currentEventSourcingItem, errorHttpClient, true);
248
- }
249
- }
250
- isValidStatus(status) {
251
- return PoEventSourcingService.VALID_HTTP_STATUS_CODES.includes(status);
252
- }
253
- notifyEventCreation() {
254
- if (this.emitter) {
255
- this.emitter.next();
256
- }
257
- }
258
- paginateSchemaData(data, schema, baseUrl) {
259
- this.config.dataTransform.transform(data);
260
- if (this.config.dataTransform.hasNext()) {
261
- this.schemasSyncConfig[schema.name]['currentUrlDiff'] = this.buildUrlParams(schema, baseUrl, ++this.schemasSyncConfig[schema.name]['page']);
262
- return this.diffServerItems(this.schemasSyncConfig[schema.name]['currentUrlDiff']).pipe(map(response => this.getBodyAndDate(schema.name, response)));
263
- }
264
- return of();
265
- }
266
- removeEventSourcingValidItem(status, eventSourcingItem) {
267
- if (this.isValidStatus(status) || eventSourcingItem.operation === PoEventSourcingOperation.Http) {
268
- return this.removeEventSourcingItem(eventSourcingItem.id);
269
- }
270
- }
271
- selectOperation(eventSourcingItem) {
272
- switch (eventSourcingItem.operation) {
273
- case PoEventSourcingOperation.Insert:
274
- return this.insertOperation(eventSourcingItem);
275
- case PoEventSourcingOperation.Update:
276
- return this.updateOperation(eventSourcingItem);
277
- case PoEventSourcingOperation.Delete:
278
- return this.deleteOperation(eventSourcingItem);
279
- case PoEventSourcingOperation.Http:
280
- return this.httpOperation(eventSourcingItem);
281
- }
282
- }
283
- sendResponseSubject(eventSourcingItem, response, isSubjectError = false) {
284
- const poSyncResponse = {
285
- id: eventSourcingItem.id,
286
- customRequestId: eventSourcingItem.customRequestId,
287
- request: eventSourcingItem.record,
288
- response: response
289
- };
290
- this.stoppedQueueEventSourcing = isSubjectError;
291
- this.responseSubject.next(poSyncResponse);
292
- return Promise.resolve();
293
- }
294
- async sendServerItem(url, method, body) {
295
- const requestData = await this.createPoHttpRequestData(url, method, body);
296
- return this.poHttpClient.createRequest(requestData).toPromise();
297
- }
298
- async createPoHttpRequestData(url, method, record, headers) {
299
- let body = record.body ?? record;
300
- if (record.bodyType === 'File') {
301
- body = await this.createFormData(body, record.fileName, record.mimeType, record.formField);
302
- }
303
- return { url, method, body, headers };
304
- }
305
- async createFormData(body, fileName, mimeType, formField = 'file') {
306
- const file = await toFile(body, fileName, mimeType);
307
- const formData = new FormData();
308
- formData.append(formField, file, fileName);
309
- return formData;
310
- }
311
- async updateOperation(eventSourcingItem) {
312
- const schema = await this.poSchemaDefinition.get(eventSourcingItem.schema);
313
- const url = PoEventSourcingService.getUrl(eventSourcingItem, schema, PoRequestType.PATCH);
314
- try {
315
- const recordId = eventSourcingItem.record[schema.idField];
316
- this.checkRecordIdExists(recordId, PoEventSourcingOperation.Update);
317
- const response = await this.sendServerItem(url, PoHttpRequestType.PUT, eventSourcingItem.record);
318
- await this.removeEventSourcingValidItem(response.status, eventSourcingItem);
319
- return await this.sendResponseSubject(eventSourcingItem, response);
320
- }
321
- catch (errorHttpClient) {
322
- return this.sendResponseSubject(eventSourcingItem, errorHttpClient, true);
323
- }
324
- }
325
- updatePendingEventSourcing(currentEventSourcingItem, idFieldSchema, inserted, eventSourcingItems) {
326
- if (currentEventSourcingItem.record[PoSchemaUtil.syncInternalIdFieldName]) {
327
- eventSourcingItems.forEach((eventSourcingItem, position) => {
328
- const isCurrentEventSourcingItem = !eventSourcingItem.record[idFieldSchema] &&
329
- eventSourcingItem.record[PoSchemaUtil.syncInternalIdFieldName] ===
330
- currentEventSourcingItem.record[PoSchemaUtil.syncInternalIdFieldName];
331
- if (isCurrentEventSourcingItem) {
332
- eventSourcingItems[position].record[idFieldSchema] = inserted[idFieldSchema];
333
- }
334
- });
335
- return this.poStorage.set(PoEventSourcingService.event_sourcing_name, eventSourcingItems);
336
- }
337
- else {
338
- return Promise.resolve();
339
- }
340
- }
341
- async updateRecords(serverRecords, schema) {
342
- for (const serverRecord of serverRecords) {
343
- await this.updateRecordByServerRecord(serverRecord, schema);
344
- }
345
- }
346
- async updateRecordByServerRecord(serverRecord, schema) {
347
- const recordId = serverRecord[schema.idField];
348
- const storageRecord = await this.poSchemaService.get(schema.name, recordId);
349
- const existsStorageRecord = !!Object.keys(storageRecord).length;
350
- if (existsStorageRecord && serverRecord[schema.deletedField]) {
351
- return await this.poSchemaService.remove(schema.name, serverRecord[schema.idField]);
352
- }
353
- if (existsStorageRecord && !serverRecord[schema.deletedField]) {
354
- return await this.poSchemaService.update(schema, serverRecord);
355
- }
356
- if (!existsStorageRecord && !serverRecord[schema.deletedField]) {
357
- return await this.poSchemaService.create(schema, serverRecord);
358
- }
359
- }
360
- async updateStorageBySchema(schema) {
361
- this.createSchemaSyncConfig(schema.name);
362
- this.schemasSyncConfig[schema.name]['page'] = 1;
363
- const baseUrl = `${PoSchemaUtil.getUrl(schema, PoRequestType.DIFF)}/${schema.lastSync}`;
364
- this.schemasSyncConfig[schema.name]['currentUrlDiff'] = this.buildUrlParams(schema, baseUrl, this.schemasSyncConfig[schema.name]['page']);
365
- const serverRecords = await this.getServerDiffRecords(schema, baseUrl);
366
- await this.updateRecords(serverRecords, schema);
367
- schema.lastSync = this.schemasSyncConfig[schema.name]['responseDate'];
368
- await this.poSchemaDefinition.update(schema);
369
- }
370
- updateStorageSchemas(schemas) {
371
- return schemas.map((schema) => this.updateStorageBySchema(schema));
372
- }
373
- static ɵfac = function PoEventSourcingService_Factory(t) { return new (t || PoEventSourcingService)(i0.ɵɵinject(i1.PoSchemaDefinitionService), i0.ɵɵinject(i2.PoSchemaService), i0.ɵɵinject(i3.PoStorageService), i0.ɵɵinject(i4.PoHttpClientService)); };
374
- static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: PoEventSourcingService, factory: PoEventSourcingService.ɵfac });
375
- }
376
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoEventSourcingService, [{
377
- type: Injectable
378
- }], () => [{ type: i1.PoSchemaDefinitionService }, { type: i2.PoSchemaService }, { type: i3.PoStorageService }, { type: i4.PoHttpClientService }], null); })();
379
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZXZlbnQtc291cmNpbmcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N5bmMvc3JjL2xpYi9zZXJ2aWNlcy9wby1ldmVudC1zb3VyY2luZy9wby1ldmVudC1zb3VyY2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlyRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXJELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBRW5HLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBS3BGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUdsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7Ozs7OztBQU1sRixNQUFNLE9BQU8sc0JBQXNCO0lBd0J2QjtJQUNBO0lBQ0E7SUFDQTtJQTFCVixNQUFNLENBQVUsbUJBQW1CLEdBQVcsZUFBZSxDQUFDO0lBRXRELE1BQU0sQ0FBVSx1QkFBdUIsR0FBRztRQUNoRCxXQUFXLENBQUMsRUFBRSxFQUFFLE1BQU07UUFDdEIsV0FBVyxDQUFDLE9BQU8sRUFBRSxNQUFNO1FBQzNCLFdBQVcsQ0FBQyxRQUFRLEVBQUUsTUFBTTtRQUM1QixXQUFX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LENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEQsTUFBTSxPQUFPLEdBQUcsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3hGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUN6RSxNQUFNLEVBQ04sT0FBTyxFQUNQLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQzVDLENBQUM7UUFFRixNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFdkUsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVoRCxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEUsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxPQUFPO1FBQ2xDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQW9CLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ25GLENBQUM7Z0ZBL2hCVSxzQkFBc0I7Z0VBQXRCLHNCQUFzQixXQUF0QixzQkFBc0I7O2lGQUF0QixzQkFBc0I7Y0FEbEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBSZXNwb25zZSwgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFN0YXR1c0NvZGVzIH0gZnJvbSAnaHR0cC1zdGF0dXMtY29kZXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGV4cGFuZCwgbWFwLCByZWR1Y2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFBvU3RvcmFnZVNlcnZpY2UgfSBmcm9tICdAcG8tdWkvbmctc3RvcmFnZSc7XG5cbmltcG9ydCB7IHRvQmFzZTY0LCB0b0ZpbGUgfSBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5cbmltcG9ydCB7IFBvRXZlbnRTb3VyY2luZ0Vycm9yUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9tb2RlbHMvcG8tZXZlbnQtc291cmNpbmctZXJyb3ItcmVzcG9uc2UubW9kZWwnO1xuaW1wb3J0IHsgUG9FdmVudFNvdXJjaW5nSXRlbSB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1ldmVudC1zb3VyY2luZy1pdGVtLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb0V2ZW50U291cmNpbmdPcGVyYXRpb24gfSBmcm9tICcuL2VudW1zL3BvLWV2ZW50LXNvdXJjaW5nLW9wZXJhdGlvbi5lbnVtJztcbmltcG9ydCB7IFBvRXZlbnRTb3VyY2luZ1N1bW1hcnlJdGVtIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWV2ZW50LXNvdXJjaW5nLXN1bW1hcnktaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9IdHRwSGVhZGVyT3B0aW9uIH0gZnJvbSAnLi8uLi9wby1odHRwLWNsaWVudC9pbnRlcmZhY2VzL3BvLWh0dHAtaGVhZGVyLW9wdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9IdHRwQ2xpZW50U2VydmljZSB9IGZyb20gJy4vLi4vcG8taHR0cC1jbGllbnQvcG8taHR0cC1jbGllbnQuc2VydmljZSc7XG5pbXBvcnQgeyBQb0h0dHBSZXF1ZXN0RGF0YSB9IGZyb20gJy4uL3BvLWh0dHAtY2xpZW50L2ludGVyZmFjZXMvcG8taHR0cC1yZXF1ZXN0LWRhdGEuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvSHR0cFJlcXVlc3RUeXBlIH0gZnJvbSAnLi4vcG8taHR0cC1jbGllbnQvcG8taHR0cC1yZXF1ZXN0LXR5cGUuZW51bSc7XG5pbXBvcnQgeyBQb1JlcXVlc3RUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3BvLXJlcXVlc3QtdHlwZS5lbnVtJztcbmltcG9ydCB7IFBvU2NoZW1hRGVmaW5pdGlvblNlcnZpY2UgfSBmcm9tICcuLy4uL3BvLXNjaGVtYS9wby1zY2hlbWEtZGVmaW5pdGlvbi9wby1zY2hlbWEtZGVmaW5pdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFBvU2NoZW1hU2VydmljZSB9IGZyb20gJy4vLi4vcG8tc2NoZW1hL3BvLXNjaGVtYS5zZXJ2aWNlJztcbmltcG9ydCB7IFBvU2NoZW1hVXRpbCB9IGZyb20gJy4vLi4vcG8tc2NoZW1hL3BvLXNjaGVtYS11dGlsL3BvLXNjaGVtYS11dGlsLm1vZGVsJztcbmltcG9ydCB7IFBvU3luY0NvbmZpZyB9IGZyb20gJy4uL3BvLXN5bmMvaW50ZXJmYWNlcy9wby1zeW5jLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9TeW5jUmVzcG9uc2UgfSBmcm9tICcuLi9wby1zeW5jL2ludGVyZmFjZXMvcG8tc3luYy1yZXNwb25zZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9TeW5jU2NoZW1hIH0gZnJvbSAnLi8uLi9wby1zeW5jL2ludGVyZmFjZXMvcG8tc3luYy1zY2hlbWEuaW50ZXJmYWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFBvRXZlbnRTb3VyY2luZ1NlcnZpY2Uge1xuICBzdGF0aWMgcmVhZG9ubHkgZXZlbnRfc291cmNpbmdfbmFtZTogc3RyaW5nID0gJ0V2ZW50U291cmNpbmcnO1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFZBTElEX0hUVFBfU1RBVFVTX0NPREVTID0gW1xuICAgIFN0YXR1c0NvZGVzLk9LLCAvLyAyMDBcbiAgICBTdGF0dXNDb2Rlcy5DUkVBVEVELCAvLyAyMDFcbiAgICBTdGF0dXNDb2Rlcy5BQ0NFUFRFRCwgLy8gMjAyXG4gICAgU3RhdHVzQ29kZXMuTk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04sIC8vIDIwM1xuICAgIFN0YXR1c0NvZGVzLk5PX0NPTlRFTlQsIC8vIDIwNFxuICAgIFN0YXR1c0NvZGVzLlJFU0VUX0NPTlRFTlQsIC8vIDIwNVxuICAgIFN0YXR1c0NvZGVzLlBBUlRJQUxfQ09OVEVOVCwgLy8gMjA2XG4gICAgU3RhdHVzQ29kZXMuTVVMVElfU1RBVFVTIC8vIDIwN1xuICBdO1xuXG4gIGNvbmZpZzogUG9TeW5jQ29uZmlnO1xuICBzdG9wcGVkUXVldWVFdmVudFNvdXJjaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBlbWl0dGVyOiBhbnk7XG4gIHByaXZhdGUgZXZlbnRTdWI6IE9ic2VydmFibGU8bnVsbD47XG4gIHByaXZhdGUgcmVzcG9uc2VTdWJqZWN0ID0gbmV3IFN1YmplY3Q8UG9TeW5jUmVzcG9uc2U+KCk7XG5cbiAgcHJpdmF0ZSBzY2hlbWFzU3luY0NvbmZpZyA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcG9TY2hlbWFEZWZpbml0aW9uOiBQb1NjaGVtYURlZmluaXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcG9TY2hlbWFTZXJ2aWNlOiBQb1NjaGVtYVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwb1N0b3JhZ2U6IFBvU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwb0h0dHBDbGllbnQ6IFBvSHR0cENsaWVudFNlcnZpY2VcbiAgKSB7fVxuXG4gIHByaXZhdGUgc3RhdGljIGdldFVybChldmVudFNvdXJjaW5nSXRlbSwgc2NoZW1hLCByZXF1ZXN0VHlwZSk6IHN0cmluZyB7XG4gICAgY29uc3Qgc2NoZW1hVXJsID0gUG9TY2hlbWFVdGlsLmdldFVybChzY2hlbWEsIHJlcXVlc3RUeXBlKTtcbiAgICBjb25zdCBzY2hlbWFJZCA9IGV2ZW50U291cmNpbmdJdGVtLnJlY29yZFtzY2hlbWEuaWRGaWVsZF07XG5cbiAgICBpZiAocmVxdWVzdFR5cGUgPT09IFBvUmVxdWVzdFR5cGUuR0VUKSB7XG4gICAgICByZXR1cm4gc2NoZW1hVXJsO1xuICAgIH1cblxuICAgIGlmIChbUG9SZXF1ZXN0VHlwZS5ERUxFVEUsIFBvUmVxdWVzdFR5cGUuUEFUQ0hdLmluY2x1ZGVzKHJlcXVlc3RUeXBlKSkge1xuICAgICAgcmV0dXJuIHNjaGVtYVVybCA/IGAke3NjaGVtYVVybH0vJHtzY2hlbWFJZH1gIDogYCR7UG9TY2hlbWFVdGlsLmdldFVybChzY2hlbWEsIFBvUmVxdWVzdFR5cGUuR0VUKX0vJHtzY2hlbWFJZH1gO1xuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0VHlwZSA9PT0gUG9SZXF1ZXN0VHlwZS5QT1NUKSB7XG4gICAgICByZXR1cm4gc2NoZW1hVXJsID8gc2NoZW1hVXJsIDogUG9TY2hlbWFVdGlsLmdldFVybChzY2hlbWEsIFBvUmVxdWVzdFR5cGUuR0VUKTtcbiAgICB9XG4gIH1cblxuICBjcmVhdGUoc2NoZW1hTmFtZTogc3RyaW5nLCBuZXdJdGVtOiBhbnksIGN1c3RvbVJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgZXZlbnRTb3VyY2luZ0l0ZW0gPSB0aGlzLmNyZWF0ZUV2ZW50U291cmNpbmdJdGVtKFxuICAgICAgUG9FdmVudFNvdXJjaW5nT3BlcmF0aW9uLkluc2VydCxcbiAgICAgIG5ld0l0ZW0sXG4gICAgICBzY2hlbWFOYW1lLFxuICAgICAgY3VzdG9tUmVxdWVzdElkXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5pbnNlcnRFdmVudFNvdXJjaW5nUXVldWUoZXZlbnRTb3VyY2luZ0l0ZW0pO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlQmF0Y2hFdmVudHMoc2NoZW1hTmFtZTogc3RyaW5nLCBldmVudExpc3Q6IEFycmF5PFBvRXZlbnRTb3VyY2luZ1N1bW1hcnlJdGVtPikge1xuICAgIGNvbnN0IGV2ZW50U291cmNpbmdMaXN0ID0gdGhpcy5jcmVhdGVFdmVudFNvdXJjaW5nTGlzdChzY2hlbWFOYW1lLCBldmVudExpc3QpO1xuXG4gICAgYXdhaXQgdGhpcy5wb1N0b3JhZ2UuYXBwZW5kQXJyYXlUb0FycmF5KFBvRXZlbnRTb3VyY2luZ1NlcnZpY2UuZXZlbnRfc291cmNpbmdfbmFtZSwgZXZlbnRTb3VyY2luZ0xpc3QpO1xuXG4gICAgdGhpcy5ub3RpZnlFdmVudENyZWF0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHLDs2kgYSBjaGF2ZSBkbyAqc3RvcmFnZSogcXVlIGNvbnTDqW0gYSBmaWxhIGRlIGRhZG9zIHF1ZSBlc3TDo28gZXNwZXJhbmRvIHBhcmEgc2VyZW0gZW52aWFkb3MgYW9cbiAgICogc2Vydmlkb3IgKihFdmVudFNvdXJjaW5nKSouXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSBQcm9tZXNzYSBxdWUgw6kgcmVzb2x2aWRhIHF1YW5kbyBhIGNoYXZlIHJlZmVyZW50ZSBhIGZpbGEgZGUgKkV2ZW50U291cmNpbmcqIGZvciBkZXN0cnXDrWRhLlxuICAgKi9cbiAgZGVzdHJveUV2ZW50U291cmNpbmdRdWV1ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5wb1N0b3JhZ2UucmVtb3ZlKFBvRXZlbnRTb3VyY2luZ1NlcnZpY2UuZXZlbnRfc291cmNpbmdfbmFtZSk7XG4gIH1cblxuICBhc3luYyBodHRwQ29tbWFuZChodHRwT3BlcmF0aW9uRGF0YTogUG9IdHRwUmVxdWVzdERhdGEsIGN1c3RvbVJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgaHR0cE9wZXJhdGlvbkRhdGEgPSBhd2FpdCB0aGlzLnNlcmlhbGl6ZUJvZHkoaHR0cE9wZXJhdGlvbkRhdGEpO1xuXG4gICAgY29uc3QgZXZlbnRTb3VyY2luZ0l0ZW0gPSB0aGlzLmNyZWF0ZUV2ZW50U291cmNpbmdJdGVtKFxuICAgICAgUG9FdmVudFNvdXJjaW5nT3BlcmF0aW9uLkh0dHAsXG4gICAgICBodHRwT3BlcmF0aW9uRGF0YSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGN1c3RvbVJlcXVlc3RJZFxuICAgICk7XG5cbiAgICBhd2FpdCB0aGlzLmluc2VydEV2ZW50U291cmNpbmdRdWV1ZShldmVudFNvdXJjaW5nSXRlbSk7XG4gICAgcmV0dXJuIGV2ZW50U291cmNpbmdJdGVtLmlkO1xuICB9XG5cbiAgcmVzcG9uc2VzU3ViamVjdCgpOiBPYnNlcnZhYmxlPFBvU3luY1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVzcG9uc2VTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgb25TYXZlRGF0YSgpOiBPYnNlcnZhYmxlPG51bGw+IHtcbiAgICBpZiAoIXRoaXMuZXZlbnRTdWIpIHtcbiAgICAgIHRoaXMuZXZlbnRTdWIgPSBPYnNlcnZhYmxlLmNyZWF0ZShzdWJzY3JpYmVyID0+ICh0aGlzLmVtaXR0ZXIgPSBzdWJzY3JpYmVyKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmV2ZW50U3ViO1xuICB9XG5cbiAgcmVtb3ZlKHNjaGVtYU5hbWU6IHN0cmluZywgaXRlbVRvRGVsZXRlOiBhbnksIGN1c3RvbVJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgZXZlbnRTb3VyY2luZ0l0ZW0gPSB0aGlzLmNyZWF0ZUV2ZW50U291cmNpbmdJdGVtKFxuICAgICAgUG9FdmVudFNvdXJjaW5nT3BlcmF0aW9uLkRlbGV0ZSxcbiAgICAgIGl0ZW1Ub0RlbGV0ZSxcbiAgICAgIHNjaGVtYU5hbWUsXG4gICAgICBjdXN0b21SZXF1ZXN0SWRcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmluc2VydEV2ZW50U291cmNpbmdRdWV1ZShldmVudFNvdXJjaW5nSXRlbSk7XG4gIH1cblxuICByZW1vdmVFdmVudFNvdXJjaW5nSXRlbShpZEV2ZW50U291cmNpbmdJdGVtKSB7XG4gICAgcmV0dXJuIHRoaXMucG9TdG9yYWdlLnJlbW92ZUl0ZW1Gcm9tQXJyYXkoUG9FdmVudFNvdXJjaW5nU2VydmljZS5ldmVudF9zb3VyY2luZ19uYW1lLCAnaWQnLCBpZEV2ZW50U291cmNpbmdJdGVtKTtcbiAgfVxuXG4gIHN5bmNHZXQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBzeW5jR2V0RnVuY3Rpb24gPSBhc3luYyAoKSA9PlxuICAgICAgdGhpcy5wb1NjaGVtYURlZmluaXRpb24uZ2V0QWxsKCkudGhlbihzY2hlbWFzID0+IHtcbiAgICAgICAgY29uc3Qgc2NoZW1hUHJvbWlzZXMgPSB0aGlzLnVwZGF0ZVN0b3JhZ2VTY2hlbWFzKHNjaGVtYXMpO1xuXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChzY2hlbWFQcm9taXNlcyk7XG4gICAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLnBvU2NoZW1hU2VydmljZS5saW1pdGVkQ2FsbFdyYXAoc3luY0dldEZ1bmN0aW9uKTtcbiAgfVxuXG4gIGFzeW5jIHN5bmNTZW5kKCk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3Qgc3luY1NlbmRGdW5jdGlvbiA9IGFzeW5jICgpOiBQcm9taXNlPGFueT4gPT4ge1xuICAgICAgY29uc3QgaXRlbU9mUXVldWUgPSBhd2FpdCB0aGlzLnBvU3RvcmFnZS5nZXRGaXJzdEl0ZW0oUG9FdmVudFNvdXJjaW5nU2VydmljZS5ldmVudF9zb3VyY2luZ19uYW1lKTtcblxuICAgICAgaWYgKGl0ZW1PZlF1ZXVlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2VsZWN0T3BlcmF0aW9uKGl0ZW1PZlF1ZXVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc3RvcHBlZFF1ZXVlRXZlbnRTb3VyY2luZyB8fCAhaXRlbU9mUXVldWUpIHtcbiAgICAgICAgdGhpcy5zdG9wcGVkUXVldWVFdmVudFNvdXJjaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN5bmNTZW5kRnVuY3Rpb24oKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMucG9TY2hlbWFTZXJ2aWNlLmxpbWl0ZWRDYWxsV3JhcChzeW5jU2VuZEZ1bmN0aW9uKTtcbiAgfVxuXG4gIHVwZGF0ZShzY2hlbWFOYW1lOiBzdHJpbmcsIGl0ZW1VcGRhdGVkOiBhbnksIGN1c3RvbVJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgZXZlbnRTb3VyY2luZ0l0ZW0gPSB0aGlzLmNyZWF0ZUV2ZW50U291cmNpbmdJdGVtKFxuICAgICAgUG9FdmVudFNvdXJjaW5nT3BlcmF0aW9uLlVwZGF0ZSxcbiAgICAgIGl0ZW1VcGRhdGVkLFxuICAgICAgc2NoZW1hTmFtZSxcbiAgICAgIGN1c3RvbVJlcXVlc3RJZFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaW5zZXJ0RXZlbnRTb3VyY2luZ1F1ZXVlKGV2ZW50U291cmNpbmdJdGVtKTtcbiAgfVxuXG4gIC8qIEF2YWxpYSBzZSBvIGJvZHkgw6kgZG8gdGlwbyBGaWxlIGUgc2UgZm9yIGNvbnZlcnRlIHBhcmEgYmFzZTY0ICovXG4gIHByaXZhdGUgYXN5bmMgc2VyaWFsaXplQm9keShyZXF1ZXN0RGF0YTogUG9IdHRwUmVxdWVzdERhdGEpOiBQcm9taXNlPFBvSHR0cFJlcXVlc3REYXRhPiB7XG4gICAgbGV0IHsgYm9keSwgbWltZVR5cGUsIGJvZHlUeXBlLCBmaWxlTmFtZSB9ID0gcmVxdWVzdERhdGE7XG5cbiAgICBpZiAoYm9keSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgIGJvZHlUeXBlID0gJ0ZpbGUnO1xuICAgICAgbWltZVR5cGUgPSBib2R5LnR5cGU7XG4gICAgICBmaWxlTmFtZSA9IGJvZHkubmFtZTtcbiAgICAgIGJvZHkgPSBhd2FpdCB0b0Jhc2U2NChib2R5KTtcbiAgICB9XG5cbiAgICByZXR1cm4geyAuLi5yZXF1ZXN0RGF0YSwgYm9keSwgbWltZVR5cGUsIGJvZHlUeXBlLCBmaWxlTmFtZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFVybFBhcmFtcyhzY2hlbWE6IFBvU3luY1NjaGVtYSwgYmFzZVVybDogc3RyaW5nLCBwYWdlTnVtYmVyOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhcmFtcyA9IFtdO1xuICAgIHBhcmFtcy5wdXNoKGAke3RoaXMuY29uZmlnLmRhdGFUcmFuc2Zvcm0uZ2V0UGFnZVNpemVQYXJhbU5hbWUoKX09JHtzY2hlbWEucGFnZVNpemV9YCk7XG4gICAgcGFyYW1zLnB1c2goYCR7dGhpcy5jb25maWcuZGF0YVRyYW5zZm9ybS5nZXRQYWdlUGFyYW1OYW1lKCl9PSR7cGFnZU51bWJlcn1gKTtcbiAgICByZXR1cm4gYCR7YmFzZVVybH0/JHtwYXJhbXMuam9pbignJicpfWA7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrUmVjb3JkSWRFeGlzdHMocmVjb3JkSWQsIG9wZXJhdGlvbikge1xuICAgIGlmICghcmVjb3JkSWQpIHtcbiAgICAgIGNvbnN0IGVycm9yID0ge1xuICAgICAgICBtZXNzYWdlOiAnSWRlbnRpZmllciBub3QgZGVmaW5lZCcsXG4gICAgICAgIG9wZXJhdGlvbjogb3BlcmF0aW9uXG4gICAgICB9O1xuXG4gICAgICB0aHJvdyBuZXcgUG9FdmVudFNvdXJjaW5nRXJyb3JSZXNwb25zZShlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25jYXRQYWdlSXRlbXMocGFnZUFjdW11bGF0b3IsIHJlcXVlc3RCb2R5KTogeyBlbnRpdHk6IHN0cmluZzsgZGF0YTogQXJyYXk8YW55PiB9IHtcbiAgICBpZiAocmVxdWVzdEJvZHlbdGhpcy5jb25maWcuZGF0YVRyYW5zZm9ybS5nZXRJdGVtc0ZpZWxkTmFtZSgpXSkge1xuICAgICAgcGFnZUFjdW11bGF0b3IuZGF0YSA9IFsuLi5wYWdlQWN1bXVsYXRvci5kYXRhLCAuLi5yZXF1ZXN0Qm9keVt0aGlzLmNvbmZpZy5kYXRhVHJhbnNmb3JtLmdldEl0ZW1zRmllbGROYW1lKCldXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhZ2VBY3VtdWxhdG9yO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVFdmVudFNvdXJjaW5nSXRlbShcbiAgICBvcGVyYXRpb246IFBvRXZlbnRTb3VyY2luZ09wZXJhdGlvbixcbiAgICBuZXdJdGVtOiBhbnkgfCBQb0h0dHBSZXF1ZXN0RGF0YSxcbiAgICBzY2hlbWFOYW1lPzogc3RyaW5nLFxuICAgIGN1c3RvbVJlcXVlc3RJZD86IHN0cmluZyxcbiAgICBpZD86IG51bWJlclxuICApOiBQb0V2ZW50U291cmNpbmdJdGVtIHtcbiAgICBpZiAoIXNjaGVtYU5hbWUgJiYgb3BlcmF0aW9uICE9PSBQb0V2ZW50U291cmNpbmdPcGVyYXRpb24uSHR0cCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQb1N5bmNTY2hlbWEgaXMgbm90IGRlZmluZWQuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBpZCA/IGlkIDogbmV3IERhdGUoKS5nZXRUaW1lKCksXG4gICAgICBkYXRlVGltZTogbmV3IERhdGUoKS5nZXRUaW1lKCksXG4gICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICBvcGVyYXRpb246IG9wZXJhdGlvbixcbiAgICAgIHJlY29yZDogbmV3SXRlbSxcbiAgICAgIGN1c3RvbVJlcXVlc3RJZDogY3VzdG9tUmVxdWVzdElkXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRXZlbnRTb3VyY2luZ0xpc3QoXG4gICAgc2NoZW1hTmFtZTogc3RyaW5nLFxuICAgIGV2ZW50TGlzdDogQXJyYXk8UG9FdmVudFNvdXJjaW5nU3VtbWFyeUl0ZW0+XG4gICk6IEFycmF5PFBvRXZlbnRTb3VyY2luZ0l0ZW0+IHtcbiAgICByZXR1cm4gZXZlbnRMaXN0Lm1hcCgoZXZlbnRJdGVtLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgaWQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIGluZGV4O1xuXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVFdmVudFNvdXJjaW5nSXRlbShcbiAgICAgICAgZXZlbnRJdGVtLm9wZXJhdGlvbixcbiAgICAgICAgZXZlbnRJdGVtLnJlY29yZCxcbiAgICAgICAgc2NoZW1hTmFtZSxcbiAgICAgICAgZXZlbnRJdGVtLmN1c3RvbVJlcXVlc3RJZCxcbiAgICAgICAgaWRcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNjaGVtYVN5bmNDb25maWcoc2NoZW1hTmFtZSkge1xuICAgIHRoaXMuc2NoZW1hc1N5bmNDb25maWdbc2NoZW1hTmFtZV0gPSB7XG4gICAgICBwYWdlOiB1bmRlZmluZWQsXG4gICAgICBjdXJyZW50VXJsRGlmZjogdW5kZWZpbmVkLFxuICAgICAgcmVzcG9uc2VEYXRlOiB1bmRlZmluZWRcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWxldGVPcGVyYXRpb24oZXZlbnRTb3VyY2luZ0l0ZW06IFBvRXZlbnRTb3VyY2luZ0l0ZW0pOiBQcm9taXNlPGFueT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCB0aGlzLnBvU2NoZW1hRGVmaW5pdGlvbi5nZXQoZXZlbnRTb3VyY2luZ0l0ZW0uc2NoZW1hKTtcblxuICAgICAgY29uc3QgcmVjb3JkSWQgPSBldmVudFNvdXJjaW5nSXRlbS5yZWNvcmRbc2NoZW1hLmlkRmllbGRdO1xuICAgICAgdGhpcy5jaGVja1JlY29yZElkRXhpc3RzKHJlY29yZElkLCBQb0V2ZW50U291cmNpbmdPcGVyYXRpb24uRGVsZXRlKTtcblxuICAgICAgY29uc3QgdXJsID0gUG9FdmVudFNvdXJjaW5nU2VydmljZS5nZXRVcmwoZXZlbnRTb3VyY2luZ0l0ZW0sIHNjaGVtYSwgUG9SZXF1ZXN0VHlwZS5ERUxFVEUpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRTZXJ2ZXJJdGVtKHVybCwgUG9IdHRwUmVxdWVzdFR5cGUuREVMRVRFKTtcblxuICAgICAgYXdhaXQgdGhpcy5yZW1vdmVFdmVudFNvdXJjaW5nVmFsaWRJdGVtKHJlc3BvbnNlLnN0YXR1cywgZXZlbnRTb3VyY2luZ0l0ZW0pO1xuXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZW5kUmVzcG9uc2VTdWJqZWN0KGV2ZW50U291cmNpbmdJdGVtLCByZXNwb25zZSk7XG4gICAgfSBjYXRjaCAoZXJyb3JSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VuZFJlc3BvbnNlU3ViamVjdChldmVudFNvdXJjaW5nSXRlbSwgZXJyb3JSZXNwb25zZSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkaWZmU2VydmVySXRlbXMoY3VycmVudFVybERpZmYpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxPYmplY3Q+PiB7XG4gICAgcmV0dXJuIHRoaXMucG9IdHRwQ2xpZW50LmdldChjdXJyZW50VXJsRGlmZik7XG4gIH1cblxuICBwcml2YXRlIGdldEJvZHlBbmREYXRlKHNjaGVtYU5hbWUsIHJlc3BvbnNlKTogYW55IHtcbiAgICBjb25zdCBnZXREYXRlRmllbGROYW1lID0gdGhpcy5jb25maWcuZGF0YVRyYW5zZm9ybS5nZXREYXRlRmllbGROYW1lKCk7XG5cbiAgICBjb25zdCByZXNwb25zZVN5bmNEYXRlID0gcmVzcG9uc2UuYm9keVtnZXREYXRlRmllbGROYW1lXTtcblxuICAgIHRoaXMuc2NoZW1hc1N5bmNDb25maWdbc2NoZW1hTmFtZV1bJ3Jlc3BvbnNlRGF0ZSddID0gcmVzcG9uc2VTeW5jRGF0ZTtcbiAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0U2VydmVyRGlmZlJlY29yZHMoc2NoZW1hOiBQb1N5bmNTY2hlbWEsIGJhc2VVcmw6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgaW5pdGlhbEFjdW11bGF0b3JQYWdlID0geyBlbnRpdHk6IHNjaGVtYS5uYW1lLCBkYXRhOiBbXSB9O1xuICAgIGNvbnN0IGRpZmZVcmwgPSB0aGlzLnNjaGVtYXNTeW5jQ29uZmlnW3NjaGVtYS5uYW1lXVsnY3VycmVudFVybERpZmYnXTtcblxuICAgIGNvbnN0IHNlcnZlclJlc3BvbnNlID0gYXdhaXQgdGhpcy5kaWZmU2VydmVySXRlbXMoZGlmZlVybClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAocmVzcG9uc2UgPT4gdGhpcy5nZXRCb2R5QW5kRGF0ZShzY2hlbWEubmFtZSwgcmVzcG9uc2UpKSxcbiAgICAgICAgZXhwYW5kKGRhdGEgPT4gdGhpcy5wYWdpbmF0ZVNjaGVtYURhdGEoZGF0YSwgc2NoZW1hLCBiYXNlVXJsKSksXG4gICAgICAgIHJlZHVjZShcbiAgICAgICAgICAocGFnZUFjdW11bGF0b3IsIHJlcXVlc3RCb2R5KSA9PiB0aGlzLmNvbmNhdFBhZ2VJdGVtcyhwYWdlQWN1bXVsYXRvciwgcmVxdWVzdEJvZHkpLFxuICAgICAgICAgIGluaXRpYWxBY3VtdWxhdG9yUGFnZVxuICAgICAgICApXG4gICAgICApXG4gICAgICAudG9Qcm9taXNlKCk7XG5cbiAgICByZXR1cm4gc2VydmVyUmVzcG9uc2UuZGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaHR0cE9wZXJhdGlvbihldmVudFNvdXJjaW5nSXRlbTogUG9FdmVudFNvdXJjaW5nSXRlbSk6IFByb21pc2U8QXJyYXk8UG9FdmVudFNvdXJjaW5nSXRlbT4gfCBudW1iZXI+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVxdWVzdERhdGE6IFBvSHR0cFJlcXVlc3REYXRhID0gYXdhaXQgdGhpcy5jcmVhdGVQb0h0dHBSZXF1ZXN0RGF0YShcbiAgICAgICAgZXZlbnRTb3VyY2luZ0l0ZW0ucmVjb3JkLnVybCxcbiAgICAgICAgZXZlbnRTb3VyY2luZ0l0ZW0ucmVjb3JkLm1ldGhvZCxcbiAgICAgICAgZXZlbnRTb3VyY2luZ0l0ZW0ucmVjb3JkLFxuICAgICAgICBldmVudFNvdXJjaW5nSXRlbS5yZWNvcmQuaGVhZGVyc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wb0h0dHBDbGllbnQuY3JlYXRlUmVxdWVzdChyZXF1ZXN0RGF0YSkudG9Qcm9taXNlKCk7XG4gICAgICBjb25zdCBwb0h0dHBDb21tYW5kUmVzcG9uc2U6IFBvU3luY1Jlc3BvbnNlID0ge1xuICAgICAgICBpZDogZXZlbnRTb3VyY2luZ0l0ZW0uaWQsXG4gICAgICAgIGN1c3RvbVJlcXVlc3RJZDogZXZlbnRTb3VyY2luZ0l0ZW0uY3VzdG9tUmVxdWVzdElkLFxuICAgICAgICByZXF1ZXN0OiBldmVudFNvdXJjaW5nSXRlbS5yZWNvcmQsXG4gICAgICAgIHJlc3BvbnNlOiByZXNwb25zZVxuICAgICAgfTtcblxuICAgICAgdGhpcy5yZXNwb25zZVN1YmplY3QubmV4dChwb0h0dHBDb21tYW5kUmVzcG9uc2UpO1xuXG4gICAgICByZXR1cm4gdGhpcy5yZW1vdmVFdmVudFNvdXJjaW5nVmFsaWRJdGVtKHJlc3BvbnNlLnN0YXR1cywgZXZlbnRTb3VyY2luZ0l0ZW0pO1xuICAgIH0gY2F0Y2ggKGVycm9ySHR0cENsaWVudCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VuZFJlc3BvbnNlU3ViamVjdChldmVudFNvdXJjaW5nSXRlbSwgZXJyb3JIdHRwQ2xpZW50LCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGluc2VydEV2ZW50U291cmNpbmdRdWV1ZShldmVudFNvdXJjaW5nSXRlbSk6IFByb21pc2U8QXJyYXk8UG9FdmVudFNvdXJjaW5nSXRlbT4+IHtcbiAgICBjb25zdCBldmVudFNvdXJjaW5nVXBkYXRlZFF1ZXVlID0gYXdhaXQgdGhpcy5wb1N0b3JhZ2UuYXBwZW5kSXRlbVRvQXJyYXkoXG4gICAgICBQb0V2ZW50U291cmNpbmdTZXJ2aWNlLmV2ZW50X3NvdXJjaW5nX25hbWUsXG4gICAgICBldmVudFNvdXJjaW5nSXRlbVxuICAgICk7XG5cbiAgICB0aGlzLm5vdGlmeUV2ZW50Q3JlYXRpb24oKTtcblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZXZlbnRTb3VyY2luZ1VwZGF0ZWRRdWV1ZSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGluc2VydE9wZXJhdGlvbihjdXJyZW50RXZlbnRTb3VyY2luZ0l0ZW06IFBvRXZlbnRTb3VyY2luZ0l0ZW0pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IHRoaXMucG9TY2hlbWFEZWZpbml0aW9uLmdldChjdXJyZW50RXZlbnRTb3VyY2luZ0l0ZW0uc2NoZW1hKTtcbiAgICBjb25zdCB1cmwgPSBQb0V2ZW50U291cmNpbmdTZXJ2aWNlLmdldFVybChjdXJyZW50RXZlbnRTb3VyY2luZ0l0ZW0sIHNjaGVtYSwgUG9SZXF1ZXN0VHlwZS5QT1NUKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFNlcnZlckl0ZW0odXJsLCBQb0h0dHBSZXF1ZXN0VHlwZS5QT1NULCBjdXJyZW50RXZlbnRTb3VyY2luZ0l0ZW0ucmVjb3JkKTtcbiAgICAgIGNvbnN0IHJlY29yZFVwZGF0ZWRCeVNlcnZlciA9IHJlc3BvbnNlLmJvZHk7XG5cbiAgICAgIGF3YWl0IHRoaXMucmVtb3ZlRXZlbnRTb3VyY2luZ1ZhbGlkSXRlbShyZXNwb25zZS5zdGF0dXMsIGN1cnJlbnRFdmVudFNvdXJjaW5nSXRlbSk7XG5cbiAgICAgIGNvbnN0IGlkID0gY3VycmVudEV2ZW50U291cmNpbmdJdGVtLnJlY29yZFtQb1NjaGVtYVV0aWwuc3luY0ludGVybmFsSWRGaWVsZE5hbWVdO1xuICAgICAgYXdhaXQgdGhpcy5wb1NjaGVtYVNlcnZpY2UudXBkYXRlKHNjaGVtYSwgcmVjb3JkVXBkYXRlZEJ5U2VydmVyLCBpZCk7XG5cbiAgICAgIGNvbnN0IGV2ZW50U291cmNpbmdJdGVtczogQXJyYXk8UG9FdmVudFNvdXJjaW5nSXRlbT4gPSBhd2FpdCB0aGlzLnBvU3RvcmFnZS5nZXQoXG4gICAgICAgIFBvRXZlbnRTb3VyY2luZ1NlcnZpY2UuZXZlbnRfc291cmNpbmdfbmFtZVxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlUGVuZGluZ0V2ZW50U291cmNpbmcoXG4gICAgICAgIGN1cnJlbnRFdmVudFNvdXJjaW5nSXRlbSxcbiAgICAgICAgc2NoZW1hLmlkRmllbGQsXG4gICAgICAgIHJlY29yZFVwZGF0ZWRCeVNlcnZlcixcbiAgICAgICAgZXZlbnRTb3VyY2luZ0l0ZW1zXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gdGhpcy5zZW5kUmVzcG9uc2VTdWJqZWN0KGN1cnJlbnRFdmVudFNvdXJjaW5nSXRlbSwgcmVzcG9uc2UpO1xuICAgIH0gY2F0Y2ggKGVycm9ySHR0cENsaWVudCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VuZFJlc3BvbnNlU3ViamVjdChjdXJyZW50RXZlbnRTb3VyY2luZ0l0ZW0sIGVycm9ySHR0cENsaWVudCwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc1ZhbGlkU3RhdHVzKHN0YXR1czogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFBvRXZlbnRTb3VyY2luZ1NlcnZpY2UuVkFMSURfSFRUUF9TVEFUVVNfQ09ERVMuaW5jbHVkZXMoc3RhdHVzKTtcbiAgfVxuXG4gIHByaXZhdGUgbm90aWZ5RXZlbnRDcmVhdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lbWl0dGVyKSB7XG4gICAgICB0aGlzLmVtaXR0ZXIubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGFnaW5hdGVTY2hlbWFEYXRhKGRhdGEsIHNjaGVtYSwgYmFzZVVybCk6IE9ic2VydmFibGU8bnVsbD4ge1xuICAgIHRoaXMuY29uZmlnLmRhdGFUcmFuc2Zvcm0udHJhbnNmb3JtKGRhdGEpO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLmRhdGFUcmFuc2Zvcm0uaGFzTmV4dCgpKSB7XG4gICAgICB0aGlzLnNjaGVtYXNTeW5jQ29uZmlnW3NjaGVtYS5uYW1lXVsnY3VycmVudFVybERpZmYnXSA9IHRoaXMuYnVpbGRVcmxQYXJhbXMoXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgYmFzZVVybCxcbiAgICAgICAgKyt0aGlzLnNjaGVtYXNTeW5jQ29uZmlnW3NjaGVtYS5uYW1lXVsncGFnZSddXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gdGhpcy5kaWZmU2VydmVySXRlbXModGhpcy5zY2hlbWFzU3luY0NvbmZpZ1tzY2hlbWEubmFtZV1bJ2N1cnJlbnRVcmxEaWZmJ10pLnBpcGUoXG4gICAgICAgIG1hcChyZXNwb25zZSA9PiB0aGlzLmdldEJvZHlBbmREYXRlKHNjaGVtYS5uYW1lLCByZXNwb25zZSkpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBvZigpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVFdmVudFNvdXJjaW5nVmFsaWRJdGVtKFxuICAgIHN0YXR1cyxcbiAgICBldmVudFNvdXJjaW5nSXRlbTogUG9FdmVudFNvdXJjaW5nSXRlbVxuICApOiBQcm9taXNlPEFycmF5PFBvRXZlbnRTb3VyY2luZ0l0ZW0+PiB7XG4gICAgaWYgKHRoaXMuaXNWYWxpZFN0YXR1cyhzdGF0dXMpIHx8IGV2ZW50U291cmNpbmdJdGVtLm9wZXJhdGlvbiA9PT0gUG9FdmVudFNvdXJjaW5nT3BlcmF0aW9uLkh0dHApIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbW92ZUV2ZW50U291cmNpbmdJdGVtKGV2ZW50U291cmNpbmdJdGVtLmlkKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdE9wZXJhdGlvbihldmVudFNvdXJjaW5nSXRlbTogUG9FdmVudFNvdXJjaW5nSXRlbSk6IFByb21pc2U8YW55PiB7XG4gICAgc3dpdGNoIChldmVudFNvdXJjaW5nSXRlbS5vcGVyYXRpb24pIHtcbiAgICAgIGNhc2UgUG9FdmVudFNvdXJjaW5nT3BlcmF0aW9uLkluc2VydDpcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0T3BlcmF0aW9uKGV2ZW50U291cmNpbmdJdGVtKTtcblxuICAgICAgY2FzZSBQb0V2ZW50U291cmNpbmdPcGVyYXRpb24uVXBkYXRlOlxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVPcGVyYXRpb24oZXZlbnRTb3VyY2luZ0l0ZW0pO1xuXG4gICAgICBjYXNlIFBvRXZlbnRTb3VyY2luZ09wZXJhdGlvbi5EZWxldGU6XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGV0ZU9wZXJhdGlvbihldmVudFNvdXJjaW5nSXRlbSk7XG5cbiAgICAgIGNhc2UgUG9FdmVudFNvdXJjaW5nT3BlcmF0aW9uLkh0dHA6XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBPcGVyYXRpb24oZXZlbnRTb3VyY2luZ0l0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2VuZFJlc3BvbnNlU3ViamVjdChcbiAgICBldmVudFNvdXJjaW5nSXRlbTogUG9FdmVudFNvdXJjaW5nSXRlbSxcbiAgICByZXNwb25zZTogSHR0cFJlc3BvbnNlPE9iamVjdD4gfCBIdHRwRXJyb3JSZXNwb25zZSB8IFBvRXZlbnRTb3VyY2luZ0Vycm9yUmVzcG9uc2UsXG4gICAgaXNTdWJqZWN0RXJyb3I6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHBvU3luY1Jlc3BvbnNlOiBQb1N5bmNSZXNwb25zZSA9IHtcbiAgICAgIGlkOiBldmVudFNvdXJjaW5nSXRlbS5pZCxcbiAgICAgIGN1c3RvbVJlcXVlc3RJZDogZXZlbnRTb3VyY2luZ0l0ZW0uY3VzdG9tUmVxdWVzdElkLFxuICAgICAgcmVxdWVzdDogZXZlbnRTb3VyY2luZ0l0ZW0ucmVjb3JkLFxuICAgICAgcmVzcG9uc2U6IHJlc3BvbnNlXG4gICAgfTtcblxuICAgIHRoaXMuc3RvcHBlZFF1ZXVlRXZlbnRTb3VyY2luZyA9IGlzU3ViamVjdEVycm9yO1xuICAgIHRoaXMucmVzcG9uc2VTdWJqZWN0Lm5leHQocG9TeW5jUmVzcG9uc2UpO1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kU2VydmVySXRlbSh1cmw6IHN0cmluZywgbWV0aG9kOiBQb0h0dHBSZXF1ZXN0VHlwZSwgYm9keT86IFBvRXZlbnRTb3VyY2luZ0l0ZW1bJ3JlY29yZCddKSB7XG4gICAgY29uc3QgcmVxdWVzdERhdGE6IFBvSHR0cFJlcXVlc3REYXRhID0gYXdhaXQgdGhpcy5jcmVhdGVQb0h0dHBSZXF1ZXN0RGF0YSh1cmwsIG1ldGhvZCwgYm9keSk7XG5cbiAgICByZXR1cm4gdGhpcy5wb0h0dHBDbGllbnQuY3JlYXRlUmVxdWVzdChyZXF1ZXN0RGF0YSkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZVBvSHR0cFJlcXVlc3REYXRhKFxuICAgIHVybDogc3RyaW5nLFxuICAgIG1ldGhvZDogUG9IdHRwUmVxdWVzdFR5cGUsXG4gICAgcmVjb3JkPzogUG9FdmVudFNvdXJjaW5nSXRlbVsncmVjb3JkJ10sXG4gICAgaGVhZGVycz86IEFycmF5PFBvSHR0cEhlYWRlck9wdGlvbj5cbiAgKTogUHJvbWlzZTxQb0h0dHBSZXF1ZXN0RGF0YT4ge1xuICAgIGxldCBib2R5ID0gcmVjb3JkLmJvZHkgPz8gcmVjb3JkO1xuXG4gICAgaWYgKHJlY29yZC5ib2R5VHlwZSA9PT0gJ0ZpbGUnKSB7XG4gICAgICBib2R5ID0gYXdhaXQgdGhpcy5jcmVhdGVGb3JtRGF0YShib2R5LCByZWNvcmQuZmlsZU5hbWUsIHJlY29yZC5taW1lVHlwZSwgcmVjb3JkLmZvcm1GaWVsZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdXJsLCBtZXRob2QsIGJvZHksIGhlYWRlcnMgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlRm9ybURhdGEoXG4gICAgYm9keTogc3RyaW5nLFxuICAgIGZpbGVOYW1lOiBzdHJpbmcsXG4gICAgbWltZVR5cGU6IHN0cmluZyxcbiAgICBmb3JtRmllbGQ6IHN0cmluZyA9ICdmaWxlJ1xuICApOiBQcm9taXNlPEZvcm1EYXRhPiB7XG4gICAgY29uc3QgZmlsZSA9IGF3YWl0IHRvRmlsZShib2R5LCBmaWxlTmFtZSwgbWltZVR5cGUpO1xuICAgIGNvbnN0IGZvcm1EYXRhOiBGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKGZvcm1GaWVsZCwgZmlsZSwgZmlsZU5hbWUpO1xuICAgIHJldHVybiBmb3JtRGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlT3BlcmF0aW9uKGV2ZW50U291cmNpbmdJdGVtOiBQb0V2ZW50U291cmNpbmdJdGVtKTogUHJvbWlzZTxBcnJheTxhbnk+IHwgbnVtYmVyPiB7XG4gICAgY29uc3Qgc2NoZW1hID0gYXdhaXQgdGhpcy5wb1NjaGVtYURlZmluaXRpb24uZ2V0KGV2ZW50U291cmNpbmdJdGVtLnNjaGVtYSk7XG4gICAgY29uc3QgdXJsID0gUG9FdmVudFNvdXJjaW5nU2VydmljZS5nZXRVcmwoZXZlbnRTb3VyY2luZ0l0ZW0sIHNjaGVtYSwgUG9SZXF1ZXN0VHlwZS5QQVRDSCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVjb3JkSWQgPSBldmVudFNvdXJjaW5nSXRlbS5yZWNvcmRbc2NoZW1hLmlkRmllbGRdO1xuICAgICAgdGhpcy5jaGVja1JlY29yZElkRXhpc3RzKHJlY29yZElkLCBQb0V2ZW50U291cmNpbmdPcGVyYXRpb24uVXBkYXRlKTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRTZXJ2ZXJJdGVtKHVybCwgUG9IdHRwUmVxdWVzdFR5cGUuUFVULCBldmVudFNvdXJjaW5nSXRlbS5yZWNvcmQpO1xuICAgICAgYXdhaXQgdGhpcy5yZW1vdmVFdmVudFNvdXJjaW5nVmFsaWRJdGVtKHJlc3BvbnNlLnN0YXR1cywgZXZlbnRTb3VyY2luZ0l0ZW0pO1xuXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZW5kUmVzcG9uc2VTdWJqZWN0KGV2ZW50U291cmNpbmdJdGVtLCByZXNwb25zZSk7XG4gICAgfSBjYXRjaCAoZXJyb3JIdHRwQ2xpZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5zZW5kUmVzcG9uc2VTdWJqZWN0KGV2ZW50U291cmNpbmdJdGVtLCBlcnJvckh0dHBDbGllbnQsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUGVuZGluZ0V2ZW50U291cmNpbmcoXG4gICAgY3VycmVudEV2ZW50U291cmNpbmdJdGVtOiBQb0V2ZW50U291cmNpbmdJdGVtLFxuICAgIGlkRmllbGRTY2hlbWE6IHN0cmluZyxcbiAgICBpbnNlcnRlZDogb2JqZWN0LFxuICAgIGV2ZW50U291cmNpbmdJdGVtczogQXJyYXk8UG9FdmVudFNvdXJjaW5nSXRlbT5cbiAgKSB7XG4gICAgaWYgKGN1cnJlbnRFdmVudFNvdXJjaW5nSXRlbS5yZWNvcmRbUG9TY2hlbWFVdGlsLnN5bmNJbnRlcm5hbElkRmllbGROYW1lXSkge1xuICAgICAgZXZlbnRTb3VyY2luZ0l0ZW1zLmZvckVhY2goKGV2ZW50U291cmNpbmdJdGVtLCBwb3NpdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBpc0N1cnJlbnRFdmVudFNvdXJjaW5nSXRlbSA9XG4gICAgICAgICAgIWV2ZW50U291cmNpbmdJdGVtLnJlY29yZFtpZEZpZWxkU2NoZW1hXSAmJlxuICAgICAgICAgIGV2ZW50U291cmNpbmdJdGVtLnJlY29yZFtQb1NjaGVtYVV0aWwuc3luY0ludGVybmFsSWRGaWVsZE5hbWVdID09PVxuICAgICAgICAgICAgY3VycmVudEV2ZW50U291cmNpbmdJdGVtLnJlY29yZFtQb1NjaGVtYVV0aWwuc3luY0ludGVybmFsSWRGaWVsZE5hbWVdO1xuXG4gICAgICAgIGlmIChpc0N1cnJlbnRFdmVudFNvdXJjaW5nSXRlbSkge1xuICAgICAgICAgIGV2ZW50U291cmNpbmdJdGVtc1twb3NpdGlvbl0ucmVjb3JkW2lkRmllbGRTY2hlbWFdID0gaW5zZXJ0ZWRbaWRGaWVsZFNjaGVtYV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGhpcy5wb1N0b3JhZ2Uuc2V0KFBvRXZlbnRTb3VyY2luZ1NlcnZpY2UuZXZlbnRfc291cmNpbmdfbmFtZSwgZXZlbnRTb3VyY2luZ0l0ZW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlUmVjb3JkcyhzZXJ2ZXJSZWNvcmRzOiBBcnJheTxhbnk+LCBzY2hlbWE6IFBvU3luY1NjaGVtYSkge1xuICAgIGZvciAoY29uc3Qgc2VydmVyUmVjb3JkIG9mIHNlcnZlclJlY29yZHMpIHtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlUmVjb3JkQnlTZXJ2ZXJSZWNvcmQoc2VydmVyUmVjb3JkLCBzY2hlbWEpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlUmVjb3JkQnlTZXJ2ZXJSZWNvcmQoc2VydmVyUmVjb3JkLCBzY2hlbWEpIHtcbiAgICBjb25zdCByZWNvcmRJZCA9IHNlcnZlclJlY29yZFtzY2hlbWEuaWRGaWVsZF07XG4gICAgY29uc3Qgc3RvcmFnZVJlY29yZCA9IGF3YWl0IHRoaXMucG9TY2hlbWFTZXJ2aWNlLmdldChzY2hlbWEubmFtZSwgcmVjb3JkSWQpO1xuICAgIGNvbnN0IGV4aXN0c1N0b3JhZ2VSZWNvcmQgPSAhIU9iamVjdC5rZXlzKHN0b3JhZ2VSZWNvcmQpLmxlbmd0aDtcblxuICAgIGlmIChleGlzdHNTdG9yYWdlUmVjb3JkICYmIHNlcnZlclJlY29yZFtzY2hlbWEuZGVsZXRlZEZpZWxkXSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucG9TY2hlbWFTZXJ2aWNlLnJlbW92ZShzY2hlbWEubmFtZSwgc2VydmVyUmVjb3JkW3NjaGVtYS5pZEZpZWxkXSk7XG4gICAgfVxuXG4gICAgaWYgKGV4aXN0c1N0b3JhZ2VSZWNvcmQgJiYgIXNlcnZlclJlY29yZFtzY2hlbWEuZGVsZXRlZEZpZWxkXSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucG9TY2hlbWFTZXJ2aWNlLnVwZGF0ZShzY2hlbWEsIHNlcnZlclJlY29yZCk7XG4gICAgfVxuXG4gICAgaWYgKCFleGlzdHNTdG9yYWdlUmVjb3JkICYmICFzZXJ2ZXJSZWNvcmRbc2NoZW1hLmRlbGV0ZWRGaWVsZF0pIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnBvU2NoZW1hU2VydmljZS5jcmVhdGUoc2NoZW1hLCBzZXJ2ZXJSZWNvcmQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlU3RvcmFnZUJ5U2NoZW1hKHNjaGVtYTogUG9TeW5jU2NoZW1hKTogUHJvbWlzZTxhbnk+IHtcbiAgICB0aGlzLmNyZWF0ZVNjaGVtYVN5bmNDb25maWcoc2NoZW1hLm5hbWUpO1xuXG4gICAgdGhpcy5zY2hlbWFzU3luY0NvbmZpZ1tzY2hlbWEubmFtZV1bJ3BhZ2UnXSA9IDE7XG4gICAgY29uc3QgYmFzZVVybCA9IGAke1BvU2NoZW1hVXRpbC5nZXRVcmwoc2NoZW1hLCBQb1JlcXVlc3RUeXBlLkRJRkYpfS8ke3NjaGVtYS5sYXN0U3luY31gO1xuICAgIHRoaXMuc2NoZW1hc1N5bmNDb25maWdbc2NoZW1hLm5hbWVdWydjdXJyZW50VXJsRGlmZiddID0gdGhpcy5idWlsZFVybFBhcmFtcyhcbiAgICAgIHNjaGVtYSxcbiAgICAgIGJhc2VVcmwsXG4gICAgICB0aGlzLnNjaGVtYXNTeW5jQ29uZmlnW3NjaGVtYS5uYW1lXVsncGFnZSddXG4gICAgKTtcblxuICAgIGNvbnN0IHNlcnZlclJlY29yZHMgPSBhd2FpdCB0aGlzLmdldFNlcnZlckRpZmZSZWNvcmRzKHNjaGVtYSwgYmFzZVVybCk7XG5cbiAgICBhd2FpdCB0aGlzLnVwZGF0ZVJlY29yZHMoc2VydmVyUmVjb3Jkcywgc2NoZW1hKTtcblxuICAgIHNjaGVtYS5sYXN0U3luYyA9IHRoaXMuc2NoZW1hc1N5bmNDb25maWdbc2NoZW1hLm5hbWVdWydyZXNwb25zZURhdGUnXTtcbiAgICBhd2FpdCB0aGlzLnBvU2NoZW1hRGVmaW5pdGlvbi51cGRhdGUoc2NoZW1hKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3RvcmFnZVNjaGVtYXMoc2NoZW1hcyk6IEFycmF5PFByb21pc2U8QXJyYXk8YW55Pj4+IHtcbiAgICByZXR1cm4gc2NoZW1hcy5tYXAoKHNjaGVtYTogUG9TeW5jU2NoZW1hKSA9PiB0aGlzLnVwZGF0ZVN0b3JhZ2VCeVNjaGVtYShzY2hlbWEpKTtcbiAgfVxufVxuIl19
@@ -1,11 +0,0 @@
1
- /**
2
- * @docsPrivate
3
- *
4
- * @usedBy PoHttpClientService
5
- *
6
- * @description
7
- *
8
- * Define o cabeçalho da requisição HTTP.
9
- */
10
- export {};
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8taHR0cC1oZWFkZXItb3B0aW9uLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N5bmMvc3JjL2xpYi9zZXJ2aWNlcy9wby1odHRwLWNsaWVudC9pbnRlcmZhY2VzL3BvLWh0dHAtaGVhZGVyLW9wdGlvbi5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBkb2NzUHJpdmF0ZVxuICpcbiAqIEB1c2VkQnkgUG9IdHRwQ2xpZW50U2VydmljZVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIERlZmluZSBvIGNhYmXDp2FsaG8gZGEgcmVxdWlzacOnw6NvIEhUVFAuXG4gKi9cblxuZXhwb3J0IGludGVyZmFjZSBQb0h0dHBIZWFkZXJPcHRpb24ge1xuICAvKiogTm9tZSBkbyBjYWJlw6dhbGhvLiAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqIFZhbG9yIGRvIGNhYmXDp2FsaG8uICovXG4gIHZhbHVlOiBzdHJpbmc7XG59XG4iXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8taHR0cC1yZXF1ZXN0LWRhdGEuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3luYy9zcmMvbGliL3NlcnZpY2VzL3BvLWh0dHAtY2xpZW50L2ludGVyZmFjZXMvcG8taHR0cC1yZXF1ZXN0LWRhdGEuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQb0h0dHBIZWFkZXJPcHRpb24gfSBmcm9tICcuL3BvLWh0dHAtaGVhZGVyLW9wdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9IdHRwUmVxdWVzdFR5cGUgfSBmcm9tICcuLy4uL3BvLWh0dHAtcmVxdWVzdC10eXBlLmVudW0nO1xuXG4vKipcbiAqIEB1c2VkQnkgUG9TeW5jU2VydmljZVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIEludGVyZmFjZSBwYXJhIGRlZmluacOnw6NvIGRlIHVtYSByZXF1aXNpw6fDo28gSFRUUC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb0h0dHBSZXF1ZXN0RGF0YSB7XG4gIC8qKiBVUkwgcXVlIHNlcsOhIHV0aWxpemFkYSBuYSByZXF1aXNpw6fDo28uICovXG4gIHVybDogc3RyaW5nO1xuXG4gIC8qKiBDYWJlw6dhbGhvIGRhIHJlcXVpc2nDp8Ojby4gKi9cbiAgaGVhZGVycz86IEFycmF5PFBvSHR0cEhlYWRlck9wdGlvbj47XG5cbiAgLyoqIE3DqXRvZG8gSFRUUCBxdWUgc2Vyw6EgdXRpbGl6YWRvLiAqL1xuICBtZXRob2Q6IFBvSHR0cFJlcXVlc3RUeXBlO1xuXG4gIC8qKiBDb3JwbyBkYSByZXF1aXNpw6fDo28uICovXG4gIGJvZHk/OiBhbnk7XG5cbiAgLyoqIE5vbWUgZGEgcHJvcHJpZWRhZGUgcXVlIGNvbnRlcsOhIG8gYXJxdWl2byBlbnZpYWRvIHBhcmEgbyBzZXJ2aWRvciAqL1xuICBmb3JtRmllbGQ/OiBzdHJpbmc7XG5cbiAgLy8gVGlwbyBkbyBib2R5XG4gIGJvZHlUeXBlPzogc3RyaW5nO1xuXG4gIC8vIE1pbWVUeXBlIGRhIHJlcXVpc2nDp8OjbyBjYXNvIHNlamEgdW0gYXJxdWl2b1xuICBtaW1lVHlwZT86IHN0cmluZztcblxuICAvLyBOb21lIGRvIGFycXVpdm9cbiAgZmlsZU5hbWU/OiBzdHJpbmc7XG59XG4iXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tcmVzcG9uc2UtYXBpLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N5bmMvc3JjL2xpYi9zZXJ2aWNlcy9wby1odHRwLWNsaWVudC9pbnRlcmZhY2VzL3BvLXJlc3BvbnNlLWFwaS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHVzZWRCeSBQb1F1ZXJ5QnVpbGRlclxuICpcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIEludGVyZmFjZSBxdWUgcmVwcmVzZW50YSBhIGVzdHJ1dHVyYSBkZSByZXNwb3N0YSBkZSB1bWEgY29sZcOnw6NvIGRlIGl0ZW5zLlxuICpcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb1Jlc3BvbnNlQXBpIHtcbiAgLyoqIExpc3RhIGRlIGl0ZW5zIHJldG9ybmFkb3MuICovXG4gIGl0ZW1zOiBBcnJheTxvYmplY3Q+O1xuXG4gIC8qKiBJbmRpY2Egc2UgZXhpc3RlIHVtYSBwcsOzeGltYSBww6FnaW5hIGNvbSBtYWlzIHJlZ2lzdHJvcyBwYXJhIGFxdWVsYSBjb2xlw6fDo28gZGUgaXRlbnMuICovXG4gIGhhc05leHQ6IGJvb2xlYW47XG59XG4iXX0=