@po-ui/ng-sync 5.22.1 → 6.0.0-rc.1

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 (145) hide show
  1. package/README.md +22 -22
  2. package/{esm2015/lib/index.js → esm2020/lib/index.mjs} +15 -15
  3. package/{esm2015/lib/models/index.js → esm2020/lib/models/index.mjs} +6 -6
  4. package/{esm2015/lib/models/po-data-message.model.js → esm2020/lib/models/po-data-message.model.mjs} +57 -57
  5. package/esm2020/lib/models/po-data-transform.model.mjs +22 -0
  6. package/esm2020/lib/models/po-entity/po-entity.model.mjs +214 -0
  7. package/{esm2015/lib/models/po-event-sourcing-error-response.model.js → esm2020/lib/models/po-event-sourcing-error-response.model.mjs} +17 -17
  8. package/{esm2015/lib/models/po-network-status.model.js → esm2020/lib/models/po-network-status.model.mjs} +44 -44
  9. package/{esm2015/lib/models/po-network-type.enum.js → esm2020/lib/models/po-network-type.enum.mjs} +30 -30
  10. package/esm2020/lib/models/po-query-builder/po-query-builder.model.mjs +238 -0
  11. package/{esm2015/lib/models/po-request-type.enum.js → esm2020/lib/models/po-request-type.enum.mjs} +16 -16
  12. package/esm2020/lib/po-sync.module.mjs +45 -0
  13. package/{esm2015/lib/services/po-event-sourcing/enums/po-event-sourcing-operation.enum.js → esm2020/lib/services/po-event-sourcing/enums/po-event-sourcing-operation.enum.mjs} +17 -17
  14. package/{esm2015/lib/services/po-event-sourcing/index.js → esm2020/lib/services/po-event-sourcing/index.mjs} +4 -4
  15. package/esm2020/lib/services/po-event-sourcing/interfaces/po-event-sourcing-item.interface.mjs +2 -0
  16. package/esm2020/lib/services/po-event-sourcing/interfaces/po-event-sourcing-summary-item.interface.mjs +2 -0
  17. package/esm2020/lib/services/po-event-sourcing/po-event-sourcing.service.mjs +372 -0
  18. package/{esm2015/lib/services/po-http-client/interfaces/po-http-header-option.interface.js → esm2020/lib/services/po-http-client/interfaces/po-http-header-option.interface.mjs} +11 -11
  19. package/esm2020/lib/services/po-http-client/interfaces/po-http-request-data.interface.mjs +2 -0
  20. package/esm2020/lib/services/po-http-client/interfaces/po-response-api.interface.mjs +2 -0
  21. package/esm2020/lib/services/po-http-client/po-http-client.service.mjs +148 -0
  22. package/{esm2015/lib/services/po-http-client/po-http-request-type.enum.js → esm2020/lib/services/po-http-client/po-http-request-type.enum.mjs} +25 -25
  23. package/esm2020/lib/services/po-network/po-network.service.mjs +58 -0
  24. package/{esm2015/lib/services/po-schema/index.js → esm2020/lib/services/po-schema/index.mjs} +4 -4
  25. package/esm2020/lib/services/po-schema/po-schema-definition/po-schema-definition.service.mjs +77 -0
  26. package/{esm2015/lib/services/po-schema/po-schema-util/po-schema-util.model.js → esm2020/lib/services/po-schema/po-schema-util/po-schema-util.model.mjs} +124 -124
  27. package/esm2020/lib/services/po-schema/po-schema.service.mjs +174 -0
  28. package/esm2020/lib/services/po-sync/interfaces/po-sync-config.interface.mjs +2 -0
  29. package/esm2020/lib/services/po-sync/interfaces/po-sync-field-options.interface.mjs +2 -0
  30. package/esm2020/lib/services/po-sync/interfaces/po-sync-response.interface.mjs +2 -0
  31. package/esm2020/lib/services/po-sync/interfaces/po-sync-schema.interface.mjs +2 -0
  32. package/esm2020/lib/services/po-sync/po-sync.service.mjs +325 -0
  33. package/{esm2015/lib/utils/utils.js → esm2020/lib/utils/utils.mjs} +63 -63
  34. package/esm2020/po-ui-ng-sync.mjs +5 -0
  35. package/{esm2015/public-api.js → esm2020/public-api.mjs} +2 -2
  36. package/fesm2015/{po-ui-ng-sync.js → po-ui-ng-sync.mjs} +2075 -2059
  37. package/fesm2015/po-ui-ng-sync.mjs.map +1 -0
  38. package/fesm2020/po-ui-ng-sync.mjs +2018 -0
  39. package/fesm2020/po-ui-ng-sync.mjs.map +1 -0
  40. package/lib/index.d.ts +14 -14
  41. package/lib/models/index.d.ts +5 -5
  42. package/lib/models/po-data-message.model.d.ts +46 -46
  43. package/lib/models/po-data-transform.model.d.ts +52 -52
  44. package/lib/models/po-entity/po-entity.model.d.ts +122 -122
  45. package/lib/models/po-event-sourcing-error-response.model.d.ts +20 -20
  46. package/lib/models/po-network-status.model.d.ts +25 -25
  47. package/lib/models/po-network-type.enum.d.ts +28 -28
  48. package/lib/models/po-query-builder/po-query-builder.model.d.ts +126 -126
  49. package/lib/models/po-request-type.enum.d.ts +14 -14
  50. package/lib/po-sync.module.d.ts +12 -7
  51. package/lib/services/po-event-sourcing/enums/po-event-sourcing-operation.enum.d.ts +11 -11
  52. package/lib/services/po-event-sourcing/index.d.ts +3 -3
  53. package/lib/services/po-event-sourcing/interfaces/po-event-sourcing-item.interface.d.ts +26 -26
  54. package/lib/services/po-event-sourcing/interfaces/po-event-sourcing-summary-item.interface.d.ts +16 -16
  55. package/lib/services/po-event-sourcing/po-event-sourcing.service.d.ts +74 -71
  56. package/lib/services/po-http-client/interfaces/po-http-header-option.interface.d.ts +15 -15
  57. package/lib/services/po-http-client/interfaces/po-http-request-data.interface.d.ts +24 -24
  58. package/lib/services/po-http-client/interfaces/po-response-api.interface.d.ts +14 -14
  59. package/lib/services/po-http-client/po-http-client.service.d.ts +78 -75
  60. package/lib/services/po-http-client/po-http-request-type.enum.d.ts +23 -23
  61. package/lib/services/po-network/po-network.service.d.ts +36 -33
  62. package/lib/services/po-schema/index.d.ts +3 -3
  63. package/lib/services/po-schema/po-schema-definition/po-schema-definition.service.d.ts +51 -48
  64. package/lib/services/po-schema/po-schema-util/po-schema-util.model.d.ts +79 -79
  65. package/lib/services/po-schema/po-schema.service.d.ts +98 -95
  66. package/lib/services/po-sync/interfaces/po-sync-config.interface.d.ts +24 -24
  67. package/lib/services/po-sync/interfaces/po-sync-field-options.interface.d.ts +15 -15
  68. package/lib/services/po-sync/interfaces/po-sync-response.interface.d.ts +20 -20
  69. package/lib/services/po-sync/interfaces/po-sync-schema.interface.d.ts +37 -37
  70. package/lib/services/po-sync/po-sync.service.d.ts +162 -159
  71. package/lib/utils/utils.d.ts +36 -36
  72. package/package.json +26 -14
  73. package/po-ui-ng-sync-6.0.0-rc.1.tgz +0 -0
  74. package/po-ui-ng-sync.d.ts +5 -8
  75. package/public-api.d.ts +1 -1
  76. package/schematics/README.md +169 -169
  77. package/schematics/collection.json +15 -15
  78. package/schematics/migrations.json +30 -25
  79. package/schematics/ng-add/index.d.ts +7 -7
  80. package/schematics/ng-add/index.js +33 -33
  81. package/schematics/ng-add/index.js.map +1 -1
  82. package/schematics/ng-add/index.spec.d.ts +1 -1
  83. package/schematics/ng-add/index.spec.js +62 -62
  84. package/schematics/ng-add/index.spec.js.map +1 -1
  85. package/schematics/ng-add/schema.json +7 -7
  86. package/schematics/ng-generate/schema/files/__path__/__name@dasherize__/__name@dasherize__.constants.ts.template +13 -13
  87. package/schematics/ng-generate/schema/index.d.ts +4 -4
  88. package/schematics/ng-generate/schema/index.js +12 -12
  89. package/schematics/ng-generate/schema/index.js.map +1 -1
  90. package/schematics/ng-generate/schema/index.spec.d.ts +1 -1
  91. package/schematics/ng-generate/schema/index.spec.js +44 -44
  92. package/schematics/ng-generate/schema/index.spec.js.map +1 -1
  93. package/schematics/ng-generate/schema/schema.d.ts +3 -3
  94. package/schematics/ng-generate/schema/schema.js +2 -2
  95. package/schematics/ng-generate/schema/schema.json +31 -31
  96. package/schematics/ng-update/v2/changes.d.ts +8 -8
  97. package/schematics/ng-update/v2/changes.js +20 -20
  98. package/schematics/ng-update/v2/index.d.ts +5 -5
  99. package/schematics/ng-update/v2/index.js +101 -101
  100. package/schematics/ng-update/v2/index.js.map +1 -1
  101. package/schematics/ng-update/v3/changes.d.ts +2 -2
  102. package/schematics/ng-update/v3/changes.js +14 -14
  103. package/schematics/ng-update/v3/index.d.ts +1 -1
  104. package/schematics/ng-update/v3/index.js +16 -16
  105. package/schematics/ng-update/v3/index.js.map +1 -1
  106. package/schematics/ng-update/v4/changes.d.ts +2 -2
  107. package/schematics/ng-update/v4/changes.js +14 -14
  108. package/schematics/ng-update/v4/index.d.ts +1 -1
  109. package/schematics/ng-update/v4/index.js +15 -15
  110. package/schematics/ng-update/v4/index.js.map +1 -1
  111. package/schematics/ng-update/v5/changes.d.ts +2 -2
  112. package/schematics/ng-update/v5/changes.js +13 -13
  113. package/schematics/ng-update/v5/index.d.ts +1 -1
  114. package/schematics/ng-update/v5/index.js +15 -15
  115. package/schematics/ng-update/v5/index.js.map +1 -1
  116. package/schematics/ng-update/v6/changes.d.ts +2 -0
  117. package/schematics/ng-update/v6/changes.js +14 -0
  118. package/schematics/ng-update/v6/changes.js.map +1 -0
  119. package/schematics/ng-update/v6/index.d.ts +1 -0
  120. package/schematics/ng-update/v6/index.js +16 -0
  121. package/schematics/ng-update/v6/index.js.map +1 -0
  122. package/bundles/po-ui-ng-sync.umd.js +0 -3002
  123. package/bundles/po-ui-ng-sync.umd.js.map +0 -1
  124. package/esm2015/lib/models/po-data-transform.model.js +0 -22
  125. package/esm2015/lib/models/po-entity/po-entity.model.js +0 -229
  126. package/esm2015/lib/models/po-query-builder/po-query-builder.model.js +0 -241
  127. package/esm2015/lib/po-sync.module.js +0 -31
  128. package/esm2015/lib/services/po-event-sourcing/interfaces/po-event-sourcing-item.interface.js +0 -2
  129. package/esm2015/lib/services/po-event-sourcing/interfaces/po-event-sourcing-summary-item.interface.js +0 -2
  130. package/esm2015/lib/services/po-event-sourcing/po-event-sourcing.service.js +0 -411
  131. package/esm2015/lib/services/po-http-client/interfaces/po-http-request-data.interface.js +0 -2
  132. package/esm2015/lib/services/po-http-client/interfaces/po-response-api.interface.js +0 -2
  133. package/esm2015/lib/services/po-http-client/po-http-client.service.js +0 -147
  134. package/esm2015/lib/services/po-network/po-network.service.js +0 -58
  135. package/esm2015/lib/services/po-schema/po-schema-definition/po-schema-definition.service.js +0 -80
  136. package/esm2015/lib/services/po-schema/po-schema.service.js +0 -198
  137. package/esm2015/lib/services/po-sync/interfaces/po-sync-config.interface.js +0 -2
  138. package/esm2015/lib/services/po-sync/interfaces/po-sync-field-options.interface.js +0 -2
  139. package/esm2015/lib/services/po-sync/interfaces/po-sync-response.interface.js +0 -2
  140. package/esm2015/lib/services/po-sync/interfaces/po-sync-schema.interface.js +0 -2
  141. package/esm2015/lib/services/po-sync/po-sync.service.js +0 -336
  142. package/esm2015/po-ui-ng-sync.js +0 -9
  143. package/fesm2015/po-ui-ng-sync.js.map +0 -1
  144. package/po-ui-ng-sync-5.22.1.tgz +0 -0
  145. package/po-ui-ng-sync.metadata.json +0 -1
@@ -0,0 +1,325 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { forkJoin, Observable, of, Subject, timer } from 'rxjs';
3
+ import { expand, map, mergeMap, reduce } from 'rxjs/operators';
4
+ import { validateParameter, validateArray } from '../../utils/utils';
5
+ import { PoDataMessage, PoEntity } from '../../models';
6
+ import { PoRequestType } from '../../models/po-request-type.enum';
7
+ import { PoSchemaUtil } from './../po-schema/po-schema-util/po-schema-util.model';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "../po-event-sourcing/po-event-sourcing.service";
10
+ import * as i2 from "../po-http-client/po-http-client.service";
11
+ import * as i3 from "../po-network/po-network.service";
12
+ import * as i4 from "./../po-schema/po-schema-definition/po-schema-definition.service";
13
+ import * as i5 from "./../po-schema/po-schema.service";
14
+ /**
15
+ * @description
16
+ *
17
+ * O `PoSyncService` é utilizado para configurar toda a base de dados que receberá as informações que serão
18
+ * armazenadas *offline* vindas do servidor. Nele ocorre toda a preparação dos modelos de dados retornados por
19
+ * cada consulta.
20
+ */
21
+ export class PoSyncService {
22
+ constructor(poEventSourcingService, poHttpClient, poNetworkService, poSchemaDefinitionService, poSchemaService) {
23
+ this.poEventSourcingService = poEventSourcingService;
24
+ this.poHttpClient = poHttpClient;
25
+ this.poNetworkService = poNetworkService;
26
+ this.poSchemaDefinitionService = poSchemaDefinitionService;
27
+ this.poSchemaService = poSchemaService;
28
+ this.models = [];
29
+ this.finishSyncSubject = new Subject();
30
+ this.isSyncEnabled = true;
31
+ this.syncing = false;
32
+ }
33
+ /**
34
+ * Destrói todas as chaves do *storage* referentes ao `po-sync`, ou seja,
35
+ * as definições dos *schemas*, os registros de cada *schema* e a fila
36
+ * de eventos que estão para ser enviados ao servidor *(EventSourcing)*.
37
+ *
38
+ * > Para que não venham ocorrer erros em ações que dependam das definições dos *schemas*,
39
+ * recomenda-se utilizar o método `prepare()` em seguida.
40
+ *
41
+ * > Veja mais detalhes em [Fundamentos do PO Sync - Alterando as definições dos schemas](/guides/sync-fundamentals).
42
+ *
43
+ * @returns {Promise<any>} Promessa que é resolvida quando as chaves referentes ao `po-sync` forem destruídas.
44
+ */
45
+ async destroy() {
46
+ const destroyFunction = async () => {
47
+ await this.poSchemaService.destroySchemasRecords();
48
+ await this.poSchemaDefinitionService.destroy();
49
+ await this.poEventSourcingService.destroyEventSourcingQueue();
50
+ };
51
+ return this.poSchemaService.limitedCallWrap(destroyFunction);
52
+ }
53
+ /**
54
+ * Desabilita todos os tipos de sincronização de dados (periódica, reativa e manual).
55
+ *
56
+ * > Para habilitar novamente a sincronização utilize o método [`PoSyncService.enableSync()`](documentation/po-sync#enable-sync).
57
+ */
58
+ disableSync() {
59
+ this.isSyncEnabled = false;
60
+ if (this.timer && this.subscription) {
61
+ this.subscription.unsubscribe();
62
+ }
63
+ }
64
+ /**
65
+ * <a id="enable-sync"></a>
66
+ * Habilita todos os tipos de sincronização de dados (periódica, reativa e manual).
67
+ *
68
+ * Por padrão, sempre que se inicializa uma aplicação com PO Sync as sincronizações já estão habilitadas.
69
+ */
70
+ enableSync() {
71
+ this.isSyncEnabled = true;
72
+ this.createSubscribe();
73
+ }
74
+ /**
75
+ * Método que disponibiliza a partir de sua inscrição o evento de retorno das operações da fila de eventos que
76
+ * foram enviadas ao servidor. A cada operação enviada para o servidor, será disparado um evento para a inscrição
77
+ * deste método.
78
+ *
79
+ * > Veja mais detalhes em [Fundamentos do PO Sync - Capturando respostas da sincronização](/guides/sync-fundamentals).
80
+ *
81
+ * @returns {Observable<PoSyncResponse>} Observable com um objeto do tipo `PoSyncResponse`.
82
+ */
83
+ getResponses() {
84
+ return this.poEventSourcingService.responsesSubject();
85
+ }
86
+ /**
87
+ * Retorna uma instância de `PoEntity` para um determinado *schema*.
88
+ *
89
+ * > Veja mais detalhes em [Fundamentos do PO Sync - Manipulando os registros de um schema](/guides/sync-fundamentals).
90
+ *
91
+ * @param {string} schemaName Nome do *schema*.
92
+ * @returns {PoEntity} Objeto para efetuar consultas e alterações nos dados.
93
+ */
94
+ getModel(schemaName) {
95
+ const model = this.models[schemaName];
96
+ if (!model) {
97
+ throw new Error('Model not found: ' + schemaName);
98
+ }
99
+ return model;
100
+ }
101
+ /**
102
+ * Insere uma requisição HTTP na fila de eventos do `po-sync`.
103
+ *
104
+ * > Veja mais detalhes em [Fundamentos do PO Sync - Inserindo requisições HTTP na fila de eventos](/guides/sync-fundamentals).
105
+ *
106
+ * @param {PoHttpRequestData} poHttpRequestData Dados da requisição HTTP.
107
+ * @param {string} customRequestId Identificador customizado da requisição HTTP.
108
+ * @returns {Promise<number>} Promessa com o identificador da requisição HTTP criada.
109
+ */
110
+ insertHttpCommand(requestData, customRequestId) {
111
+ validateParameter({ requestData });
112
+ return this.poEventSourcingService.httpCommand(requestData, customRequestId);
113
+ }
114
+ /**
115
+ * Efetua uma chamada na API do servidor para realizar a carga inicial dos dados. Deve ser chamado apenas uma vez
116
+ * na aplicação, após a preparação dos *schemas* realizada através do método `PoSyncService.prepare()`.
117
+ *
118
+ * > Veja mais detalhes em [Fundamentos do PO Sync - Carga inicial dos dados](/guides/sync-fundamentals).
119
+ *
120
+ * @returns {Observable<Array<{ entity: string, data: Array<any> }>>} Observable que notificará quando a
121
+ * carga inicial for concluída.
122
+ */
123
+ loadData() {
124
+ const loads = [];
125
+ this.schemas.forEach(el => loads.push(this.loadEntityData(el)));
126
+ return forkJoin(loads);
127
+ }
128
+ /**
129
+ * Responsável por notificar sempre que houver sincronismo.
130
+ *
131
+ * > Veja mais detalhes em [Fundamentos do PO Sync - Notificação pós-sincronização](/guides/sync-fundamentals).
132
+ *
133
+ * @returns {Observable<any>} Observable que é disparado a cada sincronismo realizado.
134
+ */
135
+ onSync() {
136
+ if (!this.eventSub) {
137
+ this.eventSub = Observable.create(e => {
138
+ this.emitter = e;
139
+ });
140
+ }
141
+ return this.eventSub;
142
+ }
143
+ /**
144
+ * Prepara a aplicação criando os schemas e aplica as configurações.
145
+ *
146
+ * > Veja mais detalhes em [Fundamentos do PO Sync - Preparando a aplicação](/guides/sync-fundamentals).
147
+ *
148
+ * @param {Array<PoSyncSchema>} schemas Lista de *schemas* a serem preparados.
149
+ * @param {PoSyncConfig} config Configurações adicionais.
150
+ * @returns {Promise<any>} Promessa que é resolvida quando a aplicação estiver preparada para a utilização do `po-sync`.
151
+ */
152
+ prepare(schemas, config) {
153
+ validateArray({ schemas });
154
+ const defaultSyncConfig = {
155
+ type: this.poNetworkService.getConnectionStatus().type,
156
+ period: 60,
157
+ dataTransform: new PoDataMessage()
158
+ };
159
+ this.schemas = schemas;
160
+ this.config = config || defaultSyncConfig;
161
+ this.config.dataTransform = this.config.dataTransform || new PoDataMessage();
162
+ this.poEventSourcingService.config = this.config;
163
+ this.startTimer(this.config.period);
164
+ this.reactiveSync();
165
+ this.poEventSourcingService.onSaveData().subscribe(() => this.sync());
166
+ return this.saveSchemas().then(() => {
167
+ this.schemas.forEach(schema => {
168
+ this.models[schema.name] = new PoEntity(this.poEventSourcingService, schema, this.poSchemaService);
169
+ });
170
+ return Promise.resolve();
171
+ });
172
+ }
173
+ /**
174
+ * Remove um item da fila de eventos que espera a sincronização.
175
+ *
176
+ * > Veja mais detalhes em [Fundamentos do PO Sync - Capturando respostas da sincronização](/guides/sync-fundamentals).
177
+ *
178
+ * @param {any} idEventSourcing Identificador do item da fila de eventos.
179
+ * @returns {Promise<any>} Promessa que é resolvida quando o item da fila de eventos é removido.
180
+ */
181
+ removeItemOfSync(idEventSourcing) {
182
+ return this.poEventSourcingService.removeEventSourcingItem(idEventSourcing);
183
+ }
184
+ /**
185
+ * Reenvia os comandos pendentes na fila (inclusão, alteração e exclusão) e busca novos dados do servidor.
186
+ *
187
+ * > Veja mais detalhes em [Fundamentos do PO Sync - Capturando respostas da sincronização](/guides/sync-fundamentals).
188
+ *
189
+ * @returns {Promise<any>} Promessa que resolve o sincronismo disparado.
190
+ */
191
+ resumeSync() {
192
+ if (!this.canSync()) {
193
+ const finishSyncSubscription = this.finishSyncSubject.asObservable().subscribe(() => {
194
+ finishSyncSubscription.unsubscribe();
195
+ return this.sync();
196
+ });
197
+ return Promise.resolve();
198
+ }
199
+ return this.sync();
200
+ }
201
+ /**
202
+ * Dispara o sincronismo enviando os eventos pendentes (inclusão, alteração e exclusão) e buscando novos dados do servidor.
203
+ *
204
+ * O sincronismo somente será executado depois que o acesso a base de dados local do dispositivo for liberada.
205
+ *
206
+ * > Veja mais detalhes em [Fundamentos do PO Sync - Sincronização manual](/guides/sync-fundamentals).
207
+ *
208
+ * @returns {Promise<any>} Promessa que é resolvida quando o sincronismo for finalizado.
209
+ */
210
+ async sync() {
211
+ if (this.canSync()) {
212
+ this.startSync();
213
+ try {
214
+ await this.poEventSourcingService.syncSend();
215
+ await this.poEventSourcingService.syncGet();
216
+ if (this.emitter) {
217
+ this.emitter.next();
218
+ }
219
+ this.finishSync();
220
+ }
221
+ catch (error) {
222
+ this.syncError();
223
+ }
224
+ }
225
+ }
226
+ canSync() {
227
+ if (this.syncing || !this.isSyncEnabled) {
228
+ return false;
229
+ }
230
+ else {
231
+ const currentConnection = this.poNetworkService.getConnectionStatus();
232
+ const isConfiguredConnection = this.config && currentConnection.type === this.config.type;
233
+ const isConfigIncludesType = this.config && this.config.type instanceof Array && this.config.type.includes(currentConnection.type);
234
+ return currentConnection.status && (!this.config || isConfiguredConnection || isConfigIncludesType);
235
+ }
236
+ }
237
+ createSubscribe() {
238
+ if (this.timer) {
239
+ this.subscription = this.timer.subscribe(() => {
240
+ this.sync().then(() => {
241
+ this.subscription.unsubscribe();
242
+ this.subscription = null;
243
+ this.timer = null;
244
+ this.startTimer(this.config.period);
245
+ });
246
+ });
247
+ }
248
+ }
249
+ finishSync() {
250
+ this.syncing = false;
251
+ this.finishSyncSubject.next(null);
252
+ }
253
+ getOnePage(schema, page = 1) {
254
+ const params = [];
255
+ params.push(`${this.config.dataTransform.getPageSizeParamName()}=${schema.pageSize}`);
256
+ params.push(`${this.config.dataTransform.getPageParamName()}=${page}`);
257
+ const url = `${PoSchemaUtil.getUrl(schema, PoRequestType.GET)}?${params.join('&')}`;
258
+ return this.poHttpClient.get(url).pipe(map(response => response.body), mergeMap(responseBody => {
259
+ const now = new Date().getTime();
260
+ responseBody[this.config.dataTransform.getItemsFieldName()].map(item => {
261
+ item.SyncInsertedDateTime = now;
262
+ item.SyncUpdatedDateTime = null;
263
+ item.SyncExclusionDateTime = null;
264
+ item.SyncDeleted = false;
265
+ item.SyncStatus = 2;
266
+ });
267
+ return this.poSchemaService
268
+ .updateAll(schema, responseBody[this.config.dataTransform.getItemsFieldName()])
269
+ .then(() => responseBody);
270
+ }));
271
+ }
272
+ loadEntityData(schema) {
273
+ let page = 1;
274
+ return this.getOnePage(schema, page).pipe(expand(data => {
275
+ this.config.dataTransform.transform(data);
276
+ const hasNext = this.config.dataTransform.hasNext();
277
+ if (hasNext) {
278
+ return this.getOnePage(schema, ++page);
279
+ }
280
+ else {
281
+ return of();
282
+ }
283
+ }), reduce((acc, obj) => {
284
+ acc.data = acc.data.concat(obj[this.config.dataTransform.getItemsFieldName()]);
285
+ return acc;
286
+ }, {
287
+ entity: schema.name,
288
+ data: []
289
+ }));
290
+ }
291
+ reactiveSync() {
292
+ this.poNetworkService.onChange().subscribe(networkStatus => {
293
+ if (networkStatus.status) {
294
+ this.startTimer(this.config.period);
295
+ return this.sync();
296
+ }
297
+ if (this.subscription) {
298
+ this.subscription.unsubscribe();
299
+ }
300
+ });
301
+ }
302
+ async saveSchemas() {
303
+ const storageSchemas = await this.poSchemaDefinitionService.getAll();
304
+ this.schemas.forEach(schema => (schema.lastSync = PoSchemaUtil.getLastSync(storageSchemas, schema.name)));
305
+ return this.poSchemaDefinitionService.saveAll(this.schemas);
306
+ }
307
+ startSync() {
308
+ this.syncing = true;
309
+ }
310
+ startTimer(period) {
311
+ if (period && this.isSyncEnabled) {
312
+ this.timer = timer(period * 1000);
313
+ this.createSubscribe();
314
+ }
315
+ }
316
+ syncError() {
317
+ this.finishSync();
318
+ }
319
+ }
320
+ PoSyncService.ɵfac = function PoSyncService_Factory(t) { return new (t || PoSyncService)(i0.ɵɵinject(i1.PoEventSourcingService), i0.ɵɵinject(i2.PoHttpClientService), i0.ɵɵinject(i3.PoNetworkService), i0.ɵɵinject(i4.PoSchemaDefinitionService), i0.ɵɵinject(i5.PoSchemaService)); };
321
+ PoSyncService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: PoSyncService, factory: PoSyncService.ɵfac });
322
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoSyncService, [{
323
+ type: Injectable
324
+ }], function () { return [{ type: i1.PoEventSourcingService }, { type: i2.PoHttpClientService }, { type: i3.PoNetworkService }, { type: i4.PoSchemaDefinitionService }, { type: i5.PoSchemaService }]; }, null); })();
325
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tc3luYy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3luYy9zcmMvbGliL3NlcnZpY2VzL3BvLXN5bmMvcG8tc3luYy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFLdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBR2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7Ozs7OztBQUtsRjs7Ozs7O0dBTUc7QUFFSCxNQUFNLE9BQU8sYUFBYTtJQWF4QixZQUNVLHNCQUE4QyxFQUM5QyxZQUFpQyxFQUNqQyxnQkFBa0MsRUFDbEMseUJBQW9ELEVBQ3BELGVBQWdDO1FBSmhDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDOUMsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2pDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsOEJBQXlCLEdBQXpCLHlCQUF5QixDQUEyQjtRQUNwRCxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFqQjFDLFdBQU0sR0FBb0IsRUFBRSxDQUFDO1FBS3JCLHNCQUFpQixHQUFrQixJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ3ZELGtCQUFhLEdB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TSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNwQyxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUNwQjtZQUVELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUNqQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLEtBQUssQ0FBQyxXQUFXO1FBQ3ZCLE1BQU0sY0FBYyxHQUF3QixNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxRixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFHLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVPLFNBQVM7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztJQUN0QixDQUFDO0lBRU8sVUFBVSxDQUFDLE1BQU07UUFDdkIsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVPLFNBQVM7UUFDZixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQzs7MEVBNVZVLGFBQWE7bUVBQWIsYUFBYSxXQUFiLGFBQWE7dUZBQWIsYUFBYTtjQUR6QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRpbWVyIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGV4cGFuZCwgbWFwLCBtZXJnZU1hcCwgcmVkdWNlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyB2YWxpZGF0ZVBhcmFtZXRlciwgdmFsaWRhdGVBcnJheSB9IGZyb20gJy4uLy4uL3V0aWxzL3V0aWxzJztcclxuXHJcbmltcG9ydCB7IFBvRGF0YU1lc3NhZ2UsIFBvRW50aXR5IH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgUG9FdmVudFNvdXJjaW5nU2VydmljZSB9IGZyb20gJy4uL3BvLWV2ZW50LXNvdXJjaW5nL3BvLWV2ZW50LXNvdXJjaW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQb0h0dHBDbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi4vcG8taHR0cC1jbGllbnQvcG8taHR0cC1jbGllbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFBvSHR0cFJlcXVlc3REYXRhIH0gZnJvbSAnLi4vcG8taHR0cC1jbGllbnQvaW50ZXJmYWNlcy9wby1odHRwLXJlcXVlc3QtZGF0YS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBQb05ldHdvcmtTZXJ2aWNlIH0gZnJvbSAnLi4vcG8tbmV0d29yay9wby1uZXR3b3JrLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQb1JlcXVlc3RUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3BvLXJlcXVlc3QtdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgUG9TY2hlbWFEZWZpbml0aW9uU2VydmljZSB9IGZyb20gJy4vLi4vcG8tc2NoZW1hL3BvLXNjaGVtYS1kZWZpbml0aW9uL3BvLXNjaGVtYS1kZWZpbml0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQb1NjaGVtYVNlcnZpY2UgfSBmcm9tICcuLy4uL3BvLXNjaGVtYS9wby1zY2hlbWEuc2VydmljZSc7XHJcbmltcG9ydCB7IFBvU2NoZW1hVXRpbCB9IGZyb20gJy4vLi4vcG8tc2NoZW1hL3BvLXNjaGVtYS11dGlsL3BvLXNjaGVtYS11dGlsLm1vZGVsJztcclxuaW1wb3J0IHsgUG9TeW5jQ29uZmlnIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXN5bmMtY29uZmlnLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFBvU3luY1Jlc3BvbnNlIH0gZnJvbSAnLi4vcG8tc3luYy9pbnRlcmZhY2VzL3BvLXN5bmMtcmVzcG9uc2UuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUG9TeW5jU2NoZW1hIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXN5bmMtc2NoZW1hLmludGVyZmFjZSc7XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqXHJcbiAqIE8gYFBvU3luY1NlcnZpY2VgIMOpIHV0aWxpemFkbyBwYXJhIGNvbmZpZ3VyYXIgdG9kYSBhIGJhc2UgZGUgZGFkb3MgcXVlIHJlY2ViZXLDoSBhcyBpbmZvcm1hw6fDtWVzIHF1ZSBzZXLDo29cclxuICogYXJtYXplbmFkYXMgKm9mZmxpbmUqIHZpbmRhcyBkbyBzZXJ2aWRvci4gTmVsZSBvY29ycmUgdG9kYSBhIHByZXBhcmHDp8OjbyBkb3MgbW9kZWxvcyBkZSBkYWRvcyByZXRvcm5hZG9zIHBvclxyXG4gKiBjYWRhIGNvbnN1bHRhLlxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgUG9TeW5jU2VydmljZSB7XHJcbiAgbW9kZWxzOiBBcnJheTxQb0VudGl0eT4gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBjb25maWc6IFBvU3luY0NvbmZpZztcclxuICBwcml2YXRlIGVtaXR0ZXI6IGFueTtcclxuICBwcml2YXRlIGV2ZW50U3ViOiBPYnNlcnZhYmxlPGFueT47XHJcbiAgcHJpdmF0ZSBmaW5pc2hTeW5jU3ViamVjdDogU3ViamVjdDxudWxsPiA9IG5ldyBTdWJqZWN0PG51bGw+KCk7XHJcbiAgcHJpdmF0ZSBpc1N5bmNFbmFibGVkOiBib29sZWFuID0gdHJ1ZTtcclxuICBwcml2YXRlIHNjaGVtYXM6IEFycmF5PFBvU3luY1NjaGVtYT47XHJcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIHN5bmNpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHRpbWVyOiBPYnNlcnZhYmxlPG51bWJlcj47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBwb0V2ZW50U291cmNpbmdTZXJ2aWNlOiBQb0V2ZW50U291cmNpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwb0h0dHBDbGllbnQ6IFBvSHR0cENsaWVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHBvTmV0d29ya1NlcnZpY2U6IFBvTmV0d29ya1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHBvU2NoZW1hRGVmaW5pdGlvblNlcnZpY2U6IFBvU2NoZW1hRGVmaW5pdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHBvU2NoZW1hU2VydmljZTogUG9TY2hlbWFTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBEZXN0csOzaSB0b2RhcyBhcyBjaGF2ZXMgZG8gKnN0b3JhZ2UqIHJlZmVyZW50ZXMgYW8gYHBvLXN5bmNgLCBvdSBzZWphLFxyXG4gICAqIGFzIGRlZmluacOnw7VlcyBkb3MgKnNjaGVtYXMqLCBvcyByZWdpc3Ryb3MgZGUgY2FkYSAqc2NoZW1hKiBlIGEgZmlsYVxyXG4gICAqIGRlIGV2ZW50b3MgcXVlIGVzdMOjbyBwYXJhIHNlciBlbnZpYWRvcyBhbyBzZXJ2aWRvciAqKEV2ZW50U291cmNpbmcpKi5cclxuICAgKlxyXG4gICAqID4gUGFyYSBxdWUgbsOjbyB2ZW5oYW0gb2NvcnJlciBlcnJvcyBlbSBhw6fDtWVzIHF1ZSBkZXBlbmRhbSBkYXMgZGVmaW5pw6fDtWVzIGRvcyAqc2NoZW1hcyosXHJcbiAgICogcmVjb21lbmRhLXNlIHV0aWxpemFyIG8gbcOpdG9kbyBgcHJlcGFyZSgpYCBlbSBzZWd1aWRhLlxyXG4gICAqXHJcbiAgICogPiBWZWphIG1haXMgZGV0YWxoZXMgZW0gW0Z1bmRhbWVudG9zIGRvIFBPIFN5bmMgLSBBbHRlcmFuZG8gYXMgZGVmaW5pw6fDtWVzIGRvcyBzY2hlbWFzXSgvZ3VpZGVzL3N5bmMtZnVuZGFtZW50YWxzKS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59IFByb21lc3NhIHF1ZSDDqSByZXNvbHZpZGEgcXVhbmRvIGFzIGNoYXZlcyByZWZlcmVudGVzIGFvIGBwby1zeW5jYCBmb3JlbSBkZXN0cnXDrWRhcy5cclxuICAgKi9cclxuICBhc3luYyBkZXN0cm95KCk6IFByb21pc2U8YW55PiB7XHJcbiAgICBjb25zdCBkZXN0cm95RnVuY3Rpb24gPSBhc3luYyAoKSA9PiB7XHJcbiAgICAgIGF3YWl0IHRoaXMucG9TY2hlbWFTZXJ2aWNlLmRlc3Ryb3lTY2hlbWFzUmVjb3JkcygpO1xyXG4gICAgICBhd2FpdCB0aGlzLnBvU2NoZW1hRGVmaW5pdGlvblNlcnZpY2UuZGVzdHJveSgpO1xyXG4gICAgICBhd2FpdCB0aGlzLnBvRXZlbnRTb3VyY2luZ1NlcnZpY2UuZGVzdHJveUV2ZW50U291cmNpbmdRdWV1ZSgpO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5wb1NjaGVtYVNlcnZpY2UubGltaXRlZENhbGxXcmFwKGRlc3Ryb3lGdW5jdGlvbik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZXNhYmlsaXRhIHRvZG9zIG9zIHRpcG9zIGRlIHNpbmNyb25pemHDp8OjbyBkZSBkYWRvcyAocGVyacOzZGljYSwgcmVhdGl2YSBlIG1hbnVhbCkuXHJcbiAgICpcclxuICAgKiA+IFBhcmEgaGFiaWxpdGFyIG5vdmFtZW50ZSBhIHNpbmNyb25pemHDp8OjbyB1dGlsaXplIG8gbcOpdG9kbyBbYFBvU3luY1NlcnZpY2UuZW5hYmxlU3luYygpYF0oZG9jdW1lbnRhdGlvbi9wby1zeW5jI2VuYWJsZS1zeW5jKS5cclxuICAgKi9cclxuICBkaXNhYmxlU3luYygpIHtcclxuICAgIHRoaXMuaXNTeW5jRW5hYmxlZCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLnRpbWVyICYmIHRoaXMuc3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiA8YSBpZD1cImVuYWJsZS1zeW5jXCI+PC9hPlxyXG4gICAqIEhhYmlsaXRhIHRvZG9zIG9zIHRpcG9zIGRlIHNpbmNyb25pemHDp8OjbyBkZSBkYWRvcyAocGVyacOzZGljYSwgcmVhdGl2YSBlIG1hbnVhbCkuXHJcbiAgICpcclxuICAgKiBQb3IgcGFkcsOjbywgc2VtcHJlIHF1ZSBzZSBpbmljaWFsaXphIHVtYSBhcGxpY2HDp8OjbyBjb20gUE8gU3luYyBhcyBzaW5jcm9uaXphw6fDtWVzIGrDoSBlc3TDo28gaGFiaWxpdGFkYXMuXHJcbiAgICovXHJcbiAgZW5hYmxlU3luYygpIHtcclxuICAgIHRoaXMuaXNTeW5jRW5hYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLmNyZWF0ZVN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyBxdWUgZGlzcG9uaWJpbGl6YSBhIHBhcnRpciBkZSBzdWEgaW5zY3Jpw6fDo28gbyBldmVudG8gZGUgcmV0b3JubyBkYXMgb3BlcmHDp8O1ZXMgZGEgZmlsYSBkZSBldmVudG9zIHF1ZVxyXG4gICAqIGZvcmFtIGVudmlhZGFzIGFvIHNlcnZpZG9yLiBBIGNhZGEgb3BlcmHDp8OjbyBlbnZpYWRhIHBhcmEgbyBzZXJ2aWRvciwgc2Vyw6EgZGlzcGFyYWRvIHVtIGV2ZW50byBwYXJhIGEgaW5zY3Jpw6fDo29cclxuICAgKiBkZXN0ZSBtw6l0b2RvLlxyXG4gICAqXHJcbiAgICogPiBWZWphIG1haXMgZGV0YWxoZXMgZW0gW0Z1bmRhbWVudG9zIGRvIFBPIFN5bmMgLSBDYXB0dXJhbmRvIHJlc3Bvc3RhcyBkYSBzaW5jcm9uaXphw6fDo29dKC9ndWlkZXMvc3luYy1mdW5kYW1lbnRhbHMpLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8UG9TeW5jUmVzcG9uc2U+fSBPYnNlcnZhYmxlIGNvbSB1bSBvYmpldG8gZG8gdGlwbyBgUG9TeW5jUmVzcG9uc2VgLlxyXG4gICAqL1xyXG4gIGdldFJlc3BvbnNlcygpOiBPYnNlcnZhYmxlPFBvU3luY1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5wb0V2ZW50U291cmNpbmdTZXJ2aWNlLnJlc3BvbnNlc1N1YmplY3QoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldG9ybmEgdW1hIGluc3TDom5jaWEgZGUgYFBvRW50aXR5YCBwYXJhIHVtIGRldGVybWluYWRvICpzY2hlbWEqLlxyXG4gICAqXHJcbiAgICogPiBWZWphIG1haXMgZGV0YWxoZXMgZW0gW0Z1bmRhbWVudG9zIGRvIFBPIFN5bmMgLSBNYW5pcHVsYW5kbyBvcyByZWdpc3Ryb3MgZGUgdW0gc2NoZW1hXSgvZ3VpZGVzL3N5bmMtZnVuZGFtZW50YWxzKS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY2hlbWFOYW1lIE5vbWUgZG8gKnNjaGVtYSouXHJcbiAgICogQHJldHVybnMge1BvRW50aXR5fSBPYmpldG8gcGFyYSBlZmV0dWFyIGNvbnN1bHRhcyBlIGFsdGVyYcOnw7VlcyBub3MgZGFkb3MuXHJcbiAgICovXHJcbiAgZ2V0TW9kZWwoc2NoZW1hTmFtZTogc3RyaW5nKTogUG9FbnRpdHkge1xyXG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVsc1tzY2hlbWFOYW1lXTtcclxuICAgIGlmICghbW9kZWwpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNb2RlbCBub3QgZm91bmQ6ICcgKyBzY2hlbWFOYW1lKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtb2RlbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluc2VyZSB1bWEgcmVxdWlzacOnw6NvIEhUVFAgbmEgZmlsYSBkZSBldmVudG9zIGRvIGBwby1zeW5jYC5cclxuICAgKlxyXG4gICAqID4gVmVqYSBtYWlzIGRldGFsaGVzIGVtIFtGdW5kYW1lbnRvcyBkbyBQTyBTeW5jIC0gSW5zZXJpbmRvIHJlcXVpc2nDp8O1ZXMgSFRUUCBuYSBmaWxhIGRlIGV2ZW50b3NdKC9ndWlkZXMvc3luYy1mdW5kYW1lbnRhbHMpLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtQb0h0dHBSZXF1ZXN0RGF0YX0gcG9IdHRwUmVxdWVzdERhdGEgRGFkb3MgZGEgcmVxdWlzacOnw6NvIEhUVFAuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN1c3RvbVJlcXVlc3RJZCBJZGVudGlmaWNhZG9yIGN1c3RvbWl6YWRvIGRhIHJlcXVpc2nDp8OjbyBIVFRQLlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPG51bWJlcj59IFByb21lc3NhIGNvbSBvIGlkZW50aWZpY2Fkb3IgZGEgcmVxdWlzacOnw6NvIEhUVFAgY3JpYWRhLlxyXG4gICAqL1xyXG4gIGluc2VydEh0dHBDb21tYW5kKHJlcXVlc3REYXRhOiBQb0h0dHBSZXF1ZXN0RGF0YSwgY3VzdG9tUmVxdWVzdElkPzogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIHZhbGlkYXRlUGFyYW1ldGVyKHsgcmVxdWVzdERhdGEgfSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMucG9FdmVudFNvdXJjaW5nU2VydmljZS5odHRwQ29tbWFuZChyZXF1ZXN0RGF0YSwgY3VzdG9tUmVxdWVzdElkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVmZXR1YSB1bWEgY2hhbWFkYSBuYSBBUEkgZG8gc2Vydmlkb3IgcGFyYSByZWFsaXphciBhIGNhcmdhIGluaWNpYWwgZG9zIGRhZG9zLiBEZXZlIHNlciBjaGFtYWRvIGFwZW5hcyB1bWEgdmV6XHJcbiAgICogbmEgYXBsaWNhw6fDo28sIGFww7NzIGEgcHJlcGFyYcOnw6NvIGRvcyAqc2NoZW1hcyogcmVhbGl6YWRhIGF0cmF2w6lzIGRvIG3DqXRvZG8gYFBvU3luY1NlcnZpY2UucHJlcGFyZSgpYC5cclxuICAgKlxyXG4gICAqID4gVmVqYSBtYWlzIGRldGFsaGVzIGVtIFtGdW5kYW1lbnRvcyBkbyBQTyBTeW5jIC0gQ2FyZ2EgaW5pY2lhbCBkb3MgZGFkb3NdKC9ndWlkZXMvc3luYy1mdW5kYW1lbnRhbHMpLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8QXJyYXk8eyBlbnRpdHk6IHN0cmluZywgZGF0YTogQXJyYXk8YW55PiB9Pj59IE9ic2VydmFibGUgcXVlIG5vdGlmaWNhcsOhIHF1YW5kbyBhXHJcbiAgICogY2FyZ2EgaW5pY2lhbCBmb3IgY29uY2x1w61kYS5cclxuICAgKi9cclxuICBsb2FkRGF0YSgpOiBPYnNlcnZhYmxlPEFycmF5PHsgZW50aXR5OiBzdHJpbmc7IGRhdGE6IEFycmF5PGFueT4gfT4+IHtcclxuICAgIGNvbnN0IGxvYWRzOiBBcnJheTxPYnNlcnZhYmxlPHsgZW50aXR5OiBzdHJpbmc7IGRhdGE6IEFycmF5PGFueT4gfT4+ID0gW107XHJcbiAgICB0aGlzLnNjaGVtYXMuZm9yRWFjaChlbCA9PiBsb2Fkcy5wdXNoKHRoaXMubG9hZEVudGl0eURhdGEoZWwpKSk7XHJcbiAgICByZXR1cm4gZm9ya0pvaW4obG9hZHMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzcG9uc8OhdmVsIHBvciBub3RpZmljYXIgc2VtcHJlIHF1ZSBob3V2ZXIgc2luY3JvbmlzbW8uXHJcbiAgICpcclxuICAgKiA+IFZlamEgbWFpcyBkZXRhbGhlcyBlbSBbRnVuZGFtZW50b3MgZG8gUE8gU3luYyAtIE5vdGlmaWNhw6fDo28gcMOzcy1zaW5jcm9uaXphw6fDo29dKC9ndWlkZXMvc3luYy1mdW5kYW1lbnRhbHMpLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8YW55Pn0gT2JzZXJ2YWJsZSBxdWUgw6kgZGlzcGFyYWRvIGEgY2FkYSBzaW5jcm9uaXNtbyByZWFsaXphZG8uXHJcbiAgICovXHJcbiAgb25TeW5jKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBpZiAoIXRoaXMuZXZlbnRTdWIpIHtcclxuICAgICAgdGhpcy5ldmVudFN1YiA9IE9ic2VydmFibGUuY3JlYXRlKGUgPT4ge1xyXG4gICAgICAgIHRoaXMuZW1pdHRlciA9IGU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZXZlbnRTdWI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcmVwYXJhIGEgYXBsaWNhw6fDo28gY3JpYW5kbyBvcyBzY2hlbWFzIGUgYXBsaWNhIGFzIGNvbmZpZ3VyYcOnw7Vlcy5cclxuICAgKlxyXG4gICAqID4gVmVqYSBtYWlzIGRldGFsaGVzIGVtIFtGdW5kYW1lbnRvcyBkbyBQTyBTeW5jIC0gUHJlcGFyYW5kbyBhIGFwbGljYcOnw6NvXSgvZ3VpZGVzL3N5bmMtZnVuZGFtZW50YWxzKS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXk8UG9TeW5jU2NoZW1hPn0gc2NoZW1hcyBMaXN0YSBkZSAqc2NoZW1hcyogYSBzZXJlbSBwcmVwYXJhZG9zLlxyXG4gICAqIEBwYXJhbSB7UG9TeW5jQ29uZmlnfSBjb25maWcgQ29uZmlndXJhw6fDtWVzIGFkaWNpb25haXMuXHJcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn0gUHJvbWVzc2EgcXVlIMOpIHJlc29sdmlkYSBxdWFuZG8gYSBhcGxpY2HDp8OjbyBlc3RpdmVyIHByZXBhcmFkYSBwYXJhIGEgdXRpbGl6YcOnw6NvIGRvIGBwby1zeW5jYC5cclxuICAgKi9cclxuICBwcmVwYXJlKHNjaGVtYXM6IEFycmF5PFBvU3luY1NjaGVtYT4sIGNvbmZpZz86IFBvU3luY0NvbmZpZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICB2YWxpZGF0ZUFycmF5KHsgc2NoZW1hcyB9KTtcclxuXHJcbiAgICBjb25zdCBkZWZhdWx0U3luY0NvbmZpZzogUG9TeW5jQ29uZmlnID0ge1xyXG4gICAgICB0eXBlOiB0aGlzLnBvTmV0d29ya1NlcnZpY2UuZ2V0Q29ubmVjdGlvblN0YXR1cygpLnR5cGUsXHJcbiAgICAgIHBlcmlvZDogNjAsXHJcbiAgICAgIGRhdGFUcmFuc2Zvcm06IG5ldyBQb0RhdGFNZXNzYWdlKClcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zY2hlbWFzID0gc2NoZW1hcztcclxuICAgIHRoaXMuY29uZmlnID0gY29uZmlnIHx8IGRlZmF1bHRTeW5jQ29uZmlnO1xyXG4gICAgdGhpcy5jb25maWcuZGF0YVRyYW5zZm9ybSA9IHRoaXMuY29uZmlnLmRhdGFUcmFuc2Zvcm0gfHwgbmV3IFBvRGF0YU1lc3NhZ2UoKTtcclxuICAgIHRoaXMucG9FdmVudFNvdXJjaW5nU2VydmljZS5jb25maWcgPSB0aGlzLmNvbmZpZztcclxuICAgIHRoaXMuc3RhcnRUaW1lcih0aGlzLmNvbmZpZy5wZXJpb2QpO1xyXG4gICAgdGhpcy5yZWFjdGl2ZVN5bmMoKTtcclxuICAgIHRoaXMucG9FdmVudFNvdXJjaW5nU2VydmljZS5vblNhdmVEYXRhKCkuc3Vic2NyaWJlKCgpID0+IHRoaXMuc3luYygpKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5zYXZlU2NoZW1hcygpLnRoZW4oKCkgPT4ge1xyXG4gICAgICB0aGlzLnNjaGVtYXMuZm9yRWFjaChzY2hlbWEgPT4ge1xyXG4gICAgICAgIHRoaXMubW9kZWxzW3NjaGVtYS5uYW1lXSA9IG5ldyBQb0VudGl0eSh0aGlzLnBvRXZlbnRTb3VyY2luZ1NlcnZpY2UsIHNjaGVtYSwgdGhpcy5wb1NjaGVtYVNlcnZpY2UpO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgdW0gaXRlbSBkYSBmaWxhIGRlIGV2ZW50b3MgcXVlIGVzcGVyYSBhIHNpbmNyb25pemHDp8Ojby5cclxuICAgKlxyXG4gICAqID4gVmVqYSBtYWlzIGRldGFsaGVzIGVtIFtGdW5kYW1lbnRvcyBkbyBQTyBTeW5jIC0gQ2FwdHVyYW5kbyByZXNwb3N0YXMgZGEgc2luY3Jvbml6YcOnw6NvXSgvZ3VpZGVzL3N5bmMtZnVuZGFtZW50YWxzKS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7YW55fSBpZEV2ZW50U291cmNpbmcgSWRlbnRpZmljYWRvciBkbyBpdGVtIGRhIGZpbGEgZGUgZXZlbnRvcy5cclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fSBQcm9tZXNzYSBxdWUgw6kgcmVzb2x2aWRhIHF1YW5kbyBvIGl0ZW0gZGEgZmlsYSBkZSBldmVudG9zIMOpIHJlbW92aWRvLlxyXG4gICAqL1xyXG4gIHJlbW92ZUl0ZW1PZlN5bmMoaWRFdmVudFNvdXJjaW5nOiBhbnkpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMucG9FdmVudFNvdXJjaW5nU2VydmljZS5yZW1vdmVFdmVudFNvdXJjaW5nSXRlbShpZEV2ZW50U291cmNpbmcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVlbnZpYSBvcyBjb21hbmRvcyBwZW5kZW50ZXMgbmEgZmlsYSAoaW5jbHVzw6NvLCBhbHRlcmHDp8OjbyBlIGV4Y2x1c8OjbykgZSBidXNjYSBub3ZvcyBkYWRvcyBkbyBzZXJ2aWRvci5cclxuICAgKlxyXG4gICAqID4gVmVqYSBtYWlzIGRldGFsaGVzIGVtIFtGdW5kYW1lbnRvcyBkbyBQTyBTeW5jIC0gQ2FwdHVyYW5kbyByZXNwb3N0YXMgZGEgc2luY3Jvbml6YcOnw6NvXSgvZ3VpZGVzL3N5bmMtZnVuZGFtZW50YWxzKS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59IFByb21lc3NhIHF1ZSByZXNvbHZlIG8gc2luY3JvbmlzbW8gZGlzcGFyYWRvLlxyXG4gICAqL1xyXG4gIHJlc3VtZVN5bmMoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGlmICghdGhpcy5jYW5TeW5jKCkpIHtcclxuICAgICAgY29uc3QgZmluaXNoU3luY1N1YnNjcmlwdGlvbiA9IHRoaXMuZmluaXNoU3luY1N1YmplY3QuYXNPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICBmaW5pc2hTeW5jU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3luYygpO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnN5bmMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERpc3BhcmEgbyBzaW5jcm9uaXNtbyBlbnZpYW5kbyBvcyBldmVudG9zIHBlbmRlbnRlcyAoaW5jbHVzw6NvLCBhbHRlcmHDp8OjbyBlIGV4Y2x1c8OjbykgZSBidXNjYW5kbyBub3ZvcyBkYWRvcyBkbyBzZXJ2aWRvci5cclxuICAgKlxyXG4gICAqIE8gc2luY3JvbmlzbW8gc29tZW50ZSBzZXLDoSBleGVjdXRhZG8gZGVwb2lzIHF1ZSBvIGFjZXNzbyBhIGJhc2UgZGUgZGFkb3MgbG9jYWwgZG8gZGlzcG9zaXRpdm8gZm9yIGxpYmVyYWRhLlxyXG4gICAqXHJcbiAgICogPiBWZWphIG1haXMgZGV0YWxoZXMgZW0gW0Z1bmRhbWVudG9zIGRvIFBPIFN5bmMgLSBTaW5jcm9uaXphw6fDo28gbWFudWFsXSgvZ3VpZGVzL3N5bmMtZnVuZGFtZW50YWxzKS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59IFByb21lc3NhIHF1ZSDDqSByZXNvbHZpZGEgcXVhbmRvIG8gc2luY3JvbmlzbW8gZm9yIGZpbmFsaXphZG8uXHJcbiAgICovXHJcbiAgYXN5bmMgc3luYygpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgaWYgKHRoaXMuY2FuU3luYygpKSB7XHJcbiAgICAgIHRoaXMuc3RhcnRTeW5jKCk7XHJcblxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMucG9FdmVudFNvdXJjaW5nU2VydmljZS5zeW5jU2VuZCgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMucG9FdmVudFNvdXJjaW5nU2VydmljZS5zeW5jR2V0KCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmVtaXR0ZXIpIHtcclxuICAgICAgICAgIHRoaXMuZW1pdHRlci5uZXh0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZpbmlzaFN5bmMoKTtcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICB0aGlzLnN5bmNFcnJvcigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhblN5bmMoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5zeW5jaW5nIHx8ICF0aGlzLmlzU3luY0VuYWJsZWQpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgY3VycmVudENvbm5lY3Rpb24gPSB0aGlzLnBvTmV0d29ya1NlcnZpY2UuZ2V0Q29ubmVjdGlvblN0YXR1cygpO1xyXG4gICAgICBjb25zdCBpc0NvbmZpZ3VyZWRDb25uZWN0aW9uID0gdGhpcy5jb25maWcgJiYgY3VycmVudENvbm5lY3Rpb24udHlwZSA9PT0gdGhpcy5jb25maWcudHlwZTtcclxuICAgICAgY29uc3QgaXNDb25maWdJbmNsdWRlc1R5cGUgPVxyXG4gICAgICAgIHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLnR5cGUgaW5zdGFuY2VvZiBBcnJheSAmJiB0aGlzLmNvbmZpZy50eXBlLmluY2x1ZGVzKGN1cnJlbnRDb25uZWN0aW9uLnR5cGUpO1xyXG5cclxuICAgICAgcmV0dXJuIGN1cnJlbnRDb25uZWN0aW9uLnN0YXR1cyAmJiAoIXRoaXMuY29uZmlnIHx8IGlzQ29uZmlndXJlZENvbm5lY3Rpb24gfHwgaXNDb25maWdJbmNsdWRlc1R5cGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVTdWJzY3JpYmUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50aW1lcikge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMudGltZXIuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnN5bmMoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLnRpbWVyID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMuc3RhcnRUaW1lcih0aGlzLmNvbmZpZy5wZXJpb2QpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluaXNoU3luYygpOiB2b2lkIHtcclxuICAgIHRoaXMuc3luY2luZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5maW5pc2hTeW5jU3ViamVjdC5uZXh0KG51bGwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRPbmVQYWdlKHNjaGVtYTogUG9TeW5jU2NoZW1hLCBwYWdlOiBudW1iZXIgPSAxKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGNvbnN0IHBhcmFtcyA9IFtdO1xyXG4gICAgcGFyYW1zLnB1c2goYCR7dGhpcy5jb25maWcuZGF0YVRyYW5zZm9ybS5nZXRQYWdlU2l6ZVBhcmFtTmFtZSgpfT0ke3NjaGVtYS5wYWdlU2l6ZX1gKTtcclxuICAgIHBhcmFtcy5wdXNoKGAke3RoaXMuY29uZmlnLmRhdGFUcmFuc2Zvcm0uZ2V0UGFnZVBhcmFtTmFtZSgpfT0ke3BhZ2V9YCk7XHJcblxyXG4gICAgY29uc3QgdXJsID0gYCR7UG9TY2hlbWFVdGlsLmdldFVybChzY2hlbWEsIFBvUmVxdWVzdFR5cGUuR0VUKX0/JHtwYXJhbXMuam9pbignJicpfWA7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMucG9IdHRwQ2xpZW50LmdldCh1cmwpLnBpcGUoXHJcbiAgICAgIG1hcChyZXNwb25zZSA9PiByZXNwb25zZS5ib2R5KSxcclxuICAgICAgbWVyZ2VNYXAocmVzcG9uc2VCb2R5ID0+IHtcclxuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICByZXNwb25zZUJvZHlbdGhpcy5jb25maWcuZGF0YVRyYW5zZm9ybS5nZXRJdGVtc0ZpZWxkTmFtZSgpXS5tYXAoaXRlbSA9PiB7XHJcbiAgICAgICAgICBpdGVtLlN5bmNJbnNlcnRlZERhdGVUaW1lID0gbm93O1xyXG4gICAgICAgICAgaXRlbS5TeW5jVXBkYXRlZERhdGVUaW1lID0gbnVsbDtcclxuICAgICAgICAgIGl0ZW0uU3luY0V4Y2x1c2lvbkRhdGVUaW1lID0gbnVsbDtcclxuICAgICAgICAgIGl0ZW0uU3luY0RlbGV0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIGl0ZW0uU3luY1N0YXR1cyA9IDI7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9TY2hlbWFTZXJ2aWNlXHJcbiAgICAgICAgICAudXBkYXRlQWxsKHNjaGVtYSwgcmVzcG9uc2VCb2R5W3RoaXMuY29uZmlnLmRhdGFUcmFuc2Zvcm0uZ2V0SXRlbXNGaWVsZE5hbWUoKV0pXHJcbiAgICAgICAgICAudGhlbigoKSA9PiByZXNwb25zZUJvZHkpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZEVudGl0eURhdGEoc2NoZW1hOiBQb1N5bmNTY2hlbWEpOiBPYnNlcnZhYmxlPHsgZW50aXR5OiBzdHJpbmc7IGRhdGE6IEFycmF5PGFueT4gfT4ge1xyXG4gICAgbGV0IHBhZ2UgPSAxO1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0T25lUGFnZShzY2hlbWEsIHBhZ2UpLnBpcGUoXHJcbiAgICAgIGV4cGFuZChkYXRhID0+IHtcclxuICAgICAgICB0aGlzLmNvbmZpZy5kYXRhVHJhbnNmb3JtLnRyYW5zZm9ybShkYXRhKTtcclxuICAgICAgICBjb25zdCBoYXNOZXh0ID0gdGhpcy5jb25maWcuZGF0YVRyYW5zZm9ybS5oYXNOZXh0KCk7XHJcbiAgICAgICAgaWYgKGhhc05leHQpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmdldE9uZVBhZ2Uoc2NoZW1hLCArK3BhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gb2YoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICByZWR1Y2UoXHJcbiAgICAgICAgKGFjYywgb2JqKSA9PiB7XHJcbiAgICAgICAgICBhY2MuZGF0YSA9IGFjYy5kYXRhLmNvbmNhdChvYmpbdGhpcy5jb25maWcuZGF0YVRyYW5zZm9ybS5nZXRJdGVtc0ZpZWxkTmFtZSgpXSk7XHJcbiAgICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZW50aXR5OiBzY2hlbWEubmFtZSxcclxuICAgICAgICAgIGRhdGE6IFtdXHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFjdGl2ZVN5bmMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnBvTmV0d29ya1NlcnZpY2Uub25DaGFuZ2UoKS5zdWJzY3JpYmUobmV0d29ya1N0YXR1cyA9PiB7XHJcbiAgICAgIGlmIChuZXR3b3JrU3RhdHVzLnN0YXR1cykge1xyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lcih0aGlzLmNvbmZpZy5wZXJpb2QpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN5bmMoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHNhdmVTY2hlbWFzKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICBjb25zdCBzdG9yYWdlU2NoZW1hczogQXJyYXk8UG9TeW5jU2NoZW1hPiA9IGF3YWl0IHRoaXMucG9TY2hlbWFEZWZpbml0aW9uU2VydmljZS5nZXRBbGwoKTtcclxuICAgIHRoaXMuc2NoZW1hcy5mb3JFYWNoKHNjaGVtYSA9PiAoc2NoZW1hLmxhc3RTeW5jID0gUG9TY2hlbWFVdGlsLmdldExhc3RTeW5jKHN0b3JhZ2VTY2hlbWFzLCBzY2hlbWEubmFtZSkpKTtcclxuICAgIHJldHVybiB0aGlzLnBvU2NoZW1hRGVmaW5pdGlvblNlcnZpY2Uuc2F2ZUFsbCh0aGlzLnNjaGVtYXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGFydFN5bmMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnN5bmNpbmcgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGFydFRpbWVyKHBlcmlvZCk6IHZvaWQge1xyXG4gICAgaWYgKHBlcmlvZCAmJiB0aGlzLmlzU3luY0VuYWJsZWQpIHtcclxuICAgICAgdGhpcy50aW1lciA9IHRpbWVyKHBlcmlvZCAqIDEwMDApO1xyXG4gICAgICB0aGlzLmNyZWF0ZVN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzeW5jRXJyb3IoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbmlzaFN5bmMoKTtcclxuICB9XHJcbn1cclxuIl19
@@ -1,63 +1,63 @@
1
- /**
2
- * Retorna um *array* contendo os pares `[chave, valor]` do objeto.
3
- *
4
- * Semelhante ao método `Object.entries()` nativo do javascript.
5
- *
6
- * > Veja mais em: https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Object/entries
7
- *
8
- * @param object Objeto que será extraído os pares [chave, valor].
9
- */
10
- export const getObjectEntries = (object) => {
11
- const objectName = Object.keys(object)[0];
12
- const objectValue = object[objectName];
13
- return [objectName, objectValue];
14
- };
15
- /**
16
- * Recebe um objeto e valida se o seu valor é diferente de *undefined* ou *null*.
17
- *
18
- * @param {object} parameter Objeto contento o nome do parâmetro que está sendo validado
19
- * e o seu valor.
20
- */
21
- export const validateParameter = (parameter) => {
22
- const [paramName, paramValue] = getObjectEntries(parameter);
23
- if (paramValue === undefined || paramValue === null) {
24
- throw new Error(`The ${paramName} parameter cannot be undefined or null`);
25
- }
26
- };
27
- /**
28
- * Recebe um objeto e valida se o seu valor é uma instância de *Array* e se não
29
- * está vazio.
30
- *
31
- * @param value Objeto contento o nome da propriedade que está sendo validada e o seu valor.
32
- */
33
- export const validateArray = (value) => {
34
- validateParameter(value);
35
- const [paramName, paramValue] = getObjectEntries(value);
36
- if (!(paramValue instanceof Array)) {
37
- throw new Error(`${paramName} is not an Array instance`);
38
- }
39
- if (!paramValue.length) {
40
- throw new Error(`${paramName} cannot be empty array`);
41
- }
42
- };
43
- /**
44
- * Recebe um arquivo e converte para uma string base64
45
- *
46
- * @param Objeto do tipo file.
47
- */
48
- export const toBase64 = (file) => new Promise((resolve, reject) => {
49
- const reader = new FileReader();
50
- reader.readAsDataURL(file);
51
- reader.onload = () => resolve(reader.result);
52
- /* istanbul ignore next */
53
- reader.onerror = error => reject(error);
54
- });
55
- /**
56
- * Recebe uma string base64 e converte para um arquivo
57
- *
58
- * @param string base64.
59
- */
60
- export const toFile = (url, fileName, mimeType) => fetch(url)
61
- .then(result => result.arrayBuffer())
62
- .then(buffer => new File([buffer], fileName, { type: mimeType }));
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zeW5jL3NyYy9saWIvdXRpbHMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE1BQWMsRUFBRSxFQUFFO0lBQ2pELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXZDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDbkMsQ0FBQyxDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFNBQWlCLEVBQUUsRUFBRTtJQUNyRCxNQUFNLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRTVELElBQUksVUFBVSxLQUFLLFNBQVMsSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFO1FBQ25ELE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxTQUFTLHdDQUF3QyxDQUFDLENBQUM7S0FDM0U7QUFDSCxDQUFDLENBQUM7QUFFRjs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFO0lBQzdDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXpCLE1BQU0sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFeEQsSUFBSSxDQUFDLENBQUMsVUFBVSxZQUFZLEtBQUssQ0FBQyxFQUFFO1FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxTQUFTLDJCQUEyQixDQUFDLENBQUM7S0FDMUQ7SUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtRQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsU0FBUyx3QkFBd0IsQ0FBQyxDQUFDO0tBQ3ZEO0FBQ0gsQ0FBQyxDQUFDO0FBRUY7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQVUsRUFBRSxFQUFFLENBQ3JDLElBQUksT0FBTyxDQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO0lBQ3RDLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7SUFDaEMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBZ0IsQ0FBQyxDQUFDO0lBQ3ZELDBCQUEwQjtJQUMxQixNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFDLENBQUMsQ0FBQyxDQUFDO0FBRUw7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQVcsRUFBRSxRQUFnQixFQUFFLFFBQWdCLEVBQUUsRUFBRSxDQUN4RSxLQUFLLENBQUMsR0FBRyxDQUFDO0tBQ1AsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO0tBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmV0b3JuYSB1bSAqYXJyYXkqIGNvbnRlbmRvIG9zIHBhcmVzIGBbY2hhdmUsIHZhbG9yXWAgZG8gb2JqZXRvLlxuICpcbiAqIFNlbWVsaGFudGUgYW8gbcOpdG9kbyBgT2JqZWN0LmVudHJpZXMoKWAgbmF0aXZvIGRvIGphdmFzY3JpcHQuXG4gKlxuICogPiBWZWphIG1haXMgZW06IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL3B0LUJSL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9lbnRyaWVzXG4gKlxuICogQHBhcmFtIG9iamVjdCBPYmpldG8gcXVlIHNlcsOhIGV4dHJhw61kbyBvcyBwYXJlcyBbY2hhdmUsIHZhbG9yXS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldE9iamVjdEVudHJpZXMgPSAob2JqZWN0OiBvYmplY3QpID0+IHtcbiAgY29uc3Qgb2JqZWN0TmFtZSA9IE9iamVjdC5rZXlzKG9iamVjdClbMF07XG4gIGNvbnN0IG9iamVjdFZhbHVlID0gb2JqZWN0W29iamVjdE5hbWVdO1xuXG4gIHJldHVybiBbb2JqZWN0TmFtZSwgb2JqZWN0VmFsdWVdO1xufTtcblxuLyoqXG4gKiBSZWNlYmUgdW0gb2JqZXRvIGUgdmFsaWRhIHNlIG8gc2V1IHZhbG9yIMOpIGRpZmVyZW50ZSBkZSAqdW5kZWZpbmVkKiBvdSAqbnVsbCouXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHBhcmFtZXRlciBPYmpldG8gY29udGVudG8gbyBub21lIGRvIHBhcsOibWV0cm8gcXVlIGVzdMOhIHNlbmRvIHZhbGlkYWRvXG4gKiBlIG8gc2V1IHZhbG9yLlxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVQYXJhbWV0ZXIgPSAocGFyYW1ldGVyOiBvYmplY3QpID0+IHtcbiAgY29uc3QgW3BhcmFtTmFtZSwgcGFyYW1WYWx1ZV0gPSBnZXRPYmplY3RFbnRyaWVzKHBhcmFtZXRlcik7XG5cbiAgaWYgKHBhcmFtVmFsdWUgPT09IHVuZGVmaW5lZCB8fCBwYXJhbVZhbHVlID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJHtwYXJhbU5hbWV9IHBhcmFtZXRlciBjYW5ub3QgYmUgdW5kZWZpbmVkIG9yIG51bGxgKTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZWNlYmUgdW0gb2JqZXRvIGUgdmFsaWRhIHNlIG8gc2V1IHZhbG9yIMOpIHVtYSBpbnN0w6JuY2lhIGRlICpBcnJheSogZSBzZSBuw6NvXG4gKiBlc3TDoSB2YXppby5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgT2JqZXRvIGNvbnRlbnRvIG8gbm9tZSBkYSBwcm9wcmllZGFkZSBxdWUgZXN0w6Egc2VuZG8gdmFsaWRhZGEgZSBvIHNldSB2YWxvci5cbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlQXJyYXkgPSAodmFsdWU6IG9iamVjdCkgPT4ge1xuICB2YWxpZGF0ZVBhcmFtZXRlcih2YWx1ZSk7XG5cbiAgY29uc3QgW3BhcmFtTmFtZSwgcGFyYW1WYWx1ZV0gPSBnZXRPYmplY3RFbnRyaWVzKHZhbHVlKTtcblxuICBpZiAoIShwYXJhbVZhbHVlIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke3BhcmFtTmFtZX0gaXMgbm90IGFuIEFycmF5IGluc3RhbmNlYCk7XG4gIH1cblxuICBpZiAoIXBhcmFtVmFsdWUubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke3BhcmFtTmFtZX0gY2Fubm90IGJlIGVtcHR5IGFycmF5YCk7XG4gIH1cbn07XG5cbi8qKlxuICogUmVjZWJlIHVtIGFycXVpdm8gZSBjb252ZXJ0ZSBwYXJhIHVtYSBzdHJpbmcgYmFzZTY0XG4gKlxuICogQHBhcmFtIE9iamV0byBkbyB0aXBvIGZpbGUuXG4gKi9cbmV4cG9ydCBjb25zdCB0b0Jhc2U2NCA9IChmaWxlOiBGaWxlKSA9PlxuICBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJlYWRlci5vbmVycm9yID0gZXJyb3IgPT4gcmVqZWN0KGVycm9yKTtcbiAgfSk7XG5cbi8qKlxuICogUmVjZWJlIHVtYSBzdHJpbmcgYmFzZTY0IGUgY29udmVydGUgcGFyYSB1bSBhcnF1aXZvXG4gKlxuICogQHBhcmFtIHN0cmluZyBiYXNlNjQuXG4gKi9cbmV4cG9ydCBjb25zdCB0b0ZpbGUgPSAodXJsOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcsIG1pbWVUeXBlOiBzdHJpbmcpID0+XG4gIGZldGNoKHVybClcbiAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmFycmF5QnVmZmVyKCkpXG4gICAgLnRoZW4oYnVmZmVyID0+IG5ldyBGaWxlKFtidWZmZXJdLCBmaWxlTmFtZSwgeyB0eXBlOiBtaW1lVHlwZSB9KSk7XG4iXX0=
1
+ /**
2
+ * Retorna um *array* contendo os pares `[chave, valor]` do objeto.
3
+ *
4
+ * Semelhante ao método `Object.entries()` nativo do javascript.
5
+ *
6
+ * > Veja mais em: https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Object/entries
7
+ *
8
+ * @param object Objeto que será extraído os pares [chave, valor].
9
+ */
10
+ export const getObjectEntries = (object) => {
11
+ const objectName = Object.keys(object)[0];
12
+ const objectValue = object[objectName];
13
+ return [objectName, objectValue];
14
+ };
15
+ /**
16
+ * Recebe um objeto e valida se o seu valor é diferente de *undefined* ou *null*.
17
+ *
18
+ * @param {object} parameter Objeto contento o nome do parâmetro que está sendo validado
19
+ * e o seu valor.
20
+ */
21
+ export const validateParameter = (parameter) => {
22
+ const [paramName, paramValue] = getObjectEntries(parameter);
23
+ if (paramValue === undefined || paramValue === null) {
24
+ throw new Error(`The ${paramName} parameter cannot be undefined or null`);
25
+ }
26
+ };
27
+ /**
28
+ * Recebe um objeto e valida se o seu valor é uma instância de *Array* e se não
29
+ * está vazio.
30
+ *
31
+ * @param value Objeto contento o nome da propriedade que está sendo validada e o seu valor.
32
+ */
33
+ export const validateArray = (value) => {
34
+ validateParameter(value);
35
+ const [paramName, paramValue] = getObjectEntries(value);
36
+ if (!(paramValue instanceof Array)) {
37
+ throw new Error(`${paramName} is not an Array instance`);
38
+ }
39
+ if (!paramValue.length) {
40
+ throw new Error(`${paramName} cannot be empty array`);
41
+ }
42
+ };
43
+ /**
44
+ * Recebe um arquivo e converte para uma string base64
45
+ *
46
+ * @param Objeto do tipo file.
47
+ */
48
+ export const toBase64 = (file) => new Promise((resolve, reject) => {
49
+ const reader = new FileReader();
50
+ reader.readAsDataURL(file);
51
+ reader.onload = () => resolve(reader.result);
52
+ /* istanbul ignore next */
53
+ reader.onerror = error => reject(error);
54
+ });
55
+ /**
56
+ * Recebe uma string base64 e converte para um arquivo
57
+ *
58
+ * @param string base64.
59
+ */
60
+ export const toFile = (url, fileName, mimeType) => fetch(url)
61
+ .then(result => result.arrayBuffer())
62
+ .then(buffer => new File([buffer], fileName, { type: mimeType }));
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zeW5jL3NyYy9saWIvdXRpbHMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE1BQWMsRUFBRSxFQUFFO0lBQ2pELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXZDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDbkMsQ0FBQyxDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFNBQWlCLEVBQUUsRUFBRTtJQUNyRCxNQUFNLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRTVELElBQUksVUFBVSxLQUFLLFNBQVMsSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFO1FBQ25ELE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxTQUFTLHdDQUF3QyxDQUFDLENBQUM7S0FDM0U7QUFDSCxDQUFDLENBQUM7QUFFRjs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFO0lBQzdDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXpCLE1BQU0sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFeEQsSUFBSSxDQUFDLENBQUMsVUFBVSxZQUFZLEtBQUssQ0FBQyxFQUFFO1FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxTQUFTLDJCQUEyQixDQUFDLENBQUM7S0FDMUQ7SUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtRQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsU0FBUyx3QkFBd0IsQ0FBQyxDQUFDO0tBQ3ZEO0FBQ0gsQ0FBQyxDQUFDO0FBRUY7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQVUsRUFBRSxFQUFFLENBQ3JDLElBQUksT0FBTyxDQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO0lBQ3RDLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7SUFDaEMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBZ0IsQ0FBQyxDQUFDO0lBQ3ZELDBCQUEwQjtJQUMxQixNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFDLENBQUMsQ0FBQyxDQUFDO0FBRUw7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQVcsRUFBRSxRQUFnQixFQUFFLFFBQWdCLEVBQUUsRUFBRSxDQUN4RSxLQUFLLENBQUMsR0FBRyxDQUFDO0tBQ1AsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO0tBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBSZXRvcm5hIHVtICphcnJheSogY29udGVuZG8gb3MgcGFyZXMgYFtjaGF2ZSwgdmFsb3JdYCBkbyBvYmpldG8uXHJcbiAqXHJcbiAqIFNlbWVsaGFudGUgYW8gbcOpdG9kbyBgT2JqZWN0LmVudHJpZXMoKWAgbmF0aXZvIGRvIGphdmFzY3JpcHQuXHJcbiAqXHJcbiAqID4gVmVqYSBtYWlzIGVtOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9wdC1CUi9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvZW50cmllc1xyXG4gKlxyXG4gKiBAcGFyYW0gb2JqZWN0IE9iamV0byBxdWUgc2Vyw6EgZXh0cmHDrWRvIG9zIHBhcmVzIFtjaGF2ZSwgdmFsb3JdLlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGdldE9iamVjdEVudHJpZXMgPSAob2JqZWN0OiBvYmplY3QpID0+IHtcclxuICBjb25zdCBvYmplY3ROYW1lID0gT2JqZWN0LmtleXMob2JqZWN0KVswXTtcclxuICBjb25zdCBvYmplY3RWYWx1ZSA9IG9iamVjdFtvYmplY3ROYW1lXTtcclxuXHJcbiAgcmV0dXJuIFtvYmplY3ROYW1lLCBvYmplY3RWYWx1ZV07XHJcbn07XHJcblxyXG4vKipcclxuICogUmVjZWJlIHVtIG9iamV0byBlIHZhbGlkYSBzZSBvIHNldSB2YWxvciDDqSBkaWZlcmVudGUgZGUgKnVuZGVmaW5lZCogb3UgKm51bGwqLlxyXG4gKlxyXG4gKiBAcGFyYW0ge29iamVjdH0gcGFyYW1ldGVyIE9iamV0byBjb250ZW50byBvIG5vbWUgZG8gcGFyw6JtZXRybyBxdWUgZXN0w6Egc2VuZG8gdmFsaWRhZG9cclxuICogZSBvIHNldSB2YWxvci5cclxuICovXHJcbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVBhcmFtZXRlciA9IChwYXJhbWV0ZXI6IG9iamVjdCkgPT4ge1xyXG4gIGNvbnN0IFtwYXJhbU5hbWUsIHBhcmFtVmFsdWVdID0gZ2V0T2JqZWN0RW50cmllcyhwYXJhbWV0ZXIpO1xyXG5cclxuICBpZiAocGFyYW1WYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHBhcmFtVmFsdWUgPT09IG51bGwpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihgVGhlICR7cGFyYW1OYW1lfSBwYXJhbWV0ZXIgY2Fubm90IGJlIHVuZGVmaW5lZCBvciBudWxsYCk7XHJcbiAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlY2ViZSB1bSBvYmpldG8gZSB2YWxpZGEgc2UgbyBzZXUgdmFsb3Igw6kgdW1hIGluc3TDom5jaWEgZGUgKkFycmF5KiBlIHNlIG7Do29cclxuICogZXN0w6EgdmF6aW8uXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSBPYmpldG8gY29udGVudG8gbyBub21lIGRhIHByb3ByaWVkYWRlIHF1ZSBlc3TDoSBzZW5kbyB2YWxpZGFkYSBlIG8gc2V1IHZhbG9yLlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlQXJyYXkgPSAodmFsdWU6IG9iamVjdCkgPT4ge1xyXG4gIHZhbGlkYXRlUGFyYW1ldGVyKHZhbHVlKTtcclxuXHJcbiAgY29uc3QgW3BhcmFtTmFtZSwgcGFyYW1WYWx1ZV0gPSBnZXRPYmplY3RFbnRyaWVzKHZhbHVlKTtcclxuXHJcbiAgaWYgKCEocGFyYW1WYWx1ZSBpbnN0YW5jZW9mIEFycmF5KSkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKGAke3BhcmFtTmFtZX0gaXMgbm90IGFuIEFycmF5IGluc3RhbmNlYCk7XHJcbiAgfVxyXG5cclxuICBpZiAoIXBhcmFtVmFsdWUubGVuZ3RoKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cGFyYW1OYW1lfSBjYW5ub3QgYmUgZW1wdHkgYXJyYXlgKTtcclxuICB9XHJcbn07XHJcblxyXG4vKipcclxuICogUmVjZWJlIHVtIGFycXVpdm8gZSBjb252ZXJ0ZSBwYXJhIHVtYSBzdHJpbmcgYmFzZTY0XHJcbiAqXHJcbiAqIEBwYXJhbSBPYmpldG8gZG8gdGlwbyBmaWxlLlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHRvQmFzZTY0ID0gKGZpbGU6IEZpbGUpID0+XHJcbiAgbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICByZWFkZXIub25sb2FkID0gKCkgPT4gcmVzb2x2ZShyZWFkZXIucmVzdWx0IGFzIHN0cmluZyk7XHJcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgcmVhZGVyLm9uZXJyb3IgPSBlcnJvciA9PiByZWplY3QoZXJyb3IpO1xyXG4gIH0pO1xyXG5cclxuLyoqXHJcbiAqIFJlY2ViZSB1bWEgc3RyaW5nIGJhc2U2NCBlIGNvbnZlcnRlIHBhcmEgdW0gYXJxdWl2b1xyXG4gKlxyXG4gKiBAcGFyYW0gc3RyaW5nIGJhc2U2NC5cclxuICovXHJcbmV4cG9ydCBjb25zdCB0b0ZpbGUgPSAodXJsOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcsIG1pbWVUeXBlOiBzdHJpbmcpID0+XHJcbiAgZmV0Y2godXJsKVxyXG4gICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5hcnJheUJ1ZmZlcigpKVxyXG4gICAgLnRoZW4oYnVmZmVyID0+IG5ldyBGaWxlKFtidWZmZXJdLCBmaWxlTmFtZSwgeyB0eXBlOiBtaW1lVHlwZSB9KSk7XHJcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tdWktbmctc3luYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3N5bmMvc3JjL3BvLXVpLW5nLXN5bmMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -1,2 +1,2 @@
1
- export * from './lib/index';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3N5bmMvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9pbmRleCc7XG4iXX0=
1
+ export * from './lib/index';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3N5bmMvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9pbmRleCc7XHJcbiJdfQ==