@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,241 +1,241 @@
1
- import { __awaiter } from "tslib";
2
- import { validateParameter } from '../../utils/utils';
3
- /**
4
- * @description
5
- *
6
- * Classe utilitária para construir consultas sobre os registros de um *schema*.
7
- *
8
- * A utilização dos métodos desta classe é feita a partir do retorno do método `PoEntity.find()`. Por exemplo,
9
- * para utilizar o método `PoQueryBuilder.page()`, é necessário:
10
- *
11
- * ``` typescript
12
- * PoSyncService.getModel('schema name').find().page(2).exec();
13
- * ```
14
- *
15
- * O `PoQueryBuilder` foi projetado para que os seus métodos sejam
16
- * chamados em cascata e ao final desse encadeamento invocar o método
17
- * `PoQueryBuilder.exec()` para que a busca seja concluída. Por exemplo:
18
- *
19
- * ``` typescript
20
- * PoSyncService
21
- * .getModel('schema name')
22
- * .find()
23
- * .page(2)
24
- * .pageSize(5)
25
- * .sort()
26
- * .exec();
27
- * ```
28
- */
29
- export class PoQueryBuilder {
30
- constructor(poSchemaService, schema) {
31
- this.poSchemaService = poSchemaService;
32
- this.schema = schema;
33
- this._page = 1;
34
- this.filters = {};
35
- }
36
- /**
37
- * Ao final da chamada dos métodos do `PoQueryBuilder` utilizados, este método deve ser chamado para que a busca seja concluída.
38
- *
39
- * @return {Promise<PoResponseApi | object>} Registros do *schema* na qual foi aplicado a consulta.
40
- */
41
- exec() {
42
- return __awaiter(this, void 0, void 0, function* () {
43
- let storageData = yield this.poSchemaService.getAll(this.schema.name);
44
- if (storageData && storageData.length) {
45
- if (Object.keys(this.filters).length) {
46
- storageData = this.applyFilters(storageData);
47
- }
48
- if (this.fields) {
49
- storageData = this.applyFields(this.schema.fields, storageData);
50
- }
51
- if (this._sort) {
52
- storageData = this.order(storageData, this._sort);
53
- }
54
- if (this._limit) {
55
- return storageData[0];
56
- }
57
- else {
58
- return this.paginate(storageData);
59
- }
60
- }
61
- else {
62
- return {
63
- hasNext: false,
64
- items: []
65
- };
66
- }
67
- });
68
- }
69
- /**
70
- * Aplica filtros sobre os registros, baseados nos campos e valores definidos como filtro. Por exemplo:
71
- *
72
- * ```
73
- * PoQueryBuilder.filter({ name: 'Marie', age: 24 });
74
- * ```
75
- * Retorna todos os registros que contenham a propriedade `name` igual a Marie e `age` igual a 24.
76
- *
77
- * @param {object} filter Objeto que contém os campos e valores a serem filtrados no *schema*.
78
- *
79
- * @returns {PoQueryBuilder} Objeto que possibilita encadear um novo método do `PoQueryBuilder`.
80
- */
81
- filter(filter) {
82
- if (filter && typeof filter === 'object') {
83
- this.filters = Object.assign(Object.assign({}, this.filters), filter);
84
- }
85
- else {
86
- throw new Error('Filter must be an object');
87
- }
88
- return this;
89
- }
90
- /**
91
- * Limita o número de registros que serão retornados.
92
- *
93
- * @param {number} limit Número de registros retornados.
94
- * @returns {PoQueryBuilder} Objeto que possibilita encadear um novo método do `PoQueryBuilder`.
95
- */
96
- limit(limit) {
97
- this._limit = limit;
98
- return this;
99
- }
100
- /**
101
- * Especifica a página de registros que se deseja retornar.
102
- *
103
- * @param {number} page Número da página.
104
- * @returns {PoQueryBuilder} Objeto que possibilita encadear um novo método do `PoQueryBuilder`.
105
- */
106
- page(page) {
107
- validateParameter({ page });
108
- this._page = page;
109
- return this;
110
- }
111
- /**
112
- * Define quantos elementos serão retornados por página.
113
- *
114
- * @param {number} pageSize Número de registros por página.
115
- * @returns {PoQueryBuilder} Objeto que possibilita encadear um novo método do `PoQueryBuilder`.
116
- */
117
- pageSize(pageSize) {
118
- validateParameter({ pageSize });
119
- this._pageSize = pageSize;
120
- return this;
121
- }
122
- /**
123
- * Utilizado para definir quais campos do *schema* serão retornados na consulta.
124
- *
125
- * @param {string} fields Campos que serão retornados nos registros. Este campos devem estar dentro de
126
- * uma *string* separados por espaço podendo usar o caractere `-` para excluir campos.
127
- * Por exemplo, a definição abaixo:
128
- *
129
- * ```
130
- * PoQueryBuilder.select('name age address');
131
- * ```
132
- * Irá retornar apenas os campos `name`, `age` e `address`. Para não retornar um campo ou mais basta fazer:
133
- *
134
- * ```
135
- * PoQueryBuilder.select('-name -age');
136
- * ```
137
- *
138
- * @returns {PoQueryBuilder} Objeto que possibilita encadear um novo método do `PoQueryBuilder`.
139
- */
140
- select(fields) {
141
- validateParameter({ fields });
142
- this.fields = fields;
143
- return this;
144
- }
145
- /**
146
- * Ordena os registros por um campo.
147
- *
148
- * @param {string} field Campo a ser ordenado. Para ordenar de forma decrescente basta colocar o caractere `-`
149
- * na frente do campo. Por exemplo:
150
- * ```
151
- * PoQueryBuilder.sort('-name');
152
- * ```
153
- *
154
- * @returns {PoQueryBuilder} Objeto que possibilita encadear um novo método do `PoQueryBuilder`.
155
- */
156
- sort(field) {
157
- validateParameter({ field });
158
- this._sort = field;
159
- return this;
160
- }
161
- /**
162
- * Essa função serve como alias para o `PoQueryBuilder.filter()`. É utilizada somente para dar maior legibilidade ao código.
163
- *
164
- * @param {object} filter Objeto que contém os campos e valores a serem filtrados no *schema*.
165
- * @returns {PoQueryBuilder} Objeto que possibilita encadear um novo método do `PoQueryBuilder`.
166
- */
167
- where(filter) {
168
- return this.filter(filter);
169
- }
170
- applyFields(schemaFields, data) {
171
- const receivedFields = this.fields.split(' ');
172
- let restrictedFields = [];
173
- let selectedFields = [];
174
- [selectedFields, restrictedFields] = this.groupFields(receivedFields);
175
- if (!selectedFields.length && restrictedFields.length) {
176
- selectedFields = [...schemaFields];
177
- }
178
- if (restrictedFields.length) {
179
- selectedFields = this.removeRestrictedFields(restrictedFields, selectedFields);
180
- }
181
- selectedFields = this.removeDuplicate(selectedFields);
182
- return this.removeFieldsData(data, selectedFields);
183
- }
184
- applyFilters(data) {
185
- Object.keys(this.filters).forEach(filterKey => {
186
- data = data.filter(item => item[filterKey] === this.filters[filterKey]);
187
- });
188
- return data;
189
- }
190
- groupFields(receivedFields) {
191
- const restrictedFields = [];
192
- const selectedFields = [];
193
- receivedFields.forEach(fields => {
194
- if (fields.startsWith('-')) {
195
- restrictedFields.push(fields.substring(1));
196
- }
197
- else {
198
- selectedFields.push(fields);
199
- }
200
- });
201
- return [selectedFields, restrictedFields];
202
- }
203
- paginate(data) {
204
- const dataLength = data.length;
205
- const pageSize = this._pageSize || dataLength;
206
- const pages = Math.ceil(dataLength / pageSize);
207
- const begin = this._page * pageSize - pageSize;
208
- const end = begin + pageSize;
209
- return { hasNext: this._page < pages, items: data.slice(begin, end) };
210
- }
211
- order(data, sortingField) {
212
- const descendingOrder = sortingField.startsWith('-');
213
- sortingField = descendingOrder ? sortingField.substr(1) : sortingField;
214
- return data.sort((optionA, optionB) => {
215
- if (optionA[sortingField] > optionB[sortingField]) {
216
- return !descendingOrder ? 1 : -1;
217
- }
218
- if (optionA[sortingField] < optionB[sortingField]) {
219
- return !descendingOrder ? -1 : 1;
220
- }
221
- return 0;
222
- });
223
- }
224
- removeDuplicate(fields) {
225
- return fields.filter((item, position) => fields.indexOf(item) === position);
226
- }
227
- removeFieldsData(data, chosenFields) {
228
- data.forEach(item => {
229
- Object.keys(item).forEach(keyItem => {
230
- if (!chosenFields.includes(keyItem)) {
231
- delete item[keyItem];
232
- }
233
- });
234
- });
235
- return data;
236
- }
237
- removeRestrictedFields(restrictedFields, fields) {
238
- return fields.filter(field => !restrictedFields.includes(field));
239
- }
240
- }
241
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tcXVlcnktYnVpbGRlci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N5bmMvc3JjL2xpYi9tb2RlbHMvcG8tcXVlcnktYnVpbGRlci9wby1xdWVyeS1idWlsZGVyLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQU10RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUNILE1BQU0sT0FBTyxjQUFjO0lBU3pCLFlBQW9CLGVBQWdDLEVBQVUsTUFBb0I7UUFBOUQsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUNoRixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0csSUFBSTs7WUFDUixJQUFJLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFdEUsSUFBSSxXQUFXLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRTtnQkFDckMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUU7b0JBQ3BDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUM5QztnQkFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7b0JBQ2YsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7aUJBQ2pFO2dCQUNELElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtvQkFDZCxXQUFXLEdB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LElBQUksQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxJQUFtQixFQUFFLFlBQTJCO1FBQ3ZFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbEIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNuQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDdEI7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sc0JBQXNCLENBQUMsZ0JBQTRCLEVBQUUsTUFBa0I7UUFDN0UsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB2YWxpZGF0ZVBhcmFtZXRlciB9IGZyb20gJy4uLy4uL3V0aWxzL3V0aWxzJztcblxuaW1wb3J0IHsgUG9SZXNwb25zZUFwaSB9IGZyb20gJy4vLi4vLi4vc2VydmljZXMvcG8taHR0cC1jbGllbnQvaW50ZXJmYWNlcy9wby1yZXNwb25zZS1hcGkuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvU2NoZW1hU2VydmljZSB9IGZyb20gJy4vLi4vLi4vc2VydmljZXMvcG8tc2NoZW1hJztcbmltcG9ydCB7IFBvU3luY1NjaGVtYSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BvLXN5bmMvaW50ZXJmYWNlcy9wby1zeW5jLXNjaGVtYS5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIENsYXNzZSB1dGlsaXTDoXJpYSBwYXJhIGNvbnN0cnVpciBjb25zdWx0YXMgc29icmUgb3MgcmVnaXN0cm9zIGRlIHVtICpzY2hlbWEqLlxuICpcbiAqIEEgdXRpbGl6YcOnw6NvIGRvcyBtw6l0b2RvcyBkZXN0YSBjbGFzc2Ugw6kgZmVpdGEgYSBwYXJ0aXIgZG8gcmV0b3JubyBkbyBtw6l0b2RvIGBQb0VudGl0eS5maW5kKClgLiBQb3IgZXhlbXBsbyxcbiAqIHBhcmEgdXRpbGl6YXIgbyBtw6l0b2RvIGBQb1F1ZXJ5QnVpbGRlci5wYWdlKClgLCDDqSBuZWNlc3PDoXJpbzpcbiAqXG4gKiBgYGAgdHlwZXNjcmlwdFxuICogUG9TeW5jU2VydmljZS5nZXRNb2RlbCgnc2NoZW1hIG5hbWUnKS5maW5kKCkucGFnZSgyKS5leGVjKCk7XG4gKiBgYGBcbiAqXG4gKiBPIGBQb1F1ZXJ5QnVpbGRlcmAgZm9pIHByb2pldGFkbyBwYXJhIHF1ZSBvcyBzZXVzIG3DqXRvZG9zIHNlamFtXG4gKiBjaGFtYWRvcyBlbSBjYXNjYXRhIGUgYW8gZmluYWwgZGVzc2UgZW5jYWRlYW1lbnRvIGludm9jYXIgbyBtw6l0b2RvXG4gKiBgUG9RdWVyeUJ1aWxkZXIuZXhlYygpYCBwYXJhIHF1ZSBhIGJ1c2NhIHNlamEgY29uY2x1w61kYS4gUG9yIGV4ZW1wbG86XG4gKlxuICogYGBgIHR5cGVzY3JpcHRcbiAqIFBvU3luY1NlcnZpY2VcbiAqICAgLmdldE1vZGVsKCdzY2hlbWEgbmFtZScpXG4gKiAgIC5maW5kKClcbiAqICAgLnBhZ2UoMilcbiAqICAgLnBhZ2VTaXplKDUpXG4gKiAgIC5zb3J0KClcbiAqICAgLmV4ZWMoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUG9RdWVyeUJ1aWxkZXIge1xuICBwcml2YXRlIGZpZWxkczogc3RyaW5nO1xuICBwcml2YXRlIGZpbHRlcnM6IGFueTtcblxuICBwcml2YXRlIF9saW1pdDogbnVtYmVyO1xuICBwcml2YXRlIF9wYWdlOiBudW1iZXI7XG4gIHByaXZhdGUgX3BhZ2VTaXplOiBudW1iZXI7XG4gIHByaXZhdGUgX3NvcnQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBvU2NoZW1hU2VydmljZTogUG9TY2hlbWFTZXJ2aWNlLCBwcml2YXRlIHNjaGVtYTogUG9TeW5jU2NoZW1hKSB7XG4gICAgdGhpcy5fcGFnZSA9IDE7XG4gICAgdGhpcy5maWx0ZXJzID0ge307XG4gIH1cblxuICAvKipcbiAgICogQW8gZmluYWwgZGEgY2hhbWFkYSBkb3MgbcOpdG9kb3MgZG8gYFBvUXVlcnlCdWlsZGVyYCB1dGlsaXphZG9zLCBlc3RlIG3DqXRvZG8gZGV2ZSBzZXIgY2hhbWFkbyBwYXJhIHF1ZSBhIGJ1c2NhIHNlamEgY29uY2x1w61kYS5cbiAgICpcbiAgICogQHJldHVybiB7UHJvbWlzZTxQb1Jlc3BvbnNlQXBpIHwgb2JqZWN0Pn0gUmVnaXN0cm9zIGRvICpzY2hlbWEqIG5hIHF1YWwgZm9pIGFwbGljYWRvIGEgY29uc3VsdGEuXG4gICAqL1xuICBhc3luYyBleGVjKCk6IFByb21pc2U8UG9SZXNwb25zZUFwaSB8IG9iamVjdD4ge1xuICAgIGxldCBzdG9yYWdlRGF0YSA9IGF3YWl0IHRoaXMucG9TY2hlbWFTZXJ2aWNlLmdldEFsbCh0aGlzLnNjaGVtYS5uYW1lKTtcblxuICAgIGlmIChzdG9yYWdlRGF0YSAmJiBzdG9yYWdlRGF0YS5sZW5ndGgpIHtcbiAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmZpbHRlcnMpLmxlbmd0aCkge1xuICAgICAgICBzdG9yYWdlRGF0YSA9IHRoaXMuYXBwbHlGaWx0ZXJzKHN0b3JhZ2VEYXRhKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZpZWxkcykge1xuICAgICAgICBzdG9yYWdlRGF0YSA9IHRoaXMuYXBwbHlGaWVsZHModGhpcy5zY2hlbWEuZmllbGRzLCBzdG9yYWdlRGF0YSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fc29ydCkge1xuICAgICAgICBzdG9yYWdlRGF0YSA9IHRoaXMub3JkZXIoc3RvcmFnZURhdGEsIHRoaXMuX3NvcnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fbGltaXQpIHtcbiAgICAgICAgcmV0dXJuIHN0b3JhZ2VEYXRhWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdGUoc3RvcmFnZURhdGEpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBoYXNOZXh0OiBmYWxzZSxcbiAgICAgICAgaXRlbXM6IFtdXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcGxpY2EgZmlsdHJvcyBzb2JyZSBvcyByZWdpc3Ryb3MsIGJhc2VhZG9zIG5vcyBjYW1wb3MgZSB2YWxvcmVzIGRlZmluaWRvcyBjb21vIGZpbHRyby4gUG9yIGV4ZW1wbG86XG4gICAqXG4gICAqIGBgYFxuICAgKiBQb1F1ZXJ5QnVpbGRlci5maWx0ZXIoeyBuYW1lOiAnTWFyaWUnLCBhZ2U6IDI0IH0pO1xuICAgKiBgYGBcbiAgICogUmV0b3JuYSB0b2RvcyBvcyByZWdpc3Ryb3MgcXVlIGNvbnRlbmhhbSBhIHByb3ByaWVkYWRlIGBuYW1lYCBpZ3VhbCBhIE1hcmllIGUgYGFnZWAgaWd1YWwgYSAyNC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGZpbHRlciBPYmpldG8gcXVlIGNvbnTDqW0gb3MgY2FtcG9zIGUgdmFsb3JlcyBhIHNlcmVtIGZpbHRyYWRvcyBubyAqc2NoZW1hKi5cbiAgICpcbiAgICogQHJldHVybnMge1BvUXVlcnlCdWlsZGVyfSBPYmpldG8gcXVlIHBvc3NpYmlsaXRhIGVuY2FkZWFyIHVtIG5vdm8gbcOpdG9kbyBkbyBgUG9RdWVyeUJ1aWxkZXJgLlxuICAgKi9cbiAgZmlsdGVyKGZpbHRlcj86IG9iamVjdCk6IFBvUXVlcnlCdWlsZGVyIHtcbiAgICBpZiAoZmlsdGVyICYmIHR5cGVvZiBmaWx0ZXIgPT09ICdvYmplY3QnKSB7XG4gICAgICB0aGlzLmZpbHRlcnMgPSB7IC4uLnRoaXMuZmlsdGVycywgLi4uZmlsdGVyIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmlsdGVyIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogTGltaXRhIG8gbsO6bWVybyBkZSByZWdpc3Ryb3MgcXVlIHNlcsOjbyByZXRvcm5hZG9zLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgTsO6bWVybyBkZSByZWdpc3Ryb3MgcmV0b3JuYWRvcy5cbiAgICogQHJldHVybnMge1BvUXVlcnlCdWlsZGVyfSBPYmpldG8gcXVlIHBvc3NpYmlsaXRhIGVuY2FkZWFyIHVtIG5vdm8gbcOpdG9kbyBkbyBgUG9RdWVyeUJ1aWxkZXJgLlxuICAgKi9cbiAgbGltaXQobGltaXQ6IG51bWJlcik6IFBvUXVlcnlCdWlsZGVyIHtcbiAgICB0aGlzLl9saW1pdCA9IGxpbWl0O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEVzcGVjaWZpY2EgYSBww6FnaW5hIGRlIHJlZ2lzdHJvcyBxdWUgc2UgZGVzZWphIHJldG9ybmFyLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGFnZSBOw7ptZXJvIGRhIHDDoWdpbmEuXG4gICAqIEByZXR1cm5zIHtQb1F1ZXJ5QnVpbGRlcn0gT2JqZXRvIHF1ZSBwb3NzaWJpbGl0YSBlbmNhZGVhciB1bSBub3ZvIG3DqXRvZG8gZG8gYFBvUXVlcnlCdWlsZGVyYC5cbiAgICovXG4gIHBhZ2UocGFnZTogbnVtYmVyKTogUG9RdWVyeUJ1aWxkZXIge1xuICAgIHZhbGlkYXRlUGFyYW1ldGVyKHsgcGFnZSB9KTtcblxuICAgIHRoaXMuX3BhZ2UgPSBwYWdlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBxdWFudG9zIGVsZW1lbnRvcyBzZXLDo28gcmV0b3JuYWRvcyBwb3IgcMOhZ2luYS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBhZ2VTaXplIE7Dum1lcm8gZGUgcmVnaXN0cm9zIHBvciBww6FnaW5hLlxuICAgKiBAcmV0dXJucyB7UG9RdWVyeUJ1aWxkZXJ9IE9iamV0byBxdWUgcG9zc2liaWxpdGEgZW5jYWRlYXIgdW0gbm92byBtw6l0b2RvIGRvIGBQb1F1ZXJ5QnVpbGRlcmAuXG4gICAqL1xuICBwYWdlU2l6ZShwYWdlU2l6ZTogbnVtYmVyKTogUG9RdWVyeUJ1aWxkZXIge1xuICAgIHZhbGlkYXRlUGFyYW1ldGVyKHsgcGFnZVNpemUgfSk7XG5cbiAgICB0aGlzLl9wYWdlU2l6ZSA9IHBhZ2VTaXplO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFV0aWxpemFkbyBwYXJhIGRlZmluaXIgcXVhaXMgY2FtcG9zIGRvICpzY2hlbWEqIHNlcsOjbyByZXRvcm5hZG9zIG5hIGNvbnN1bHRhLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGRzIENhbXBvcyBxdWUgc2Vyw6NvIHJldG9ybmFkb3Mgbm9zIHJlZ2lzdHJvcy4gRXN0ZSBjYW1wb3MgZGV2ZW0gZXN0YXIgZGVudHJvIGRlXG4gICAqIHVtYSAqc3RyaW5nKiBzZXBhcmFkb3MgcG9yIGVzcGHDp28gcG9kZW5kbyB1c2FyIG8gY2FyYWN0ZXJlIGAtYCBwYXJhIGV4Y2x1aXIgY2FtcG9zLlxuICAgKiBQb3IgZXhlbXBsbywgYSBkZWZpbmnDp8OjbyBhYmFpeG86XG4gICAqXG4gICAqIGBgYFxuICAgKiBQb1F1ZXJ5QnVpbGRlci5zZWxlY3QoJ25hbWUgYWdlIGFkZHJlc3MnKTtcbiAgICogYGBgXG4gICAqIElyw6EgcmV0b3JuYXIgYXBlbmFzIG9zIGNhbXBvcyBgbmFtZWAsIGBhZ2VgIGUgYGFkZHJlc3NgLiBQYXJhIG7Do28gcmV0b3JuYXIgdW0gY2FtcG8gb3UgbWFpcyBiYXN0YSBmYXplcjpcbiAgICpcbiAgICogYGBgXG4gICAqIFBvUXVlcnlCdWlsZGVyLnNlbGVjdCgnLW5hbWUgLWFnZScpO1xuICAgKiBgYGBcbiAgICpcbiAgICogQHJldHVybnMge1BvUXVlcnlCdWlsZGVyfSBPYmpldG8gcXVlIHBvc3NpYmlsaXRhIGVuY2FkZWFyIHVtIG5vdm8gbcOpdG9kbyBkbyBgUG9RdWVyeUJ1aWxkZXJgLlxuICAgKi9cbiAgc2VsZWN0KGZpZWxkczogc3RyaW5nKTogUG9RdWVyeUJ1aWxkZXIge1xuICAgIHZhbGlkYXRlUGFyYW1ldGVyKHsgZmllbGRzIH0pO1xuXG4gICAgdGhpcy5maWVsZHMgPSBmaWVsZHM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogT3JkZW5hIG9zIHJlZ2lzdHJvcyBwb3IgdW0gY2FtcG8uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZCBDYW1wbyBhIHNlciBvcmRlbmFkby4gUGFyYSBvcmRlbmFyIGRlIGZvcm1hIGRlY3Jlc2NlbnRlIGJhc3RhIGNvbG9jYXIgbyBjYXJhY3RlcmUgYC1gXG4gICAqIG5hIGZyZW50ZSBkbyBjYW1wby4gUG9yIGV4ZW1wbG86XG4gICAqIGBgYFxuICAgKiBQb1F1ZXJ5QnVpbGRlci5zb3J0KCctbmFtZScpO1xuICAgKiBgYGBcbiAgICpcbiAgICogQHJldHVybnMge1BvUXVlcnlCdWlsZGVyfSBPYmpldG8gcXVlIHBvc3NpYmlsaXRhIGVuY2FkZWFyIHVtIG5vdm8gbcOpdG9kbyBkbyBgUG9RdWVyeUJ1aWxkZXJgLlxuICAgKi9cbiAgc29ydChmaWVsZDogc3RyaW5nKTogUG9RdWVyeUJ1aWxkZXIge1xuICAgIHZhbGlkYXRlUGFyYW1ldGVyKHsgZmllbGQgfSk7XG5cbiAgICB0aGlzLl9zb3J0ID0gZmllbGQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogRXNzYSBmdW7Dp8OjbyBzZXJ2ZSBjb21vIGFsaWFzIHBhcmEgbyBgUG9RdWVyeUJ1aWxkZXIuZmlsdGVyKClgLiDDiSB1dGlsaXphZGEgc29tZW50ZSBwYXJhIGRhciBtYWlvciBsZWdpYmlsaWRhZGUgYW8gY8OzZGlnby5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGZpbHRlciBPYmpldG8gcXVlIGNvbnTDqW0gb3MgY2FtcG9zIGUgdmFsb3JlcyBhIHNlcmVtIGZpbHRyYWRvcyBubyAqc2NoZW1hKi5cbiAgICogQHJldHVybnMge1BvUXVlcnlCdWlsZGVyfSBPYmpldG8gcXVlIHBvc3NpYmlsaXRhIGVuY2FkZWFyIHVtIG5vdm8gbcOpdG9kbyBkbyBgUG9RdWVyeUJ1aWxkZXJgLlxuICAgKi9cbiAgd2hlcmUoZmlsdGVyOiBvYmplY3QpOiBQb1F1ZXJ5QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyKGZpbHRlcik7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5RmllbGRzKHNjaGVtYUZpZWxkczogQXJyYXk8YW55PiwgZGF0YTogQXJyYXk8b2JqZWN0Pik6IEFycmF5PG9iamVjdD4ge1xuICAgIGNvbnN0IHJlY2VpdmVkRmllbGRzID0gdGhpcy5maWVsZHMuc3BsaXQoJyAnKTtcbiAgICBsZXQgcmVzdHJpY3RlZEZpZWxkcyA9IFtdO1xuICAgIGxldCBzZWxlY3RlZEZpZWxkcyA9IFtdO1xuXG4gICAgW3NlbGVjdGVkRmllbGRzLCByZXN0cmljdGVkRmllbGRzXSA9IHRoaXMuZ3JvdXBGaWVsZHMocmVjZWl2ZWRGaWVsZHMpO1xuXG4gICAgaWYgKCFzZWxlY3RlZEZpZWxkcy5sZW5ndGggJiYgcmVzdHJpY3RlZEZpZWxkcy5sZW5ndGgpIHtcbiAgICAgIHNlbGVjdGVkRmllbGRzID0gWy4uLnNjaGVtYUZpZWxkc107XG4gICAgfVxuXG4gICAgaWYgKHJlc3RyaWN0ZWRGaWVsZHMubGVuZ3RoKSB7XG4gICAgICBzZWxlY3RlZEZpZWxkcyA9IHRoaXMucmVtb3ZlUmVzdHJpY3RlZEZpZWxkcyhyZXN0cmljdGVkRmllbGRzLCBzZWxlY3RlZEZpZWxkcyk7XG4gICAgfVxuXG4gICAgc2VsZWN0ZWRGaWVsZHMgPSB0aGlzLnJlbW92ZUR1cGxpY2F0ZShzZWxlY3RlZEZpZWxkcyk7XG5cbiAgICByZXR1cm4gdGhpcy5yZW1vdmVGaWVsZHNEYXRhKGRhdGEsIHNlbGVjdGVkRmllbGRzKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlGaWx0ZXJzKGRhdGE6IEFycmF5PG9iamVjdD4pOiBBcnJheTxvYmplY3Q+IHtcbiAgICBPYmplY3Qua2V5cyh0aGlzLmZpbHRlcnMpLmZvckVhY2goZmlsdGVyS2V5ID0+IHtcbiAgICAgIGRhdGEgPSBkYXRhLmZpbHRlcihpdGVtID0+IGl0ZW1bZmlsdGVyS2V5XSA9PT0gdGhpcy5maWx0ZXJzW2ZpbHRlcktleV0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcml2YXRlIGdyb3VwRmllbGRzKHJlY2VpdmVkRmllbGRzOiBBcnJheTxzdHJpbmc+KTogQXJyYXk8QXJyYXk8c3RyaW5nPj4ge1xuICAgIGNvbnN0IHJlc3RyaWN0ZWRGaWVsZHMgPSBbXTtcbiAgICBjb25zdCBzZWxlY3RlZEZpZWxkcyA9IFtdO1xuXG4gICAgcmVjZWl2ZWRGaWVsZHMuZm9yRWFjaChmaWVsZHMgPT4ge1xuICAgICAgaWYgKGZpZWxkcy5zdGFydHNXaXRoKCctJykpIHtcbiAgICAgICAgcmVzdHJpY3RlZEZpZWxkcy5wdXNoKGZpZWxkcy5zdWJzdHJpbmcoMSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZWN0ZWRGaWVsZHMucHVzaChmaWVsZHMpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBbc2VsZWN0ZWRGaWVsZHMsIHJlc3RyaWN0ZWRGaWVsZHNdO1xuICB9XG5cbiAgcHJpdmF0ZSBwYWdpbmF0ZShkYXRhOiBBcnJheTxhbnk+KTogeyBoYXNOZXh0OiBib29sZWFuOyBpdGVtczogQXJyYXk8YW55PiB9IHtcbiAgICBjb25zdCBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLl9wYWdlU2l6ZSB8fCBkYXRhTGVuZ3RoO1xuXG4gICAgY29uc3QgcGFnZXMgPSBNYXRoLmNlaWwoZGF0YUxlbmd0aCAvIHBhZ2VTaXplKTtcbiAgICBjb25zdCBiZWdpbiA9IHRoaXMuX3BhZ2UgKiBwYWdlU2l6ZSAtIHBhZ2VTaXplO1xuICAgIGNvbnN0IGVuZCA9IGJlZ2luICsgcGFnZVNpemU7XG5cbiAgICByZXR1cm4geyBoYXNOZXh0OiB0aGlzLl9wYWdlIDwgcGFnZXMsIGl0ZW1zOiBkYXRhLnNsaWNlKGJlZ2luLCBlbmQpIH07XG4gIH1cblxuICBwcml2YXRlIG9yZGVyKGRhdGE6IEFycmF5PGFueT4sIHNvcnRpbmdGaWVsZDogc3RyaW5nKTogQXJyYXk8YW55PiB7XG4gICAgY29uc3QgZGVzY2VuZGluZ09yZGVyID0gc29ydGluZ0ZpZWxkLnN0YXJ0c1dpdGgoJy0nKTtcbiAgICBzb3J0aW5nRmllbGQgPSBkZXNjZW5kaW5nT3JkZXIgPyBzb3J0aW5nRmllbGQuc3Vic3RyKDEpIDogc29ydGluZ0ZpZWxkO1xuXG4gICAgcmV0dXJuIGRhdGEuc29ydCgob3B0aW9uQSwgb3B0aW9uQikgPT4ge1xuICAgICAgaWYgKG9wdGlvbkFbc29ydGluZ0ZpZWxkXSA+IG9wdGlvbkJbc29ydGluZ0ZpZWxkXSkge1xuICAgICAgICByZXR1cm4gIWRlc2NlbmRpbmdPcmRlciA/IDEgOiAtMTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbkFbc29ydGluZ0ZpZWxkXSA8IG9wdGlvbkJbc29ydGluZ0ZpZWxkXSkge1xuICAgICAgICByZXR1cm4gIWRlc2NlbmRpbmdPcmRlciA/IC0xIDogMTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIDA7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUR1cGxpY2F0ZShmaWVsZHMpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gZmllbGRzLmZpbHRlcigoaXRlbSwgcG9zaXRpb24pID0+IGZpZWxkcy5pbmRleE9mKGl0ZW0pID09PSBwb3NpdGlvbik7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUZpZWxkc0RhdGEoZGF0YTogQXJyYXk8b2JqZWN0PiwgY2hvc2VuRmllbGRzOiBBcnJheTxzdHJpbmc+KTogQXJyYXk8b2JqZWN0PiB7XG4gICAgZGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgT2JqZWN0LmtleXMoaXRlbSkuZm9yRWFjaChrZXlJdGVtID0+IHtcbiAgICAgICAgaWYgKCFjaG9zZW5GaWVsZHMuaW5jbHVkZXMoa2V5SXRlbSkpIHtcbiAgICAgICAgICBkZWxldGUgaXRlbVtrZXlJdGVtXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVJlc3RyaWN0ZWRGaWVsZHMocmVzdHJpY3RlZEZpZWxkczogQXJyYXk8YW55PiwgZmllbGRzOiBBcnJheTxhbnk+KSB7XG4gICAgcmV0dXJuIGZpZWxkcy5maWx0ZXIoZmllbGQgPT4gIXJlc3RyaWN0ZWRGaWVsZHMuaW5jbHVkZXMoZmllbGQpKTtcbiAgfVxufVxuIl19
1
+ import { __awaiter } from "tslib";
2
+ import { validateParameter } from '../../utils/utils';
3
+ /**
4
+ * @description
5
+ *
6
+ * Classe utilitária para construir consultas sobre os registros de um *schema*.
7
+ *
8
+ * A utilização dos métodos desta classe é feita a partir do retorno do método `PoEntity.find()`. Por exemplo,
9
+ * para utilizar o método `PoQueryBuilder.page()`, é necessário:
10
+ *
11
+ * ``` typescript
12
+ * PoSyncService.getModel('schema name').find().page(2).exec();
13
+ * ```
14
+ *
15
+ * O `PoQueryBuilder` foi projetado para que os seus métodos sejam
16
+ * chamados em cascata e ao final desse encadeamento invocar o método
17
+ * `PoQueryBuilder.exec()` para que a busca seja concluída. Por exemplo:
18
+ *
19
+ * ``` typescript
20
+ * PoSyncService
21
+ * .getModel('schema name')
22
+ * .find()
23
+ * .page(2)
24
+ * .pageSize(5)
25
+ * .sort()
26
+ * .exec();
27
+ * ```
28
+ */
29
+ export class PoQueryBuilder {
30
+ constructor(poSchemaService, schema) {
31
+ this.poSchemaService = poSchemaService;
32
+ this.schema = schema;
33
+ this._page = 1;
34
+ this.filters = {};
35
+ }
36
+ /**
37
+ * Ao final da chamada dos métodos do `PoQueryBuilder` utilizados, este método deve ser chamado para que a busca seja concluída.
38
+ *
39
+ * @return {Promise<PoResponseApi | object>} Registros do *schema* na qual foi aplicado a consulta.
40
+ */
41
+ exec() {
42
+ return __awaiter(this, void 0, void 0, function* () {
43
+ let storageData = yield this.poSchemaService.getAll(this.schema.name);
44
+ if (storageData && storageData.length) {
45
+ if (Object.keys(this.filters).length) {
46
+ storageData = this.applyFilters(storageData);
47
+ }
48
+ if (this.fields) {
49
+ storageData = this.applyFields(this.schema.fields, storageData);
50
+ }
51
+ if (this._sort) {
52
+ storageData = this.order(storageData, this._sort);
53
+ }
54
+ if (this._limit) {
55
+ return storageData[0];
56
+ }
57
+ else {
58
+ return this.paginate(storageData);
59
+ }
60
+ }
61
+ else {
62
+ return {
63
+ hasNext: false,
64
+ items: []
65
+ };
66
+ }
67
+ });
68
+ }
69
+ /**
70
+ * Aplica filtros sobre os registros, baseados nos campos e valores definidos como filtro. Por exemplo:
71
+ *
72
+ * ```
73
+ * PoQueryBuilder.filter({ name: 'Marie', age: 24 });
74
+ * ```
75
+ * Retorna todos os registros que contenham a propriedade `name` igual a Marie e `age` igual a 24.
76
+ *
77
+ * @param {object} filter Objeto que contém os campos e valores a serem filtrados no *schema*.
78
+ *
79
+ * @returns {PoQueryBuilder} Objeto que possibilita encadear um novo método do `PoQueryBuilder`.
80
+ */
81
+ filter(filter) {
82
+ if (filter && typeof filter === 'object') {
83
+ this.filters = Object.assign(Object.assign({}, this.filters), filter);
84
+ }
85
+ else {
86
+ throw new Error('Filter must be an object');
87
+ }
88
+ return this;
89
+ }
90
+ /**
91
+ * Limita o número de registros que serão retornados.
92
+ *
93
+ * @param {number} limit Número de registros retornados.
94
+ * @returns {PoQueryBuilder} Objeto que possibilita encadear um novo método do `PoQueryBuilder`.
95
+ */
96
+ limit(limit) {
97
+ this._limit = limit;
98
+ return this;
99
+ }
100
+ /**
101
+ * Especifica a página de registros que se deseja retornar.
102
+ *
103
+ * @param {number} page Número da página.
104
+ * @returns {PoQueryBuilder} Objeto que possibilita encadear um novo método do `PoQueryBuilder`.
105
+ */
106
+ page(page) {
107
+ validateParameter({ page });
108
+ this._page = page;
109
+ return this;
110
+ }
111
+ /**
112
+ * Define quantos elementos serão retornados por página.
113
+ *
114
+ * @param {number} pageSize Número de registros por página.
115
+ * @returns {PoQueryBuilder} Objeto que possibilita encadear um novo método do `PoQueryBuilder`.
116
+ */
117
+ pageSize(pageSize) {
118
+ validateParameter({ pageSize });
119
+ this._pageSize = pageSize;
120
+ return this;
121
+ }
122
+ /**
123
+ * Utilizado para definir quais campos do *schema* serão retornados na consulta.
124
+ *
125
+ * @param {string} fields Campos que serão retornados nos registros. Este campos devem estar dentro de
126
+ * uma *string* separados por espaço podendo usar o caractere `-` para excluir campos.
127
+ * Por exemplo, a definição abaixo:
128
+ *
129
+ * ```
130
+ * PoQueryBuilder.select('name age address');
131
+ * ```
132
+ * Irá retornar apenas os campos `name`, `age` e `address`. Para não retornar um campo ou mais basta fazer:
133
+ *
134
+ * ```
135
+ * PoQueryBuilder.select('-name -age');
136
+ * ```
137
+ *
138
+ * @returns {PoQueryBuilder} Objeto que possibilita encadear um novo método do `PoQueryBuilder`.
139
+ */
140
+ select(fields) {
141
+ validateParameter({ fields });
142
+ this.fields = fields;
143
+ return this;
144
+ }
145
+ /**
146
+ * Ordena os registros por um campo.
147
+ *
148
+ * @param {string} field Campo a ser ordenado. Para ordenar de forma decrescente basta colocar o caractere `-`
149
+ * na frente do campo. Por exemplo:
150
+ * ```
151
+ * PoQueryBuilder.sort('-name');
152
+ * ```
153
+ *
154
+ * @returns {PoQueryBuilder} Objeto que possibilita encadear um novo método do `PoQueryBuilder`.
155
+ */
156
+ sort(field) {
157
+ validateParameter({ field });
158
+ this._sort = field;
159
+ return this;
160
+ }
161
+ /**
162
+ * Essa função serve como alias para o `PoQueryBuilder.filter()`. É utilizada somente para dar maior legibilidade ao código.
163
+ *
164
+ * @param {object} filter Objeto que contém os campos e valores a serem filtrados no *schema*.
165
+ * @returns {PoQueryBuilder} Objeto que possibilita encadear um novo método do `PoQueryBuilder`.
166
+ */
167
+ where(filter) {
168
+ return this.filter(filter);
169
+ }
170
+ applyFields(schemaFields, data) {
171
+ const receivedFields = this.fields.split(' ');
172
+ let restrictedFields = [];
173
+ let selectedFields = [];
174
+ [selectedFields, restrictedFields] = this.groupFields(receivedFields);
175
+ if (!selectedFields.length && restrictedFields.length) {
176
+ selectedFields = [...schemaFields];
177
+ }
178
+ if (restrictedFields.length) {
179
+ selectedFields = this.removeRestrictedFields(restrictedFields, selectedFields);
180
+ }
181
+ selectedFields = this.removeDuplicate(selectedFields);
182
+ return this.removeFieldsData(data, selectedFields);
183
+ }
184
+ applyFilters(data) {
185
+ Object.keys(this.filters).forEach(filterKey => {
186
+ data = data.filter(item => item[filterKey] === this.filters[filterKey]);
187
+ });
188
+ return data;
189
+ }
190
+ groupFields(receivedFields) {
191
+ const restrictedFields = [];
192
+ const selectedFields = [];
193
+ receivedFields.forEach(fields => {
194
+ if (fields.startsWith('-')) {
195
+ restrictedFields.push(fields.substring(1));
196
+ }
197
+ else {
198
+ selectedFields.push(fields);
199
+ }
200
+ });
201
+ return [selectedFields, restrictedFields];
202
+ }
203
+ paginate(data) {
204
+ const dataLength = data.length;
205
+ const pageSize = this._pageSize || dataLength;
206
+ const pages = Math.ceil(dataLength / pageSize);
207
+ const begin = this._page * pageSize - pageSize;
208
+ const end = begin + pageSize;
209
+ return { hasNext: this._page < pages, items: data.slice(begin, end) };
210
+ }
211
+ order(data, sortingField) {
212
+ const descendingOrder = sortingField.startsWith('-');
213
+ sortingField = descendingOrder ? sortingField.substr(1) : sortingField;
214
+ return data.sort((optionA, optionB) => {
215
+ if (optionA[sortingField] > optionB[sortingField]) {
216
+ return !descendingOrder ? 1 : -1;
217
+ }
218
+ if (optionA[sortingField] < optionB[sortingField]) {
219
+ return !descendingOrder ? -1 : 1;
220
+ }
221
+ return 0;
222
+ });
223
+ }
224
+ removeDuplicate(fields) {
225
+ return fields.filter((item, position) => fields.indexOf(item) === position);
226
+ }
227
+ removeFieldsData(data, chosenFields) {
228
+ data.forEach(item => {
229
+ Object.keys(item).forEach(keyItem => {
230
+ if (!chosenFields.includes(keyItem)) {
231
+ delete item[keyItem];
232
+ }
233
+ });
234
+ });
235
+ return data;
236
+ }
237
+ removeRestrictedFields(restrictedFields, fields) {
238
+ return fields.filter(field => !restrictedFields.includes(field));
239
+ }
240
+ }
241
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tcXVlcnktYnVpbGRlci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N5bmMvc3JjL2xpYi9tb2RlbHMvcG8tcXVlcnktYnVpbGRlci9wby1xdWVyeS1idWlsZGVyLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQU10RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUNILE1BQU0sT0FBTyxjQUFjO0lBU3pCLFlBQW9CLGVBQWdDLEVBQVUsTUFBb0I7UUFBOUQsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUNoRixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0csSUFBSTs7WUFDUixJQUFJLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFdEUsSUFBSSxXQUFXLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRTtnQkFDckMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUU7b0JBQ3BDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUM5QztnQkFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7b0JBQ2YsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7aUJBQ2pFO2dCQUNELElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtvQkFDZCxXQUFXLEdB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LElBQUksQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxJQUFtQixFQUFFLFlBQTJCO1FBQ3ZFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbEIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNuQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDdEI7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sc0JBQXNCLENBQUMsZ0JBQTRCLEVBQUUsTUFBa0I7UUFDN0UsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB2YWxpZGF0ZVBhcmFtZXRlciB9IGZyb20gJy4uLy4uL3V0aWxzL3V0aWxzJztcclxuXHJcbmltcG9ydCB7IFBvUmVzcG9uc2VBcGkgfSBmcm9tICcuLy4uLy4uL3NlcnZpY2VzL3BvLWh0dHAtY2xpZW50L2ludGVyZmFjZXMvcG8tcmVzcG9uc2UtYXBpLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFBvU2NoZW1hU2VydmljZSB9IGZyb20gJy4vLi4vLi4vc2VydmljZXMvcG8tc2NoZW1hJztcclxuaW1wb3J0IHsgUG9TeW5jU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG8tc3luYy9pbnRlcmZhY2VzL3BvLXN5bmMtc2NoZW1hLmludGVyZmFjZSc7XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqXHJcbiAqIENsYXNzZSB1dGlsaXTDoXJpYSBwYXJhIGNvbnN0cnVpciBjb25zdWx0YXMgc29icmUgb3MgcmVnaXN0cm9zIGRlIHVtICpzY2hlbWEqLlxyXG4gKlxyXG4gKiBBIHV0aWxpemHDp8OjbyBkb3MgbcOpdG9kb3MgZGVzdGEgY2xhc3NlIMOpIGZlaXRhIGEgcGFydGlyIGRvIHJldG9ybm8gZG8gbcOpdG9kbyBgUG9FbnRpdHkuZmluZCgpYC4gUG9yIGV4ZW1wbG8sXHJcbiAqIHBhcmEgdXRpbGl6YXIgbyBtw6l0b2RvIGBQb1F1ZXJ5QnVpbGRlci5wYWdlKClgLCDDqSBuZWNlc3PDoXJpbzpcclxuICpcclxuICogYGBgIHR5cGVzY3JpcHRcclxuICogUG9TeW5jU2VydmljZS5nZXRNb2RlbCgnc2NoZW1hIG5hbWUnKS5maW5kKCkucGFnZSgyKS5leGVjKCk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBPIGBQb1F1ZXJ5QnVpbGRlcmAgZm9pIHByb2pldGFkbyBwYXJhIHF1ZSBvcyBzZXVzIG3DqXRvZG9zIHNlamFtXHJcbiAqIGNoYW1hZG9zIGVtIGNhc2NhdGEgZSBhbyBmaW5hbCBkZXNzZSBlbmNhZGVhbWVudG8gaW52b2NhciBvIG3DqXRvZG9cclxuICogYFBvUXVlcnlCdWlsZGVyLmV4ZWMoKWAgcGFyYSBxdWUgYSBidXNjYSBzZWphIGNvbmNsdcOtZGEuIFBvciBleGVtcGxvOlxyXG4gKlxyXG4gKiBgYGAgdHlwZXNjcmlwdFxyXG4gKiBQb1N5bmNTZXJ2aWNlXHJcbiAqICAgLmdldE1vZGVsKCdzY2hlbWEgbmFtZScpXHJcbiAqICAgLmZpbmQoKVxyXG4gKiAgIC5wYWdlKDIpXHJcbiAqICAgLnBhZ2VTaXplKDUpXHJcbiAqICAgLnNvcnQoKVxyXG4gKiAgIC5leGVjKCk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFBvUXVlcnlCdWlsZGVyIHtcclxuICBwcml2YXRlIGZpZWxkczogc3RyaW5nO1xyXG4gIHByaXZhdGUgZmlsdGVyczogYW55O1xyXG5cclxuICBwcml2YXRlIF9saW1pdDogbnVtYmVyO1xyXG4gIHByaXZhdGUgX3BhZ2U6IG51bWJlcjtcclxuICBwcml2YXRlIF9wYWdlU2l6ZTogbnVtYmVyO1xyXG4gIHByaXZhdGUgX3NvcnQ6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwb1NjaGVtYVNlcnZpY2U6IFBvU2NoZW1hU2VydmljZSwgcHJpdmF0ZSBzY2hlbWE6IFBvU3luY1NjaGVtYSkge1xyXG4gICAgdGhpcy5fcGFnZSA9IDE7XHJcbiAgICB0aGlzLmZpbHRlcnMgPSB7fTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFvIGZpbmFsIGRhIGNoYW1hZGEgZG9zIG3DqXRvZG9zIGRvIGBQb1F1ZXJ5QnVpbGRlcmAgdXRpbGl6YWRvcywgZXN0ZSBtw6l0b2RvIGRldmUgc2VyIGNoYW1hZG8gcGFyYSBxdWUgYSBidXNjYSBzZWphIGNvbmNsdcOtZGEuXHJcbiAgICpcclxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFBvUmVzcG9uc2VBcGkgfCBvYmplY3Q+fSBSZWdpc3Ryb3MgZG8gKnNjaGVtYSogbmEgcXVhbCBmb2kgYXBsaWNhZG8gYSBjb25zdWx0YS5cclxuICAgKi9cclxuICBhc3luYyBleGVjKCk6IFByb21pc2U8UG9SZXNwb25zZUFwaSB8IG9iamVjdD4ge1xyXG4gICAgbGV0IHN0b3JhZ2VEYXRhID0gYXdhaXQgdGhpcy5wb1NjaGVtYVNlcnZpY2UuZ2V0QWxsKHRoaXMuc2NoZW1hLm5hbWUpO1xyXG5cclxuICAgIGlmIChzdG9yYWdlRGF0YSAmJiBzdG9yYWdlRGF0YS5sZW5ndGgpIHtcclxuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZmlsdGVycykubGVuZ3RoKSB7XHJcbiAgICAgICAgc3RvcmFnZURhdGEgPSB0aGlzLmFwcGx5RmlsdGVycyhzdG9yYWdlRGF0YSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZmllbGRzKSB7XHJcbiAgICAgICAgc3RvcmFnZURhdGEgPSB0aGlzLmFwcGx5RmllbGRzKHRoaXMuc2NoZW1hLmZpZWxkcywgc3RvcmFnZURhdGEpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLl9zb3J0KSB7XHJcbiAgICAgICAgc3RvcmFnZURhdGEgPSB0aGlzLm9yZGVyKHN0b3JhZ2VEYXRhLCB0aGlzLl9zb3J0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuX2xpbWl0KSB7XHJcbiAgICAgICAgcmV0dXJuIHN0b3JhZ2VEYXRhWzBdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRlKHN0b3JhZ2VEYXRhKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBoYXNOZXh0OiBmYWxzZSxcclxuICAgICAgICBpdGVtczogW11cclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwbGljYSBmaWx0cm9zIHNvYnJlIG9zIHJlZ2lzdHJvcywgYmFzZWFkb3Mgbm9zIGNhbXBvcyBlIHZhbG9yZXMgZGVmaW5pZG9zIGNvbW8gZmlsdHJvLiBQb3IgZXhlbXBsbzpcclxuICAgKlxyXG4gICAqIGBgYFxyXG4gICAqIFBvUXVlcnlCdWlsZGVyLmZpbHRlcih7IG5hbWU6ICdNYXJpZScsIGFnZTogMjQgfSk7XHJcbiAgICogYGBgXHJcbiAgICogUmV0b3JuYSB0b2RvcyBvcyByZWdpc3Ryb3MgcXVlIGNvbnRlbmhhbSBhIHByb3ByaWVkYWRlIGBuYW1lYCBpZ3VhbCBhIE1hcmllIGUgYGFnZWAgaWd1YWwgYSAyNC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBmaWx0ZXIgT2JqZXRvIHF1ZSBjb250w6ltIG9zIGNhbXBvcyBlIHZhbG9yZXMgYSBzZXJlbSBmaWx0cmFkb3Mgbm8gKnNjaGVtYSouXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UG9RdWVyeUJ1aWxkZXJ9IE9iamV0byBxdWUgcG9zc2liaWxpdGEgZW5jYWRlYXIgdW0gbm92byBtw6l0b2RvIGRvIGBQb1F1ZXJ5QnVpbGRlcmAuXHJcbiAgICovXHJcbiAgZmlsdGVyKGZpbHRlcj86IG9iamVjdCk6IFBvUXVlcnlCdWlsZGVyIHtcclxuICAgIGlmIChmaWx0ZXIgJiYgdHlwZW9mIGZpbHRlciA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgdGhpcy5maWx0ZXJzID0geyAuLi50aGlzLmZpbHRlcnMsIC4uLmZpbHRlciB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaWx0ZXIgbXVzdCBiZSBhbiBvYmplY3QnKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpbWl0YSBvIG7Dum1lcm8gZGUgcmVnaXN0cm9zIHF1ZSBzZXLDo28gcmV0b3JuYWRvcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCBOw7ptZXJvIGRlIHJlZ2lzdHJvcyByZXRvcm5hZG9zLlxyXG4gICAqIEByZXR1cm5zIHtQb1F1ZXJ5QnVpbGRlcn0gT2JqZXRvIHF1ZSBwb3NzaWJpbGl0YSBlbmNhZGVhciB1bSBub3ZvIG3DqXRvZG8gZG8gYFBvUXVlcnlCdWlsZGVyYC5cclxuICAgKi9cclxuICBsaW1pdChsaW1pdDogbnVtYmVyKTogUG9RdWVyeUJ1aWxkZXIge1xyXG4gICAgdGhpcy5fbGltaXQgPSBsaW1pdDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXNwZWNpZmljYSBhIHDDoWdpbmEgZGUgcmVnaXN0cm9zIHF1ZSBzZSBkZXNlamEgcmV0b3JuYXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gcGFnZSBOw7ptZXJvIGRhIHDDoWdpbmEuXHJcbiAgICogQHJldHVybnMge1BvUXVlcnlCdWlsZGVyfSBPYmpldG8gcXVlIHBvc3NpYmlsaXRhIGVuY2FkZWFyIHVtIG5vdm8gbcOpdG9kbyBkbyBgUG9RdWVyeUJ1aWxkZXJgLlxyXG4gICAqL1xyXG4gIHBhZ2UocGFnZTogbnVtYmVyKTogUG9RdWVyeUJ1aWxkZXIge1xyXG4gICAgdmFsaWRhdGVQYXJhbWV0ZXIoeyBwYWdlIH0pO1xyXG5cclxuICAgIHRoaXMuX3BhZ2UgPSBwYWdlO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWZpbmUgcXVhbnRvcyBlbGVtZW50b3Mgc2Vyw6NvIHJldG9ybmFkb3MgcG9yIHDDoWdpbmEuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gcGFnZVNpemUgTsO6bWVybyBkZSByZWdpc3Ryb3MgcG9yIHDDoWdpbmEuXHJcbiAgICogQHJldHVybnMge1BvUXVlcnlCdWlsZGVyfSBPYmpldG8gcXVlIHBvc3NpYmlsaXRhIGVuY2FkZWFyIHVtIG5vdm8gbcOpdG9kbyBkbyBgUG9RdWVyeUJ1aWxkZXJgLlxyXG4gICAqL1xyXG4gIHBhZ2VTaXplKHBhZ2VTaXplOiBudW1iZXIpOiBQb1F1ZXJ5QnVpbGRlciB7XHJcbiAgICB2YWxpZGF0ZVBhcmFtZXRlcih7IHBhZ2VTaXplIH0pO1xyXG5cclxuICAgIHRoaXMuX3BhZ2VTaXplID0gcGFnZVNpemU7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFV0aWxpemFkbyBwYXJhIGRlZmluaXIgcXVhaXMgY2FtcG9zIGRvICpzY2hlbWEqIHNlcsOjbyByZXRvcm5hZG9zIG5hIGNvbnN1bHRhLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkcyBDYW1wb3MgcXVlIHNlcsOjbyByZXRvcm5hZG9zIG5vcyByZWdpc3Ryb3MuIEVzdGUgY2FtcG9zIGRldmVtIGVzdGFyIGRlbnRybyBkZVxyXG4gICAqIHVtYSAqc3RyaW5nKiBzZXBhcmFkb3MgcG9yIGVzcGHDp28gcG9kZW5kbyB1c2FyIG8gY2FyYWN0ZXJlIGAtYCBwYXJhIGV4Y2x1aXIgY2FtcG9zLlxyXG4gICAqIFBvciBleGVtcGxvLCBhIGRlZmluacOnw6NvIGFiYWl4bzpcclxuICAgKlxyXG4gICAqIGBgYFxyXG4gICAqIFBvUXVlcnlCdWlsZGVyLnNlbGVjdCgnbmFtZSBhZ2UgYWRkcmVzcycpO1xyXG4gICAqIGBgYFxyXG4gICAqIElyw6EgcmV0b3JuYXIgYXBlbmFzIG9zIGNhbXBvcyBgbmFtZWAsIGBhZ2VgIGUgYGFkZHJlc3NgLiBQYXJhIG7Do28gcmV0b3JuYXIgdW0gY2FtcG8gb3UgbWFpcyBiYXN0YSBmYXplcjpcclxuICAgKlxyXG4gICAqIGBgYFxyXG4gICAqIFBvUXVlcnlCdWlsZGVyLnNlbGVjdCgnLW5hbWUgLWFnZScpO1xyXG4gICAqIGBgYFxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1BvUXVlcnlCdWlsZGVyfSBPYmpldG8gcXVlIHBvc3NpYmlsaXRhIGVuY2FkZWFyIHVtIG5vdm8gbcOpdG9kbyBkbyBgUG9RdWVyeUJ1aWxkZXJgLlxyXG4gICAqL1xyXG4gIHNlbGVjdChmaWVsZHM6IHN0cmluZyk6IFBvUXVlcnlCdWlsZGVyIHtcclxuICAgIHZhbGlkYXRlUGFyYW1ldGVyKHsgZmllbGRzIH0pO1xyXG5cclxuICAgIHRoaXMuZmllbGRzID0gZmllbGRzO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPcmRlbmEgb3MgcmVnaXN0cm9zIHBvciB1bSBjYW1wby5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZCBDYW1wbyBhIHNlciBvcmRlbmFkby4gUGFyYSBvcmRlbmFyIGRlIGZvcm1hIGRlY3Jlc2NlbnRlIGJhc3RhIGNvbG9jYXIgbyBjYXJhY3RlcmUgYC1gXHJcbiAgICogbmEgZnJlbnRlIGRvIGNhbXBvLiBQb3IgZXhlbXBsbzpcclxuICAgKiBgYGBcclxuICAgKiBQb1F1ZXJ5QnVpbGRlci5zb3J0KCctbmFtZScpO1xyXG4gICAqIGBgYFxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1BvUXVlcnlCdWlsZGVyfSBPYmpldG8gcXVlIHBvc3NpYmlsaXRhIGVuY2FkZWFyIHVtIG5vdm8gbcOpdG9kbyBkbyBgUG9RdWVyeUJ1aWxkZXJgLlxyXG4gICAqL1xyXG4gIHNvcnQoZmllbGQ6IHN0cmluZyk6IFBvUXVlcnlCdWlsZGVyIHtcclxuICAgIHZhbGlkYXRlUGFyYW1ldGVyKHsgZmllbGQgfSk7XHJcblxyXG4gICAgdGhpcy5fc29ydCA9IGZpZWxkO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFc3NhIGZ1bsOnw6NvIHNlcnZlIGNvbW8gYWxpYXMgcGFyYSBvIGBQb1F1ZXJ5QnVpbGRlci5maWx0ZXIoKWAuIMOJIHV0aWxpemFkYSBzb21lbnRlIHBhcmEgZGFyIG1haW9yIGxlZ2liaWxpZGFkZSBhbyBjw7NkaWdvLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtvYmplY3R9IGZpbHRlciBPYmpldG8gcXVlIGNvbnTDqW0gb3MgY2FtcG9zIGUgdmFsb3JlcyBhIHNlcmVtIGZpbHRyYWRvcyBubyAqc2NoZW1hKi5cclxuICAgKiBAcmV0dXJucyB7UG9RdWVyeUJ1aWxkZXJ9IE9iamV0byBxdWUgcG9zc2liaWxpdGEgZW5jYWRlYXIgdW0gbm92byBtw6l0b2RvIGRvIGBQb1F1ZXJ5QnVpbGRlcmAuXHJcbiAgICovXHJcbiAgd2hlcmUoZmlsdGVyOiBvYmplY3QpOiBQb1F1ZXJ5QnVpbGRlciB7XHJcbiAgICByZXR1cm4gdGhpcy5maWx0ZXIoZmlsdGVyKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlGaWVsZHMoc2NoZW1hRmllbGRzOiBBcnJheTxhbnk+LCBkYXRhOiBBcnJheTxvYmplY3Q+KTogQXJyYXk8b2JqZWN0PiB7XHJcbiAgICBjb25zdCByZWNlaXZlZEZpZWxkcyA9IHRoaXMuZmllbGRzLnNwbGl0KCcgJyk7XHJcbiAgICBsZXQgcmVzdHJpY3RlZEZpZWxkcyA9IFtdO1xyXG4gICAgbGV0IHNlbGVjdGVkRmllbGRzID0gW107XHJcblxyXG4gICAgW3NlbGVjdGVkRmllbGRzLCByZXN0cmljdGVkRmllbGRzXSA9IHRoaXMuZ3JvdXBGaWVsZHMocmVjZWl2ZWRGaWVsZHMpO1xyXG5cclxuICAgIGlmICghc2VsZWN0ZWRGaWVsZHMubGVuZ3RoICYmIHJlc3RyaWN0ZWRGaWVsZHMubGVuZ3RoKSB7XHJcbiAgICAgIHNlbGVjdGVkRmllbGRzID0gWy4uLnNjaGVtYUZpZWxkc107XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlc3RyaWN0ZWRGaWVsZHMubGVuZ3RoKSB7XHJcbiAgICAgIHNlbGVjdGVkRmllbGRzID0gdGhpcy5yZW1vdmVSZXN0cmljdGVkRmllbGRzKHJlc3RyaWN0ZWRGaWVsZHMsIHNlbGVjdGVkRmllbGRzKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZEZpZWxkcyA9IHRoaXMucmVtb3ZlRHVwbGljYXRlKHNlbGVjdGVkRmllbGRzKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5yZW1vdmVGaWVsZHNEYXRhKGRhdGEsIHNlbGVjdGVkRmllbGRzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlGaWx0ZXJzKGRhdGE6IEFycmF5PG9iamVjdD4pOiBBcnJheTxvYmplY3Q+IHtcclxuICAgIE9iamVjdC5rZXlzKHRoaXMuZmlsdGVycykuZm9yRWFjaChmaWx0ZXJLZXkgPT4ge1xyXG4gICAgICBkYXRhID0gZGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtW2ZpbHRlcktleV0gPT09IHRoaXMuZmlsdGVyc1tmaWx0ZXJLZXldKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBncm91cEZpZWxkcyhyZWNlaXZlZEZpZWxkczogQXJyYXk8c3RyaW5nPik6IEFycmF5PEFycmF5PHN0cmluZz4+IHtcclxuICAgIGNvbnN0IHJlc3RyaWN0ZWRGaWVsZHMgPSBbXTtcclxuICAgIGNvbnN0IHNlbGVjdGVkRmllbGRzID0gW107XHJcblxyXG4gICAgcmVjZWl2ZWRGaWVsZHMuZm9yRWFjaChmaWVsZHMgPT4ge1xyXG4gICAgICBpZiAoZmllbGRzLnN0YXJ0c1dpdGgoJy0nKSkge1xyXG4gICAgICAgIHJlc3RyaWN0ZWRGaWVsZHMucHVzaChmaWVsZHMuc3Vic3RyaW5nKDEpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzZWxlY3RlZEZpZWxkcy5wdXNoKGZpZWxkcyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIFtzZWxlY3RlZEZpZWxkcywgcmVzdHJpY3RlZEZpZWxkc107XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBhZ2luYXRlKGRhdGE6IEFycmF5PGFueT4pOiB7IGhhc05leHQ6IGJvb2xlYW47IGl0ZW1zOiBBcnJheTxhbnk+IH0ge1xyXG4gICAgY29uc3QgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xyXG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLl9wYWdlU2l6ZSB8fCBkYXRhTGVuZ3RoO1xyXG5cclxuICAgIGNvbnN0IHBhZ2VzID0gTWF0aC5jZWlsKGRhdGFMZW5ndGggLyBwYWdlU2l6ZSk7XHJcbiAgICBjb25zdCBiZWdpbiA9IHRoaXMuX3BhZ2UgKiBwYWdlU2l6ZSAtIHBhZ2VTaXplO1xyXG4gICAgY29uc3QgZW5kID0gYmVnaW4gKyBwYWdlU2l6ZTtcclxuXHJcbiAgICByZXR1cm4geyBoYXNOZXh0OiB0aGlzLl9wYWdlIDwgcGFnZXMsIGl0ZW1zOiBkYXRhLnNsaWNlKGJlZ2luLCBlbmQpIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9yZGVyKGRhdGE6IEFycmF5PGFueT4sIHNvcnRpbmdGaWVsZDogc3RyaW5nKTogQXJyYXk8YW55PiB7XHJcbiAgICBjb25zdCBkZXNjZW5kaW5nT3JkZXIgPSBzb3J0aW5nRmllbGQuc3RhcnRzV2l0aCgnLScpO1xyXG4gICAgc29ydGluZ0ZpZWxkID0gZGVzY2VuZGluZ09yZGVyID8gc29ydGluZ0ZpZWxkLnN1YnN0cigxKSA6IHNvcnRpbmdGaWVsZDtcclxuXHJcbiAgICByZXR1cm4gZGF0YS5zb3J0KChvcHRpb25BLCBvcHRpb25CKSA9PiB7XHJcbiAgICAgIGlmIChvcHRpb25BW3NvcnRpbmdGaWVsZF0gPiBvcHRpb25CW3NvcnRpbmdGaWVsZF0pIHtcclxuICAgICAgICByZXR1cm4gIWRlc2NlbmRpbmdPcmRlciA/IDEgOiAtMTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG9wdGlvbkFbc29ydGluZ0ZpZWxkXSA8IG9wdGlvbkJbc29ydGluZ0ZpZWxkXSkge1xyXG4gICAgICAgIHJldHVybiAhZGVzY2VuZGluZ09yZGVyID8gLTEgOiAxO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVEdXBsaWNhdGUoZmllbGRzKTogQXJyYXk8YW55PiB7XHJcbiAgICByZXR1cm4gZmllbGRzLmZpbHRlcigoaXRlbSwgcG9zaXRpb24pID0+IGZpZWxkcy5pbmRleE9mKGl0ZW0pID09PSBwb3NpdGlvbik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZUZpZWxkc0RhdGEoZGF0YTogQXJyYXk8b2JqZWN0PiwgY2hvc2VuRmllbGRzOiBBcnJheTxzdHJpbmc+KTogQXJyYXk8b2JqZWN0PiB7XHJcbiAgICBkYXRhLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgIE9iamVjdC5rZXlzKGl0ZW0pLmZvckVhY2goa2V5SXRlbSA9PiB7XHJcbiAgICAgICAgaWYgKCFjaG9zZW5GaWVsZHMuaW5jbHVkZXMoa2V5SXRlbSkpIHtcclxuICAgICAgICAgIGRlbGV0ZSBpdGVtW2tleUl0ZW1dO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVSZXN0cmljdGVkRmllbGRzKHJlc3RyaWN0ZWRGaWVsZHM6IEFycmF5PGFueT4sIGZpZWxkczogQXJyYXk8YW55Pikge1xyXG4gICAgcmV0dXJuIGZpZWxkcy5maWx0ZXIoZmllbGQgPT4gIXJlc3RyaWN0ZWRGaWVsZHMuaW5jbHVkZXMoZmllbGQpKTtcclxuICB9XHJcbn1cclxuIl19
@@ -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=