pretur.clay
Version:
Client-side immutability helper
125 lines • 18.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var clay_1 = require("./clay");
var Querier_1 = require("./Querier");
var Record_1 = require("./Record");
var fields_1 = require("./fields");
function buildGetMutations(spec, mutationGetter, clay) {
return mutationGetter(clay, spec.scope, spec.name);
}
function buildQuerier(spec, query) {
if (query === void 0) { query = {}; }
return new Querier_1.Querier(spec.scope, spec.name, query);
}
function loadSimple(spec, requester, query) {
if (query === void 0) { query = {}; }
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _a, _b, data, _c, count;
return tslib_1.__generator(this, function (_d) {
switch (_d.label) {
case 0: return [4 /*yield*/, requester.select(spec.scope, spec.name, query)];
case 1:
_a = _d.sent(), _b = _a.data, data = _b === void 0 ? [] : _b, _c = _a.count, count = _c === void 0 ? 0 : _c;
return [2 /*return*/, { data: data, count: count }];
}
});
});
}
function loadIntoSet(pool, spec, requester, dispatch, set, query) {
if (query === void 0) { query = {}; }
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _a, data;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, requester.select(spec.scope, spec.name, query)];
case 1:
_a = (_b.sent()).data, data = _a === void 0 ? [] : _a;
set.replace(dispatch, fields_1.buildSet(pool, spec, data));
return [2 /*return*/];
}
});
});
}
function loadIntoRecord(pool, spec, requester, dispatch, record, query) {
if (query === void 0) { query = {}; }
return tslib_1.__awaiter(this, void 0, void 0, function () {
var data, row;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, requester.select(spec.scope, spec.name, query)];
case 1:
data = (_a.sent()).data;
row = data && data[0];
if (row) {
record.replace(dispatch, fields_1.buildRecord(pool, spec, row));
return [2 /*return*/, true];
}
return [2 /*return*/, false];
}
});
});
}
function selectAndRefresh(pool, spec, requester, dispatch, set, querier, extra) {
if (extra === void 0) { extra = {}; }
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _a, _b, data, _c, count;
return tslib_1.__generator(this, function (_d) {
switch (_d.label) {
case 0: return [4 /*yield*/, requester.select(spec.scope, spec.name, tslib_1.__assign({}, querier.query, extra))];
case 1:
_a = _d.sent(), _b = _a.data, data = _b === void 0 ? [] : _b, _c = _a.count, count = _c === void 0 ? 0 : _c;
clay_1.refresh(dispatch, set, querier, { data: fields_1.buildSet(pool, spec, data), count: count });
return [2 /*return*/, { data: data, count: count }];
}
});
});
}
exports.selectAndRefresh = selectAndRefresh;
function buildHelpersFactory(pool, requester, mutationGetter) {
return function helperFactory(spec) {
function fields(values) {
return fields_1.buildFields(pool, spec, values);
}
function record(stateOrFields, values) {
if (typeof stateOrFields === 'string') {
return fields_1.buildRecord(pool, spec, values, stateOrFields);
}
return fields_1.buildRecord(pool, spec, stateOrFields);
}
function set(items) {
if (items === void 0) { items = []; }
return fields_1.buildSet(pool, spec, items);
}
function mutations(clay) {
return buildGetMutations(spec, mutationGetter, clay);
}
function querier(query) {
if (query === void 0) { query = {}; }
return buildQuerier(spec, query);
}
function load(queryOrDispatch, clay, query) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
if (typeof queryOrDispatch === 'function' && clay) {
if (clay instanceof Record_1.Record) {
return [2 /*return*/, loadIntoRecord(pool, spec, requester, queryOrDispatch, clay, query)];
}
return [2 /*return*/, loadIntoSet(pool, spec, requester, queryOrDispatch, clay, query)];
}
return [2 /*return*/, loadSimple(spec, requester, queryOrDispatch)];
});
});
}
function select(dispatch, targetSet, targetQuerier, extra) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
return [2 /*return*/, selectAndRefresh(pool, spec, requester, dispatch, targetSet, targetQuerier, extra)];
});
});
}
return { fields: fields, record: record, set: set, mutations: mutations, querier: querier, load: load, select: select };
};
}
exports.buildHelpersFactory = buildHelpersFactory;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUdBLCtCQUF3QztBQUN4QyxxQ0FBb0M7QUFDcEMsbUNBQWtDO0FBRWxDLG1DQUFzRTtBQU10RSwyQkFDRSxJQUFhLEVBQ2IsY0FBaUMsRUFDakMsSUFBd0I7SUFFeEIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckQsQ0FBQztBQUVELHNCQUNFLElBQWEsRUFDYixLQUFvQjtJQUFwQixzQkFBQSxFQUFBLFVBQW9CO0lBRXBCLE1BQU0sQ0FBQyxJQUFJLGlCQUFPLENBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFFRCxvQkFDRSxJQUFhLEVBQ2IsU0FBb0IsRUFDcEIsS0FBb0I7SUFBcEIsc0JBQUEsRUFBQSxVQUFvQjs7Ozs7d0JBRWEscUJBQU0sU0FBUyxDQUFDLE1BQU0sQ0FBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUE7O29CQUFsRixLQUEyQixTQUF1RCxFQUFoRixZQUFTLEVBQVQsSUFBSSxtQkFBRyxFQUFFLEtBQUEsRUFBRSxhQUFTLEVBQVQsS0FBSyxtQkFBRyxDQUFDLEtBQUE7b0JBQzVCLHNCQUFPLEVBQUUsSUFBSSxNQUFBLEVBQUUsS0FBSyxPQUFBLEVBQUUsRUFBQzs7OztDQUN4QjtBQUVELHFCQUNFLElBQWMsRUFDZCxJQUFhLEVBQ2IsU0FBb0IsRUFDcEIsUUFBa0IsRUFDbEIsR0FBVyxFQUNYLEtBQW9CO0lBQXBCLHNCQUFBLEVBQUEsVUFBb0I7Ozs7O3dCQUVFLHFCQUFNLFNBQVMsQ0FBQyxNQUFNLENBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJ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LCBNb2RlbCwgU3BlY1Bvb2wgfSBmcm9tICdwcmV0dXIuc3BlYyc7XHJcbmltcG9ydCB7IERpc3BhdGNoIH0gZnJvbSAncmVkdWNpYmxlLW5vZGUnO1xyXG5pbXBvcnQgeyBRdWVyeSwgTXV0YXRlUmVxdWVzdCwgUmVxdWVzdGVyIH0gZnJvbSAncHJldHVyLnN5bmMnO1xyXG5pbXBvcnQgeyBTdGF0ZSwgcmVmcmVzaCB9IGZyb20gJy4vY2xheSc7XHJcbmltcG9ydCB7IFF1ZXJpZXIgfSBmcm9tICcuL1F1ZXJpZXInO1xyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tICcuL1JlY29yZCc7XHJcbmltcG9ydCB7IFNldCB9IGZyb20gJy4vU2V0JztcclxuaW1wb3J0IHsgRmllbGRzLCBidWlsZEZpZWxkcywgYnVpbGRSZWNvcmQsIGJ1aWxkU2V0IH0gZnJvbSAnLi9maWVsZHMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNdXRhdGlvbkdldHRlcjxUIGV4dGVuZHMgU3BlY1R5cGUgPSBTcGVjVHlwZT4ge1xyXG4gIChjbGF5OiBTZXQ8VD4gfCBSZWNvcmQ8VD4sIHNjb3BlOiBzdHJpbmcsIG1vZGVsOiBUWyduYW1lJ10pOiBNdXRhdGVSZXF1ZXN0PFQ+W107XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJ1aWxkR2V0TXV0YXRpb25zPFQgZXh0ZW5kcyBTcGVjVHlwZT4oXHJcbiAgc3BlYzogU3BlYzxUPixcclxuICBtdXRhdGlvbkdldHRlcjogTXV0YXRpb25HZXR0ZXI8VD4sXHJcbiAgY2xheTogU2V0PFQ+IHwgUmVjb3JkPFQ+LFxyXG4pOiBNdXRhdGVSZXF1ZXN0PFQ+W10ge1xyXG4gIHJldHVybiBtdXRhdGlvbkdldHRlcihjbGF5LCBzcGVjLnNjb3BlLCBzcGVjLm5hbWUpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBidWlsZFF1ZXJpZXI8VCBleHRlbmRzIFNwZWNUeXBlPihcclxuICBzcGVjOiBTcGVjPFQ+LFxyXG4gIHF1ZXJ5OiBRdWVyeTxUPiA9IHt9LFxyXG4pOiBRdWVyaWVyPFQ+IHtcclxuICByZXR1cm4gbmV3IFF1ZXJpZXI8VD4oc3BlYy5zY29wZSwgc3BlYy5uYW1lLCBxdWVyeSk7XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGxvYWRTaW1wbGU8VCBleHRlbmRzIFNwZWNUeXBlPihcclxuICBzcGVjOiBTcGVjPFQ+LFxyXG4gIHJlcXVlc3RlcjogUmVxdWVzdGVyLFxyXG4gIHF1ZXJ5OiBRdWVyeTxUPiA9IHt9LFxyXG4pIHtcclxuICBjb25zdCB7IGRhdGEgPSBbXSwgY291bnQgPSAwIH0gPSBhd2FpdCByZXF1ZXN0ZXIuc2VsZWN0PFQ+KHNwZWMuc2NvcGUsIHNwZWMubmFtZSwgcXVlcnkpO1xyXG4gIHJldHVybiB7IGRhdGEsIGNvdW50IH07XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGxvYWRJbnRvU2V0PFQgZXh0ZW5kcyBTcGVjVHlwZT4oXHJcbiAgcG9vbDogU3BlY1Bvb2wsXHJcbiAgc3BlYzogU3BlYzxUPixcclxuICByZXF1ZXN0ZXI6IFJlcXVlc3RlcixcclxuICBkaXNwYXRjaDogRGlzcGF0Y2gsXHJcbiAgc2V0OiBTZXQ8VD4sXHJcbiAgcXVlcnk6IFF1ZXJ5PFQ+ID0ge30sXHJcbikge1xyXG4gIGNvbnN0IHsgZGF0YSA9IFtdIH0gPSBhd2FpdCByZXF1ZXN0ZXIuc2VsZWN0PFQ+KHNwZWMuc2NvcGUsIHNwZWMubmFtZSwgcXVlcnkpO1xyXG4gIHNldC5yZXBsYWNlKGRpc3BhdGNoLCBidWlsZFNldChwb29sLCBzcGVjLCBkYXRhKSk7XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGxvYWRJbnRvUmVjb3JkPFQgZXh0ZW5kcyBTcGVjVHlwZT4oXHJcbiAgcG9vbDogU3BlY1Bvb2wsXHJcbiAgc3BlYzogU3BlYzxUPixcclxuICByZXF1ZXN0ZXI6IFJlcXVlc3RlcixcclxuICBkaXNwYXRjaDogRGlzcGF0Y2gsXHJcbiAgcmVjb3JkOiBSZWNvcmQ8VD4sXHJcbiAgcXVlcnk6IFF1ZXJ5PFQ+ID0ge30sXHJcbikge1xyXG4gIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgcmVxdWVzdGVyLnNlbGVjdDxUPihzcGVjLnNjb3BlLCBzcGVjLm5hbWUsIHF1ZXJ5KTtcclxuICBjb25zdCByb3cgPSBkYXRhICYmIGRhdGFbMF07XHJcbiAgaWYgKHJvdykge1xyXG4gICAgcmVjb3JkLnJlcGxhY2UoZGlzcGF0Y2gsIGJ1aWxkUmVjb3JkKHBvb2wsIHNwZWMsIHJvdykpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG4gIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbGVjdEFuZFJlZnJlc2g8VCBleHRlbmRzIFNwZWNUeXBlPihcclxuICBwb29sOiBTcGVjUG9vbCxcclxuICBzcGVjOiBTcGVjPFQ+LFxyXG4gIHJlcXVlc3RlcjogUmVxdWVzdGVyLFxyXG4gIGRpc3BhdGNoOiBEaXNwYXRjaCxcclxuICBzZXQ6IFNldDxUPixcclxuICBxdWVyaWVyOiBRdWVyaWVyPFQ+LFxyXG4gIGV4dHJhOiBRdWVyeTxUPiA9IHt9LFxyXG4pIHtcclxuICBjb25zdCB7IGRhdGEgPSBbXSwgY291bnQgPSAwIH0gPSBhd2FpdCByZXF1ZXN0ZXIuc2VsZWN0PFQ+KHNwZWMuc2NvcGUsIHNwZWMubmFtZSwge1xyXG4gICAgLi4ucXVlcmllci5xdWVyeSxcclxuICAgIC4uLmV4dHJhLFxyXG4gIH0pO1xyXG4gIHJlZnJlc2goZGlzcGF0Y2gsIHNldCwgcXVlcmllciwgeyBkYXRhOiBidWlsZFNldDxUPihwb29sLCBzcGVjLCBkYXRhKSwgY291bnQgfSk7XHJcbiAgcmV0dXJuIHsgZGF0YSwgY291bnQgfTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBIZWxwZXJzPFQgZXh0ZW5kcyBTcGVjVHlwZT4ge1xyXG4gIGZpZWxkcyh2YWx1ZXM/OiBQYXJ0aWFsPE1vZGVsPFQ+Pik6IEZpZWxkczxUPjtcclxuXHJcbiAgcmVjb3JkKHN0YXRlPzogU3RhdGUsIHZhbHVlcz86IFBhcnRpYWw8TW9kZWw8VD4+KTogUmVjb3JkPFQ+O1xyXG4gIHJlY29yZCh2YWx1ZXM/OiBQYXJ0aWFsPE1vZGVsPFQ+Pik6IFJlY29yZDxUPjtcclxuXHJcbiAgc2V0KGl0ZW1zPzogUGFydGlhbDxNb2RlbDxUPj5bXSk6IFNldDxUPjtcclxuXHJcbiAgbXV0YXRpb25zKGNsYXk6IFNldDxUPiB8IFJlY29yZDxUPik6IE11dGF0ZVJlcXVlc3Q8VD5bXTtcclxuXHJcbiAgcXVlcmllcihxdWVyeT86IFF1ZXJ5PFQ+KTogUXVlcmllcjxUPjtcclxuXHJcbiAgbG9hZChxdWVyeT86IFF1ZXJ5PFQ+KTogUHJvbWlzZTx7IGRhdGE6IE1vZGVsPFQ+W10sIGNvdW50OiBudW1iZXIgfT47XHJcbiAgbG9hZChkaXNwYXRjaDogRGlzcGF0Y2gsIHNldDogU2V0PFQ+LCBxdWVyeT86IFF1ZXJ5PFQ+KTogUHJvbWlzZTx2b2lkPjtcclxuICBsb2FkKGRpc3BhdGNoOiBEaXNwYXRjaCwgcmVjb3JkOiBSZWNvcmQ8VD4sIHF1ZXJ5PzogUXVlcnk8VD4pOiBQcm9taXNlPGJvb2xlYW4+O1xyXG5cclxuICBzZWxlY3QoXHJcbiAgICBkaXNwYXRjaDogRGlzcGF0Y2gsXHJcbiAgICBzZXQ6IFNldDxUPixcclxuICAgIHF1ZXJpZXI6IFF1ZXJpZXI8VD4sXHJcbiAgICBleHRyYT86IFF1ZXJ5PFQ+LFxyXG4gICk6IFByb21pc2U8eyBkYXRhOiBNb2RlbDxUPltdLCBjb3VudDogbnVtYmVyIH0+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEhlbHBlckZhY3Rvcnkge1xyXG4gIDxUIGV4dGVuZHMgU3BlY1R5cGU+KHNwZWM6IFNwZWM8VD4pOiBIZWxwZXJzPFQ+O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRIZWxwZXJzRmFjdG9yeShcclxuICBwb29sOiBTcGVjUG9vbCxcclxuICByZXF1ZXN0ZXI6IFJlcXVlc3RlcixcclxuICBtdXRhdGlvbkdldHRlcjogTXV0YXRpb25HZXR0ZXI8YW55PixcclxuKTogSGVscGVyRmFjdG9yeSB7XHJcbiAgcmV0dXJuIGZ1bmN0aW9uIGhlbHBlckZhY3Rvcnk8VCBleHRlbmRzIFNwZWNUeXBlPihzcGVjOiBTcGVjPFQ+KTogSGVscGVyczxUPiB7XHJcbiAgICBmdW5jdGlvbiBmaWVsZHModmFsdWVzPzogUGFydGlhbDxNb2RlbDxUPj4pOiBGaWVsZHM8VD4ge1xyXG4gICAgICByZXR1cm4gYnVpbGRGaWVsZHM8VD4ocG9vbCwgc3BlYywgdmFsdWVzKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiByZWNvcmQoc3RhdGU/OiBTdGF0ZSwgdmFsdWVzPzogUGFydGlhbDxNb2RlbDxUPj4pOiBSZWNvcmQ8VD47XHJcbiAgICBmdW5jdGlvbiByZWNvcmQoZmllbGRzPzogUGFydGlhbDxNb2RlbDxUPj4pOiBSZWNvcmQ8VD47XHJcbiAgICBmdW5jdGlvbiByZWNvcmQoXHJcbiAgICAgIHN0YXRlT3JGaWVsZHM/OiBQYXJ0aWFsPE1vZGVsPFQ+PiB8IFN0YXRlLFxyXG4gICAgICB2YWx1ZXM/OiBQYXJ0aWFsPE1vZGVsPFQ+PixcclxuICAgICk6IFJlY29yZDxUPiB7XHJcbiAgICAgIGlmICh0eXBlb2Ygc3RhdGVPckZpZWxkcyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gYnVpbGRSZWNvcmQ8VD4ocG9vbCwgc3BlYywgdmFsdWVzLCBzdGF0ZU9yRmllbGRzKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYnVpbGRSZWNvcmQ8VD4ocG9vbCwgc3BlYywgc3RhdGVPckZpZWxkcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc2V0KGl0ZW1zOiBQYXJ0aWFsPE1vZGVsPFQ+PltdID0gW10pOiBTZXQ8VD4ge1xyXG4gICAgICByZXR1cm4gYnVpbGRTZXQ8VD4ocG9vbCwgc3BlYywgaXRlbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIG11dGF0aW9ucyhjbGF5OiBTZXQ8VD4gfCBSZWNvcmQ8VD4pOiBNdXRhdGVSZXF1ZXN0PFQ+W10ge1xyXG4gICAgICByZXR1cm4gYnVpbGRHZXRNdXRhdGlvbnMoc3BlYywgbXV0YXRpb25HZXR0ZXIsIGNsYXkpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHF1ZXJpZXIocXVlcnk6IFF1ZXJ5PFQ+ID0ge30pOiBRdWVyaWVyPFQ+IHtcclxuICAgICAgcmV0dXJuIGJ1aWxkUXVlcmllcihzcGVjLCBxdWVyeSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gbG9hZChxdWVyeT86IFF1ZXJ5PFQ+KTogUHJvbWlzZTx7IGRhdGE6IE1vZGVsPFQ+W10sIGNvdW50OiBudW1iZXIgfT47XHJcbiAgICBhc3luYyBmdW5jdGlvbiBsb2FkKGRpc3BhdGNoOiBEaXNwYXRjaCwgc2V0OiBTZXQ8VD4sIHF1ZXJ5PzogUXVlcnk8VD4pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgYXN5bmMgZnVuY3Rpb24gbG9hZChkaXNwYXRjaDogRGlzcGF0Y2gsIHJlY29yZDogUmVjb3JkPFQ+LCBxdWVyeT86IFF1ZXJ5PFQ+KTogUHJvbWlzZTxib29sZWFuPjtcclxuICAgIGFzeW5jIGZ1bmN0aW9uIGxvYWQoXHJcbiAgICAgIHF1ZXJ5T3JEaXNwYXRjaD86IFF1ZXJ5PFQ+IHwgRGlzcGF0Y2gsXHJcbiAgICAgIGNsYXk/OiBTZXQ8VD4gfCBSZWNvcmQ8VD4sXHJcbiAgICAgIHF1ZXJ5PzogUXVlcnk8VD4sXHJcbiAgICApIHtcclxuICAgICAgaWYgKHR5cGVvZiBxdWVyeU9yRGlzcGF0Y2ggPT09ICdmdW5jdGlvbicgJiYgY2xheSkge1xyXG4gICAgICAgIGlmIChjbGF5IGluc3RhbmNlb2YgUmVjb3JkKSB7XHJcbiAgICAgICAgICByZXR1cm4gbG9hZEludG9SZWNvcmQocG9vbCwgc3BlYywgcmVxdWVzdGVyLCBxdWVyeU9yRGlzcGF0Y2gsIGNsYXksIHF1ZXJ5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBsb2FkSW50b1NldChwb29sLCBzcGVjLCByZXF1ZXN0ZXIsIHF1ZXJ5T3JEaXNwYXRjaCwgY2xheSwgcXVlcnkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbG9hZFNpbXBsZShzcGVjLCByZXF1ZXN0ZXIsIDxRdWVyeTxUPj5xdWVyeU9yRGlzcGF0Y2gpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHNlbGVjdChcclxuICAgICAgZGlzcGF0Y2g6IERpc3BhdGNoLFxyXG4gICAgICB0YXJnZXRTZXQ6IFNldDxUPixcclxuICAgICAgdGFyZ2V0UXVlcmllcjogUXVlcmllcjxUPixcclxuICAgICAgZXh0cmE/OiBRdWVyeTxUPixcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gc2VsZWN0QW5kUmVmcmVzaChwb29sLCBzcGVjLCByZXF1ZXN0ZXIsIGRpc3BhdGNoLCB0YXJnZXRTZXQsIHRhcmdldFF1ZXJpZXIsIGV4dHJhKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geyBmaWVsZHMsIHJlY29yZCwgc2V0LCBtdXRhdGlvbnMsIHF1ZXJpZXIsIGxvYWQsIHNlbGVjdCB9O1xyXG4gIH07XHJcbn1cclxuIl19