UNPKG

@orbit/record-cache

Version:

Orbit base classes used to access and maintain a set of records.

168 lines 24.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SyncTransformOperators = void 0; const records_1 = require("@orbit/records"); const utils_1 = require("@orbit/utils"); exports.SyncTransformOperators = { addRecord(cache, operation, // eslint-disable-next-line @typescript-eslint/no-unused-vars options) { const op = operation; const { record } = op; cache.setRecordSync(record); if (cache.keyMap) { cache.keyMap.pushRecord(record); } return record; }, updateRecord(cache, operation, options) { const op = operation; const { record } = op; const currentRecord = cache.getRecordSync(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); cache.setRecordSync(mergedRecord); if (cache.keyMap) { cache.keyMap.pushRecord(mergedRecord); } return mergedRecord; }, removeRecord(cache, operation, options) { const op = operation; const record = cache.removeRecordSync(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; }, replaceKey(cache, operation, options) { const op = operation; const currentRecord = cache.getRecordSync(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); cache.setRecordSync(record); if (cache.keyMap) { cache.keyMap.pushRecord(record); } return record; }, replaceAttribute(cache, operation, options) { const op = operation; const currentRecord = cache.getRecordSync(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); cache.setRecordSync(record); return record; }, addToRelatedRecords(cache, operation, options) { const op = operation; const { relationship, relatedRecord } = op; const currentRecord = cache.getRecordSync(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); cache.setRecordSync(record); } return record; }, removeFromRelatedRecords(cache, operation, options) { const op = operation; const currentRecord = cache.getRecordSync(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)) { cache.setRecordSync(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); } } }, replaceRelatedRecords(cache, operation, options) { const op = operation; const currentRecord = cache.getRecordSync(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)) { cache.setRecordSync(record); } return record; }, replaceRelatedRecord(cache, operation, options) { const op = operation; const currentRecord = cache.getRecordSync(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)) { cache.setRecordSync(record); } return record; } }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy10cmFuc2Zvcm0tb3BlcmF0b3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29wZXJhdG9ycy9zeW5jLXRyYW5zZm9ybS1vcGVyYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsNENBbUJ3QjtBQUN4Qix3Q0FBNkQ7QUFXaEQsUUFBQSxzQkFBc0IsR0FBZ0M7SUFDakUsU0FBUyxDQUNQLEtBQXlCLEVBQ3pCLFNBQTBCO0lBQzFCLDZEQUE2RDtJQUM3RCxPQUF3QjtRQUV4QixNQUFNLEVBQUUsR0FBRyxTQUErQixDQUFDO1FBQzNDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDdEIsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU1QixJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDaEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDakM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsWUFBWSxDQUNWLEtBQXlCLEVBQ3pCLFNBQTBCLEVBQzFCLE9BQXdCO1FBRXhCLE1BQU0sRUFBRSxHQUFHLFNBQWtDLENBQUM7UUFDOUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUN0QixNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWxELElBQUksYUFBYSxLQUFLLFNBQVMsRUFBRTtZQUMvQixJQUFJLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSx1QkFBdUIsRUFBRTtnQkFDcEMsTUFBTSxJQUFJLGlDQUF1QixDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQzNEO1NBQ0Y7UUFFRCxNQUFNLFlBQVksR0FBRyxJQUFBLHNCQUFZLEVBQUMsYUFBYSxJQUFJLElBQUksRUFBRSxN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QyxDQUFDO1NBQy9CO2FBQU07WUFDTCxNQUFNLEdBQUcsSUFBQSw2QkFBbUIsRUFBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFeEMsSUFBSSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsdUJBQXVCLEVBQUU7Z0JBQ3BDLE1BQU0sSUFBSSxpQ0FBdUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUMzRDtTQUNGO1FBRUQsSUFDRSxJQUFBLGVBQU8sRUFBQyxNQUFNLEVBQUUsQ0FBQyxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxFQUFFLGFBQWEsQ0FBQyxFQUN2RTtZQUNBLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDN0I7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnQG9yYml0L2RhdGEnO1xuaW1wb3J0IHtcbiAgQWRkUmVjb3JkT3BlcmF0aW9uLFxuICBBZGRUb1JlbGF0ZWRSZWNvcmRzT3BlcmF0aW9uLFxuICBjbG9uZVJlY29yZElkZW50aXR5LFxuICBlcXVhbFJlY29yZElkZW50aXRpZXMsXG4gIEluaXRpYWxpemVkUmVjb3JkLFxuICBtZXJnZVJlY29yZHMsXG4gIFJlY29yZElkZW50aXR5LFxuICBSZWNvcmROb3RGb3VuZEV4Y2VwdGlvbixcbiAgUmVjb3JkT3BlcmF0aW9uLFxuICBSZWNvcmRPcGVyYXRpb25SZXN1bHQsXG4gIHJlY29yZHNJbmNsdWRlLFxuICBSZW1vdmVGcm9tUmVsYXRlZFJlY29yZHNPcGVyYXRpb24sXG4gIFJlbW92ZVJlY29yZE9wZXJhdGlvbixcbiAgUmVwbGFjZUF0dHJpYnV0ZU9wZXJhdGlvbixcbiAgUmVwbGFjZUtleU9wZXJhdGlvbixcbiAgUmVwbGFjZVJlbGF0ZWRSZWNvcmRPcGVyYXRpb24sXG4gIFJlcGxhY2VSZWxhdGVkUmVjb3Jkc09wZXJhdGlvbixcbiAgVXBkYXRlUmVjb3JkT3BlcmF0aW9uXG59IGZyb20gJ0BvcmJpdC9yZWNvcmRzJztcbmltcG9ydCB7IGNsb25lLCBkZWVwR2V0LCBkZWVwU2V0LCBEaWN0IH0gZnJvbSAnQG9yYml0L3V0aWxzJztcbmltcG9ydCB7IFN5bmNSZWNvcmRBY2Nlc3NvciB9IGZyb20gJy4uL3JlY29yZC1hY2Nlc3Nvcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3luY1RyYW5zZm9ybU9wZXJhdG9yIHtcbiAgKFxuICAgIGNhY2hlOiBTeW5jUmVjb3JkQWNjZXNzb3IsXG4gICAgb3BlcmF0aW9uOiBSZWNvcmRPcGVyYXRpb24sXG4gICAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4gICk6IFJlY29yZE9wZXJhdGlvblJlc3VsdDtcbn1cblxuZXhwb3J0IGNvbnN0IFN5bmNUcmFuc2Zvcm1PcGVyYXRvcnM6IERpY3Q8U3luY1RyYW5zZm9ybU9wZXJhdG9yPiA9IHtcbiAgYWRkUmVjb3JkKFxuICAgIGNhY2hlOiBTeW5jUmVjb3JkQWNjZXNzb3IsXG4gICAgb3BlcmF0aW9uOiBSZWNvcmRPcGVyYXRpb24sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuICApOiBSZWNvcmRPcGVyYXRpb25SZXN1bHQge1xuICAgIGNvbnN0IG9wID0gb3BlcmF0aW9uIGFzIEFkZFJlY29yZE9wZXJhdGlvbjtcbiAgICBjb25zdCB7IHJlY29yZCB9ID0gb3A7XG4gICAgY2FjaGUuc2V0UmVjb3JkU3luYyhyZWNvcmQpO1xuXG4gICAgaWYgKGNhY2hlLmtleU1hcCkge1xuICAgICAgY2FjaGUua2V5TWFwLnB1c2hSZWNvcmQocmVjb3JkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVjb3JkO1xuICB9LFxuXG4gIHVwZGF0ZVJlY29yZChcbiAgICBjYWNoZTogU3luY1JlY29yZEFjY2Vzc29yLFxuICAgIG9wZXJhdGlvbjogUmVjb3JkT3BlcmF0aW9uLFxuICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuICApOiBSZWNvcmRPcGVyYXRpb25SZXN1bHQge1xuICAgIGNvbnN0IG9wID0gb3BlcmF0aW9uIGFzIFVwZGF0ZVJlY29yZE9wZXJhdGlvbjtcbiAgICBjb25zdCB7IHJlY29yZCB9ID0gb3A7XG4gICAgY29uc3QgY3VycmVudFJlY29yZCA9IGNhY2hlLmdldFJlY29yZFN5bmMocmVjb3JkKTtcblxuICAgIGlmIChjdXJyZW50UmVjb3JkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChvcHRpb25zPy5yYWlzZU5vdEZvdW5kRXhjZXB0aW9ucykge1xuICAgICAgICB0aHJvdyBuZXcgUmVjb3JkTm90Rm91bmRFeGNlcHRpb24ocmVjb3JkLnR5cGUsIHJlY29yZC5pZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbWVyZ2VkUmVjb3JkID0gbWVyZ2VSZWNvcmRzKGN1cnJlbnRSZWNvcmQgfHwgbnVsbCwgcmVjb3JkKTtcblxuICAgIGNhY2hlLnNldFJlY29yZFN5bmMobWVyZ2VkUmVjb3JkKTtcblxuICAgIGlmIChjYWNoZS5rZXlNYXApIHtcbiAgICAgIGNhY2hlLmtleU1hcC5wdXNoUmVjb3JkKG1lcmdlZFJlY29yZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlZFJlY29yZDtcbiAgfSxcblxuICByZW1vdmVSZWNvcmQoXG4gICAgY2FjaGU6IFN5bmNSZWNvcmRBY2Nlc3NvcixcbiAgICBvcGVyYXRpb246IFJlY29yZE9wZXJhdGlvbixcbiAgICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbiAgKTogUmVjb3JkT3BlcmF0aW9uUmVzdWx0IHtcbiAgICBjb25zdCBvcCA9IG9wZXJhdGlvbiBhcyBSZW1vdmVSZWNvcmRPcGVyYXRpb247XG4gICAgY29uc3QgcmVjb3JkID0gY2FjaGUucmVtb3ZlUmVjb3JkU3luYyhvcC5yZWNvcmQpO1xuXG4gICAgaWYgKHJlY29yZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAob3B0aW9ucz8ucmFpc2VOb3RGb3VuZEV4Y2VwdGlvbnMpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlY29yZE5vdEZvdW5kRXhjZXB0aW9uKG9wLnJlY29yZC50eXBlLCBvcC5yZWNvcmQuaWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZWNvcmQ7XG4gIH0sXG5cbiAgcmVwbGFjZUtleShcbiAgICBjYWNoZTogU3luY1JlY29yZEFjY2Vzc29yLFxuICAgIG9wZXJhdGlvbjogUmVjb3JkT3BlcmF0aW9uLFxuICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuICApOiBSZWNvcmRPcGVyYXRpb25SZXN1bHQge1xuICAgIGNvbnN0IG9wID0gb3BlcmF0aW9uIGFzIFJlcGxhY2VLZXlPcGVyYXRpb247XG4gICAgY29uc3QgY3VycmVudFJlY29yZCA9IGNhY2hlLmdldFJlY29yZFN5bmMob3AucmVjb3JkKTtcbiAgICBsZXQgcmVjb3JkOiBJbml0aWFsaXplZFJlY29yZDtcblxuICAgIGlmIChjdXJyZW50UmVjb3JkKSB7XG4gICAgICByZWNvcmQgPSBjbG9uZShjdXJyZW50UmVjb3JkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVjb3JkID0gY2xvbmVSZWNvcmRJZGVudGl0eShvcC5yZWNvcmQpO1xuXG4gICAgICBpZiAob3B0aW9ucz8ucmFpc2VOb3RGb3VuZEV4Y2VwdGlvbnMpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlY29yZE5vdEZvdW5kRXhjZXB0aW9uKHJlY29yZC50eXBlLCByZWNvcmQuaWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGRlZXBTZXQocmVjb3JkLCBbJ2tleXMnLCBvcC5rZXldLCBvcC52YWx1ZSk7XG4gICAgY2FjaGUuc2V0UmVjb3JkU3luYyhyZWNvcmQpO1xuXG4gICAgaWYgKGNhY2hlLmtleU1hcCkge1xuICAgICAgY2FjaGUua2V5TWFwLnB1c2hSZWNvcmQocmVjb3JkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVjb3JkO1xuICB9LFxuXG4gIHJlcGxhY2VBdHRyaWJ1dGUoXG4gICAgY2FjaGU6IFN5bmNSZWNvcmRBY2Nlc3NvcixcbiAgICBvcGVyYXRpb246IFJlY29yZE9wZXJhdGlvbixcbiAgICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbiAgKTogUmVjb3JkT3BlcmF0aW9uUmVzdWx0IHtcbiAgICBjb25zdCBvcCA9IG9wZXJhdGlvbiBhcyBSZXBsYWNlQXR0cmlidXRlT3BlcmF0aW9uO1xuICAgIGNvbnN0IGN1cnJlbnRSZWNvcmQgPSBjYWNoZS5nZXRSZWNvcmRTeW5jKG9wLnJlY29yZCk7XG4gICAgbGV0IHJlY29yZDogSW5pdGlhbGl6ZWRSZWNvcmQ7XG5cbiAgICBpZiAoY3VycmVudFJlY29yZCkge1xuICAgICAgcmVjb3JkID0gY2xvbmUoY3VycmVudFJlY29yZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlY29yZCA9IGNsb25lUmVjb3JkSWRlbnRpdHkob3AucmVjb3JkKTtcblxuICAgICAgaWYgKG9wdGlvbnM/LnJhaXNlTm90Rm91bmRFeGNlcHRpb25zKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWNvcmROb3RGb3VuZEV4Y2VwdGlvbihyZWNvcmQudHlwZSwgcmVjb3JkLmlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkZWVwU2V0KHJlY29yZCwgWydhdHRyaWJ1dGVzJywgb3AuYXR0cmlidXRlXSwgb3AudmFsdWUpO1xuICAgIGNhY2hlLnNldFJlY29yZFN5bmMocmVjb3JkKTtcblxuICAgIHJldHVybiByZWNvcmQ7XG4gIH0sXG5cbiAgYWRkVG9SZWxhdGVkUmVjb3JkcyhcbiAgICBjYWNoZTogU3luY1JlY29yZEFjY2Vzc29yLFxuICAgIG9wZXJhdGlvbjogUmVjb3JkT3BlcmF0aW9uLFxuICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuICApOiBSZWNvcmRPcGVyYXRpb25SZXN1bHQge1xuICAgIGNvbnN0IG9wID0gb3BlcmF0aW9uIGFzIEFkZFRvUmVsYXRlZFJlY29yZHNPcGVyYXRpb247XG4gICAgY29uc3QgeyByZWxhdGlvbnNoaXAsIHJlbGF0ZWRSZWNvcmQgfSA9IG9wO1xuICAgIGNvbnN0IGN1cnJlbnRSZWNvcmQgPSBjYWNoZS5nZXRSZWNvcmRTeW5jKG9wLnJlY29yZCk7XG4gICAgbGV0IHJlY29yZDogSW5pdGlhbGl6ZWRSZWNvcmQ7XG5cbiAgICBpZiAoY3VycmVudFJlY29yZCkge1xuICAgICAgcmVjb3JkID0gY2xvbmUoY3VycmVudFJlY29yZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlY29yZCA9IGNsb25lUmVjb3JkSWRlbnRpdHkob3AucmVjb3JkKTtcblxuICAgICAgaWYgKG9wdGlvbnM/LnJhaXNlTm90Rm91bmRFeGNlcHRpb25zKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWNvcmROb3RGb3VuZEV4Y2VwdGlvbihyZWNvcmQudHlwZSwgcmVjb3JkLmlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZWxhdGVkUmVjb3JkczogUmVjb3JkSWRlbnRpdHlbXSA9XG4gICAgICBkZWVwR2V0KHJlY29yZCwgWydyZWxhdGlvbnNoaXBzJywgcmVsYXRpb25zaGlwLCAnZGF0YSddKSB8fCBbXTtcblxuICAgIGlmICghcmVjb3Jkc0luY2x1ZGUocmVsYXRlZFJlY29yZHMsIHJlbGF0ZWRSZWNvcmQpKSB7XG4gICAgICByZWxhdGVkUmVjb3Jkcy5wdXNoKHJlbGF0ZWRSZWNvcmQpO1xuXG4gICAgICBkZWVwU2V0KHJlY29yZCwgWydyZWxhdGlvbnNoaXBzJywgcmVsYXRpb25zaGlwLCAnZGF0YSddLCByZWxhdGVkUmVjb3Jkcyk7XG4gICAgICBjYWNoZS5zZXRSZWNvcmRTeW5jKHJlY29yZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlY29yZDtcbiAgfSxcblxuICByZW1vdmVGcm9tUmVsYXRlZFJlY29yZHMoXG4gICAgY2FjaGU6IFN5bmNSZWNvcmRBY2Nlc3NvcixcbiAgICBvcGVyYXRpb246IFJlY29yZE9wZXJhdGlvbixcbiAgICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbiAgKTogUmVjb3JkT3BlcmF0aW9uUmVzdWx0IHtcbiAgICBjb25zdCBvcCA9IG9wZXJhdGlvbiBhcyBSZW1vdmVGcm9tUmVsYXRlZFJlY29yZHNPcGVyYXRpb247XG4gICAgY29uc3QgY3VycmVudFJlY29yZCA9IGNhY2hlLmdldFJlY29yZFN5bmMob3AucmVjb3JkKTtcbiAgICBjb25zdCB7IHJlbGF0aW9uc2hpcCwgcmVsYXRlZFJlY29yZCB9ID0gb3A7XG4gICAgbGV0IHJlY29yZDogSW5pdGlhbGl6ZWRSZWNvcmQ7XG5cbiAgICBpZiAoY3VycmVudFJlY29yZCkge1xuICAgICAgcmVjb3JkID0gY2xvbmUoY3VycmVudFJlY29yZCk7XG4gICAgICBsZXQgcmVsYXRlZFJlY29yZHM6IFJlY29yZElkZW50aXR5W10gPSBkZWVwR2V0KHJlY29yZCwgW1xuICAgICAgICAncmVsYXRpb25zaGlwcycsXG4gICAgICAgIHJlbGF0aW9uc2hpcCxcbiAgICAgICAgJ2RhdGEnXG4gICAgICBdKTtcbiAgICAgIGlmIChyZWxhdGVkUmVjb3Jkcykge1xuICAgICAgICByZWxhdGVkUmVjb3JkcyA9IHJlbGF0ZWRSZWNvcmRzLmZpbHRlcihcbiAgICAgICAgICAocikgPT4gIWVxdWFsUmVjb3JkSWRlbnRpdGllcyhyLCByZWxhdGVkUmVjb3JkKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBkZWVwU2V0KFxuICAgICAgICAgICAgcmVjb3JkLFxuICAgICAgICAgICAgWydyZWxhdGlvbnNoaXBzJywgcmVsYXRpb25zaGlwLCAnZGF0YSddLFxuICAgICAgICAgICAgcmVsYXRlZFJlY29yZHNcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIGNhY2hlLnNldFJlY29yZFN5bmMocmVjb3JkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlY29yZDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG9wdGlvbnM/LnJhaXNlTm90Rm91bmRFeGNlcHRpb25zKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWNvcmROb3RGb3VuZEV4Y2VwdGlvbihvcC5yZWNvcmQudHlwZSwgb3AucmVjb3JkLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcmVwbGFjZVJlbGF0ZWRSZWNvcmRzKFxuICAgIGNhY2hlOiBTeW5jUmVjb3JkQWNjZXNzb3IsXG4gICAgb3BlcmF0aW9uOiBSZWNvcmRPcGVyYXRpb24sXG4gICAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4gICk6IFJlY29yZE9wZXJhdGlvblJlc3VsdCB7XG4gICAgY29uc3Qgb3AgPSBvcGVyYXRpb24gYXMgUmVwbGFjZVJlbGF0ZWRSZWNvcmRzT3BlcmF0aW9uO1xuICAgIGNvbnN0IGN1cnJlbnRSZWNvcmQgPSBjYWNoZS5nZXRSZWNvcmRTeW5jKG9wLnJlY29yZCk7XG4gICAgY29uc3QgeyByZWxhdGlvbnNoaXAsIHJlbGF0ZWRSZWNvcmRzIH0gPSBvcDtcbiAgICBsZXQgcmVjb3JkOiBJbml0aWFsaXplZFJlY29yZDtcblxuICAgIGlmIChjdXJyZW50UmVjb3JkKSB7XG4gICAgICByZWNvcmQgPSBjbG9uZShjdXJyZW50UmVjb3JkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVjb3JkID0gY2xvbmVSZWNvcmRJZGVudGl0eShvcC5yZWNvcmQpO1xuXG4gICAgICBpZiAob3B0aW9ucz8ucmFpc2VOb3RGb3VuZEV4Y2VwdGlvbnMpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlY29yZE5vdEZvdW5kRXhjZXB0aW9uKHJlY29yZC50eXBlLCByZWNvcmQuaWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGRlZXBTZXQocmVjb3JkLCBbJ3JlbGF0aW9uc2hpcHMnLCByZWxhdGlvbnNoaXAsICdkYXRhJ10sIHJlbGF0ZWRSZWNvcmRzKVxuICAgICkge1xuICAgICAgY2FjaGUuc2V0UmVjb3JkU3luYyhyZWNvcmQpO1xuICAgIH1cblxuICAgIHJldHVybiByZWNvcmQ7XG4gIH0sXG5cbiAgcmVwbGFjZVJlbGF0ZWRSZWNvcmQoXG4gICAgY2FjaGU6IFN5bmNSZWNvcmRBY2Nlc3NvcixcbiAgICBvcGVyYXRpb246IFJlY29yZE9wZXJhdGlvbixcbiAgICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbiAgKTogUmVjb3JkT3BlcmF0aW9uUmVzdWx0IHtcbiAgICBjb25zdCBvcCA9IG9wZXJhdGlvbiBhcyBSZXBsYWNlUmVsYXRlZFJlY29yZE9wZXJhdGlvbjtcbiAgICBjb25zdCBjdXJyZW50UmVjb3JkID0gY2FjaGUuZ2V0UmVjb3JkU3luYyhvcC5yZWNvcmQpO1xuICAgIGNvbnN0IHsgcmVsYXRpb25zaGlwLCByZWxhdGVkUmVjb3JkIH0gPSBvcDtcbiAgICBsZXQgcmVjb3JkOiBJbml0aWFsaXplZFJlY29yZDtcblxuICAgIGlmIChjdXJyZW50UmVjb3JkKSB7XG4gICAgICByZWNvcmQgPSBjbG9uZShjdXJyZW50UmVjb3JkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVjb3JkID0gY2xvbmVSZWNvcmRJZGVudGl0eShvcC5yZWNvcmQpO1xuXG4gICAgICBpZiAob3B0aW9ucz8ucmFpc2VOb3RGb3VuZEV4Y2VwdGlvbnMpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlY29yZE5vdEZvdW5kRXhjZXB0aW9uKHJlY29yZC50eXBlLCByZWNvcmQuaWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGRlZXBTZXQocmVjb3JkLCBbJ3JlbGF0aW9uc2hpcHMnLCByZWxhdGlvbnNoaXAsICdkYXRhJ10sIHJlbGF0ZWRSZWNvcmQpXG4gICAgKSB7XG4gICAgICBjYWNoZS5zZXRSZWNvcmRTeW5jKHJlY29yZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlY29yZDtcbiAgfVxufTtcbiJdfQ==