@seniorsistemas/components-ai 1.2.0-master-b7bc46aa → 1.2.0-master-36b461d5
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.
|
@@ -103,12 +103,60 @@ export class EntityService {
|
|
|
103
103
|
.pipe(catchError(this.handleError));
|
|
104
104
|
}
|
|
105
105
|
/**
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
106
|
+
* Sanitiza a entidade antes de enviar para a API.
|
|
107
|
+
* Resolve propriedades $ref que vêm do backend (Jackson @JsonIdentityInfo),
|
|
108
|
+
* substituindo-as pelo objeto real referenciado no payload original.
|
|
109
109
|
*/
|
|
110
110
|
sanitizeEntity(entity) {
|
|
111
|
-
|
|
111
|
+
const cloned = JSON.parse(JSON.stringify(entity));
|
|
112
|
+
this.resolveRefs(cloned, cloned);
|
|
113
|
+
return cloned;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Percorre recursivamente o objeto e resolve qualquer { $ref: "..." }
|
|
117
|
+
* buscando o valor real no root do payload usando o path JSON.
|
|
118
|
+
*/
|
|
119
|
+
resolveRefs(obj, root) {
|
|
120
|
+
if (!obj || typeof obj !== 'object')
|
|
121
|
+
return;
|
|
122
|
+
const keys = Array.isArray(obj) ? obj.map((_, i) => i) : Object.keys(obj);
|
|
123
|
+
for (const key of keys) {
|
|
124
|
+
const value = obj[key];
|
|
125
|
+
if (value && typeof value === 'object') {
|
|
126
|
+
if (value['$ref'] && typeof value['$ref'] === 'string') {
|
|
127
|
+
const resolved = this.resolveJsonPath(root, value['$ref']);
|
|
128
|
+
if (resolved !== undefined) {
|
|
129
|
+
obj[key] = JSON.parse(JSON.stringify(resolved));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
this.resolveRefs(value, root);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Resolve um path JSON no formato $["key"][index]["key"] ou $.key.key[index]
|
|
140
|
+
*/
|
|
141
|
+
resolveJsonPath(root, path) {
|
|
142
|
+
try {
|
|
143
|
+
const tokens = [];
|
|
144
|
+
const regex = /\["([^"]+)"\]|\[(\d+)\]|\.(\w+)/g;
|
|
145
|
+
let match;
|
|
146
|
+
while ((match = regex.exec(path)) !== null) {
|
|
147
|
+
tokens.push(match[1] ?? match[2] ?? match[3]);
|
|
148
|
+
}
|
|
149
|
+
let current = root;
|
|
150
|
+
for (const token of tokens) {
|
|
151
|
+
if (current == null)
|
|
152
|
+
return undefined;
|
|
153
|
+
current = current[token] ?? current[Number(token)];
|
|
154
|
+
}
|
|
155
|
+
return current;
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
return undefined;
|
|
159
|
+
}
|
|
112
160
|
}
|
|
113
161
|
/**
|
|
114
162
|
* Create new entity
|
|
@@ -178,4 +226,4 @@ export class EntityService {
|
|
|
178
226
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EntityService, decorators: [{
|
|
179
227
|
type: Injectable
|
|
180
228
|
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined }] });
|
|
181
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzLWFpL3NyYy9saWIvc2VydmljZXMvZW50aXR5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUF1Q2pELE1BQU0sT0FBZ0IsYUFBYTtJQU1yQjtJQUNBO0lBSkYsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUVsQyxZQUNZLElBQWdCLEVBQ2hCLGtCQUF1QztRQUR2QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBcUI7UUFFakQseURBQXlEO1FBQ3pELDZEQUE2RDtJQUMvRCxDQUFDO0lBRUQ7O09BRUc7SUFDTyxpQkFBaUI7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVEOztPQUVHO0lBQ08sa0JBQWtCLENBQUMsVUFBc0I7UUFDakQsTUFBTSxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLFdBQVcsR0FBRyxFQUFFLEVBQUUsYUFBYSxHQUFHLEVBQUUsRUFBRSxHQUFHLFVBQVUsQ0FBQztRQUM1RixJQUFJLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBRTlCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENB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SSxDQUFDLElBQUksQ0FBTSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksVUFBVSxFQUFFLEVBQUUsTUFBTSxDQUFDO2FBQ25FLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLEVBQU87UUFDWixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLEVBQUUsQ0FBQzthQUM3QyxJQUFJLENBQ0gsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUNmLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDekIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pCLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVUsQ0FBQyxHQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQzthQUMzRixJQUFJLENBQ0gsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUNwQixVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUM3QixDQUFDO0lBQ04sQ0FBQzt3R0F4TW1CLGFBQWE7NEdBQWIsYUFBYTs7NEZBQWIsYUFBYTtrQkFEbEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU29ydE1ldGEge1xuICBmaWVsZDogc3RyaW5nO1xuICBvcmRlcjogbnVtYmVyOyAvLyAxIGZvciBhc2MsIC0xIGZvciBkZXNjXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdFBhcmFtcyB7XG4gIHBhZ2U/OiBudW1iZXI7XG4gIHNpemU/OiBudW1iZXI7XG4gIHNvcnQ/OiBTb3J0TWV0YVtdO1xuICBmaWx0ZXJRdWVyeT86IHN0cmluZztcbiAgZGlzcGxheUZpZWxkcz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJvZHlQYXJhbXMge1xuICBvZmZzZXQ/OiBudW1iZXI7XG4gIHNpemU/OiBudW1iZXI7XG4gIG9yZGVyQnk/OiBzdHJpbmc7XG4gIGZpbHRlcj86IHN0cmluZztcbiAgZGlzcGxheWZpZWxkcz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlMaXN0UmVzcG9uc2U8VD4ge1xuICBjb250ZW50czogVFtdO1xuICB0b3RhbEVsZW1lbnRzOiBudW1iZXI7XG4gIHRvdGFsUGFnZXM6IG51bWJlcjtcbiAgc2l6ZT86IG51bWJlcjtcbiAgbnVtYmVyPzogbnVtYmVyO1xuICBmaXJzdD86IGJvb2xlYW47XG4gIGxhc3Q/OiBib29sZWFuO1xufVxuXG4vLyBJbnRlcmZhY2UgcGFyYSBvIHNlcnZpw6dvIGRlIHRyYWR1w6fDo28gKGR1Y2sgdHlwaW5nKVxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2xhdGlvblNlcnZpY2Uge1xuICB0cmFuc2xhdGUoa2V5OiBzdHJpbmcsIHBhcmFtcz86IGFueSk6IHN0cmluZztcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEVudGl0eVNlcnZpY2U8VD4ge1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZW50aXR5VXJsOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBhY3Rpb25zVXJsOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBxdWVyaWVzVXJsOiBzdHJpbmcgPSAnJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRpb25TZXJ2aWNlPzogVHJhbnNsYXRpb25TZXJ2aWNlXG4gICkge1xuICAgIC8vIEluaXRpYWxpemUgcXVlcmllc1VybCBpbiBuZ09uSW5pdCBvciBhIHNlcGFyYXRlIG1ldGhvZFxuICAgIC8vIHNpbmNlIGFic3RyYWN0IHByb3BlcnRpZXMgY2FuJ3QgYmUgYWNjZXNzZWQgaW4gY29uc3RydWN0b3JcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBzZXJ2aWNlIC0gY2FsbCB0aGlzIGFmdGVyIHNldHRpbmcgYWN0aW9uc1VybFxuICAgKi9cbiAgcHJvdGVjdGVkIGluaXRpYWxpemVTZXJ2aWNlKCk6IHZvaWQge1xuICAgIHRoaXMucXVlcmllc1VybCA9IHRoaXMuYWN0aW9uc1VybC5yZXBsYWNlKCdhY3Rpb25zJywgJ3F1ZXJpZXMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IExpc3RQYXJhbXMgdG8gSHR0cFBhcmFtcyBmb3IgR0VUIHJlcXVlc3RzXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0TGlzdFF1ZXJ5UGFyYW1zKGxpc3RQYXJhbXM6IExpc3RQYXJhbXMpOiBIdHRwUGFyYW1zIHtcbiAgICBjb25zdCB7IHBhZ2UgPSAwLCBzaXplID0gMTAsIHNvcnQgPSBbXSwgZmlsdGVyUXVlcnkgPSAnJywgZGlzcGxheUZpZWxkcyA9IFtdIH0gPSBsaXN0UGFyYW1zO1xuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIFxuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3NpemUnLCBTdHJpbmcoc2l6ZSkpO1xuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ29mZnNldCcsIFN0cmluZyhwYWdlKSk7XG4gICAgXG4gICAgaWYgKHNvcnQgJiYgc29ydC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG9yZGVyQnkgPSBzb3J0XG4gICAgICAgIC5tYXAoKHMpID0+IHtcbiAgICAgICAgICBsZXQgb3JkZXIgPSAnJztcbiAgICAgICAgICBpZiAocy5vcmRlciA9PT0gMSkgb3JkZXIgPSAnIGFzYyc7XG4gICAgICAgICAgZWxzZSBpZiAocy5vcmRlciA9PT0gLTEpIG9yZGVyID0gJyBkZXNjJztcbiAgICAgICAgICByZXR1cm4gYCR7cy5maWVsZH0ke29yZGVyfWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCcsICcpO1xuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnb3JkZXJieScsIG9yZGVyQnkpO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJRdWVyeSkge1xuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnZmlsdGVyJywgZmlsdGVyUXVlcnkpO1xuICAgIH1cblxuICAgIGlmIChkaXNwbGF5RmllbGRzICYmIGRpc3BsYXlGaWVsZHMubGVuZ3RoKSB7XG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdkaXNwbGF5ZmllbGRzJywgZGlzcGxheUZpZWxkcy5qb2luKCcsJykpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBMaXN0UGFyYW1zIHRvIGJvZHkgcGFyYW1ldGVycyBmb3IgUE9TVCByZXF1ZXN0c1xuICAgKi9cbiAgcHJvdGVjdGVkIGdldEJvZHlQYXJhbXMobGlzdFBhcmFtczogTGlzdFBhcmFtcyk6IEJvZHlQYXJhbXMge1xuICAgIGNvbnN0IHsgcGFnZSA9IDAsIHNpemUgPSAxMCwgc29ydCA9IFtdLCBmaWx0ZXJRdWVyeSA9ICcnLCBkaXNwbGF5RmllbGRzID0gW10gfSA9IGxpc3RQYXJhbXM7XG4gICAgY29uc3QgYm9keVBhcmFtczogQm9keVBhcmFtcyA9IHt9O1xuXG4gICAgYm9keVBhcmFtcy5zaXplID0gc2l6ZTtcbiAgICBib2R5UGFyYW1zLm9mZnNldCA9IHBhZ2U7XG5cbiAgICBpZiAoc29ydCAmJiBzb3J0Lmxlbmd0aCkge1xuICAgICAgYm9keVBhcmFtcy5vcmRlckJ5ID0gc29ydFxuICAgICAgICAubWFwKChzKSA9PiB7XG4gICAgICAgICAgbGV0IG9yZGVyID0gJyc7XG4gICAgICAgICAgaWYgKHMub3JkZXIgPT09IDEpIG9yZGVyID0gJyBhc2MnO1xuICAgICAgICAgIGVsc2UgaWYgKHMub3JkZXIgPT09IC0xKSBvcmRlciA9ICcgZGVzYyc7XG4gICAgICAgICAgcmV0dXJuIGAke3MuZmllbGR9JHtvcmRlcn1gO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbignLCAnKTtcbiAgICB9XG5cbiAgICBpZiAoZmlsdGVyUXVlcnkpIHtcbiAgICAgIGJvZHlQYXJhbXMuZmlsdGVyID0gZmlsdGVyUXVlcnk7XG4gICAgfVxuXG4gICAgaWYgKGRpc3BsYXlGaWVsZHMgJiYgZGlzcGxheUZpZWxkcy5sZW5ndGgpIHtcbiAgICAgIGJvZHlQYXJhbXMuZGlzcGxheWZpZWxkcyA9IGRpc3BsYXlGaWVsZHMuam9pbignLCcpO1xuICAgIH1cblxuICAgIHJldHVybiBib2R5UGFyYW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgZXJyb3IgaGFuZGxlclxuICAgKiBOb3RlOiBUaGlzIGp1c3QgbG9ncyB0aGUgZXJyb3IgYW5kIHJlLXRocm93cyB0aGUgb3JpZ2luYWwgSHR0cEVycm9yUmVzcG9uc2VcbiAgICogc28gdGhhdCB0aGUgSFRUUCBpbnRlcmNlcHRvciBjYW4gaGFuZGxlIGl0IHByb3Blcmx5IChzaG93IHRvYXN0LCBldGMuKVxuICAgKi9cbiAgcHJvdGVjdGVkIGhhbmRsZUVycm9yID0gKGVycm9yOiBhbnkpOiBPYnNlcnZhYmxlPG5ldmVyPiA9PiB7XG4gICAgY29uc29sZS5lcnJvcignRW50aXR5U2VydmljZSBFcnJvcjonLCBlcnJvcik7XG4gICAgLy8gUmUtdGhyb3cgdGhlIG9yaWdpbmFsIGVycm9yIHNvIHRoZSBpbnRlcmNlcHRvciBjYW4gaGFuZGxlIGl0XG4gICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBMaXN0IGVudGl0aWVzIHdpdGggcGFnaW5hdGlvbiwgc29ydGluZywgYW5kIGZpbHRlcmluZ1xuICAgKi9cbiAgbGlzdChsaXN0UGFyYW1zOiBMaXN0UGFyYW1zID0ge30pOiBPYnNlcnZhYmxlPEVudGl0eUxpc3RSZXNwb25zZTxUPj4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuZ2V0TGlzdFF1ZXJ5UGFyYW1zKGxpc3RQYXJhbXMpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEVudGl0eUxpc3RSZXNwb25zZTxUPj4odGhpcy5lbnRpdHlVcmwsIHsgcGFyYW1zIH0pXG4gICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZW50aXR5IGJ5IElEXG4gICAqL1xuICBnZXQoaWQ6IGFueSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFQ+KGAke3RoaXMuZW50aXR5VXJsfS8ke2lkfWApXG4gICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFsaXphIGRlZXAgY2xvbmUgZGEgZW50aWRhZGUgYW50ZXMgZGUgZW52aWFyIHBhcmEgYSBBUEkuXG4gICAqIFF1ZWJyYSByZWZlcsOqbmNpYXMgY29tcGFydGlsaGFkYXMgZW0gbWVtw7NyaWEgcGFyYSBldml0YXIgcXVlIG9cbiAgICogSlNPTi5zdHJpbmdpZnkgZ2VyZSBub3Rhw6fDo28gJHJlZiBlbSBvYmpldG9zIGR1cGxpY2Fkb3MuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2FuaXRpemVFbnRpdHkoZW50aXR5OiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGVudGl0eSkpO1xuICB9XG5cblxuICAvKipcbiAgICogQ3JlYXRlIG5ldyBlbnRpdHlcbiAgICovXG4gIGluc2VydChlbnRpdHk6IFQpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8VD4odGhpcy5lbnRpdHlVcmwsIHRoaXMuc2FuaXRpemVFbnRpdHkoZW50aXR5KSlcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBleGlzdGluZyBlbnRpdHlcbiAgICovXG4gIHVwZGF0ZShpZDogYW55LCBlbnRpdHk6IFQpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxUPihgJHt0aGlzLmVudGl0eVVybH0vJHtpZH1gLCB0aGlzLnNhbml0aXplRW50aXR5KGVudGl0eSkpXG4gICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgZW50aXR5IGJ5IElEXG4gICAqL1xuICBkZWxldGUoaWQ6IGFueSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPHZvaWQ+KGAke3RoaXMuZW50aXR5VXJsfS8ke2lkfWAsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoKSA9PiB1bmRlZmluZWQpLFxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgY3VzdG9tIGZpbHRlciBhY3Rpb25cbiAgICovXG4gIGxpc3RDdXN0b21GaWx0ZXIobGlzdFBhcmFtczogTGlzdFBhcmFtcywgYWN0aW9uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEVudGl0eUxpc3RSZXNwb25zZTxUPj4ge1xuICAgIGNvbnN0IGJvZHlQYXJhbXMgPSB0aGlzLmdldEJvZHlQYXJhbXMobGlzdFBhcmFtcyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEVudGl0eUxpc3RSZXNwb25zZTxUPj4oYCR7dGhpcy5hY3Rpb25zVXJsfS8ke2FjdGlvbn1gLCBib2R5UGFyYW1zKVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKSk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBjdXN0b20gcXVlcnlcbiAgICovXG4gIGV4ZWN1dGVRdWVyeShxdWVyeU5hbWU6IHN0cmluZywgcGFyYW1zOiBhbnkgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5xdWVyaWVzVXJsfS8ke3F1ZXJ5TmFtZX1gLCBwYXJhbXMpXG4gICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGN1c3RvbSBhY3Rpb25cbiAgICovXG4gIGV4ZWN1dGVBY3Rpb24oYWN0aW9uTmFtZTogc3RyaW5nLCBwYXJhbXM6IGFueSA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmFjdGlvbnNVcmx9LyR7YWN0aW9uTmFtZX1gLCBwYXJhbXMpXG4gICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBlbnRpdHkgZXhpc3RzIGJ5IElEXG4gICAqL1xuICBleGlzdHMoaWQ6IGFueSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuaGVhZChgJHt0aGlzLmVudGl0eVVybH0vJHtpZH1gKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoKSA9PiB0cnVlKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBbZmFsc2VdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1bGsgZGVsZXRlIGVudGl0aWVzXG4gICAqL1xuICBidWxrRGVsZXRlKGlkczogYW55W10pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8dm9pZD4oYCR7dGhpcy5hY3Rpb25zVXJsfS9idWxrRGVsZXRlYCwgeyBpZHMgfSwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCgpID0+IHVuZGVmaW5lZCksXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcbiAgICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
229
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzLWFpL3NyYy9saWIvc2VydmljZXMvZW50aXR5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUF1Q2pELE1BQU0sT0FBZ0IsYUFBYTtJQU1yQjtJQUNBO0lBSkYsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUVsQyxZQUNZLElBQWdCLEVBQ2hCLGtCQUF1QztRQUR2QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBcUI7UUFFakQseURBQXlEO1FBQ3pELDZEQUE2RDtJQUMvRCxDQUFDO0lBRUQ7O09BRUc7SUFDTyxpQkFBaUI7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVEOztPQUVHO0lBQ08sa0JBQWtCLENBQUMsVUFBc0I7UUFDakQsTUFBTSxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLFdBQVcsR0FBRyxFQUFFLEVBQUUsYUFBYSxHQUFHLEVBQUUsRUFBRSxHQUFHLFVBQVUsQ0FBQztRQUM1RixJQUFJLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBRTlCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENB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QUFDO2FBQzdDLElBQUksQ0FDSCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQ2YsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUN6QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakIsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVSxDQUFDLEdBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDO2FBQzNGLElBQUksQ0FDSCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQ3BCLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQzdCLENBQUM7SUFDTixDQUFDO3dHQXZQbUIsYUFBYTs0R0FBYixhQUFhOzs0RkFBYixhQUFhO2tCQURsQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGludGVyZmFjZSBTb3J0TWV0YSB7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIG9yZGVyOiBudW1iZXI7IC8vIDEgZm9yIGFzYywgLTEgZm9yIGRlc2Ncbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXN0UGFyYW1zIHtcbiAgcGFnZT86IG51bWJlcjtcbiAgc2l6ZT86IG51bWJlcjtcbiAgc29ydD86IFNvcnRNZXRhW107XG4gIGZpbHRlclF1ZXJ5Pzogc3RyaW5nO1xuICBkaXNwbGF5RmllbGRzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQm9keVBhcmFtcyB7XG4gIG9mZnNldD86IG51bWJlcjtcbiAgc2l6ZT86IG51bWJlcjtcbiAgb3JkZXJCeT86IHN0cmluZztcbiAgZmlsdGVyPzogc3RyaW5nO1xuICBkaXNwbGF5ZmllbGRzPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUxpc3RSZXNwb25zZTxUPiB7XG4gIGNvbnRlbnRzOiBUW107XG4gIHRvdGFsRWxlbWVudHM6IG51bWJlcjtcbiAgdG90YWxQYWdlczogbnVtYmVyO1xuICBzaXplPzogbnVtYmVyO1xuICBudW1iZXI/OiBudW1iZXI7XG4gIGZpcnN0PzogYm9vbGVhbjtcbiAgbGFzdD86IGJvb2xlYW47XG59XG5cbi8vIEludGVyZmFjZSBwYXJhIG8gc2VydmnDp28gZGUgdHJhZHXDp8OjbyAoZHVjayB0eXBpbmcpXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zbGF0aW9uU2VydmljZSB7XG4gIHRyYW5zbGF0ZShrZXk6IHN0cmluZywgcGFyYW1zPzogYW55KTogc3RyaW5nO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRW50aXR5U2VydmljZTxUPiB7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBlbnRpdHlVcmw6IHN0cmluZztcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGFjdGlvbnNVcmw6IHN0cmluZztcbiAgcHJvdGVjdGVkIHF1ZXJpZXNVcmw6IHN0cmluZyA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGlvblNlcnZpY2U/OiBUcmFuc2xhdGlvblNlcnZpY2VcbiAgKSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBxdWVyaWVzVXJsIGluIG5nT25Jbml0IG9yIGEgc2VwYXJhdGUgbWV0aG9kXG4gICAgLy8gc2luY2UgYWJzdHJhY3QgcHJvcGVydGllcyBjYW4ndCBiZSBhY2Nlc3NlZCBpbiBjb25zdHJ1Y3RvclxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIHNlcnZpY2UgLSBjYWxsIHRoaXMgYWZ0ZXIgc2V0dGluZyBhY3Rpb25zVXJsXG4gICAqL1xuICBwcm90ZWN0ZWQgaW5pdGlhbGl6ZVNlcnZpY2UoKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyaWVzVXJsID0gdGhpcy5hY3Rpb25zVXJsLnJlcGxhY2UoJ2FjdGlvbnMnLCAncXVlcmllcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgTGlzdFBhcmFtcyB0byBIdHRwUGFyYW1zIGZvciBHRVQgcmVxdWVzdHNcbiAgICovXG4gIHByb3RlY3RlZCBnZXRMaXN0UXVlcnlQYXJhbXMobGlzdFBhcmFtczogTGlzdFBhcmFtcyk6IEh0dHBQYXJhbXMge1xuICAgIGNvbnN0IHsgcGFnZSA9IDAsIHNpemUgPSAxMCwgc29ydCA9IFtdLCBmaWx0ZXJRdWVyeSA9ICcnLCBkaXNwbGF5RmllbGRzID0gW10gfSA9IGxpc3RQYXJhbXM7XG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnc2l6ZScsIFN0cmluZyhzaXplKSk7XG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnb2Zmc2V0JywgU3RyaW5nKHBhZ2UpKTtcbiAgICBcbiAgICBpZiAoc29ydCAmJiBzb3J0Lmxlbmd0aCkge1xuICAgICAgY29uc3Qgb3JkZXJCeSA9IHNvcnRcbiAgICAgICAgLm1hcCgocykgPT4ge1xuICAgICAgICAgIGxldCBvcmRlciA9ICcnO1xuICAgICAgICAgIGlmIChzLm9yZGVyID09PSAxKSBvcmRlciA9ICcgYXNjJztcbiAgICAgICAgICBlbHNlIGlmIChzLm9yZGVyID09PSAtMSkgb3JkZXIgPSAnIGRlc2MnO1xuICAgICAgICAgIHJldHVybiBgJHtzLmZpZWxkfSR7b3JkZXJ9YDtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdvcmRlcmJ5Jywgb3JkZXJCeSk7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlclF1ZXJ5KSB7XG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdmaWx0ZXInLCBmaWx0ZXJRdWVyeSk7XG4gICAgfVxuXG4gICAgaWYgKGRpc3BsYXlGaWVsZHMgJiYgZGlzcGxheUZpZWxkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ2Rpc3BsYXlmaWVsZHMnLCBkaXNwbGF5RmllbGRzLmpvaW4oJywnKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IExpc3RQYXJhbXMgdG8gYm9keSBwYXJhbWV0ZXJzIGZvciBQT1NUIHJlcXVlc3RzXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0Qm9keVBhcmFtcyhsaXN0UGFyYW1zOiBMaXN0UGFyYW1zKTogQm9keVBhcmFtcyB7XG4gICAgY29uc3QgeyBwYWdlID0gMCwgc2l6ZSA9IDEwLCBzb3J0ID0gW10sIGZpbHRlclF1ZXJ5ID0gJycsIGRpc3BsYXlGaWVsZHMgPSBbXSB9ID0gbGlzdFBhcmFtcztcbiAgICBjb25zdCBib2R5UGFyYW1zOiBCb2R5UGFyYW1zID0ge307XG5cbiAgICBib2R5UGFyYW1zLnNpemUgPSBzaXplO1xuICAgIGJvZHlQYXJhbXMub2Zmc2V0ID0gcGFnZTtcblxuICAgIGlmIChzb3J0ICYmIHNvcnQubGVuZ3RoKSB7XG4gICAgICBib2R5UGFyYW1zLm9yZGVyQnkgPSBzb3J0XG4gICAgICAgIC5tYXAoKHMpID0+IHtcbiAgICAgICAgICBsZXQgb3JkZXIgPSAnJztcbiAgICAgICAgICBpZiAocy5vcmRlciA9PT0gMSkgb3JkZXIgPSAnIGFzYyc7XG4gICAgICAgICAgZWxzZSBpZiAocy5vcmRlciA9PT0gLTEpIG9yZGVyID0gJyBkZXNjJztcbiAgICAgICAgICByZXR1cm4gYCR7cy5maWVsZH0ke29yZGVyfWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCcsICcpO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJRdWVyeSkge1xuICAgICAgYm9keVBhcmFtcy5maWx0ZXIgPSBmaWx0ZXJRdWVyeTtcbiAgICB9XG5cbiAgICBpZiAoZGlzcGxheUZpZWxkcyAmJiBkaXNwbGF5RmllbGRzLmxlbmd0aCkge1xuICAgICAgYm9keVBhcmFtcy5kaXNwbGF5ZmllbGRzID0gZGlzcGxheUZpZWxkcy5qb2luKCcsJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvZHlQYXJhbXM7XG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCBlcnJvciBoYW5kbGVyXG4gICAqIE5vdGU6IFRoaXMganVzdCBsb2dzIHRoZSBlcnJvciBhbmQgcmUtdGhyb3dzIHRoZSBvcmlnaW5hbCBIdHRwRXJyb3JSZXNwb25zZVxuICAgKiBzbyB0aGF0IHRoZSBIVFRQIGludGVyY2VwdG9yIGNhbiBoYW5kbGUgaXQgcHJvcGVybHkgKHNob3cgdG9hc3QsIGV0Yy4pXG4gICAqL1xuICBwcm90ZWN0ZWQgaGFuZGxlRXJyb3IgPSAoZXJyb3I6IGFueSk6IE9ic2VydmFibGU8bmV2ZXI+ID0+IHtcbiAgICBjb25zb2xlLmVycm9yKCdFbnRpdHlTZXJ2aWNlIEVycm9yOicsIGVycm9yKTtcbiAgICAvLyBSZS10aHJvdyB0aGUgb3JpZ2luYWwgZXJyb3Igc28gdGhlIGludGVyY2VwdG9yIGNhbiBoYW5kbGUgaXRcbiAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gIH07XG5cbiAgLyoqXG4gICAqIExpc3QgZW50aXRpZXMgd2l0aCBwYWdpbmF0aW9uLCBzb3J0aW5nLCBhbmQgZmlsdGVyaW5nXG4gICAqL1xuICBsaXN0KGxpc3RQYXJhbXM6IExpc3RQYXJhbXMgPSB7fSk6IE9ic2VydmFibGU8RW50aXR5TGlzdFJlc3BvbnNlPFQ+PiB7XG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5nZXRMaXN0UXVlcnlQYXJhbXMobGlzdFBhcmFtcyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8RW50aXR5TGlzdFJlc3BvbnNlPFQ+Pih0aGlzLmVudGl0eVVybCwgeyBwYXJhbXMgfSlcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcikpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBlbnRpdHkgYnkgSURcbiAgICovXG4gIGdldChpZDogYW55KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VD4oYCR7dGhpcy5lbnRpdHlVcmx9LyR7aWR9YClcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhbml0aXphIGEgZW50aWRhZGUgYW50ZXMgZGUgZW52aWFyIHBhcmEgYSBBUEkuXG4gICAqIFJlc29sdmUgcHJvcHJpZWRhZGVzICRyZWYgcXVlIHbDqm0gZG8gYmFja2VuZCAoSmFja3NvbiBASnNvbklkZW50aXR5SW5mbyksXG4gICAqIHN1YnN0aXR1aW5kby1hcyBwZWxvIG9iamV0byByZWFsIHJlZmVyZW5jaWFkbyBubyBwYXlsb2FkIG9yaWdpbmFsLlxuICAgKi9cbiAgcHJvdGVjdGVkIHNhbml0aXplRW50aXR5KGVudGl0eTogYW55KTogYW55IHtcbiAgICBjb25zdCBjbG9uZWQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGVudGl0eSkpO1xuICAgIHRoaXMucmVzb2x2ZVJlZnMoY2xvbmVkLCBjbG9uZWQpO1xuICAgIHJldHVybiBjbG9uZWQ7XG4gIH1cblxuICAvKipcbiAgICogUGVyY29ycmUgcmVjdXJzaXZhbWVudGUgbyBvYmpldG8gZSByZXNvbHZlIHF1YWxxdWVyIHsgJHJlZjogXCIuLi5cIiB9XG4gICAqIGJ1c2NhbmRvIG8gdmFsb3IgcmVhbCBubyByb290IGRvIHBheWxvYWQgdXNhbmRvIG8gcGF0aCBKU09OLlxuICAgKi9cbiAgcHJpdmF0ZSByZXNvbHZlUmVmcyhvYmo6IGFueSwgcm9vdDogYW55KTogdm9pZCB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHJldHVybjtcblxuICAgIGNvbnN0IGtleXMgPSBBcnJheS5pc0FycmF5KG9iaikgPyBvYmoubWFwKChfOiBhbnksIGk6IG51bWJlcikgPT4gaSkgOiBPYmplY3Qua2V5cyhvYmopO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV07XG4gICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAodmFsdWVbJyRyZWYnXSAmJiB0eXBlb2YgdmFsdWVbJyRyZWYnXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBjb25zdCByZXNvbHZlZCA9IHRoaXMucmVzb2x2ZUpzb25QYXRoKHJvb3QsIHZhbHVlWyckcmVmJ10pO1xuICAgICAgICAgIGlmIChyZXNvbHZlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBvYmpba2V5XSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocmVzb2x2ZWQpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZXNvbHZlUmVmcyh2YWx1ZSwgcm9vdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB1bSBwYXRoIEpTT04gbm8gZm9ybWF0byAkW1wia2V5XCJdW2luZGV4XVtcImtleVwiXSBvdSAkLmtleS5rZXlbaW5kZXhdXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVKc29uUGF0aChyb290OiBhbnksIHBhdGg6IHN0cmluZyk6IGFueSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRva2Vuczogc3RyaW5nW10gPSBbXTtcbiAgICAgIGNvbnN0IHJlZ2V4ID0gL1xcW1wiKFteXCJdKylcIlxcXXxcXFsoXFxkKylcXF18XFwuKFxcdyspL2c7XG4gICAgICBsZXQgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGw7XG4gICAgICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyhwYXRoKSkgIT09IG51bGwpIHtcbiAgICAgICAgdG9rZW5zLnB1c2gobWF0Y2hbMV0gPz8gbWF0Y2hbMl0gPz8gbWF0Y2hbM10pO1xuICAgICAgfVxuICAgICAgbGV0IGN1cnJlbnQgPSByb290O1xuICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbnMpIHtcbiAgICAgICAgaWYgKGN1cnJlbnQgPT0gbnVsbCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnRbdG9rZW5dID8/IGN1cnJlbnRbTnVtYmVyKHRva2VuKV07XG4gICAgICB9XG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cblxuICAvKipcbiAgICogQ3JlYXRlIG5ldyBlbnRpdHlcbiAgICovXG4gIGluc2VydChlbnRpdHk6IFQpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8VD4odGhpcy5lbnRpdHlVcmwsIHRoaXMuc2FuaXRpemVFbnRpdHkoZW50aXR5KSlcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBleGlzdGluZyBlbnRpdHlcbiAgICovXG4gIHVwZGF0ZShpZDogYW55LCBlbnRpdHk6IFQpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxUPihgJHt0aGlzLmVudGl0eVVybH0vJHtpZH1gLCB0aGlzLnNhbml0aXplRW50aXR5KGVudGl0eSkpXG4gICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgZW50aXR5IGJ5IElEXG4gICAqL1xuICBkZWxldGUoaWQ6IGFueSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPHZvaWQ+KGAke3RoaXMuZW50aXR5VXJsfS8ke2lkfWAsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoKSA9PiB1bmRlZmluZWQpLFxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgY3VzdG9tIGZpbHRlciBhY3Rpb25cbiAgICovXG4gIGxpc3RDdXN0b21GaWx0ZXIobGlzdFBhcmFtczogTGlzdFBhcmFtcywgYWN0aW9uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEVudGl0eUxpc3RSZXNwb25zZTxUPj4ge1xuICAgIGNvbnN0IGJvZHlQYXJhbXMgPSB0aGlzLmdldEJvZHlQYXJhbXMobGlzdFBhcmFtcyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEVudGl0eUxpc3RSZXNwb25zZTxUPj4oYCR7dGhpcy5hY3Rpb25zVXJsfS8ke2FjdGlvbn1gLCBib2R5UGFyYW1zKVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKSk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBjdXN0b20gcXVlcnlcbiAgICovXG4gIGV4ZWN1dGVRdWVyeShxdWVyeU5hbWU6IHN0cmluZywgcGFyYW1zOiBhbnkgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5xdWVyaWVzVXJsfS8ke3F1ZXJ5TmFtZX1gLCBwYXJhbXMpXG4gICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGN1c3RvbSBhY3Rpb25cbiAgICovXG4gIGV4ZWN1dGVBY3Rpb24oYWN0aW9uTmFtZTogc3RyaW5nLCBwYXJhbXM6IGFueSA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmFjdGlvbnNVcmx9LyR7YWN0aW9uTmFtZX1gLCBwYXJhbXMpXG4gICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBlbnRpdHkgZXhpc3RzIGJ5IElEXG4gICAqL1xuICBleGlzdHMoaWQ6IGFueSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuaGVhZChgJHt0aGlzLmVudGl0eVVybH0vJHtpZH1gKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoKSA9PiB0cnVlKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBbZmFsc2VdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1bGsgZGVsZXRlIGVudGl0aWVzXG4gICAqL1xuICBidWxrRGVsZXRlKGlkczogYW55W10pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8dm9pZD4oYCR7dGhpcy5hY3Rpb25zVXJsfS9idWxrRGVsZXRlYCwgeyBpZHMgfSwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCgpID0+IHVuZGVmaW5lZCksXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcbiAgICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -171,12 +171,60 @@ class EntityService {
|
|
|
171
171
|
.pipe(catchError(this.handleError));
|
|
172
172
|
}
|
|
173
173
|
/**
|
|
174
|
-
*
|
|
175
|
-
*
|
|
176
|
-
*
|
|
174
|
+
* Sanitiza a entidade antes de enviar para a API.
|
|
175
|
+
* Resolve propriedades $ref que vêm do backend (Jackson @JsonIdentityInfo),
|
|
176
|
+
* substituindo-as pelo objeto real referenciado no payload original.
|
|
177
177
|
*/
|
|
178
178
|
sanitizeEntity(entity) {
|
|
179
|
-
|
|
179
|
+
const cloned = JSON.parse(JSON.stringify(entity));
|
|
180
|
+
this.resolveRefs(cloned, cloned);
|
|
181
|
+
return cloned;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Percorre recursivamente o objeto e resolve qualquer { $ref: "..." }
|
|
185
|
+
* buscando o valor real no root do payload usando o path JSON.
|
|
186
|
+
*/
|
|
187
|
+
resolveRefs(obj, root) {
|
|
188
|
+
if (!obj || typeof obj !== 'object')
|
|
189
|
+
return;
|
|
190
|
+
const keys = Array.isArray(obj) ? obj.map((_, i) => i) : Object.keys(obj);
|
|
191
|
+
for (const key of keys) {
|
|
192
|
+
const value = obj[key];
|
|
193
|
+
if (value && typeof value === 'object') {
|
|
194
|
+
if (value['$ref'] && typeof value['$ref'] === 'string') {
|
|
195
|
+
const resolved = this.resolveJsonPath(root, value['$ref']);
|
|
196
|
+
if (resolved !== undefined) {
|
|
197
|
+
obj[key] = JSON.parse(JSON.stringify(resolved));
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
this.resolveRefs(value, root);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Resolve um path JSON no formato $["key"][index]["key"] ou $.key.key[index]
|
|
208
|
+
*/
|
|
209
|
+
resolveJsonPath(root, path) {
|
|
210
|
+
try {
|
|
211
|
+
const tokens = [];
|
|
212
|
+
const regex = /\["([^"]+)"\]|\[(\d+)\]|\.(\w+)/g;
|
|
213
|
+
let match;
|
|
214
|
+
while ((match = regex.exec(path)) !== null) {
|
|
215
|
+
tokens.push(match[1] ?? match[2] ?? match[3]);
|
|
216
|
+
}
|
|
217
|
+
let current = root;
|
|
218
|
+
for (const token of tokens) {
|
|
219
|
+
if (current == null)
|
|
220
|
+
return undefined;
|
|
221
|
+
current = current[token] ?? current[Number(token)];
|
|
222
|
+
}
|
|
223
|
+
return current;
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
return undefined;
|
|
227
|
+
}
|
|
180
228
|
}
|
|
181
229
|
/**
|
|
182
230
|
* Create new entity
|