@orbit/record-cache
Version:
Orbit base classes used to access and maintain a set of records.
109 lines • 17.2 kB
JavaScript
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
import { Orbit, evented } from '@orbit/core';
import { requestOptionsForSource } from '@orbit/data';
import { RecordQueryBuilder, RecordTransformBuilder, StandardRecordNormalizer, buildRecordValidatorFor } from '@orbit/records';
const { assert } = Orbit;
let RecordCache = class RecordCache {
constructor(settings) {
assert('RecordCache requires a `schema` setting to be constructed', !!settings.schema);
const { name, schema, keyMap } = settings;
this._name = name;
this._schema = schema;
this._keyMap = keyMap;
let { validatorFor, validators } = settings;
const autoValidate = settings.autoValidate !== false;
if (!autoValidate) {
assert('RecordCache should not be constructed with a `validatorFor` or `validators` if `autoValidate === false`', validators === undefined && validatorFor === undefined);
}
else if (validatorFor !== undefined) {
assert('RecordCache can be constructed with either a `validatorFor` or `validators`, but not both', validators === undefined);
}
else {
validatorFor = buildRecordValidatorFor({ validators });
}
this._validatorFor = validatorFor;
if (settings.queryBuilder === undefined ||
settings.transformBuilder === undefined) {
let normalizer = settings.normalizer;
if (normalizer === undefined) {
normalizer = new StandardRecordNormalizer({
schema,
keyMap,
validateInputs: autoValidate
});
}
if (settings.queryBuilder === undefined) {
settings.queryBuilder = new RecordQueryBuilder({
schema,
normalizer,
validatorFor
});
}
if (settings.transformBuilder === undefined) {
settings.transformBuilder = new RecordTransformBuilder({
schema,
normalizer,
validatorFor
});
}
}
this._queryBuilder = settings.queryBuilder;
this._transformBuilder = settings.transformBuilder;
this._defaultQueryOptions = settings.defaultQueryOptions;
this._defaultTransformOptions = settings.defaultTransformOptions;
}
get name() {
return this._name;
}
get schema() {
return this._schema;
}
get keyMap() {
return this._keyMap;
}
get validatorFor() {
return this._validatorFor;
}
get queryBuilder() {
return this._queryBuilder;
}
get transformBuilder() {
return this._transformBuilder;
}
get defaultQueryOptions() {
return this._defaultQueryOptions;
}
set defaultQueryOptions(options) {
this._defaultQueryOptions = options;
}
get defaultTransformOptions() {
return this._defaultTransformOptions;
}
set defaultTransformOptions(options) {
this._defaultTransformOptions = options;
}
getQueryOptions(query, expression) {
return requestOptionsForSource([
this._defaultQueryOptions,
query.options,
expression === null || expression === void 0 ? void 0 : expression.options
], this._name);
}
getTransformOptions(transform, operation) {
return requestOptionsForSource([
this._defaultTransformOptions,
transform.options,
operation === null || operation === void 0 ? void 0 : operation.options
], this._name);
}
};
RecordCache = __decorate([
evented
], RecordCache);
export { RecordCache };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLWNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlY29yZC1jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBVyxNQUFNLGFBQWEsQ0FBQztBQUN0RCxPQUFPLEVBR0wsdUJBQXVCLEVBQ3hCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFJTCxrQkFBa0IsRUFDbEIsc0JBQXNCLEVBS3RCLHdCQUF3QixFQUV4Qix1QkFBdUIsRUFDeEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUd4QixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDO0FBNkN6QixJQUFzQixXQUFXLEdBQWpDLE1BQXNCLFdBQVc7SUFpQi9CLFlBQ0UsUUFLQztRQUVELE1BQU0sQ0FDSiwyREFBMkQsRUFDM0QsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQ2xCLENBQUM7UUFFRixNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUM7UUFFMUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFFdEIsSUFBSSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsR0FBRyxRQUFRLENBQUM7UUFDNUMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFlBQVksS0FBSyxLQUFLLENBQUM7UUFFckQsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNqQixNQUFNLENBQ0oseUdBQXlHLEVBQ3pHLFVBQVUsS0FBSyxTQUFTLElBQUksWUFBWSxLQUFLLFNBQVMsQ0FDdkQsQ0FBQztTQUNIO2FBQU0sSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFO1lBQ3JDLE1BQU0sQ0FDSiwyRkFBMkYsRUFDM0YsVUFBVSxL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QkFBVCxTQUFTLENBQUUsT0FBdUM7U0FDbkQsRUFDRCxJQUFJLENBQUMsS0FBSyxDQUNYLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQTtBQXhLcUIsV0FBVztJQURoQyxPQUFPO0dBQ2MsV0FBVyxDQXdLaEM7U0F4S3FCLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcmJpdCwgZXZlbnRlZCwgRXZlbnRlZCB9IGZyb20gJ0BvcmJpdC9jb3JlJztcbmltcG9ydCB7XG4gIERlZmF1bHRSZXF1ZXN0T3B0aW9ucyxcbiAgUmVxdWVzdE9wdGlvbnMsXG4gIHJlcXVlc3RPcHRpb25zRm9yU291cmNlXG59IGZyb20gJ0BvcmJpdC9kYXRhJztcbmltcG9ydCB7XG4gIFJlY29yZEtleU1hcCxcbiAgUmVjb3JkT3BlcmF0aW9uLFxuICBSZWNvcmRTY2hlbWEsXG4gIFJlY29yZFF1ZXJ5QnVpbGRlcixcbiAgUmVjb3JkVHJhbnNmb3JtQnVpbGRlcixcbiAgUmVjb3JkUXVlcnlFeHByZXNzaW9uLFxuICBSZWNvcmRRdWVyeSxcbiAgUmVjb3JkVHJhbnNmb3JtLFxuICBSZWNvcmROb3JtYWxpemVyLFxuICBTdGFuZGFyZFJlY29yZE5vcm1hbGl6ZXIsXG4gIFN0YW5kYXJkUmVjb3JkVmFsaWRhdG9yLFxuICBidWlsZFJlY29yZFZhbGlkYXRvckZvclxufSBmcm9tICdAb3JiaXQvcmVjb3Jkcyc7XG5pbXBvcnQgeyBEaWN0IH0gZnJvbSAnQG9yYml0L3V0aWxzJztcbmltcG9ydCB7IFN0YW5kYXJkVmFsaWRhdG9yLCBWYWxpZGF0b3JGb3JGbiB9IGZyb20gJ0BvcmJpdC92YWxpZGF0b3JzJztcbmNvbnN0IHsgYXNzZXJ0IH0gPSBPcmJpdDtcblxuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRDYWNoZVF1ZXJ5T3B0aW9ucyBleHRlbmRzIFJlcXVlc3RPcHRpb25zIHtcbiAgcmFpc2VOb3RGb3VuZEV4Y2VwdGlvbnM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZENhY2hlVHJhbnNmb3JtT3B0aW9ucyBleHRlbmRzIFJlcXVlc3RPcHRpb25zIHtcbiAgcmFpc2VOb3RGb3VuZEV4Y2VwdGlvbnM/OiBib29sZWFuO1xuICB1c2VCdWZmZXI/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZENhY2hlU2V0dGluZ3M8XG4gIFF1ZXJ5T3B0aW9ucyBleHRlbmRzIFJlcXVlc3RPcHRpb25zID0gUmVjb3JkQ2FjaGVRdWVyeU9wdGlvbnMsXG4gIFRyYW5zZm9ybU9wdGlvbnMgZXh0ZW5kcyBSZXF1ZXN0T3B0aW9ucyA9IFJlY29yZENhY2hlVHJhbnNmb3JtT3B0aW9ucyxcbiAgUXVlcnlCdWlsZGVyID0gUmVjb3JkUXVlcnlCdWlsZGVyLFxuICBUcmFuc2Zvcm1CdWlsZGVyID0gUmVjb3JkVHJhbnNmb3JtQnVpbGRlclxuPiB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHNjaGVtYTogUmVjb3JkU2NoZW1hO1xuICBrZXlNYXA/OiBSZWNvcmRLZXlNYXA7XG4gIG5vcm1hbGl6ZXI/OiBSZWNvcmROb3JtYWxpemVyO1xuICB2YWxpZGF0b3JGb3I/OiBWYWxpZGF0b3JGb3JGbjxTdGFuZGFyZFZhbGlkYXRvciB8IFN0YW5kYXJkUmVjb3JkVmFsaWRhdG9yPjtcbiAgdmFsaWRhdG9ycz86IERpY3Q8U3RhbmRhcmRWYWxpZGF0b3IgfCBTdGFuZGFyZFJlY29yZFZhbGlkYXRvcj47XG5cbiAgLyoqXG4gICAqIEF1dG9tYXRpY2FsbHkgdmFsaWRhdGUgdGhlIGNvbnRlbnRzIG9mIGFsbCByZXF1ZXN0cy5cbiAgICpcbiAgICogSWYgdHJ1ZSwgYnVpbGRzIGEgYHZhbGlkYXRvckZvcmAgZnVuY3Rpb24gaWYgb25lIGhhcyBub3QgYmVlbiBwcm92aWRlZC5cbiAgICogVGhpcyB3aWxsIGluY2x1ZGUgc3RhbmRhcmQgdmFsaWRhdG9ycyBhcyB3ZWxsIGFzIGFueSBjdXN0b20gYHZhbGlkYXRvcnNgXG4gICAqIHRoYXQgbWF5IGJlIHByb3ZpZGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBhdXRvVmFsaWRhdGU/OiBib29sZWFuO1xuXG4gIHF1ZXJ5QnVpbGRlcj86IFF1ZXJ5QnVpbGRlcjtcbiAgdHJhbnNmb3JtQnVpbGRlcj86IFRyYW5zZm9ybUJ1aWxkZXI7XG4gIGRlZmF1bHRRdWVyeU9wdGlvbnM/OiBEZWZhdWx0UmVxdWVzdE9wdGlvbnM8UXVlcnlPcHRpb25zPjtcbiAgZGVmYXVsdFRyYW5zZm9ybU9wdGlvbnM/OiBEZWZhdWx0UmVxdWVzdE9wdGlvbnM8VHJhbnNmb3JtT3B0aW9ucz47XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZENhY2hlIGV4dGVuZHMgRXZlbnRlZCB7fVxuXG5AZXZlbnRlZFxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJlY29yZENhY2hlPFxuICBRdWVyeU9wdGlvbnMgZXh0ZW5kcyBSZXF1ZXN0T3B0aW9ucyA9IFJlY29yZENhY2hlUXVlcnlPcHRpb25zLFxuICBUcmFuc2Zvcm1PcHRpb25zIGV4dGVuZHMgUmVxdWVzdE9wdGlvbnMgPSBSZWNvcmRDYWNoZVRyYW5zZm9ybU9wdGlvbnMsXG4gIFF1ZXJ5QnVpbGRlciA9IFJlY29yZFF1ZXJ5QnVpbGRlcixcbiAgVHJhbnNmb3JtQnVpbGRlciA9IFJlY29yZFRyYW5zZm9ybUJ1aWxkZXJcbj4ge1xuICBwcm90ZWN0ZWQgX25hbWU/OiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfa2V5TWFwPzogUmVjb3JkS2V5TWFwO1xuICBwcm90ZWN0ZWQgX3NjaGVtYTogUmVjb3JkU2NoZW1hO1xuICBwcm90ZWN0ZWQgX3F1ZXJ5QnVpbGRlcjogUXVlcnlCdWlsZGVyO1xuICBwcm90ZWN0ZWQgX3RyYW5zZm9ybUJ1aWxkZXI6IFRyYW5zZm9ybUJ1aWxkZXI7XG4gIHByb3RlY3RlZCBfdmFsaWRhdG9yRm9yPzogVmFsaWRhdG9yRm9yRm48XG4gICAgU3RhbmRhcmRWYWxpZGF0b3IgfCBTdGFuZGFyZFJlY29yZFZhbGlkYXRvclxuICA+O1xuICBwcm90ZWN0ZWQgX2RlZmF1bHRRdWVyeU9wdGlvbnM/OiBEZWZhdWx0UmVxdWVzdE9wdGlvbnM8UXVlcnlPcHRpb25zPjtcbiAgcHJvdGVjdGVkIF9kZWZhdWx0VHJhbnNmb3JtT3B0aW9ucz86IERlZmF1bHRSZXF1ZXN0T3B0aW9uczxUcmFuc2Zvcm1PcHRpb25zPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzZXR0aW5nczogUmVjb3JkQ2FjaGVTZXR0aW5nczxcbiAgICAgIFF1ZXJ5T3B0aW9ucyxcbiAgICAgIFRyYW5zZm9ybU9wdGlvbnMsXG4gICAgICBRdWVyeUJ1aWxkZXIsXG4gICAgICBUcmFuc2Zvcm1CdWlsZGVyXG4gICAgPlxuICApIHtcbiAgICBhc3NlcnQoXG4gICAgICAnUmVjb3JkQ2FjaGUgcmVxdWlyZXMgYSBgc2NoZW1hYCBzZXR0aW5nIHRvIGJlIGNvbnN0cnVjdGVkJyxcbiAgICAgICEhc2V0dGluZ3Muc2NoZW1hXG4gICAgKTtcblxuICAgIGNvbnN0IHsgbmFtZSwgc2NoZW1hLCBrZXlNYXAgfSA9IHNldHRpbmdzO1xuXG4gICAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gICAgdGhpcy5fc2NoZW1hID0gc2NoZW1hO1xuICAgIHRoaXMuX2tleU1hcCA9IGtleU1hcDtcblxuICAgIGxldCB7IHZhbGlkYXRvckZvciwgdmFsaWRhdG9ycyB9ID0gc2V0dGluZ3M7XG4gICAgY29uc3QgYXV0b1ZhbGlkYXRlID0gc2V0dGluZ3MuYXV0b1ZhbGlkYXRlICE9PSBmYWxzZTtcblxuICAgIGlmICghYXV0b1ZhbGlkYXRlKSB7XG4gICAgICBhc3NlcnQoXG4gICAgICAgICdSZWNvcmRDYWNoZSBzaG91bGQgbm90IGJlIGNvbnN0cnVjdGVkIHdpdGggYSBgdmFsaWRhdG9yRm9yYCBvciBgdmFsaWRhdG9yc2AgaWYgYGF1dG9WYWxpZGF0ZSA9PT0gZmFsc2VgJyxcbiAgICAgICAgdmFsaWRhdG9ycyA9PT0gdW5kZWZpbmVkICYmIHZhbGlkYXRvckZvciA9PT0gdW5kZWZpbmVkXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodmFsaWRhdG9yRm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFzc2VydChcbiAgICAgICAgJ1JlY29yZENhY2hlIGNhbiBiZSBjb25zdHJ1Y3RlZCB3aXRoIGVpdGhlciBhIGB2YWxpZGF0b3JGb3JgIG9yIGB2YWxpZGF0b3JzYCwgYnV0IG5vdCBib3RoJyxcbiAgICAgICAgdmFsaWRhdG9ycyA9PT0gdW5kZWZpbmVkXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWxpZGF0b3JGb3IgPSBidWlsZFJlY29yZFZhbGlkYXRvckZvcih7IHZhbGlkYXRvcnMgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdmFsaWRhdG9yRm9yID0gdmFsaWRhdG9yRm9yO1xuXG4gICAgaWYgKFxuICAgICAgc2V0dGluZ3MucXVlcnlCdWlsZGVyID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHNldHRpbmdzLnRyYW5zZm9ybUJ1aWxkZXIgPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgbGV0IG5vcm1hbGl6ZXIgPSBzZXR0aW5ncy5ub3JtYWxpemVyO1xuXG4gICAgICBpZiAobm9ybWFsaXplciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5vcm1hbGl6ZXIgPSBuZXcgU3RhbmRhcmRSZWNvcmROb3JtYWxpemVyKHtcbiAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAga2V5TWFwLFxuICAgICAgICAgIHZhbGlkYXRlSW5wdXRzOiBhdXRvVmFsaWRhdGVcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZXR0aW5ncy5xdWVyeUJ1aWxkZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAoc2V0dGluZ3MgYXMgYW55KS5xdWVyeUJ1aWxkZXIgPSBuZXcgUmVjb3JkUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgbm9ybWFsaXplcixcbiAgICAgICAgICB2YWxpZGF0b3JGb3JcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZXR0aW5ncy50cmFuc2Zvcm1CdWlsZGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgKHNldHRpbmdzIGFzIGFueSkudHJhbnNmb3JtQnVpbGRlciA9IG5ldyBSZWNvcmRUcmFuc2Zvcm1CdWlsZGVyKHtcbiAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgbm9ybWFsaXplcixcbiAgICAgICAgICB2YWxpZGF0b3JGb3JcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fcXVlcnlCdWlsZGVyID0gc2V0dGluZ3MucXVlcnlCdWlsZGVyIGFzIFF1ZXJ5QnVpbGRlcjtcbiAgICB0aGlzLl90cmFuc2Zvcm1CdWlsZGVyID0gc2V0dGluZ3MudHJhbnNmb3JtQnVpbGRlciBhcyBUcmFuc2Zvcm1CdWlsZGVyO1xuXG4gICAgdGhpcy5fZGVmYXVsdFF1ZXJ5T3B0aW9ucyA9IHNldHRpbmdzLmRlZmF1bHRRdWVyeU9wdGlvbnM7XG4gICAgdGhpcy5fZGVmYXVsdFRyYW5zZm9ybU9wdGlvbnMgPSBzZXR0aW5ncy5kZWZhdWx0VHJhbnNmb3JtT3B0aW9ucztcbiAgfVxuXG4gIGdldCBuYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gIH1cblxuICBnZXQgc2NoZW1hKCk6IFJlY29yZFNjaGVtYSB7XG4gICAgcmV0dXJuIHRoaXMuX3NjaGVtYTtcbiAgfVxuXG4gIGdldCBrZXlNYXAoKTogUmVjb3JkS2V5TWFwIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fa2V5TWFwO1xuICB9XG5cbiAgZ2V0IHZhbGlkYXRvckZvcigpOlxuICAgIHwgVmFsaWRhdG9yRm9yRm48U3RhbmRhcmRWYWxpZGF0b3IgfCBTdGFuZGFyZFJlY29yZFZhbGlkYXRvcj5cbiAgICB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRvckZvcjtcbiAgfVxuXG4gIGdldCBxdWVyeUJ1aWxkZXIoKTogUXVlcnlCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5fcXVlcnlCdWlsZGVyO1xuICB9XG5cbiAgZ2V0IHRyYW5zZm9ybUJ1aWxkZXIoKTogVHJhbnNmb3JtQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zZm9ybUJ1aWxkZXI7XG4gIH1cblxuICBnZXQgZGVmYXVsdFF1ZXJ5T3B0aW9ucygpOiBEZWZhdWx0UmVxdWVzdE9wdGlvbnM8UXVlcnlPcHRpb25zPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRRdWVyeU9wdGlvbnM7XG4gIH1cblxuICBzZXQgZGVmYXVsdFF1ZXJ5T3B0aW9ucyhcbiAgICBvcHRpb25zOiBEZWZhdWx0UmVxdWVzdE9wdGlvbnM8UXVlcnlPcHRpb25zPiB8IHVuZGVmaW5lZFxuICApIHtcbiAgICB0aGlzLl9kZWZhdWx0UXVlcnlPcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIGdldCBkZWZhdWx0VHJhbnNmb3JtT3B0aW9ucygpOlxuICAgIHwgRGVmYXVsdFJlcXVlc3RPcHRpb25zPFRyYW5zZm9ybU9wdGlvbnM+XG4gICAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VHJhbnNmb3JtT3B0aW9ucztcbiAgfVxuXG4gIHNldCBkZWZhdWx0VHJhbnNmb3JtT3B0aW9ucyhcbiAgICBvcHRpb25zOiBEZWZhdWx0UmVxdWVzdE9wdGlvbnM8VHJhbnNmb3JtT3B0aW9ucz4gfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgdGhpcy5fZGVmYXVsdFRyYW5zZm9ybU9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgZ2V0UXVlcnlPcHRpb25zKFxuICAgIHF1ZXJ5OiBSZWNvcmRRdWVyeSxcbiAgICBleHByZXNzaW9uPzogUmVjb3JkUXVlcnlFeHByZXNzaW9uXG4gICk6IFF1ZXJ5T3B0aW9ucyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHJlcXVlc3RPcHRpb25zRm9yU291cmNlPFF1ZXJ5T3B0aW9ucz4oXG4gICAgICBbXG4gICAgICAgIHRoaXMuX2RlZmF1bHRRdWVyeU9wdGlvbnMsXG4gICAgICAgIHF1ZXJ5Lm9wdGlvbnMgYXMgUXVlcnlPcHRpb25zIHwgdW5kZWZpbmVkLFxuICAgICAgICBleHByZXNzaW9uPy5vcHRpb25zIGFzIFF1ZXJ5T3B0aW9ucyB8IHVuZGVmaW5lZFxuICAgICAgXSxcbiAgICAgIHRoaXMuX25hbWVcbiAgICApO1xuICB9XG5cbiAgZ2V0VHJhbnNmb3JtT3B0aW9ucyhcbiAgICB0cmFuc2Zvcm06IFJlY29yZFRyYW5zZm9ybSxcbiAgICBvcGVyYXRpb24/OiBSZWNvcmRPcGVyYXRpb25cbiAgKTogVHJhbnNmb3JtT3B0aW9ucyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHJlcXVlc3RPcHRpb25zRm9yU291cmNlKFxuICAgICAgW1xuICAgICAgICB0aGlzLl9kZWZhdWx0VHJhbnNmb3JtT3B0aW9ucyxcbiAgICAgICAgdHJhbnNmb3JtLm9wdGlvbnMgYXMgVHJhbnNmb3JtT3B0aW9ucyB8IHVuZGVmaW5lZCxcbiAgICAgICAgb3BlcmF0aW9uPy5vcHRpb25zIGFzIFRyYW5zZm9ybU9wdGlvbnMgfCB1bmRlZmluZWRcbiAgICAgIF0sXG4gICAgICB0aGlzLl9uYW1lXG4gICAgKTtcbiAgfVxufVxuIl19