@orbit/records
Version:
A flexible data access and synchronization layer.
89 lines • 13.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.RecordSource = void 0;
const core_1 = require("@orbit/core");
const data_1 = require("@orbit/data");
const record_query_builder_1 = require("./record-query-builder");
const record_transform_builder_1 = require("./record-transform-builder");
const record_validator_builder_1 = require("./record-validators/record-validator-builder");
const standard_record_normalizer_1 = require("./standard-record-normalizer");
const { assert } = core_1.Orbit;
/**
* Abstract base class for record-based sources.
*/
class RecordSource extends data_1.Source {
constructor(settings) {
const autoActivate = settings.autoActivate === undefined || settings.autoActivate;
const { schema } = settings;
let { validatorFor, validators } = settings;
const autoValidate = settings.autoValidate !== false;
if (!autoValidate) {
assert('RecordSource should not be constructed with a `validatorFor` or `validators` if `autoValidate === false`', validators === undefined && validatorFor === undefined);
}
else if (validatorFor !== undefined) {
assert('RecordSource can be constructed with either a `validatorFor` or `validators`, but not both', validators === undefined);
}
else {
validatorFor = (0, record_validator_builder_1.buildRecordValidatorFor)({ validators });
}
assert("RecordSource's `schema` must be specified in `settings.schema` constructor argument", !!schema);
if (settings.queryBuilder === undefined ||
settings.transformBuilder === undefined) {
let { normalizer } = settings;
if (normalizer === undefined) {
normalizer = new standard_record_normalizer_1.StandardRecordNormalizer({
schema,
keyMap: settings.keyMap,
validateInputs: autoValidate
});
}
if (settings.queryBuilder === undefined) {
settings.queryBuilder = new record_query_builder_1.RecordQueryBuilder({
schema,
normalizer,
validatorFor
});
}
if (settings.transformBuilder === undefined) {
settings.transformBuilder = new record_transform_builder_1.RecordTransformBuilder({
schema,
normalizer,
validatorFor
});
}
}
super({ ...settings, autoActivate: false });
this._schema = schema;
this._keyMap = settings.keyMap;
this._validatorFor = validatorFor;
if (settings.autoUpgrade === undefined || settings.autoUpgrade) {
this._schema.on('upgrade', () => this.upgrade());
}
if (autoActivate) {
this.activate();
}
}
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;
}
/**
* Upgrade source as part of a schema upgrade.
*/
async upgrade() {
return;
}
}
exports.RecordSource = RecordSource;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZWNvcmQtc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNDQUFvQztBQUNwQyxzQ0FLcUI7QUFLckIsaUVBQTREO0FBRTVELHlFQUFvRTtBQUNwRSwyRkFBdUY7QUFFdkYsNkVBQXdFO0FBRXhFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxZQUFLLENBQUM7QUF1RHpCOztHQUVHO0FBQ0gsTUFBc0IsWUFLcEIsU0FBUSxhQUFzQjtJQVc5QixZQUFZLFFBQThDO1FBQ3hELE1BQU0sWUFBWSxHQUNoQixRQUFRLENBQUMsWUFBWSxLQUFLLFNBQVMsSUFBSSxRQUFRLENBQUMsWUFBWSxDQUFDO1FBRS9ELE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUM7UUFDNUIsSUFBSSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsR0FBRyxRQUFRLENBQUM7UUFFNUMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFlBQVksS0FBSyxLQUFLLENBQUM7UUFFckQsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNqQixNQUFNLENBQ0osMEdBQTBHLEVBQzFHLFVBQVUsS0FBSyxTQUFTLElBQUksWUFBWSxLQUFLLFNBQVMsQ0FDdkQsQ0FBQztTQUNIO2FBQU0sSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFO1lBQ3JDLE1BQU0sQ0FDSiw0RkFBNEYsRUFDNUYsVUFBVSxLQUFLLFNBQVMsQ0FDekIsQ0FBQztTQUNIO2FBQU07WUFDTCxZQUFZLEdBQUcsSUFBQSxrREFBdUIsRUFBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7U0FDeEQ7UUFFRCxNQUFNLENBQ0oscUZBQXFGLEVBQ3JGLENBQUMsQ0FBQyxNQUFNLENBQ1QsQ0FBQztRQUVGLElBQ0UsUUFBUSxDQUFDLFlBQVksS0FBSyxTQUFTO1lBQ25DLFFBQVEsQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQ3ZDO1lBQ0EsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLFFBQVEsQ0FBQztZQUU5QixJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUU7Z0JBQzVCLFVBQVUsR0FBRyxJQUFJLHFEQUF3QixDQUFDO29CQUN4QyxNQUFNO29CQUNOLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTTtvQkFDdkIsY0FBYyxFQUFFLFlBQVk7aUJBQzdCLENBQUMsQ0FBQzthQUNKO1lBRUQsSUFBSSxRQUFRLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRTtnQkFDdEMsUUFBZ0IsQ0FBQyxZQUFZLEdBQUcsSUFBSSx5Q0FBa0IsQ0FBQztvQkFDdEQsTUFBTTtvQkFDTixVQUFVO29CQUNWLFlBQVk7aUJBQ2IsQ0FBQyxDQUFDO2FBQ0o7WUFFRCxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7Z0JBQzFDLFFBQWdCLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxpREFBc0IsQ0FBQztvQkFDOUQsTUFBTTtvQkFDTixVQUFVO29CQUNWLFlBQVk7aUJBQ2IsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtRQUVELEtBQUssQ0FBQyxFQUFFLEdBQUcsUUFBUSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBRTVDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUMvQixJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQztRQUVsQyxJQUFJLFFBQVEsQ0FBQyxXQUFXLEtBQUssU0FBUyxJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUU7WUFDOUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQ2xEO1FBRUQsSUFBSSxZQUFZLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2pCO0lBQ0gsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFHZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLE9BQU87UUFDWCxPQUFPO0lBQ1QsQ0FBQztDQUNGO0FBdEhELG9DQXNIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9yYml0IH0gZnJvbSAnQG9yYml0L2NvcmUnO1xuaW1wb3J0IHtcbiAgUmVxdWVzdE9wdGlvbnMsXG4gIFNvdXJjZSxcbiAgU291cmNlQ2xhc3MsXG4gIFNvdXJjZVNldHRpbmdzXG59IGZyb20gJ0BvcmJpdC9kYXRhJztcbmltcG9ydCB7IERpY3QgfSBmcm9tICdAb3JiaXQvdXRpbHMnO1xuaW1wb3J0IHsgU3RhbmRhcmRWYWxpZGF0b3IsIFZhbGlkYXRvckZvckZuIH0gZnJvbSAnQG9yYml0L3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgUmVjb3JkS2V5TWFwIH0gZnJvbSAnLi9yZWNvcmQta2V5LW1hcCc7XG5pbXBvcnQgeyBSZWNvcmROb3JtYWxpemVyIH0gZnJvbSAnLi9yZWNvcmQtbm9ybWFsaXplcic7XG5pbXBvcnQgeyBSZWNvcmRRdWVyeUJ1aWxkZXIgfSBmcm9tICcuL3JlY29yZC1xdWVyeS1idWlsZGVyJztcbmltcG9ydCB7IFJlY29yZFNjaGVtYSB9IGZyb20gJy4vcmVjb3JkLXNjaGVtYSc7XG5pbXBvcnQgeyBSZWNvcmRUcmFuc2Zvcm1CdWlsZGVyIH0gZnJvbSAnLi9yZWNvcmQtdHJhbnNmb3JtLWJ1aWxkZXInO1xuaW1wb3J0IHsgYnVpbGRSZWNvcmRWYWxpZGF0b3JGb3IgfSBmcm9tICcuL3JlY29yZC12YWxpZGF0b3JzL3JlY29yZC12YWxpZGF0b3ItYnVpbGRlcic7XG5pbXBvcnQgeyBTdGFuZGFyZFJlY29yZFZhbGlkYXRvciB9IGZyb20gJy4vcmVjb3JkLXZhbGlkYXRvcnMvc3RhbmRhcmQtcmVjb3JkLXZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgU3RhbmRhcmRSZWNvcmROb3JtYWxpemVyIH0gZnJvbSAnLi9zdGFuZGFyZC1yZWNvcmQtbm9ybWFsaXplcic7XG5cbmNvbnN0IHsgYXNzZXJ0IH0gPSBPcmJpdDtcblxuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRTb3VyY2VRdWVyeU9wdGlvbnMgZXh0ZW5kcyBSZXF1ZXN0T3B0aW9ucyB7XG4gIHJhaXNlTm90Rm91bmRFeGNlcHRpb25zPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRTb3VyY2VTZXR0aW5nczxcbiAgUU8gZXh0ZW5kcyBSZXF1ZXN0T3B0aW9ucyA9IFJlY29yZFNvdXJjZVF1ZXJ5T3B0aW9ucyxcbiAgVE8gZXh0ZW5kcyBSZXF1ZXN0T3B0aW9ucyA9IFJlcXVlc3RPcHRpb25zLFxuICBRQiA9IFJlY29yZFF1ZXJ5QnVpbGRlcixcbiAgVEIgPSBSZWNvcmRUcmFuc2Zvcm1CdWlsZGVyXG4+IGV4dGVuZHMgU291cmNlU2V0dGluZ3M8UU8sIFRPLCBRQiwgVEI+IHtcbiAgc2NoZW1hOiBSZWNvcmRTY2hlbWE7XG4gIGtleU1hcD86IFJlY29yZEtleU1hcDtcbiAgbm9ybWFsaXplcj86IFJlY29yZE5vcm1hbGl6ZXI7XG5cbiAgLyoqXG4gICAqIEEgY29tcGxldGVseSBjdXN0b20gc2V0IG9mIHZhbGlkYXRvcnMuXG4gICAqL1xuICB2YWxpZGF0b3JGb3I/OiBWYWxpZGF0b3JGb3JGbjxTdGFuZGFyZFZhbGlkYXRvciB8IFN0YW5kYXJkUmVjb3JkVmFsaWRhdG9yPjtcblxuICAvKipcbiAgICogQ3VzdG9tIHZhbGlkYXRvcnMgdG8gb3ZlcnJpZGUsIGFuZCBiZSBtZXJnZWQgd2l0aCwgdGhlIHN0YW5kYXJkIG9uZXMgd2hpY2hcbiAgICogd2lsbCBiZSBidWlsdCBhcyBsb25nIGFzIGBhdXRvVmFsaWRhdGUgIT09IGZhbHNlYC5cbiAgICovXG4gIHZhbGlkYXRvcnM/OiBEaWN0PFN0YW5kYXJkVmFsaWRhdG9yIHwgU3RhbmRhcmRSZWNvcmRWYWxpZGF0b3I+O1xuXG4gIC8qKlxuICAgKiBBdXRvbWF0aWNhbGx5IHZhbGlkYXRlIHRoZSBjb250ZW50cyBvZiBhbGwgcmVxdWVzdHMuXG4gICAqXG4gICAqIElmIHRydWUsIGJ1aWxkcyBhIGB2YWxpZGF0b3JGb3JgIGZ1bmN0aW9uIGlmIG9uZSBoYXMgbm90IGJlZW4gcHJvdmlkZWQuXG4gICAqIFRoaXMgd2lsbCBpbmNsdWRlIHN0YW5kYXJkIHZhbGlkYXRvcnMgYXMgd2VsbCBhcyBhbnkgY3VzdG9tIGB2YWxpZGF0b3JzYFxuICAgKiB0aGF0IG1heSBiZSBwcm92aWRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXV0b1ZhbGlkYXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQXV0b21hdGljYWxseSB1cGdyYWRlIHRoaXMgc291cmNlIHdoZW5ldmVyIGl0cyBzY2hlbWEgaXMgdXBncmFkZWQuXG4gICAqXG4gICAqIE92ZXJyaWRlIHRoZSBgdXBncmFkZWAgbWV0aG9kIHRvIHByb3ZpZGUgYW4gdXBncmFkZSBpbXBsZW1lbnRhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXV0b1VwZ3JhZGU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBSZWNvcmRTb3VyY2VDbGFzczxcbiAgUU8gZXh0ZW5kcyBSZXF1ZXN0T3B0aW9ucyA9IFJlY29yZFNvdXJjZVF1ZXJ5T3B0aW9ucyxcbiAgVE8gZXh0ZW5kcyBSZXF1ZXN0T3B0aW9ucyA9IFJlcXVlc3RPcHRpb25zLFxuICBRQiA9IFJlY29yZFF1ZXJ5QnVpbGRlcixcbiAgVEIgPSBSZWNvcmRUcmFuc2Zvcm1CdWlsZGVyXG4+ID0gU291cmNlQ2xhc3M8UU8sIFRPLCBRQiwgVEI+O1xuXG4vKipcbiAqIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIHJlY29yZC1iYXNlZCBzb3VyY2VzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUmVjb3JkU291cmNlPFxuICBRTyBleHRlbmRzIFJlcXVlc3RPcHRpb25zID0gUmVjb3JkU291cmNlUXVlcnlPcHRpb25zLFxuICBUTyBleHRlbmRzIFJlcXVlc3RPcHRpb25zID0gUmVxdWVzdE9wdGlvbnMsXG4gIFFCID0gUmVjb3JkUXVlcnlCdWlsZGVyLFxuICBUQiA9IFJlY29yZFRyYW5zZm9ybUJ1aWxkZXJcbj4gZXh0ZW5kcyBTb3VyY2U8UU8sIFRPLCBRQiwgVEI+IHtcbiAgcHJvdGVjdGVkIF9rZXlNYXA/OiBSZWNvcmRLZXlNYXA7XG4gIHByb3RlY3RlZCBfc2NoZW1hOiBSZWNvcmRTY2hlbWE7XG4gIHByb3RlY3RlZCBfdmFsaWRhdG9yRm9yPzogVmFsaWRhdG9yRm9yRm48XG4gICAgU3RhbmRhcmRWYWxpZGF0b3IgfCBTdGFuZGFyZFJlY29yZFZhbGlkYXRvclxuICA+O1xuXG4gIC8vIFVubGlrZSBpbiBgU291cmNlYCwgYnVpbGRlcnMgd2lsbCBhbHdheXMgYmUgc2V0XG4gIHByb3RlY3RlZCBfcXVlcnlCdWlsZGVyITogUUI7XG4gIHByb3RlY3RlZCBfdHJhbnNmb3JtQnVpbGRlciE6IFRCO1xuXG4gIGNvbnN0cnVjdG9yKHNldHRpbmdzOiBSZWNvcmRTb3VyY2VTZXR0aW5nczxRTywgVE8sIFFCLCBUQj4pIHtcbiAgICBjb25zdCBhdXRvQWN0aXZhdGUgPVxuICAgICAgc2V0dGluZ3MuYXV0b0FjdGl2YXRlID09PSB1bmRlZmluZWQgfHwgc2V0dGluZ3MuYXV0b0FjdGl2YXRlO1xuXG4gICAgY29uc3QgeyBzY2hlbWEgfSA9IHNldHRpbmdzO1xuICAgIGxldCB7IHZhbGlkYXRvckZvciwgdmFsaWRhdG9ycyB9ID0gc2V0dGluZ3M7XG5cbiAgICBjb25zdCBhdXRvVmFsaWRhdGUgPSBzZXR0aW5ncy5hdXRvVmFsaWRhdGUgIT09IGZhbHNlO1xuXG4gICAgaWYgKCFhdXRvVmFsaWRhdGUpIHtcbiAgICAgIGFzc2VydChcbiAgICAgICAgJ1JlY29yZFNvdXJjZSBzaG91bGQgbm90IGJlIGNvbnN0cnVjdGVkIHdpdGggYSBgdmFsaWRhdG9yRm9yYCBvciBgdmFsaWRhdG9yc2AgaWYgYGF1dG9WYWxpZGF0ZSA9PT0gZmFsc2VgJyxcbiAgICAgICAgdmFsaWRhdG9ycyA9PT0gdW5kZWZpbmVkICYmIHZhbGlkYXRvckZvciA9PT0gdW5kZWZpbmVkXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodmFsaWRhdG9yRm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFzc2VydChcbiAgICAgICAgJ1JlY29yZFNvdXJjZSBjYW4gYmUgY29uc3RydWN0ZWQgd2l0aCBlaXRoZXIgYSBgdmFsaWRhdG9yRm9yYCBvciBgdmFsaWRhdG9yc2AsIGJ1dCBub3QgYm90aCcsXG4gICAgICAgIHZhbGlkYXRvcnMgPT09IHVuZGVmaW5lZFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsaWRhdG9yRm9yID0gYnVpbGRSZWNvcmRWYWxpZGF0b3JGb3IoeyB2YWxpZGF0b3JzIH0pO1xuICAgIH1cblxuICAgIGFzc2VydChcbiAgICAgIFwiUmVjb3JkU291cmNlJ3MgYHNjaGVtYWAgbXVzdCBiZSBzcGVjaWZpZWQgaW4gYHNldHRpbmdzLnNjaGVtYWAgY29uc3RydWN0b3IgYXJndW1lbnRcIixcbiAgICAgICEhc2NoZW1hXG4gICAgKTtcblxuICAgIGlmIChcbiAgICAgIHNldHRpbmdzLnF1ZXJ5QnVpbGRlciA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICBzZXR0aW5ncy50cmFuc2Zvcm1CdWlsZGVyID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGxldCB7IG5vcm1hbGl6ZXIgfSA9IHNldHRpbmdzO1xuXG4gICAgICBpZiAobm9ybWFsaXplciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5vcm1hbGl6ZXIgPSBuZXcgU3RhbmRhcmRSZWNvcmROb3JtYWxpemVyKHtcbiAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAga2V5TWFwOiBzZXR0aW5ncy5rZXlNYXAsXG4gICAgICAgICAgdmFsaWRhdGVJbnB1dHM6IGF1dG9WYWxpZGF0ZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNldHRpbmdzLnF1ZXJ5QnVpbGRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIChzZXR0aW5ncyBhcyBhbnkpLnF1ZXJ5QnVpbGRlciA9IG5ldyBSZWNvcmRRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICBub3JtYWxpemVyLFxuICAgICAgICAgIHZhbGlkYXRvckZvclxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNldHRpbmdzLnRyYW5zZm9ybUJ1aWxkZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAoc2V0dGluZ3MgYXMgYW55KS50cmFuc2Zvcm1CdWlsZGVyID0gbmV3IFJlY29yZFRyYW5zZm9ybUJ1aWxkZXIoe1xuICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICBub3JtYWxpemVyLFxuICAgICAgICAgIHZhbGlkYXRvckZvclxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdXBlcih7IC4uLnNldHRpbmdzLCBhdXRvQWN0aXZhdGU6IGZhbHNlIH0pO1xuXG4gICAgdGhpcy5fc2NoZW1hID0gc2NoZW1hO1xuICAgIHRoaXMuX2tleU1hcCA9IHNldHRpbmdzLmtleU1hcDtcbiAgICB0aGlzLl92YWxpZGF0b3JGb3IgPSB2YWxpZGF0b3JGb3I7XG5cbiAgICBpZiAoc2V0dGluZ3MuYXV0b1VwZ3JhZGUgPT09IHVuZGVmaW5lZCB8fCBzZXR0aW5ncy5hdXRvVXBncmFkZSkge1xuICAgICAgdGhpcy5fc2NoZW1hLm9uKCd1cGdyYWRlJywgKCkgPT4gdGhpcy51cGdyYWRlKCkpO1xuICAgIH1cblxuICAgIGlmIChhdXRvQWN0aXZhdGUpIHtcbiAgICAgIHRoaXMuYWN0aXZhdGUoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2NoZW1hKCk6IFJlY29yZFNjaGVtYSB7XG4gICAgcmV0dXJuIHRoaXMuX3NjaGVtYTtcbiAgfVxuXG4gIGdldCBrZXlNYXAoKTogUmVjb3JkS2V5TWFwIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fa2V5TWFwO1xuICB9XG5cbiAgZ2V0IHZhbGlkYXRvckZvcigpOlxuICAgIHwgVmFsaWRhdG9yRm9yRm48U3RhbmRhcmRWYWxpZGF0b3IgfCBTdGFuZGFyZFJlY29yZFZhbGlkYXRvcj5cbiAgICB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRvckZvcjtcbiAgfVxuXG4gIGdldCBxdWVyeUJ1aWxkZXIoKTogUUIge1xuICAgIHJldHVybiB0aGlzLl9xdWVyeUJ1aWxkZXI7XG4gIH1cblxuICBnZXQgdHJhbnNmb3JtQnVpbGRlcigpOiBUQiB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zZm9ybUJ1aWxkZXI7XG4gIH1cblxuICAvKipcbiAgICogVXBncmFkZSBzb3VyY2UgYXMgcGFydCBvZiBhIHNjaGVtYSB1cGdyYWRlLlxuICAgKi9cbiAgYXN5bmMgdXBncmFkZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm47XG4gIH1cbn1cbiJdfQ==