@orbit/record-cache
Version:
Orbit base classes used to access and maintain a set of records.
168 lines • 25.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AsyncTransformOperators = void 0;
const records_1 = require("@orbit/records");
const utils_1 = require("@orbit/utils");
exports.AsyncTransformOperators = {
async addRecord(cache, operation,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
options) {
const op = operation;
const { record } = op;
await cache.setRecordAsync(record);
if (cache.keyMap) {
cache.keyMap.pushRecord(record);
}
return record;
},
async updateRecord(cache, operation, options) {
const op = operation;
const { record } = op;
const currentRecord = await cache.getRecordAsync(record);
if (currentRecord === undefined) {
if (options === null || options === void 0 ? void 0 : options.raiseNotFoundExceptions) {
throw new records_1.RecordNotFoundException(record.type, record.id);
}
}
const mergedRecord = (0, records_1.mergeRecords)(currentRecord || null, record);
await cache.setRecordAsync(mergedRecord);
if (cache.keyMap) {
cache.keyMap.pushRecord(mergedRecord);
}
return mergedRecord;
},
async removeRecord(cache, operation, options) {
const op = operation;
const record = await cache.removeRecordAsync(op.record);
if (record === undefined) {
if (options === null || options === void 0 ? void 0 : options.raiseNotFoundExceptions) {
throw new records_1.RecordNotFoundException(op.record.type, op.record.id);
}
}
return record;
},
async replaceKey(cache, operation, options) {
const op = operation;
const currentRecord = await cache.getRecordAsync(op.record);
let record;
if (currentRecord) {
record = (0, utils_1.clone)(currentRecord);
}
else {
record = (0, records_1.cloneRecordIdentity)(op.record);
if (options === null || options === void 0 ? void 0 : options.raiseNotFoundExceptions) {
throw new records_1.RecordNotFoundException(record.type, record.id);
}
}
(0, utils_1.deepSet)(record, ['keys', op.key], op.value);
await cache.setRecordAsync(record);
if (cache.keyMap) {
cache.keyMap.pushRecord(record);
}
return record;
},
async replaceAttribute(cache, operation, options) {
const op = operation;
const currentRecord = await cache.getRecordAsync(op.record);
let record;
if (currentRecord) {
record = (0, utils_1.clone)(currentRecord);
}
else {
record = (0, records_1.cloneRecordIdentity)(op.record);
if (options === null || options === void 0 ? void 0 : options.raiseNotFoundExceptions) {
throw new records_1.RecordNotFoundException(record.type, record.id);
}
}
(0, utils_1.deepSet)(record, ['attributes', op.attribute], op.value);
await cache.setRecordAsync(record);
return record;
},
async addToRelatedRecords(cache, operation, options) {
const op = operation;
const { relationship, relatedRecord } = op;
const currentRecord = await cache.getRecordAsync(op.record);
let record;
if (currentRecord) {
record = (0, utils_1.clone)(currentRecord);
}
else {
record = (0, records_1.cloneRecordIdentity)(op.record);
if (options === null || options === void 0 ? void 0 : options.raiseNotFoundExceptions) {
throw new records_1.RecordNotFoundException(record.type, record.id);
}
}
const relatedRecords = (0, utils_1.deepGet)(record, ['relationships', relationship, 'data']) || [];
if (!(0, records_1.recordsInclude)(relatedRecords, relatedRecord)) {
relatedRecords.push(relatedRecord);
(0, utils_1.deepSet)(record, ['relationships', relationship, 'data'], relatedRecords);
await cache.setRecordAsync(record);
}
return record;
},
async removeFromRelatedRecords(cache, operation, options) {
const op = operation;
const currentRecord = await cache.getRecordAsync(op.record);
const { relationship, relatedRecord } = op;
let record;
if (currentRecord) {
record = (0, utils_1.clone)(currentRecord);
let relatedRecords = (0, utils_1.deepGet)(record, [
'relationships',
relationship,
'data'
]);
if (relatedRecords) {
relatedRecords = relatedRecords.filter((r) => !(0, records_1.equalRecordIdentities)(r, relatedRecord));
if ((0, utils_1.deepSet)(record, ['relationships', relationship, 'data'], relatedRecords)) {
await cache.setRecordAsync(record);
}
}
return record;
}
else {
if (options === null || options === void 0 ? void 0 : options.raiseNotFoundExceptions) {
throw new records_1.RecordNotFoundException(op.record.type, op.record.id);
}
}
},
async replaceRelatedRecords(cache, operation, options) {
const op = operation;
const currentRecord = await cache.getRecordAsync(op.record);
const { relationship, relatedRecords } = op;
let record;
if (currentRecord) {
record = (0, utils_1.clone)(currentRecord);
}
else {
record = (0, records_1.cloneRecordIdentity)(op.record);
if (options === null || options === void 0 ? void 0 : options.raiseNotFoundExceptions) {
throw new records_1.RecordNotFoundException(record.type, record.id);
}
}
if ((0, utils_1.deepSet)(record, ['relationships', relationship, 'data'], relatedRecords)) {
await cache.setRecordAsync(record);
}
return record;
},
async replaceRelatedRecord(cache, operation, options) {
const op = operation;
const currentRecord = await cache.getRecordAsync(op.record);
const { relationship, relatedRecord } = op;
let record;
if (currentRecord) {
record = (0, utils_1.clone)(currentRecord);
}
else {
record = (0, records_1.cloneRecordIdentity)(op.record);
if (options === null || options === void 0 ? void 0 : options.raiseNotFoundExceptions) {
throw new records_1.RecordNotFoundException(record.type, record.id);
}
}
if ((0, utils_1.deepSet)(record, ['relationships', relationship, 'data'], relatedRecord)) {
await cache.setRecordAsync(record);
}
return record;
}
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtdHJhbnNmb3JtLW9wZXJhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9vcGVyYXRvcnMvYXN5bmMtdHJhbnNmb3JtLW9wZXJhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSw0Q0FtQndCO0FBQ3hCLHdDQUE2RDtBQVdoRCxRQUFBLHVCQUF1QixHQUFpQztJQUNuRSxLQUFLLENBQUMsU0FBUyxDQUNiLEtBQTBCLEVBQzFCLFNBQTBCO0lBQzFCLDZEQUE2RDtJQUM3RCxPQUF3QjtRQUV4QixNQUFNLEVBQUUsR0FBRyxTQUErQixDQUFDO1FBQzNDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDdEIsTUFBTSxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRW5DLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNoQixLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNqQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUNoQixLQUEwQixFQUMxQixTQUEwQixFQUMxQixPQUF3QjtRQUV4QixNQUFNLEVBQUUsR0FBRyxTQUFrQyxDQUFDO1FBQzlDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDdEIsTUFBTSxhQUFhLEdBQUcsTUFBTSxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXpELElBQUksYUFBYSxLQUFLLFNBQVMsRUFBRTtZQUMvQixJQUFJLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSx1QkFBdUIsRUFBRTtnQkFDcEMsTUFBTSxJQUFJLGlDQUF1QixDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQzNEO1NBQ0Y7UUFFRCxNQUFNLFlBQVksR0FBRyxJQUFB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QyxjQUFjLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVELE1BQU0sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQzNDLElBQUksTUFBeUIsQ0FBQztRQUU5QixJQUFJLGFBQWEsRUFBRTtZQUNqQixNQUFNLEdBQUcsSUFBQSxhQUFLLEVBQUMsYUFBYSxDQUFDLENBQUM7U0FDL0I7YUFBTTtZQUNMLE1BQU0sR0FBRyxJQUFBLDZCQUFtQixFQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUV4QyxJQUFJLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSx1QkFBdUIsRUFBRTtnQkFDcEMsTUFBTSxJQUFJLGlDQUF1QixDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQzNEO1NBQ0Y7UUFFRCxJQUNFLElBQUEsZUFBTyxFQUFDLE1BQU0sRUFBRSxDQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLEVBQUUsYUFBYSxDQUFDLEVBQ3ZFO1lBQ0EsTUFBTSxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3BDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJ0BvcmJpdC9kYXRhJztcbmltcG9ydCB7XG4gIEFkZFJlY29yZE9wZXJhdGlvbixcbiAgQWRkVG9SZWxhdGVkUmVjb3Jkc09wZXJhdGlvbixcbiAgY2xvbmVSZWNvcmRJZGVudGl0eSxcbiAgZXF1YWxSZWNvcmRJZGVudGl0aWVzLFxuICBJbml0aWFsaXplZFJlY29yZCxcbiAgbWVyZ2VSZWNvcmRzLFxuICBSZWNvcmRJZGVudGl0eSxcbiAgUmVjb3JkTm90Rm91bmRFeGNlcHRpb24sXG4gIFJlY29yZE9wZXJhdGlvbixcbiAgUmVjb3JkT3BlcmF0aW9uUmVzdWx0LFxuICByZWNvcmRzSW5jbHVkZSxcbiAgUmVtb3ZlRnJvbVJlbGF0ZWRSZWNvcmRzT3BlcmF0aW9uLFxuICBSZW1vdmVSZWNvcmRPcGVyYXRpb24sXG4gIFJlcGxhY2VBdHRyaWJ1dGVPcGVyYXRpb24sXG4gIFJlcGxhY2VLZXlPcGVyYXRpb24sXG4gIFJlcGxhY2VSZWxhdGVkUmVjb3JkT3BlcmF0aW9uLFxuICBSZXBsYWNlUmVsYXRlZFJlY29yZHNPcGVyYXRpb24sXG4gIFVwZGF0ZVJlY29yZE9wZXJhdGlvblxufSBmcm9tICdAb3JiaXQvcmVjb3Jkcyc7XG5pbXBvcnQgeyBjbG9uZSwgZGVlcEdldCwgZGVlcFNldCwgRGljdCB9IGZyb20gJ0BvcmJpdC91dGlscyc7XG5pbXBvcnQgeyBBc3luY1JlY29yZEFjY2Vzc29yIH0gZnJvbSAnLi4vcmVjb3JkLWFjY2Vzc29yJztcblxuZXhwb3J0IGludGVyZmFjZSBBc3luY1RyYW5zZm9ybU9wZXJhdG9yIHtcbiAgKFxuICAgIGNhY2hlOiBBc3luY1JlY29yZEFjY2Vzc29yLFxuICAgIG9wZXJhdGlvbjogUmVjb3JkT3BlcmF0aW9uLFxuICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuICApOiBQcm9taXNlPFJlY29yZE9wZXJhdGlvblJlc3VsdD47XG59XG5cbmV4cG9ydCBjb25zdCBBc3luY1RyYW5zZm9ybU9wZXJhdG9yczogRGljdDxBc3luY1RyYW5zZm9ybU9wZXJhdG9yPiA9IHtcbiAgYXN5bmMgYWRkUmVjb3JkKFxuICAgIGNhY2hlOiBBc3luY1JlY29yZEFjY2Vzc29yLFxuICAgIG9wZXJhdGlvbjogUmVjb3JkT3BlcmF0aW9uLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbiAgKTogUHJvbWlzZTxSZWNvcmRPcGVyYXRpb25SZXN1bHQ+IHtcbiAgICBjb25zdCBvcCA9IG9wZXJhdGlvbiBhcyBBZGRSZWNvcmRPcGVyYXRpb247XG4gICAgY29uc3QgeyByZWNvcmQgfSA9IG9wO1xuICAgIGF3YWl0IGNhY2hlLnNldFJlY29yZEFzeW5jKHJlY29yZCk7XG5cbiAgICBpZiAoY2FjaGUua2V5TWFwKSB7XG4gICAgICBjYWNoZS5rZXlNYXAucHVzaFJlY29yZChyZWNvcmQpO1xuICAgIH1cblxuICAgIHJldHVybiByZWNvcmQ7XG4gIH0sXG5cbiAgYXN5bmMgdXBkYXRlUmVjb3JkKFxuICAgIGNhY2hlOiBBc3luY1JlY29yZEFjY2Vzc29yLFxuICAgIG9wZXJhdGlvbjogUmVjb3JkT3BlcmF0aW9uLFxuICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuICApOiBQcm9taXNlPFJlY29yZE9wZXJhdGlvblJlc3VsdD4ge1xuICAgIGNvbnN0IG9wID0gb3BlcmF0aW9uIGFzIFVwZGF0ZVJlY29yZE9wZXJhdGlvbjtcbiAgICBjb25zdCB7IHJlY29yZCB9ID0gb3A7XG4gICAgY29uc3QgY3VycmVudFJlY29yZCA9IGF3YWl0IGNhY2hlLmdldFJlY29yZEFzeW5jKHJlY29yZCk7XG5cbiAgICBpZiAoY3VycmVudFJlY29yZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAob3B0aW9ucz8ucmFpc2VOb3RGb3VuZEV4Y2VwdGlvbnMpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlY29yZE5vdEZvdW5kRXhjZXB0aW9uKHJlY29yZC50eXBlLCByZWNvcmQuaWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1lcmdlZFJlY29yZCA9IG1lcmdlUmVjb3JkcyhjdXJyZW50UmVjb3JkIHx8IG51bGwsIHJlY29yZCk7XG5cbiAgICBhd2FpdCBjYWNoZS5zZXRSZWNvcmRBc3luYyhtZXJnZWRSZWNvcmQpO1xuXG4gICAgaWYgKGNhY2hlLmtleU1hcCkge1xuICAgICAgY2FjaGUua2V5TWFwLnB1c2hSZWNvcmQobWVyZ2VkUmVjb3JkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2VkUmVjb3JkO1xuICB9LFxuXG4gIGFzeW5jIHJlbW92ZVJlY29yZChcbiAgICBjYWNoZTogQXN5bmNSZWNvcmRBY2Nlc3NvcixcbiAgICBvcGVyYXRpb246IFJlY29yZE9wZXJhdGlvbixcbiAgICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbiAgKTogUHJvbWlzZTxSZWNvcmRPcGVyYXRpb25SZXN1bHQ+IHtcbiAgICBjb25zdCBvcCA9IG9wZXJhdGlvbiBhcyBSZW1vdmVSZWNvcmRPcGVyYXRpb247XG4gICAgY29uc3QgcmVjb3JkID0gYXdhaXQgY2FjaGUucmVtb3ZlUmVjb3JkQXN5bmMob3AucmVjb3JkKTtcblxuICAgIGlmIChyZWNvcmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG9wdGlvbnM/LnJhaXNlTm90Rm91bmRFeGNlcHRpb25zKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWNvcmROb3RGb3VuZEV4Y2VwdGlvbihvcC5yZWNvcmQudHlwZSwgb3AucmVjb3JkLmlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVjb3JkO1xuICB9LFxuXG4gIGFzeW5jIHJlcGxhY2VLZXkoXG4gICAgY2FjaGU6IEFzeW5jUmVjb3JkQWNjZXNzb3IsXG4gICAgb3BlcmF0aW9uOiBSZWNvcmRPcGVyYXRpb24sXG4gICAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4gICk6IFByb21pc2U8UmVjb3JkT3BlcmF0aW9uUmVzdWx0PiB7XG4gICAgY29uc3Qgb3AgPSBvcGVyYXRpb24gYXMgUmVwbGFjZUtleU9wZXJhdGlvbjtcbiAgICBjb25zdCBjdXJyZW50UmVjb3JkID0gYXdhaXQgY2FjaGUuZ2V0UmVjb3JkQXN5bmMob3AucmVjb3JkKTtcbiAgICBsZXQgcmVjb3JkOiBJbml0aWFsaXplZFJlY29yZDtcblxuICAgIGlmIChjdXJyZW50UmVjb3JkKSB7XG4gICAgICByZWNvcmQgPSBjbG9uZShjdXJyZW50UmVjb3JkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVjb3JkID0gY2xvbmVSZWNvcmRJZGVudGl0eShvcC5yZWNvcmQpO1xuXG4gICAgICBpZiAob3B0aW9ucz8ucmFpc2VOb3RGb3VuZEV4Y2VwdGlvbnMpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlY29yZE5vdEZvdW5kRXhjZXB0aW9uKHJlY29yZC50eXBlLCByZWNvcmQuaWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGRlZXBTZXQocmVjb3JkLCBbJ2tleXMnLCBvcC5rZXldLCBvcC52YWx1ZSk7XG4gICAgYXdhaXQgY2FjaGUuc2V0UmVjb3JkQXN5bmMocmVjb3JkKTtcblxuICAgIGlmIChjYWNoZS5rZXlNYXApIHtcbiAgICAgIGNhY2hlLmtleU1hcC5wdXNoUmVjb3JkKHJlY29yZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlY29yZDtcbiAgfSxcblxuICBhc3luYyByZXBsYWNlQXR0cmlidXRlKFxuICAgIGNhY2hlOiBBc3luY1JlY29yZEFjY2Vzc29yLFxuICAgIG9wZXJhdGlvbjogUmVjb3JkT3BlcmF0aW9uLFxuICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuICApOiBQcm9taXNlPFJlY29yZE9wZXJhdGlvblJlc3VsdD4ge1xuICAgIGNvbnN0IG9wID0gb3BlcmF0aW9uIGFzIFJlcGxhY2VBdHRyaWJ1dGVPcGVyYXRpb247XG4gICAgY29uc3QgY3VycmVudFJlY29yZCA9IGF3YWl0IGNhY2hlLmdldFJlY29yZEFzeW5jKG9wLnJlY29yZCk7XG4gICAgbGV0IHJlY29yZDogSW5pdGlhbGl6ZWRSZWNvcmQ7XG5cbiAgICBpZiAoY3VycmVudFJlY29yZCkge1xuICAgICAgcmVjb3JkID0gY2xvbmUoY3VycmVudFJlY29yZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlY29yZCA9IGNsb25lUmVjb3JkSWRlbnRpdHkob3AucmVjb3JkKTtcblxuICAgICAgaWYgKG9wdGlvbnM/LnJhaXNlTm90Rm91bmRFeGNlcHRpb25zKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWNvcmROb3RGb3VuZEV4Y2VwdGlvbihyZWNvcmQudHlwZSwgcmVjb3JkLmlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkZWVwU2V0KHJlY29yZCwgWydhdHRyaWJ1dGVzJywgb3AuYXR0cmlidXRlXSwgb3AudmFsdWUpO1xuICAgIGF3YWl0IGNhY2hlLnNldFJlY29yZEFzeW5jKHJlY29yZCk7XG5cbiAgICByZXR1cm4gcmVjb3JkO1xuICB9LFxuXG4gIGFzeW5jIGFkZFRvUmVsYXRlZFJlY29yZHMoXG4gICAgY2FjaGU6IEFzeW5jUmVjb3JkQWNjZXNzb3IsXG4gICAgb3BlcmF0aW9uOiBSZWNvcmRPcGVyYXRpb24sXG4gICAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4gICk6IFByb21pc2U8UmVjb3JkT3BlcmF0aW9uUmVzdWx0PiB7XG4gICAgY29uc3Qgb3AgPSBvcGVyYXRpb24gYXMgQWRkVG9SZWxhdGVkUmVjb3Jkc09wZXJhdGlvbjtcbiAgICBjb25zdCB7IHJlbGF0aW9uc2hpcCwgcmVsYXRlZFJlY29yZCB9ID0gb3A7XG4gICAgY29uc3QgY3VycmVudFJlY29yZCA9IGF3YWl0IGNhY2hlLmdldFJlY29yZEFzeW5jKG9wLnJlY29yZCk7XG4gICAgbGV0IHJlY29yZDogSW5pdGlhbGl6ZWRSZWNvcmQ7XG5cbiAgICBpZiAoY3VycmVudFJlY29yZCkge1xuICAgICAgcmVjb3JkID0gY2xvbmUoY3VycmVudFJlY29yZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlY29yZCA9IGNsb25lUmVjb3JkSWRlbnRpdHkob3AucmVjb3JkKTtcblxuICAgICAgaWYgKG9wdGlvbnM/LnJhaXNlTm90Rm91bmRFeGNlcHRpb25zKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWNvcmROb3RGb3VuZEV4Y2VwdGlvbihyZWNvcmQudHlwZSwgcmVjb3JkLmlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZWxhdGVkUmVjb3JkczogUmVjb3JkSWRlbnRpdHlbXSA9XG4gICAgICBkZWVwR2V0KHJlY29yZCwgWydyZWxhdGlvbnNoaXBzJywgcmVsYXRpb25zaGlwLCAnZGF0YSddKSB8fCBbXTtcblxuICAgIGlmICghcmVjb3Jkc0luY2x1ZGUocmVsYXRlZFJlY29yZHMsIHJlbGF0ZWRSZWNvcmQpKSB7XG4gICAgICByZWxhdGVkUmVjb3Jkcy5wdXNoKHJlbGF0ZWRSZWNvcmQpO1xuXG4gICAgICBkZWVwU2V0KHJlY29yZCwgWydyZWxhdGlvbnNoaXBzJywgcmVsYXRpb25zaGlwLCAnZGF0YSddLCByZWxhdGVkUmVjb3Jkcyk7XG4gICAgICBhd2FpdCBjYWNoZS5zZXRSZWNvcmRBc3luYyhyZWNvcmQpO1xuICAgIH1cblxuICAgIHJldHVybiByZWNvcmQ7XG4gIH0sXG5cbiAgYXN5bmMgcmVtb3ZlRnJvbVJlbGF0ZWRSZWNvcmRzKFxuICAgIGNhY2hlOiBBc3luY1JlY29yZEFjY2Vzc29yLFxuICAgIG9wZXJhdGlvbjogUmVjb3JkT3BlcmF0aW9uLFxuICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuICApOiBQcm9taXNlPFJlY29yZE9wZXJhdGlvblJlc3VsdD4ge1xuICAgIGNvbnN0IG9wID0gb3BlcmF0aW9uIGFzIFJlbW92ZUZyb21SZWxhdGVkUmVjb3Jkc09wZXJhdGlvbjtcbiAgICBjb25zdCBjdXJyZW50UmVjb3JkID0gYXdhaXQgY2FjaGUuZ2V0UmVjb3JkQXN5bmMob3AucmVjb3JkKTtcbiAgICBjb25zdCB7IHJlbGF0aW9uc2hpcCwgcmVsYXRlZFJlY29yZCB9ID0gb3A7XG4gICAgbGV0IHJlY29yZDogSW5pdGlhbGl6ZWRSZWNvcmQ7XG5cbiAgICBpZiAoY3VycmVudFJlY29yZCkge1xuICAgICAgcmVjb3JkID0gY2xvbmUoY3VycmVudFJlY29yZCk7XG4gICAgICBsZXQgcmVsYXRlZFJlY29yZHM6IFJlY29yZElkZW50aXR5W10gPSBkZWVwR2V0KHJlY29yZCwgW1xuICAgICAgICAncmVsYXRpb25zaGlwcycsXG4gICAgICAgIHJlbGF0aW9uc2hpcCxcbiAgICAgICAgJ2RhdGEnXG4gICAgICBdKTtcbiAgICAgIGlmIChyZWxhdGVkUmVjb3Jkcykge1xuICAgICAgICByZWxhdGVkUmVjb3JkcyA9IHJlbGF0ZWRSZWNvcmRzLmZpbHRlcihcbiAgICAgICAgICAocikgPT4gIWVxdWFsUmVjb3JkSWRlbnRpdGllcyhyLCByZWxhdGVkUmVjb3JkKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBkZWVwU2V0KFxuICAgICAgICAgICAgcmVjb3JkLFxuICAgICAgICAgICAgWydyZWxhdGlvbnNoaXBzJywgcmVsYXRpb25zaGlwLCAnZGF0YSddLFxuICAgICAgICAgICAgcmVsYXRlZFJlY29yZHNcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIGF3YWl0IGNhY2hlLnNldFJlY29yZEFzeW5jKHJlY29yZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChvcHRpb25zPy5yYWlzZU5vdEZvdW5kRXhjZXB0aW9ucykge1xuICAgICAgICB0aHJvdyBuZXcgUmVjb3JkTm90Rm91bmRFeGNlcHRpb24ob3AucmVjb3JkLnR5cGUsIG9wLnJlY29yZC5pZCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGFzeW5jIHJlcGxhY2VSZWxhdGVkUmVjb3JkcyhcbiAgICBjYWNoZTogQXN5bmNSZWNvcmRBY2Nlc3NvcixcbiAgICBvcGVyYXRpb246IFJlY29yZE9wZXJhdGlvbixcbiAgICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbiAgKTogUHJvbWlzZTxSZWNvcmRPcGVyYXRpb25SZXN1bHQ+IHtcbiAgICBjb25zdCBvcCA9IG9wZXJhdGlvbiBhcyBSZXBsYWNlUmVsYXRlZFJlY29yZHNPcGVyYXRpb247XG4gICAgY29uc3QgY3VycmVudFJlY29yZCA9IGF3YWl0IGNhY2hlLmdldFJlY29yZEFzeW5jKG9wLnJlY29yZCk7XG4gICAgY29uc3QgeyByZWxhdGlvbnNoaXAsIHJlbGF0ZWRSZWNvcmRzIH0gPSBvcDtcbiAgICBsZXQgcmVjb3JkOiBJbml0aWFsaXplZFJlY29yZDtcblxuICAgIGlmIChjdXJyZW50UmVjb3JkKSB7XG4gICAgICByZWNvcmQgPSBjbG9uZShjdXJyZW50UmVjb3JkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVjb3JkID0gY2xvbmVSZWNvcmRJZGVudGl0eShvcC5yZWNvcmQpO1xuXG4gICAgICBpZiAob3B0aW9ucz8ucmFpc2VOb3RGb3VuZEV4Y2VwdGlvbnMpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlY29yZE5vdEZvdW5kRXhjZXB0aW9uKHJlY29yZC50eXBlLCByZWNvcmQuaWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGRlZXBTZXQocmVjb3JkLCBbJ3JlbGF0aW9uc2hpcHMnLCByZWxhdGlvbnNoaXAsICdkYXRhJ10sIHJlbGF0ZWRSZWNvcmRzKVxuICAgICkge1xuICAgICAgYXdhaXQgY2FjaGUuc2V0UmVjb3JkQXN5bmMocmVjb3JkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVjb3JkO1xuICB9LFxuXG4gIGFzeW5jIHJlcGxhY2VSZWxhdGVkUmVjb3JkKFxuICAgIGNhY2hlOiBBc3luY1JlY29yZEFjY2Vzc29yLFxuICAgIG9wZXJhdGlvbjogUmVjb3JkT3BlcmF0aW9uLFxuICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuICApOiBQcm9taXNlPFJlY29yZE9wZXJhdGlvblJlc3VsdD4ge1xuICAgIGNvbnN0IG9wID0gb3BlcmF0aW9uIGFzIFJlcGxhY2VSZWxhdGVkUmVjb3JkT3BlcmF0aW9uO1xuICAgIGNvbnN0IGN1cnJlbnRSZWNvcmQgPSBhd2FpdCBjYWNoZS5nZXRSZWNvcmRBc3luYyhvcC5yZWNvcmQpO1xuICAgIGNvbnN0IHsgcmVsYXRpb25zaGlwLCByZWxhdGVkUmVjb3JkIH0gPSBvcDtcbiAgICBsZXQgcmVjb3JkOiBJbml0aWFsaXplZFJlY29yZDtcblxuICAgIGlmIChjdXJyZW50UmVjb3JkKSB7XG4gICAgICByZWNvcmQgPSBjbG9uZShjdXJyZW50UmVjb3JkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVjb3JkID0gY2xvbmVSZWNvcmRJZGVudGl0eShvcC5yZWNvcmQpO1xuXG4gICAgICBpZiAob3B0aW9ucz8ucmFpc2VOb3RGb3VuZEV4Y2VwdGlvbnMpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlY29yZE5vdEZvdW5kRXhjZXB0aW9uKHJlY29yZC50eXBlLCByZWNvcmQuaWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGRlZXBTZXQocmVjb3JkLCBbJ3JlbGF0aW9uc2hpcHMnLCByZWxhdGlvbnNoaXAsICdkYXRhJ10sIHJlbGF0ZWRSZWNvcmQpXG4gICAgKSB7XG4gICAgICBhd2FpdCBjYWNoZS5zZXRSZWNvcmRBc3luYyhyZWNvcmQpO1xuICAgIH1cblxuICAgIHJldHVybiByZWNvcmQ7XG4gIH1cbn07XG4iXX0=