kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
216 lines (205 loc) • 25.9 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _react = _interopRequireDefault(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react"));
var _react2 = require("@testing-library/react");
var _infoHelper = _interopRequireDefault(require("../common/info-helper"));
var _cloudHeader = _interopRequireDefault(require("./cloud-components/cloud-header"));
var _loadStorageMap = _interopRequireDefault(require("./load-storage-map"));
var _componentJestUtils = require("../../../../test/helpers/component-jest-utils");
var _useCloudListProvider = require("../hooks/use-cloud-list-provider");
var _src = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/constants/src");
// SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
// @ts-nocheck
var InfoHelper = (0, _infoHelper["default"])();
var CloudHeader = (0, _cloudHeader["default"])(InfoHelper);
var LoadStorageMap = (0, _loadStorageMap["default"])(CloudHeader);
var DEFAULT_MAPS = [{
id: '1234',
title: 'first map',
description: 'description 1',
loadParams: {
id: '1234'
}
}, {
id: '5678',
title: 'second map',
description: 'description 2',
loadParams: {
id: '5678'
}
}];
var DEFAULT_PROVIDER = {
name: 'test provider',
icon: jest.fn(),
getManagementUrl: jest.fn().mockImplementation(function () {
return 'provider.url';
}),
listMaps: jest.fn().mockResolvedValue([])
};
var DEFAULT_PROPS = {
onLoadCloudMap: jest.fn()
};
jest.mock("../hooks/use-cloud-list-provider", function () {
return {
useCloudListProvider: jest.fn().mockImplementation(function () {
return {
provider: null,
setProvider: jest.fn(),
cloudProviders: []
};
})
};
});
describe('LoadStorageMap', function () {
afterEach(function () {
jest.clearAllMocks();
});
test('renders provider select and no cloud components when provider is set to null', function () {
var _renderWithTheme = (0, _componentJestUtils.renderWithTheme)( /*#__PURE__*/_react["default"].createElement(LoadStorageMap, DEFAULT_PROPS)),
getByTestId = _renderWithTheme.getByTestId;
expect(getByTestId(_src.dataTestIds.providerSelect)).toBeInTheDocument();
});
test('renders empty map list because fetchmaps return empty array', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
var _renderWithTheme2, getByText;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
_useCloudListProvider.useCloudListProvider.mockImplementation(function () {
return {
provider: DEFAULT_PROVIDER,
setProvider: jest.fn(),
cloudProviders: []
};
});
_renderWithTheme2 = (0, _componentJestUtils.renderWithTheme)( /*#__PURE__*/_react["default"].createElement(LoadStorageMap, DEFAULT_PROPS)), getByText = _renderWithTheme2.getByText;
expect(DEFAULT_PROVIDER.listMaps).toHaveBeenCalled();
// first show loading icon
expect(getByText('modal.loadingDialog.loading')).toBeInTheDocument();
// show empty maps
_context.next = 6;
return (0, _react2.waitFor)(function () {
expect(getByText('modal.loadStorageMap.noSavedMaps')).toBeInTheDocument();
});
case 6:
case "end":
return _context.stop();
}
}, _callee);
})));
test('renders map list because', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
var mapProvider, _renderWithTheme3, getByText;
return _regenerator["default"].wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
mapProvider = {
name: 'test provider',
icon: jest.fn(),
getManagementUrl: jest.fn().mockImplementation(function () {
return 'provider.url';
}),
listMaps: jest.fn().mockResolvedValue(DEFAULT_MAPS)
};
_useCloudListProvider.useCloudListProvider.mockImplementation(function () {
return {
provider: mapProvider,
setProvider: jest.fn(),
cloudProviders: []
};
});
_renderWithTheme3 = (0, _componentJestUtils.renderWithTheme)( /*#__PURE__*/_react["default"].createElement(LoadStorageMap, DEFAULT_PROPS)), getByText = _renderWithTheme3.getByText;
expect(mapProvider.listMaps).toHaveBeenCalled();
// first show loading icon
expect(getByText('modal.loadingDialog.loading')).toBeInTheDocument();
// show empty maps
_context2.next = 7;
return (0, _react2.waitFor)(function () {
DEFAULT_MAPS.forEach(function (map) {
expect(getByText(map.title)).toBeInTheDocument();
expect(getByText(map.description)).toBeInTheDocument();
});
});
case 7:
case "end":
return _context2.stop();
}
}, _callee2);
})));
test('trigger onLoadCLoudMap when clicking on a map', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
var mapProvider, _renderWithTheme4, getByText;
return _regenerator["default"].wrap(function _callee3$(_context3) {
while (1) switch (_context3.prev = _context3.next) {
case 0:
mapProvider = {
name: 'test provider',
icon: jest.fn(),
getManagementUrl: jest.fn().mockImplementation(function () {
return 'provider.url';
}),
listMaps: jest.fn().mockResolvedValue(DEFAULT_MAPS)
};
_useCloudListProvider.useCloudListProvider.mockImplementation(function () {
return {
provider: mapProvider,
setProvider: jest.fn(),
cloudProviders: []
};
});
_renderWithTheme4 = (0, _componentJestUtils.renderWithTheme)( /*#__PURE__*/_react["default"].createElement(LoadStorageMap, DEFAULT_PROPS)), getByText = _renderWithTheme4.getByText;
expect(mapProvider.listMaps).toHaveBeenCalled();
// first show loading icon
expect(getByText('modal.loadingDialog.loading')).toBeInTheDocument();
// click on a map
_context3.next = 7;
return (0, _react2.waitFor)(function () {
var map = DEFAULT_MAPS[0];
// if the component doesn't exist this will throw an exception
var mapTitleComponent = getByText(map.title);
_react2.fireEvent.click(mapTitleComponent);
expect(DEFAULT_PROPS.onLoadCloudMap).toHaveBeenCalled();
});
case 7:
case "end":
return _context3.stop();
}
}, _callee3);
})));
test('renders errors because fetchmaps rejects', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
var rejectableProvider, _renderWithTheme5, getByText;
return _regenerator["default"].wrap(function _callee4$(_context4) {
while (1) switch (_context4.prev = _context4.next) {
case 0:
rejectableProvider = {
name: 'test provider',
icon: jest.fn(),
getManagementUrl: jest.fn().mockImplementation(function () {
return 'provider.url';
}),
listMaps: jest.fn().mockRejectedValue(new Error('timeout'))
};
_useCloudListProvider.useCloudListProvider.mockImplementation(function () {
return {
provider: rejectableProvider,
setProvider: jest.fn(),
cloudProviders: []
};
});
_renderWithTheme5 = (0, _componentJestUtils.renderWithTheme)( /*#__PURE__*/_react["default"].createElement(LoadStorageMap, DEFAULT_PROPS)), getByText = _renderWithTheme5.getByText;
expect(rejectableProvider.listMaps).toHaveBeenCalled();
// first show loading icon
expect(getByText('modal.loadingDialog.loading')).toBeInTheDocument();
// show empty maps
_context4.next = 7;
return (0, _react2.waitFor)(function () {
expect(getByText('Error while fetching maps: timeout')).toBeInTheDocument();
});
case 7:
case "end":
return _context4.stop();
}
}, _callee4);
})));
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfaW5mb0hlbHBlciIsIl9jbG91ZEhlYWRlciIsIl9sb2FkU3RvcmFnZU1hcCIsIl9jb21wb25lbnRKZXN0VXRpbHMiLCJfdXNlQ2xvdWRMaXN0UHJvdmlkZXIiLCJfc3JjIiwiSW5mb0hlbHBlciIsIkluZm9IZWxwZXJGYWN0b3J5IiwiQ2xvdWRIZWFkZXIiLCJDbG91ZEhlYWRlckZhY3RvcnkiLCJMb2FkU3RvcmFnZU1hcCIsIkxvYWRTdG9yYWdlTWFwRmFjdG9yeSIsIkRFRkFVTFRfTUFQUyIsImlkIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsImxvYWRQYXJhbXMiLCJERUZBVUxUX1BST1ZJREVSIiwibmFtZSIsImljb24iLCJqZXN0IiwiZm4iLCJnZXRNYW5hZ2VtZW50VXJsIiwibW9ja0ltcGxlbWVudGF0aW9uIiwibGlzdE1hcHMiLCJtb2NrUmVzb2x2ZWRWYWx1ZSIsIkRFRkFVTFRfUFJPUFMiLCJvbkxvYWRDbG91ZE1hcCIsIm1vY2siLCJ1c2VDbG91ZExpc3RQcm92aWRlciIsInByb3ZpZGVyIiwic2V0UHJvdmlkZXIiLCJjbG91ZFByb3ZpZGVycyIsImRlc2NyaWJlIiwiYWZ0ZXJFYWNoIiwiY2xlYXJBbGxNb2NrcyIsInRlc3QiLCJfcmVuZGVyV2l0aFRoZW1lIiwicmVuZGVyV2l0aFRoZW1lIiwiY3JlYXRlRWxlbWVudCIsImdldEJ5VGVzdElkIiwiZXhwZWN0IiwiZGF0YVRlc3RJZHMiLCJwcm92aWRlclNlbGVjdCIsInRvQmVJblRoZURvY3VtZW50IiwiX2FzeW5jVG9HZW5lcmF0b3IyIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJfcmVuZGVyV2l0aFRoZW1lMiIsImdldEJ5VGV4dCIsIndyYXAiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJ0b0hhdmVCZWVuQ2FsbGVkIiwid2FpdEZvciIsInN0b3AiLCJfY2FsbGVlMiIsIm1hcFByb3ZpZGVyIiwiX3JlbmRlcldpdGhUaGVtZTMiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJmb3JFYWNoIiwibWFwIiwiX2NhbGxlZTMiLCJfcmVuZGVyV2l0aFRoZW1lNCIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsIm1hcFRpdGxlQ29tcG9uZW50IiwiZmlyZUV2ZW50IiwiY2xpY2siLCJfY2FsbGVlNCIsInJlamVjdGFibGVQcm92aWRlciIsIl9yZW5kZXJXaXRoVGhlbWU1IiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwibW9ja1JlamVjdGVkVmFsdWUiLCJFcnJvciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NyYy9tb2RhbHMvbG9hZC1zdG9yYWdlLW1hcC5zcGVjLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG4vLyBAdHMtbm9jaGVja1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7ZmlyZUV2ZW50LCB3YWl0Rm9yfSBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3JlYWN0JztcbmltcG9ydCBJbmZvSGVscGVyRmFjdG9yeSBmcm9tICcuLi9jb21tb24vaW5mby1oZWxwZXInO1xuaW1wb3J0IENsb3VkSGVhZGVyRmFjdG9yeSBmcm9tICcuL2Nsb3VkLWNvbXBvbmVudHMvY2xvdWQtaGVhZGVyJztcbmltcG9ydCBMb2FkU3RvcmFnZU1hcEZhY3RvcnkgZnJvbSAnLi9sb2FkLXN0b3JhZ2UtbWFwJztcbmltcG9ydCB7cmVuZGVyV2l0aFRoZW1lfSBmcm9tICd0ZXN0L2hlbHBlcnMvY29tcG9uZW50LWplc3QtdXRpbHMnO1xuaW1wb3J0IHt1c2VDbG91ZExpc3RQcm92aWRlcn0gZnJvbSAnLi4vaG9va3MvdXNlLWNsb3VkLWxpc3QtcHJvdmlkZXInO1xuaW1wb3J0IHtkYXRhVGVzdElkc30gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuXG5jb25zdCBJbmZvSGVscGVyID0gSW5mb0hlbHBlckZhY3RvcnkoKTtcbmNvbnN0IENsb3VkSGVhZGVyID0gQ2xvdWRIZWFkZXJGYWN0b3J5KEluZm9IZWxwZXIpO1xuY29uc3QgTG9hZFN0b3JhZ2VNYXAgPSBMb2FkU3RvcmFnZU1hcEZhY3RvcnkoQ2xvdWRIZWFkZXIpO1xuXG5jb25zdCBERUZBVUxUX01BUFMgPSBbXG4gIHtcbiAgICBpZDogJzEyMzQnLFxuICAgIHRpdGxlOiAnZmlyc3QgbWFwJyxcbiAgICBkZXNjcmlwdGlvbjogJ2Rlc2NyaXB0aW9uIDEnLFxuICAgIGxvYWRQYXJhbXM6IHtcbiAgICAgIGlkOiAnMTIzNCdcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBpZDogJzU2NzgnLFxuICAgIHRpdGxlOiAnc2Vjb25kIG1hcCcsXG4gICAgZGVzY3JpcHRpb246ICdkZXNjcmlwdGlvbiAyJyxcbiAgICBsb2FkUGFyYW1zOiB7XG4gICAgICBpZDogJzU2NzgnXG4gICAgfVxuICB9XG5dO1xuXG5jb25zdCBERUZBVUxUX1BST1ZJREVSID0ge1xuICBuYW1lOiAndGVzdCBwcm92aWRlcicsXG4gIGljb246IGplc3QuZm4oKSxcbiAgZ2V0TWFuYWdlbWVudFVybDogamVzdC5mbigpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAncHJvdmlkZXIudXJsJyksXG4gIGxpc3RNYXBzOiBqZXN0LmZuKCkubW9ja1Jlc29sdmVkVmFsdWUoW10pXG59O1xuXG5jb25zdCBERUZBVUxUX1BST1BTID0ge1xuICBvbkxvYWRDbG91ZE1hcDogamVzdC5mbigpXG59O1xuXG5qZXN0Lm1vY2soJy4uL2hvb2tzL3VzZS1jbG91ZC1saXN0LXByb3ZpZGVyJywgKCkgPT4gKHtcbiAgdXNlQ2xvdWRMaXN0UHJvdmlkZXI6IGplc3QuZm4oKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gKHtcbiAgICBwcm92aWRlcjogbnVsbCxcbiAgICBzZXRQcm92aWRlcjogamVzdC5mbigpLFxuICAgIGNsb3VkUHJvdmlkZXJzOiBbXVxuICB9KSlcbn0pKTtcblxuZGVzY3JpYmUoJ0xvYWRTdG9yYWdlTWFwJywgKCkgPT4ge1xuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGplc3QuY2xlYXJBbGxNb2NrcygpO1xuICB9KTtcblxuICB0ZXN0KCdyZW5kZXJzIHByb3ZpZGVyIHNlbGVjdCBhbmQgbm8gY2xvdWQgY29tcG9uZW50cyB3aGVuIHByb3ZpZGVyIGlzIHNldCB0byBudWxsJywgKCkgPT4ge1xuICAgIGNvbnN0IHtnZXRCeVRlc3RJZH0gPSByZW5kZXJXaXRoVGhlbWUoPExvYWRTdG9yYWdlTWFwIHsuLi5ERUZBVUxUX1BST1BTfSAvPik7XG4gICAgZXhwZWN0KGdldEJ5VGVzdElkKGRhdGFUZXN0SWRzLnByb3ZpZGVyU2VsZWN0KSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgfSk7XG5cbiAgdGVzdCgncmVuZGVycyBlbXB0eSBtYXAgbGlzdCBiZWNhdXNlIGZldGNobWFwcyByZXR1cm4gZW1wdHkgYXJyYXknLCBhc3luYyAoKSA9PiB7XG4gICAgdXNlQ2xvdWRMaXN0UHJvdmlkZXIubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7XG4gICAgICBwcm92aWRlcjogREVGQVVMVF9QUk9WSURFUixcbiAgICAgIHNldFByb3ZpZGVyOiBqZXN0LmZuKCksXG4gICAgICBjbG91ZFByb3ZpZGVyczogW11cbiAgICB9KSk7XG5cbiAgICBjb25zdCB7Z2V0QnlUZXh0fSA9IHJlbmRlcldpdGhUaGVtZSg8TG9hZFN0b3JhZ2VNYXAgey4uLkRFRkFVTFRfUFJPUFN9IC8+KTtcbiAgICBleHBlY3QoREVGQVVMVF9QUk9WSURFUi5saXN0TWFwcykudG9IYXZlQmVlbkNhbGxlZCgpO1xuXG4gICAgLy8gZmlyc3Qgc2hvdyBsb2FkaW5nIGljb25cbiAgICBleHBlY3QoZ2V0QnlUZXh0KCdtb2RhbC5sb2FkaW5nRGlhbG9nLmxvYWRpbmcnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcblxuICAgIC8vIHNob3cgZW1wdHkgbWFwc1xuICAgIGF3YWl0IHdhaXRGb3IoKCkgPT4ge1xuICAgICAgZXhwZWN0KGdldEJ5VGV4dCgnbW9kYWwubG9hZFN0b3JhZ2VNYXAubm9TYXZlZE1hcHMnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgncmVuZGVycyBtYXAgbGlzdCBiZWNhdXNlJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG1hcFByb3ZpZGVyID0ge1xuICAgICAgbmFtZTogJ3Rlc3QgcHJvdmlkZXInLFxuICAgICAgaWNvbjogamVzdC5mbigpLFxuICAgICAgZ2V0TWFuYWdlbWVudFVybDogamVzdC5mbigpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAncHJvdmlkZXIudXJsJyksXG4gICAgICBsaXN0TWFwczogamVzdC5mbigpLm1vY2tSZXNvbHZlZFZhbHVlKERFRkFVTFRfTUFQUylcbiAgICB9O1xuICAgIHVzZUNsb3VkTGlzdFByb3ZpZGVyLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAoe1xuICAgICAgcHJvdmlkZXI6IG1hcFByb3ZpZGVyLFxuICAgICAgc2V0UHJvdmlkZXI6IGplc3QuZm4oKSxcbiAgICAgIGNsb3VkUHJvdmlkZXJzOiBbXVxuICAgIH0pKTtcblxuICAgIGNvbnN0IHtnZXRCeVRleHR9ID0gcmVuZGVyV2l0aFRoZW1lKDxMb2FkU3RvcmFnZU1hcCB7Li4uREVGQVVMVF9QUk9QU30gLz4pO1xuICAgIGV4cGVjdChtYXBQcm92aWRlci5saXN0TWFwcykudG9IYXZlQmVlbkNhbGxlZCgpO1xuXG4gICAgLy8gZmlyc3Qgc2hvdyBsb2FkaW5nIGljb25cbiAgICBleHBlY3QoZ2V0QnlUZXh0KCdtb2RhbC5sb2FkaW5nRGlhbG9nLmxvYWRpbmcnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcblxuICAgIC8vIHNob3cgZW1wdHkgbWFwc1xuICAgIGF3YWl0IHdhaXRGb3IoKCkgPT4ge1xuICAgICAgREVGQVVMVF9NQVBTLmZvckVhY2gobWFwID0+IHtcbiAgICAgICAgZXhwZWN0KGdldEJ5VGV4dChtYXAudGl0bGUpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgICBleHBlY3QoZ2V0QnlUZXh0KG1hcC5kZXNjcmlwdGlvbikpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgndHJpZ2dlciBvbkxvYWRDTG91ZE1hcCB3aGVuIGNsaWNraW5nIG9uIGEgbWFwJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG1hcFByb3ZpZGVyID0ge1xuICAgICAgbmFtZTogJ3Rlc3QgcHJvdmlkZXInLFxuICAgICAgaWNvbjogamVzdC5mbigpLFxuICAgICAgZ2V0TWFuYWdlbWVudFVybDogamVzdC5mbigpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAncHJvdmlkZXIudXJsJyksXG4gICAgICBsaXN0TWFwczogamVzdC5mbigpLm1vY2tSZXNvbHZlZFZhbHVlKERFRkFVTFRfTUFQUylcbiAgICB9O1xuICAgIHVzZUNsb3VkTGlzdFByb3ZpZGVyLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAoe1xuICAgICAgcHJvdmlkZXI6IG1hcFByb3ZpZGVyLFxuICAgICAgc2V0UHJvdmlkZXI6IGplc3QuZm4oKSxcbiAgICAgIGNsb3VkUHJvdmlkZXJzOiBbXVxuICAgIH0pKTtcblxuICAgIGNvbnN0IHtnZXRCeVRleHR9ID0gcmVuZGVyV2l0aFRoZW1lKDxMb2FkU3RvcmFnZU1hcCB7Li4uREVGQVVMVF9QUk9QU30gLz4pO1xuICAgIGV4cGVjdChtYXBQcm92aWRlci5saXN0TWFwcykudG9IYXZlQmVlbkNhbGxlZCgpO1xuXG4gICAgLy8gZmlyc3Qgc2hvdyBsb2FkaW5nIGljb25cbiAgICBleHBlY3QoZ2V0QnlUZXh0KCdtb2RhbC5sb2FkaW5nRGlhbG9nLmxvYWRpbmcnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcblxuICAgIC8vIGNsaWNrIG9uIGEgbWFwXG4gICAgYXdhaXQgd2FpdEZvcigoKSA9PiB7XG4gICAgICBjb25zdCBtYXAgPSBERUZBVUxUX01BUFNbMF07XG4gICAgICAvLyBpZiB0aGUgY29tcG9uZW50IGRvZXNuJ3QgZXhpc3QgdGhpcyB3aWxsIHRocm93IGFuIGV4Y2VwdGlvblxuICAgICAgY29uc3QgbWFwVGl0bGVDb21wb25lbnQgPSBnZXRCeVRleHQobWFwLnRpdGxlKTtcbiAgICAgIGZpcmVFdmVudC5jbGljayhtYXBUaXRsZUNvbXBvbmVudCk7XG4gICAgICBleHBlY3QoREVGQVVMVF9QUk9QUy5vbkxvYWRDbG91ZE1hcCkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdyZW5kZXJzIGVycm9ycyBiZWNhdXNlIGZldGNobWFwcyByZWplY3RzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlamVjdGFibGVQcm92aWRlciA9IHtcbiAgICAgIG5hbWU6ICd0ZXN0IHByb3ZpZGVyJyxcbiAgICAgIGljb246IGplc3QuZm4oKSxcbiAgICAgIGdldE1hbmFnZW1lbnRVcmw6IGplc3QuZm4oKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gJ3Byb3ZpZGVyLnVybCcpLFxuICAgICAgbGlzdE1hcHM6IGplc3QuZm4oKS5tb2NrUmVqZWN0ZWRWYWx1ZShuZXcgRXJyb3IoJ3RpbWVvdXQnKSlcbiAgICB9O1xuICAgIHVzZUNsb3VkTGlzdFByb3ZpZGVyLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAoe1xuICAgICAgcHJvdmlkZXI6IHJlamVjdGFibGVQcm92aWRlcixcbiAgICAgIHNldFByb3ZpZGVyOiBqZXN0LmZuKCksXG4gICAgICBjbG91ZFByb3ZpZGVyczogW11cbiAgICB9KSk7XG5cbiAgICBjb25zdCB7Z2V0QnlUZXh0fSA9IHJlbmRlcldpdGhUaGVtZSg8TG9hZFN0b3JhZ2VNYXAgey4uLkRFRkFVTFRfUFJPUFN9IC8+KTtcbiAgICBleHBlY3QocmVqZWN0YWJsZVByb3ZpZGVyLmxpc3RNYXBzKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG5cbiAgICAvLyBmaXJzdCBzaG93IGxvYWRpbmcgaWNvblxuICAgIGV4cGVjdChnZXRCeVRleHQoJ21vZGFsLmxvYWRpbmdEaWFsb2cubG9hZGluZycpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuXG4gICAgLy8gc2hvdyBlbXB0eSBtYXBzXG4gICAgYXdhaXQgd2FpdEZvcigoKSA9PiB7XG4gICAgICBleHBlY3QoZ2V0QnlUZXh0KCdFcnJvciB3aGlsZSBmZXRjaGluZyBtYXBzOiB0aW1lb3V0JykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBSUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsV0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsWUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksZUFBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssbUJBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLHFCQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxJQUFBLEdBQUFQLE9BQUE7QUFYQTtBQUNBOztBQUVBOztBQVVBLElBQU1RLFVBQVUsR0FBRyxJQUFBQyxzQkFBaUIsRUFBQyxDQUFDO0FBQ3RDLElBQU1DLFdBQVcsR0FBRyxJQUFBQyx1QkFBa0IsRUFBQ0gsVUFBVSxDQUFDO0FBQ2xELElBQU1JLGNBQWMsR0FBRyxJQUFBQywwQkFBcUIsRUFBQ0gsV0FBVyxDQUFDO0FBRXpELElBQU1JLFlBQVksR0FBRyxDQUNuQjtFQUNFQyxFQUFFLEVBQUUsTUFBTTtFQUNWQyxLQUFLLEVBQUUsV0FBVztFQUNsQkMsV0FBVyxFQUFFLGVBQWU7RUFDNUJDLFVBQVUsRUFBRTtJQUNWSCxFQUFFLEVBQUU7RUFDTjtBQUNGLENBQUMsRUFDRDtFQUNFQSxFQUFFLEVBQUUsTUFBTTtFQUNWQyxL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