@po-ui/ng-sync 5.22.2 → 5.22.3

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 (108) hide show
  1. package/README.md +22 -22
  2. package/bundles/po-ui-ng-sync.umd.js +2915 -2915
  3. package/bundles/po-ui-ng-sync.umd.js.map +1 -1
  4. package/esm2015/lib/index.js +15 -15
  5. package/esm2015/lib/models/index.js +6 -6
  6. package/esm2015/lib/models/po-data-message.model.js +57 -57
  7. package/esm2015/lib/models/po-data-transform.model.js +22 -22
  8. package/esm2015/lib/models/po-entity/po-entity.model.js +229 -229
  9. package/esm2015/lib/models/po-event-sourcing-error-response.model.js +17 -17
  10. package/esm2015/lib/models/po-network-status.model.js +44 -44
  11. package/esm2015/lib/models/po-network-type.enum.js +30 -30
  12. package/esm2015/lib/models/po-query-builder/po-query-builder.model.js +241 -241
  13. package/esm2015/lib/models/po-request-type.enum.js +16 -16
  14. package/esm2015/lib/po-sync.module.js +31 -31
  15. package/esm2015/lib/services/po-event-sourcing/enums/po-event-sourcing-operation.enum.js +17 -17
  16. package/esm2015/lib/services/po-event-sourcing/index.js +4 -4
  17. package/esm2015/lib/services/po-event-sourcing/interfaces/po-event-sourcing-item.interface.js +2 -2
  18. package/esm2015/lib/services/po-event-sourcing/interfaces/po-event-sourcing-summary-item.interface.js +2 -2
  19. package/esm2015/lib/services/po-event-sourcing/po-event-sourcing.service.js +411 -411
  20. package/esm2015/lib/services/po-http-client/interfaces/po-http-header-option.interface.js +11 -11
  21. package/esm2015/lib/services/po-http-client/interfaces/po-http-request-data.interface.js +2 -2
  22. package/esm2015/lib/services/po-http-client/interfaces/po-response-api.interface.js +2 -2
  23. package/esm2015/lib/services/po-http-client/po-http-client.service.js +147 -147
  24. package/esm2015/lib/services/po-http-client/po-http-request-type.enum.js +25 -25
  25. package/esm2015/lib/services/po-network/po-network.service.js +58 -58
  26. package/esm2015/lib/services/po-schema/index.js +4 -4
  27. package/esm2015/lib/services/po-schema/po-schema-definition/po-schema-definition.service.js +80 -80
  28. package/esm2015/lib/services/po-schema/po-schema-util/po-schema-util.model.js +124 -124
  29. package/esm2015/lib/services/po-schema/po-schema.service.js +198 -198
  30. package/esm2015/lib/services/po-sync/interfaces/po-sync-config.interface.js +2 -2
  31. package/esm2015/lib/services/po-sync/interfaces/po-sync-field-options.interface.js +2 -2
  32. package/esm2015/lib/services/po-sync/interfaces/po-sync-response.interface.js +2 -2
  33. package/esm2015/lib/services/po-sync/interfaces/po-sync-schema.interface.js +2 -2
  34. package/esm2015/lib/services/po-sync/po-sync.service.js +336 -336
  35. package/esm2015/lib/utils/utils.js +63 -63
  36. package/esm2015/po-ui-ng-sync.js +8 -8
  37. package/esm2015/public-api.js +2 -2
  38. package/fesm2015/po-ui-ng-sync.js +2047 -2047
  39. package/fesm2015/po-ui-ng-sync.js.map +1 -1
  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 +7 -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 +71 -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 +75 -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 +33 -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 +48 -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 +95 -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 +159 -159
  71. package/lib/utils/utils.d.ts +36 -36
  72. package/package.json +4 -4
  73. package/po-ui-ng-sync-5.22.3.tgz +0 -0
  74. package/po-ui-ng-sync.d.ts +8 -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 +25 -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.spec.d.ts +1 -1
  82. package/schematics/ng-add/index.spec.js +62 -62
  83. package/schematics/ng-add/schema.json +7 -7
  84. package/schematics/ng-generate/schema/files/__path__/__name@dasherize__/__name@dasherize__.constants.ts.template +13 -13
  85. package/schematics/ng-generate/schema/index.d.ts +4 -4
  86. package/schematics/ng-generate/schema/index.js +12 -12
  87. package/schematics/ng-generate/schema/index.spec.d.ts +1 -1
  88. package/schematics/ng-generate/schema/index.spec.js +44 -44
  89. package/schematics/ng-generate/schema/schema.d.ts +3 -3
  90. package/schematics/ng-generate/schema/schema.js +2 -2
  91. package/schematics/ng-generate/schema/schema.json +31 -31
  92. package/schematics/ng-update/v2/changes.d.ts +8 -8
  93. package/schematics/ng-update/v2/changes.js +20 -20
  94. package/schematics/ng-update/v2/index.d.ts +5 -5
  95. package/schematics/ng-update/v2/index.js +101 -101
  96. package/schematics/ng-update/v3/changes.d.ts +2 -2
  97. package/schematics/ng-update/v3/changes.js +14 -14
  98. package/schematics/ng-update/v3/index.d.ts +1 -1
  99. package/schematics/ng-update/v3/index.js +16 -16
  100. package/schematics/ng-update/v4/changes.d.ts +2 -2
  101. package/schematics/ng-update/v4/changes.js +14 -14
  102. package/schematics/ng-update/v4/index.d.ts +1 -1
  103. package/schematics/ng-update/v4/index.js +15 -15
  104. package/schematics/ng-update/v5/changes.d.ts +2 -2
  105. package/schematics/ng-update/v5/changes.js +13 -13
  106. package/schematics/ng-update/v5/index.d.ts +1 -1
  107. package/schematics/ng-update/v5/index.js +15 -15
  108. package/po-ui-ng-sync-5.22.2.tgz +0 -0
@@ -1,229 +1,229 @@
1
- import { __awaiter } from "tslib";
2
- import { validateParameter } from '../../utils/utils';
3
- import { PoEventSourcingOperation } from '../../services/po-event-sourcing';
4
- import { PoQueryBuilder } from './../po-query-builder/po-query-builder.model';
5
- import { PoSchemaUtil } from '../../services/po-schema';
6
- /**
7
- * @description
8
- *
9
- * Uma instância `PoEntity` representa um *schema* e ela contém métodos que possibilitam manipular seus registros,
10
- * como por exemplo: buscar, criar e remover.
11
- *
12
- * Esta instância pode ser obtida a partir do retorno do método `PoSyncService.getModel('schema name')`.
13
- */
14
- export class PoEntity {
15
- constructor(eventSourcing, schema, poSchemaService) {
16
- this.eventSourcing = eventSourcing;
17
- this.schema = schema;
18
- this.poSchemaService = poSchemaService;
19
- }
20
- /**
21
- * Busca os registros do *schema*, podendo filtrar o resultado a partir do filtro passado e retornando apenas
22
- * os campos definidos.
23
- *
24
- * Para que esta busca seja concluída é necessário utilizar o método `PoQueryBuilder.exec()`.
25
- * Veja mais em: [PoQueryBuilder](/documentation/po-query-builder).
26
- *
27
- * @param {object} filter Objeto que contém os campos e valores a serem filtrados no *schema*.
28
- * @param {string} fields Campos que serão retornados nos registros. Este campos devem estar dentro de
29
- * uma *string* separados por espaço podendo usar o caractere `-` para excluir campos.
30
- * Por exemplo, a definição abaixo:
31
- *
32
- * ```
33
- * PoQueryBuilder.select('name age address');
34
- * ```
35
- * Irá retornar apenas os campos `name`, `age` e `address`. E para não mostrar um campo ou mais basta fazer:
36
- *
37
- * ```
38
- * PoQueryBuilder.select('-name -age');
39
- * ```
40
- * @returns {PoQueryBuilder} Objeto que possibilita encadear um método do `PoQueryBuilder`.
41
- */
42
- find(filter, fields) {
43
- const query = new PoQueryBuilder(this.poSchemaService, this.schema);
44
- if (filter) {
45
- query.filter(filter);
46
- }
47
- if (fields) {
48
- query.select(fields);
49
- }
50
- return query;
51
- }
52
- /**
53
- * Busca um registro pelo seu *id*.
54
- *
55
- * Para que esta busca seja concluída é necessário utilizar o método `PoQueryBuilder.exec()`.
56
- * Veja mais em: [PoQueryBuilder](/documentation/po-query-builder).
57
- *
58
- * @param {any} id Identificador do registro.
59
- * @param {string} fields Campos que serão retornados nos registros. Este campos devem estar dentro de
60
- * uma *string* separados por espaço podendo usar o caractere `-` para excluir campos.
61
- * Por exemplo, a definição abaixo:
62
- *
63
- * ```
64
- * PoQueryBuilder.select('name age address');
65
- * ```
66
- * Irá retornar apenas os campos `name`, `age` e `address`. E para não mostrar um campo ou mais basta fazer:
67
- *
68
- * ```
69
- * PoQueryBuilder.select('-name -age');
70
- * ```
71
- * @returns {PoQueryBuilder} Objeto que possibilita encadear um método do `PoQueryBuilder`.
72
- */
73
- findById(id, fields) {
74
- return this.findOne({ [this.schema.idField]: id }, fields);
75
- }
76
- /**
77
- * Semelhante ao método `PoEntity.find()`, porém retorna apenas o primeiro registro encontrado na busca.
78
- *
79
- * Para que esta busca seja concluída é necessário utilizar o método `PoQueryBuilder.exec()`.
80
- * Veja mais em: [PoQueryBuilder](/documentation/po-query-builder).
81
- *
82
- * @param {any} filter Objeto que contém os campos e valores a serem filtrados no *schema*.
83
- * @param {string} fields Campos que serão retornados nos registros. Este campos devem estar dentro de
84
- * uma *string* separados por espaço podendo usar o caractere `-` para excluir campos.
85
- * Por exemplo, a definição abaixo:
86
- *
87
- * ```
88
- * PoQueryBuilder.select('name age address');
89
- * ```
90
- * Irá retornar apenas os campos `name`, `age` e `address`. E para não mostrar um campo ou mais basta fazer:
91
- *
92
- * ```
93
- * PoQueryBuilder.select('-name -age');
94
- * ```
95
- * @returns {PoQueryBuilder} Objeto que possibilita encadear um método do `PoQueryBuilder`.
96
- */
97
- findOne(filter, fields) {
98
- const query = this.find(filter, fields);
99
- query.limit(1);
100
- return query;
101
- }
102
- /**
103
- * Remove um registro.
104
- *
105
- * @param {object} record Registro que será removido.
106
- * @param {string} customRequestId Identificador customizado do comando.
107
- * @returns {Promise} Promessa que é concluída após o registro ser removido.
108
- */
109
- remove(record, customRequestId) {
110
- return __awaiter(this, void 0, void 0, function* () {
111
- validateParameter({ record });
112
- const remove = () => __awaiter(this, void 0, void 0, function* () {
113
- const idField = record[this.schema.idField] ? this.schema.idField : PoSchemaUtil.syncInternalIdFieldName;
114
- const serverRecord = PoSchemaUtil.separateSchemaFields(this.schema, record)['serverRecord'];
115
- yield this.poSchemaService.remove(this.schema.name, record[idField]);
116
- yield this.eventSourcing.remove(this.schema.name, serverRecord, customRequestId);
117
- });
118
- return this.poSchemaService.limitedCallWrap(remove);
119
- });
120
- }
121
- /**
122
- * Altera ou inclui um registro.
123
- *
124
- * > O registro será alterado se ele possuir um *id*, caso contrário um novo registro será criado.
125
- *
126
- * @param {object} record Registro que será persistido.
127
- * @param {string} customRequestId Identificador customizado do comando.
128
- * @returns {Promise} Promessa que é concluída após o registro ser alterado ou incluído.
129
- */
130
- save(record, customRequestId) {
131
- return __awaiter(this, void 0, void 0, function* () {
132
- validateParameter({ record });
133
- return this.poSchemaService.limitedCallWrap(this.selectSaveType.bind(this, record, true, customRequestId));
134
- });
135
- }
136
- /**
137
- * Salva uma lista de registros em lote.
138
- *
139
- * > Para cada registro da lista, será inserido um novo registro se o mesmo não tiver *id*, caso contrário
140
- * será contado como uma atualização de um registro existente.
141
- *
142
- * @param {Array<object>} records Lista de registros que serão persistidos.
143
- * @param {Array<string> | string} customRequestIds Identificador customizado do comando.
144
- *
145
- * Ao passar uma lista de identificadores, cada índice da lista de identificadores deverá
146
- * corresponder ao índice do registro na lista de registros.
147
- * @returns {Promise<any>} Promessa que é concluída após os registros serem alterados ou incluídos.
148
- */
149
- saveAll(records, customRequestIds) {
150
- return __awaiter(this, void 0, void 0, function* () {
151
- validateParameter({ records });
152
- const saveAll = () => __awaiter(this, void 0, void 0, function* () {
153
- const batchEvents = [];
154
- for (let index = 0; index < records.length; index++) {
155
- const record = records[index];
156
- const sendToEventSourcing = false;
157
- const isNonLocalRecordChanged = yield this.isNonLocalRecordChanged(record);
158
- const updatedRecord = yield this.selectSaveType(record, sendToEventSourcing);
159
- if (isNonLocalRecordChanged) {
160
- const customRequestId = customRequestIds instanceof Array ? customRequestIds[index] : customRequestIds;
161
- const eventOperation = this.createEventOperation(record, updatedRecord, customRequestId);
162
- batchEvents.push(eventOperation);
163
- }
164
- }
165
- yield this.eventSourcing.createBatchEvents(this.schema.name, batchEvents);
166
- });
167
- return this.poSchemaService.limitedCallWrap(saveAll);
168
- });
169
- }
170
- create(newRecord, sendToEventSourcing, customRequestId) {
171
- return __awaiter(this, void 0, void 0, function* () {
172
- const time = new Date().getTime();
173
- const syncProperties = {
174
- [PoSchemaUtil.syncInternalIdFieldName]: time,
175
- SyncInsertedDateTime: time,
176
- SyncUpdatedDateTime: null,
177
- SyncExclusionDateTime: null,
178
- SyncDeleted: false,
179
- SyncStatus: 0
180
- };
181
- const recordWithSyncProperties = Object.assign(Object.assign({}, newRecord), syncProperties);
182
- const recordedData = yield this.poSchemaService.create(this.schema, recordWithSyncProperties);
183
- if (sendToEventSourcing) {
184
- yield this.eventSourcing.create(this.schema.name, recordWithSyncProperties, customRequestId);
185
- }
186
- return recordedData;
187
- });
188
- }
189
- createEventOperation(record, updatedRecord, customRequestId) {
190
- const operation = PoSchemaUtil.getRecordId(record, this.schema)
191
- ? PoEventSourcingOperation.Update
192
- : PoEventSourcingOperation.Insert;
193
- const serverRecord = PoSchemaUtil.separateSchemaFields(this.schema, updatedRecord)['serverRecord'];
194
- return {
195
- record: serverRecord,
196
- customRequestId: customRequestId,
197
- operation: operation
198
- };
199
- }
200
- isNonLocalRecordChanged(updatedRecord) {
201
- return __awaiter(this, void 0, void 0, function* () {
202
- const nonLocalFieldNames = PoSchemaUtil.getNonLocalFieldNames(this.schema);
203
- const record = yield this.poSchemaService.get(this.schema.name, updatedRecord[this.schema.idField]);
204
- return !PoSchemaUtil.isModelsEqual(nonLocalFieldNames, record, updatedRecord);
205
- });
206
- }
207
- selectSaveType(record, sendToEventSourcing, customRequestId) {
208
- return __awaiter(this, void 0, void 0, function* () {
209
- const hasId = PoSchemaUtil.getRecordId(record, this.schema);
210
- return hasId
211
- ? yield this.update(record, sendToEventSourcing, customRequestId)
212
- : yield this.create(record, sendToEventSourcing, customRequestId);
213
- });
214
- }
215
- update(updatedRecord, sendToEventSourcing, customRequestId) {
216
- return __awaiter(this, void 0, void 0, function* () {
217
- updatedRecord.SyncUpdatedDateTime = new Date().getTime();
218
- updatedRecord.SyncStatus = 0;
219
- const isNonLocalRecordChanged = yield this.isNonLocalRecordChanged(updatedRecord);
220
- const recordedData = yield this.poSchemaService.update(this.schema, updatedRecord);
221
- if (isNonLocalRecordChanged && sendToEventSourcing) {
222
- const serverRecord = PoSchemaUtil.separateSchemaFields(this.schema, updatedRecord)['serverRecord'];
223
- yield this.eventSourcing.update(this.schema.name, serverRecord, customRequestId);
224
- }
225
- return recordedData;
226
- });
227
- }
228
- }
229
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZW50aXR5Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3luYy9zcmMvbGliL21vZGVscy9wby1lbnRpdHkvcG8tZW50aXR5Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUV0RCxPQUFPLEVBQ0wsd0JBQXdCLEVBR3pCLE1BQU0sa0NBQWtDLENBQUM7QUFDMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzlFLE9BQU8sRUFBbUIsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHekU7Ozs7Ozs7R0FPRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBQ25CLFlBQ1UsYUFBcUMsRUFDckMsTUFBb0IsRUFDcEIsZUFBZ0M7UUFGaEMsa0JBQWEsR0FBYixhQUFhLENBQXdCO1FBQ3JDLFdBQU0sR0FBTixNQUFNLENBQWM7UUFDcEIsb0JBQWUsR0FBZixlQUFlLENBQWlCO0lBQ3ZDLENBQUM7SUFFSjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BcUJHO0lBQ0gsSUFBSSxDQUFDLE1BQWUsRUFBRSxNQUFlO1FBQ25DLE1BQU0sS0FBSyxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXBFLElBQUksTUFBTSxFQUFFO1lBQ1YsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN0QjtRQUVELElBQUksTUFBTSxFQUFFO1lBQ1YsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN0QjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQW9CRztJQUNILFFBQVEsQ0FBQyxFQUFPLEVBQUUsTUFBZTtRQUMvQixPQUFPLElBQUks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SUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDdEUsQ0FBQztLQUFBO0lBRWEsTUFBTSxDQUFDLGFBQWtCLEVBQUUsbUJBQTRCLEVBQUUsZUFBd0I7O1lBQzdGLGFBQWEsQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3pELGFBQWEsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBRTdCLE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDbEYsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBRW5GLElBQUksdUJBQXVCLElBQUksbUJBQW1CLEVBQUU7Z0JBQ2xELE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNuRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQzthQUNsRjtZQUVELE9BQU8sWUFBWSxDQUFDO1FBQ3RCLENBQUM7S0FBQTtDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdmFsaWRhdGVQYXJhbWV0ZXIgfSBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5cbmltcG9ydCB7XG4gIFBvRXZlbnRTb3VyY2luZ09wZXJhdGlvbixcbiAgUG9FdmVudFNvdXJjaW5nU2VydmljZSxcbiAgUG9FdmVudFNvdXJjaW5nU3VtbWFyeUl0ZW1cbn0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG8tZXZlbnQtc291cmNpbmcnO1xuaW1wb3J0IHsgUG9RdWVyeUJ1aWxkZXIgfSBmcm9tICcuLy4uL3BvLXF1ZXJ5LWJ1aWxkZXIvcG8tcXVlcnktYnVpbGRlci5tb2RlbCc7XG5pbXBvcnQgeyBQb1NjaGVtYVNlcnZpY2UsIFBvU2NoZW1hVXRpbCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BvLXNjaGVtYSc7XG5pbXBvcnQgeyBQb1N5bmNTY2hlbWEgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wby1zeW5jL2ludGVyZmFjZXMvcG8tc3luYy1zY2hlbWEuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiBVbWEgaW5zdMOibmNpYSBgUG9FbnRpdHlgIHJlcHJlc2VudGEgdW0gKnNjaGVtYSogZSBlbGEgY29udMOpbSBtw6l0b2RvcyBxdWUgcG9zc2liaWxpdGFtIG1hbmlwdWxhciBzZXVzIHJlZ2lzdHJvcyxcbiAqIGNvbW8gcG9yIGV4ZW1wbG86IGJ1c2NhciwgY3JpYXIgZSByZW1vdmVyLlxuICpcbiAqIEVzdGEgaW5zdMOibmNpYSBwb2RlIHNlciBvYnRpZGEgYSBwYXJ0aXIgZG8gcmV0b3JubyBkbyBtw6l0b2RvIGBQb1N5bmNTZXJ2aWNlLmdldE1vZGVsKCdzY2hlbWEgbmFtZScpYC5cbiAqL1xuZXhwb3J0IGNsYXNzIFBvRW50aXR5IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBldmVudFNvdXJjaW5nOiBQb0V2ZW50U291cmNpbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2NoZW1hOiBQb1N5bmNTY2hlbWEsXG4gICAgcHJpdmF0ZSBwb1NjaGVtYVNlcnZpY2U6IFBvU2NoZW1hU2VydmljZVxuICApIHt9XG5cbiAgLyoqXG4gICAqIEJ1c2NhIG9zIHJlZ2lzdHJvcyBkbyAqc2NoZW1hKiwgcG9kZW5kbyBmaWx0cmFyIG8gcmVzdWx0YWRvIGEgcGFydGlyIGRvIGZpbHRybyBwYXNzYWRvIGUgcmV0b3JuYW5kbyBhcGVuYXNcbiAgICogb3MgY2FtcG9zIGRlZmluaWRvcy5cbiAgICpcbiAgICogUGFyYSBxdWUgZXN0YSBidXNjYSBzZWphIGNvbmNsdcOtZGEgw6kgbmVjZXNzw6FyaW8gdXRpbGl6YXIgbyBtw6l0b2RvIGBQb1F1ZXJ5QnVpbGRlci5leGVjKClgLlxuICAgKiBWZWphIG1haXMgZW06IFtQb1F1ZXJ5QnVpbGRlcl0oL2RvY3VtZW50YXRpb24vcG8tcXVlcnktYnVpbGRlcikuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBmaWx0ZXIgT2JqZXRvIHF1ZSBjb250w6ltIG9zIGNhbXBvcyBlIHZhbG9yZXMgYSBzZXJlbSBmaWx0cmFkb3Mgbm8gKnNjaGVtYSouXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZHMgQ2FtcG9zIHF1ZSBzZXLDo28gcmV0b3JuYWRvcyBub3MgcmVnaXN0cm9zLiBFc3RlIGNhbXBvcyBkZXZlbSBlc3RhciBkZW50cm8gZGVcbiAgICogdW1hICpzdHJpbmcqIHNlcGFyYWRvcyBwb3IgZXNwYcOnbyBwb2RlbmRvIHVzYXIgbyBjYXJhY3RlcmUgYC1gIHBhcmEgZXhjbHVpciBjYW1wb3MuXG4gICAqIFBvciBleGVtcGxvLCBhIGRlZmluacOnw6NvIGFiYWl4bzpcbiAgICpcbiAgICogYGBgXG4gICAqIFBvUXVlcnlCdWlsZGVyLnNlbGVjdCgnbmFtZSBhZ2UgYWRkcmVzcycpO1xuICAgKiBgYGBcbiAgICogSXLDoSByZXRvcm5hciBhcGVuYXMgb3MgY2FtcG9zIGBuYW1lYCwgYGFnZWAgZSBgYWRkcmVzc2AuIEUgcGFyYSBuw6NvIG1vc3RyYXIgdW0gY2FtcG8gb3UgbWFpcyBiYXN0YSBmYXplcjpcbiAgICpcbiAgICogYGBgXG4gICAqIFBvUXVlcnlCdWlsZGVyLnNlbGVjdCgnLW5hbWUgLWFnZScpO1xuICAgKiBgYGBcbiAgICogQHJldHVybnMge1BvUXVlcnlCdWlsZGVyfSBPYmpldG8gcXVlIHBvc3NpYmlsaXRhIGVuY2FkZWFyIHVtIG3DqXRvZG8gZG8gYFBvUXVlcnlCdWlsZGVyYC5cbiAgICovXG4gIGZpbmQoZmlsdGVyPzogb2JqZWN0LCBmaWVsZHM/OiBzdHJpbmcpOiBQb1F1ZXJ5QnVpbGRlciB7XG4gICAgY29uc3QgcXVlcnkgPSBuZXcgUG9RdWVyeUJ1aWxkZXIodGhpcy5wb1NjaGVtYVNlcnZpY2UsIHRoaXMuc2NoZW1hKTtcblxuICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgIHF1ZXJ5LmZpbHRlcihmaWx0ZXIpO1xuICAgIH1cblxuICAgIGlmIChmaWVsZHMpIHtcbiAgICAgIHF1ZXJ5LnNlbGVjdChmaWVsZHMpO1xuICAgIH1cblxuICAgIHJldHVybiBxdWVyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdXNjYSB1bSByZWdpc3RybyBwZWxvIHNldSAqaWQqLlxuICAgKlxuICAgKiBQYXJhIHF1ZSBlc3RhIGJ1c2NhIHNlamEgY29uY2x1w61kYSDDqSBuZWNlc3PDoXJpbyB1dGlsaXphciBvIG3DqXRvZG8gYFBvUXVlcnlCdWlsZGVyLmV4ZWMoKWAuXG4gICAqIFZlamEgbWFpcyBlbTogW1BvUXVlcnlCdWlsZGVyXSgvZG9jdW1lbnRhdGlvbi9wby1xdWVyeS1idWlsZGVyKS5cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IGlkIElkZW50aWZpY2Fkb3IgZG8gcmVnaXN0cm8uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZHMgQ2FtcG9zIHF1ZSBzZXLDo28gcmV0b3JuYWRvcyBub3MgcmVnaXN0cm9zLiBFc3RlIGNhbXBvcyBkZXZlbSBlc3RhciBkZW50cm8gZGVcbiAgICogdW1hICpzdHJpbmcqIHNlcGFyYWRvcyBwb3IgZXNwYcOnbyBwb2RlbmRvIHVzYXIgbyBjYXJhY3RlcmUgYC1gIHBhcmEgZXhjbHVpciBjYW1wb3MuXG4gICAqIFBvciBleGVtcGxvLCBhIGRlZmluacOnw6NvIGFiYWl4bzpcbiAgICpcbiAgICogYGBgXG4gICAqIFBvUXVlcnlCdWlsZGVyLnNlbGVjdCgnbmFtZSBhZ2UgYWRkcmVzcycpO1xuICAgKiBgYGBcbiAgICogSXLDoSByZXRvcm5hciBhcGVuYXMgb3MgY2FtcG9zIGBuYW1lYCwgYGFnZWAgZSBgYWRkcmVzc2AuIEUgcGFyYSBuw6NvIG1vc3RyYXIgdW0gY2FtcG8gb3UgbWFpcyBiYXN0YSBmYXplcjpcbiAgICpcbiAgICogYGBgXG4gICAqIFBvUXVlcnlCdWlsZGVyLnNlbGVjdCgnLW5hbWUgLWFnZScpO1xuICAgKiBgYGBcbiAgICogQHJldHVybnMge1BvUXVlcnlCdWlsZGVyfSBPYmpldG8gcXVlIHBvc3NpYmlsaXRhIGVuY2FkZWFyIHVtIG3DqXRvZG8gZG8gYFBvUXVlcnlCdWlsZGVyYC5cbiAgICovXG4gIGZpbmRCeUlkKGlkOiBhbnksIGZpZWxkcz86IHN0cmluZyk6IFBvUXVlcnlCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5maW5kT25lKHsgW3RoaXMuc2NoZW1hLmlkRmllbGRdOiBpZCB9LCBmaWVsZHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbWVsaGFudGUgYW8gbcOpdG9kbyBgUG9FbnRpdHkuZmluZCgpYCwgcG9yw6ltIHJldG9ybmEgYXBlbmFzIG8gcHJpbWVpcm8gcmVnaXN0cm8gZW5jb250cmFkbyBuYSBidXNjYS5cbiAgICpcbiAgICogUGFyYSBxdWUgZXN0YSBidXNjYSBzZWphIGNvbmNsdcOtZGEgw6kgbmVjZXNzw6FyaW8gdXRpbGl6YXIgbyBtw6l0b2RvIGBQb1F1ZXJ5QnVpbGRlci5leGVjKClgLlxuICAgKiBWZWphIG1haXMgZW06IFtQb1F1ZXJ5QnVpbGRlcl0oL2RvY3VtZW50YXRpb24vcG8tcXVlcnktYnVpbGRlcikuXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSBmaWx0ZXIgT2JqZXRvIHF1ZSBjb250w6ltIG9zIGNhbXBvcyBlIHZhbG9yZXMgYSBzZXJlbSBmaWx0cmFkb3Mgbm8gKnNjaGVtYSouXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZHMgQ2FtcG9zIHF1ZSBzZXLDo28gcmV0b3JuYWRvcyBub3MgcmVnaXN0cm9zLiBFc3RlIGNhbXBvcyBkZXZlbSBlc3RhciBkZW50cm8gZGVcbiAgICogdW1hICpzdHJpbmcqIHNlcGFyYWRvcyBwb3IgZXNwYcOnbyBwb2RlbmRvIHVzYXIgbyBjYXJhY3RlcmUgYC1gIHBhcmEgZXhjbHVpciBjYW1wb3MuXG4gICAqIFBvciBleGVtcGxvLCBhIGRlZmluacOnw6NvIGFiYWl4bzpcbiAgICpcbiAgICogYGBgXG4gICAqIFBvUXVlcnlCdWlsZGVyLnNlbGVjdCgnbmFtZSBhZ2UgYWRkcmVzcycpO1xuICAgKiBgYGBcbiAgICogSXLDoSByZXRvcm5hciBhcGVuYXMgb3MgY2FtcG9zIGBuYW1lYCwgYGFnZWAgZSBgYWRkcmVzc2AuIEUgcGFyYSBuw6NvIG1vc3RyYXIgdW0gY2FtcG8gb3UgbWFpcyBiYXN0YSBmYXplcjpcbiAgICpcbiAgICogYGBgXG4gICAqIFBvUXVlcnlCdWlsZGVyLnNlbGVjdCgnLW5hbWUgLWFnZScpO1xuICAgKiBgYGBcbiAgICogQHJldHVybnMge1BvUXVlcnlCdWlsZGVyfSBPYmpldG8gcXVlIHBvc3NpYmlsaXRhIGVuY2FkZWFyIHVtIG3DqXRvZG8gZG8gYFBvUXVlcnlCdWlsZGVyYC5cbiAgICovXG4gIGZpbmRPbmUoZmlsdGVyPzogYW55LCBmaWVsZHM/OiBzdHJpbmcpOiBQb1F1ZXJ5QnVpbGRlciB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLmZpbmQoZmlsdGVyLCBmaWVsZHMpO1xuICAgIHF1ZXJ5LmxpbWl0KDEpO1xuICAgIHJldHVybiBxdWVyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdW0gcmVnaXN0cm8uXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWNvcmQgUmVnaXN0cm8gcXVlIHNlcsOhIHJlbW92aWRvLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3VzdG9tUmVxdWVzdElkIElkZW50aWZpY2Fkb3IgY3VzdG9taXphZG8gZG8gY29tYW5kby5cbiAgICogQHJldHVybnMge1Byb21pc2V9IFByb21lc3NhIHF1ZSDDqSBjb25jbHXDrWRhIGFww7NzIG8gcmVnaXN0cm8gc2VyIHJlbW92aWRvLlxuICAgKi9cbiAgYXN5bmMgcmVtb3ZlKHJlY29yZDogb2JqZWN0LCBjdXN0b21SZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHZhbGlkYXRlUGFyYW1ldGVyKHsgcmVjb3JkIH0pO1xuXG4gICAgY29uc3QgcmVtb3ZlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaWRGaWVsZCA9IHJlY29yZFt0aGlzLnNjaGVtYS5pZEZpZWxkXSA/IHRoaXMuc2NoZW1hLmlkRmllbGQgOiBQb1NjaGVtYVV0aWwuc3luY0ludGVybmFsSWRGaWVsZE5hbWU7XG4gICAgICBjb25zdCBzZXJ2ZXJSZWNvcmQgPSBQb1NjaGVtYVV0aWwuc2VwYXJhdGVTY2hlbWFGaWVsZHModGhpcy5zY2hlbWEsIHJlY29yZClbJ3NlcnZlclJlY29yZCddO1xuXG4gICAgICBhd2FpdCB0aGlzLnBvU2NoZW1hU2VydmljZS5yZW1vdmUodGhpcy5zY2hlbWEubmFtZSwgcmVjb3JkW2lkRmllbGRdKTtcbiAgICAgIGF3YWl0IHRoaXMuZXZlbnRTb3VyY2luZy5yZW1vdmUodGhpcy5zY2hlbWEubmFtZSwgc2VydmVyUmVjb3JkLCBjdXN0b21SZXF1ZXN0SWQpO1xuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5wb1NjaGVtYVNlcnZpY2UubGltaXRlZENhbGxXcmFwKHJlbW92ZSk7XG4gIH1cblxuICAvKipcbiAgICogQWx0ZXJhIG91IGluY2x1aSB1bSByZWdpc3Ryby5cbiAgICpcbiAgICogPiBPIHJlZ2lzdHJvIHNlcsOhIGFsdGVyYWRvIHNlIGVsZSBwb3NzdWlyIHVtICppZCosIGNhc28gY29udHLDoXJpbyB1bSBub3ZvIHJlZ2lzdHJvIHNlcsOhIGNyaWFkby5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlY29yZCBSZWdpc3RybyBxdWUgc2Vyw6EgcGVyc2lzdGlkby5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGN1c3RvbVJlcXVlc3RJZCBJZGVudGlmaWNhZG9yIGN1c3RvbWl6YWRvIGRvIGNvbWFuZG8uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9tZXNzYSBxdWUgw6kgY29uY2x1w61kYSBhcMOzcyBvIHJlZ2lzdHJvIHNlciBhbHRlcmFkbyBvdSBpbmNsdcOtZG8uXG4gICAqL1xuICBhc3luYyBzYXZlKHJlY29yZDogb2JqZWN0LCBjdXN0b21SZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHZhbGlkYXRlUGFyYW1ldGVyKHsgcmVjb3JkIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMucG9TY2hlbWFTZXJ2aWNlLmxpbWl0ZWRDYWxsV3JhcCh0aGlzLnNlbGVjdFNhdmVUeXBlLmJpbmQodGhpcywgcmVjb3JkLCB0cnVlLCBjdXN0b21SZXF1ZXN0SWQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYWx2YSB1bWEgbGlzdGEgZGUgcmVnaXN0cm9zIGVtIGxvdGUuXG4gICAqXG4gICAqID4gUGFyYSBjYWRhIHJlZ2lzdHJvIGRhIGxpc3RhLCBzZXLDoSBpbnNlcmlkbyB1bSBub3ZvIHJlZ2lzdHJvIHNlIG8gbWVzbW8gbsOjbyB0aXZlciAqaWQqLCBjYXNvIGNvbnRyw6FyaW9cbiAgICogc2Vyw6EgY29udGFkbyBjb21vIHVtYSBhdHVhbGl6YcOnw6NvIGRlIHVtIHJlZ2lzdHJvIGV4aXN0ZW50ZS5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTxvYmplY3Q+fSByZWNvcmRzIExpc3RhIGRlIHJlZ2lzdHJvcyBxdWUgc2Vyw6NvIHBlcnNpc3RpZG9zLlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz4gfCBzdHJpbmd9IGN1c3RvbVJlcXVlc3RJZHMgSWRlbnRpZmljYWRvciBjdXN0b21pemFkbyBkbyBjb21hbmRvLlxuICAgKlxuICAgKiBBbyBwYXNzYXIgdW1hIGxpc3RhIGRlIGlkZW50aWZpY2Fkb3JlcywgY2FkYSDDrW5kaWNlIGRhIGxpc3RhIGRlIGlkZW50aWZpY2Fkb3JlcyBkZXZlcsOhXG4gICAqIGNvcnJlc3BvbmRlciBhbyDDrW5kaWNlIGRvIHJlZ2lzdHJvIG5hIGxpc3RhIGRlIHJlZ2lzdHJvcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn0gUHJvbWVzc2EgcXVlIMOpIGNvbmNsdcOtZGEgYXDDs3Mgb3MgcmVnaXN0cm9zIHNlcmVtIGFsdGVyYWRvcyBvdSBpbmNsdcOtZG9zLlxuICAgKi9cbiAgYXN5bmMgc2F2ZUFsbChyZWNvcmRzOiBBcnJheTxvYmplY3Q+LCBjdXN0b21SZXF1ZXN0SWRzPzogQXJyYXk8c3RyaW5nPiB8IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgdmFsaWRhdGVQYXJhbWV0ZXIoeyByZWNvcmRzIH0pO1xuXG4gICAgY29uc3Qgc2F2ZUFsbCA9IGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJhdGNoRXZlbnRzID0gW107XG5cbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCByZWNvcmRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCByZWNvcmQgPSByZWNvcmRzW2luZGV4XTtcbiAgICAgICAgY29uc3Qgc2VuZFRvRXZlbnRTb3VyY2luZyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGlzTm9uTG9jYWxSZWNvcmRDaGFuZ2VkID0gYXdhaXQgdGhpcy5pc05vbkxvY2FsUmVjb3JkQ2hhbmdlZChyZWNvcmQpO1xuICAgICAgICBjb25zdCB1cGRhdGVkUmVjb3JkID0gYXdhaXQgdGhpcy5zZWxlY3RTYXZlVHlwZShyZWNvcmQsIHNlbmRUb0V2ZW50U291cmNpbmcpO1xuXG4gICAgICAgIGlmIChpc05vbkxvY2FsUmVjb3JkQ2hhbmdlZCkge1xuICAgICAgICAgIGNvbnN0IGN1c3RvbVJlcXVlc3RJZCA9IGN1c3RvbVJlcXVlc3RJZHMgaW5zdGFuY2VvZiBBcnJheSA/IGN1c3RvbVJlcXVlc3RJZHNbaW5kZXhdIDogY3VzdG9tUmVxdWVzdElkcztcbiAgICAgICAgICBjb25zdCBldmVudE9wZXJhdGlvbiA9IHRoaXMuY3JlYXRlRXZlbnRPcGVyYXRpb24ocmVjb3JkLCB1cGRhdGVkUmVjb3JkLCBjdXN0b21SZXF1ZXN0SWQpO1xuICAgICAgICAgIGJhdGNoRXZlbnRzLnB1c2goZXZlbnRPcGVyYXRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuZXZlbnRTb3VyY2luZy5jcmVhdGVCYXRjaEV2ZW50cyh0aGlzLnNjaGVtYS5uYW1lLCBiYXRjaEV2ZW50cyk7XG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLnBvU2NoZW1hU2VydmljZS5saW1pdGVkQ2FsbFdyYXAoc2F2ZUFsbCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZShuZXdSZWNvcmQ6IGFueSwgc2VuZFRvRXZlbnRTb3VyY2luZzogYm9vbGVhbiwgY3VzdG9tUmVxdWVzdElkPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCB0aW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cbiAgICBjb25zdCBzeW5jUHJvcGVydGllcyA9IHtcbiAgICAgIFtQb1NjaGVtYVV0aWwuc3luY0ludGVybmFsSWRGaWVsZE5hbWVdOiB0aW1lLFxuICAgICAgU3luY0luc2VydGVkRGF0ZVRpbWU6IHRpbWUsXG4gICAgICBTeW5jVXBkYXRlZERhdGVUaW1lOiBudWxsLFxuICAgICAgU3luY0V4Y2x1c2lvbkRhdGVUaW1lOiBudWxsLFxuICAgICAgU3luY0RlbGV0ZWQ6IGZhbHNlLFxuICAgICAgU3luY1N0YXR1czogMFxuICAgIH07XG4gICAgY29uc3QgcmVjb3JkV2l0aFN5bmNQcm9wZXJ0aWVzID0geyAuLi5uZXdSZWNvcmQsIC4uLnN5bmNQcm9wZXJ0aWVzIH07XG5cbiAgICBjb25zdCByZWNvcmRlZERhdGEgPSBhd2FpdCB0aGlzLnBvU2NoZW1hU2VydmljZS5jcmVhdGUodGhpcy5zY2hlbWEsIHJlY29yZFdpdGhTeW5jUHJvcGVydGllcyk7XG5cbiAgICBpZiAoc2VuZFRvRXZlbnRTb3VyY2luZykge1xuICAgICAgYXdhaXQgdGhpcy5ldmVudFNvdXJjaW5nLmNyZWF0ZSh0aGlzLnNjaGVtYS5uYW1lLCByZWNvcmRXaXRoU3luY1Byb3BlcnRpZXMsIGN1c3RvbVJlcXVlc3RJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlY29yZGVkRGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRXZlbnRPcGVyYXRpb24oXG4gICAgcmVjb3JkOiBvYmplY3QsXG4gICAgdXBkYXRlZFJlY29yZDogb2JqZWN0LFxuICAgIGN1c3RvbVJlcXVlc3RJZD86IHN0cmluZ1xuICApOiBQb0V2ZW50U291cmNpbmdTdW1tYXJ5SXRlbSB7XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gUG9TY2hlbWFVdGlsLmdldFJlY29yZElkKHJlY29yZCwgdGhpcy5zY2hlbWEpXG4gICAgICA/IFBvRXZlbnRTb3VyY2luZ09wZXJhdGlvbi5VcGRhdGVcbiAgICAgIDogUG9FdmVudFNvdXJjaW5nT3BlcmF0aW9uLkluc2VydDtcblxuICAgIGNvbnN0IHNlcnZlclJlY29yZCA9IFBvU2NoZW1hVXRpbC5zZXBhcmF0ZVNjaGVtYUZpZWxkcyh0aGlzLnNjaGVtYSwgdXBkYXRlZFJlY29yZClbJ3NlcnZlclJlY29yZCddO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlY29yZDogc2VydmVyUmVjb3JkLFxuICAgICAgY3VzdG9tUmVxdWVzdElkOiBjdXN0b21SZXF1ZXN0SWQsXG4gICAgICBvcGVyYXRpb246IG9wZXJhdGlvblxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGlzTm9uTG9jYWxSZWNvcmRDaGFuZ2VkKHVwZGF0ZWRSZWNvcmQ6IG9iamVjdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IG5vbkxvY2FsRmllbGROYW1lcyA9IFBvU2NoZW1hVXRpbC5nZXROb25Mb2NhbEZpZWxkTmFtZXModGhpcy5zY2hlbWEpO1xuICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IHRoaXMucG9TY2hlbWFTZXJ2aWNlLmdldCh0aGlzLnNjaGVtYS5uYW1lLCB1cGRhdGVkUmVjb3JkW3RoaXMuc2NoZW1hLmlkRmllbGRdKTtcblxuICAgIHJldHVybiAhUG9TY2hlbWFVdGlsLmlzTW9kZWxzRXF1YWwobm9uTG9jYWxGaWVsZE5hbWVzLCByZWNvcmQsIHVwZGF0ZWRSZWNvcmQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZWxlY3RTYXZlVHlwZShcbiAgICByZWNvcmQ6IG9iamVjdCxcbiAgICBzZW5kVG9FdmVudFNvdXJjaW5nOiBib29sZWFuLFxuICAgIGN1c3RvbVJlcXVlc3RJZD86IHN0cmluZ1xuICApOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIGNvbnN0IGhhc0lkID0gUG9TY2hlbWFVdGlsLmdldFJlY29yZElkKHJlY29yZCwgdGhpcy5zY2hlbWEpO1xuXG4gICAgcmV0dXJuIGhhc0lkXG4gICAgICA/IGF3YWl0IHRoaXMudXBkYXRlKHJlY29yZCwgc2VuZFRvRXZlbnRTb3VyY2luZywgY3VzdG9tUmVxdWVzdElkKVxuICAgICAgOiBhd2FpdCB0aGlzLmNyZWF0ZShyZWNvcmQsIHNlbmRUb0V2ZW50U291cmNpbmcsIGN1c3RvbVJlcXVlc3RJZCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZSh1cGRhdGVkUmVjb3JkOiBhbnksIHNlbmRUb0V2ZW50U291cmNpbmc6IGJvb2xlYW4sIGN1c3RvbVJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgdXBkYXRlZFJlY29yZC5TeW5jVXBkYXRlZERhdGVUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgdXBkYXRlZFJlY29yZC5TeW5jU3RhdHVzID0gMDtcblxuICAgIGNvbnN0IGlzTm9uTG9jYWxSZWNvcmRDaGFuZ2VkID0gYXdhaXQgdGhpcy5pc05vbkxvY2FsUmVjb3JkQ2hhbmdlZCh1cGRhdGVkUmVjb3JkKTtcbiAgICBjb25zdCByZWNvcmRlZERhdGEgPSBhd2FpdCB0aGlzLnBvU2NoZW1hU2VydmljZS51cGRhdGUodGhpcy5zY2hlbWEsIHVwZGF0ZWRSZWNvcmQpO1xuXG4gICAgaWYgKGlzTm9uTG9jYWxSZWNvcmRDaGFuZ2VkICYmIHNlbmRUb0V2ZW50U291cmNpbmcpIHtcbiAgICAgIGNvbnN0IHNlcnZlclJlY29yZCA9IFBvU2NoZW1hVXRpbC5zZXBhcmF0ZVNjaGVtYUZpZWxkcyh0aGlzLnNjaGVtYSwgdXBkYXRlZFJlY29yZClbJ3NlcnZlclJlY29yZCddO1xuICAgICAgYXdhaXQgdGhpcy5ldmVudFNvdXJjaW5nLnVwZGF0ZSh0aGlzLnNjaGVtYS5uYW1lLCBzZXJ2ZXJSZWNvcmQsIGN1c3RvbVJlcXVlc3RJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlY29yZGVkRGF0YTtcbiAgfVxufVxuIl19
1
+ import { __awaiter } from "tslib";
2
+ import { validateParameter } from '../../utils/utils';
3
+ import { PoEventSourcingOperation } from '../../services/po-event-sourcing';
4
+ import { PoQueryBuilder } from './../po-query-builder/po-query-builder.model';
5
+ import { PoSchemaUtil } from '../../services/po-schema';
6
+ /**
7
+ * @description
8
+ *
9
+ * Uma instância `PoEntity` representa um *schema* e ela contém métodos que possibilitam manipular seus registros,
10
+ * como por exemplo: buscar, criar e remover.
11
+ *
12
+ * Esta instância pode ser obtida a partir do retorno do método `PoSyncService.getModel('schema name')`.
13
+ */
14
+ export class PoEntity {
15
+ constructor(eventSourcing, schema, poSchemaService) {
16
+ this.eventSourcing = eventSourcing;
17
+ this.schema = schema;
18
+ this.poSchemaService = poSchemaService;
19
+ }
20
+ /**
21
+ * Busca os registros do *schema*, podendo filtrar o resultado a partir do filtro passado e retornando apenas
22
+ * os campos definidos.
23
+ *
24
+ * Para que esta busca seja concluída é necessário utilizar o método `PoQueryBuilder.exec()`.
25
+ * Veja mais em: [PoQueryBuilder](/documentation/po-query-builder).
26
+ *
27
+ * @param {object} filter Objeto que contém os campos e valores a serem filtrados no *schema*.
28
+ * @param {string} fields Campos que serão retornados nos registros. Este campos devem estar dentro de
29
+ * uma *string* separados por espaço podendo usar o caractere `-` para excluir campos.
30
+ * Por exemplo, a definição abaixo:
31
+ *
32
+ * ```
33
+ * PoQueryBuilder.select('name age address');
34
+ * ```
35
+ * Irá retornar apenas os campos `name`, `age` e `address`. E para não mostrar um campo ou mais basta fazer:
36
+ *
37
+ * ```
38
+ * PoQueryBuilder.select('-name -age');
39
+ * ```
40
+ * @returns {PoQueryBuilder} Objeto que possibilita encadear um método do `PoQueryBuilder`.
41
+ */
42
+ find(filter, fields) {
43
+ const query = new PoQueryBuilder(this.poSchemaService, this.schema);
44
+ if (filter) {
45
+ query.filter(filter);
46
+ }
47
+ if (fields) {
48
+ query.select(fields);
49
+ }
50
+ return query;
51
+ }
52
+ /**
53
+ * Busca um registro pelo seu *id*.
54
+ *
55
+ * Para que esta busca seja concluída é necessário utilizar o método `PoQueryBuilder.exec()`.
56
+ * Veja mais em: [PoQueryBuilder](/documentation/po-query-builder).
57
+ *
58
+ * @param {any} id Identificador do registro.
59
+ * @param {string} fields Campos que serão retornados nos registros. Este campos devem estar dentro de
60
+ * uma *string* separados por espaço podendo usar o caractere `-` para excluir campos.
61
+ * Por exemplo, a definição abaixo:
62
+ *
63
+ * ```
64
+ * PoQueryBuilder.select('name age address');
65
+ * ```
66
+ * Irá retornar apenas os campos `name`, `age` e `address`. E para não mostrar um campo ou mais basta fazer:
67
+ *
68
+ * ```
69
+ * PoQueryBuilder.select('-name -age');
70
+ * ```
71
+ * @returns {PoQueryBuilder} Objeto que possibilita encadear um método do `PoQueryBuilder`.
72
+ */
73
+ findById(id, fields) {
74
+ return this.findOne({ [this.schema.idField]: id }, fields);
75
+ }
76
+ /**
77
+ * Semelhante ao método `PoEntity.find()`, porém retorna apenas o primeiro registro encontrado na busca.
78
+ *
79
+ * Para que esta busca seja concluída é necessário utilizar o método `PoQueryBuilder.exec()`.
80
+ * Veja mais em: [PoQueryBuilder](/documentation/po-query-builder).
81
+ *
82
+ * @param {any} filter Objeto que contém os campos e valores a serem filtrados no *schema*.
83
+ * @param {string} fields Campos que serão retornados nos registros. Este campos devem estar dentro de
84
+ * uma *string* separados por espaço podendo usar o caractere `-` para excluir campos.
85
+ * Por exemplo, a definição abaixo:
86
+ *
87
+ * ```
88
+ * PoQueryBuilder.select('name age address');
89
+ * ```
90
+ * Irá retornar apenas os campos `name`, `age` e `address`. E para não mostrar um campo ou mais basta fazer:
91
+ *
92
+ * ```
93
+ * PoQueryBuilder.select('-name -age');
94
+ * ```
95
+ * @returns {PoQueryBuilder} Objeto que possibilita encadear um método do `PoQueryBuilder`.
96
+ */
97
+ findOne(filter, fields) {
98
+ const query = this.find(filter, fields);
99
+ query.limit(1);
100
+ return query;
101
+ }
102
+ /**
103
+ * Remove um registro.
104
+ *
105
+ * @param {object} record Registro que será removido.
106
+ * @param {string} customRequestId Identificador customizado do comando.
107
+ * @returns {Promise} Promessa que é concluída após o registro ser removido.
108
+ */
109
+ remove(record, customRequestId) {
110
+ return __awaiter(this, void 0, void 0, function* () {
111
+ validateParameter({ record });
112
+ const remove = () => __awaiter(this, void 0, void 0, function* () {
113
+ const idField = record[this.schema.idField] ? this.schema.idField : PoSchemaUtil.syncInternalIdFieldName;
114
+ const serverRecord = PoSchemaUtil.separateSchemaFields(this.schema, record)['serverRecord'];
115
+ yield this.poSchemaService.remove(this.schema.name, record[idField]);
116
+ yield this.eventSourcing.remove(this.schema.name, serverRecord, customRequestId);
117
+ });
118
+ return this.poSchemaService.limitedCallWrap(remove);
119
+ });
120
+ }
121
+ /**
122
+ * Altera ou inclui um registro.
123
+ *
124
+ * > O registro será alterado se ele possuir um *id*, caso contrário um novo registro será criado.
125
+ *
126
+ * @param {object} record Registro que será persistido.
127
+ * @param {string} customRequestId Identificador customizado do comando.
128
+ * @returns {Promise} Promessa que é concluída após o registro ser alterado ou incluído.
129
+ */
130
+ save(record, customRequestId) {
131
+ return __awaiter(this, void 0, void 0, function* () {
132
+ validateParameter({ record });
133
+ return this.poSchemaService.limitedCallWrap(this.selectSaveType.bind(this, record, true, customRequestId));
134
+ });
135
+ }
136
+ /**
137
+ * Salva uma lista de registros em lote.
138
+ *
139
+ * > Para cada registro da lista, será inserido um novo registro se o mesmo não tiver *id*, caso contrário
140
+ * será contado como uma atualização de um registro existente.
141
+ *
142
+ * @param {Array<object>} records Lista de registros que serão persistidos.
143
+ * @param {Array<string> | string} customRequestIds Identificador customizado do comando.
144
+ *
145
+ * Ao passar uma lista de identificadores, cada índice da lista de identificadores deverá
146
+ * corresponder ao índice do registro na lista de registros.
147
+ * @returns {Promise<any>} Promessa que é concluída após os registros serem alterados ou incluídos.
148
+ */
149
+ saveAll(records, customRequestIds) {
150
+ return __awaiter(this, void 0, void 0, function* () {
151
+ validateParameter({ records });
152
+ const saveAll = () => __awaiter(this, void 0, void 0, function* () {
153
+ const batchEvents = [];
154
+ for (let index = 0; index < records.length; index++) {
155
+ const record = records[index];
156
+ const sendToEventSourcing = false;
157
+ const isNonLocalRecordChanged = yield this.isNonLocalRecordChanged(record);
158
+ const updatedRecord = yield this.selectSaveType(record, sendToEventSourcing);
159
+ if (isNonLocalRecordChanged) {
160
+ const customRequestId = customRequestIds instanceof Array ? customRequestIds[index] : customRequestIds;
161
+ const eventOperation = this.createEventOperation(record, updatedRecord, customRequestId);
162
+ batchEvents.push(eventOperation);
163
+ }
164
+ }
165
+ yield this.eventSourcing.createBatchEvents(this.schema.name, batchEvents);
166
+ });
167
+ return this.poSchemaService.limitedCallWrap(saveAll);
168
+ });
169
+ }
170
+ create(newRecord, sendToEventSourcing, customRequestId) {
171
+ return __awaiter(this, void 0, void 0, function* () {
172
+ const time = new Date().getTime();
173
+ const syncProperties = {
174
+ [PoSchemaUtil.syncInternalIdFieldName]: time,
175
+ SyncInsertedDateTime: time,
176
+ SyncUpdatedDateTime: null,
177
+ SyncExclusionDateTime: null,
178
+ SyncDeleted: false,
179
+ SyncStatus: 0
180
+ };
181
+ const recordWithSyncProperties = Object.assign(Object.assign({}, newRecord), syncProperties);
182
+ const recordedData = yield this.poSchemaService.create(this.schema, recordWithSyncProperties);
183
+ if (sendToEventSourcing) {
184
+ yield this.eventSourcing.create(this.schema.name, recordWithSyncProperties, customRequestId);
185
+ }
186
+ return recordedData;
187
+ });
188
+ }
189
+ createEventOperation(record, updatedRecord, customRequestId) {
190
+ const operation = PoSchemaUtil.getRecordId(record, this.schema)
191
+ ? PoEventSourcingOperation.Update
192
+ : PoEventSourcingOperation.Insert;
193
+ const serverRecord = PoSchemaUtil.separateSchemaFields(this.schema, updatedRecord)['serverRecord'];
194
+ return {
195
+ record: serverRecord,
196
+ customRequestId: customRequestId,
197
+ operation: operation
198
+ };
199
+ }
200
+ isNonLocalRecordChanged(updatedRecord) {
201
+ return __awaiter(this, void 0, void 0, function* () {
202
+ const nonLocalFieldNames = PoSchemaUtil.getNonLocalFieldNames(this.schema);
203
+ const record = yield this.poSchemaService.get(this.schema.name, updatedRecord[this.schema.idField]);
204
+ return !PoSchemaUtil.isModelsEqual(nonLocalFieldNames, record, updatedRecord);
205
+ });
206
+ }
207
+ selectSaveType(record, sendToEventSourcing, customRequestId) {
208
+ return __awaiter(this, void 0, void 0, function* () {
209
+ const hasId = PoSchemaUtil.getRecordId(record, this.schema);
210
+ return hasId
211
+ ? yield this.update(record, sendToEventSourcing, customRequestId)
212
+ : yield this.create(record, sendToEventSourcing, customRequestId);
213
+ });
214
+ }
215
+ update(updatedRecord, sendToEventSourcing, customRequestId) {
216
+ return __awaiter(this, void 0, void 0, function* () {
217
+ updatedRecord.SyncUpdatedDateTime = new Date().getTime();
218
+ updatedRecord.SyncStatus = 0;
219
+ const isNonLocalRecordChanged = yield this.isNonLocalRecordChanged(updatedRecord);
220
+ const recordedData = yield this.poSchemaService.update(this.schema, updatedRecord);
221
+ if (isNonLocalRecordChanged && sendToEventSourcing) {
222
+ const serverRecord = PoSchemaUtil.separateSchemaFields(this.schema, updatedRecord)['serverRecord'];
223
+ yield this.eventSourcing.update(this.schema.name, serverRecord, customRequestId);
224
+ }
225
+ return recordedData;
226
+ });
227
+ }
228
+ }
229
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZW50aXR5Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3luYy9zcmMvbGliL21vZGVscy9wby1lbnRpdHkvcG8tZW50aXR5Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUV0RCxPQUFPLEVBQ0wsd0JBQXdCLEVBR3pCLE1BQU0sa0NBQWtDLENBQUM7QUFDMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzlFLE9BQU8sRUFBbUIsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHekU7Ozs7Ozs7R0FPRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBQ25CLFlBQ1UsYUFBcUMsRUFDckMsTUFBb0IsRUFDcEIsZUFBZ0M7UUFGaEMsa0JBQWEsR0FBYixhQUFhLENBQXdCO1FBQ3JDLFdBQU0sR0FBTixNQUFNLENBQWM7UUFDcEIsb0JBQWUsR0FBZixlQUFlLENBQWlCO0lBQ3ZDLENBQUM7SUFFSjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BcUJHO0lBQ0gsSUFBSSxDQUFDLE1BQWUsRUFBRSxNQUFlO1FBQ25DLE1BQU0sS0FBSyxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXBFLElBQUksTUFBTSxFQUFFO1lBQ1YsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN0QjtRQUVELElBQUksTUFBTSxFQUFFO1lBQ1YsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN0QjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQW9CRztJQUNILFFBQVEsQ0FBQyxFQUFPLEVBQUUsTUFBZTtRQUMvQixPQUFPLElBQUks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SUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDdEUsQ0FBQztLQUFBO0lBRWEsTUFBTSxDQUFDLGFBQWtCLEVBQUUsbUJBQTRCLEVBQUUsZUFBd0I7O1lBQzdGLGFBQWEsQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3pELGFBQWEsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBRTdCLE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDbEYsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBRW5GLElBQUksdUJBQXVCLElBQUksbUJBQW1CLEVBQUU7Z0JBQ2xELE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNuRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQzthQUNsRjtZQUVELE9BQU8sWUFBWSxDQUFDO1FBQ3RCLENBQUM7S0FBQTtDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdmFsaWRhdGVQYXJhbWV0ZXIgfSBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFBvRXZlbnRTb3VyY2luZ09wZXJhdGlvbixcclxuICBQb0V2ZW50U291cmNpbmdTZXJ2aWNlLFxyXG4gIFBvRXZlbnRTb3VyY2luZ1N1bW1hcnlJdGVtXHJcbn0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG8tZXZlbnQtc291cmNpbmcnO1xyXG5pbXBvcnQgeyBQb1F1ZXJ5QnVpbGRlciB9IGZyb20gJy4vLi4vcG8tcXVlcnktYnVpbGRlci9wby1xdWVyeS1idWlsZGVyLm1vZGVsJztcclxuaW1wb3J0IHsgUG9TY2hlbWFTZXJ2aWNlLCBQb1NjaGVtYVV0aWwgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wby1zY2hlbWEnO1xyXG5pbXBvcnQgeyBQb1N5bmNTY2hlbWEgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wby1zeW5jL2ludGVyZmFjZXMvcG8tc3luYy1zY2hlbWEuaW50ZXJmYWNlJztcclxuXHJcbi8qKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICpcclxuICogVW1hIGluc3TDom5jaWEgYFBvRW50aXR5YCByZXByZXNlbnRhIHVtICpzY2hlbWEqIGUgZWxhIGNvbnTDqW0gbcOpdG9kb3MgcXVlIHBvc3NpYmlsaXRhbSBtYW5pcHVsYXIgc2V1cyByZWdpc3Ryb3MsXHJcbiAqIGNvbW8gcG9yIGV4ZW1wbG86IGJ1c2NhciwgY3JpYXIgZSByZW1vdmVyLlxyXG4gKlxyXG4gKiBFc3RhIGluc3TDom5jaWEgcG9kZSBzZXIgb2J0aWRhIGEgcGFydGlyIGRvIHJldG9ybm8gZG8gbcOpdG9kbyBgUG9TeW5jU2VydmljZS5nZXRNb2RlbCgnc2NoZW1hIG5hbWUnKWAuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgUG9FbnRpdHkge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBldmVudFNvdXJjaW5nOiBQb0V2ZW50U291cmNpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzY2hlbWE6IFBvU3luY1NjaGVtYSxcclxuICAgIHByaXZhdGUgcG9TY2hlbWFTZXJ2aWNlOiBQb1NjaGVtYVNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEJ1c2NhIG9zIHJlZ2lzdHJvcyBkbyAqc2NoZW1hKiwgcG9kZW5kbyBmaWx0cmFyIG8gcmVzdWx0YWRvIGEgcGFydGlyIGRvIGZpbHRybyBwYXNzYWRvIGUgcmV0b3JuYW5kbyBhcGVuYXNcclxuICAgKiBvcyBjYW1wb3MgZGVmaW5pZG9zLlxyXG4gICAqXHJcbiAgICogUGFyYSBxdWUgZXN0YSBidXNjYSBzZWphIGNvbmNsdcOtZGEgw6kgbmVjZXNzw6FyaW8gdXRpbGl6YXIgbyBtw6l0b2RvIGBQb1F1ZXJ5QnVpbGRlci5leGVjKClgLlxyXG4gICAqIFZlamEgbWFpcyBlbTogW1BvUXVlcnlCdWlsZGVyXSgvZG9jdW1lbnRhdGlvbi9wby1xdWVyeS1idWlsZGVyKS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBmaWx0ZXIgT2JqZXRvIHF1ZSBjb250w6ltIG9zIGNhbXBvcyBlIHZhbG9yZXMgYSBzZXJlbSBmaWx0cmFkb3Mgbm8gKnNjaGVtYSouXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkcyBDYW1wb3MgcXVlIHNlcsOjbyByZXRvcm5hZG9zIG5vcyByZWdpc3Ryb3MuIEVzdGUgY2FtcG9zIGRldmVtIGVzdGFyIGRlbnRybyBkZVxyXG4gICAqIHVtYSAqc3RyaW5nKiBzZXBhcmFkb3MgcG9yIGVzcGHDp28gcG9kZW5kbyB1c2FyIG8gY2FyYWN0ZXJlIGAtYCBwYXJhIGV4Y2x1aXIgY2FtcG9zLlxyXG4gICAqIFBvciBleGVtcGxvLCBhIGRlZmluacOnw6NvIGFiYWl4bzpcclxuICAgKlxyXG4gICAqIGBgYFxyXG4gICAqIFBvUXVlcnlCdWlsZGVyLnNlbGVjdCgnbmFtZSBhZ2UgYWRkcmVzcycpO1xyXG4gICAqIGBgYFxyXG4gICAqIElyw6EgcmV0b3JuYXIgYXBlbmFzIG9zIGNhbXBvcyBgbmFtZWAsIGBhZ2VgIGUgYGFkZHJlc3NgLiBFIHBhcmEgbsOjbyBtb3N0cmFyIHVtIGNhbXBvIG91IG1haXMgYmFzdGEgZmF6ZXI6XHJcbiAgICpcclxuICAgKiBgYGBcclxuICAgKiBQb1F1ZXJ5QnVpbGRlci5zZWxlY3QoJy1uYW1lIC1hZ2UnKTtcclxuICAgKiBgYGBcclxuICAgKiBAcmV0dXJucyB7UG9RdWVyeUJ1aWxkZXJ9IE9iamV0byBxdWUgcG9zc2liaWxpdGEgZW5jYWRlYXIgdW0gbcOpdG9kbyBkbyBgUG9RdWVyeUJ1aWxkZXJgLlxyXG4gICAqL1xyXG4gIGZpbmQoZmlsdGVyPzogb2JqZWN0LCBmaWVsZHM/OiBzdHJpbmcpOiBQb1F1ZXJ5QnVpbGRlciB7XHJcbiAgICBjb25zdCBxdWVyeSA9IG5ldyBQb1F1ZXJ5QnVpbGRlcih0aGlzLnBvU2NoZW1hU2VydmljZSwgdGhpcy5zY2hlbWEpO1xyXG5cclxuICAgIGlmIChmaWx0ZXIpIHtcclxuICAgICAgcXVlcnkuZmlsdGVyKGZpbHRlcik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZpZWxkcykge1xyXG4gICAgICBxdWVyeS5zZWxlY3QoZmllbGRzKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcXVlcnk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBCdXNjYSB1bSByZWdpc3RybyBwZWxvIHNldSAqaWQqLlxyXG4gICAqXHJcbiAgICogUGFyYSBxdWUgZXN0YSBidXNjYSBzZWphIGNvbmNsdcOtZGEgw6kgbmVjZXNzw6FyaW8gdXRpbGl6YXIgbyBtw6l0b2RvIGBQb1F1ZXJ5QnVpbGRlci5leGVjKClgLlxyXG4gICAqIFZlamEgbWFpcyBlbTogW1BvUXVlcnlCdWlsZGVyXSgvZG9jdW1lbnRhdGlvbi9wby1xdWVyeS1idWlsZGVyKS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7YW55fSBpZCBJZGVudGlmaWNhZG9yIGRvIHJlZ2lzdHJvLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZHMgQ2FtcG9zIHF1ZSBzZXLDo28gcmV0b3JuYWRvcyBub3MgcmVnaXN0cm9zLiBFc3RlIGNhbXBvcyBkZXZlbSBlc3RhciBkZW50cm8gZGVcclxuICAgKiB1bWEgKnN0cmluZyogc2VwYXJhZG9zIHBvciBlc3Bhw6dvIHBvZGVuZG8gdXNhciBvIGNhcmFjdGVyZSBgLWAgcGFyYSBleGNsdWlyIGNhbXBvcy5cclxuICAgKiBQb3IgZXhlbXBsbywgYSBkZWZpbmnDp8OjbyBhYmFpeG86XHJcbiAgICpcclxuICAgKiBgYGBcclxuICAgKiBQb1F1ZXJ5QnVpbGRlci5zZWxlY3QoJ25hbWUgYWdlIGFkZHJlc3MnKTtcclxuICAgKiBgYGBcclxuICAgKiBJcsOhIHJldG9ybmFyIGFwZW5hcyBvcyBjYW1wb3MgYG5hbWVgLCBgYWdlYCBlIGBhZGRyZXNzYC4gRSBwYXJhIG7Do28gbW9zdHJhciB1bSBjYW1wbyBvdSBtYWlzIGJhc3RhIGZhemVyOlxyXG4gICAqXHJcbiAgICogYGBgXHJcbiAgICogUG9RdWVyeUJ1aWxkZXIuc2VsZWN0KCctbmFtZSAtYWdlJyk7XHJcbiAgICogYGBgXHJcbiAgICogQHJldHVybnMge1BvUXVlcnlCdWlsZGVyfSBPYmpldG8gcXVlIHBvc3NpYmlsaXRhIGVuY2FkZWFyIHVtIG3DqXRvZG8gZG8gYFBvUXVlcnlCdWlsZGVyYC5cclxuICAgKi9cclxuICBmaW5kQnlJZChpZDogYW55LCBmaWVsZHM/OiBzdHJpbmcpOiBQb1F1ZXJ5QnVpbGRlciB7XHJcbiAgICByZXR1cm4gdGhpcy5maW5kT25lKHsgW3RoaXMuc2NoZW1hLmlkRmllbGRdOiBpZCB9LCBmaWVsZHMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VtZWxoYW50ZSBhbyBtw6l0b2RvIGBQb0VudGl0eS5maW5kKClgLCBwb3LDqW0gcmV0b3JuYSBhcGVuYXMgbyBwcmltZWlybyByZWdpc3RybyBlbmNvbnRyYWRvIG5hIGJ1c2NhLlxyXG4gICAqXHJcbiAgICogUGFyYSBxdWUgZXN0YSBidXNjYSBzZWphIGNvbmNsdcOtZGEgw6kgbmVjZXNzw6FyaW8gdXRpbGl6YXIgbyBtw6l0b2RvIGBQb1F1ZXJ5QnVpbGRlci5leGVjKClgLlxyXG4gICAqIFZlamEgbWFpcyBlbTogW1BvUXVlcnlCdWlsZGVyXSgvZG9jdW1lbnRhdGlvbi9wby1xdWVyeS1idWlsZGVyKS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7YW55fSBmaWx0ZXIgT2JqZXRvIHF1ZSBjb250w6ltIG9zIGNhbXBvcyBlIHZhbG9yZXMgYSBzZXJlbSBmaWx0cmFkb3Mgbm8gKnNjaGVtYSouXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkcyBDYW1wb3MgcXVlIHNlcsOjbyByZXRvcm5hZG9zIG5vcyByZWdpc3Ryb3MuIEVzdGUgY2FtcG9zIGRldmVtIGVzdGFyIGRlbnRybyBkZVxyXG4gICAqIHVtYSAqc3RyaW5nKiBzZXBhcmFkb3MgcG9yIGVzcGHDp28gcG9kZW5kbyB1c2FyIG8gY2FyYWN0ZXJlIGAtYCBwYXJhIGV4Y2x1aXIgY2FtcG9zLlxyXG4gICAqIFBvciBleGVtcGxvLCBhIGRlZmluacOnw6NvIGFiYWl4bzpcclxuICAgKlxyXG4gICAqIGBgYFxyXG4gICAqIFBvUXVlcnlCdWlsZGVyLnNlbGVjdCgnbmFtZSBhZ2UgYWRkcmVzcycpO1xyXG4gICAqIGBgYFxyXG4gICAqIElyw6EgcmV0b3JuYXIgYXBlbmFzIG9zIGNhbXBvcyBgbmFtZWAsIGBhZ2VgIGUgYGFkZHJlc3NgLiBFIHBhcmEgbsOjbyBtb3N0cmFyIHVtIGNhbXBvIG91IG1haXMgYmFzdGEgZmF6ZXI6XHJcbiAgICpcclxuICAgKiBgYGBcclxuICAgKiBQb1F1ZXJ5QnVpbGRlci5zZWxlY3QoJy1uYW1lIC1hZ2UnKTtcclxuICAgKiBgYGBcclxuICAgKiBAcmV0dXJucyB7UG9RdWVyeUJ1aWxkZXJ9IE9iamV0byBxdWUgcG9zc2liaWxpdGEgZW5jYWRlYXIgdW0gbcOpdG9kbyBkbyBgUG9RdWVyeUJ1aWxkZXJgLlxyXG4gICAqL1xyXG4gIGZpbmRPbmUoZmlsdGVyPzogYW55LCBmaWVsZHM/OiBzdHJpbmcpOiBQb1F1ZXJ5QnVpbGRlciB7XHJcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuZmluZChmaWx0ZXIsIGZpZWxkcyk7XHJcbiAgICBxdWVyeS5saW1pdCgxKTtcclxuICAgIHJldHVybiBxdWVyeTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSB1bSByZWdpc3Ryby5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWNvcmQgUmVnaXN0cm8gcXVlIHNlcsOhIHJlbW92aWRvLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXN0b21SZXF1ZXN0SWQgSWRlbnRpZmljYWRvciBjdXN0b21pemFkbyBkbyBjb21hbmRvLlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9tZXNzYSBxdWUgw6kgY29uY2x1w61kYSBhcMOzcyBvIHJlZ2lzdHJvIHNlciByZW1vdmlkby5cclxuICAgKi9cclxuICBhc3luYyByZW1vdmUocmVjb3JkOiBvYmplY3QsIGN1c3RvbVJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICB2YWxpZGF0ZVBhcmFtZXRlcih7IHJlY29yZCB9KTtcclxuXHJcbiAgICBjb25zdCByZW1vdmUgPSBhc3luYyAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGlkRmllbGQgPSByZWNvcmRbdGhpcy5zY2hlbWEuaWRGaWVsZF0gPyB0aGlzLnNjaGVtYS5pZEZpZWxkIDogUG9TY2hlbWFVdGlsLnN5bmNJbnRlcm5hbElkRmllbGROYW1lO1xyXG4gICAgICBjb25zdCBzZXJ2ZXJSZWNvcmQgPSBQb1NjaGVtYVV0aWwuc2VwYXJhdGVTY2hlbWFGaWVsZHModGhpcy5zY2hlbWEsIHJlY29yZClbJ3NlcnZlclJlY29yZCddO1xyXG5cclxuICAgICAgYXdhaXQgdGhpcy5wb1NjaGVtYVNlcnZpY2UucmVtb3ZlKHRoaXMuc2NoZW1hLm5hbWUsIHJlY29yZFtpZEZpZWxkXSk7XHJcbiAgICAgIGF3YWl0IHRoaXMuZXZlbnRTb3VyY2luZy5yZW1vdmUodGhpcy5zY2hlbWEubmFtZSwgc2VydmVyUmVjb3JkLCBjdXN0b21SZXF1ZXN0SWQpO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5wb1NjaGVtYVNlcnZpY2UubGltaXRlZENhbGxXcmFwKHJlbW92ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbHRlcmEgb3UgaW5jbHVpIHVtIHJlZ2lzdHJvLlxyXG4gICAqXHJcbiAgICogPiBPIHJlZ2lzdHJvIHNlcsOhIGFsdGVyYWRvIHNlIGVsZSBwb3NzdWlyIHVtICppZCosIGNhc28gY29udHLDoXJpbyB1bSBub3ZvIHJlZ2lzdHJvIHNlcsOhIGNyaWFkby5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWNvcmQgUmVnaXN0cm8gcXVlIHNlcsOhIHBlcnNpc3RpZG8uXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN1c3RvbVJlcXVlc3RJZCBJZGVudGlmaWNhZG9yIGN1c3RvbWl6YWRvIGRvIGNvbWFuZG8uXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9IFByb21lc3NhIHF1ZSDDqSBjb25jbHXDrWRhIGFww7NzIG8gcmVnaXN0cm8gc2VyIGFsdGVyYWRvIG91IGluY2x1w61kby5cclxuICAgKi9cclxuICBhc3luYyBzYXZlKHJlY29yZDogb2JqZWN0LCBjdXN0b21SZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgdmFsaWRhdGVQYXJhbWV0ZXIoeyByZWNvcmQgfSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMucG9TY2hlbWFTZXJ2aWNlLmxpbWl0ZWRDYWxsV3JhcCh0aGlzLnNlbGVjdFNhdmVUeXBlLmJpbmQodGhpcywgcmVjb3JkLCB0cnVlLCBjdXN0b21SZXF1ZXN0SWQpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNhbHZhIHVtYSBsaXN0YSBkZSByZWdpc3Ryb3MgZW0gbG90ZS5cclxuICAgKlxyXG4gICAqID4gUGFyYSBjYWRhIHJlZ2lzdHJvIGRhIGxpc3RhLCBzZXLDoSBpbnNlcmlkbyB1bSBub3ZvIHJlZ2lzdHJvIHNlIG8gbWVzbW8gbsOjbyB0aXZlciAqaWQqLCBjYXNvIGNvbnRyw6FyaW9cclxuICAgKiBzZXLDoSBjb250YWRvIGNvbW8gdW1hIGF0dWFsaXphw6fDo28gZGUgdW0gcmVnaXN0cm8gZXhpc3RlbnRlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBcnJheTxvYmplY3Q+fSByZWNvcmRzIExpc3RhIGRlIHJlZ2lzdHJvcyBxdWUgc2Vyw6NvIHBlcnNpc3RpZG9zLlxyXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPiB8IHN0cmluZ30gY3VzdG9tUmVxdWVzdElkcyBJZGVudGlmaWNhZG9yIGN1c3RvbWl6YWRvIGRvIGNvbWFuZG8uXHJcbiAgICpcclxuICAgKiBBbyBwYXNzYXIgdW1hIGxpc3RhIGRlIGlkZW50aWZpY2Fkb3JlcywgY2FkYSDDrW5kaWNlIGRhIGxpc3RhIGRlIGlkZW50aWZpY2Fkb3JlcyBkZXZlcsOhXHJcbiAgICogY29ycmVzcG9uZGVyIGFvIMOtbmRpY2UgZG8gcmVnaXN0cm8gbmEgbGlzdGEgZGUgcmVnaXN0cm9zLlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59IFByb21lc3NhIHF1ZSDDqSBjb25jbHXDrWRhIGFww7NzIG9zIHJlZ2lzdHJvcyBzZXJlbSBhbHRlcmFkb3Mgb3UgaW5jbHXDrWRvcy5cclxuICAgKi9cclxuICBhc3luYyBzYXZlQWxsKHJlY29yZHM6IEFycmF5PG9iamVjdD4sIGN1c3RvbVJlcXVlc3RJZHM/OiBBcnJheTxzdHJpbmc+IHwgc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHZhbGlkYXRlUGFyYW1ldGVyKHsgcmVjb3JkcyB9KTtcclxuXHJcbiAgICBjb25zdCBzYXZlQWxsID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICBjb25zdCBiYXRjaEV2ZW50cyA9IFtdO1xyXG5cclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHJlY29yZHMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgY29uc3QgcmVjb3JkID0gcmVjb3Jkc1tpbmRleF07XHJcbiAgICAgICAgY29uc3Qgc2VuZFRvRXZlbnRTb3VyY2luZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBjb25zdCBpc05vbkxvY2FsUmVjb3JkQ2hhbmdlZCA9IGF3YWl0IHRoaXMuaXNOb25Mb2NhbFJlY29yZENoYW5nZWQocmVjb3JkKTtcclxuICAgICAgICBjb25zdCB1cGRhdGVkUmVjb3JkID0gYXdhaXQgdGhpcy5zZWxlY3RTYXZlVHlwZShyZWNvcmQsIHNlbmRUb0V2ZW50U291cmNpbmcpO1xyXG5cclxuICAgICAgICBpZiAoaXNOb25Mb2NhbFJlY29yZENoYW5nZWQpIHtcclxuICAgICAgICAgIGNvbnN0IGN1c3RvbVJlcXVlc3RJZCA9IGN1c3RvbVJlcXVlc3RJZHMgaW5zdGFuY2VvZiBBcnJheSA/IGN1c3RvbVJlcXVlc3RJZHNbaW5kZXhdIDogY3VzdG9tUmVxdWVzdElkcztcclxuICAgICAgICAgIGNvbnN0IGV2ZW50T3BlcmF0aW9uID0gdGhpcy5jcmVhdGVFdmVudE9wZXJhdGlvbihyZWNvcmQsIHVwZGF0ZWRSZWNvcmQsIGN1c3RvbVJlcXVlc3RJZCk7XHJcbiAgICAgICAgICBiYXRjaEV2ZW50cy5wdXNoKGV2ZW50T3BlcmF0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGF3YWl0IHRoaXMuZXZlbnRTb3VyY2luZy5jcmVhdGVCYXRjaEV2ZW50cyh0aGlzLnNjaGVtYS5uYW1lLCBiYXRjaEV2ZW50cyk7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLnBvU2NoZW1hU2VydmljZS5saW1pdGVkQ2FsbFdyYXAoc2F2ZUFsbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZShuZXdSZWNvcmQ6IGFueSwgc2VuZFRvRXZlbnRTb3VyY2luZzogYm9vbGVhbiwgY3VzdG9tUmVxdWVzdElkPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGNvbnN0IHRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuXHJcbiAgICBjb25zdCBzeW5jUHJvcGVydGllcyA9IHtcclxuICAgICAgW1BvU2NoZW1hVXRpbC5zeW5jSW50ZXJuYWxJZEZpZWxkTmFtZV06IHRpbWUsXHJcbiAgICAgIFN5bmNJbnNlcnRlZERhdGVUaW1lOiB0aW1lLFxyXG4gICAgICBTeW5jVXBkYXRlZERhdGVUaW1lOiBudWxsLFxyXG4gICAgICBTeW5jRXhjbHVzaW9uRGF0ZVRpbWU6IG51bGwsXHJcbiAgICAgIFN5bmNEZWxldGVkOiBmYWxzZSxcclxuICAgICAgU3luY1N0YXR1czogMFxyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlY29yZFdpdGhTeW5jUHJvcGVydGllcyA9IHsgLi4ubmV3UmVjb3JkLCAuLi5zeW5jUHJvcGVydGllcyB9O1xyXG5cclxuICAgIGNvbnN0IHJlY29yZGVkRGF0YSA9IGF3YWl0IHRoaXMucG9TY2hlbWFTZXJ2aWNlLmNyZWF0ZSh0aGlzLnNjaGVtYSwgcmVjb3JkV2l0aFN5bmNQcm9wZXJ0aWVzKTtcclxuXHJcbiAgICBpZiAoc2VuZFRvRXZlbnRTb3VyY2luZykge1xyXG4gICAgICBhd2FpdCB0aGlzLmV2ZW50U291cmNpbmcuY3JlYXRlKHRoaXMuc2NoZW1hLm5hbWUsIHJlY29yZFdpdGhTeW5jUHJvcGVydGllcywgY3VzdG9tUmVxdWVzdElkKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVjb3JkZWREYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVFdmVudE9wZXJhdGlvbihcclxuICAgIHJlY29yZDogb2JqZWN0LFxyXG4gICAgdXBkYXRlZFJlY29yZDogb2JqZWN0LFxyXG4gICAgY3VzdG9tUmVxdWVzdElkPzogc3RyaW5nXHJcbiAgKTogUG9FdmVudFNvdXJjaW5nU3VtbWFyeUl0ZW0ge1xyXG4gICAgY29uc3Qgb3BlcmF0aW9uID0gUG9TY2hlbWFVdGlsLmdldFJlY29yZElkKHJlY29yZCwgdGhpcy5zY2hlbWEpXHJcbiAgICAgID8gUG9FdmVudFNvdXJjaW5nT3BlcmF0aW9uLlVwZGF0ZVxyXG4gICAgICA6IFBvRXZlbnRTb3VyY2luZ09wZXJhdGlvbi5JbnNlcnQ7XHJcblxyXG4gICAgY29uc3Qgc2VydmVyUmVjb3JkID0gUG9TY2hlbWFVdGlsLnNlcGFyYXRlU2NoZW1hRmllbGRzKHRoaXMuc2NoZW1hLCB1cGRhdGVkUmVjb3JkKVsnc2VydmVyUmVjb3JkJ107XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVjb3JkOiBzZXJ2ZXJSZWNvcmQsXHJcbiAgICAgIGN1c3RvbVJlcXVlc3RJZDogY3VzdG9tUmVxdWVzdElkLFxyXG4gICAgICBvcGVyYXRpb246IG9wZXJhdGlvblxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgaXNOb25Mb2NhbFJlY29yZENoYW5nZWQodXBkYXRlZFJlY29yZDogb2JqZWN0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBub25Mb2NhbEZpZWxkTmFtZXMgPSBQb1NjaGVtYVV0aWwuZ2V0Tm9uTG9jYWxGaWVsZE5hbWVzKHRoaXMuc2NoZW1hKTtcclxuICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IHRoaXMucG9TY2hlbWFTZXJ2aWNlLmdldCh0aGlzLnNjaGVtYS5uYW1lLCB1cGRhdGVkUmVjb3JkW3RoaXMuc2NoZW1hLmlkRmllbGRdKTtcclxuXHJcbiAgICByZXR1cm4gIVBvU2NoZW1hVXRpbC5pc01vZGVsc0VxdWFsKG5vbkxvY2FsRmllbGROYW1lcywgcmVjb3JkLCB1cGRhdGVkUmVjb3JkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc2VsZWN0U2F2ZVR5cGUoXHJcbiAgICByZWNvcmQ6IG9iamVjdCxcclxuICAgIHNlbmRUb0V2ZW50U291cmNpbmc6IGJvb2xlYW4sXHJcbiAgICBjdXN0b21SZXF1ZXN0SWQ/OiBzdHJpbmdcclxuICApOiBQcm9taXNlPG9iamVjdD4ge1xyXG4gICAgY29uc3QgaGFzSWQgPSBQb1NjaGVtYVV0aWwuZ2V0UmVjb3JkSWQocmVjb3JkLCB0aGlzLnNjaGVtYSk7XHJcblxyXG4gICAgcmV0dXJuIGhhc0lkXHJcbiAgICAgID8gYXdhaXQgdGhpcy51cGRhdGUocmVjb3JkLCBzZW5kVG9FdmVudFNvdXJjaW5nLCBjdXN0b21SZXF1ZXN0SWQpXHJcbiAgICAgIDogYXdhaXQgdGhpcy5jcmVhdGUocmVjb3JkLCBzZW5kVG9FdmVudFNvdXJjaW5nLCBjdXN0b21SZXF1ZXN0SWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGUodXBkYXRlZFJlY29yZDogYW55LCBzZW5kVG9FdmVudFNvdXJjaW5nOiBib29sZWFuLCBjdXN0b21SZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPG9iamVjdD4ge1xyXG4gICAgdXBkYXRlZFJlY29yZC5TeW5jVXBkYXRlZERhdGVUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICB1cGRhdGVkUmVjb3JkLlN5bmNTdGF0dXMgPSAwO1xyXG5cclxuICAgIGNvbnN0IGlzTm9uTG9jYWxSZWNvcmRDaGFuZ2VkID0gYXdhaXQgdGhpcy5pc05vbkxvY2FsUmVjb3JkQ2hhbmdlZCh1cGRhdGVkUmVjb3JkKTtcclxuICAgIGNvbnN0IHJlY29yZGVkRGF0YSA9IGF3YWl0IHRoaXMucG9TY2hlbWFTZXJ2aWNlLnVwZGF0ZSh0aGlzLnNjaGVtYSwgdXBkYXRlZFJlY29yZCk7XHJcblxyXG4gICAgaWYgKGlzTm9uTG9jYWxSZWNvcmRDaGFuZ2VkICYmIHNlbmRUb0V2ZW50U291cmNpbmcpIHtcclxuICAgICAgY29uc3Qgc2VydmVyUmVjb3JkID0gUG9TY2hlbWFVdGlsLnNlcGFyYXRlU2NoZW1hRmllbGRzKHRoaXMuc2NoZW1hLCB1cGRhdGVkUmVjb3JkKVsnc2VydmVyUmVjb3JkJ107XHJcbiAgICAgIGF3YWl0IHRoaXMuZXZlbnRTb3VyY2luZy51cGRhdGUodGhpcy5zY2hlbWEubmFtZSwgc2VydmVyUmVjb3JkLCBjdXN0b21SZXF1ZXN0SWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZWNvcmRlZERhdGE7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,17 +1,17 @@
1
- /**
2
- * @description
3
- *
4
- * Classe que define a resposta de erro para um item da fila de eventos que não foi enviado ao servidor por
5
- * alguma inconsistência.
6
- *
7
- * > Pode ser utilizada em casos onde um item da fila é enviado ao servidor com inconsistência nos dados, por exemplo
8
- * uma operação de *delete* ou *update* sem o `id` do objeto.
9
- */
10
- export class PoEventSourcingErrorResponse {
11
- /* istanbul ignore next */
12
- constructor({ message, operation }) {
13
- this.message = message;
14
- this.operation = operation;
15
- }
16
- }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZXZlbnQtc291cmNpbmctZXJyb3ItcmVzcG9uc2UubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zeW5jL3NyYy9saWIvbW9kZWxzL3BvLWV2ZW50LXNvdXJjaW5nLWVycm9yLXJlc3BvbnNlLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxPQUFPLDRCQUE0QjtJQU92QywwQkFBMEI7SUFDMUIsWUFBWSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUU7UUFDaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDN0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9FdmVudFNvdXJjaW5nT3BlcmF0aW9uIH0gZnJvbSAnLi8uLi9zZXJ2aWNlcy9wby1ldmVudC1zb3VyY2luZy9lbnVtcy9wby1ldmVudC1zb3VyY2luZy1vcGVyYXRpb24uZW51bSc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogQ2xhc3NlIHF1ZSBkZWZpbmUgYSByZXNwb3N0YSBkZSBlcnJvIHBhcmEgdW0gaXRlbSBkYSBmaWxhIGRlIGV2ZW50b3MgcXVlIG7Do28gZm9pIGVudmlhZG8gYW8gc2Vydmlkb3IgcG9yXG4gKiBhbGd1bWEgaW5jb25zaXN0w6puY2lhLlxuICpcbiAqID4gUG9kZSBzZXIgdXRpbGl6YWRhIGVtIGNhc29zIG9uZGUgdW0gaXRlbSBkYSBmaWxhIMOpIGVudmlhZG8gYW8gc2Vydmlkb3IgY29tIGluY29uc2lzdMOqbmNpYSBub3MgZGFkb3MsIHBvciBleGVtcGxvXG4gKiB1bWEgb3BlcmHDp8OjbyBkZSAqZGVsZXRlKiBvdSAqdXBkYXRlKiBzZW0gbyBgaWRgIGRvIG9iamV0by5cbiAqL1xuZXhwb3J0IGNsYXNzIFBvRXZlbnRTb3VyY2luZ0Vycm9yUmVzcG9uc2Uge1xuICAvKiogTWVuc2FnZW0gZGUgZXJyby4gKi9cbiAgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKiBPcGVyYcOnw6NvIHF1ZSBoYXZpYSBzaWRvIHJlcXVpc2l0YWRhLiAqL1xuICBvcGVyYXRpb246IFBvRXZlbnRTb3VyY2luZ09wZXJhdGlvbjtcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBjb25zdHJ1Y3Rvcih7IG1lc3NhZ2UsIG9wZXJhdGlvbiB9KSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB0aGlzLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjtcbiAgfVxufVxuIl19
1
+ /**
2
+ * @description
3
+ *
4
+ * Classe que define a resposta de erro para um item da fila de eventos que não foi enviado ao servidor por
5
+ * alguma inconsistência.
6
+ *
7
+ * > Pode ser utilizada em casos onde um item da fila é enviado ao servidor com inconsistência nos dados, por exemplo
8
+ * uma operação de *delete* ou *update* sem o `id` do objeto.
9
+ */
10
+ export class PoEventSourcingErrorResponse {
11
+ /* istanbul ignore next */
12
+ constructor({ message, operation }) {
13
+ this.message = message;
14
+ this.operation = operation;
15
+ }
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZXZlbnQtc291cmNpbmctZXJyb3ItcmVzcG9uc2UubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zeW5jL3NyYy9saWIvbW9kZWxzL3BvLWV2ZW50LXNvdXJjaW5nLWVycm9yLXJlc3BvbnNlLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxPQUFPLDRCQUE0QjtJQU92QywwQkFBMEI7SUFDMUIsWUFBWSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUU7UUFDaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDN0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9FdmVudFNvdXJjaW5nT3BlcmF0aW9uIH0gZnJvbSAnLi8uLi9zZXJ2aWNlcy9wby1ldmVudC1zb3VyY2luZy9lbnVtcy9wby1ldmVudC1zb3VyY2luZy1vcGVyYXRpb24uZW51bSc7XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqXHJcbiAqIENsYXNzZSBxdWUgZGVmaW5lIGEgcmVzcG9zdGEgZGUgZXJybyBwYXJhIHVtIGl0ZW0gZGEgZmlsYSBkZSBldmVudG9zIHF1ZSBuw6NvIGZvaSBlbnZpYWRvIGFvIHNlcnZpZG9yIHBvclxyXG4gKiBhbGd1bWEgaW5jb25zaXN0w6puY2lhLlxyXG4gKlxyXG4gKiA+IFBvZGUgc2VyIHV0aWxpemFkYSBlbSBjYXNvcyBvbmRlIHVtIGl0ZW0gZGEgZmlsYSDDqSBlbnZpYWRvIGFvIHNlcnZpZG9yIGNvbSBpbmNvbnNpc3TDqm5jaWEgbm9zIGRhZG9zLCBwb3IgZXhlbXBsb1xyXG4gKiB1bWEgb3BlcmHDp8OjbyBkZSAqZGVsZXRlKiBvdSAqdXBkYXRlKiBzZW0gbyBgaWRgIGRvIG9iamV0by5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBQb0V2ZW50U291cmNpbmdFcnJvclJlc3BvbnNlIHtcclxuICAvKiogTWVuc2FnZW0gZGUgZXJyby4gKi9cclxuICBtZXNzYWdlOiBzdHJpbmc7XHJcblxyXG4gIC8qKiBPcGVyYcOnw6NvIHF1ZSBoYXZpYSBzaWRvIHJlcXVpc2l0YWRhLiAqL1xyXG4gIG9wZXJhdGlvbjogUG9FdmVudFNvdXJjaW5nT3BlcmF0aW9uO1xyXG5cclxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gIGNvbnN0cnVjdG9yKHsgbWVzc2FnZSwgb3BlcmF0aW9uIH0pIHtcclxuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XHJcbiAgICB0aGlzLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjtcclxuICB9XHJcbn1cclxuIl19