@po-ui/ng-sync 6.14.0 → 14.0.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 (120) hide show
  1. package/README.md +22 -22
  2. package/esm2020/lib/index.mjs +15 -15
  3. package/esm2020/lib/models/index.mjs +6 -6
  4. package/esm2020/lib/models/po-data-message.model.mjs +57 -57
  5. package/esm2020/lib/models/po-data-transform.model.mjs +22 -22
  6. package/esm2020/lib/models/po-entity/po-entity.model.mjs +214 -214
  7. package/esm2020/lib/models/po-event-sourcing-error-response.model.mjs +17 -17
  8. package/esm2020/lib/models/po-network-status.model.mjs +44 -44
  9. package/esm2020/lib/models/po-network-type.enum.mjs +30 -30
  10. package/esm2020/lib/models/po-query-builder/po-query-builder.model.mjs +238 -238
  11. package/esm2020/lib/models/po-request-type.enum.mjs +16 -16
  12. package/esm2020/lib/po-sync.module.mjs +45 -45
  13. package/esm2020/lib/services/po-event-sourcing/enums/po-event-sourcing-operation.enum.mjs +17 -17
  14. package/esm2020/lib/services/po-event-sourcing/index.mjs +4 -4
  15. package/esm2020/lib/services/po-event-sourcing/interfaces/po-event-sourcing-item.interface.mjs +2 -2
  16. package/esm2020/lib/services/po-event-sourcing/interfaces/po-event-sourcing-summary-item.interface.mjs +2 -2
  17. package/esm2020/lib/services/po-event-sourcing/po-event-sourcing.service.mjs +372 -372
  18. package/esm2020/lib/services/po-http-client/interfaces/po-http-header-option.interface.mjs +11 -11
  19. package/esm2020/lib/services/po-http-client/interfaces/po-http-request-data.interface.mjs +2 -2
  20. package/esm2020/lib/services/po-http-client/interfaces/po-response-api.interface.mjs +2 -2
  21. package/esm2020/lib/services/po-http-client/po-http-client.service.mjs +148 -148
  22. package/esm2020/lib/services/po-http-client/po-http-request-type.enum.mjs +25 -25
  23. package/esm2020/lib/services/po-network/po-network.service.mjs +58 -58
  24. package/esm2020/lib/services/po-schema/index.mjs +4 -4
  25. package/esm2020/lib/services/po-schema/po-schema-definition/po-schema-definition.service.mjs +77 -77
  26. package/esm2020/lib/services/po-schema/po-schema-util/po-schema-util.model.mjs +124 -124
  27. package/esm2020/lib/services/po-schema/po-schema.service.mjs +174 -174
  28. package/esm2020/lib/services/po-sync/interfaces/po-sync-config.interface.mjs +2 -2
  29. package/esm2020/lib/services/po-sync/interfaces/po-sync-field-options.interface.mjs +2 -2
  30. package/esm2020/lib/services/po-sync/interfaces/po-sync-response.interface.mjs +2 -2
  31. package/esm2020/lib/services/po-sync/interfaces/po-sync-schema.interface.mjs +2 -2
  32. package/esm2020/lib/services/po-sync/po-sync.service.mjs +325 -325
  33. package/esm2020/lib/utils/utils.mjs +63 -63
  34. package/esm2020/po-ui-ng-sync.mjs +4 -4
  35. package/esm2020/public-api.mjs +2 -2
  36. package/fesm2015/po-ui-ng-sync.mjs +2060 -2060
  37. package/fesm2015/po-ui-ng-sync.mjs.map +1 -1
  38. package/fesm2020/po-ui-ng-sync.mjs +1965 -1965
  39. package/fesm2020/po-ui-ng-sync.mjs.map +1 -1
  40. package/{po-ui-ng-sync.d.ts → index.d.ts} +5 -5
  41. package/lib/index.d.ts +14 -14
  42. package/lib/models/index.d.ts +5 -5
  43. package/lib/models/po-data-message.model.d.ts +46 -46
  44. package/lib/models/po-data-transform.model.d.ts +52 -52
  45. package/lib/models/po-entity/po-entity.model.d.ts +122 -122
  46. package/lib/models/po-event-sourcing-error-response.model.d.ts +20 -20
  47. package/lib/models/po-network-status.model.d.ts +25 -25
  48. package/lib/models/po-network-type.enum.d.ts +28 -28
  49. package/lib/models/po-query-builder/po-query-builder.model.d.ts +126 -126
  50. package/lib/models/po-request-type.enum.d.ts +14 -14
  51. package/lib/po-sync.module.d.ts +12 -12
  52. package/lib/services/po-event-sourcing/enums/po-event-sourcing-operation.enum.d.ts +11 -11
  53. package/lib/services/po-event-sourcing/index.d.ts +3 -3
  54. package/lib/services/po-event-sourcing/interfaces/po-event-sourcing-item.interface.d.ts +26 -26
  55. package/lib/services/po-event-sourcing/interfaces/po-event-sourcing-summary-item.interface.d.ts +16 -16
  56. package/lib/services/po-event-sourcing/po-event-sourcing.service.d.ts +74 -74
  57. package/lib/services/po-http-client/interfaces/po-http-header-option.interface.d.ts +15 -15
  58. package/lib/services/po-http-client/interfaces/po-http-request-data.interface.d.ts +24 -24
  59. package/lib/services/po-http-client/interfaces/po-response-api.interface.d.ts +14 -14
  60. package/lib/services/po-http-client/po-http-client.service.d.ts +78 -78
  61. package/lib/services/po-http-client/po-http-request-type.enum.d.ts +23 -23
  62. package/lib/services/po-network/po-network.service.d.ts +36 -36
  63. package/lib/services/po-schema/index.d.ts +3 -3
  64. package/lib/services/po-schema/po-schema-definition/po-schema-definition.service.d.ts +51 -51
  65. package/lib/services/po-schema/po-schema-util/po-schema-util.model.d.ts +79 -79
  66. package/lib/services/po-schema/po-schema.service.d.ts +98 -98
  67. package/lib/services/po-sync/interfaces/po-sync-config.interface.d.ts +24 -24
  68. package/lib/services/po-sync/interfaces/po-sync-field-options.interface.d.ts +15 -15
  69. package/lib/services/po-sync/interfaces/po-sync-response.interface.d.ts +20 -20
  70. package/lib/services/po-sync/interfaces/po-sync-schema.interface.d.ts +37 -37
  71. package/lib/services/po-sync/po-sync.service.d.ts +162 -162
  72. package/lib/utils/utils.d.ts +36 -36
  73. package/package.json +8 -8
  74. package/po-ui-ng-sync-14.0.0.tgz +0 -0
  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 +35 -30
  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/index.spec.js.map +1 -1
  84. package/schematics/ng-add/schema.json +16 -7
  85. package/schematics/ng-generate/schema/files/__path__/__name@dasherize__/__name@dasherize__.constants.ts.template +13 -13
  86. package/schematics/ng-generate/schema/index.d.ts +4 -4
  87. package/schematics/ng-generate/schema/index.js +12 -12
  88. package/schematics/ng-generate/schema/index.spec.d.ts +1 -1
  89. package/schematics/ng-generate/schema/index.spec.js +44 -44
  90. package/schematics/ng-generate/schema/index.spec.js.map +1 -1
  91. package/schematics/ng-generate/schema/schema.d.ts +3 -3
  92. package/schematics/ng-generate/schema/schema.js +2 -2
  93. package/schematics/ng-generate/schema/schema.json +31 -31
  94. package/schematics/ng-update/v14/changes.d.ts +2 -0
  95. package/schematics/ng-update/v14/changes.js +14 -0
  96. package/schematics/ng-update/v14/changes.js.map +1 -0
  97. package/schematics/ng-update/v14/index.d.ts +1 -0
  98. package/schematics/ng-update/v14/index.js +16 -0
  99. package/schematics/ng-update/v14/index.js.map +1 -0
  100. package/schematics/ng-update/v2/changes.d.ts +8 -8
  101. package/schematics/ng-update/v2/changes.js +20 -20
  102. package/schematics/ng-update/v2/index.d.ts +5 -5
  103. package/schematics/ng-update/v2/index.js +101 -101
  104. package/schematics/ng-update/v3/changes.d.ts +2 -2
  105. package/schematics/ng-update/v3/changes.js +14 -14
  106. package/schematics/ng-update/v3/index.d.ts +1 -1
  107. package/schematics/ng-update/v3/index.js +16 -16
  108. package/schematics/ng-update/v4/changes.d.ts +2 -2
  109. package/schematics/ng-update/v4/changes.js +14 -14
  110. package/schematics/ng-update/v4/index.d.ts +1 -1
  111. package/schematics/ng-update/v4/index.js +15 -15
  112. package/schematics/ng-update/v5/changes.d.ts +2 -2
  113. package/schematics/ng-update/v5/changes.js +13 -13
  114. package/schematics/ng-update/v5/index.d.ts +1 -1
  115. package/schematics/ng-update/v5/index.js +15 -15
  116. package/schematics/ng-update/v6/changes.d.ts +2 -2
  117. package/schematics/ng-update/v6/changes.js +13 -13
  118. package/schematics/ng-update/v6/index.d.ts +1 -1
  119. package/schematics/ng-update/v6/index.js +15 -15
  120. package/po-ui-ng-sync-6.14.0.tgz +0 -0
@@ -1,238 +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=
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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LENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVPLGdCQUFnQixDQUFDLElBQW1CLEVBQUUsWUFBMkI7UUFDdkUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ25DLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUN0QjtZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxnQkFBNEIsRUFBRSxNQUFrQjtRQUM3RSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHZhbGlkYXRlUGFyYW1ldGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnO1xyXG5cclxuaW1wb3J0IHsgUG9SZXNwb25zZUFwaSB9IGZyb20gJy4vLi4vLi4vc2VydmljZXMvcG8taHR0cC1jbGllbnQvaW50ZXJmYWNlcy9wby1yZXNwb25zZS1hcGkuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUG9TY2hlbWFTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9wby1zY2hlbWEnO1xyXG5pbXBvcnQgeyBQb1N5bmNTY2hlbWEgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wby1zeW5jL2ludGVyZmFjZXMvcG8tc3luYy1zY2hlbWEuaW50ZXJmYWNlJztcclxuXHJcbi8qKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICpcclxuICogQ2xhc3NlIHV0aWxpdMOhcmlhIHBhcmEgY29uc3RydWlyIGNvbnN1bHRhcyBzb2JyZSBvcyByZWdpc3Ryb3MgZGUgdW0gKnNjaGVtYSouXHJcbiAqXHJcbiAqIEEgdXRpbGl6YcOnw6NvIGRvcyBtw6l0b2RvcyBkZXN0YSBjbGFzc2Ugw6kgZmVpdGEgYSBwYXJ0aXIgZG8gcmV0b3JubyBkbyBtw6l0b2RvIGBQb0VudGl0eS5maW5kKClgLiBQb3IgZXhlbXBsbyxcclxuICogcGFyYSB1dGlsaXphciBvIG3DqXRvZG8gYFBvUXVlcnlCdWlsZGVyLnBhZ2UoKWAsIMOpIG5lY2Vzc8OhcmlvOlxyXG4gKlxyXG4gKiBgYGAgdHlwZXNjcmlwdFxyXG4gKiBQb1N5bmNTZXJ2aWNlLmdldE1vZGVsKCdzY2hlbWEgbmFtZScpLmZpbmQoKS5wYWdlKDIpLmV4ZWMoKTtcclxuICogYGBgXHJcbiAqXHJcbiAqIE8gYFBvUXVlcnlCdWlsZGVyYCBmb2kgcHJvamV0YWRvIHBhcmEgcXVlIG9zIHNldXMgbcOpdG9kb3Mgc2VqYW1cclxuICogY2hhbWFkb3MgZW0gY2FzY2F0YSBlIGFvIGZpbmFsIGRlc3NlIGVuY2FkZWFtZW50byBpbnZvY2FyIG8gbcOpdG9kb1xyXG4gKiBgUG9RdWVyeUJ1aWxkZXIuZXhlYygpYCBwYXJhIHF1ZSBhIGJ1c2NhIHNlamEgY29uY2x1w61kYS4gUG9yIGV4ZW1wbG86XHJcbiAqXHJcbiAqIGBgYCB0eXBlc2NyaXB0XHJcbiAqIFBvU3luY1NlcnZpY2VcclxuICogICAuZ2V0TW9kZWwoJ3NjaGVtYSBuYW1lJylcclxuICogICAuZmluZCgpXHJcbiAqICAgLnBhZ2UoMilcclxuICogICAucGFnZVNpemUoNSlcclxuICogICAuc29ydCgpXHJcbiAqICAgLmV4ZWMoKTtcclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgUG9RdWVyeUJ1aWxkZXIge1xyXG4gIHByaXZhdGUgZmllbGRzOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBmaWx0ZXJzOiBhbnk7XHJcblxyXG4gIHByaXZhdGUgX2xpbWl0OiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfcGFnZTogbnVtYmVyO1xyXG4gIHByaXZhdGUgX3BhZ2VTaXplOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfc29ydDogc3RyaW5nO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBvU2NoZW1hU2VydmljZTogUG9TY2hlbWFTZXJ2aWNlLCBwcml2YXRlIHNjaGVtYTogUG9TeW5jU2NoZW1hKSB7XHJcbiAgICB0aGlzLl9wYWdlID0gMTtcclxuICAgIHRoaXMuZmlsdGVycyA9IHt9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQW8gZmluYWwgZGEgY2hhbWFkYSBkb3MgbcOpdG9kb3MgZG8gYFBvUXVlcnlCdWlsZGVyYCB1dGlsaXphZG9zLCBlc3RlIG3DqXRvZG8gZGV2ZSBzZXIgY2hhbWFkbyBwYXJhIHF1ZSBhIGJ1c2NhIHNlamEgY29uY2x1w61kYS5cclxuICAgKlxyXG4gICAqIEByZXR1cm4ge1Byb21pc2U8UG9SZXNwb25zZUFwaSB8IG9iamVjdD59IFJlZ2lzdHJvcyBkbyAqc2NoZW1hKiBuYSBxdWFsIGZvaSBhcGxpY2FkbyBhIGNvbnN1bHRhLlxyXG4gICAqL1xyXG4gIGFzeW5jIGV4ZWMoKTogUHJvbWlzZTxQb1Jlc3BvbnNlQXBpIHwgb2JqZWN0PiB7XHJcbiAgICBsZXQgc3RvcmFnZURhdGEgPSBhd2FpdCB0aGlzLnBvU2NoZW1hU2VydmljZS5nZXRBbGwodGhpcy5zY2hlbWEubmFtZSk7XHJcblxyXG4gICAgaWYgKHN0b3JhZ2VEYXRhICYmIHN0b3JhZ2VEYXRhLmxlbmd0aCkge1xyXG4gICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5maWx0ZXJzKS5sZW5ndGgpIHtcclxuICAgICAgICBzdG9yYWdlRGF0YSA9IHRoaXMuYXBwbHlGaWx0ZXJzKHN0b3JhZ2VEYXRhKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5maWVsZHMpIHtcclxuICAgICAgICBzdG9yYWdlRGF0YSA9IHRoaXMuYXBwbHlGaWVsZHModGhpcy5zY2hlbWEuZmllbGRzLCBzdG9yYWdlRGF0YSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuX3NvcnQpIHtcclxuICAgICAgICBzdG9yYWdlRGF0YSA9IHRoaXMub3JkZXIoc3RvcmFnZURhdGEsIHRoaXMuX3NvcnQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5fbGltaXQpIHtcclxuICAgICAgICByZXR1cm4gc3RvcmFnZURhdGFbMF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdGUoc3RvcmFnZURhdGEpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGhhc05leHQ6IGZhbHNlLFxyXG4gICAgICAgIGl0ZW1zOiBbXVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBsaWNhIGZpbHRyb3Mgc29icmUgb3MgcmVnaXN0cm9zLCBiYXNlYWRvcyBub3MgY2FtcG9zIGUgdmFsb3JlcyBkZWZpbmlkb3MgY29tbyBmaWx0cm8uIFBvciBleGVtcGxvOlxyXG4gICAqXHJcbiAgICogYGBgXHJcbiAgICogUG9RdWVyeUJ1aWxkZXIuZmlsdGVyKHsgbmFtZTogJ01hcmllJywgYWdlOiAyNCB9KTtcclxuICAgKiBgYGBcclxuICAgKiBSZXRvcm5hIHRvZG9zIG9zIHJlZ2lzdHJvcyBxdWUgY29udGVuaGFtIGEgcHJvcHJpZWRhZGUgYG5hbWVgIGlndWFsIGEgTWFyaWUgZSBgYWdlYCBpZ3VhbCBhIDI0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtvYmplY3R9IGZpbHRlciBPYmpldG8gcXVlIGNvbnTDqW0gb3MgY2FtcG9zIGUgdmFsb3JlcyBhIHNlcmVtIGZpbHRyYWRvcyBubyAqc2NoZW1hKi5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQb1F1ZXJ5QnVpbGRlcn0gT2JqZXRvIHF1ZSBwb3NzaWJpbGl0YSBlbmNhZGVhciB1bSBub3ZvIG3DqXRvZG8gZG8gYFBvUXVlcnlCdWlsZGVyYC5cclxuICAgKi9cclxuICBmaWx0ZXIoZmlsdGVyPzogb2JqZWN0KTogUG9RdWVyeUJ1aWxkZXIge1xyXG4gICAgaWYgKGZpbHRlciAmJiB0eXBlb2YgZmlsdGVyID09PSAnb2JqZWN0Jykge1xyXG4gICAgICB0aGlzLmZpbHRlcnMgPSB7IC4uLnRoaXMuZmlsdGVycywgLi4uZmlsdGVyIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpbHRlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGltaXRhIG8gbsO6bWVybyBkZSByZWdpc3Ryb3MgcXVlIHNlcsOjbyByZXRvcm5hZG9zLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IE7Dum1lcm8gZGUgcmVnaXN0cm9zIHJldG9ybmFkb3MuXHJcbiAgICogQHJldHVybnMge1BvUXVlcnlCdWlsZGVyfSBPYmpldG8gcXVlIHBvc3NpYmlsaXRhIGVuY2FkZWFyIHVtIG5vdm8gbcOpdG9kbyBkbyBgUG9RdWVyeUJ1aWxkZXJgLlxyXG4gICAqL1xyXG4gIGxpbWl0KGxpbWl0OiBudW1iZXIpOiBQb1F1ZXJ5QnVpbGRlciB7XHJcbiAgICB0aGlzLl9saW1pdCA9IGxpbWl0O1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFc3BlY2lmaWNhIGEgcMOhZ2luYSBkZSByZWdpc3Ryb3MgcXVlIHNlIGRlc2VqYSByZXRvcm5hci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlIE7Dum1lcm8gZGEgcMOhZ2luYS5cclxuICAgKiBAcmV0dXJucyB7UG9RdWVyeUJ1aWxkZXJ9IE9iamV0byBxdWUgcG9zc2liaWxpdGEgZW5jYWRlYXIgdW0gbm92byBtw6l0b2RvIGRvIGBQb1F1ZXJ5QnVpbGRlcmAuXHJcbiAgICovXHJcbiAgcGFnZShwYWdlOiBudW1iZXIpOiBQb1F1ZXJ5QnVpbGRlciB7XHJcbiAgICB2YWxpZGF0ZVBhcmFtZXRlcih7IHBhZ2UgfSk7XHJcblxyXG4gICAgdGhpcy5fcGFnZSA9IHBhZ2U7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluZSBxdWFudG9zIGVsZW1lbnRvcyBzZXLDo28gcmV0b3JuYWRvcyBwb3IgcMOhZ2luYS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlU2l6ZSBOw7ptZXJvIGRlIHJlZ2lzdHJvcyBwb3IgcMOhZ2luYS5cclxuICAgKiBAcmV0dXJucyB7UG9RdWVyeUJ1aWxkZXJ9IE9iamV0byBxdWUgcG9zc2liaWxpdGEgZW5jYWRlYXIgdW0gbm92byBtw6l0b2RvIGRvIGBQb1F1ZXJ5QnVpbGRlcmAuXHJcbiAgICovXHJcbiAgcGFnZVNpemUocGFnZVNpemU6IG51bWJlcik6IFBvUXVlcnlCdWlsZGVyIHtcclxuICAgIHZhbGlkYXRlUGFyYW1ldGVyKHsgcGFnZVNpemUgfSk7XHJcblxyXG4gICAgdGhpcy5fcGFnZVNpemUgPSBwYWdlU2l6ZTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXRpbGl6YWRvIHBhcmEgZGVmaW5pciBxdWFpcyBjYW1wb3MgZG8gKnNjaGVtYSogc2Vyw6NvIHJldG9ybmFkb3MgbmEgY29uc3VsdGEuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGRzIENhbXBvcyBxdWUgc2Vyw6NvIHJldG9ybmFkb3Mgbm9zIHJlZ2lzdHJvcy4gRXN0ZSBjYW1wb3MgZGV2ZW0gZXN0YXIgZGVudHJvIGRlXHJcbiAgICogdW1hICpzdHJpbmcqIHNlcGFyYWRvcyBwb3IgZXNwYcOnbyBwb2RlbmRvIHVzYXIgbyBjYXJhY3RlcmUgYC1gIHBhcmEgZXhjbHVpciBjYW1wb3MuXHJcbiAgICogUG9yIGV4ZW1wbG8sIGEgZGVmaW5pw6fDo28gYWJhaXhvOlxyXG4gICAqXHJcbiAgICogYGBgXHJcbiAgICogUG9RdWVyeUJ1aWxkZXIuc2VsZWN0KCduYW1lIGFnZSBhZGRyZXNzJyk7XHJcbiAgICogYGBgXHJcbiAgICogSXLDoSByZXRvcm5hciBhcGVuYXMgb3MgY2FtcG9zIGBuYW1lYCwgYGFnZWAgZSBgYWRkcmVzc2AuIFBhcmEgbsOjbyByZXRvcm5hciB1bSBjYW1wbyBvdSBtYWlzIGJhc3RhIGZhemVyOlxyXG4gICAqXHJcbiAgICogYGBgXHJcbiAgICogUG9RdWVyeUJ1aWxkZXIuc2VsZWN0KCctbmFtZSAtYWdlJyk7XHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UG9RdWVyeUJ1aWxkZXJ9IE9iamV0byBxdWUgcG9zc2liaWxpdGEgZW5jYWRlYXIgdW0gbm92byBtw6l0b2RvIGRvIGBQb1F1ZXJ5QnVpbGRlcmAuXHJcbiAgICovXHJcbiAgc2VsZWN0KGZpZWxkczogc3RyaW5nKTogUG9RdWVyeUJ1aWxkZXIge1xyXG4gICAgdmFsaWRhdGVQYXJhbWV0ZXIoeyBmaWVsZHMgfSk7XHJcblxyXG4gICAgdGhpcy5maWVsZHMgPSBmaWVsZHM7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9yZGVuYSBvcyByZWdpc3Ryb3MgcG9yIHVtIGNhbXBvLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkIENhbXBvIGEgc2VyIG9yZGVuYWRvLiBQYXJhIG9yZGVuYXIgZGUgZm9ybWEgZGVjcmVzY2VudGUgYmFzdGEgY29sb2NhciBvIGNhcmFjdGVyZSBgLWBcclxuICAgKiBuYSBmcmVudGUgZG8gY2FtcG8uIFBvciBleGVtcGxvOlxyXG4gICAqIGBgYFxyXG4gICAqIFBvUXVlcnlCdWlsZGVyLnNvcnQoJy1uYW1lJyk7XHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UG9RdWVyeUJ1aWxkZXJ9IE9iamV0byBxdWUgcG9zc2liaWxpdGEgZW5jYWRlYXIgdW0gbm92byBtw6l0b2RvIGRvIGBQb1F1ZXJ5QnVpbGRlcmAuXHJcbiAgICovXHJcbiAgc29ydChmaWVsZDogc3RyaW5nKTogUG9RdWVyeUJ1aWxkZXIge1xyXG4gICAgdmFsaWRhdGVQYXJhbWV0ZXIoeyBmaWVsZCB9KTtcclxuXHJcbiAgICB0aGlzLl9zb3J0ID0gZmllbGQ7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVzc2EgZnVuw6fDo28gc2VydmUgY29tbyBhbGlhcyBwYXJhIG8gYFBvUXVlcnlCdWlsZGVyLmZpbHRlcigpYC4gw4kgdXRpbGl6YWRhIHNvbWVudGUgcGFyYSBkYXIgbWFpb3IgbGVnaWJpbGlkYWRlIGFvIGPDs2RpZ28uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge29iamVjdH0gZmlsdGVyIE9iamV0byBxdWUgY29udMOpbSBvcyBjYW1wb3MgZSB2YWxvcmVzIGEgc2VyZW0gZmlsdHJhZG9zIG5vICpzY2hlbWEqLlxyXG4gICAqIEByZXR1cm5zIHtQb1F1ZXJ5QnVpbGRlcn0gT2JqZXRvIHF1ZSBwb3NzaWJpbGl0YSBlbmNhZGVhciB1bSBub3ZvIG3DqXRvZG8gZG8gYFBvUXVlcnlCdWlsZGVyYC5cclxuICAgKi9cclxuICB3aGVyZShmaWx0ZXI6IG9iamVjdCk6IFBvUXVlcnlCdWlsZGVyIHtcclxuICAgIHJldHVybiB0aGlzLmZpbHRlcihmaWx0ZXIpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUZpZWxkcyhzY2hlbWFGaWVsZHM6IEFycmF5PGFueT4sIGRhdGE6IEFycmF5PG9iamVjdD4pOiBBcnJheTxvYmplY3Q+IHtcclxuICAgIGNvbnN0IHJlY2VpdmVkRmllbGRzID0gdGhpcy5maWVsZHMuc3BsaXQoJyAnKTtcclxuICAgIGxldCByZXN0cmljdGVkRmllbGRzID0gW107XHJcbiAgICBsZXQgc2VsZWN0ZWRGaWVsZHMgPSBbXTtcclxuXHJcbiAgICBbc2VsZWN0ZWRGaWVsZHMsIHJlc3RyaWN0ZWRGaWVsZHNdID0gdGhpcy5ncm91cEZpZWxkcyhyZWNlaXZlZEZpZWxkcyk7XHJcblxyXG4gICAgaWYgKCFzZWxlY3RlZEZpZWxkcy5sZW5ndGggJiYgcmVzdHJpY3RlZEZpZWxkcy5sZW5ndGgpIHtcclxuICAgICAgc2VsZWN0ZWRGaWVsZHMgPSBbLi4uc2NoZW1hRmllbGRzXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVzdHJpY3RlZEZpZWxkcy5sZW5ndGgpIHtcclxuICAgICAgc2VsZWN0ZWRGaWVsZHMgPSB0aGlzLnJlbW92ZVJlc3RyaWN0ZWRGaWVsZHMocmVzdHJpY3RlZEZpZWxkcywgc2VsZWN0ZWRGaWVsZHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkRmllbGRzID0gdGhpcy5yZW1vdmVEdXBsaWNhdGUoc2VsZWN0ZWRGaWVsZHMpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnJlbW92ZUZpZWxkc0RhdGEoZGF0YSwgc2VsZWN0ZWRGaWVsZHMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUZpbHRlcnMoZGF0YTogQXJyYXk8b2JqZWN0Pik6IEFycmF5PG9iamVjdD4ge1xyXG4gICAgT2JqZWN0LmtleXModGhpcy5maWx0ZXJzKS5mb3JFYWNoKGZpbHRlcktleSA9PiB7XHJcbiAgICAgIGRhdGEgPSBkYXRhLmZpbHRlcihpdGVtID0+IGl0ZW1bZmlsdGVyS2V5XSA9PT0gdGhpcy5maWx0ZXJzW2ZpbHRlcktleV0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdyb3VwRmllbGRzKHJlY2VpdmVkRmllbGRzOiBBcnJheTxzdHJpbmc+KTogQXJyYXk8QXJyYXk8c3RyaW5nPj4ge1xyXG4gICAgY29uc3QgcmVzdHJpY3RlZEZpZWxkcyA9IFtdO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRGaWVsZHMgPSBbXTtcclxuXHJcbiAgICByZWNlaXZlZEZpZWxkcy5mb3JFYWNoKGZpZWxkcyA9PiB7XHJcbiAgICAgIGlmIChmaWVsZHMuc3RhcnRzV2l0aCgnLScpKSB7XHJcbiAgICAgICAgcmVzdHJpY3RlZEZpZWxkcy5wdXNoKGZpZWxkcy5zdWJzdHJpbmcoMSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNlbGVjdGVkRmllbGRzLnB1c2goZmllbGRzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gW3NlbGVjdGVkRmllbGRzLCByZXN0cmljdGVkRmllbGRzXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcGFnaW5hdGUoZGF0YTogQXJyYXk8YW55Pik6IHsgaGFzTmV4dDogYm9vbGVhbjsgaXRlbXM6IEFycmF5PGFueT4gfSB7XHJcbiAgICBjb25zdCBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGg7XHJcbiAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMuX3BhZ2VTaXplIHx8IGRhdGFMZW5ndGg7XHJcblxyXG4gICAgY29uc3QgcGFnZXMgPSBNYXRoLmNlaWwoZGF0YUxlbmd0aCAvIHBhZ2VTaXplKTtcclxuICAgIGNvbnN0IGJlZ2luID0gdGhpcy5fcGFnZSAqIHBhZ2VTaXplIC0gcGFnZVNpemU7XHJcbiAgICBjb25zdCBlbmQgPSBiZWdpbiArIHBhZ2VTaXplO1xyXG5cclxuICAgIHJldHVybiB7IGhhc05leHQ6IHRoaXMuX3BhZ2UgPCBwYWdlcywgaXRlbXM6IGRhdGEuc2xpY2UoYmVnaW4sIGVuZCkgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb3JkZXIoZGF0YTogQXJyYXk8YW55Piwgc29ydGluZ0ZpZWxkOiBzdHJpbmcpOiBBcnJheTxhbnk+IHtcclxuICAgIGNvbnN0IGRlc2NlbmRpbmdPcmRlciA9IHNvcnRpbmdGaWVsZC5zdGFydHNXaXRoKCctJyk7XHJcbiAgICBzb3J0aW5nRmllbGQgPSBkZXNjZW5kaW5nT3JkZXIgPyBzb3J0aW5nRmllbGQuc3Vic3RyKDEpIDogc29ydGluZ0ZpZWxkO1xyXG5cclxuICAgIHJldHVybiBkYXRhLnNvcnQoKG9wdGlvbkEsIG9wdGlvbkIpID0+IHtcclxuICAgICAgaWYgKG9wdGlvbkFbc29ydGluZ0ZpZWxkXSA+IG9wdGlvbkJbc29ydGluZ0ZpZWxkXSkge1xyXG4gICAgICAgIHJldHVybiAhZGVzY2VuZGluZ09yZGVyID8gMSA6IC0xO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAob3B0aW9uQVtzb3J0aW5nRmllbGRdIDwgb3B0aW9uQltzb3J0aW5nRmllbGRdKSB7XHJcbiAgICAgICAgcmV0dXJuICFkZXNjZW5kaW5nT3JkZXIgPyAtMSA6IDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZUR1cGxpY2F0ZShmaWVsZHMpOiBBcnJheTxhbnk+IHtcclxuICAgIHJldHVybiBmaWVsZHMuZmlsdGVyKChpdGVtLCBwb3NpdGlvbikgPT4gZmllbGRzLmluZGV4T2YoaXRlbSkgPT09IHBvc2l0aW9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlRmllbGRzRGF0YShkYXRhOiBBcnJheTxvYmplY3Q+LCBjaG9zZW5GaWVsZHM6IEFycmF5PHN0cmluZz4pOiBBcnJheTxvYmplY3Q+IHtcclxuICAgIGRhdGEuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgT2JqZWN0LmtleXMoaXRlbSkuZm9yRWFjaChrZXlJdGVtID0+IHtcclxuICAgICAgICBpZiAoIWNob3NlbkZpZWxkcy5pbmNsdWRlcyhrZXlJdGVtKSkge1xyXG4gICAgICAgICAgZGVsZXRlIGl0ZW1ba2V5SXRlbV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZVJlc3RyaWN0ZWRGaWVsZHMocmVzdHJpY3RlZEZpZWxkczogQXJyYXk8YW55PiwgZmllbGRzOiBBcnJheTxhbnk+KSB7XHJcbiAgICByZXR1cm4gZmllbGRzLmZpbHRlcihmaWVsZCA9PiAhcmVzdHJpY3RlZEZpZWxkcy5pbmNsdWRlcyhmaWVsZCkpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,16 +1,16 @@
1
- /**
2
- * @docsPrivate
3
- *
4
- * @description
5
- *
6
- * Método de requisição HTTP.
7
- */
8
- export var PoRequestType;
9
- (function (PoRequestType) {
10
- PoRequestType["GET"] = "get";
11
- PoRequestType["DELETE"] = "delete";
12
- PoRequestType["DIFF"] = "diff";
13
- PoRequestType["PATCH"] = "patch";
14
- PoRequestType["POST"] = "post";
15
- })(PoRequestType || (PoRequestType = {}));
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tcmVxdWVzdC10eXBlLmVudW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zeW5jL3NyYy9saWIvbW9kZWxzL3BvLXJlcXVlc3QtdHlwZS5lbnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE1BQU0sQ0FBTixJQUFZLGFBVVg7QUFWRCxXQUFZLGFBQWE7SUFDdkIsNEJBQVcsQ0FBQTtJQUVYLGtDQUFpQixDQUFBO0lBRWpCLDhCQUFhLENBQUE7SUFFYixnQ0FBZSxDQUFBO0lBRWYsOEJBQWEsQ0FBQTtBQUNmLENBQUMsRUFWVyxhQUFhLEtBQWIsYUFBYSxRQVV4QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGRvY3NQcml2YXRlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogTcOpdG9kbyBkZSByZXF1aXNpw6fDo28gSFRUUC5cbiAqL1xuXG5leHBvcnQgZW51bSBQb1JlcXVlc3RUeXBlIHtcbiAgR0VUID0gJ2dldCcsXG5cbiAgREVMRVRFID0gJ2RlbGV0ZScsXG5cbiAgRElGRiA9ICdkaWZmJyxcblxuICBQQVRDSCA9ICdwYXRjaCcsXG5cbiAgUE9TVCA9ICdwb3N0J1xufVxuIl19
1
+ /**
2
+ * @docsPrivate
3
+ *
4
+ * @description
5
+ *
6
+ * Método de requisição HTTP.
7
+ */
8
+ export var PoRequestType;
9
+ (function (PoRequestType) {
10
+ PoRequestType["GET"] = "get";
11
+ PoRequestType["DELETE"] = "delete";
12
+ PoRequestType["DIFF"] = "diff";
13
+ PoRequestType["PATCH"] = "patch";
14
+ PoRequestType["POST"] = "post";
15
+ })(PoRequestType || (PoRequestType = {}));
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tcmVxdWVzdC10eXBlLmVudW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zeW5jL3NyYy9saWIvbW9kZWxzL3BvLXJlcXVlc3QtdHlwZS5lbnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE1BQU0sQ0FBTixJQUFZLGFBVVg7QUFWRCxXQUFZLGFBQWE7SUFDdkIsNEJBQVcsQ0FBQTtJQUVYLGtDQUFpQixDQUFBO0lBRWpCLDhCQUFhLENBQUE7SUFFYixnQ0FBZSxDQUFBO0lBRWYsOEJBQWEsQ0FBQTtBQUNmLENBQUMsRUFWVyxhQUFhLEtBQWIsYUFBYSxRQVV4QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAZG9jc1ByaXZhdGVcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqXHJcbiAqIE3DqXRvZG8gZGUgcmVxdWlzacOnw6NvIEhUVFAuXHJcbiAqL1xyXG5cclxuZXhwb3J0IGVudW0gUG9SZXF1ZXN0VHlwZSB7XHJcbiAgR0VUID0gJ2dldCcsXHJcblxyXG4gIERFTEVURSA9ICdkZWxldGUnLFxyXG5cclxuICBESUZGID0gJ2RpZmYnLFxyXG5cclxuICBQQVRDSCA9ICdwYXRjaCcsXHJcblxyXG4gIFBPU1QgPSAncG9zdCdcclxufVxyXG4iXX0=