@po-ui/ng-sync 5.22.1 → 6.1.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 (86) hide show
  1. package/{esm2015/lib/index.js → esm2020/lib/index.mjs} +0 -0
  2. package/{esm2015/lib/models/index.js → esm2020/lib/models/index.mjs} +0 -0
  3. package/{esm2015/lib/models/po-data-message.model.js → esm2020/lib/models/po-data-message.model.mjs} +0 -0
  4. package/{esm2015/lib/models/po-data-transform.model.js → esm2020/lib/models/po-data-transform.model.mjs} +0 -0
  5. package/esm2020/lib/models/po-entity/po-entity.model.mjs +214 -0
  6. package/{esm2015/lib/models/po-event-sourcing-error-response.model.js → esm2020/lib/models/po-event-sourcing-error-response.model.mjs} +0 -0
  7. package/{esm2015/lib/models/po-network-status.model.js → esm2020/lib/models/po-network-status.model.mjs} +0 -0
  8. package/{esm2015/lib/models/po-network-type.enum.js → esm2020/lib/models/po-network-type.enum.mjs} +0 -0
  9. package/esm2020/lib/models/po-query-builder/po-query-builder.model.mjs +238 -0
  10. package/{esm2015/lib/models/po-request-type.enum.js → esm2020/lib/models/po-request-type.enum.mjs} +0 -0
  11. package/esm2020/lib/po-sync.module.mjs +45 -0
  12. 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} +0 -0
  13. package/{esm2015/lib/services/po-event-sourcing/index.js → esm2020/lib/services/po-event-sourcing/index.mjs} +0 -0
  14. package/{esm2015/lib/services/po-event-sourcing/interfaces/po-event-sourcing-item.interface.js → esm2020/lib/services/po-event-sourcing/interfaces/po-event-sourcing-item.interface.mjs} +0 -0
  15. package/{esm2015/lib/services/po-event-sourcing/interfaces/po-event-sourcing-summary-item.interface.js → esm2020/lib/services/po-event-sourcing/interfaces/po-event-sourcing-summary-item.interface.mjs} +0 -0
  16. package/esm2020/lib/services/po-event-sourcing/po-event-sourcing.service.mjs +372 -0
  17. 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} +0 -0
  18. package/{esm2015/lib/services/po-http-client/interfaces/po-http-request-data.interface.js → esm2020/lib/services/po-http-client/interfaces/po-http-request-data.interface.mjs} +0 -0
  19. package/{esm2015/lib/services/po-http-client/interfaces/po-response-api.interface.js → esm2020/lib/services/po-http-client/interfaces/po-response-api.interface.mjs} +0 -0
  20. package/esm2020/lib/services/po-http-client/po-http-client.service.mjs +148 -0
  21. 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} +0 -0
  22. package/esm2020/lib/services/po-network/po-network.service.mjs +58 -0
  23. package/{esm2015/lib/services/po-schema/index.js → esm2020/lib/services/po-schema/index.mjs} +0 -0
  24. package/esm2020/lib/services/po-schema/po-schema-definition/po-schema-definition.service.mjs +77 -0
  25. 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} +0 -0
  26. package/esm2020/lib/services/po-schema/po-schema.service.mjs +174 -0
  27. package/{esm2015/lib/services/po-sync/interfaces/po-sync-config.interface.js → esm2020/lib/services/po-sync/interfaces/po-sync-config.interface.mjs} +0 -0
  28. package/{esm2015/lib/services/po-sync/interfaces/po-sync-field-options.interface.js → esm2020/lib/services/po-sync/interfaces/po-sync-field-options.interface.mjs} +0 -0
  29. package/{esm2015/lib/services/po-sync/interfaces/po-sync-response.interface.js → esm2020/lib/services/po-sync/interfaces/po-sync-response.interface.mjs} +0 -0
  30. package/{esm2015/lib/services/po-sync/interfaces/po-sync-schema.interface.js → esm2020/lib/services/po-sync/interfaces/po-sync-schema.interface.mjs} +0 -0
  31. package/esm2020/lib/services/po-sync/po-sync.service.mjs +325 -0
  32. package/{esm2015/lib/utils/utils.js → esm2020/lib/utils/utils.mjs} +0 -0
  33. package/esm2020/po-ui-ng-sync.mjs +5 -0
  34. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  35. package/fesm2015/{po-ui-ng-sync.js → po-ui-ng-sync.mjs} +217 -201
  36. package/fesm2015/po-ui-ng-sync.mjs.map +1 -0
  37. package/fesm2020/po-ui-ng-sync.mjs +2018 -0
  38. package/fesm2020/po-ui-ng-sync.mjs.map +1 -0
  39. package/lib/po-sync.module.d.ts +5 -0
  40. package/lib/services/po-event-sourcing/po-event-sourcing.service.d.ts +3 -0
  41. package/lib/services/po-http-client/po-http-client.service.d.ts +3 -0
  42. package/lib/services/po-network/po-network.service.d.ts +3 -0
  43. package/lib/services/po-schema/po-schema-definition/po-schema-definition.service.d.ts +3 -0
  44. package/lib/services/po-schema/po-schema.service.d.ts +3 -0
  45. package/lib/services/po-sync/po-sync.service.d.ts +3 -0
  46. package/package.json +29 -14
  47. package/po-ui-ng-sync-6.1.0.tgz +0 -0
  48. package/po-ui-ng-sync.d.ts +1 -4
  49. package/schematics/migrations.json +5 -0
  50. package/schematics/ng-add/index.js +4 -4
  51. package/schematics/ng-add/index.js.map +1 -1
  52. package/schematics/ng-add/index.spec.js +4 -4
  53. package/schematics/ng-add/index.spec.js.map +1 -1
  54. package/schematics/ng-generate/schema/index.js +2 -2
  55. package/schematics/ng-generate/schema/index.js.map +1 -1
  56. package/schematics/ng-generate/schema/index.spec.js +3 -3
  57. package/schematics/ng-generate/schema/index.spec.js.map +1 -1
  58. package/schematics/ng-update/v2/index.js +6 -6
  59. package/schematics/ng-update/v2/index.js.map +1 -1
  60. package/schematics/ng-update/v3/index.js +1 -1
  61. package/schematics/ng-update/v3/index.js.map +1 -1
  62. package/schematics/ng-update/v4/index.js +1 -1
  63. package/schematics/ng-update/v4/index.js.map +1 -1
  64. package/schematics/ng-update/v5/index.js +1 -1
  65. package/schematics/ng-update/v5/index.js.map +1 -1
  66. package/schematics/ng-update/v6/changes.d.ts +2 -0
  67. package/schematics/ng-update/v6/changes.js +14 -0
  68. package/schematics/ng-update/v6/changes.js.map +1 -0
  69. package/schematics/ng-update/v6/index.d.ts +1 -0
  70. package/schematics/ng-update/v6/index.js +16 -0
  71. package/schematics/ng-update/v6/index.js.map +1 -0
  72. package/bundles/po-ui-ng-sync.umd.js +0 -3002
  73. package/bundles/po-ui-ng-sync.umd.js.map +0 -1
  74. package/esm2015/lib/models/po-entity/po-entity.model.js +0 -229
  75. package/esm2015/lib/models/po-query-builder/po-query-builder.model.js +0 -241
  76. package/esm2015/lib/po-sync.module.js +0 -31
  77. package/esm2015/lib/services/po-event-sourcing/po-event-sourcing.service.js +0 -411
  78. package/esm2015/lib/services/po-http-client/po-http-client.service.js +0 -147
  79. package/esm2015/lib/services/po-network/po-network.service.js +0 -58
  80. package/esm2015/lib/services/po-schema/po-schema-definition/po-schema-definition.service.js +0 -80
  81. package/esm2015/lib/services/po-schema/po-schema.service.js +0 -198
  82. package/esm2015/lib/services/po-sync/po-sync.service.js +0 -336
  83. package/esm2015/po-ui-ng-sync.js +0 -9
  84. package/fesm2015/po-ui-ng-sync.js.map +0 -1
  85. package/po-ui-ng-sync-5.22.1.tgz +0 -0
  86. package/po-ui-ng-sync.metadata.json +0 -1
File without changes
@@ -0,0 +1,214 @@
1
+ import { validateParameter } from '../../utils/utils';
2
+ import { PoEventSourcingOperation } from '../../services/po-event-sourcing';
3
+ import { PoQueryBuilder } from './../po-query-builder/po-query-builder.model';
4
+ import { PoSchemaUtil } from '../../services/po-schema';
5
+ /**
6
+ * @description
7
+ *
8
+ * Uma instância `PoEntity` representa um *schema* e ela contém métodos que possibilitam manipular seus registros,
9
+ * como por exemplo: buscar, criar e remover.
10
+ *
11
+ * Esta instância pode ser obtida a partir do retorno do método `PoSyncService.getModel('schema name')`.
12
+ */
13
+ export class PoEntity {
14
+ constructor(eventSourcing, schema, poSchemaService) {
15
+ this.eventSourcing = eventSourcing;
16
+ this.schema = schema;
17
+ this.poSchemaService = poSchemaService;
18
+ }
19
+ /**
20
+ * Busca os registros do *schema*, podendo filtrar o resultado a partir do filtro passado e retornando apenas
21
+ * os campos definidos.
22
+ *
23
+ * Para que esta busca seja concluída é necessário utilizar o método `PoQueryBuilder.exec()`.
24
+ * Veja mais em: [PoQueryBuilder](/documentation/po-query-builder).
25
+ *
26
+ * @param {object} filter Objeto que contém os campos e valores a serem filtrados no *schema*.
27
+ * @param {string} fields Campos que serão retornados nos registros. Este campos devem estar dentro de
28
+ * uma *string* separados por espaço podendo usar o caractere `-` para excluir campos.
29
+ * Por exemplo, a definição abaixo:
30
+ *
31
+ * ```
32
+ * PoQueryBuilder.select('name age address');
33
+ * ```
34
+ * Irá retornar apenas os campos `name`, `age` e `address`. E para não mostrar um campo ou mais basta fazer:
35
+ *
36
+ * ```
37
+ * PoQueryBuilder.select('-name -age');
38
+ * ```
39
+ * @returns {PoQueryBuilder} Objeto que possibilita encadear um método do `PoQueryBuilder`.
40
+ */
41
+ find(filter, fields) {
42
+ const query = new PoQueryBuilder(this.poSchemaService, this.schema);
43
+ if (filter) {
44
+ query.filter(filter);
45
+ }
46
+ if (fields) {
47
+ query.select(fields);
48
+ }
49
+ return query;
50
+ }
51
+ /**
52
+ * Busca um registro pelo seu *id*.
53
+ *
54
+ * Para que esta busca seja concluída é necessário utilizar o método `PoQueryBuilder.exec()`.
55
+ * Veja mais em: [PoQueryBuilder](/documentation/po-query-builder).
56
+ *
57
+ * @param {any} id Identificador do registro.
58
+ * @param {string} fields Campos que serão retornados nos registros. Este campos devem estar dentro de
59
+ * uma *string* separados por espaço podendo usar o caractere `-` para excluir campos.
60
+ * Por exemplo, a definição abaixo:
61
+ *
62
+ * ```
63
+ * PoQueryBuilder.select('name age address');
64
+ * ```
65
+ * Irá retornar apenas os campos `name`, `age` e `address`. E para não mostrar um campo ou mais basta fazer:
66
+ *
67
+ * ```
68
+ * PoQueryBuilder.select('-name -age');
69
+ * ```
70
+ * @returns {PoQueryBuilder} Objeto que possibilita encadear um método do `PoQueryBuilder`.
71
+ */
72
+ findById(id, fields) {
73
+ return this.findOne({ [this.schema.idField]: id }, fields);
74
+ }
75
+ /**
76
+ * Semelhante ao método `PoEntity.find()`, porém retorna apenas o primeiro registro encontrado na busca.
77
+ *
78
+ * Para que esta busca seja concluída é necessário utilizar o método `PoQueryBuilder.exec()`.
79
+ * Veja mais em: [PoQueryBuilder](/documentation/po-query-builder).
80
+ *
81
+ * @param {any} filter Objeto que contém os campos e valores a serem filtrados no *schema*.
82
+ * @param {string} fields Campos que serão retornados nos registros. Este campos devem estar dentro de
83
+ * uma *string* separados por espaço podendo usar o caractere `-` para excluir campos.
84
+ * Por exemplo, a definição abaixo:
85
+ *
86
+ * ```
87
+ * PoQueryBuilder.select('name age address');
88
+ * ```
89
+ * Irá retornar apenas os campos `name`, `age` e `address`. E para não mostrar um campo ou mais basta fazer:
90
+ *
91
+ * ```
92
+ * PoQueryBuilder.select('-name -age');
93
+ * ```
94
+ * @returns {PoQueryBuilder} Objeto que possibilita encadear um método do `PoQueryBuilder`.
95
+ */
96
+ findOne(filter, fields) {
97
+ const query = this.find(filter, fields);
98
+ query.limit(1);
99
+ return query;
100
+ }
101
+ /**
102
+ * Remove um registro.
103
+ *
104
+ * @param {object} record Registro que será removido.
105
+ * @param {string} customRequestId Identificador customizado do comando.
106
+ * @returns {Promise} Promessa que é concluída após o registro ser removido.
107
+ */
108
+ async remove(record, customRequestId) {
109
+ validateParameter({ record });
110
+ const remove = async () => {
111
+ const idField = record[this.schema.idField] ? this.schema.idField : PoSchemaUtil.syncInternalIdFieldName;
112
+ const serverRecord = PoSchemaUtil.separateSchemaFields(this.schema, record)['serverRecord'];
113
+ await this.poSchemaService.remove(this.schema.name, record[idField]);
114
+ await this.eventSourcing.remove(this.schema.name, serverRecord, customRequestId);
115
+ };
116
+ return this.poSchemaService.limitedCallWrap(remove);
117
+ }
118
+ /**
119
+ * Altera ou inclui um registro.
120
+ *
121
+ * > O registro será alterado se ele possuir um *id*, caso contrário um novo registro será criado.
122
+ *
123
+ * @param {object} record Registro que será persistido.
124
+ * @param {string} customRequestId Identificador customizado do comando.
125
+ * @returns {Promise} Promessa que é concluída após o registro ser alterado ou incluído.
126
+ */
127
+ async save(record, customRequestId) {
128
+ validateParameter({ record });
129
+ return this.poSchemaService.limitedCallWrap(this.selectSaveType.bind(this, record, true, customRequestId));
130
+ }
131
+ /**
132
+ * Salva uma lista de registros em lote.
133
+ *
134
+ * > Para cada registro da lista, será inserido um novo registro se o mesmo não tiver *id*, caso contrário
135
+ * será contado como uma atualização de um registro existente.
136
+ *
137
+ * @param {Array<object>} records Lista de registros que serão persistidos.
138
+ * @param {Array<string> | string} customRequestIds Identificador customizado do comando.
139
+ *
140
+ * Ao passar uma lista de identificadores, cada índice da lista de identificadores deverá
141
+ * corresponder ao índice do registro na lista de registros.
142
+ * @returns {Promise<any>} Promessa que é concluída após os registros serem alterados ou incluídos.
143
+ */
144
+ async saveAll(records, customRequestIds) {
145
+ validateParameter({ records });
146
+ const saveAll = async () => {
147
+ const batchEvents = [];
148
+ for (let index = 0; index < records.length; index++) {
149
+ const record = records[index];
150
+ const sendToEventSourcing = false;
151
+ const isNonLocalRecordChanged = await this.isNonLocalRecordChanged(record);
152
+ const updatedRecord = await this.selectSaveType(record, sendToEventSourcing);
153
+ if (isNonLocalRecordChanged) {
154
+ const customRequestId = customRequestIds instanceof Array ? customRequestIds[index] : customRequestIds;
155
+ const eventOperation = this.createEventOperation(record, updatedRecord, customRequestId);
156
+ batchEvents.push(eventOperation);
157
+ }
158
+ }
159
+ await this.eventSourcing.createBatchEvents(this.schema.name, batchEvents);
160
+ };
161
+ return this.poSchemaService.limitedCallWrap(saveAll);
162
+ }
163
+ async create(newRecord, sendToEventSourcing, customRequestId) {
164
+ const time = new Date().getTime();
165
+ const syncProperties = {
166
+ [PoSchemaUtil.syncInternalIdFieldName]: time,
167
+ SyncInsertedDateTime: time,
168
+ SyncUpdatedDateTime: null,
169
+ SyncExclusionDateTime: null,
170
+ SyncDeleted: false,
171
+ SyncStatus: 0
172
+ };
173
+ const recordWithSyncProperties = { ...newRecord, ...syncProperties };
174
+ const recordedData = await this.poSchemaService.create(this.schema, recordWithSyncProperties);
175
+ if (sendToEventSourcing) {
176
+ await this.eventSourcing.create(this.schema.name, recordWithSyncProperties, customRequestId);
177
+ }
178
+ return recordedData;
179
+ }
180
+ createEventOperation(record, updatedRecord, customRequestId) {
181
+ const operation = PoSchemaUtil.getRecordId(record, this.schema)
182
+ ? PoEventSourcingOperation.Update
183
+ : PoEventSourcingOperation.Insert;
184
+ const serverRecord = PoSchemaUtil.separateSchemaFields(this.schema, updatedRecord)['serverRecord'];
185
+ return {
186
+ record: serverRecord,
187
+ customRequestId: customRequestId,
188
+ operation: operation
189
+ };
190
+ }
191
+ async isNonLocalRecordChanged(updatedRecord) {
192
+ const nonLocalFieldNames = PoSchemaUtil.getNonLocalFieldNames(this.schema);
193
+ const record = await this.poSchemaService.get(this.schema.name, updatedRecord[this.schema.idField]);
194
+ return !PoSchemaUtil.isModelsEqual(nonLocalFieldNames, record, updatedRecord);
195
+ }
196
+ async selectSaveType(record, sendToEventSourcing, customRequestId) {
197
+ const hasId = PoSchemaUtil.getRecordId(record, this.schema);
198
+ return hasId
199
+ ? await this.update(record, sendToEventSourcing, customRequestId)
200
+ : await this.create(record, sendToEventSourcing, customRequestId);
201
+ }
202
+ async update(updatedRecord, sendToEventSourcing, customRequestId) {
203
+ updatedRecord.SyncUpdatedDateTime = new Date().getTime();
204
+ updatedRecord.SyncStatus = 0;
205
+ const isNonLocalRecordChanged = await this.isNonLocalRecordChanged(updatedRecord);
206
+ const recordedData = await this.poSchemaService.update(this.schema, updatedRecord);
207
+ if (isNonLocalRecordChanged && sendToEventSourcing) {
208
+ const serverRecord = PoSchemaUtil.separateSchemaFields(this.schema, updatedRecord)['serverRecord'];
209
+ await this.eventSourcing.update(this.schema.name, serverRecord, customRequestId);
210
+ }
211
+ return recordedData;
212
+ }
213
+ }
214
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZW50aXR5Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3luYy9zcmMvbGliL21vZGVscy9wby1lbnRpdHkvcG8tZW50aXR5Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXRELE9BQU8sRUFDTCx3QkFBd0IsRUFHekIsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDOUUsT0FBTyxFQUFtQixZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUd6RTs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFDbkIsWUFDVSxhQUFxQyxFQUNyQyxNQUFvQixFQUNwQixlQUFnQztRQUZoQyxrQkFBYSxHQUFiLGFBQWEsQ0FBd0I7UUFDckMsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUNwQixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7SUFDdkMsQ0FBQztJQUVKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FxQkc7SUFDSCxJQUFJLENBQUMsTUFBZSxFQUFFLE1BQWU7UUFDbkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFcEUsSUFBSSxNQUFNLEVBQUU7WUFDVixLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3RCO1FBRUQsSUFBSSxNQUFNLEVBQUU7WUFDVixLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3RCO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bb0JHO0lBQ0gsUUFBUSxDQUFDLEVBQU8sRUFBRSxNQUFlO1FBQy9CLE9BQU8sSUFBSSxD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QUFDO1lBQ2pFLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLG1CQUFtQixFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFTyxLQUFLLENBQUMsTUFBTSxDQUFDLGFBQWtCLEVBQUUsbUJBQTRCLEVBQUUsZUFBd0I7UUFDN0YsYUFBYSxDQUFDLG1CQUFtQixHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDekQsYUFBYSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFFN0IsTUFBTSx1QkFBdUIsR0FBRyxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsRixNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFbkYsSUFBSSx1QkFBdUIsSUFBSSxtQkFBbUIsRUFBRTtZQUNsRCxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNuRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQztTQUNsRjtRQUVELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHZhbGlkYXRlUGFyYW1ldGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnO1xuXG5pbXBvcnQge1xuICBQb0V2ZW50U291cmNpbmdPcGVyYXRpb24sXG4gIFBvRXZlbnRTb3VyY2luZ1NlcnZpY2UsXG4gIFBvRXZlbnRTb3VyY2luZ1N1bW1hcnlJdGVtXG59IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BvLWV2ZW50LXNvdXJjaW5nJztcbmltcG9ydCB7IFBvUXVlcnlCdWlsZGVyIH0gZnJvbSAnLi8uLi9wby1xdWVyeS1idWlsZGVyL3BvLXF1ZXJ5LWJ1aWxkZXIubW9kZWwnO1xuaW1wb3J0IHsgUG9TY2hlbWFTZXJ2aWNlLCBQb1NjaGVtYVV0aWwgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wby1zY2hlbWEnO1xuaW1wb3J0IHsgUG9TeW5jU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG8tc3luYy9pbnRlcmZhY2VzL3BvLXN5bmMtc2NoZW1hLmludGVyZmFjZSc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogVW1hIGluc3TDom5jaWEgYFBvRW50aXR5YCByZXByZXNlbnRhIHVtICpzY2hlbWEqIGUgZWxhIGNvbnTDqW0gbcOpdG9kb3MgcXVlIHBvc3NpYmlsaXRhbSBtYW5pcHVsYXIgc2V1cyByZWdpc3Ryb3MsXG4gKiBjb21vIHBvciBleGVtcGxvOiBidXNjYXIsIGNyaWFyIGUgcmVtb3Zlci5cbiAqXG4gKiBFc3RhIGluc3TDom5jaWEgcG9kZSBzZXIgb2J0aWRhIGEgcGFydGlyIGRvIHJldG9ybm8gZG8gbcOpdG9kbyBgUG9TeW5jU2VydmljZS5nZXRNb2RlbCgnc2NoZW1hIG5hbWUnKWAuXG4gKi9cbmV4cG9ydCBjbGFzcyBQb0VudGl0eSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZXZlbnRTb3VyY2luZzogUG9FdmVudFNvdXJjaW5nU2VydmljZSxcbiAgICBwcml2YXRlIHNjaGVtYTogUG9TeW5jU2NoZW1hLFxuICAgIHByaXZhdGUgcG9TY2hlbWFTZXJ2aWNlOiBQb1NjaGVtYVNlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBCdXNjYSBvcyByZWdpc3Ryb3MgZG8gKnNjaGVtYSosIHBvZGVuZG8gZmlsdHJhciBvIHJlc3VsdGFkbyBhIHBhcnRpciBkbyBmaWx0cm8gcGFzc2FkbyBlIHJldG9ybmFuZG8gYXBlbmFzXG4gICAqIG9zIGNhbXBvcyBkZWZpbmlkb3MuXG4gICAqXG4gICAqIFBhcmEgcXVlIGVzdGEgYnVzY2Egc2VqYSBjb25jbHXDrWRhIMOpIG5lY2Vzc8OhcmlvIHV0aWxpemFyIG8gbcOpdG9kbyBgUG9RdWVyeUJ1aWxkZXIuZXhlYygpYC5cbiAgICogVmVqYSBtYWlzIGVtOiBbUG9RdWVyeUJ1aWxkZXJdKC9kb2N1bWVudGF0aW9uL3BvLXF1ZXJ5LWJ1aWxkZXIpLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZmlsdGVyIE9iamV0byBxdWUgY29udMOpbSBvcyBjYW1wb3MgZSB2YWxvcmVzIGEgc2VyZW0gZmlsdHJhZG9zIG5vICpzY2hlbWEqLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGRzIENhbXBvcyBxdWUgc2Vyw6NvIHJldG9ybmFkb3Mgbm9zIHJlZ2lzdHJvcy4gRXN0ZSBjYW1wb3MgZGV2ZW0gZXN0YXIgZGVudHJvIGRlXG4gICAqIHVtYSAqc3RyaW5nKiBzZXBhcmFkb3MgcG9yIGVzcGHDp28gcG9kZW5kbyB1c2FyIG8gY2FyYWN0ZXJlIGAtYCBwYXJhIGV4Y2x1aXIgY2FtcG9zLlxuICAgKiBQb3IgZXhlbXBsbywgYSBkZWZpbmnDp8OjbyBhYmFpeG86XG4gICAqXG4gICAqIGBgYFxuICAgKiBQb1F1ZXJ5QnVpbGRlci5zZWxlY3QoJ25hbWUgYWdlIGFkZHJlc3MnKTtcbiAgICogYGBgXG4gICAqIElyw6EgcmV0b3JuYXIgYXBlbmFzIG9zIGNhbXBvcyBgbmFtZWAsIGBhZ2VgIGUgYGFkZHJlc3NgLiBFIHBhcmEgbsOjbyBtb3N0cmFyIHVtIGNhbXBvIG91IG1haXMgYmFzdGEgZmF6ZXI6XG4gICAqXG4gICAqIGBgYFxuICAgKiBQb1F1ZXJ5QnVpbGRlci5zZWxlY3QoJy1uYW1lIC1hZ2UnKTtcbiAgICogYGBgXG4gICAqIEByZXR1cm5zIHtQb1F1ZXJ5QnVpbGRlcn0gT2JqZXRvIHF1ZSBwb3NzaWJpbGl0YSBlbmNhZGVhciB1bSBtw6l0b2RvIGRvIGBQb1F1ZXJ5QnVpbGRlcmAuXG4gICAqL1xuICBmaW5kKGZpbHRlcj86IG9iamVjdCwgZmllbGRzPzogc3RyaW5nKTogUG9RdWVyeUJ1aWxkZXIge1xuICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IFBvUXVlcnlCdWlsZGVyKHRoaXMucG9TY2hlbWFTZXJ2aWNlLCB0aGlzLnNjaGVtYSk7XG5cbiAgICBpZiAoZmlsdGVyKSB7XG4gICAgICBxdWVyeS5maWx0ZXIoZmlsdGVyKTtcbiAgICB9XG5cbiAgICBpZiAoZmllbGRzKSB7XG4gICAgICBxdWVyeS5zZWxlY3QoZmllbGRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogQnVzY2EgdW0gcmVnaXN0cm8gcGVsbyBzZXUgKmlkKi5cbiAgICpcbiAgICogUGFyYSBxdWUgZXN0YSBidXNjYSBzZWphIGNvbmNsdcOtZGEgw6kgbmVjZXNzw6FyaW8gdXRpbGl6YXIgbyBtw6l0b2RvIGBQb1F1ZXJ5QnVpbGRlci5leGVjKClgLlxuICAgKiBWZWphIG1haXMgZW06IFtQb1F1ZXJ5QnVpbGRlcl0oL2RvY3VtZW50YXRpb24vcG8tcXVlcnktYnVpbGRlcikuXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSBpZCBJZGVudGlmaWNhZG9yIGRvIHJlZ2lzdHJvLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGRzIENhbXBvcyBxdWUgc2Vyw6NvIHJldG9ybmFkb3Mgbm9zIHJlZ2lzdHJvcy4gRXN0ZSBjYW1wb3MgZGV2ZW0gZXN0YXIgZGVudHJvIGRlXG4gICAqIHVtYSAqc3RyaW5nKiBzZXBhcmFkb3MgcG9yIGVzcGHDp28gcG9kZW5kbyB1c2FyIG8gY2FyYWN0ZXJlIGAtYCBwYXJhIGV4Y2x1aXIgY2FtcG9zLlxuICAgKiBQb3IgZXhlbXBsbywgYSBkZWZpbmnDp8OjbyBhYmFpeG86XG4gICAqXG4gICAqIGBgYFxuICAgKiBQb1F1ZXJ5QnVpbGRlci5zZWxlY3QoJ25hbWUgYWdlIGFkZHJlc3MnKTtcbiAgICogYGBgXG4gICAqIElyw6EgcmV0b3JuYXIgYXBlbmFzIG9zIGNhbXBvcyBgbmFtZWAsIGBhZ2VgIGUgYGFkZHJlc3NgLiBFIHBhcmEgbsOjbyBtb3N0cmFyIHVtIGNhbXBvIG91IG1haXMgYmFzdGEgZmF6ZXI6XG4gICAqXG4gICAqIGBgYFxuICAgKiBQb1F1ZXJ5QnVpbGRlci5zZWxlY3QoJy1uYW1lIC1hZ2UnKTtcbiAgICogYGBgXG4gICAqIEByZXR1cm5zIHtQb1F1ZXJ5QnVpbGRlcn0gT2JqZXRvIHF1ZSBwb3NzaWJpbGl0YSBlbmNhZGVhciB1bSBtw6l0b2RvIGRvIGBQb1F1ZXJ5QnVpbGRlcmAuXG4gICAqL1xuICBmaW5kQnlJZChpZDogYW55LCBmaWVsZHM/OiBzdHJpbmcpOiBQb1F1ZXJ5QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuZmluZE9uZSh7IFt0aGlzLnNjaGVtYS5pZEZpZWxkXTogaWQgfSwgZmllbGRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW1lbGhhbnRlIGFvIG3DqXRvZG8gYFBvRW50aXR5LmZpbmQoKWAsIHBvcsOpbSByZXRvcm5hIGFwZW5hcyBvIHByaW1laXJvIHJlZ2lzdHJvIGVuY29udHJhZG8gbmEgYnVzY2EuXG4gICAqXG4gICAqIFBhcmEgcXVlIGVzdGEgYnVzY2Egc2VqYSBjb25jbHXDrWRhIMOpIG5lY2Vzc8OhcmlvIHV0aWxpemFyIG8gbcOpdG9kbyBgUG9RdWVyeUJ1aWxkZXIuZXhlYygpYC5cbiAgICogVmVqYSBtYWlzIGVtOiBbUG9RdWVyeUJ1aWxkZXJdKC9kb2N1bWVudGF0aW9uL3BvLXF1ZXJ5LWJ1aWxkZXIpLlxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gZmlsdGVyIE9iamV0byBxdWUgY29udMOpbSBvcyBjYW1wb3MgZSB2YWxvcmVzIGEgc2VyZW0gZmlsdHJhZG9zIG5vICpzY2hlbWEqLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGRzIENhbXBvcyBxdWUgc2Vyw6NvIHJldG9ybmFkb3Mgbm9zIHJlZ2lzdHJvcy4gRXN0ZSBjYW1wb3MgZGV2ZW0gZXN0YXIgZGVudHJvIGRlXG4gICAqIHVtYSAqc3RyaW5nKiBzZXBhcmFkb3MgcG9yIGVzcGHDp28gcG9kZW5kbyB1c2FyIG8gY2FyYWN0ZXJlIGAtYCBwYXJhIGV4Y2x1aXIgY2FtcG9zLlxuICAgKiBQb3IgZXhlbXBsbywgYSBkZWZpbmnDp8OjbyBhYmFpeG86XG4gICAqXG4gICAqIGBgYFxuICAgKiBQb1F1ZXJ5QnVpbGRlci5zZWxlY3QoJ25hbWUgYWdlIGFkZHJlc3MnKTtcbiAgICogYGBgXG4gICAqIElyw6EgcmV0b3JuYXIgYXBlbmFzIG9zIGNhbXBvcyBgbmFtZWAsIGBhZ2VgIGUgYGFkZHJlc3NgLiBFIHBhcmEgbsOjbyBtb3N0cmFyIHVtIGNhbXBvIG91IG1haXMgYmFzdGEgZmF6ZXI6XG4gICAqXG4gICAqIGBgYFxuICAgKiBQb1F1ZXJ5QnVpbGRlci5zZWxlY3QoJy1uYW1lIC1hZ2UnKTtcbiAgICogYGBgXG4gICAqIEByZXR1cm5zIHtQb1F1ZXJ5QnVpbGRlcn0gT2JqZXRvIHF1ZSBwb3NzaWJpbGl0YSBlbmNhZGVhciB1bSBtw6l0b2RvIGRvIGBQb1F1ZXJ5QnVpbGRlcmAuXG4gICAqL1xuICBmaW5kT25lKGZpbHRlcj86IGFueSwgZmllbGRzPzogc3RyaW5nKTogUG9RdWVyeUJ1aWxkZXIge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5maW5kKGZpbHRlciwgZmllbGRzKTtcbiAgICBxdWVyeS5saW1pdCgxKTtcbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHVtIHJlZ2lzdHJvLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcmVjb3JkIFJlZ2lzdHJvIHF1ZSBzZXLDoSByZW1vdmlkby5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGN1c3RvbVJlcXVlc3RJZCBJZGVudGlmaWNhZG9yIGN1c3RvbWl6YWRvIGRvIGNvbWFuZG8uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9tZXNzYSBxdWUgw6kgY29uY2x1w61kYSBhcMOzcyBvIHJlZ2lzdHJvIHNlciByZW1vdmlkby5cbiAgICovXG4gIGFzeW5jIHJlbW92ZShyZWNvcmQ6IG9iamVjdCwgY3VzdG9tUmVxdWVzdElkPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICB2YWxpZGF0ZVBhcmFtZXRlcih7IHJlY29yZCB9KTtcblxuICAgIGNvbnN0IHJlbW92ZSA9IGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGlkRmllbGQgPSByZWNvcmRbdGhpcy5zY2hlbWEuaWRGaWVsZF0gPyB0aGlzLnNjaGVtYS5pZEZpZWxkIDogUG9TY2hlbWFVdGlsLnN5bmNJbnRlcm5hbElkRmllbGROYW1lO1xuICAgICAgY29uc3Qgc2VydmVyUmVjb3JkID0gUG9TY2hlbWFVdGlsLnNlcGFyYXRlU2NoZW1hRmllbGRzKHRoaXMuc2NoZW1hLCByZWNvcmQpWydzZXJ2ZXJSZWNvcmQnXTtcblxuICAgICAgYXdhaXQgdGhpcy5wb1NjaGVtYVNlcnZpY2UucmVtb3ZlKHRoaXMuc2NoZW1hLm5hbWUsIHJlY29yZFtpZEZpZWxkXSk7XG4gICAgICBhd2FpdCB0aGlzLmV2ZW50U291cmNpbmcucmVtb3ZlKHRoaXMuc2NoZW1hLm5hbWUsIHNlcnZlclJlY29yZCwgY3VzdG9tUmVxdWVzdElkKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMucG9TY2hlbWFTZXJ2aWNlLmxpbWl0ZWRDYWxsV3JhcChyZW1vdmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsdGVyYSBvdSBpbmNsdWkgdW0gcmVnaXN0cm8uXG4gICAqXG4gICAqID4gTyByZWdpc3RybyBzZXLDoSBhbHRlcmFkbyBzZSBlbGUgcG9zc3VpciB1bSAqaWQqLCBjYXNvIGNvbnRyw6FyaW8gdW0gbm92byByZWdpc3RybyBzZXLDoSBjcmlhZG8uXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWNvcmQgUmVnaXN0cm8gcXVlIHNlcsOhIHBlcnNpc3RpZG8uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXN0b21SZXF1ZXN0SWQgSWRlbnRpZmljYWRvciBjdXN0b21pemFkbyBkbyBjb21hbmRvLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWVzc2EgcXVlIMOpIGNvbmNsdcOtZGEgYXDDs3MgbyByZWdpc3RybyBzZXIgYWx0ZXJhZG8gb3UgaW5jbHXDrWRvLlxuICAgKi9cbiAgYXN5bmMgc2F2ZShyZWNvcmQ6IG9iamVjdCwgY3VzdG9tUmVxdWVzdElkPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICB2YWxpZGF0ZVBhcmFtZXRlcih7IHJlY29yZCB9KTtcblxuICAgIHJldHVybiB0aGlzLnBvU2NoZW1hU2VydmljZS5saW1pdGVkQ2FsbFdyYXAodGhpcy5zZWxlY3RTYXZlVHlwZS5iaW5kKHRoaXMsIHJlY29yZCwgdHJ1ZSwgY3VzdG9tUmVxdWVzdElkKSk7XG4gIH1cblxuICAvKipcbiAgICogU2FsdmEgdW1hIGxpc3RhIGRlIHJlZ2lzdHJvcyBlbSBsb3RlLlxuICAgKlxuICAgKiA+IFBhcmEgY2FkYSByZWdpc3RybyBkYSBsaXN0YSwgc2Vyw6EgaW5zZXJpZG8gdW0gbm92byByZWdpc3RybyBzZSBvIG1lc21vIG7Do28gdGl2ZXIgKmlkKiwgY2FzbyBjb250csOhcmlvXG4gICAqIHNlcsOhIGNvbnRhZG8gY29tbyB1bWEgYXR1YWxpemHDp8OjbyBkZSB1bSByZWdpc3RybyBleGlzdGVudGUuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8b2JqZWN0Pn0gcmVjb3JkcyBMaXN0YSBkZSByZWdpc3Ryb3MgcXVlIHNlcsOjbyBwZXJzaXN0aWRvcy5cbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+IHwgc3RyaW5nfSBjdXN0b21SZXF1ZXN0SWRzIElkZW50aWZpY2Fkb3IgY3VzdG9taXphZG8gZG8gY29tYW5kby5cbiAgICpcbiAgICogQW8gcGFzc2FyIHVtYSBsaXN0YSBkZSBpZGVudGlmaWNhZG9yZXMsIGNhZGEgw61uZGljZSBkYSBsaXN0YSBkZSBpZGVudGlmaWNhZG9yZXMgZGV2ZXLDoVxuICAgKiBjb3JyZXNwb25kZXIgYW8gw61uZGljZSBkbyByZWdpc3RybyBuYSBsaXN0YSBkZSByZWdpc3Ryb3MuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59IFByb21lc3NhIHF1ZSDDqSBjb25jbHXDrWRhIGFww7NzIG9zIHJlZ2lzdHJvcyBzZXJlbSBhbHRlcmFkb3Mgb3UgaW5jbHXDrWRvcy5cbiAgICovXG4gIGFzeW5jIHNhdmVBbGwocmVjb3JkczogQXJyYXk8b2JqZWN0PiwgY3VzdG9tUmVxdWVzdElkcz86IEFycmF5PHN0cmluZz4gfCBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHZhbGlkYXRlUGFyYW1ldGVyKHsgcmVjb3JkcyB9KTtcblxuICAgIGNvbnN0IHNhdmVBbGwgPSBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBiYXRjaEV2ZW50cyA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcmVjb3Jkcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gcmVjb3Jkc1tpbmRleF07XG4gICAgICAgIGNvbnN0IHNlbmRUb0V2ZW50U291cmNpbmcgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBpc05vbkxvY2FsUmVjb3JkQ2hhbmdlZCA9IGF3YWl0IHRoaXMuaXNOb25Mb2NhbFJlY29yZENoYW5nZWQocmVjb3JkKTtcbiAgICAgICAgY29uc3QgdXBkYXRlZFJlY29yZCA9IGF3YWl0IHRoaXMuc2VsZWN0U2F2ZVR5cGUocmVjb3JkLCBzZW5kVG9FdmVudFNvdXJjaW5nKTtcblxuICAgICAgICBpZiAoaXNOb25Mb2NhbFJlY29yZENoYW5nZWQpIHtcbiAgICAgICAgICBjb25zdCBjdXN0b21SZXF1ZXN0SWQgPSBjdXN0b21SZXF1ZXN0SWRzIGluc3RhbmNlb2YgQXJyYXkgPyBjdXN0b21SZXF1ZXN0SWRzW2luZGV4XSA6IGN1c3RvbVJlcXVlc3RJZHM7XG4gICAgICAgICAgY29uc3QgZXZlbnRPcGVyYXRpb24gPSB0aGlzLmNyZWF0ZUV2ZW50T3BlcmF0aW9uKHJlY29yZCwgdXBkYXRlZFJlY29yZCwgY3VzdG9tUmVxdWVzdElkKTtcbiAgICAgICAgICBiYXRjaEV2ZW50cy5wdXNoKGV2ZW50T3BlcmF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLmV2ZW50U291cmNpbmcuY3JlYXRlQmF0Y2hFdmVudHModGhpcy5zY2hlbWEubmFtZSwgYmF0Y2hFdmVudHMpO1xuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5wb1NjaGVtYVNlcnZpY2UubGltaXRlZENhbGxXcmFwKHNhdmVBbGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGUobmV3UmVjb3JkOiBhbnksIHNlbmRUb0V2ZW50U291cmNpbmc6IGJvb2xlYW4sIGN1c3RvbVJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgdGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuXG4gICAgY29uc3Qgc3luY1Byb3BlcnRpZXMgPSB7XG4gICAgICBbUG9TY2hlbWFVdGlsLnN5bmNJbnRlcm5hbElkRmllbGROYW1lXTogdGltZSxcbiAgICAgIFN5bmNJbnNlcnRlZERhdGVUaW1lOiB0aW1lLFxuICAgICAgU3luY1VwZGF0ZWREYXRlVGltZTogbnVsbCxcbiAgICAgIFN5bmNFeGNsdXNpb25EYXRlVGltZTogbnVsbCxcbiAgICAgIFN5bmNEZWxldGVkOiBmYWxzZSxcbiAgICAgIFN5bmNTdGF0dXM6IDBcbiAgICB9O1xuICAgIGNvbnN0IHJlY29yZFdpdGhTeW5jUHJvcGVydGllcyA9IHsgLi4ubmV3UmVjb3JkLCAuLi5zeW5jUHJvcGVydGllcyB9O1xuXG4gICAgY29uc3QgcmVjb3JkZWREYXRhID0gYXdhaXQgdGhpcy5wb1NjaGVtYVNlcnZpY2UuY3JlYXRlKHRoaXMuc2NoZW1hLCByZWNvcmRXaXRoU3luY1Byb3BlcnRpZXMpO1xuXG4gICAgaWYgKHNlbmRUb0V2ZW50U291cmNpbmcpIHtcbiAgICAgIGF3YWl0IHRoaXMuZXZlbnRTb3VyY2luZy5jcmVhdGUodGhpcy5zY2hlbWEubmFtZSwgcmVjb3JkV2l0aFN5bmNQcm9wZXJ0aWVzLCBjdXN0b21SZXF1ZXN0SWQpO1xuICAgIH1cblxuICAgIHJldHVybiByZWNvcmRlZERhdGE7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUV2ZW50T3BlcmF0aW9uKFxuICAgIHJlY29yZDogb2JqZWN0LFxuICAgIHVwZGF0ZWRSZWNvcmQ6IG9iamVjdCxcbiAgICBjdXN0b21SZXF1ZXN0SWQ/OiBzdHJpbmdcbiAgKTogUG9FdmVudFNvdXJjaW5nU3VtbWFyeUl0ZW0ge1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IFBvU2NoZW1hVXRpbC5nZXRSZWNvcmRJZChyZWNvcmQsIHRoaXMuc2NoZW1hKVxuICAgICAgPyBQb0V2ZW50U291cmNpbmdPcGVyYXRpb24uVXBkYXRlXG4gICAgICA6IFBvRXZlbnRTb3VyY2luZ09wZXJhdGlvbi5JbnNlcnQ7XG5cbiAgICBjb25zdCBzZXJ2ZXJSZWNvcmQgPSBQb1NjaGVtYVV0aWwuc2VwYXJhdGVTY2hlbWFGaWVsZHModGhpcy5zY2hlbWEsIHVwZGF0ZWRSZWNvcmQpWydzZXJ2ZXJSZWNvcmQnXTtcblxuICAgIHJldHVybiB7XG4gICAgICByZWNvcmQ6IHNlcnZlclJlY29yZCxcbiAgICAgIGN1c3RvbVJlcXVlc3RJZDogY3VzdG9tUmVxdWVzdElkLFxuICAgICAgb3BlcmF0aW9uOiBvcGVyYXRpb25cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpc05vbkxvY2FsUmVjb3JkQ2hhbmdlZCh1cGRhdGVkUmVjb3JkOiBvYmplY3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBub25Mb2NhbEZpZWxkTmFtZXMgPSBQb1NjaGVtYVV0aWwuZ2V0Tm9uTG9jYWxGaWVsZE5hbWVzKHRoaXMuc2NoZW1hKTtcbiAgICBjb25zdCByZWNvcmQgPSBhd2FpdCB0aGlzLnBvU2NoZW1hU2VydmljZS5nZXQodGhpcy5zY2hlbWEubmFtZSwgdXBkYXRlZFJlY29yZFt0aGlzLnNjaGVtYS5pZEZpZWxkXSk7XG5cbiAgICByZXR1cm4gIVBvU2NoZW1hVXRpbC5pc01vZGVsc0VxdWFsKG5vbkxvY2FsRmllbGROYW1lcywgcmVjb3JkLCB1cGRhdGVkUmVjb3JkKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VsZWN0U2F2ZVR5cGUoXG4gICAgcmVjb3JkOiBvYmplY3QsXG4gICAgc2VuZFRvRXZlbnRTb3VyY2luZzogYm9vbGVhbixcbiAgICBjdXN0b21SZXF1ZXN0SWQ/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxvYmplY3Q+IHtcbiAgICBjb25zdCBoYXNJZCA9IFBvU2NoZW1hVXRpbC5nZXRSZWNvcmRJZChyZWNvcmQsIHRoaXMuc2NoZW1hKTtcblxuICAgIHJldHVybiBoYXNJZFxuICAgICAgPyBhd2FpdCB0aGlzLnVwZGF0ZShyZWNvcmQsIHNlbmRUb0V2ZW50U291cmNpbmcsIGN1c3RvbVJlcXVlc3RJZClcbiAgICAgIDogYXdhaXQgdGhpcy5jcmVhdGUocmVjb3JkLCBzZW5kVG9FdmVudFNvdXJjaW5nLCBjdXN0b21SZXF1ZXN0SWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGUodXBkYXRlZFJlY29yZDogYW55LCBzZW5kVG9FdmVudFNvdXJjaW5nOiBib29sZWFuLCBjdXN0b21SZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIHVwZGF0ZWRSZWNvcmQuU3luY1VwZGF0ZWREYXRlVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIHVwZGF0ZWRSZWNvcmQuU3luY1N0YXR1cyA9IDA7XG5cbiAgICBjb25zdCBpc05vbkxvY2FsUmVjb3JkQ2hhbmdlZCA9IGF3YWl0IHRoaXMuaXNOb25Mb2NhbFJlY29yZENoYW5nZWQodXBkYXRlZFJlY29yZCk7XG4gICAgY29uc3QgcmVjb3JkZWREYXRhID0gYXdhaXQgdGhpcy5wb1NjaGVtYVNlcnZpY2UudXBkYXRlKHRoaXMuc2NoZW1hLCB1cGRhdGVkUmVjb3JkKTtcblxuICAgIGlmIChpc05vbkxvY2FsUmVjb3JkQ2hhbmdlZCAmJiBzZW5kVG9FdmVudFNvdXJjaW5nKSB7XG4gICAgICBjb25zdCBzZXJ2ZXJSZWNvcmQgPSBQb1NjaGVtYVV0aWwuc2VwYXJhdGVTY2hlbWFGaWVsZHModGhpcy5zY2hlbWEsIHVwZGF0ZWRSZWNvcmQpWydzZXJ2ZXJSZWNvcmQnXTtcbiAgICAgIGF3YWl0IHRoaXMuZXZlbnRTb3VyY2luZy51cGRhdGUodGhpcy5zY2hlbWEubmFtZSwgc2VydmVyUmVjb3JkLCBjdXN0b21SZXF1ZXN0SWQpO1xuICAgIH1cblxuICAgIHJldHVybiByZWNvcmRlZERhdGE7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,238 @@
1
+ import { validateParameter } from '../../utils/utils';
2
+ /**
3
+ * @description
4
+ *
5
+ * Classe utilitária para construir consultas sobre os registros de um *schema*.
6
+ *
7
+ * A utilização dos métodos desta classe é feita a partir do retorno do método `PoEntity.find()`. Por exemplo,
8
+ * para utilizar o método `PoQueryBuilder.page()`, é necessário:
9
+ *
10
+ * ``` typescript
11
+ * PoSyncService.getModel('schema name').find().page(2).exec();
12
+ * ```
13
+ *
14
+ * O `PoQueryBuilder` foi projetado para que os seus métodos sejam
15
+ * chamados em cascata e ao final desse encadeamento invocar o método
16
+ * `PoQueryBuilder.exec()` para que a busca seja concluída. Por exemplo:
17
+ *
18
+ * ``` typescript
19
+ * PoSyncService
20
+ * .getModel('schema name')
21
+ * .find()
22
+ * .page(2)
23
+ * .pageSize(5)
24
+ * .sort()
25
+ * .exec();
26
+ * ```
27
+ */
28
+ export class PoQueryBuilder {
29
+ constructor(poSchemaService, schema) {
30
+ this.poSchemaService = poSchemaService;
31
+ this.schema = schema;
32
+ this._page = 1;
33
+ this.filters = {};
34
+ }
35
+ /**
36
+ * Ao final da chamada dos métodos do `PoQueryBuilder` utilizados, este método deve ser chamado para que a busca seja concluída.
37
+ *
38
+ * @return {Promise<PoResponseApi | object>} Registros do *schema* na qual foi aplicado a consulta.
39
+ */
40
+ async exec() {
41
+ let storageData = await this.poSchemaService.getAll(this.schema.name);
42
+ if (storageData && storageData.length) {
43
+ if (Object.keys(this.filters).length) {
44
+ storageData = this.applyFilters(storageData);
45
+ }
46
+ if (this.fields) {
47
+ storageData = this.applyFields(this.schema.fields, storageData);
48
+ }
49
+ if (this._sort) {
50
+ storageData = this.order(storageData, this._sort);
51
+ }
52
+ if (this._limit) {
53
+ return storageData[0];
54
+ }
55
+ else {
56
+ return this.paginate(storageData);
57
+ }
58
+ }
59
+ else {
60
+ return {
61
+ hasNext: false,
62
+ items: []
63
+ };
64
+ }
65
+ }
66
+ /**
67
+ * Aplica filtros sobre os registros, baseados nos campos e valores definidos como filtro. Por exemplo:
68
+ *
69
+ * ```
70
+ * PoQueryBuilder.filter({ name: 'Marie', age: 24 });
71
+ * ```
72
+ * Retorna todos os registros que contenham a propriedade `name` igual a Marie e `age` igual a 24.
73
+ *
74
+ * @param {object} filter Objeto que contém os campos e valores a serem filtrados no *schema*.
75
+ *
76
+ * @returns {PoQueryBuilder} Objeto que possibilita encadear um novo método do `PoQueryBuilder`.
77
+ */
78
+ filter(filter) {
79
+ if (filter && typeof filter === 'object') {
80
+ this.filters = { ...this.filters, ...filter };
81
+ }
82
+ else {
83
+ throw new Error('Filter must be an object');
84
+ }
85
+ return this;
86
+ }
87
+ /**
88
+ * Limita o número de registros que serão retornados.
89
+ *
90
+ * @param {number} limit Número de registros retornados.
91
+ * @returns {PoQueryBuilder} Objeto que possibilita encadear um novo método do `PoQueryBuilder`.
92
+ */
93
+ limit(limit) {
94
+ this._limit = limit;
95
+ return this;
96
+ }
97
+ /**
98
+ * Especifica a página de registros que se deseja retornar.
99
+ *
100
+ * @param {number} page Número da página.
101
+ * @returns {PoQueryBuilder} Objeto que possibilita encadear um novo método do `PoQueryBuilder`.
102
+ */
103
+ page(page) {
104
+ validateParameter({ page });
105
+ this._page = page;
106
+ return this;
107
+ }
108
+ /**
109
+ * Define quantos elementos serão retornados por página.
110
+ *
111
+ * @param {number} pageSize Número de registros por página.
112
+ * @returns {PoQueryBuilder} Objeto que possibilita encadear um novo método do `PoQueryBuilder`.
113
+ */
114
+ pageSize(pageSize) {
115
+ validateParameter({ pageSize });
116
+ this._pageSize = pageSize;
117
+ return this;
118
+ }
119
+ /**
120
+ * Utilizado para definir quais campos do *schema* serão retornados na consulta.
121
+ *
122
+ * @param {string} fields Campos que serão retornados nos registros. Este campos devem estar dentro de
123
+ * uma *string* separados por espaço podendo usar o caractere `-` para excluir campos.
124
+ * Por exemplo, a definição abaixo:
125
+ *
126
+ * ```
127
+ * PoQueryBuilder.select('name age address');
128
+ * ```
129
+ * Irá retornar apenas os campos `name`, `age` e `address`. Para não retornar um campo ou mais basta fazer:
130
+ *
131
+ * ```
132
+ * PoQueryBuilder.select('-name -age');
133
+ * ```
134
+ *
135
+ * @returns {PoQueryBuilder} Objeto que possibilita encadear um novo método do `PoQueryBuilder`.
136
+ */
137
+ select(fields) {
138
+ validateParameter({ fields });
139
+ this.fields = fields;
140
+ return this;
141
+ }
142
+ /**
143
+ * Ordena os registros por um campo.
144
+ *
145
+ * @param {string} field Campo a ser ordenado. Para ordenar de forma decrescente basta colocar o caractere `-`
146
+ * na frente do campo. Por exemplo:
147
+ * ```
148
+ * PoQueryBuilder.sort('-name');
149
+ * ```
150
+ *
151
+ * @returns {PoQueryBuilder} Objeto que possibilita encadear um novo método do `PoQueryBuilder`.
152
+ */
153
+ sort(field) {
154
+ validateParameter({ field });
155
+ this._sort = field;
156
+ return this;
157
+ }
158
+ /**
159
+ * Essa função serve como alias para o `PoQueryBuilder.filter()`. É utilizada somente para dar maior legibilidade ao código.
160
+ *
161
+ * @param {object} filter Objeto que contém os campos e valores a serem filtrados no *schema*.
162
+ * @returns {PoQueryBuilder} Objeto que possibilita encadear um novo método do `PoQueryBuilder`.
163
+ */
164
+ where(filter) {
165
+ return this.filter(filter);
166
+ }
167
+ applyFields(schemaFields, data) {
168
+ const receivedFields = this.fields.split(' ');
169
+ let restrictedFields = [];
170
+ let selectedFields = [];
171
+ [selectedFields, restrictedFields] = this.groupFields(receivedFields);
172
+ if (!selectedFields.length && restrictedFields.length) {
173
+ selectedFields = [...schemaFields];
174
+ }
175
+ if (restrictedFields.length) {
176
+ selectedFields = this.removeRestrictedFields(restrictedFields, selectedFields);
177
+ }
178
+ selectedFields = this.removeDuplicate(selectedFields);
179
+ return this.removeFieldsData(data, selectedFields);
180
+ }
181
+ applyFilters(data) {
182
+ Object.keys(this.filters).forEach(filterKey => {
183
+ data = data.filter(item => item[filterKey] === this.filters[filterKey]);
184
+ });
185
+ return data;
186
+ }
187
+ groupFields(receivedFields) {
188
+ const restrictedFields = [];
189
+ const selectedFields = [];
190
+ receivedFields.forEach(fields => {
191
+ if (fields.startsWith('-')) {
192
+ restrictedFields.push(fields.substring(1));
193
+ }
194
+ else {
195
+ selectedFields.push(fields);
196
+ }
197
+ });
198
+ return [selectedFields, restrictedFields];
199
+ }
200
+ paginate(data) {
201
+ const dataLength = data.length;
202
+ const pageSize = this._pageSize || dataLength;
203
+ const pages = Math.ceil(dataLength / pageSize);
204
+ const begin = this._page * pageSize - pageSize;
205
+ const end = begin + pageSize;
206
+ return { hasNext: this._page < pages, items: data.slice(begin, end) };
207
+ }
208
+ order(data, sortingField) {
209
+ const descendingOrder = sortingField.startsWith('-');
210
+ sortingField = descendingOrder ? sortingField.substr(1) : sortingField;
211
+ return data.sort((optionA, optionB) => {
212
+ if (optionA[sortingField] > optionB[sortingField]) {
213
+ return !descendingOrder ? 1 : -1;
214
+ }
215
+ if (optionA[sortingField] < optionB[sortingField]) {
216
+ return !descendingOrder ? -1 : 1;
217
+ }
218
+ return 0;
219
+ });
220
+ }
221
+ removeDuplicate(fields) {
222
+ return fields.filter((item, position) => fields.indexOf(item) === position);
223
+ }
224
+ removeFieldsData(data, chosenFields) {
225
+ data.forEach(item => {
226
+ Object.keys(item).forEach(keyItem => {
227
+ if (!chosenFields.includes(keyItem)) {
228
+ delete item[keyItem];
229
+ }
230
+ });
231
+ });
232
+ return data;
233
+ }
234
+ removeRestrictedFields(restrictedFields, fields) {
235
+ return fields.filter(field => !restrictedFields.includes(field));
236
+ }
237
+ }
238
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tcXVlcnktYnVpbGRlci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N5bmMvc3JjL2xpYi9tb2RlbHMvcG8tcXVlcnktYnVpbGRlci9wby1xdWVyeS1idWlsZGVyLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBTXREOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFTekIsWUFBb0IsZUFBZ0MsRUFBVSxNQUFvQjtRQUE5RCxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFjO1FBQ2hGLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsSUFBSTtRQUNSLElBQUksV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV0RSxJQUFJLFdBQVcsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFO1lBQ3JDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFO2dCQUNwQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUM5QztZQUNELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDZixXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQzthQUNqRTtZQUNELElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDZCxXQUFX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LENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVPLGdCQUFnQixDQUFDLElBQW1CLEVBQUUsWUFBMkI7UUFDdkUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ25DLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUN0QjtZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxnQkFBNEIsRUFBRSxNQUFrQjtRQUM3RSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHZhbGlkYXRlUGFyYW1ldGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnO1xuXG5pbXBvcnQgeyBQb1Jlc3BvbnNlQXBpIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9wby1odHRwLWNsaWVudC9pbnRlcmZhY2VzL3BvLXJlc3BvbnNlLWFwaS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9TY2hlbWFTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9wby1zY2hlbWEnO1xuaW1wb3J0IHsgUG9TeW5jU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG8tc3luYy9pbnRlcmZhY2VzL3BvLXN5bmMtc2NoZW1hLmludGVyZmFjZSc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogQ2xhc3NlIHV0aWxpdMOhcmlhIHBhcmEgY29uc3RydWlyIGNvbnN1bHRhcyBzb2JyZSBvcyByZWdpc3Ryb3MgZGUgdW0gKnNjaGVtYSouXG4gKlxuICogQSB1dGlsaXphw6fDo28gZG9zIG3DqXRvZG9zIGRlc3RhIGNsYXNzZSDDqSBmZWl0YSBhIHBhcnRpciBkbyByZXRvcm5vIGRvIG3DqXRvZG8gYFBvRW50aXR5LmZpbmQoKWAuIFBvciBleGVtcGxvLFxuICogcGFyYSB1dGlsaXphciBvIG3DqXRvZG8gYFBvUXVlcnlCdWlsZGVyLnBhZ2UoKWAsIMOpIG5lY2Vzc8OhcmlvOlxuICpcbiAqIGBgYCB0eXBlc2NyaXB0XG4gKiBQb1N5bmNTZXJ2aWNlLmdldE1vZGVsKCdzY2hlbWEgbmFtZScpLmZpbmQoKS5wYWdlKDIpLmV4ZWMoKTtcbiAqIGBgYFxuICpcbiAqIE8gYFBvUXVlcnlCdWlsZGVyYCBmb2kgcHJvamV0YWRvIHBhcmEgcXVlIG9zIHNldXMgbcOpdG9kb3Mgc2VqYW1cbiAqIGNoYW1hZG9zIGVtIGNhc2NhdGEgZSBhbyBmaW5hbCBkZXNzZSBlbmNhZGVhbWVudG8gaW52b2NhciBvIG3DqXRvZG9cbiAqIGBQb1F1ZXJ5QnVpbGRlci5leGVjKClgIHBhcmEgcXVlIGEgYnVzY2Egc2VqYSBjb25jbHXDrWRhLiBQb3IgZXhlbXBsbzpcbiAqXG4gKiBgYGAgdHlwZXNjcmlwdFxuICogUG9TeW5jU2VydmljZVxuICogICAuZ2V0TW9kZWwoJ3NjaGVtYSBuYW1lJylcbiAqICAgLmZpbmQoKVxuICogICAucGFnZSgyKVxuICogICAucGFnZVNpemUoNSlcbiAqICAgLnNvcnQoKVxuICogICAuZXhlYygpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBQb1F1ZXJ5QnVpbGRlciB7XG4gIHByaXZhdGUgZmllbGRzOiBzdHJpbmc7XG4gIHByaXZhdGUgZmlsdGVyczogYW55O1xuXG4gIHByaXZhdGUgX2xpbWl0OiBudW1iZXI7XG4gIHByaXZhdGUgX3BhZ2U6IG51bWJlcjtcbiAgcHJpdmF0ZSBfcGFnZVNpemU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfc29ydDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcG9TY2hlbWFTZXJ2aWNlOiBQb1NjaGVtYVNlcnZpY2UsIHByaXZhdGUgc2NoZW1hOiBQb1N5bmNTY2hlbWEpIHtcbiAgICB0aGlzLl9wYWdlID0gMTtcbiAgICB0aGlzLmZpbHRlcnMgPSB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbyBmaW5hbCBkYSBjaGFtYWRhIGRvcyBtw6l0b2RvcyBkbyBgUG9RdWVyeUJ1aWxkZXJgIHV0aWxpemFkb3MsIGVzdGUgbcOpdG9kbyBkZXZlIHNlciBjaGFtYWRvIHBhcmEgcXVlIGEgYnVzY2Egc2VqYSBjb25jbHXDrWRhLlxuICAgKlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFBvUmVzcG9uc2VBcGkgfCBvYmplY3Q+fSBSZWdpc3Ryb3MgZG8gKnNjaGVtYSogbmEgcXVhbCBmb2kgYXBsaWNhZG8gYSBjb25zdWx0YS5cbiAgICovXG4gIGFzeW5jIGV4ZWMoKTogUHJvbWlzZTxQb1Jlc3BvbnNlQXBpIHwgb2JqZWN0PiB7XG4gICAgbGV0IHN0b3JhZ2VEYXRhID0gYXdhaXQgdGhpcy5wb1NjaGVtYVNlcnZpY2UuZ2V0QWxsKHRoaXMuc2NoZW1hLm5hbWUpO1xuXG4gICAgaWYgKHN0b3JhZ2VEYXRhICYmIHN0b3JhZ2VEYXRhLmxlbmd0aCkge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZmlsdGVycykubGVuZ3RoKSB7XG4gICAgICAgIHN0b3JhZ2VEYXRhID0gdGhpcy5hcHBseUZpbHRlcnMoc3RvcmFnZURhdGEpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZmllbGRzKSB7XG4gICAgICAgIHN0b3JhZ2VEYXRhID0gdGhpcy5hcHBseUZpZWxkcyh0aGlzLnNjaGVtYS5maWVsZHMsIHN0b3JhZ2VEYXRhKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9zb3J0KSB7XG4gICAgICAgIHN0b3JhZ2VEYXRhID0gdGhpcy5vcmRlcihzdG9yYWdlRGF0YSwgdGhpcy5fc29ydCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9saW1pdCkge1xuICAgICAgICByZXR1cm4gc3RvcmFnZURhdGFbMF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdpbmF0ZShzdG9yYWdlRGF0YSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhhc05leHQ6IGZhbHNlLFxuICAgICAgICBpdGVtczogW11cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFwbGljYSBmaWx0cm9zIHNvYnJlIG9zIHJlZ2lzdHJvcywgYmFzZWFkb3Mgbm9zIGNhbXBvcyBlIHZhbG9yZXMgZGVmaW5pZG9zIGNvbW8gZmlsdHJvLiBQb3IgZXhlbXBsbzpcbiAgICpcbiAgICogYGBgXG4gICAqIFBvUXVlcnlCdWlsZGVyLmZpbHRlcih7IG5hbWU6ICdNYXJpZScsIGFnZTogMjQgfSk7XG4gICAqIGBgYFxuICAgKiBSZXRvcm5hIHRvZG9zIG9zIHJlZ2lzdHJvcyBxdWUgY29udGVuaGFtIGEgcHJvcHJpZWRhZGUgYG5hbWVgIGlndWFsIGEgTWFyaWUgZSBgYWdlYCBpZ3VhbCBhIDI0LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZmlsdGVyIE9iamV0byBxdWUgY29udMOpbSBvcyBjYW1wb3MgZSB2YWxvcmVzIGEgc2VyZW0gZmlsdHJhZG9zIG5vICpzY2hlbWEqLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UG9RdWVyeUJ1aWxkZXJ9IE9iamV0byBxdWUgcG9zc2liaWxpdGEgZW5jYWRlYXIgdW0gbm92byBtw6l0b2RvIGRvIGBQb1F1ZXJ5QnVpbGRlcmAuXG4gICAqL1xuICBmaWx0ZXIoZmlsdGVyPzogb2JqZWN0KTogUG9RdWVyeUJ1aWxkZXIge1xuICAgIGlmIChmaWx0ZXIgJiYgdHlwZW9mIGZpbHRlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRoaXMuZmlsdGVycyA9IHsgLi4udGhpcy5maWx0ZXJzLCAuLi5maWx0ZXIgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaWx0ZXIgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBMaW1pdGEgbyBuw7ptZXJvIGRlIHJlZ2lzdHJvcyBxdWUgc2Vyw6NvIHJldG9ybmFkb3MuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCBOw7ptZXJvIGRlIHJlZ2lzdHJvcyByZXRvcm5hZG9zLlxuICAgKiBAcmV0dXJucyB7UG9RdWVyeUJ1aWxkZXJ9IE9iamV0byBxdWUgcG9zc2liaWxpdGEgZW5jYWRlYXIgdW0gbm92byBtw6l0b2RvIGRvIGBQb1F1ZXJ5QnVpbGRlcmAuXG4gICAqL1xuICBsaW1pdChsaW1pdDogbnVtYmVyKTogUG9RdWVyeUJ1aWxkZXIge1xuICAgIHRoaXMuX2xpbWl0ID0gbGltaXQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogRXNwZWNpZmljYSBhIHDDoWdpbmEgZGUgcmVnaXN0cm9zIHF1ZSBzZSBkZXNlamEgcmV0b3JuYXIuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlIE7Dum1lcm8gZGEgcMOhZ2luYS5cbiAgICogQHJldHVybnMge1BvUXVlcnlCdWlsZGVyfSBPYmpldG8gcXVlIHBvc3NpYmlsaXRhIGVuY2FkZWFyIHVtIG5vdm8gbcOpdG9kbyBkbyBgUG9RdWVyeUJ1aWxkZXJgLlxuICAgKi9cbiAgcGFnZShwYWdlOiBudW1iZXIpOiBQb1F1ZXJ5QnVpbGRlciB7XG4gICAgdmFsaWRhdGVQYXJhbWV0ZXIoeyBwYWdlIH0pO1xuXG4gICAgdGhpcy5fcGFnZSA9IHBhZ2U7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lIHF1YW50b3MgZWxlbWVudG9zIHNlcsOjbyByZXRvcm5hZG9zIHBvciBww6FnaW5hLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGFnZVNpemUgTsO6bWVybyBkZSByZWdpc3Ryb3MgcG9yIHDDoWdpbmEuXG4gICAqIEByZXR1cm5zIHtQb1F1ZXJ5QnVpbGRlcn0gT2JqZXRvIHF1ZSBwb3NzaWJpbGl0YSBlbmNhZGVhciB1bSBub3ZvIG3DqXRvZG8gZG8gYFBvUXVlcnlCdWlsZGVyYC5cbiAgICovXG4gIHBhZ2VTaXplKHBhZ2VTaXplOiBudW1iZXIpOiBQb1F1ZXJ5QnVpbGRlciB7XG4gICAgdmFsaWRhdGVQYXJhbWV0ZXIoeyBwYWdlU2l6ZSB9KTtcblxuICAgIHRoaXMuX3BhZ2VTaXplID0gcGFnZVNpemU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVXRpbGl6YWRvIHBhcmEgZGVmaW5pciBxdWFpcyBjYW1wb3MgZG8gKnNjaGVtYSogc2Vyw6NvIHJldG9ybmFkb3MgbmEgY29uc3VsdGEuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZHMgQ2FtcG9zIHF1ZSBzZXLDo28gcmV0b3JuYWRvcyBub3MgcmVnaXN0cm9zLiBFc3RlIGNhbXBvcyBkZXZlbSBlc3RhciBkZW50cm8gZGVcbiAgICogdW1hICpzdHJpbmcqIHNlcGFyYWRvcyBwb3IgZXNwYcOnbyBwb2RlbmRvIHVzYXIgbyBjYXJhY3RlcmUgYC1gIHBhcmEgZXhjbHVpciBjYW1wb3MuXG4gICAqIFBvciBleGVtcGxvLCBhIGRlZmluacOnw6NvIGFiYWl4bzpcbiAgICpcbiAgICogYGBgXG4gICAqIFBvUXVlcnlCdWlsZGVyLnNlbGVjdCgnbmFtZSBhZ2UgYWRkcmVzcycpO1xuICAgKiBgYGBcbiAgICogSXLDoSByZXRvcm5hciBhcGVuYXMgb3MgY2FtcG9zIGBuYW1lYCwgYGFnZWAgZSBgYWRkcmVzc2AuIFBhcmEgbsOjbyByZXRvcm5hciB1bSBjYW1wbyBvdSBtYWlzIGJhc3RhIGZhemVyOlxuICAgKlxuICAgKiBgYGBcbiAgICogUG9RdWVyeUJ1aWxkZXIuc2VsZWN0KCctbmFtZSAtYWdlJyk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcmV0dXJucyB7UG9RdWVyeUJ1aWxkZXJ9IE9iamV0byBxdWUgcG9zc2liaWxpdGEgZW5jYWRlYXIgdW0gbm92byBtw6l0b2RvIGRvIGBQb1F1ZXJ5QnVpbGRlcmAuXG4gICAqL1xuICBzZWxlY3QoZmllbGRzOiBzdHJpbmcpOiBQb1F1ZXJ5QnVpbGRlciB7XG4gICAgdmFsaWRhdGVQYXJhbWV0ZXIoeyBmaWVsZHMgfSk7XG5cbiAgICB0aGlzLmZpZWxkcyA9IGZpZWxkcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBPcmRlbmEgb3MgcmVnaXN0cm9zIHBvciB1bSBjYW1wby5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkIENhbXBvIGEgc2VyIG9yZGVuYWRvLiBQYXJhIG9yZGVuYXIgZGUgZm9ybWEgZGVjcmVzY2VudGUgYmFzdGEgY29sb2NhciBvIGNhcmFjdGVyZSBgLWBcbiAgICogbmEgZnJlbnRlIGRvIGNhbXBvLiBQb3IgZXhlbXBsbzpcbiAgICogYGBgXG4gICAqIFBvUXVlcnlCdWlsZGVyLnNvcnQoJy1uYW1lJyk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcmV0dXJucyB7UG9RdWVyeUJ1aWxkZXJ9IE9iamV0byBxdWUgcG9zc2liaWxpdGEgZW5jYWRlYXIgdW0gbm92byBtw6l0b2RvIGRvIGBQb1F1ZXJ5QnVpbGRlcmAuXG4gICAqL1xuICBzb3J0KGZpZWxkOiBzdHJpbmcpOiBQb1F1ZXJ5QnVpbGRlciB7XG4gICAgdmFsaWRhdGVQYXJhbWV0ZXIoeyBmaWVsZCB9KTtcblxuICAgIHRoaXMuX3NvcnQgPSBmaWVsZDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBFc3NhIGZ1bsOnw6NvIHNlcnZlIGNvbW8gYWxpYXMgcGFyYSBvIGBQb1F1ZXJ5QnVpbGRlci5maWx0ZXIoKWAuIMOJIHV0aWxpemFkYSBzb21lbnRlIHBhcmEgZGFyIG1haW9yIGxlZ2liaWxpZGFkZSBhbyBjw7NkaWdvLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZmlsdGVyIE9iamV0byBxdWUgY29udMOpbSBvcyBjYW1wb3MgZSB2YWxvcmVzIGEgc2VyZW0gZmlsdHJhZG9zIG5vICpzY2hlbWEqLlxuICAgKiBAcmV0dXJucyB7UG9RdWVyeUJ1aWxkZXJ9IE9iamV0byBxdWUgcG9zc2liaWxpdGEgZW5jYWRlYXIgdW0gbm92byBtw6l0b2RvIGRvIGBQb1F1ZXJ5QnVpbGRlcmAuXG4gICAqL1xuICB3aGVyZShmaWx0ZXI6IG9iamVjdCk6IFBvUXVlcnlCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXIoZmlsdGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlGaWVsZHMoc2NoZW1hRmllbGRzOiBBcnJheTxhbnk+LCBkYXRhOiBBcnJheTxvYmplY3Q+KTogQXJyYXk8b2JqZWN0PiB7XG4gICAgY29uc3QgcmVjZWl2ZWRGaWVsZHMgPSB0aGlzLmZpZWxkcy5zcGxpdCgnICcpO1xuICAgIGxldCByZXN0cmljdGVkRmllbGRzID0gW107XG4gICAgbGV0IHNlbGVjdGVkRmllbGRzID0gW107XG5cbiAgICBbc2VsZWN0ZWRGaWVsZHMsIHJlc3RyaWN0ZWRGaWVsZHNdID0gdGhpcy5ncm91cEZpZWxkcyhyZWNlaXZlZEZpZWxkcyk7XG5cbiAgICBpZiAoIXNlbGVjdGVkRmllbGRzLmxlbmd0aCAmJiByZXN0cmljdGVkRmllbGRzLmxlbmd0aCkge1xuICAgICAgc2VsZWN0ZWRGaWVsZHMgPSBbLi4uc2NoZW1hRmllbGRzXTtcbiAgICB9XG5cbiAgICBpZiAocmVzdHJpY3RlZEZpZWxkcy5sZW5ndGgpIHtcbiAgICAgIHNlbGVjdGVkRmllbGRzID0gdGhpcy5yZW1vdmVSZXN0cmljdGVkRmllbGRzKHJlc3RyaWN0ZWRGaWVsZHMsIHNlbGVjdGVkRmllbGRzKTtcbiAgICB9XG5cbiAgICBzZWxlY3RlZEZpZWxkcyA9IHRoaXMucmVtb3ZlRHVwbGljYXRlKHNlbGVjdGVkRmllbGRzKTtcblxuICAgIHJldHVybiB0aGlzLnJlbW92ZUZpZWxkc0RhdGEoZGF0YSwgc2VsZWN0ZWRGaWVsZHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUZpbHRlcnMoZGF0YTogQXJyYXk8b2JqZWN0Pik6IEFycmF5PG9iamVjdD4ge1xuICAgIE9iamVjdC5rZXlzKHRoaXMuZmlsdGVycykuZm9yRWFjaChmaWx0ZXJLZXkgPT4ge1xuICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKGl0ZW0gPT4gaXRlbVtmaWx0ZXJLZXldID09PSB0aGlzLmZpbHRlcnNbZmlsdGVyS2V5XSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgZ3JvdXBGaWVsZHMocmVjZWl2ZWRGaWVsZHM6IEFycmF5PHN0cmluZz4pOiBBcnJheTxBcnJheTxzdHJpbmc+PiB7XG4gICAgY29uc3QgcmVzdHJpY3RlZEZpZWxkcyA9IFtdO1xuICAgIGNvbnN0IHNlbGVjdGVkRmllbGRzID0gW107XG5cbiAgICByZWNlaXZlZEZpZWxkcy5mb3JFYWNoKGZpZWxkcyA9PiB7XG4gICAgICBpZiAoZmllbGRzLnN0YXJ0c1dpdGgoJy0nKSkge1xuICAgICAgICByZXN0cmljdGVkRmllbGRzLnB1c2goZmllbGRzLnN1YnN0cmluZygxKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxlY3RlZEZpZWxkcy5wdXNoKGZpZWxkcyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIFtzZWxlY3RlZEZpZWxkcywgcmVzdHJpY3RlZEZpZWxkc107XG4gIH1cblxuICBwcml2YXRlIHBhZ2luYXRlKGRhdGE6IEFycmF5PGFueT4pOiB7IGhhc05leHQ6IGJvb2xlYW47IGl0ZW1zOiBBcnJheTxhbnk+IH0ge1xuICAgIGNvbnN0IGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aDtcbiAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMuX3BhZ2VTaXplIHx8IGRhdGFMZW5ndGg7XG5cbiAgICBjb25zdCBwYWdlcyA9IE1hdGguY2VpbChkYXRhTGVuZ3RoIC8gcGFnZVNpemUpO1xuICAgIGNvbnN0IGJlZ2luID0gdGhpcy5fcGFnZSAqIHBhZ2VTaXplIC0gcGFnZVNpemU7XG4gICAgY29uc3QgZW5kID0gYmVnaW4gKyBwYWdlU2l6ZTtcblxuICAgIHJldHVybiB7IGhhc05leHQ6IHRoaXMuX3BhZ2UgPCBwYWdlcywgaXRlbXM6IGRhdGEuc2xpY2UoYmVnaW4sIGVuZCkgfTtcbiAgfVxuXG4gIHByaXZhdGUgb3JkZXIoZGF0YTogQXJyYXk8YW55Piwgc29ydGluZ0ZpZWxkOiBzdHJpbmcpOiBBcnJheTxhbnk+IHtcbiAgICBjb25zdCBkZXNjZW5kaW5nT3JkZXIgPSBzb3J0aW5nRmllbGQuc3RhcnRzV2l0aCgnLScpO1xuICAgIHNvcnRpbmdGaWVsZCA9IGRlc2NlbmRpbmdPcmRlciA/IHNvcnRpbmdGaWVsZC5zdWJzdHIoMSkgOiBzb3J0aW5nRmllbGQ7XG5cbiAgICByZXR1cm4gZGF0YS5zb3J0KChvcHRpb25BLCBvcHRpb25CKSA9PiB7XG4gICAgICBpZiAob3B0aW9uQVtzb3J0aW5nRmllbGRdID4gb3B0aW9uQltzb3J0aW5nRmllbGRdKSB7XG4gICAgICAgIHJldHVybiAhZGVzY2VuZGluZ09yZGVyID8gMSA6IC0xO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9uQVtzb3J0aW5nRmllbGRdIDwgb3B0aW9uQltzb3J0aW5nRmllbGRdKSB7XG4gICAgICAgIHJldHVybiAhZGVzY2VuZGluZ09yZGVyID8gLTEgOiAxO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gMDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlRHVwbGljYXRlKGZpZWxkcyk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiBmaWVsZHMuZmlsdGVyKChpdGVtLCBwb3NpdGlvbikgPT4gZmllbGRzLmluZGV4T2YoaXRlbSkgPT09IHBvc2l0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlRmllbGRzRGF0YShkYXRhOiBBcnJheTxvYmplY3Q+LCBjaG9zZW5GaWVsZHM6IEFycmF5PHN0cmluZz4pOiBBcnJheTxvYmplY3Q+IHtcbiAgICBkYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBPYmplY3Qua2V5cyhpdGVtKS5mb3JFYWNoKGtleUl0ZW0gPT4ge1xuICAgICAgICBpZiAoIWNob3NlbkZpZWxkcy5pbmNsdWRlcyhrZXlJdGVtKSkge1xuICAgICAgICAgIGRlbGV0ZSBpdGVtW2tleUl0ZW1dO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlUmVzdHJpY3RlZEZpZWxkcyhyZXN0cmljdGVkRmllbGRzOiBBcnJheTxhbnk+LCBmaWVsZHM6IEFycmF5PGFueT4pIHtcbiAgICByZXR1cm4gZmllbGRzLmZpbHRlcihmaWVsZCA9PiAhcmVzdHJpY3RlZEZpZWxkcy5pbmNsdWRlcyhmaWVsZCkpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,45 @@
1
+ import { HttpClientModule } from '@angular/common/http';
2
+ import { NgModule } from '@angular/core';
3
+ import { Network } from '@ionic-native/network/ngx';
4
+ import { PoEventSourcingService } from './services/po-event-sourcing/po-event-sourcing.service';
5
+ import { PoHttpClientService } from './services/po-http-client/po-http-client.service';
6
+ import { PoNetworkService } from './services/po-network/po-network.service';
7
+ import { PoSchemaDefinitionService } from './services/po-schema/po-schema-definition/po-schema-definition.service';
8
+ import { PoSchemaService } from './services/po-schema/po-schema.service';
9
+ import { PoSyncService } from './services/po-sync/po-sync.service';
10
+ import * as i0 from "@angular/core";
11
+ /**
12
+ * @description
13
+ *
14
+ * Módulo do componente PoSync responsável pela sincronia de dados com backends
15
+ */
16
+ export class PoSyncModule {
17
+ }
18
+ PoSyncModule.ɵfac = function PoSyncModule_Factory(t) { return new (t || PoSyncModule)(); };
19
+ PoSyncModule.ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: PoSyncModule });
20
+ PoSyncModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ providers: [
21
+ PoEventSourcingService,
22
+ PoNetworkService,
23
+ PoSchemaDefinitionService,
24
+ PoSchemaService,
25
+ PoSyncService,
26
+ PoHttpClientService,
27
+ Network
28
+ ], imports: [[HttpClientModule]] });
29
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoSyncModule, [{
30
+ type: NgModule,
31
+ args: [{
32
+ providers: [
33
+ PoEventSourcingService,
34
+ PoNetworkService,
35
+ PoSchemaDefinitionService,
36
+ PoSchemaService,
37
+ PoSyncService,
38
+ PoHttpClientService,
39
+ Network
40
+ ],
41
+ imports: [HttpClientModule]
42
+ }]
43
+ }], null, null); })();
44
+ (function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(PoSyncModule, { imports: [HttpClientModule] }); })();
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tc3luYy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zeW5jL3NyYy9saWIvcG8tc3luYy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFcEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDaEcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdkYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0VBQXdFLENBQUM7QUFDbkgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7QUFFbkU7Ozs7R0FJRztBQWFILE1BQU0sT0FBTyxZQUFZOzt3RUFBWixZQUFZOzhEQUFaLFlBQVk7bUVBWFo7UUFDVCxzQkFBc0I7UUFDdEIsZ0JBQWdCO1FBQ2hCLHlCQUF5QjtRQUN6QixlQUFlO1FBQ2YsYUFBYTtRQUNiLG1CQUFtQjtRQUNuQixPQUFPO0tBQ1IsWUFDUSxDQUFDLGdCQUFnQixDQUFDO3VGQUVoQixZQUFZO2NBWnhCLFFBQVE7ZUFBQztnQkFDUixTQUFTLEVBQUU7b0JBQ1Qsc0JBQXNCO29CQUN0QixnQkFBZ0I7b0JBQ2hCLHlCQUF5QjtvQkFDekIsZUFBZTtvQkFDZixhQUFhO29CQUNiLG1CQUFtQjtvQkFDbkIsT0FBTztpQkFDUjtnQkFDRCxPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQzthQUM1Qjs7d0ZBQ1ksWUFBWSxjQUZiLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBOZXR3b3JrIH0gZnJvbSAnQGlvbmljLW5hdGl2ZS9uZXR3b3JrL25neCc7XG5cbmltcG9ydCB7IFBvRXZlbnRTb3VyY2luZ1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3BvLWV2ZW50LXNvdXJjaW5nL3BvLWV2ZW50LXNvdXJjaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9IdHRwQ2xpZW50U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvcG8taHR0cC1jbGllbnQvcG8taHR0cC1jbGllbnQuc2VydmljZSc7XG5pbXBvcnQgeyBQb05ldHdvcmtTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9wby1uZXR3b3JrL3BvLW5ldHdvcmsuc2VydmljZSc7XG5pbXBvcnQgeyBQb1NjaGVtYURlZmluaXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9wby1zY2hlbWEvcG8tc2NoZW1hLWRlZmluaXRpb24vcG8tc2NoZW1hLWRlZmluaXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBQb1NjaGVtYVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3BvLXNjaGVtYS9wby1zY2hlbWEuc2VydmljZSc7XG5pbXBvcnQgeyBQb1N5bmNTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9wby1zeW5jL3BvLXN5bmMuc2VydmljZSc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogTcOzZHVsbyBkbyBjb21wb25lbnRlIFBvU3luYyByZXNwb25zw6F2ZWwgcGVsYSBzaW5jcm9uaWEgZGUgZGFkb3MgY29tIGJhY2tlbmRzXG4gKi9cbkBOZ01vZHVsZSh7XG4gIHByb3ZpZGVyczogW1xuICAgIFBvRXZlbnRTb3VyY2luZ1NlcnZpY2UsXG4gICAgUG9OZXR3b3JrU2VydmljZSxcbiAgICBQb1NjaGVtYURlZmluaXRpb25TZXJ2aWNlLFxuICAgIFBvU2NoZW1hU2VydmljZSxcbiAgICBQb1N5bmNTZXJ2aWNlLFxuICAgIFBvSHR0cENsaWVudFNlcnZpY2UsXG4gICAgTmV0d29ya1xuICBdLFxuICBpbXBvcnRzOiBbSHR0cENsaWVudE1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgUG9TeW5jTW9kdWxlIHt9XG4iXX0=