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