@po-ui/ng-sync 6.14.0 → 14.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -22
- package/esm2020/lib/index.mjs +15 -15
- package/esm2020/lib/models/index.mjs +6 -6
- package/esm2020/lib/models/po-data-message.model.mjs +57 -57
- package/esm2020/lib/models/po-data-transform.model.mjs +22 -22
- package/esm2020/lib/models/po-entity/po-entity.model.mjs +214 -214
- package/esm2020/lib/models/po-event-sourcing-error-response.model.mjs +17 -17
- package/esm2020/lib/models/po-network-status.model.mjs +44 -44
- package/esm2020/lib/models/po-network-type.enum.mjs +30 -30
- package/esm2020/lib/models/po-query-builder/po-query-builder.model.mjs +238 -238
- package/esm2020/lib/models/po-request-type.enum.mjs +16 -16
- package/esm2020/lib/po-sync.module.mjs +45 -45
- package/esm2020/lib/services/po-event-sourcing/enums/po-event-sourcing-operation.enum.mjs +17 -17
- package/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 -2
- package/esm2020/lib/services/po-event-sourcing/interfaces/po-event-sourcing-summary-item.interface.mjs +2 -2
- package/esm2020/lib/services/po-event-sourcing/po-event-sourcing.service.mjs +372 -372
- package/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 -2
- package/esm2020/lib/services/po-http-client/interfaces/po-response-api.interface.mjs +2 -2
- package/esm2020/lib/services/po-http-client/po-http-client.service.mjs +148 -148
- package/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 -58
- package/esm2020/lib/services/po-schema/index.mjs +4 -4
- package/esm2020/lib/services/po-schema/po-schema-definition/po-schema-definition.service.mjs +77 -77
- package/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 -174
- package/esm2020/lib/services/po-sync/interfaces/po-sync-config.interface.mjs +2 -2
- package/esm2020/lib/services/po-sync/interfaces/po-sync-field-options.interface.mjs +2 -2
- package/esm2020/lib/services/po-sync/interfaces/po-sync-response.interface.mjs +2 -2
- package/esm2020/lib/services/po-sync/interfaces/po-sync-schema.interface.mjs +2 -2
- package/esm2020/lib/services/po-sync/po-sync.service.mjs +325 -325
- package/esm2020/lib/utils/utils.mjs +63 -63
- package/esm2020/po-ui-ng-sync.mjs +4 -4
- package/esm2020/public-api.mjs +2 -2
- package/fesm2015/po-ui-ng-sync.mjs +2060 -2060
- package/fesm2015/po-ui-ng-sync.mjs.map +1 -1
- package/fesm2020/po-ui-ng-sync.mjs +1965 -1965
- package/fesm2020/po-ui-ng-sync.mjs.map +1 -1
- package/{po-ui-ng-sync.d.ts → index.d.ts} +5 -5
- 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 -12
- 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 -74
- 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 -78
- 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 -36
- 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 -51
- 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 -98
- 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 -162
- package/lib/utils/utils.d.ts +36 -36
- package/package.json +8 -8
- package/po-ui-ng-sync-14.0.0.tgz +0 -0
- package/public-api.d.ts +1 -1
- package/schematics/README.md +169 -169
- package/schematics/collection.json +15 -15
- package/schematics/migrations.json +35 -30
- package/schematics/ng-add/index.d.ts +7 -7
- package/schematics/ng-add/index.js +33 -33
- 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 +16 -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.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/v14/changes.d.ts +2 -0
- package/schematics/ng-update/v14/changes.js +14 -0
- package/schematics/ng-update/v14/changes.js.map +1 -0
- package/schematics/ng-update/v14/index.d.ts +1 -0
- package/schematics/ng-update/v14/index.js +16 -0
- package/schematics/ng-update/v14/index.js.map +1 -0
- 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/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/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/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/v6/changes.d.ts +2 -2
- package/schematics/ng-update/v6/changes.js +13 -13
- package/schematics/ng-update/v6/index.d.ts +1 -1
- package/schematics/ng-update/v6/index.js +15 -15
- package/po-ui-ng-sync-6.14.0.tgz +0 -0
|
@@ -1,174 +1,174 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { PoSchemaUtil } from './po-schema-util/po-schema-util.model';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "./po-schema-definition/po-schema-definition.service";
|
|
5
|
-
import * as i2 from "@po-ui/ng-storage";
|
|
6
|
-
/**
|
|
7
|
-
* @docsPrivate
|
|
8
|
-
*
|
|
9
|
-
* @description
|
|
10
|
-
*
|
|
11
|
-
* Serviço que realiza as operações nos `schemas`.
|
|
12
|
-
*/
|
|
13
|
-
export class PoSchemaService {
|
|
14
|
-
constructor(poSchemaDefinitionService, poStorage) {
|
|
15
|
-
this.poSchemaDefinitionService = poSchemaDefinitionService;
|
|
16
|
-
this.poStorage = poStorage;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Retorna o id a partir de uma chave de um *schema*.
|
|
20
|
-
*
|
|
21
|
-
* @param {string} schemaKey Chave do *schema* em que será realizada a busca do id.
|
|
22
|
-
*/
|
|
23
|
-
static getIdByRecordKey(schemaKey) {
|
|
24
|
-
return schemaKey.split(':')[1];
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Retorna a chave do *schema* informado.
|
|
28
|
-
*
|
|
29
|
-
* @param {string} schemaName Nome do *schema*.
|
|
30
|
-
* @param {any} recordId Id do registro.
|
|
31
|
-
* @param {boolean} isLocalKey Indica se é uma chave local.
|
|
32
|
-
*/
|
|
33
|
-
static getRecordKey(schemaName, recordId, isLocalKey = false) {
|
|
34
|
-
return isLocalKey ? `${schemaName}_local:${recordId}` : `${schemaName}:${recordId}`;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Verifica se o dado informado é uma chave de um *schema*.
|
|
38
|
-
*
|
|
39
|
-
* @param {string} data Dado que será verificado se é uma chave de um *schema*.
|
|
40
|
-
* @param {string} schemaName Nome do *schema*.
|
|
41
|
-
*/
|
|
42
|
-
static isSchemaKey(data, schemaName) {
|
|
43
|
-
return data ? data.startsWith(`${schemaName}:`) : false;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Cria um novo registro para o *schema* informado.
|
|
47
|
-
*
|
|
48
|
-
* @param {PoSyncSchema} schema **Schema* em que será criado o registro.
|
|
49
|
-
* @param {object} newRecord Registro que será criado.
|
|
50
|
-
*/
|
|
51
|
-
async create(schema, newRecord) {
|
|
52
|
-
const id = PoSchemaUtil.getRecordId(newRecord, schema);
|
|
53
|
-
return this.save(schema, newRecord, id);
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Destrói as chaves do *storage* que contém os registros dos *schemas*.
|
|
57
|
-
*
|
|
58
|
-
* @returns {Promise<void>} Promessa que é resolvida quando as chaves referentes aos *schemas* forem destruídas.
|
|
59
|
-
*/
|
|
60
|
-
async destroySchemasRecords() {
|
|
61
|
-
const schemas = await this.poSchemaDefinitionService.getAll();
|
|
62
|
-
const storageKeys = await this.poStorage.keys();
|
|
63
|
-
for (const key of storageKeys) {
|
|
64
|
-
const schemaKey = schemas.find(schema => PoSchemaService.isSchemaKey(key, schema.name));
|
|
65
|
-
if (schemaKey) {
|
|
66
|
-
const id = PoSchemaService.getIdByRecordKey(key);
|
|
67
|
-
await this.remove(schemaKey.name, id);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Retorna o registro referente ao *schema* informado.
|
|
73
|
-
*
|
|
74
|
-
* @param {string} schemaName Nome do *schema*.
|
|
75
|
-
* @param {any} recordId Id do registro.
|
|
76
|
-
*/
|
|
77
|
-
async get(schemaName, recordId) {
|
|
78
|
-
const isLocalRecord = true;
|
|
79
|
-
const localRecord = await this.getRecord(schemaName, recordId, isLocalRecord);
|
|
80
|
-
const record = await this.getRecord(schemaName, recordId);
|
|
81
|
-
return Object.assign(record, localRecord);
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Retorna todos os registros referente ao *schema* informado.
|
|
85
|
-
*
|
|
86
|
-
* @param {string} schemaName Nome do *schema*.
|
|
87
|
-
*/
|
|
88
|
-
async getAll(schemaName) {
|
|
89
|
-
const storageKeys = await this.poStorage.keys();
|
|
90
|
-
const schemaRecords = [];
|
|
91
|
-
for (const key of storageKeys) {
|
|
92
|
-
if (PoSchemaService.isSchemaKey(key, schemaName)) {
|
|
93
|
-
const id = PoSchemaService.getIdByRecordKey(key);
|
|
94
|
-
schemaRecords.push(await this.get(schemaName, id));
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
return schemaRecords;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Aguarda a liberação do recurso limitado, posteriormente o envolve em um comportamento
|
|
101
|
-
* de bloqueio e desbloqueio.
|
|
102
|
-
*
|
|
103
|
-
* @param {Function} limitedResource Função que será envolvida no comportamento de bloqueio e desbloqueio.
|
|
104
|
-
*/
|
|
105
|
-
limitedCallWrap(limitedResource) {
|
|
106
|
-
return this.poStorage.limitedCallWrap(limitedResource);
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Remove um registro de um *schema* informado.
|
|
110
|
-
*
|
|
111
|
-
* @param {string} schemaName Nome do *schema*.
|
|
112
|
-
* @param {any} recordId Id do registro.
|
|
113
|
-
*/
|
|
114
|
-
async remove(schemaName, recordId) {
|
|
115
|
-
const recordKey = PoSchemaService.getRecordKey(schemaName, recordId);
|
|
116
|
-
const localRecordKey = PoSchemaService.getRecordKey(schemaName, recordId, true);
|
|
117
|
-
await this.poStorage.remove(recordKey);
|
|
118
|
-
await this.poStorage.remove(localRecordKey);
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Atualiza um registro de um *schema* informado.
|
|
122
|
-
*
|
|
123
|
-
* @param {PoSyncSchema} schema **Schema* referente ao registro que será alterado.
|
|
124
|
-
* @param {object} record Registro que será atualizado.
|
|
125
|
-
* @param {any} recordId Id do registro que deseja ser alterado. Deve ser utilizado em casos em que o id foi alterado.
|
|
126
|
-
*/
|
|
127
|
-
async update(schema, record, recordId) {
|
|
128
|
-
const id = PoSchemaUtil.getRecordId(record, schema);
|
|
129
|
-
if (recordId) {
|
|
130
|
-
record = await this.updateRecordId(schema.name, record, recordId);
|
|
131
|
-
}
|
|
132
|
-
return this.save(schema, record, id);
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Atualiza todos os registros de um *schema*.
|
|
136
|
-
*
|
|
137
|
-
* @param {PoSyncSchema} schema **Schema* referente aos registros que serão alterados.
|
|
138
|
-
* @param {Array<object>} records Lista de registros que serão alterados.
|
|
139
|
-
*/
|
|
140
|
-
async updateAll(schema, records) {
|
|
141
|
-
for (const record of records) {
|
|
142
|
-
await this.update(schema, record);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
async getRecord(schemaName, recordId, isLocalRecord = false) {
|
|
146
|
-
return (await this.poStorage.get(PoSchemaService.getRecordKey(schemaName, recordId, isLocalRecord))) || {};
|
|
147
|
-
}
|
|
148
|
-
async save(schema, record, recordId) {
|
|
149
|
-
const { serverRecord, localRecord } = PoSchemaUtil.separateSchemaFields(schema, record);
|
|
150
|
-
const recordKey = PoSchemaService.getRecordKey(schema.name, recordId);
|
|
151
|
-
await this.poStorage.set(recordKey, serverRecord);
|
|
152
|
-
await this.saveLocalFields(schema.name, localRecord, recordId);
|
|
153
|
-
return record;
|
|
154
|
-
}
|
|
155
|
-
async saveLocalFields(schemaName, localFields, recordId) {
|
|
156
|
-
const containsLocalFields = Object.keys(localFields).length;
|
|
157
|
-
if (containsLocalFields) {
|
|
158
|
-
const localRecordKey = PoSchemaService.getRecordKey(schemaName, recordId, true);
|
|
159
|
-
await this.poStorage.set(localRecordKey, localFields);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
async updateRecordId(schemaName, record, recordId) {
|
|
163
|
-
const isLocalRecord = true;
|
|
164
|
-
const localRecord = await this.getRecord(schemaName, recordId, isLocalRecord);
|
|
165
|
-
await this.remove(schemaName, recordId);
|
|
166
|
-
return Object.assign(record, localRecord);
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
PoSchemaService.ɵfac = function PoSchemaService_Factory(t) { return new (t || PoSchemaService)(i0.ɵɵinject(i1.PoSchemaDefinitionService), i0.ɵɵinject(i2.PoStorageService)); };
|
|
170
|
-
PoSchemaService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: PoSchemaService, factory: PoSchemaService.ɵfac });
|
|
171
|
-
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoSchemaService, [{
|
|
172
|
-
type: Injectable
|
|
173
|
-
}], function () { return [{ type: i1.PoSchemaDefinitionService }, { type: i2.PoStorageService }]; }, null); })();
|
|
174
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tc2NoZW1hLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zeW5jL3NyYy9saWIvc2VydmljZXMvcG8tc2NoZW1hL3BvLXNjaGVtYS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFLM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7O0FBR3JFOzs7Ozs7R0FNRztBQUVILE1BQU0sT0FBTyxlQUFlO0lBQzFCLFlBQW9CLHlCQUFvRCxFQUFVLFNBQTJCO1FBQXpGLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMkI7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFrQjtJQUFHLENBQUM7SUFFakg7Ozs7T0FJRztJQUNLLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFpQjtRQUMvQyxPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBa0IsRUFBRSxRQUFhLEVBQUUsYUFBc0IsS0FBSztRQUN4RixPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLFVBQVUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxJQUFJLFFBQVEsRUFBRSxDQUFDO0lBQ3RGLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBWSxFQUFFLFVBQWtCO1FBQ3pELE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzFELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMs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QVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2xELE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUUvRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU8sS0FBSyxDQUFDLGVBQWUsQ0FBQyxVQUFrQixFQUFFLFdBQW1CLEVBQUUsUUFBUTtRQUM3RSxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBRTVELElBQUksbUJBQW1CLEVBQUU7WUFDdkIsTUFBTSxjQUFjLEdBQUcsZUFBZSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2hGLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ3ZEO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRO1FBQ3ZELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQztRQUUzQixNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM5RSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRXhDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDNUMsQ0FBQzs7OEVBbkxVLGVBQWU7cUVBQWYsZUFBZSxXQUFmLGVBQWU7dUZBQWYsZUFBZTtjQUQzQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBQb1N0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnQHBvLXVpL25nLXN0b3JhZ2UnO1xuXG5pbXBvcnQgeyBQb1NjaGVtYURlZmluaXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9wby1zY2hlbWEtZGVmaW5pdGlvbi9wby1zY2hlbWEtZGVmaW5pdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFBvU2NoZW1hVXRpbCB9IGZyb20gJy4vcG8tc2NoZW1hLXV0aWwvcG8tc2NoZW1hLXV0aWwubW9kZWwnO1xuaW1wb3J0IHsgUG9TeW5jU2NoZW1hIH0gZnJvbSAnLi4vcG8tc3luYy9pbnRlcmZhY2VzL3BvLXN5bmMtc2NoZW1hLmludGVyZmFjZSc7XG5cbi8qKlxuICogQGRvY3NQcml2YXRlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogU2VydmnDp28gcXVlIHJlYWxpemEgYXMgb3BlcmHDp8O1ZXMgbm9zIGBzY2hlbWFzYC5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFBvU2NoZW1hU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcG9TY2hlbWFEZWZpbml0aW9uU2VydmljZTogUG9TY2hlbWFEZWZpbml0aW9uU2VydmljZSwgcHJpdmF0ZSBwb1N0b3JhZ2U6IFBvU3RvcmFnZVNlcnZpY2UpIHt9XG5cbiAgLyoqXG4gICAqIFJldG9ybmEgbyBpZCBhIHBhcnRpciBkZSB1bWEgY2hhdmUgZGUgdW0gKnNjaGVtYSouXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY2hlbWFLZXkgQ2hhdmUgZG8gKnNjaGVtYSogZW0gcXVlIHNlcsOhIHJlYWxpemFkYSBhIGJ1c2NhIGRvIGlkLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0SWRCeVJlY29yZEtleShzY2hlbWFLZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHNjaGVtYUtleS5zcGxpdCgnOicpWzFdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldG9ybmEgYSBjaGF2ZSBkbyAqc2NoZW1hKiBpbmZvcm1hZG8uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY2hlbWFOYW1lIE5vbWUgZG8gKnNjaGVtYSouXG4gICAqIEBwYXJhbSB7YW55fSByZWNvcmRJZCBJZCBkbyByZWdpc3Ryby5cbiAgICogQHBhcmFtIHtib29sZWFufSBpc0xvY2FsS2V5IEluZGljYSBzZSDDqSB1bWEgY2hhdmUgbG9jYWwuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBnZXRSZWNvcmRLZXkoc2NoZW1hTmFtZTogc3RyaW5nLCByZWNvcmRJZDogYW55LCBpc0xvY2FsS2V5OiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIHJldHVybiBpc0xvY2FsS2V5ID8gYCR7c2NoZW1hTmFtZX1fbG9jYWw6JHtyZWNvcmRJZH1gIDogYCR7c2NoZW1hTmFtZX06JHtyZWNvcmRJZH1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNlIG8gZGFkbyBpbmZvcm1hZG8gw6kgdW1hIGNoYXZlIGRlIHVtICpzY2hlbWEqLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YSBEYWRvIHF1ZSBzZXLDoSB2ZXJpZmljYWRvIHNlIMOpIHVtYSBjaGF2ZSBkZSB1bSAqc2NoZW1hKi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjaGVtYU5hbWUgTm9tZSBkbyAqc2NoZW1hKi5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGlzU2NoZW1hS2V5KGRhdGE6IHN0cmluZywgc2NoZW1hTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGRhdGEgPyBkYXRhLnN0YXJ0c1dpdGgoYCR7c2NoZW1hTmFtZX06YCkgOiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmlhIHVtIG5vdm8gcmVnaXN0cm8gcGFyYSBvICpzY2hlbWEqIGluZm9ybWFkby5cbiAgICpcbiAgICogQHBhcmFtIHtQb1N5bmNTY2hlbWF9IHNjaGVtYSAqKlNjaGVtYSogZW0gcXVlIHNlcsOhIGNyaWFkbyBvIHJlZ2lzdHJvLlxuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3UmVjb3JkIFJlZ2lzdHJvIHF1ZSBzZXLDoSBjcmlhZG8uXG4gICAqL1xuICBhc3luYyBjcmVhdGUoc2NoZW1hOiBQb1N5bmNTY2hlbWEsIG5ld1JlY29yZDogb2JqZWN0KTogUHJvbWlzZTxvYmplY3Q+IHtcbiAgICBjb25zdCBpZCA9IFBvU2NoZW1hVXRpbC5nZXRSZWNvcmRJZChuZXdSZWNvcmQsIHNjaGVtYSk7XG4gICAgcmV0dXJuIHRoaXMuc2F2ZShzY2hlbWEsIG5ld1JlY29yZCwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryw7NpIGFzIGNoYXZlcyBkbyAqc3RvcmFnZSogcXVlIGNvbnTDqW0gb3MgcmVnaXN0cm9zIGRvcyAqc2NoZW1hcyouXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSBQcm9tZXNzYSBxdWUgw6kgcmVzb2x2aWRhIHF1YW5kbyBhcyBjaGF2ZXMgcmVmZXJlbnRlcyBhb3MgKnNjaGVtYXMqIGZvcmVtIGRlc3RydcOtZGFzLlxuICAgKi9cbiAgYXN5bmMgZGVzdHJveVNjaGVtYXNSZWNvcmRzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNjaGVtYXMgPSBhd2FpdCB0aGlzLnBvU2NoZW1hRGVmaW5pdGlvblNlcnZpY2UuZ2V0QWxsKCk7XG4gICAgY29uc3Qgc3RvcmFnZUtleXMgPSBhd2FpdCB0aGlzLnBvU3RvcmFnZS5rZXlzKCk7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBzdG9yYWdlS2V5cykge1xuICAgICAgY29uc3Qgc2NoZW1hS2V5ID0gc2NoZW1hcy5maW5kKHNjaGVtYSA9PiBQb1NjaGVtYVNlcnZpY2UuaXNTY2hlbWFLZXkoa2V5LCBzY2hlbWEubmFtZSkpO1xuXG4gICAgICBpZiAoc2NoZW1hS2V5KSB7XG4gICAgICAgIGNvbnN0IGlkID0gUG9TY2hlbWFTZXJ2aWNlLmdldElkQnlSZWNvcmRLZXkoa2V5KTtcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmUoc2NoZW1hS2V5Lm5hbWUsIGlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0b3JuYSBvIHJlZ2lzdHJvIHJlZmVyZW50ZSBhbyAqc2NoZW1hKiBpbmZvcm1hZG8uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY2hlbWFOYW1lIE5vbWUgZG8gKnNjaGVtYSouXG4gICAqIEBwYXJhbSB7YW55fSByZWNvcmRJZCBJZCBkbyByZWdpc3Ryby5cbiAgICovXG4gIGFzeW5jIGdldChzY2hlbWFOYW1lOiBzdHJpbmcsIHJlY29yZElkOiBhbnkpOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIGNvbnN0IGlzTG9jYWxSZWNvcmQgPSB0cnVlO1xuICAgIGNvbnN0IGxvY2FsUmVjb3JkID0gYXdhaXQgdGhpcy5nZXRSZWNvcmQoc2NoZW1hTmFtZSwgcmVjb3JkSWQsIGlzTG9jYWxSZWNvcmQpO1xuICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IHRoaXMuZ2V0UmVjb3JkKHNjaGVtYU5hbWUsIHJlY29yZElkKTtcblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHJlY29yZCwgbG9jYWxSZWNvcmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldG9ybmEgdG9kb3Mgb3MgcmVnaXN0cm9zIHJlZmVyZW50ZSBhbyAqc2NoZW1hKiBpbmZvcm1hZG8uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY2hlbWFOYW1lIE5vbWUgZG8gKnNjaGVtYSouXG4gICAqL1xuICBhc3luYyBnZXRBbGwoc2NoZW1hTmFtZTogc3RyaW5nKTogUHJvbWlzZTxBcnJheTxvYmplY3Q+PiB7XG4gICAgY29uc3Qgc3RvcmFnZUtleXMgPSBhd2FpdCB0aGlzLnBvU3RvcmFnZS5rZXlzKCk7XG4gICAgY29uc3Qgc2NoZW1hUmVjb3JkcyA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2Ygc3RvcmFnZUtleXMpIHtcbiAgICAgIGlmIChQb1NjaGVtYVNlcnZpY2UuaXNTY2hlbWFLZXkoa2V5LCBzY2hlbWFOYW1lKSkge1xuICAgICAgICBjb25zdCBpZCA9IFBvU2NoZW1hU2VydmljZS5nZXRJZEJ5UmVjb3JkS2V5KGtleSk7XG4gICAgICAgIHNjaGVtYVJlY29yZHMucHVzaChhd2FpdCB0aGlzLmdldChzY2hlbWFOYW1lLCBpZCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzY2hlbWFSZWNvcmRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFndWFyZGEgYSBsaWJlcmHDp8OjbyBkbyByZWN1cnNvIGxpbWl0YWRvLCBwb3N0ZXJpb3JtZW50ZSBvIGVudm9sdmUgZW0gdW0gY29tcG9ydGFtZW50b1xuICAgKiBkZSBibG9xdWVpbyBlIGRlc2Jsb3F1ZWlvLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaW1pdGVkUmVzb3VyY2UgRnVuw6fDo28gcXVlIHNlcsOhIGVudm9sdmlkYSBubyBjb21wb3J0YW1lbnRvIGRlIGJsb3F1ZWlvIGUgZGVzYmxvcXVlaW8uXG4gICAqL1xuICBsaW1pdGVkQ2FsbFdyYXAobGltaXRlZFJlc291cmNlOiBGdW5jdGlvbik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucG9TdG9yYWdlLmxpbWl0ZWRDYWxsV3JhcChsaW1pdGVkUmVzb3VyY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB1bSByZWdpc3RybyBkZSB1bSAqc2NoZW1hKiBpbmZvcm1hZG8uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY2hlbWFOYW1lIE5vbWUgZG8gKnNjaGVtYSouXG4gICAqIEBwYXJhbSB7YW55fSByZWNvcmRJZCBJZCBkbyByZWdpc3Ryby5cbiAgICovXG4gIGFzeW5jIHJlbW92ZShzY2hlbWFOYW1lOiBzdHJpbmcsIHJlY29yZElkOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHJlY29yZEtleSA9IFBvU2NoZW1hU2VydmljZS5nZXRSZWNvcmRLZXkoc2NoZW1hTmFtZSwgcmVjb3JkSWQpO1xuICAgIGNvbnN0IGxvY2FsUmVjb3JkS2V5ID0gUG9TY2hlbWFTZXJ2aWNlLmdldFJlY29yZEtleShzY2hlbWFOYW1lLCByZWNvcmRJZCwgdHJ1ZSk7XG5cbiAgICBhd2FpdCB0aGlzLnBvU3RvcmFnZS5yZW1vdmUocmVjb3JkS2V5KTtcbiAgICBhd2FpdCB0aGlzLnBvU3RvcmFnZS5yZW1vdmUobG9jYWxSZWNvcmRLZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dWFsaXphIHVtIHJlZ2lzdHJvIGRlIHVtICpzY2hlbWEqIGluZm9ybWFkby5cbiAgICpcbiAgICogQHBhcmFtIHtQb1N5bmNTY2hlbWF9IHNjaGVtYSAqKlNjaGVtYSogcmVmZXJlbnRlIGFvIHJlZ2lzdHJvIHF1ZSBzZXLDoSBhbHRlcmFkby5cbiAgICogQHBhcmFtIHtvYmplY3R9IHJlY29yZCBSZWdpc3RybyBxdWUgc2Vyw6EgYXR1YWxpemFkby5cbiAgICogQHBhcmFtIHthbnl9IHJlY29yZElkIElkIGRvIHJlZ2lzdHJvIHF1ZSBkZXNlamEgc2VyIGFsdGVyYWRvLiBEZXZlIHNlciB1dGlsaXphZG8gZW0gY2Fzb3MgZW0gcXVlIG8gaWQgZm9pIGFsdGVyYWRvLlxuICAgKi9cbiAgYXN5bmMgdXBkYXRlKHNjaGVtYTogUG9TeW5jU2NoZW1hLCByZWNvcmQ6IG9iamVjdCwgcmVjb3JkSWQ/OiBhbnkpOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIGNvbnN0IGlkID0gUG9TY2hlbWFVdGlsLmdldFJlY29yZElkKHJlY29yZCwgc2NoZW1hKTtcblxuICAgIGlmIChyZWNvcmRJZCkge1xuICAgICAgcmVjb3JkID0gYXdhaXQgdGhpcy51cGRhdGVSZWNvcmRJZChzY2hlbWEubmFtZSwgcmVjb3JkLCByZWNvcmRJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2F2ZShzY2hlbWEsIHJlY29yZCwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dWFsaXphIHRvZG9zIG9zIHJlZ2lzdHJvcyBkZSB1bSAqc2NoZW1hKi5cbiAgICpcbiAgICogQHBhcmFtIHtQb1N5bmNTY2hlbWF9IHNjaGVtYSAqKlNjaGVtYSogcmVmZXJlbnRlIGFvcyByZWdpc3Ryb3MgcXVlIHNlcsOjbyBhbHRlcmFkb3MuXG4gICAqIEBwYXJhbSB7QXJyYXk8b2JqZWN0Pn0gcmVjb3JkcyBMaXN0YSBkZSByZWdpc3Ryb3MgcXVlIHNlcsOjbyBhbHRlcmFkb3MuXG4gICAqL1xuICBhc3luYyB1cGRhdGVBbGwoc2NoZW1hOiBQb1N5bmNTY2hlbWEsIHJlY29yZHM6IEFycmF5PG9iamVjdD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNvcmRzKSB7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZShzY2hlbWEsIHJlY29yZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRSZWNvcmQoc2NoZW1hTmFtZSwgcmVjb3JkSWQsIGlzTG9jYWxSZWNvcmQgPSBmYWxzZSk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLnBvU3RvcmFnZS5nZXQoUG9TY2hlbWFTZXJ2aWNlLmdldFJlY29yZEtleShzY2hlbWFOYW1lLCByZWNvcmRJZCwgaXNMb2NhbFJlY29yZCkpKSB8fCB7fTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2F2ZShzY2hlbWE6IFBvU3luY1NjaGVtYSwgcmVjb3JkOiBvYmplY3QsIHJlY29yZElkOiBhbnkpIHtcbiAgICBjb25zdCB7IHNlcnZlclJlY29yZCwgbG9jYWxSZWNvcmQgfSA9IFBvU2NoZW1hVXRpbC5zZXBhcmF0ZVNjaGVtYUZpZWxkcyhzY2hlbWEsIHJlY29yZCk7XG4gICAgY29uc3QgcmVjb3JkS2V5ID0gUG9TY2hlbWFTZXJ2aWNlLmdldFJlY29yZEtleShzY2hlbWEubmFtZSwgcmVjb3JkSWQpO1xuXG4gICAgYXdhaXQgdGhpcy5wb1N0b3JhZ2Uuc2V0KHJlY29yZEtleSwgc2VydmVyUmVjb3JkKTtcbiAgICBhd2FpdCB0aGlzLnNhdmVMb2NhbEZpZWxkcyhzY2hlbWEubmFtZSwgbG9jYWxSZWNvcmQsIHJlY29yZElkKTtcblxuICAgIHJldHVybiByZWNvcmQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNhdmVMb2NhbEZpZWxkcyhzY2hlbWFOYW1lOiBzdHJpbmcsIGxvY2FsRmllbGRzOiBvYmplY3QsIHJlY29yZElkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY29udGFpbnNMb2NhbEZpZWxkcyA9IE9iamVjdC5rZXlzKGxvY2FsRmllbGRzKS5sZW5ndGg7XG5cbiAgICBpZiAoY29udGFpbnNMb2NhbEZpZWxkcykge1xuICAgICAgY29uc3QgbG9jYWxSZWNvcmRLZXkgPSBQb1NjaGVtYVNlcnZpY2UuZ2V0UmVjb3JkS2V5KHNjaGVtYU5hbWUsIHJlY29yZElkLCB0cnVlKTtcbiAgICAgIGF3YWl0IHRoaXMucG9TdG9yYWdlLnNldChsb2NhbFJlY29yZEtleSwgbG9jYWxGaWVsZHMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlUmVjb3JkSWQoc2NoZW1hTmFtZSwgcmVjb3JkLCByZWNvcmRJZCkge1xuICAgIGNvbnN0IGlzTG9jYWxSZWNvcmQgPSB0cnVlO1xuXG4gICAgY29uc3QgbG9jYWxSZWNvcmQgPSBhd2FpdCB0aGlzLmdldFJlY29yZChzY2hlbWFOYW1lLCByZWNvcmRJZCwgaXNMb2NhbFJlY29yZCk7XG4gICAgYXdhaXQgdGhpcy5yZW1vdmUoc2NoZW1hTmFtZSwgcmVjb3JkSWQpO1xuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ocmVjb3JkLCBsb2NhbFJlY29yZCk7XG4gIH1cbn1cbiJdfQ==
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { PoSchemaUtil } from './po-schema-util/po-schema-util.model';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "./po-schema-definition/po-schema-definition.service";
|
|
5
|
+
import * as i2 from "@po-ui/ng-storage";
|
|
6
|
+
/**
|
|
7
|
+
* @docsPrivate
|
|
8
|
+
*
|
|
9
|
+
* @description
|
|
10
|
+
*
|
|
11
|
+
* Serviço que realiza as operações nos `schemas`.
|
|
12
|
+
*/
|
|
13
|
+
export class PoSchemaService {
|
|
14
|
+
constructor(poSchemaDefinitionService, poStorage) {
|
|
15
|
+
this.poSchemaDefinitionService = poSchemaDefinitionService;
|
|
16
|
+
this.poStorage = poStorage;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Retorna o id a partir de uma chave de um *schema*.
|
|
20
|
+
*
|
|
21
|
+
* @param {string} schemaKey Chave do *schema* em que será realizada a busca do id.
|
|
22
|
+
*/
|
|
23
|
+
static getIdByRecordKey(schemaKey) {
|
|
24
|
+
return schemaKey.split(':')[1];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Retorna a chave do *schema* informado.
|
|
28
|
+
*
|
|
29
|
+
* @param {string} schemaName Nome do *schema*.
|
|
30
|
+
* @param {any} recordId Id do registro.
|
|
31
|
+
* @param {boolean} isLocalKey Indica se é uma chave local.
|
|
32
|
+
*/
|
|
33
|
+
static getRecordKey(schemaName, recordId, isLocalKey = false) {
|
|
34
|
+
return isLocalKey ? `${schemaName}_local:${recordId}` : `${schemaName}:${recordId}`;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Verifica se o dado informado é uma chave de um *schema*.
|
|
38
|
+
*
|
|
39
|
+
* @param {string} data Dado que será verificado se é uma chave de um *schema*.
|
|
40
|
+
* @param {string} schemaName Nome do *schema*.
|
|
41
|
+
*/
|
|
42
|
+
static isSchemaKey(data, schemaName) {
|
|
43
|
+
return data ? data.startsWith(`${schemaName}:`) : false;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Cria um novo registro para o *schema* informado.
|
|
47
|
+
*
|
|
48
|
+
* @param {PoSyncSchema} schema **Schema* em que será criado o registro.
|
|
49
|
+
* @param {object} newRecord Registro que será criado.
|
|
50
|
+
*/
|
|
51
|
+
async create(schema, newRecord) {
|
|
52
|
+
const id = PoSchemaUtil.getRecordId(newRecord, schema);
|
|
53
|
+
return this.save(schema, newRecord, id);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Destrói as chaves do *storage* que contém os registros dos *schemas*.
|
|
57
|
+
*
|
|
58
|
+
* @returns {Promise<void>} Promessa que é resolvida quando as chaves referentes aos *schemas* forem destruídas.
|
|
59
|
+
*/
|
|
60
|
+
async destroySchemasRecords() {
|
|
61
|
+
const schemas = await this.poSchemaDefinitionService.getAll();
|
|
62
|
+
const storageKeys = await this.poStorage.keys();
|
|
63
|
+
for (const key of storageKeys) {
|
|
64
|
+
const schemaKey = schemas.find(schema => PoSchemaService.isSchemaKey(key, schema.name));
|
|
65
|
+
if (schemaKey) {
|
|
66
|
+
const id = PoSchemaService.getIdByRecordKey(key);
|
|
67
|
+
await this.remove(schemaKey.name, id);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Retorna o registro referente ao *schema* informado.
|
|
73
|
+
*
|
|
74
|
+
* @param {string} schemaName Nome do *schema*.
|
|
75
|
+
* @param {any} recordId Id do registro.
|
|
76
|
+
*/
|
|
77
|
+
async get(schemaName, recordId) {
|
|
78
|
+
const isLocalRecord = true;
|
|
79
|
+
const localRecord = await this.getRecord(schemaName, recordId, isLocalRecord);
|
|
80
|
+
const record = await this.getRecord(schemaName, recordId);
|
|
81
|
+
return Object.assign(record, localRecord);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Retorna todos os registros referente ao *schema* informado.
|
|
85
|
+
*
|
|
86
|
+
* @param {string} schemaName Nome do *schema*.
|
|
87
|
+
*/
|
|
88
|
+
async getAll(schemaName) {
|
|
89
|
+
const storageKeys = await this.poStorage.keys();
|
|
90
|
+
const schemaRecords = [];
|
|
91
|
+
for (const key of storageKeys) {
|
|
92
|
+
if (PoSchemaService.isSchemaKey(key, schemaName)) {
|
|
93
|
+
const id = PoSchemaService.getIdByRecordKey(key);
|
|
94
|
+
schemaRecords.push(await this.get(schemaName, id));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return schemaRecords;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Aguarda a liberação do recurso limitado, posteriormente o envolve em um comportamento
|
|
101
|
+
* de bloqueio e desbloqueio.
|
|
102
|
+
*
|
|
103
|
+
* @param {Function} limitedResource Função que será envolvida no comportamento de bloqueio e desbloqueio.
|
|
104
|
+
*/
|
|
105
|
+
limitedCallWrap(limitedResource) {
|
|
106
|
+
return this.poStorage.limitedCallWrap(limitedResource);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Remove um registro de um *schema* informado.
|
|
110
|
+
*
|
|
111
|
+
* @param {string} schemaName Nome do *schema*.
|
|
112
|
+
* @param {any} recordId Id do registro.
|
|
113
|
+
*/
|
|
114
|
+
async remove(schemaName, recordId) {
|
|
115
|
+
const recordKey = PoSchemaService.getRecordKey(schemaName, recordId);
|
|
116
|
+
const localRecordKey = PoSchemaService.getRecordKey(schemaName, recordId, true);
|
|
117
|
+
await this.poStorage.remove(recordKey);
|
|
118
|
+
await this.poStorage.remove(localRecordKey);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Atualiza um registro de um *schema* informado.
|
|
122
|
+
*
|
|
123
|
+
* @param {PoSyncSchema} schema **Schema* referente ao registro que será alterado.
|
|
124
|
+
* @param {object} record Registro que será atualizado.
|
|
125
|
+
* @param {any} recordId Id do registro que deseja ser alterado. Deve ser utilizado em casos em que o id foi alterado.
|
|
126
|
+
*/
|
|
127
|
+
async update(schema, record, recordId) {
|
|
128
|
+
const id = PoSchemaUtil.getRecordId(record, schema);
|
|
129
|
+
if (recordId) {
|
|
130
|
+
record = await this.updateRecordId(schema.name, record, recordId);
|
|
131
|
+
}
|
|
132
|
+
return this.save(schema, record, id);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Atualiza todos os registros de um *schema*.
|
|
136
|
+
*
|
|
137
|
+
* @param {PoSyncSchema} schema **Schema* referente aos registros que serão alterados.
|
|
138
|
+
* @param {Array<object>} records Lista de registros que serão alterados.
|
|
139
|
+
*/
|
|
140
|
+
async updateAll(schema, records) {
|
|
141
|
+
for (const record of records) {
|
|
142
|
+
await this.update(schema, record);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
async getRecord(schemaName, recordId, isLocalRecord = false) {
|
|
146
|
+
return (await this.poStorage.get(PoSchemaService.getRecordKey(schemaName, recordId, isLocalRecord))) || {};
|
|
147
|
+
}
|
|
148
|
+
async save(schema, record, recordId) {
|
|
149
|
+
const { serverRecord, localRecord } = PoSchemaUtil.separateSchemaFields(schema, record);
|
|
150
|
+
const recordKey = PoSchemaService.getRecordKey(schema.name, recordId);
|
|
151
|
+
await this.poStorage.set(recordKey, serverRecord);
|
|
152
|
+
await this.saveLocalFields(schema.name, localRecord, recordId);
|
|
153
|
+
return record;
|
|
154
|
+
}
|
|
155
|
+
async saveLocalFields(schemaName, localFields, recordId) {
|
|
156
|
+
const containsLocalFields = Object.keys(localFields).length;
|
|
157
|
+
if (containsLocalFields) {
|
|
158
|
+
const localRecordKey = PoSchemaService.getRecordKey(schemaName, recordId, true);
|
|
159
|
+
await this.poStorage.set(localRecordKey, localFields);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
async updateRecordId(schemaName, record, recordId) {
|
|
163
|
+
const isLocalRecord = true;
|
|
164
|
+
const localRecord = await this.getRecord(schemaName, recordId, isLocalRecord);
|
|
165
|
+
await this.remove(schemaName, recordId);
|
|
166
|
+
return Object.assign(record, localRecord);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
PoSchemaService.ɵfac = function PoSchemaService_Factory(t) { return new (t || PoSchemaService)(i0.ɵɵinject(i1.PoSchemaDefinitionService), i0.ɵɵinject(i2.PoStorageService)); };
|
|
170
|
+
PoSchemaService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: PoSchemaService, factory: PoSchemaService.ɵfac });
|
|
171
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoSchemaService, [{
|
|
172
|
+
type: Injectable
|
|
173
|
+
}], function () { return [{ type: i1.PoSchemaDefinitionService }, { type: i2.PoStorageService }]; }, null); })();
|
|
174
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tc2NoZW1hLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zeW5jL3NyYy9saWIvc2VydmljZXMvcG8tc2NoZW1hL3BvLXNjaGVtYS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFLM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7O0FBR3JFOzs7Ozs7R0FNRztBQUVILE1BQU0sT0FBTyxlQUFlO0lBQzFCLFlBQW9CLHlCQUFvRCxFQUFVLFNBQTJCO1FBQXpGLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMkI7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFrQjtJQUFHLENBQUM7SUFFakg7Ozs7T0FJRztJQUNLLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFpQjtRQUMvQyxPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBa0IsRUFBRSxRQUFhLEVBQUUsYUFBc0IsS0FBSztRQUN4RixPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLFVBQVUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxJQUFJLFFBQVEsRUFBRSxDQUFDO0lBQ3RGLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBWSxFQUFFLFVBQWtCO1FBQ3pELE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzFELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMs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QVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2xELE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUUvRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU8sS0FBSyxDQUFDLGVBQWUsQ0FBQyxVQUFrQixFQUFFLFdBQW1CLEVBQUUsUUFBUTtRQUM3RSxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBRTVELElBQUksbUJBQW1CLEVBQUU7WUFDdkIsTUFBTSxjQUFjLEdBQUcsZUFBZSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2hGLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ3ZEO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRO1FBQ3ZELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQztRQUUzQixNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM5RSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRXhDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDNUMsQ0FBQzs7OEVBbkxVLGVBQWU7cUVBQWYsZUFBZSxXQUFmLGVBQWU7dUZBQWYsZUFBZTtjQUQzQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgUG9TdG9yYWdlU2VydmljZSB9IGZyb20gJ0Bwby11aS9uZy1zdG9yYWdlJztcclxuXHJcbmltcG9ydCB7IFBvU2NoZW1hRGVmaW5pdGlvblNlcnZpY2UgfSBmcm9tICcuL3BvLXNjaGVtYS1kZWZpbml0aW9uL3BvLXNjaGVtYS1kZWZpbml0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQb1NjaGVtYVV0aWwgfSBmcm9tICcuL3BvLXNjaGVtYS11dGlsL3BvLXNjaGVtYS11dGlsLm1vZGVsJztcclxuaW1wb3J0IHsgUG9TeW5jU2NoZW1hIH0gZnJvbSAnLi4vcG8tc3luYy9pbnRlcmZhY2VzL3BvLXN5bmMtc2NoZW1hLmludGVyZmFjZSc7XHJcblxyXG4vKipcclxuICogQGRvY3NQcml2YXRlXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKlxyXG4gKiBTZXJ2acOnbyBxdWUgcmVhbGl6YSBhcyBvcGVyYcOnw7VlcyBub3MgYHNjaGVtYXNgLlxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgUG9TY2hlbWFTZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBvU2NoZW1hRGVmaW5pdGlvblNlcnZpY2U6IFBvU2NoZW1hRGVmaW5pdGlvblNlcnZpY2UsIHByaXZhdGUgcG9TdG9yYWdlOiBQb1N0b3JhZ2VTZXJ2aWNlKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBSZXRvcm5hIG8gaWQgYSBwYXJ0aXIgZGUgdW1hIGNoYXZlIGRlIHVtICpzY2hlbWEqLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjaGVtYUtleSBDaGF2ZSBkbyAqc2NoZW1hKiBlbSBxdWUgc2Vyw6EgcmVhbGl6YWRhIGEgYnVzY2EgZG8gaWQuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0SWRCeVJlY29yZEtleShzY2hlbWFLZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc2NoZW1hS2V5LnNwbGl0KCc6JylbMV07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRvcm5hIGEgY2hhdmUgZG8gKnNjaGVtYSogaW5mb3JtYWRvLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjaGVtYU5hbWUgTm9tZSBkbyAqc2NoZW1hKi5cclxuICAgKiBAcGFyYW0ge2FueX0gcmVjb3JkSWQgSWQgZG8gcmVnaXN0cm8uXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBpc0xvY2FsS2V5IEluZGljYSBzZSDDqSB1bWEgY2hhdmUgbG9jYWwuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0UmVjb3JkS2V5KHNjaGVtYU5hbWU6IHN0cmluZywgcmVjb3JkSWQ6IGFueSwgaXNMb2NhbEtleTogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBpc0xvY2FsS2V5ID8gYCR7c2NoZW1hTmFtZX1fbG9jYWw6JHtyZWNvcmRJZH1gIDogYCR7c2NoZW1hTmFtZX06JHtyZWNvcmRJZH1gO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmVyaWZpY2Egc2UgbyBkYWRvIGluZm9ybWFkbyDDqSB1bWEgY2hhdmUgZGUgdW0gKnNjaGVtYSouXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YSBEYWRvIHF1ZSBzZXLDoSB2ZXJpZmljYWRvIHNlIMOpIHVtYSBjaGF2ZSBkZSB1bSAqc2NoZW1hKi5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NoZW1hTmFtZSBOb21lIGRvICpzY2hlbWEqLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgc3RhdGljIGlzU2NoZW1hS2V5KGRhdGE6IHN0cmluZywgc2NoZW1hTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZGF0YSA/IGRhdGEuc3RhcnRzV2l0aChgJHtzY2hlbWFOYW1lfTpgKSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JpYSB1bSBub3ZvIHJlZ2lzdHJvIHBhcmEgbyAqc2NoZW1hKiBpbmZvcm1hZG8uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1BvU3luY1NjaGVtYX0gc2NoZW1hICoqU2NoZW1hKiBlbSBxdWUgc2Vyw6EgY3JpYWRvIG8gcmVnaXN0cm8uXHJcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld1JlY29yZCBSZWdpc3RybyBxdWUgc2Vyw6EgY3JpYWRvLlxyXG4gICAqL1xyXG4gIGFzeW5jIGNyZWF0ZShzY2hlbWE6IFBvU3luY1NjaGVtYSwgbmV3UmVjb3JkOiBvYmplY3QpOiBQcm9taXNlPG9iamVjdD4ge1xyXG4gICAgY29uc3QgaWQgPSBQb1NjaGVtYVV0aWwuZ2V0UmVjb3JkSWQobmV3UmVjb3JkLCBzY2hlbWEpO1xyXG4gICAgcmV0dXJuIHRoaXMuc2F2ZShzY2hlbWEsIG5ld1JlY29yZCwgaWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVzdHLDs2kgYXMgY2hhdmVzIGRvICpzdG9yYWdlKiBxdWUgY29udMOpbSBvcyByZWdpc3Ryb3MgZG9zICpzY2hlbWFzKi5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSBQcm9tZXNzYSBxdWUgw6kgcmVzb2x2aWRhIHF1YW5kbyBhcyBjaGF2ZXMgcmVmZXJlbnRlcyBhb3MgKnNjaGVtYXMqIGZvcmVtIGRlc3RydcOtZGFzLlxyXG4gICAqL1xyXG4gIGFzeW5jIGRlc3Ryb3lTY2hlbWFzUmVjb3JkcygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHNjaGVtYXMgPSBhd2FpdCB0aGlzLnBvU2NoZW1hRGVmaW5pdGlvblNlcnZpY2UuZ2V0QWxsKCk7XHJcbiAgICBjb25zdCBzdG9yYWdlS2V5cyA9IGF3YWl0IHRoaXMucG9TdG9yYWdlLmtleXMoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBzdG9yYWdlS2V5cykge1xyXG4gICAgICBjb25zdCBzY2hlbWFLZXkgPSBzY2hlbWFzLmZpbmQoc2NoZW1hID0+IFBvU2NoZW1hU2VydmljZS5pc1NjaGVtYUtleShrZXksIHNjaGVtYS5uYW1lKSk7XHJcblxyXG4gICAgICBpZiAoc2NoZW1hS2V5KSB7XHJcbiAgICAgICAgY29uc3QgaWQgPSBQb1NjaGVtYVNlcnZpY2UuZ2V0SWRCeVJlY29yZEtleShrZXkpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlKHNjaGVtYUtleS5uYW1lLCBpZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldG9ybmEgbyByZWdpc3RybyByZWZlcmVudGUgYW8gKnNjaGVtYSogaW5mb3JtYWRvLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjaGVtYU5hbWUgTm9tZSBkbyAqc2NoZW1hKi5cclxuICAgKiBAcGFyYW0ge2FueX0gcmVjb3JkSWQgSWQgZG8gcmVnaXN0cm8uXHJcbiAgICovXHJcbiAgYXN5bmMgZ2V0KHNjaGVtYU5hbWU6IHN0cmluZywgcmVjb3JkSWQ6IGFueSk6IFByb21pc2U8b2JqZWN0PiB7XHJcbiAgICBjb25zdCBpc0xvY2FsUmVjb3JkID0gdHJ1ZTtcclxuICAgIGNvbnN0IGxvY2FsUmVjb3JkID0gYXdhaXQgdGhpcy5nZXRSZWNvcmQoc2NoZW1hTmFtZSwgcmVjb3JkSWQsIGlzTG9jYWxSZWNvcmQpO1xyXG4gICAgY29uc3QgcmVjb3JkID0gYXdhaXQgdGhpcy5nZXRSZWNvcmQoc2NoZW1hTmFtZSwgcmVjb3JkSWQpO1xyXG5cclxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHJlY29yZCwgbG9jYWxSZWNvcmQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0b3JuYSB0b2RvcyBvcyByZWdpc3Ryb3MgcmVmZXJlbnRlIGFvICpzY2hlbWEqIGluZm9ybWFkby5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY2hlbWFOYW1lIE5vbWUgZG8gKnNjaGVtYSouXHJcbiAgICovXHJcbiAgYXN5bmMgZ2V0QWxsKHNjaGVtYU5hbWU6IHN0cmluZyk6IFByb21pc2U8QXJyYXk8b2JqZWN0Pj4ge1xyXG4gICAgY29uc3Qgc3RvcmFnZUtleXMgPSBhd2FpdCB0aGlzLnBvU3RvcmFnZS5rZXlzKCk7XHJcbiAgICBjb25zdCBzY2hlbWFSZWNvcmRzID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBrZXkgb2Ygc3RvcmFnZUtleXMpIHtcclxuICAgICAgaWYgKFBvU2NoZW1hU2VydmljZS5pc1NjaGVtYUtleShrZXksIHNjaGVtYU5hbWUpKSB7XHJcbiAgICAgICAgY29uc3QgaWQgPSBQb1NjaGVtYVNlcnZpY2UuZ2V0SWRCeVJlY29yZEtleShrZXkpO1xyXG4gICAgICAgIHNjaGVtYVJlY29yZHMucHVzaChhd2FpdCB0aGlzLmdldChzY2hlbWFOYW1lLCBpZCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHNjaGVtYVJlY29yZHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZ3VhcmRhIGEgbGliZXJhw6fDo28gZG8gcmVjdXJzbyBsaW1pdGFkbywgcG9zdGVyaW9ybWVudGUgbyBlbnZvbHZlIGVtIHVtIGNvbXBvcnRhbWVudG9cclxuICAgKiBkZSBibG9xdWVpbyBlIGRlc2Jsb3F1ZWlvLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGltaXRlZFJlc291cmNlIEZ1bsOnw6NvIHF1ZSBzZXLDoSBlbnZvbHZpZGEgbm8gY29tcG9ydGFtZW50byBkZSBibG9xdWVpbyBlIGRlc2Jsb3F1ZWlvLlxyXG4gICAqL1xyXG4gIGxpbWl0ZWRDYWxsV3JhcChsaW1pdGVkUmVzb3VyY2U6IEZ1bmN0aW9uKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLnBvU3RvcmFnZS5saW1pdGVkQ2FsbFdyYXAobGltaXRlZFJlc291cmNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSB1bSByZWdpc3RybyBkZSB1bSAqc2NoZW1hKiBpbmZvcm1hZG8uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NoZW1hTmFtZSBOb21lIGRvICpzY2hlbWEqLlxyXG4gICAqIEBwYXJhbSB7YW55fSByZWNvcmRJZCBJZCBkbyByZWdpc3Ryby5cclxuICAgKi9cclxuICBhc3luYyByZW1vdmUoc2NoZW1hTmFtZTogc3RyaW5nLCByZWNvcmRJZDogYW55KTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGNvbnN0IHJlY29yZEtleSA9IFBvU2NoZW1hU2VydmljZS5nZXRSZWNvcmRLZXkoc2NoZW1hTmFtZSwgcmVjb3JkSWQpO1xyXG4gICAgY29uc3QgbG9jYWxSZWNvcmRLZXkgPSBQb1NjaGVtYVNlcnZpY2UuZ2V0UmVjb3JkS2V5KHNjaGVtYU5hbWUsIHJlY29yZElkLCB0cnVlKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLnBvU3RvcmFnZS5yZW1vdmUocmVjb3JkS2V5KTtcclxuICAgIGF3YWl0IHRoaXMucG9TdG9yYWdlLnJlbW92ZShsb2NhbFJlY29yZEtleSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBdHVhbGl6YSB1bSByZWdpc3RybyBkZSB1bSAqc2NoZW1hKiBpbmZvcm1hZG8uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1BvU3luY1NjaGVtYX0gc2NoZW1hICoqU2NoZW1hKiByZWZlcmVudGUgYW8gcmVnaXN0cm8gcXVlIHNlcsOhIGFsdGVyYWRvLlxyXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWNvcmQgUmVnaXN0cm8gcXVlIHNlcsOhIGF0dWFsaXphZG8uXHJcbiAgICogQHBhcmFtIHthbnl9IHJlY29yZElkIElkIGRvIHJlZ2lzdHJvIHF1ZSBkZXNlamEgc2VyIGFsdGVyYWRvLiBEZXZlIHNlciB1dGlsaXphZG8gZW0gY2Fzb3MgZW0gcXVlIG8gaWQgZm9pIGFsdGVyYWRvLlxyXG4gICAqL1xyXG4gIGFzeW5jIHVwZGF0ZShzY2hlbWE6IFBvU3luY1NjaGVtYSwgcmVjb3JkOiBvYmplY3QsIHJlY29yZElkPzogYW55KTogUHJvbWlzZTxvYmplY3Q+IHtcclxuICAgIGNvbnN0IGlkID0gUG9TY2hlbWFVdGlsLmdldFJlY29yZElkKHJlY29yZCwgc2NoZW1hKTtcclxuXHJcbiAgICBpZiAocmVjb3JkSWQpIHtcclxuICAgICAgcmVjb3JkID0gYXdhaXQgdGhpcy51cGRhdGVSZWNvcmRJZChzY2hlbWEubmFtZSwgcmVjb3JkLCByZWNvcmRJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuc2F2ZShzY2hlbWEsIHJlY29yZCwgaWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXR1YWxpemEgdG9kb3Mgb3MgcmVnaXN0cm9zIGRlIHVtICpzY2hlbWEqLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtQb1N5bmNTY2hlbWF9IHNjaGVtYSAqKlNjaGVtYSogcmVmZXJlbnRlIGFvcyByZWdpc3Ryb3MgcXVlIHNlcsOjbyBhbHRlcmFkb3MuXHJcbiAgICogQHBhcmFtIHtBcnJheTxvYmplY3Q+fSByZWNvcmRzIExpc3RhIGRlIHJlZ2lzdHJvcyBxdWUgc2Vyw6NvIGFsdGVyYWRvcy5cclxuICAgKi9cclxuICBhc3luYyB1cGRhdGVBbGwoc2NoZW1hOiBQb1N5bmNTY2hlbWEsIHJlY29yZHM6IEFycmF5PG9iamVjdD4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpIHtcclxuICAgICAgYXdhaXQgdGhpcy51cGRhdGUoc2NoZW1hLCByZWNvcmQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRSZWNvcmQoc2NoZW1hTmFtZSwgcmVjb3JkSWQsIGlzTG9jYWxSZWNvcmQgPSBmYWxzZSk6IFByb21pc2U8b2JqZWN0PiB7XHJcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMucG9TdG9yYWdlLmdldChQb1NjaGVtYVNlcnZpY2UuZ2V0UmVjb3JkS2V5KHNjaGVtYU5hbWUsIHJlY29yZElkLCBpc0xvY2FsUmVjb3JkKSkpIHx8IHt9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBzYXZlKHNjaGVtYTogUG9TeW5jU2NoZW1hLCByZWNvcmQ6IG9iamVjdCwgcmVjb3JkSWQ6IGFueSkge1xyXG4gICAgY29uc3QgeyBzZXJ2ZXJSZWNvcmQsIGxvY2FsUmVjb3JkIH0gPSBQb1NjaGVtYVV0aWwuc2VwYXJhdGVTY2hlbWFGaWVsZHMoc2NoZW1hLCByZWNvcmQpO1xyXG4gICAgY29uc3QgcmVjb3JkS2V5ID0gUG9TY2hlbWFTZXJ2aWNlLmdldFJlY29yZEtleShzY2hlbWEubmFtZSwgcmVjb3JkSWQpO1xyXG5cclxuICAgIGF3YWl0IHRoaXMucG9TdG9yYWdlLnNldChyZWNvcmRLZXksIHNlcnZlclJlY29yZCk7XHJcbiAgICBhd2FpdCB0aGlzLnNhdmVMb2NhbEZpZWxkcyhzY2hlbWEubmFtZSwgbG9jYWxSZWNvcmQsIHJlY29yZElkKTtcclxuXHJcbiAgICByZXR1cm4gcmVjb3JkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBzYXZlTG9jYWxGaWVsZHMoc2NoZW1hTmFtZTogc3RyaW5nLCBsb2NhbEZpZWxkczogb2JqZWN0LCByZWNvcmRJZCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgY29udGFpbnNMb2NhbEZpZWxkcyA9IE9iamVjdC5rZXlzKGxvY2FsRmllbGRzKS5sZW5ndGg7XHJcblxyXG4gICAgaWYgKGNvbnRhaW5zTG9jYWxGaWVsZHMpIHtcclxuICAgICAgY29uc3QgbG9jYWxSZWNvcmRLZXkgPSBQb1NjaGVtYVNlcnZpY2UuZ2V0UmVjb3JkS2V5KHNjaGVtYU5hbWUsIHJlY29yZElkLCB0cnVlKTtcclxuICAgICAgYXdhaXQgdGhpcy5wb1N0b3JhZ2Uuc2V0KGxvY2FsUmVjb3JkS2V5LCBsb2NhbEZpZWxkcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVJlY29yZElkKHNjaGVtYU5hbWUsIHJlY29yZCwgcmVjb3JkSWQpIHtcclxuICAgIGNvbnN0IGlzTG9jYWxSZWNvcmQgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0IGxvY2FsUmVjb3JkID0gYXdhaXQgdGhpcy5nZXRSZWNvcmQoc2NoZW1hTmFtZSwgcmVjb3JkSWQsIGlzTG9jYWxSZWNvcmQpO1xyXG4gICAgYXdhaXQgdGhpcy5yZW1vdmUoc2NoZW1hTmFtZSwgcmVjb3JkSWQpO1xyXG5cclxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHJlY29yZCwgbG9jYWxSZWNvcmQpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tc3luYy1jb25maWcuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3luYy9zcmMvbGliL3NlcnZpY2VzL3BvLXN5bmMvaW50ZXJmYWNlcy9wby1zeW5jLWNvbmZpZy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBvRGF0YVRyYW5zZm9ybSB9IGZyb20gJy4vLi4vLi4vLi4vbW9kZWxzL3BvLWRhdGEtdHJhbnNmb3JtLm1vZGVsJztcclxuaW1wb3J0IHsgUG9OZXR3b3JrVHlwZSB9IGZyb20gJy4vLi4vLi4vLi4vbW9kZWxzL3BvLW5ldHdvcmstdHlwZS5lbnVtJztcclxuXHJcbi8qKlxyXG4gKiBAdXNlZEJ5IFBvU3luY1NlcnZpY2VcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqXHJcbiAqIEludGVyZmFjZSBwYXJhIGEgZGVmaW5pw6fDo28gZGFzIGNvbmZpZ3VyYcOnw7VlcyBkbyBzaW5jcm9uaXNtby5cclxuICovXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBvU3luY0NvbmZpZyB7XHJcbiAgLyoqXHJcbiAgICogQ2xhc3NlIHVzYWRhIHBhcmEgYSB0cmFzZm9ybWHDp8OjbyBkb3MgZGFkb3MgbmFzIHJlcXVpc2nDp8O1ZXMuXHJcbiAgICpcclxuICAgKiA+IFZlamEgbWFpcyBkZXRhbGhlcyBlbSBbRnVuZGFtZW50b3MgZG8gUE8gU3luYyAtIEFkYXB0YW5kbyBhIHJlc3Bvc3RhIGRhIEFQSSBwYXJhIG8gcGFkcsOjbyBkbyBQTyBVSV0oL2d1aWRlcy9zeW5jLWZ1bmRhbWVudGFscykuXHJcbiAgICovXHJcbiAgZGF0YVRyYW5zZm9ybT86IFBvRGF0YVRyYW5zZm9ybTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGVtcG8gZW0gc2VndW5kb3MgZG8gc2ljcm9uaXNtbyBwZXJpw7NkaWNvLlxyXG4gICAqIENhc28gbsOjbyBzZWphIGRlZmluaWRvLCBvIHNpbmNyb25pc21vIHBlcmnDs2RpY28gZXN0YXLDoSBkZXNhYmlsaXRhZG8uXHJcbiAgICovXHJcbiAgcGVyaW9kPzogbnVtYmVyO1xyXG5cclxuICAvKiogVGlwb3MgZGUgY29uZXjDtWVzIHBlcm1pdGlkYXMgcGFyYSBvIHNpbmNyb25pc21vLiAqL1xyXG4gIHR5cGU6IFBvTmV0d29ya1R5cGUgfCBBcnJheTxQb05ldHdvcmtUeXBlPjtcclxufVxyXG4iXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tc3luYy1maWVsZC1vcHRpb25zLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N5bmMvc3JjL2xpYi9zZXJ2aWNlcy9wby1zeW5jL2ludGVyZmFjZXMvcG8tc3luYy1maWVsZC1vcHRpb25zLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEB1c2VkQnkgUG9TeW5jU2VydmljZVxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICpcclxuICogSW50ZXJmYWNlIHF1ZSBpcsOhIG1hcGVhciBhcyBjb25maWd1cmHDp8O1ZXMgZG9zIGNhbXBvcyBkbyBgUG9TeW5jU2NoZW1hYC5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgUG9TeW5jRmllbGRPcHRpb25zIHtcclxuICAvKiogUHJvcHJpZWRhZGUgcXVlIGluZm9ybWEgbyBub21lIGRvIGNhbXBvLiAqL1xyXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcclxuXHJcbiAgLyoqIFByb3ByaWVkYWRlIHF1ZSBpbmZvcm1hIHNlIG8gY2FtcG8gc2Vyw6EgYXBlbmFzIHBhcmEgYXJtYXplbmFtZW50byBsb2NhbFxyXG4gICAqIG91IHNlIGRldmUgc2VyIGVudmlhZG8gcGFyYSBvIHNlcnZpZG9yLlxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGxvY2FsPzogYm9vbGVhbjtcclxufVxyXG4iXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tc3luYy1yZXNwb25zZS5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zeW5jL3NyYy9saWIvc2VydmljZXMvcG8tc3luYy9pbnRlcmZhY2VzL3BvLXN5bmMtcmVzcG9uc2UuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5cclxuaW1wb3J0IHsgUG9FdmVudFNvdXJjaW5nRXJyb3JSZXNwb25zZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9wby1ldmVudC1zb3VyY2luZy1lcnJvci1yZXNwb25zZS5tb2RlbCc7XHJcbmltcG9ydCB7IFBvSHR0cFJlcXVlc3REYXRhIH0gZnJvbSAnLi4vLi4vcG8taHR0cC1jbGllbnQvaW50ZXJmYWNlcy9wby1odHRwLXJlcXVlc3QtZGF0YS5pbnRlcmZhY2UnO1xyXG5cclxuLyoqXHJcbiAqIEB1c2VkQnkgUG9TeW5jU2VydmljZVxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICpcclxuICogRGVmaW5lIGEgcmVzcG9zdGEgZG9zIGV2ZW50b3MgZW52aWFkb3MgYW8gc2Vydmlkb3IuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFBvU3luY1Jlc3BvbnNlIHtcclxuICAvKiogSWRlbnRpZmljYWRvciBkbyBldmVudG8gbmEgZmlsYS4gKi9cclxuICBpZDogbnVtYmVyO1xyXG5cclxuICAvKiogSWRlbnRpZmljYWRvciBjdXN0b21pemFkbyBkbyByZWdpc3Ryby4gKi9cclxuICBjdXN0b21SZXF1ZXN0SWQ/OiBzdHJpbmc7XHJcblxyXG4gIC8qKiBEYWRvcyBkYSByZXF1aXNpw6fDo28uICovXHJcbiAgcmVxdWVzdDogUG9IdHRwUmVxdWVzdERhdGE7XHJcblxyXG4gIC8qKiBSZXNwb3N0YSByZXRvcm5hZGEgYXDDs3MgYSB0ZW50YXRpdmEgZGUgZW52aW8gcGFyYSBvIHNlcnZpZG9yLiAqL1xyXG4gIHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8T2JqZWN0PiB8IEh0dHBFcnJvclJlc3BvbnNlIHwgUG9FdmVudFNvdXJjaW5nRXJyb3JSZXNwb25zZTtcclxufVxyXG4iXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tc3luYy1zY2hlbWEuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3luYy9zcmMvbGliL3NlcnZpY2VzL3BvLXN5bmMvaW50ZXJmYWNlcy9wby1zeW5jLXNjaGVtYS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBvU3luY0ZpZWxkT3B0aW9ucyB9IGZyb20gJy4vcG8tc3luYy1maWVsZC1vcHRpb25zLmludGVyZmFjZSc7XHJcblxyXG4vKipcclxuICogQHVzZWRCeSBQb1N5bmNTZXJ2aWNlXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKlxyXG4gKiBJbnRlcmZhY2UgcXVlIGlyw6EgbWFwZWFyIGFzIGluZm9ybWHDp8O1ZXMgZG9zIHJlY3Vyc29zLCBwcmluY2lwYWxtZW50ZSBzdWEgb3JpZ2VtIGUgYXMgaW5mb3JtYcOnw7VlcyBxdWUgc2Vyw6NvIHJldG9ybmFkYXMuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFBvU3luY1NjaGVtYSB7XHJcbiAgLyoqIE5vbWUgZGEgcHJvcHJpZWRhZGUgcXVlIGluZm9ybWEgYSBkYXRhIGRlIGNyaWHDp8OjbyBkbyByZWdpc3Ryby4gKi9cclxuICByZWFkb25seSBjcmVhdGVkQXRGaWVsZD86IHN0cmluZztcclxuXHJcbiAgLyoqIE5vbWUgZGEgcHJvcHJpZWRhZGUgcXVlIGluZm9ybWEgYSBkYXRhIGRlIGRlbGXDp8Ojby4gKi9cclxuICByZWFkb25seSBkZWxldGVkQXRGaWVsZD86IHN0cmluZztcclxuXHJcbiAgLyoqIE5vbWUgZGEgcHJvcHJpZWRhZGUgcXVlIGluZm9ybWEgc2UgbyByZWdpc3RybyBmb2kgZXhjbHXDrWRvLiAqL1xyXG4gIHJlYWRvbmx5IGRlbGV0ZWRGaWVsZDogc3RyaW5nO1xyXG5cclxuICAvKiogRW5kZXJlw6dvIGRvIGVuZHBvaW50IHBhcmEgZXhjbHVpciByZWdpc3Ryb3MuICovXHJcbiAgcmVhZG9ubHkgZGVsZXRlVXJsQXBpPzogc3RyaW5nO1xyXG5cclxuICAvKiogRW5kZXJlw6dvIGRvIGVuZHBvaW50IHF1ZSBwcm92ZXLDoSBhcGVuYXMgZGFkb3MgYWx0ZXJhZG9zIG5vIHNlcnZpZG9yLiAqL1xyXG4gIHJlYWRvbmx5IGRpZmZVcmxBcGk6IHN0cmluZztcclxuXHJcbiAgLyoqIENhbXBvcyBxdWUgc2Vyw6NvIHJldG9ybmFkb3MgcGVsYSBBUEkuICovXHJcbiAgcmVhZG9ubHkgZmllbGRzOiBBcnJheTxzdHJpbmcgfCBQb1N5bmNGaWVsZE9wdGlvbnM+O1xyXG5cclxuICAvKiogRW5kZXJlw6dvIGRvIGVuZHBvaW50IHF1ZSB1dGlsaXphIG8gbcOpdG9kbyBHRVQgcXVlIHByb3ZlcsOhIG9zIGRhZG9zLiAqL1xyXG4gIHJlYWRvbmx5IGdldFVybEFwaTogc3RyaW5nO1xyXG5cclxuICAvKiogTm9tZSBkYSBwcm9wcmllZGFkZSByZWZlcmVudGUgYW8gaWRlbnRpZmljYWRvciDDum5pY28gcGFyYSBvcyBpdGVucyBkbyAqc2NoZW1hKi4gKi9cclxuICByZWFkb25seSBpZEZpZWxkOiBzdHJpbmc7XHJcblxyXG4gIC8qKiBJZGVudGlmacOnw6NvIHBhcmEgcmVwcmVzZW50YXIgbyAqc2NoZW1hKi4gKi9cclxuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XHJcblxyXG4gIC8qKiBRdWFudGlkYWRlIGRlIGl0ZW5zIHBvciBww6FnaW5hIHF1ZSBzZXLDoSBlbnZpYWRvIHBlbGEgQVBJLiAqL1xyXG4gIHJlYWRvbmx5IHBhZ2VTaXplOiBudW1iZXI7XHJcblxyXG4gIC8qKiBFbmRlcmXDp28gZG8gZW5kcG9pbnQgcXVlIHV0aWxpemEgbyBtw6l0b2RvIFBVVCBwYXJhIGF0dWFsaXphciByZWdpc3Ryb3MuICovXHJcbiAgcmVhZG9ubHkgcGF0Y2hVcmxBcGk/OiBzdHJpbmc7XHJcblxyXG4gIC8qKiBFbmRlcmXDp28gZG8gZW5kcG9pbnQgcXVlIHV0aWxpemEgbyBtw6l0b2RvIFBPU1QgcGFyYSBpbmNsdWlyIG9zIHJlZ2lzdHJvcy4gKi9cclxuICByZWFkb25seSBwb3N0VXJsQXBpPzogc3RyaW5nO1xyXG5cclxuICAvKiogTm9tZSBkYSBwcm9wcmllZGFkZSBxdWUgaW5mb3JtYSBhIGRhdGEgZGUgYXR1YWxpemHDp8OjbyBkbyByZWdpc3Ryby4gKi9cclxuICByZWFkb25seSB1cGRhdGVkQXRGaWVsZD86IHN0cmluZztcclxuXHJcbiAgLy8gRGF0YS9Ib3JhIGRhIMO6bHRpbWEgdmV6IHF1ZSBhIHNpbmNyb25pYSBhY29udGVjZXUgcGFyYSBlc3NlICpzY2hlbWEqLlxyXG4gIGxhc3RTeW5jPzogc3RyaW5nO1xyXG59XHJcbiJdfQ==
|