UNPKG

custom-app

Version:

ITIMS��Ʒ�鿪��ר��React���,�Dz��ý��ּ�dhcc-app���������

233 lines (195 loc) 23.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useSortBy = undefined; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); var _react = require("react"); var _actions = require("../actions"); var _useTableState = require("./useTableState"); var _utils = require("../utils"); function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } _useTableState.defaultState.sortBy = []; (0, _actions.addActions)({ sortByChange: "__sortByChange__" }); var useSortBy = exports.useSortBy = function useSortBy(api) { var debug = api.debug, rows = api.rows, columns = api.columns, _api$orderByFn = api.orderByFn, orderByFn = _api$orderByFn === undefined ? _utils.defaultOrderByFn : _api$orderByFn, _api$sortByFn = api.sortByFn, sortByFn = _api$sortByFn === undefined ? _utils.defaultSortByFn : _api$sortByFn, manualSorting = api.manualSorting, disableSorting = api.disableSorting, defaultSortDesc = api.defaultSortDesc, hooks = api.hooks, _api$state = _slicedToArray(api.state, 2), sortBy = _api$state[0].sortBy, setState = _api$state[1]; columns.forEach(function (column) { var accessor = column.accessor, canSortBy = column.canSortBy; column.canSortBy = accessor ? (0, _utils.getFirstDefined)(canSortBy, disableSorting === true ? false : undefined, true) : false; }); // Updates sorting based on a columnID, desc flag and multi flag var toggleSortByID = function toggleSortByID(columnID, desc, multi) { return setState(function (old) { var sortBy = old.sortBy; // Find the column for this columnID var column = columns.find(function (d) { return d.id === columnID; }); var resolvedDefaultSortDesc = (0, _utils.getFirstDefined)(column.defaultSortDesc, defaultSortDesc); // Find any existing sortBy for this column var existingSortBy = sortBy.find(function (d) { return d.id === columnID; }); var hasDescDefined = typeof desc !== "undefined" && desc !== null; var newSortBy = []; // What should we do with this filter? var action = void 0; if (!multi) { if (sortBy.length <= 1 && existingSortBy) { if (existingSortBy.desc) { action = "remove"; } else { action = "toggle"; } } else { action = "replace"; } } else { if (!existingSortBy) { action = "add"; } else { if (hasDescDefined) { action = "set"; } else { action = "toggle"; } } } if (action === "replace") { newSortBy = [{ id: columnID, desc: hasDescDefined ? desc : resolvedDefaultSortDesc }]; } else if (action === "add") { newSortBy = [].concat(_toConsumableArray(sortBy), [{ id: columnID, desc: hasDescDefined ? desc : resolvedDefaultSortDesc }]); } else if (action === "set") { newSortBy = sortBy.map(function (d) { if (d.id === columnID) { return _extends({}, d, { desc: desc }); } return d; }); } else if (action === "toggle") { newSortBy = sortBy.map(function (d) { if (d.id === columnID) { return _extends({}, d, { desc: !existingSortBy.desc }); } return d; }); } else if (action === "remove") { newSortBy = []; } return _extends({}, old, { sortBy: newSortBy }); }, _actions.actions.sortByChange); }; hooks.columns.push(function (columns) { columns.forEach(function (column) { if (column.canSortBy) { column.toggleSortBy = function (desc, multi) { return toggleSortByID(column.id, desc, multi); }; } }); return columns; }); hooks.getSortByToggleProps = []; var addSortByToggleProps = function addSortByToggleProps(columns, api) { columns.forEach(function (column) { var canSortBy = column.canSortBy; column.getSortByToggleProps = function (props) { return (0, _utils.mergeProps)({ onClick: canSortBy ? function (e) { e.persist(); column.toggleSortBy(undefined, !api.disableMultiSort && e.shiftKey); } : undefined, style: { cursor: canSortBy ? "pointer" : undefined }, title: "Toggle SortBy" }, (0, _utils.applyPropHooks)(api.hooks.getSortByToggleProps, column, api), props); }; }); return columns; }; hooks.columns.push(addSortByToggleProps); hooks.headers.push(addSortByToggleProps); // Mutate columns to reflect sorting state columns.forEach(function (column) { var id = column.id; column.sorted = sortBy.find(function (d) { return d.id === id; }); column.sortedIndex = sortBy.findIndex(function (d) { return d.id === id; }); column.sortedDesc = column.sorted ? column.sorted.desc : undefined; }); var sortedRows = (0, _react.useMemo)(function () { if (manualSorting || !sortBy.length) { return rows; } if (debug) console.info("getSortedRows"); var sortMethodsByColumnID = {}; columns.filter(function (col) { return col.sortMethod; }).forEach(function (col) { sortMethodsByColumnID[col.id] = col.sortMethod; }); var sortData = function sortData(rows) { // Use the orderByFn to compose multiple sortBy's together. // This will also perform a stable sorting using the row index // if needed. var sortedData = orderByFn(rows, sortBy.map(function (sort) { // Support custom sorting methods for each column var columnSortBy = sortMethodsByColumnID[sort.id]; // Return the correct sortFn return function (a, b) { return (columnSortBy ? columnSortBy : sortByFn)(a.values[sort.id], b.values[sort.id], sort.desc); }; }), // Map the directions sortBy.map(function (d) { return !d.desc; })); // TODO: this should be optimized. Not good to loop again sortedData.forEach(function (row) { if (!row.subRows) { return; } row.subRows = sortData(row.subRows); }); return sortedData; }; return sortData(rows); }, [rows, columns, sortBy, manualSorting]); return _extends({}, api, { rows: sortedRows }); }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VTb3J0QnkuanMiXSwibmFtZXMiOlsiZGVmYXVsdFN0YXRlIiwic29ydEJ5Iiwic29ydEJ5Q2hhbmdlIiwidXNlU29ydEJ5IiwiZGVidWciLCJhcGkiLCJyb3dzIiwiY29sdW1ucyIsIm9yZGVyQnlGbiIsImRlZmF1bHRPcmRlckJ5Rm4iLCJzb3J0QnlGbiIsImRlZmF1bHRTb3J0QnlGbiIsIm1hbnVhbFNvcnRpbmciLCJkaXNhYmxlU29ydGluZyIsImRlZmF1bHRTb3J0RGVzYyIsImhvb2tzIiwic3RhdGUiLCJzZXRTdGF0ZSIsImZvckVhY2giLCJhY2Nlc3NvciIsImNvbHVtbiIsImNhblNvcnRCeSIsInVuZGVmaW5lZCIsInRvZ2dsZVNvcnRCeUlEIiwiY29sdW1uSUQiLCJkZXNjIiwibXVsdGkiLCJvbGQiLCJmaW5kIiwiZCIsImlkIiwicmVzb2x2ZWREZWZhdWx0U29ydERlc2MiLCJleGlzdGluZ1NvcnRCeSIsImhhc0Rlc2NEZWZpbmVkIiwibmV3U29ydEJ5IiwiYWN0aW9uIiwibGVuZ3RoIiwibWFwIiwiYWN0aW9ucyIsInB1c2giLCJ0b2dnbGVTb3J0QnkiLCJnZXRTb3J0QnlUb2dnbGVQcm9wcyIsImFkZFNvcnRCeVRvZ2dsZVByb3BzIiwib25DbGljayIsImUiLCJwZXJzaXN0IiwiZGlzYWJsZU11bHRpU29ydCIsInNoaWZ0S2V5Iiwic3R5bGUiLCJjdXJzb3IiLCJ0aXRsZSIsInByb3BzIiwiaGVhZGVycyIsInNvcnRlZCIsInNvcnRlZEluZGV4IiwiZmluZEluZGV4Iiwic29ydGVkRGVzYyIsInNvcnRlZFJvd3MiLCJjb25zb2xlIiwiaW5mbyIsInNvcnRNZXRob2RzQnlDb2x1bW5JRCIsImZpbHRlciIsImNvbCIsInNvcnRNZXRob2QiLCJzb3J0RGF0YSIsInNvcnRlZERhdGEiLCJjb2x1bW5Tb3J0QnkiLCJzb3J0IiwiYSIsImIiLCJ2YWx1ZXMiLCJyb3ciLCJzdWJSb3dzIl0sIm1hcHBpbmdzIjoiOzs7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O0FBQUEsZUFBSyxDQUFDUixFQUFFSixJQUFSO0FBQUEsT0FBWCxDQWZpQixDQUFuQjs7QUFrQkE7QUFDQXdDLGlCQUFXL0MsT0FBWCxDQUFtQixlQUFPO0FBQ3hCLFlBQUksQ0FBQ3FELElBQUlDLE9BQVQsRUFBa0I7QUFDaEI7QUFDRDtBQUNERCxZQUFJQyxPQUFKLEdBQWNSLFNBQVNPLElBQUlDLE9BQWIsQ0FBZDtBQUNELE9BTEQ7O0FBT0EsYUFBT1AsVUFBUDtBQUNELEtBL0JEOztBQWlDQSxXQUFPRCxTQUFTMUQsSUFBVCxDQUFQO0FBQ0QsR0FqRGdCLEVBa0RqQixDQUFDQSxJQUFELEVBQU9DLE9BQVAsRUFBZ0JOLE1BQWhCLEVBQXdCVyxhQUF4QixDQWxEaUIsQ0FBbkI7O0FBcURBLHNCQUNLUCxHQURMO0FBRUVDLFVBQU1tRDtBQUZSO0FBSUQsQ0E5Tk0iLCJmaWxlIjoidXNlU29ydEJ5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBhZGRBY3Rpb25zLCBhY3Rpb25zIH0gZnJvbSBcIi4uL2FjdGlvbnNcIjtcbmltcG9ydCB7IGRlZmF1bHRTdGF0ZSB9IGZyb20gXCIuL3VzZVRhYmxlU3RhdGVcIjtcbmltcG9ydCB7XG4gIG1lcmdlUHJvcHMsXG4gIGFwcGx5UHJvcEhvb2tzLFxuICBnZXRGaXJzdERlZmluZWQsXG4gIGRlZmF1bHRPcmRlckJ5Rm4sXG4gIGRlZmF1bHRTb3J0QnlGblxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZGVmYXVsdFN0YXRlLnNvcnRCeSA9IFtdO1xuXG5hZGRBY3Rpb25zKHtcbiAgc29ydEJ5Q2hhbmdlOiBcIl9fc29ydEJ5Q2hhbmdlX19cIlxufSk7XG5cbmV4cG9ydCBjb25zdCB1c2VTb3J0QnkgPSBhcGkgPT4ge1xuICBjb25zdCB7XG4gICAgZGVidWcsXG4gICAgcm93cyxcbiAgICBjb2x1bW5zLFxuICAgIG9yZGVyQnlGbiA9IGRlZmF1bHRPcmRlckJ5Rm4sXG4gICAgc29ydEJ5Rm4gPSBkZWZhdWx0U29ydEJ5Rm4sXG4gICAgbWFudWFsU29ydGluZyxcbiAgICBkaXNhYmxlU29ydGluZyxcbiAgICBkZWZhdWx0U29ydERlc2MsXG4gICAgaG9va3MsXG4gICAgc3RhdGU6IFt7IHNvcnRCeSB9LCBzZXRTdGF0ZV1cbiAgfSA9IGFwaTtcblxuICBjb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICBjb25zdCB7IGFjY2Vzc29yLCBjYW5Tb3J0QnkgfSA9IGNvbHVtbjtcbiAgICBjb2x1bW4uY2FuU29ydEJ5ID0gYWNjZXNzb3JcbiAgICAgID8gZ2V0Rmlyc3REZWZpbmVkKFxuICAgICAgICAgIGNhblNvcnRCeSxcbiAgICAgICAgICBkaXNhYmxlU29ydGluZyA9PT0gdHJ1ZSA/IGZhbHNlIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHRydWVcbiAgICAgICAgKVxuICAgICAgOiBmYWxzZTtcbiAgfSk7XG5cbiAgLy8gVXBkYXRlcyBzb3J0aW5nIGJhc2VkIG9uIGEgY29sdW1uSUQsIGRlc2MgZmxhZyBhbmQgbXVsdGkgZmxhZ1xuICBjb25zdCB0b2dnbGVTb3J0QnlJRCA9IChjb2x1bW5JRCwgZGVzYywgbXVsdGkpID0+IHtcbiAgICByZXR1cm4gc2V0U3RhdGUob2xkID0+IHtcbiAgICAgIGNvbnN0IHsgc29ydEJ5IH0gPSBvbGQ7XG5cbiAgICAgIC8vIEZpbmQgdGhlIGNvbHVtbiBmb3IgdGhpcyBjb2x1bW5JRFxuICAgICAgY29uc3QgY29sdW1uID0gY29sdW1ucy5maW5kKGQgPT4gZC5pZCA9PT0gY29sdW1uSUQpO1xuICAgICAgY29uc3QgcmVzb2x2ZWREZWZhdWx0U29ydERlc2MgPSBnZXRGaXJzdERlZmluZWQoXG4gICAgICAgIGNvbHVtbi5kZWZhdWx0U29ydERlc2MsXG4gICAgICAgIGRlZmF1bHRTb3J0RGVzY1xuICAgICAgKTtcblxuICAgICAgLy8gRmluZCBhbnkgZXhpc3Rpbmcgc29ydEJ5IGZvciB0aGlzIGNvbHVtblxuICAgICAgY29uc3QgZXhpc3RpbmdTb3J0QnkgPSBzb3J0QnkuZmluZChkID0+IGQuaWQgPT09IGNvbHVtbklEKTtcbiAgICAgIGNvbnN0IGhhc0Rlc2NEZWZpbmVkID0gdHlwZW9mIGRlc2MgIT09IFwidW5kZWZpbmVkXCIgJiYgZGVzYyAhPT0gbnVsbDtcblxuICAgICAgbGV0IG5ld1NvcnRCeSA9IFtdO1xuXG4gICAgICAvLyBXaGF0IHNob3VsZCB3ZSBkbyB3aXRoIHRoaXMgZmlsdGVyP1xuICAgICAgbGV0IGFjdGlvbjtcblxuICAgICAgaWYgKCFtdWx0aSkge1xuICAgICAgICBpZiAoc29ydEJ5Lmxlbmd0aCA8PSAxICYmIGV4aXN0aW5nU29ydEJ5KSB7XG4gICAgICAgICAgaWYgKGV4aXN0aW5nU29ydEJ5LmRlc2MpIHtcbiAgICAgICAgICAgIGFjdGlvbiA9IFwicmVtb3ZlXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjdGlvbiA9IFwidG9nZ2xlXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFjdGlvbiA9IFwicmVwbGFjZVwiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIWV4aXN0aW5nU29ydEJ5KSB7XG4gICAgICAgICAgYWN0aW9uID0gXCJhZGRcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoaGFzRGVzY0RlZmluZWQpIHtcbiAgICAgICAgICAgIGFjdGlvbiA9IFwic2V0XCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjdGlvbiA9IFwidG9nZ2xlXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhY3Rpb24gPT09IFwicmVwbGFjZVwiKSB7XG4gICAgICAgIG5ld1NvcnRCeSA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogY29sdW1uSUQsXG4gICAgICAgICAgICBkZXNjOiBoYXNEZXNjRGVmaW5lZCA/IGRlc2MgOiByZXNvbHZlZERlZmF1bHRTb3J0RGVzY1xuICAgICAgICAgIH1cbiAgICAgICAgXTtcbiAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSBcImFkZFwiKSB7XG4gICAgICAgIG5ld1NvcnRCeSA9IFtcbiAgICAgICAgICAuLi5zb3J0QnksXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IGNvbHVtbklELFxuICAgICAgICAgICAgZGVzYzogaGFzRGVzY0RlZmluZWQgPyBkZXNjIDogcmVzb2x2ZWREZWZhdWx0U29ydERlc2NcbiAgICAgICAgICB9XG4gICAgICAgIF07XG4gICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJzZXRcIikge1xuICAgICAgICBuZXdTb3J0QnkgPSBzb3J0QnkubWFwKGQgPT4ge1xuICAgICAgICAgIGlmIChkLmlkID09PSBjb2x1bW5JRCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uZCxcbiAgICAgICAgICAgICAgZGVzY1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGQ7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09IFwidG9nZ2xlXCIpIHtcbiAgICAgICAgbmV3U29ydEJ5ID0gc29ydEJ5Lm1hcChkID0+IHtcbiAgICAgICAgICBpZiAoZC5pZCA9PT0gY29sdW1uSUQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmQsXG4gICAgICAgICAgICAgIGRlc2M6ICFleGlzdGluZ1NvcnRCeS5kZXNjXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZDtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJyZW1vdmVcIikge1xuICAgICAgICBuZXdTb3J0QnkgPSBbXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2xkLFxuICAgICAgICBzb3J0Qnk6IG5ld1NvcnRCeVxuICAgICAgfTtcbiAgICB9LCBhY3Rpb25zLnNvcnRCeUNoYW5nZSk7XG4gIH07XG5cbiAgaG9va3MuY29sdW1ucy5wdXNoKGNvbHVtbnMgPT4ge1xuICAgIGNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgaWYgKGNvbHVtbi5jYW5Tb3J0QnkpIHtcbiAgICAgICAgY29sdW1uLnRvZ2dsZVNvcnRCeSA9IChkZXNjLCBtdWx0aSkgPT5cbiAgICAgICAgICB0b2dnbGVTb3J0QnlJRChjb2x1bW4uaWQsIGRlc2MsIG11bHRpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY29sdW1ucztcbiAgfSk7XG5cbiAgaG9va3MuZ2V0U29ydEJ5VG9nZ2xlUHJvcHMgPSBbXTtcblxuICBjb25zdCBhZGRTb3J0QnlUb2dnbGVQcm9wcyA9IChjb2x1bW5zLCBhcGkpID0+IHtcbiAgICBjb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgIGNvbnN0IHsgY2FuU29ydEJ5IH0gPSBjb2x1bW47XG4gICAgICBjb2x1bW4uZ2V0U29ydEJ5VG9nZ2xlUHJvcHMgPSBwcm9wcyA9PiB7XG4gICAgICAgIHJldHVybiBtZXJnZVByb3BzKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG9uQ2xpY2s6IGNhblNvcnRCeVxuICAgICAgICAgICAgICA/IGUgPT4ge1xuICAgICAgICAgICAgICAgICAgZS5wZXJzaXN0KCk7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4udG9nZ2xlU29ydEJ5KFxuICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICFhcGkuZGlzYWJsZU11bHRpU29ydCAmJiBlLnNoaWZ0S2V5XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICBjdXJzb3I6IGNhblNvcnRCeSA/IFwicG9pbnRlclwiIDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGl0bGU6IFwiVG9nZ2xlIFNvcnRCeVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhcHBseVByb3BIb29rcyhhcGkuaG9va3MuZ2V0U29ydEJ5VG9nZ2xlUHJvcHMsIGNvbHVtbiwgYXBpKSxcbiAgICAgICAgICBwcm9wc1xuICAgICAgICApO1xuICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gY29sdW1ucztcbiAgfTtcblxuICBob29rcy5jb2x1bW5zLnB1c2goYWRkU29ydEJ5VG9nZ2xlUHJvcHMpO1xuICBob29rcy5oZWFkZXJzLnB1c2goYWRkU29ydEJ5VG9nZ2xlUHJvcHMpO1xuXG4gIC8vIE11dGF0ZSBjb2x1bW5zIHRvIHJlZmxlY3Qgc29ydGluZyBzdGF0ZVxuICBjb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICBjb25zdCB7IGlkIH0gPSBjb2x1bW47XG4gICAgY29sdW1uLnNvcnRlZCA9IHNvcnRCeS5maW5kKGQgPT4gZC5pZCA9PT0gaWQpO1xuICAgIGNvbHVtbi5zb3J0ZWRJbmRleCA9IHNvcnRCeS5maW5kSW5kZXgoZCA9PiBkLmlkID09PSBpZCk7XG4gICAgY29sdW1uLnNvcnRlZERlc2MgPSBjb2x1bW4uc29ydGVkID8gY29sdW1uLnNvcnRlZC5kZXNjIDogdW5kZWZpbmVkO1xuICB9KTtcblxuICBjb25zdCBzb3J0ZWRSb3dzID0gdXNlTWVtbyhcbiAgICAoKSA9PiB7XG4gICAgICBpZiAobWFudWFsU29ydGluZyB8fCAhc29ydEJ5Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gcm93cztcbiAgICAgIH1cbiAgICAgIGlmIChkZWJ1ZykgY29uc29sZS5pbmZvKFwiZ2V0U29ydGVkUm93c1wiKTtcblxuICAgICAgY29uc3Qgc29ydE1ldGhvZHNCeUNvbHVtbklEID0ge307XG5cbiAgICAgIGNvbHVtbnNcbiAgICAgICAgLmZpbHRlcihjb2wgPT4gY29sLnNvcnRNZXRob2QpXG4gICAgICAgIC5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgc29ydE1ldGhvZHNCeUNvbHVtbklEW2NvbC5pZF0gPSBjb2wuc29ydE1ldGhvZDtcbiAgICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHNvcnREYXRhID0gcm93cyA9PiB7XG4gICAgICAgIC8vIFVzZSB0aGUgb3JkZXJCeUZuIHRvIGNvbXBvc2UgbXVsdGlwbGUgc29ydEJ5J3MgdG9nZXRoZXIuXG4gICAgICAgIC8vIFRoaXMgd2lsbCBhbHNvIHBlcmZvcm0gYSBzdGFibGUgc29ydGluZyB1c2luZyB0aGUgcm93IGluZGV4XG4gICAgICAgIC8vIGlmIG5lZWRlZC5cbiAgICAgICAgY29uc3Qgc29ydGVkRGF0YSA9IG9yZGVyQnlGbihcbiAgICAgICAgICByb3dzLFxuICAgICAgICAgIHNvcnRCeS5tYXAoc29ydCA9PiB7XG4gICAgICAgICAgICAvLyBTdXBwb3J0IGN1c3RvbSBzb3J0aW5nIG1ldGhvZHMgZm9yIGVhY2ggY29sdW1uXG4gICAgICAgICAgICBjb25zdCBjb2x1bW5Tb3J0QnkgPSBzb3J0TWV0aG9kc0J5Q29sdW1uSURbc29ydC5pZF07XG5cbiAgICAgICAgICAgIC8vIFJldHVybiB0aGUgY29ycmVjdCBzb3J0Rm5cbiAgICAgICAgICAgIHJldHVybiAoYSwgYikgPT5cbiAgICAgICAgICAgICAgKGNvbHVtblNvcnRCeSA/IGNvbHVtblNvcnRCeSA6IHNvcnRCeUZuKShcbiAgICAgICAgICAgICAgICBhLnZhbHVlc1tzb3J0LmlkXSxcbiAgICAgICAgICAgICAgICBiLnZhbHVlc1tzb3J0LmlkXSxcbiAgICAgICAgICAgICAgICBzb3J0LmRlc2NcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAvLyBNYXAgdGhlIGRpcmVjdGlvbnNcbiAgICAgICAgICBzb3J0QnkubWFwKGQgPT4gIWQuZGVzYylcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBvcHRpbWl6ZWQuIE5vdCBnb29kIHRvIGxvb3AgYWdhaW5cbiAgICAgICAgc29ydGVkRGF0YS5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgaWYgKCFyb3cuc3ViUm93cykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByb3cuc3ViUm93cyA9IHNvcnREYXRhKHJvdy5zdWJSb3dzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHNvcnRlZERhdGE7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gc29ydERhdGEocm93cyk7XG4gICAgfSxcbiAgICBbcm93cywgY29sdW1ucywgc29ydEJ5LCBtYW51YWxTb3J0aW5nXVxuICApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uYXBpLFxuICAgIHJvd3M6IHNvcnRlZFJvd3NcbiAgfTtcbn07XG4iXX0=