UNPKG

kepler.gl

Version:

kepler.gl is a webgl based application to visualize large scale location data in the browser

1,156 lines (1,149 loc) 111 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.addEffect = addEffect; exports.addFilter = addFilter; exports.addLayer = addLayer; exports.applyCPUFilter = applyCPUFilter; exports.applyFilterConfig = applyFilterConfig; exports.applyLayerConfig = applyLayerConfig; exports.copyTableColumn = copyTableColumn; exports.createNewDatasetSuccess = void 0; exports.createOrUpdateFilter = createOrUpdateFilter; exports.deleteFeature = deleteFeature; exports.duplicateLayer = duplicateLayer; exports.interactionConfigChange = interactionConfigChange; exports.layerColorUIChange = layerColorUIChange; exports.layerConfigChange = layerConfigChange; exports.layerFilteredItemsChange = layerFilteredItemsChange; exports.layerSetIsValid = layerSetIsValid; exports.layerTextLabelChange = layerTextLabelChange; exports.layerToggleVisibility = layerToggleVisibility; exports.layerTypeChange = layerTypeChange; exports.layerVisConfigChange = layerVisConfigChange; exports.layerVisualChannelConfigChange = layerVisualChannelConfigChange; exports.loadFileStepSuccess = loadFileStepSuccess; exports.loadFiles = loadFiles; exports.loadFilesErr = loadFilesErr; exports.loadFilesSuccess = loadFilesSuccess; exports.loadNextFile = loadNextFile; exports.nextFileBatch = nextFileBatch; exports.onLayerClick = onLayerClick; exports.onLayerHover = onLayerHover; exports.onMapClick = onMapClick; exports.onMouseMove = onMouseMove; exports.pinTableColumn = pinTableColumn; exports.processFileContent = processFileContent; exports.removeDataset = removeDataset; exports.removeEffect = removeEffect; exports.removeFilter = removeFilter; exports.removeLayer = removeLayer; exports.renameDataset = renameDataset; exports.reorderEffect = reorderEffect; exports.reorderLayer = reorderLayer; exports.setAnimationConfig = setAnimationConfig; exports.setColumnDisplayFormat = setColumnDisplayFormat; exports.setEditorMode = setEditorMode; exports.setFeatures = setFeatures; exports.setFilter = setFilter; exports.setFilterAnimationTime = setFilterAnimationTime; exports.setFilterAnimationTimeConfig = setFilterAnimationTimeConfig; exports.setFilterAnimationWindow = setFilterAnimationWindow; exports.setFilterPlot = setFilterPlot; exports.setFilterView = setFilterView; exports.setLayerAnimationTime = setLayerAnimationTime; exports.setLayerAnimationTimeConfig = setLayerAnimationTimeConfig; exports.setLoadingIndicator = void 0; exports.setMapInfo = setMapInfo; exports.setPolygonFilterLayer = setPolygonFilterLayer; exports.setSelectedFeature = setSelectedFeature; exports.setTimeFilterSyncTimelineMode = setTimeFilterSyncTimelineMode; exports.showDatasetTable = showDatasetTable; exports.sortTableColumn = sortTableColumn; exports.syncTimeFilterWithLayerTimeline = syncTimeFilterWithLayerTimeline; exports.toggleEditorVisibility = toggleEditorVisibility; exports.toggleFilterAnimation = toggleFilterAnimation; exports.toggleFilterFeature = toggleFilterFeature; exports.toggleLayerAnimation = toggleLayerAnimation; exports.toggleLayerAnimationControl = toggleLayerAnimationControl; exports.toggleLayerForMap = toggleLayerForMap; exports.updateDatasetProps = updateDatasetProps; exports.updateEffect = updateEffect; exports.updateFilterAnimationSpeed = updateFilterAnimationSpeed; exports.updateLayerAnimationSpeed = updateLayerAnimationSpeed; exports.updateLayerBlending = updateLayerBlending; exports.updateOverlayBlending = updateOverlayBlending; exports.updateTableColor = updateTableColor; exports.updateVisData = updateVisData; var _actionTypes = _interopRequireDefault(require("./action-types")); var _toolkit = require("@reduxjs/toolkit"); // SPDX-License-Identifier: MIT // Copyright contributors to the kepler.gl project // vis-state-reducer // TODO - import LoaderObject type from @loaders.gl/core when supported // TODO - import LoadOptions type from @loaders.gl/core when supported /** * Update layer base config: dataId, label, column, isVisible * @param oldLayerId - layer id to be updated * @param newLayerConfig - new layer config * @param layerIndex - (Optional) Index of the layer to be updated (can be useful in some cases, because * the layer id might change during update, e.g. when the type of the layer changes) * @returns action * @public */ function applyLayerConfig(oldLayerId, newLayerConfig, layerIndex) { return { type: _actionTypes["default"].APPLY_LAYER_CONFIG, oldLayerId: oldLayerId, newLayerConfig: newLayerConfig, layerIndex: layerIndex }; } /** * Update layer base config: dataId, label, column, isVisible * @param oldLayer - layer to be updated * @param newConfig - new config to be merged with old config * @returns action * @public */ function layerConfigChange(oldLayer, newConfig) { return { type: _actionTypes["default"].LAYER_CONFIG_CHANGE, oldLayer: oldLayer, newConfig: newConfig }; } /** * Update layer visibility depends on splitMap single or dual * @param layerId - layerId to be updated * @param isVisible - whether this layer is visible globally * @param splitMapId - id for this splitMap * @returns action * @public */ function layerToggleVisibility(layerId, isVisible, splitMapId) { return { type: _actionTypes["default"].LAYER_TOGGLE_VISIBILITY, layerId: layerId, isVisible: isVisible, splitMapId: splitMapId }; } /** * Update layer text label * @param oldLayer - layer to be updated * @param idx -`idx` of text label to be updated * @param prop - `prop` of text label, e,g, `anchor`, `alignment`, `color`, `size`, `field`, `outlineWidth`, `outlineColor` * @param value - new value * @returns action * @public */ function layerTextLabelChange(oldLayer, idx, prop, value) { return { type: _actionTypes["default"].LAYER_TEXT_LABEL_CHANGE, oldLayer: oldLayer, idx: idx, prop: prop, value: value }; } /** * Changes value of isValid flag for a layer. * The action also updates visibility of the layer based on isValid. * @param oldLayer - layer to be updated * @param isValid - new value for isValid flag * @returns action * @public */ function layerSetIsValid(oldLayer, isValid) { return { type: _actionTypes["default"].LAYER_SET_IS_VALID, oldLayer: oldLayer, isValid: isValid }; } /** * Update layer type. Previews layer config will be copied if applicable. * @param oldLayer - layer to be updated * @param newType - new type * @returns action * @public */ function layerTypeChange(oldLayer, newType) { return { type: _actionTypes["default"].LAYER_TYPE_CHANGE, oldLayer: oldLayer, newType: newType }; } /** * Update layer visual channel * @memberof visStateActions * @param oldLayer - layer to be updated * @param newConfig - new visual channel config * @param channel - channel to be updated * @returns action * @public */ function layerVisualChannelConfigChange(oldLayer, newConfig, channel, newVisConfig) { return { type: _actionTypes["default"].LAYER_VISUAL_CHANNEL_CHANGE, oldLayer: oldLayer, newConfig: newConfig, channel: channel, newVisConfig: newVisConfig }; } /** * Update layer `visConfig` * @memberof visStateActions * @param oldLayer - layer to be updated * @param newVisConfig - new visConfig as a key value map: e.g. `{opacity: 0.8}` * @returns action * @public */ function layerVisConfigChange(oldLayer, newVisConfig) { return { type: _actionTypes["default"].LAYER_VIS_CONFIG_CHANGE, oldLayer: oldLayer, newVisConfig: newVisConfig }; } /** * Set the color palette ui for layer color * @memberof visStateActions * @param oldLayer - layer to be updated * @param prop - which color prop * @param newConfig - to be merged * @returns action * @public */ function layerColorUIChange(oldLayer, prop, newConfig) { return { type: _actionTypes["default"].LAYER_COLOR_UI_CHANGE, oldLayer: oldLayer, prop: prop, newConfig: newConfig }; } /** * Update layer blending mode * @memberof visStateActions * @param mode one of `additive`, `normal` and `subtractive` * @returns action * @public */ function updateLayerBlending(mode) { return { type: _actionTypes["default"].UPDATE_LAYER_BLENDING, mode: mode }; } /** * Update overlay blending mode * @memberof visStateActions * @param mode one of `screen`, `normal` and `darken` * @returns action * @public */ function updateOverlayBlending(mode) { return { type: _actionTypes["default"].UPDATE_OVERLAY_BLENDING, mode: mode }; } /** * Update `interactionConfig` * @memberof visStateActions * @param config - new config as key value map: `{tooltip: {enabled: true}}` * @returns action * @public */ function interactionConfigChange(config) { return { type: _actionTypes["default"].INTERACTION_CONFIG_CHANGE, config: config }; } /** * Update filter config * @param filterId - id of the filter to be updated * @param newFilter - new filter config * @returns action * @public */ function applyFilterConfig(filterId, newFilter) { return { type: _actionTypes["default"].APPLY_FILTER_CONFIG, filterId: filterId, newFilter: newFilter }; } /** * Update filter property * @memberof visStateActions * @param idx -`idx` of filter to be updated * @param prop - `prop` of filter, e,g, `dataId`, `name`, `value` * or an array e.g. ['idx', 'name']. in that case the value * should also be an array of the corresponding values (by index) * @param value - new value * @param valueIndex - dataId index * @returns action * @public */ function setFilter(idx, prop, value, valueIndex) { return { type: _actionTypes["default"].SET_FILTER, idx: idx, prop: prop, value: value, valueIndex: valueIndex }; } /** * Same as Update filter * @memberof visStateActions * @param idx -`idx` of filter to be updated * @param prop - `prop` of filter, e,g, `dataId`, `name`, `value` * @param value - new value * @param valueIndex - dataId index * @returns action * @public */ function setFilterAnimationTime(idx, prop, value, valueIndex) { return { type: _actionTypes["default"].SET_FILTER_ANIMATION_TIME, idx: idx, prop: prop, value: value, valueIndex: valueIndex }; } /** * Same as Update filter * @memberof visStateActions * @public */ function setFilterAnimationWindow(_ref) { var id = _ref.id, animationWindow = _ref.animationWindow; return { type: _actionTypes["default"].SET_FILTER_ANIMATION_WINDOW, id: id, animationWindow: animationWindow }; } /** * Add a new filter * @memberof visStateActions * @param dataId - dataset `id` this new filter is associated with * @param id - `id` for the new filter * @returns action * @public */ function addFilter(dataId, id) { return { type: _actionTypes["default"].ADD_FILTER, dataId: dataId, id: id }; } /** * Create or updates a filter * @memberof visStateActions * @param dataId - dataset `id` this new filter is associated with * @returns action * @public */ function createOrUpdateFilter(id, dataId, field, value) { return { type: _actionTypes["default"].CREATE_OR_UPDATE_FILTER, id: id, dataId: dataId, field: field, value: value }; } /** * Add a new layer * @memberof visStateActions * @param config - new layer config * @param datasetId - dataset id used for creating an empty layer * @returns action * @public */ function addLayer(config, datasetId) { return { type: _actionTypes["default"].ADD_LAYER, config: config, datasetId: datasetId }; } /** * Reorder layer, order is an array of layer indexes, index 0 will be the one at the bottom * @memberof visStateActions * @param order an array of layer indexes * @returns action * @public * @example * * bring `layers[1]` below `layers[0]`, the sequence layers will be rendered is `layers[1].id`, `layers[0].id`, `layers[2].id`, `layers[3].id`. * `layers[1]` will be at the bottom, `layers[13]` will be at the top. * this.props.dispatch(reorderLayer([`layers[1].id`, `layers[0].id`, `layers[2].id`, `layers[3].id`])); */ function reorderLayer(order) { return { type: _actionTypes["default"].REORDER_LAYER, order: order }; } /** * Remove a filter from `visState.filters`, once a filter is removed, data will be re-filtered and layer will be updated * @memberof visStateActions * @param idx idx of filter to be removed * @returns action * @public */ function removeFilter(idx) { return { type: _actionTypes["default"].REMOVE_FILTER, idx: idx }; } /** * Remove a layer * @memberof visStateActions * @param id idx of layer to be removed * @returns action * @public */ function removeLayer(id) { return { type: _actionTypes["default"].REMOVE_LAYER, id: id }; } /** * Duplicate a layer * @memberof visStateActions * @param id id of layer to be duplicated * @returns action * @public */ function duplicateLayer(id) { return { type: _actionTypes["default"].DUPLICATE_LAYER, id: id }; } /** * Add a new effect * @memberof visStateActions * @param config - new effect config * @returns action * @public */ function addEffect(config) { return { type: _actionTypes["default"].ADD_EFFECT, config: config }; } /** * Reorder effects * @memberof visStateActions * @param order an array of effect ids * @returns action * @public */ function reorderEffect(order) { return { type: _actionTypes["default"].REORDER_EFFECT, order: order }; } /** * Remove an effect * @memberof visStateActions * @param id idx of the effect to be removed * @returns action * @public */ function removeEffect(id) { return { type: _actionTypes["default"].REMOVE_EFFECT, id: id }; } /** * Update an effect * @memberof visStateActions * @param props idx of the effect to be updated with specified props * @returns action * @public */ function updateEffect(id, props) { return { type: _actionTypes["default"].UPDATE_EFFECT, id: id, props: props }; } /** * Remove a dataset and all layers, filters, tooltip configs that based on it * @memberof visStateActions * @param dataId dataset id * @returns action * @public */ function removeDataset(dataId) { return { type: _actionTypes["default"].REMOVE_DATASET, dataId: dataId }; } /** * Display dataset table in a modal * @memberof visStateActions * @param dataId dataset id to show in table * @returns action * @public */ function showDatasetTable(dataId) { return { type: _actionTypes["default"].SHOW_DATASET_TABLE, dataId: dataId }; } /** * Update dataset color to custom by means of color picker * @memberof visStateActions * @param dataId dataset `id` this custom color is associated with * @param newColor custom color in RGBformat * @returns action * @public */ function updateTableColor(dataId, newColor) { return { type: _actionTypes["default"].UPDATE_TABLE_COLOR, dataId: dataId, newColor: newColor }; } /** * Sort dataset column, for table display * @memberof visStateActions * @param dataId * @param column * @param mode * @returns action * @public */ function sortTableColumn(dataId, column, mode) { return { type: _actionTypes["default"].SORT_TABLE_COLUMN, dataId: dataId, column: column, mode: mode }; } /** * Pin dataset column, for table display * @param dataId * @param column * @returns action * @public */ function pinTableColumn(dataId, column) { return { type: _actionTypes["default"].PIN_TABLE_COLUMN, dataId: dataId, column: column }; } /** * Copy column, for table display * @param dataId * @param column * @returns action * @public */ function copyTableColumn(dataId, column) { return { type: _actionTypes["default"].COPY_TABLE_COLUMN, dataId: dataId, column: column }; } /** * Set column display format * @param dataId * @param formats * @returns action * @public */ function setColumnDisplayFormat(dataId, formats) { return { type: _actionTypes["default"].SET_COLUMN_DISPLAY_FORMAT, dataId: dataId, formats: formats }; } // * @param dataset.info -info of a dataset // * @param dataset.info.id - id of this dataset. If config is defined, `id` should matches the `dataId` in config. // * @param dataset.info.label - A display name of this dataset // * @param dataset.data - ***required** The data object, in a tabular format with 2 properties `fields` and `rows` // * @param dataset.data.fields - ***required** Array of fields, // * @param dataset.data.fields.name - ***required** Name of the field, // * @param dataset.data.rows - ***required** Array of rows, in a tabular format with `fields` and `rows` /** * Add new dataset to `visState`, with option to load a map config along with the datasets * @memberof visStateActions * @param datasets - ***required** datasets can be a dataset or an array of datasets * Each dataset object needs to have `info` and `data` property. * @param {object} options * @param options.centerMap `default: true` if `centerMap` is set to `true` kepler.gl will * place the map view within the data points boundaries * @param options.readOnly `default: false` if `readOnly` is set to `true` * the left setting panel will be hidden * @param config this object will contain the full kepler.gl instance configuration {mapState, mapStyle, visState} * @returns action * @public */ function updateVisData(datasets, options, config) { return { type: _actionTypes["default"].UPDATE_VIS_DATA, datasets: datasets, options: options, config: config }; } /** * Rename an existing dataset in `visState` * @memberof visStateActions * @param dataId - ***required** Id of the dataset to update * @param label - ***required** New name for the dataset * @returns action * @public */ function renameDataset(dataId, label) { return { type: _actionTypes["default"].RENAME_DATASET, dataId: dataId, label: label }; } /** * Update an existing dataset props in `visState` * @param dataId - ***required** Id of the dataset to update * @param props - ***required** New props to update * @returns action */ function updateDatasetProps(dataId, props) { return { type: _actionTypes["default"].UPDATE_DATASET_PROPS, dataId: dataId, props: props }; } /** * Start and end filter animation * @memberof visStateActions * @param {Number} idx of filter * @returns action * @public */ function toggleFilterAnimation(idx) { return { type: _actionTypes["default"].TOGGLE_FILTER_ANIMATION, idx: idx }; } /** * Change filter animation speed * @memberof visStateActions * @param idx - `idx` of filter * @param speed - `speed` to change it to. `speed` is a multiplier * @returns action * @public */ function updateFilterAnimationSpeed(idx, speed) { return { type: _actionTypes["default"].UPDATE_FILTER_ANIMATION_SPEED, idx: idx, speed: speed }; } /** * Set animation config: works with both layer animation and filter animation * @param config * @returns action */ function setAnimationConfig(config) { return { type: _actionTypes["default"].SET_ANIMATION_CONFIG, config: config }; } /** * Reset animation * @memberof visStateActions * @param value - Current value of the slider * @returns action * @public */ function setLayerAnimationTime(value) { return { type: _actionTypes["default"].SET_LAYER_ANIMATION_TIME, value: value }; } /** * update trip layer animation speed * @memberof visStateActions * @param speed - `speed` to change it to. `speed` is a multiplier * @returns action * @public */ function updateLayerAnimationSpeed(speed) { return { type: _actionTypes["default"].UPDATE_LAYER_ANIMATION_SPEED, speed: speed }; } /** * start end end layer animation * @memberof visStateActions * @returns action * @public */ function toggleLayerAnimation() { return { type: _actionTypes["default"].TOGGLE_LAYER_ANIMATION }; } /** * hide and show layer animation control * @memberof visStateActions * @returns action * @public */ function toggleLayerAnimationControl() { return { type: _actionTypes["default"].TOGGLE_LAYER_ANIMATION_CONTROL }; } /** * Show larger time filter at bottom for time playback (apply to time filter only) * @memberof visStateActions * @param idx - index of filter to enlarge * @param view - type of filter view * @returns action * @public */ function setFilterView(idx, view) { return { type: _actionTypes["default"].SET_FILTER_VIEW, idx: idx, view: view }; } /** * Show/hide filter feature on map * @memberof visStateActions * @param idx - index of filter feature to show/hide * @return action */ function toggleFilterFeature(idx) { return { type: _actionTypes["default"].TOGGLE_FILTER_FEATURE, idx: idx }; } /** * Trigger layer hover event with hovered object * @memberof visStateActions * @param info - Object hovered, returned by deck.gl. * @param mapIndex - Optional property for limiting the display of the `<MapPopover>` to the `<MapContainer>` the user is interacting with. * @returns action * @public */ function onLayerHover(info, mapIndex) { return { type: _actionTypes["default"].LAYER_HOVER, info: info, mapIndex: mapIndex }; } /** * Trigger layer click event with clicked object * @memberof visStateActions * @param info - Object clicked, returned by deck.gl * @returns action * @public */ function onLayerClick(info) { return { type: _actionTypes["default"].LAYER_CLICK, info: info }; } /** * Trigger map click event, unselect clicked object * @memberof visStateActions * @returns action * @public */ function onMapClick() { return { type: _actionTypes["default"].MAP_CLICK }; } /** * Trigger map mouse moveevent, payload would be * React-map-gl MapLayerMouseEvent * https://visgl.github.io/react-map-gl/docs/api-reference/types#maplayermouseevent * * @memberof visStateActions * @param evt - MapLayerMouseEvent * @returns action * @public */ function onMouseMove(evt) { return { type: _actionTypes["default"].MOUSE_MOVE, evt: evt }; } /** * Toggle visibility of a layer in a split map * @memberof visStateActions * @param mapIndex - index of the split map * @param layerId - id of the layer * @returns action * @public */ function toggleLayerForMap(mapIndex, layerId) { return { type: _actionTypes["default"].TOGGLE_LAYER_FOR_MAP, mapIndex: mapIndex, layerId: layerId }; } /** * Set the property of a filter plot * @memberof visStateActions * @param idx * @param newProp key value mapping of new prop `{yAxis: 'histogram'}` * @param valueIndex dataId index * @returns action * @public */ function setFilterPlot(idx, newProp, valueIndex) { return { type: _actionTypes["default"].SET_FILTER_PLOT, idx: idx, newProp: newProp, valueIndex: valueIndex }; } /** * Set the property of a filter plot * @memberof visStateActions * @param info * @returns action * @public */ function setMapInfo(info) { return { type: _actionTypes["default"].SET_MAP_INFO, info: info }; } /** * Trigger file loading dispatch `addDataToMap` if succeed, or `loadFilesErr` if failed * @memberof visStateActions * @param files array of fileblob * @returns action * @public */ function loadFiles(files, onFinish) { return { type: _actionTypes["default"].LOAD_FILES, files: files, onFinish: onFinish }; } /** * Called with next file to load * @memberof visStateActions * @returns action * @public */ function loadNextFile() { return { type: _actionTypes["default"].LOAD_NEXT_FILE }; } /** * called when all files are processed and loaded * @memberof visStateActions * @param result * @returns action */ function loadFilesSuccess(result) { return { type: _actionTypes["default"].LOAD_FILES_SUCCESS, result: result }; } /** * called when successfully loaded one file, ready to move on to the next one * @memberof visStateActions * @param result * @returns action */ function loadFileStepSuccess(_ref2) { var fileName = _ref2.fileName, fileCache = _ref2.fileCache; return { type: _actionTypes["default"].LOAD_FILE_STEP_SUCCESS, fileName: fileName, fileCache: fileCache }; } /** * Trigger loading file error * @memberof visStateActions * @param error * @returns action * @public */ function loadFilesErr(fileName, error) { return { type: _actionTypes["default"].LOAD_FILES_ERR, fileName: fileName, error: error }; } /** * Store features to state * @memberof visStateActions * @param features * @returns action */ function setFeatures(features) { return { type: _actionTypes["default"].SET_FEATURES, features: features }; } /** * It will apply the provide feature as filter to the given layer. * If the given feature is already applied as filter to the layer, it will remove the layer from the filter * @memberof visStateActions * @param layer * @param feature * @returns action */ function setPolygonFilterLayer(layer, feature) { return { type: _actionTypes["default"].SET_POLYGON_FILTER_LAYER, layer: layer, feature: feature }; } /** * Set the current feature to be edited/deleted, * and the context of how the feature was selected. * @memberof visStateActions * @param feature * @param selectionContext * @returns action */ function setSelectedFeature(feature, selectionContext) { return { type: _actionTypes["default"].SET_SELECTED_FEATURE, feature: feature, selectionContext: selectionContext }; } /** * Delete the given feature * @memberof visStateActions * @param feature * @returns action */ function deleteFeature(feature) { return { type: _actionTypes["default"].DELETE_FEATURE, feature: feature }; } /** Set the map mode * @memberof visStateActions * @param mode one of EDITOR_MODES * @returns action * @public * @example * import {setMapMode} from '@kepler.gl/actions'; * import {EDITOR_MODES} from '@kepler.gl/constants'; * * this.props.dispatch(setMapMode(EDITOR_MODES.DRAW_POLYGON)); */ function setEditorMode(mode) { return { type: _actionTypes["default"].SET_EDITOR_MODE, mode: mode }; } /** * Trigger CPU filter of selected dataset * @memberof visStateActions * @param dataId - single dataId or an array of dataIds * @returns action * @public */ function applyCPUFilter(dataId) { return { type: _actionTypes["default"].APPLY_CPU_FILTER, dataId: dataId }; } /** * Toggle editor layer visibility * @memberof visStateActions * @return action */ function toggleEditorVisibility() { return { type: _actionTypes["default"].TOGGLE_EDITOR_VISIBILITY }; } /** * Process the next file batch * @memberof visStateActions * @param payload - batch payload * @return action */ function nextFileBatch(payload) { return { type: _actionTypes["default"].NEXT_FILE_BATCH, payload: payload }; } /** * Process the file content * @memberof visStateActions * @param payload - the file content * @return action */ function processFileContent(payload) { return { type: _actionTypes["default"].PROCESS_FILE_CONTENT, payload: payload }; } /** * Set layer animation time format and timezone * @memberof visStateActions * @param config - {timeFormat: string, timezone: string} * @return action */ function setLayerAnimationTimeConfig(config) { return { type: _actionTypes["default"].SET_LAYER_ANIMATION_TIME_CONFIG, config: config }; } /** * Set Filter animation time format and timezone * @memberof visStateActions * @param idx * @param config * @return action */ function setFilterAnimationTimeConfig(idx, config) { return { type: _actionTypes["default"].SET_FILTER_ANIMATION_TIME_CONFIG, idx: idx, config: config }; } /** * deck.gl layer gpu filter callback * @memberof visStateActions * @param layer * @param event * @return action */ function layerFilteredItemsChange(layer, event) { return { type: _actionTypes["default"].LAYER_FILTERED_ITEMS_CHANGE, layer: layer, event: event }; } /** * Sync time filter with layer timeline * @memberof visStateActions * @param idx * @param enable * @return action */ function syncTimeFilterWithLayerTimeline(idx, enable) { return { type: _actionTypes["default"].SYNC_TIME_FILTER_WITH_LAYER_TIMELINE, idx: idx, enable: enable }; } /** * Set time filter sync timeline mode * @memberof visStateActions * @param id * @param mode * @return action */ function setTimeFilterSyncTimelineMode(_ref3) { var id = _ref3.id, mode = _ref3.mode; return { type: _actionTypes["default"].SYNC_TIME_FILTER_TIMELINE_MODE, id: id, mode: mode }; } /** * Called when a new dataset is created successfully via async table methods * @memberof visStateActions * @param payload * @param payload.results - results of promises.allSettlted * @returns */ var createNewDatasetSuccess = exports.createNewDatasetSuccess = (0, _toolkit.createAction)(_actionTypes["default"].CREATE_NEW_DATASET_SUCCESS); /** * Change of number of active loading items, used to render loading indicator. * @memberof visStateActions * @param payload * @param payload.change Change of number of active loading actions. * @public */ var setLoadingIndicator = exports.setLoadingIndicator = (0, _toolkit.createAction)(_actionTypes["default"].SET_LOADING_INDICATOR); /** * This declaration is needed to group actions in docs */ /** * Actions handled mostly by `visState` reducer. * They manage how data is processed, filtered and displayed on the map by operates on layers, * filters and interaction settings. * * @public */ /* eslint-disable @typescript-eslint/no-unused-vars */ // @ts-ignore var visStateActions = null; /* eslint-enable @typescript-eslint/no-unused-vars */ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYWN0aW9uVHlwZXMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl90b29sa2l0IiwiYXBwbHlMYXllckNvbmZpZyIsIm9sZExheWVySWQiLCJuZXdMYXllckNvbmZpZyIsImxheWVySW5kZXgiLCJ0eXBlIiwiQWN0aW9uVHlwZXMiLCJBUFBMWV9MQVlFUl9DT05GSUciLCJsYXllckNvbmZpZ0NoYW5nZSIsIm9sZExheWVyIiwibmV3Q29uZmlnIiwiTEFZRVJfQ09ORklHX0NIQU5HRSIsImxheWVyVG9nZ2xlVmlzaWJpbGl0eSIsImxheWVySWQiLCJpc1Zpc2libGUiLCJzcGxpdE1hcElkIiwiTEFZRVJfVE9HR0xFX1ZJU0lCSUxJVFkiLCJsYXllclRleHRMYWJlbENoYW5nZSIsImlkeCIsInByb3AiLCJ2YWx1ZSIsIkxBWUVSX1RFWFRfTEFCRUxfQ0hBTkdFIiwibGF5ZXJTZXRJc1ZhbGlkIiwiaXNWYWxpZCIsIkxBWUVSX1NFVF9JU19WQUxJRCIsImxheWVyVHlwZUNoYW5nZSIsIm5ld1R5cGUiLCJMQVlFUl9UWVBFX0NIQU5HRSIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsImNoYW5uZWwiLCJuZXdWaXNDb25maWciLCJMQVlFUl9WSVNVQUxfQ0hBTk5FTF9DSEFOR0UiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsIkxBWUVSX1ZJU19DT05GSUdfQ0hBTkdFIiwibGF5ZXJDb2xvclVJQ2hhbmdlIiwiTEFZRVJfQ09MT1JfVUlfQ0hBTkdFIiwidXBkYXRlTGF5ZXJCbGVuZGluZyIsIm1vZGUiLCJVUERBVEVfTEFZRVJfQkxFTkRJTkciLCJ1cGRhdGVPdmVybGF5QmxlbmRpbmciLCJVUERBVEVfT1ZFUkxBWV9CTEVORElORyIsImludGVyYWN0aW9uQ29uZmlnQ2hhbmdlIiwiY29uZmlnIiwiSU5URVJBQ1RJT05fQ09ORklHX0NIQU5HRSIsImFwcGx5RmlsdGVyQ29uZmlnIiwiZmlsdGVySWQiLCJuZXdGaWx0ZXIiLCJBUFBMWV9GSUxURVJfQ09ORklHIiwic2V0RmlsdGVyIiwidmFsdWVJbmRleCIsIlNFVF9GSUxURVIiLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lIiwiU0VUX0ZJTFRFUl9BTklNQVRJT05fVElNRSIsInNldEZpbHRlckFuaW1hdGlvbldpbmRvdyIsIl9yZWYiLCJpZCIsImFuaW1hdGlvbldpbmRvdyIsIlNFVF9GSUxURVJfQU5JTUFUSU9OX1dJTkRPVyIsImFkZEZpbHRlciIsImRhdGFJZCIsIkFERF9GSUxURVIiLCJjcmVhdGVPclVwZGF0ZUZpbHRlciIsImZpZWxkIiwiQ1JFQVRFX09SX1VQREFURV9GSUxURVIiLCJhZGRMYXllciIsImRhdGFzZXRJZCIsIkFERF9MQVlFUiIsInJlb3JkZXJMYXllciIsIm9yZGVyIiwiUkVPUkRFUl9MQVlFUiIsInJlbW92ZUZpbHRlciIsIlJFTU9WRV9GSUxURVIiLCJyZW1vdmVMYXllciIsIlJFTU9WRV9MQVlFUiIsImR1cGxpY2F0ZUxheWVyIiwiRFVQTElDQVRFX0xBWUVSIiwiYWRkRWZmZWN0IiwiQUREX0VGRkVDVCIsInJlb3JkZXJFZmZlY3QiLCJSRU9SREVSX0VGRkVDVCIsInJlbW92ZUVmZmVjdCIsIlJFTU9WRV9FRkZFQ1QiLCJ1cGRhdGVFZmZlY3QiLCJwcm9wcyIsIlVQREFURV9FRkZFQ1QiLCJyZW1vdmVEYXRhc2V0IiwiUkVNT1ZFX0RBVEFTRVQiLCJzaG93RGF0YXNldFRhYmxlIiwiU0hPV19EQVRBU0VUX1RBQkxFIiwidXBkYXRlVGFibGVDb2xvciIsIm5ld0NvbG9yIiwiVVBEQVRFX1RBQkxFX0NPTE9SIiwic29ydFRhYmxlQ29sdW1uIiwiY29sdW1uIiwiU09SVF9UQUJMRV9DT0xVTU4iLCJwaW5UYWJsZUNvbHVtbiIsIlBJTl9UQUJMRV9DT0xVTU4iLCJjb3B5VGFibGVDb2x1bW4iLCJDT1BZX1RBQkxFX0NPTFVNTiIsInNldENvbHVtbkRpc3BsYXlGb3JtYXQiLCJmb3JtYXRzIiwiU0VUX0NPTFVNTl9ESVNQTEFZX0ZPUk1BVCIsInVwZGF0ZVZpc0RhdGEiLCJkYXRhc2V0cyIsIm9wdGlvbnMiLCJVUERBVEVfVklTX0RBVEEiLCJyZW5hbWVEYXRhc2V0IiwibGFiZWwiLCJSRU5BTUVfREFUQVNFVCIsInVwZGF0ZURhdGFzZXRQcm9wcyIsIlVQREFURV9EQVRBU0VUX1BST1BTIiwidG9nZ2xlRmlsdGVyQW5pbWF0aW9uIiwiVE9HR0xFX0ZJTFRFUl9BTklNQVRJT04iLCJ1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZCIsInNwZWVkIiwiVVBEQVRFX0ZJTFRFUl9BTklNQVRJT05fU1BFRUQiLCJzZXRBbmltYXRpb25Db25maWciLCJTRVRfQU5JTUFUSU9OX0NPTkZJRyIsInNldExheWVyQW5pbWF0aW9uVGltZSIsIlNFVF9MQVlFUl9BTklNQVRJT05fVElNRSIsInVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWQiLCJVUERBVEVfTEFZRVJfQU5JTUFUSU9OX1NQRUVEIiwidG9nZ2xlTGF5ZXJBbmltYXRpb24iLCJUT0dHTEVfTEFZRVJfQU5JTUFUSU9OIiwidG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sIiwiVE9HR0xFX0xBWUVSX0FOSU1BVElPTl9DT05UUk9MIiwic2V0RmlsdGVyVmlldyIsInZpZXciLCJTRVRfRklMVEVSX1ZJRVciLCJ0b2dnbGVGaWx0ZXJGZWF0dXJlIiwiVE9HR0xFX0ZJTFRFUl9GRUFUVVJFIiwib25MYXllckhvdmVyIiwiaW5mbyIsIm1hcEluZGV4IiwiTEFZRVJfSE9WRVIiLCJvbkxheWVyQ2xpY2siLCJMQVlFUl9DTElDSyIsIm9uTWFwQ2xpY2siLCJNQVBfQ0xJQ0siLCJvbk1vdXNlTW92ZSIsImV2dCIsIk1PVVNFX01PVkUiLCJ0b2dnbGVMYXllckZvck1hcCIsIlRPR0dMRV9MQVlFUl9GT1JfTUFQIiwic2V0RmlsdGVyUGxvdCIsIm5ld1Byb3AiLCJTRVRfRklMVEVSX1BMT1QiLCJzZXRNYXBJbmZvIiwiU0VUX01BUF9JTkZPIiwibG9hZEZpbGVzIiwiZmlsZXMiLCJvbkZpbmlzaCIsIkxPQURfRklMRVMiLCJsb2FkTmV4dEZpbGUiLCJMT0FEX05FWFRfRklMRSIsImxvYWRGaWxlc1N1Y2Nlc3MiLCJyZXN1bHQiLCJMT0FEX0ZJTEVTX1NVQ0NFU1MiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzIiwiX3JlZjIiLCJmaWxlTmFtZSIsImZpbGVDYWNoZSIsIkxPQURfRklMRV9TVEVQX1NVQ0NFU1MiLCJsb2FkRmlsZXNFcnIiLCJlcnJvciIsIkxPQURfRklMRVNfRVJSIiwic2V0RmVhdHVyZXMiLCJmZWF0dXJlcyIsIlNFVF9GRUFUVVJFUyIsInNldFBvbHlnb25GaWx0ZXJMYXllciIsImxheWVyIiwiZmVhdHVyZSIsIlNFVF9QT0xZR09OX0ZJTFRFUl9MQVlFUiIsInNldFNlbGVjdGVkRmVhdHVyZSIsInNlbGVjdGlvbkNvbnRleHQiLCJTRVRfU0VMRUNURURfRkVBVFVSRSIsImRlbGV0ZUZlYXR1cmUiLCJERUxFVEVfRkVBVFVSRSIsInNldEVkaXRvck1vZGUiLCJTRVRfRURJVE9SX01PREUiLCJhcHBseUNQVUZpbHRlciIsIkFQUExZX0NQVV9GSUxURVIiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5IiwiVE9HR0xFX0VESVRPUl9WSVNJQklMSVRZIiwibmV4dEZpbGVCYXRjaCIsInBheWxvYWQiLCJORVhUX0ZJTEVfQkFUQ0giLCJwcm9jZXNzRmlsZUNvbnRlbnQiLCJQUk9DRVNTX0ZJTEVfQ09OVEVOVCIsInNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZyIsIlNFVF9MQVlFUl9BTklNQVRJT05fVElNRV9DT05GSUciLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnIiwiU0VUX0ZJTFRFUl9BTklNQVRJT05fVElNRV9DT05GSUciLCJsYXllckZpbHRlcmVkSXRlbXNDaGFuZ2UiLCJldmVudCIsIkxBWUVSX0ZJTFRFUkVEX0lURU1TX0NIQU5HRSIsInN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmUiLCJlbmFibGUiLCJTWU5DX1RJTUVfRklMVEVSX1dJVEhfTEFZRVJfVElNRUxJTkUiLCJzZXRUaW1lRmlsdGVyU3luY1RpbWVsaW5lTW9kZSIsIl9yZWYzIiwiU1lOQ19USU1FX0ZJTFRFUl9USU1FTElORV9NT0RFIiwiY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MiLCJleHBvcnRzIiwiY3JlYXRlQWN0aW9uIiwiQ1JFQVRFX05FV19EQVRBU0VUX1NVQ0NFU1MiLCJzZXRMb2FkaW5nSW5kaWNhdG9yIiwiU0VUX0xPQURJTkdfSU5ESUNBVE9SIiwidmlzU3RhdGVBY3Rpb25zIl0sInNvdXJjZXMiOlsiLi4vc3JjL3Zpcy1zdGF0ZS1hY3Rpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbi8vIHZpcy1zdGF0ZS1yZWR1Y2VyXG5pbXBvcnQge1BpY2tJbmZvfSBmcm9tICdAZGVjay5nbC9jb3JlL2xpYi9kZWNrJztcbmltcG9ydCB7ZGVmYXVsdCBhcyBBY3Rpb25UeXBlc30gZnJvbSAnLi9hY3Rpb24tdHlwZXMnO1xuaW1wb3J0IHtGaWxlQ2FjaGVJdGVtfSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuaW1wb3J0IHtMYXllciwgTGF5ZXJCYXNlQ29uZmlnfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge0tlcGxlclRhYmxlfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7XG4gIEFkZERhdGFUb01hcFBheWxvYWQsXG4gIFZhbHVlT2YsXG4gIE1lcmdlLFxuICBSR0JDb2xvcixcbiAgTmVzdGVkUGFydGlhbCxcbiAgTGF5ZXJWaXNDb25maWcsXG4gIENvbG9yVUksXG4gIEZlYXR1cmUsXG4gIEZlYXR1cmVTZWxlY3Rpb25Db250ZXh0LFxuICBJbnRlcmFjdGlvbkNvbmZpZyxcbiAgRmlsdGVyLFxuICBQYXJzZWRDb25maWcsXG4gIFBhcnNlZExheWVyLFxuICBFZmZlY3RQcm9wc1BhcnRpYWwsXG4gIFN5bmNUaW1lbGluZU1vZGUsXG4gIEFuaW1hdGlvbkNvbmZpZyxcbiAgRmlsdGVyQW5pbWF0aW9uQ29uZmlnXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtjcmVhdGVBY3Rpb259IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQnO1xuXG4vLyBUT0RPIC0gaW1wb3J0IExvYWRlck9iamVjdCB0eXBlIGZyb20gQGxvYWRlcnMuZ2wvY29yZSB3aGVuIHN1cHBvcnRlZFxuLy8gVE9ETyAtIGltcG9ydCBMb2FkT3B0aW9ucyB0eXBlIGZyb20gQGxvYWRlcnMuZ2wvY29yZSB3aGVuIHN1cHBvcnRlZFxuXG5leHBvcnQgdHlwZSBBcHBseUxheWVyQ29uZmlnVXBkYXRlckFjdGlvbiA9IHtcbiAgb2xkTGF5ZXJJZDogc3RyaW5nO1xuICBuZXdMYXllckNvbmZpZzogUGFyc2VkTGF5ZXI7XG4gIGxheWVySW5kZXg/OiBudW1iZXI7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBiYXNlIGNvbmZpZzogZGF0YUlkLCBsYWJlbCwgY29sdW1uLCBpc1Zpc2libGVcbiAqIEBwYXJhbSBvbGRMYXllcklkIC0gbGF5ZXIgaWQgdG8gYmUgdXBkYXRlZFxuICogQHBhcmFtIG5ld0xheWVyQ29uZmlnIC0gbmV3IGxheWVyIGNvbmZpZ1xuICogQHBhcmFtIGxheWVySW5kZXggLSAoT3B0aW9uYWwpIEluZGV4IG9mIHRoZSBsYXllciB0byBiZSB1cGRhdGVkIChjYW4gYmUgdXNlZnVsIGluIHNvbWUgY2FzZXMsIGJlY2F1c2VcbiAqICAgICAgICAgICAgICAgICAgICAgdGhlIGxheWVyIGlkIG1pZ2h0IGNoYW5nZSBkdXJpbmcgdXBkYXRlLCBlLmcuIHdoZW4gdGhlIHR5cGUgb2YgdGhlIGxheWVyIGNoYW5nZXMpXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TGF5ZXJDb25maWcoXG4gIG9sZExheWVySWQ6IHN0cmluZyxcbiAgbmV3TGF5ZXJDb25maWc6IFBhcnNlZExheWVyLFxuICBsYXllckluZGV4PzogbnVtYmVyXG4pOiBNZXJnZTxBcHBseUxheWVyQ29uZmlnVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5BUFBMWV9MQVlFUl9DT05GSUd9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuQVBQTFlfTEFZRVJfQ09ORklHLFxuICAgIG9sZExheWVySWQsXG4gICAgbmV3TGF5ZXJDb25maWcsXG4gICAgbGF5ZXJJbmRleFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBMYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIG9sZExheWVyOiBMYXllcjtcbiAgbmV3Q29uZmlnOiBQYXJ0aWFsPExheWVyWydjb25maWcnXT47XG59O1xuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAcGFyYW0gb2xkTGF5ZXIgLSBsYXllciB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gbmV3Q29uZmlnIC0gbmV3IGNvbmZpZyB0byBiZSBtZXJnZWQgd2l0aCBvbGQgY29uZmlnXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyQ29uZmlnQ2hhbmdlKFxuICBvbGRMYXllcjogTGF5ZXIsXG4gIG5ld0NvbmZpZzogUGFydGlhbDxMYXllckJhc2VDb25maWc+XG4pOiBNZXJnZTxMYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTEFZRVJfQ09ORklHX0NIQU5HRX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9DT05GSUdfQ0hBTkdFLFxuICAgIG9sZExheWVyLFxuICAgIG5ld0NvbmZpZ1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBMYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyQWN0aW9uID0ge1xuICBsYXllcklkOiBzdHJpbmc7XG4gIGlzVmlzaWJsZTogYm9vbGVhbjtcbiAgc3BsaXRNYXBJZD86IHN0cmluZztcbn07XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIHZpc2liaWxpdHkgZGVwZW5kcyBvbiBzcGxpdE1hcCBzaW5nbGUgb3IgZHVhbFxuICogQHBhcmFtIGxheWVySWQgLSBsYXllcklkIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBpc1Zpc2libGUgLSB3aGV0aGVyIHRoaXMgbGF5ZXIgaXMgdmlzaWJsZSBnbG9iYWxseVxuICogQHBhcmFtIHNwbGl0TWFwSWQgLSBpZCBmb3IgdGhpcyBzcGxpdE1hcFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRvZ2dsZVZpc2liaWxpdHkoXG4gIGxheWVySWQ6IHN0cmluZyxcbiAgaXNWaXNpYmxlOiBib29sZWFuLFxuICBzcGxpdE1hcElkPzogc3RyaW5nXG4pOiBNZXJnZTxMYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxBWUVSX1RPR0dMRV9WSVNJQklMSVRZfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxBWUVSX1RPR0dMRV9WSVNJQklMSVRZLFxuICAgIGxheWVySWQsXG4gICAgaXNWaXNpYmxlLFxuICAgIHNwbGl0TWFwSWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgTGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyQWN0aW9uID0ge1xuICBvbGRMYXllcjogTGF5ZXI7XG4gIGlkeDogbnVtYmVyIHwgJ2FsbCc7XG4gIHByb3A6IHN0cmluZztcbiAgdmFsdWU6IGFueTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIHRleHQgbGFiZWxcbiAqIEBwYXJhbSBvbGRMYXllciAtIGxheWVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBpZHggLWBpZHhgIG9mIHRleHQgbGFiZWwgdG8gYmUgdXBkYXRlZFxuICogQHBhcmFtIHByb3AgLSBgcHJvcGAgb2YgdGV4dCBsYWJlbCwgZSxnLCBgYW5jaG9yYCwgYGFsaWdubWVudGAsIGBjb2xvcmAsIGBzaXplYCwgYGZpZWxkYCwgYG91dGxpbmVXaWR0aGAsIGBvdXRsaW5lQ29sb3JgXG4gKiBAcGFyYW0gdmFsdWUgLSBuZXcgdmFsdWVcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUZXh0TGFiZWxDaGFuZ2UoXG4gIG9sZExheWVyOiBMYXllcixcbiAgaWR4OiBudW1iZXIgfCAnYWxsJyxcbiAgcHJvcDogc3RyaW5nLFxuICB2YWx1ZTogYW55XG4pOiBNZXJnZTxMYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTEFZRVJfVEVYVF9MQUJFTF9DSEFOR0V9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTEFZRVJfVEVYVF9MQUJFTF9DSEFOR0UsXG4gICAgb2xkTGF5ZXIsXG4gICAgaWR4LFxuICAgIHByb3AsXG4gICAgdmFsdWVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgTGF5ZXJTZXRJc1ZhbGlkVXBkYXRlckFjdGlvbiA9IHtcbiAgb2xkTGF5ZXI6IExheWVyO1xuICBpc1ZhbGlkOiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHZhbHVlIG9mIGlzVmFsaWQgZmxhZyBmb3IgYSBsYXllci5cbiAqIFRoZSBhY3Rpb24gYWxzbyB1cGRhdGVzIHZpc2liaWxpdHkgb2YgdGhlIGxheWVyIGJhc2VkIG9uIGlzVmFsaWQuXG4gKiBAcGFyYW0gb2xkTGF5ZXIgLSBsYXllciB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gaXNWYWxpZCAtIG5ldyB2YWx1ZSBmb3IgaXNWYWxpZCBmbGFnXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyU2V0SXNWYWxpZChcbiAgb2xkTGF5ZXI6IExheWVyLFxuICBpc1ZhbGlkOiBib29sZWFuXG4pOiBNZXJnZTxMYXllclNldElzVmFsaWRVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxBWUVSX1NFVF9JU19WQUxJRH0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9TRVRfSVNfVkFMSUQsXG4gICAgb2xkTGF5ZXIsXG4gICAgaXNWYWxpZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBMYXllclR5cGVDaGFuZ2VVcGRhdGVyQWN0aW9uID0ge1xuICBvbGRMYXllcjogTGF5ZXI7XG4gIG5ld1R5cGU6IHN0cmluZztcbn07XG4vKipcbiAqIFVwZGF0ZSBsYXllciB0eXBlLiBQcmV2aWV3cyBsYXllciBjb25maWcgd2lsbCBiZSBjb3BpZWQgaWYgYXBwbGljYWJsZS5cbiAqIEBwYXJhbSBvbGRMYXllciAtIGxheWVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBuZXdUeXBlIC0gbmV3IHR5cGVcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUeXBlQ2hhbmdlKFxuICBvbGRMYXllcjogTGF5ZXIsXG4gIG5ld1R5cGU6IHN0cmluZ1xuKTogTWVyZ2U8TGF5ZXJUeXBlQ2hhbmdlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MQVlFUl9UWVBFX0NIQU5HRX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9UWVBFX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBuZXdUeXBlXG4gIH07XG59XG5leHBvcnQgdHlwZSBMYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uID0ge1xuICBvbGRMYXllcjogTGF5ZXI7XG4gIG5ld0NvbmZpZzogUGFydGlhbDxMYXllclsnY29uZmlnJ10+O1xuICBjaGFubmVsOiBzdHJpbmc7XG4gIG5ld1Zpc0NvbmZpZz86IFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+O1xufTtcbi8qKlxuICogVXBkYXRlIGxheWVyIHZpc3VhbCBjaGFubmVsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gb2xkTGF5ZXIgLSBsYXllciB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gbmV3Q29uZmlnIC0gbmV3IHZpc3VhbCBjaGFubmVsIGNvbmZpZ1xuICogQHBhcmFtIGNoYW5uZWwgLSBjaGFubmVsIHRvIGJlIHVwZGF0ZWRcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlKFxuICBvbGRMYXllcjogTGF5ZXIsXG4gIG5ld0NvbmZpZzogUGFydGlhbDxMYXllckJhc2VDb25maWc+LFxuICBjaGFubmVsOiBzdHJpbmcsXG4gIG5ld1Zpc0NvbmZpZz86IFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+XG4pOiBNZXJnZTxcbiAgTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvbixcbiAge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MQVlFUl9WSVNVQUxfQ0hBTk5FTF9DSEFOR0V9XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9WSVNVQUxfQ0hBTk5FTF9DSEFOR0UsXG4gICAgb2xkTGF5ZXIsXG4gICAgbmV3Q29uZmlnLFxuICAgIGNoYW5uZWwsXG4gICAgbmV3VmlzQ29uZmlnXG4gIH07XG59XG5leHBvcnQgdHlwZSBMYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIG9sZExheWVyOiBMYXllcjtcbiAgbmV3VmlzQ29uZmlnOiBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPjtcbn07XG4vKipcbiAqIFVwZGF0ZSBsYXllciBgdmlzQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIG9sZExheWVyIC0gbGF5ZXIgdG8gYmUgdXBkYXRlZFxuICogQHBhcmFtIG5ld1Zpc0NvbmZpZyAtIG5ldyB2aXNDb25maWcgYXMgYSBrZXkgdmFsdWUgbWFwOiBlLmcuIGB7b3BhY2l0eTogMC44fWBcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXNDb25maWdDaGFuZ2UoXG4gIG9sZExheWVyOiBMYXllcixcbiAgbmV3VmlzQ29uZmlnOiBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPlxuKTogTWVyZ2U8TGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxBWUVSX1ZJU19DT05GSUdfQ0hBTkdFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxBWUVSX1ZJU19DT05GSUdfQ0hBTkdFLFxuICAgIG9sZExheWVyLFxuICAgIG5ld1Zpc0NvbmZpZ1xuICB9O1xufVxuZXhwb3J0IHR5cGUgTGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgb2xkTGF5ZXI6IExheWVyO1xuICBwcm9wOiBzdHJpbmc7XG4gIG5ld0NvbmZpZzogTmVzdGVkUGFydGlhbDxDb2xvclVJPjtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBjb2xvciBwYWxldHRlIHVpIGZvciBsYXllciBjb2xvclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIG9sZExheWVyIC0gbGF5ZXIgdG8gYmUgdXBkYXRlZFxuICogQHBhcmFtIHByb3AgLSB3aGljaCBjb2xvciBwcm9wXG4gKiBAcGFyYW0gbmV3Q29uZmlnIC0gdG8gYmUgbWVyZ2VkXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyQ29sb3JVSUNoYW5nZShcbiAgb2xkTGF5ZXI6IExheWVyLFxuICBwcm9wOiBzdHJpbmcsXG4gIG5ld0NvbmZpZzogTmVzdGVkUGFydGlhbDxDb2xvclVJPlxuKTogTWVyZ2U8TGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MQVlFUl9DT0xPUl9VSV9DSEFOR0V9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTEFZRVJfQ09MT1JfVUlfQ0hBTkdFLFxuICAgIG9sZExheWVyLFxuICAgIHByb3AsXG4gICAgbmV3Q29uZmlnXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyQWN0aW9uID0ge1xuICBtb2RlOiAnYWRkaXRpdmUnIHwgJ25vcm1hbCcgfCAnc3VidHJhY3RpdmUnO1xufTtcbi8qKlxuICogVXBkYXRlIGxheWVyIGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBtb2RlIG9uZSBvZiBgYWRkaXRpdmVgLCBgbm9ybWFsYCBhbmQgYHN1YnRyYWN0aXZlYFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVMYXllckJsZW5kaW5nKFxuICBtb2RlOiAnYWRkaXRpdmUnIHwgJ25vcm1hbCcgfCAnc3VidHJhY3RpdmUnXG4pOiBNZXJnZTxVcGRhdGVMYXllckJsZW5kaW5nVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5VUERBVEVfTEFZRVJfQkxFTkRJTkd9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuVVBEQVRFX0xBWUVSX0JMRU5ESU5HLFxuICAgIG1vZGVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgVXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlckFjdGlvbiA9IHtcbiAgbW9kZTogJ3NjcmVlbicgfCAnbm9ybWFsJyB8ICdkYXJrZW4nO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgb3ZlcmxheSBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gbW9kZSBvbmUgb2YgYHNjcmVlbmAsIGBub3JtYWxgIGFuZCBgZGFya2VuYFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVPdmVybGF5QmxlbmRpbmcoXG4gIG1vZGU6ICdzY3JlZW4nIHwgJ25vcm1hbCcgfCAnZGFya2VuJ1xuKTogTWVyZ2U8VXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5VUERBVEVfT1ZFUkxBWV9CTEVORElOR30+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5VUERBVEVfT1ZFUkxBWV9CTEVORElORyxcbiAgICBtb2RlXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgY29uZmlnOiBWYWx1ZU9mPEludGVyYWN0aW9uQ29uZmlnPjtcbn07XG4vKipcbiAqIFVwZGF0ZSBgaW50ZXJhY3Rpb25Db25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gY29uZmlnIC0gbmV3IGNvbmZpZyBhcyBrZXkgdmFsdWUgbWFwOiBge3Rvb2x0aXA6IHtlbmFibGVkOiB0cnVlfX1gXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVyYWN0aW9uQ29uZmlnQ2hhbmdlKFxuICBjb25maWc6IFZhbHVlT2Y8SW50ZXJhY3Rpb25Db25maWc+XG4pOiBNZXJnZTxcbiAgSW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLklOVEVSQUNUSU9OX0NPTkZJR19DSEFOR0V9XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5JTlRFUkFDVElPTl9DT05GSUdfQ0hBTkdFLFxuICAgIGNvbmZpZ1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBBcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXJBY3Rpb24gPSB7XG4gIGZpbHRlcklkOiBzdHJpbmc7XG4gIG5ld0ZpbHRlcjogRmlsdGVyO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIGNvbmZpZ1xuICogQHBhcmFtIGZpbHRlcklkIC0gaWQgb2YgdGhlIGZpbHRlciB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gbmV3RmlsdGVyIC0gbmV3IGZpbHRlciBjb25maWdcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlGaWx0ZXJDb25maWcoXG4gIGZpbHRlcklkOiBzdHJpbmcsXG4gIG5ld0ZpbHRlcjogRmlsdGVyXG4pOiBNZXJnZTxBcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuQVBQTFlfRklMVEVSX0NPTkZJR30+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5BUFBMWV9GSUxURVJfQ09ORklHLFxuICAgIGZpbHRlcklkLFxuICAgIG5ld0ZpbHRlclxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRGaWx0ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbiAgcHJvcDogc3RyaW5nIHwgc3RyaW5nW107XG4gIHZhbHVlOiBhbnk7XG4gIHZhbHVlSW5kZXg/OiBudW1iZXI7XG59O1xuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaWR4IC1gaWR4YCBvZiBmaWx0ZXIgdG8gYmUgdXBkYXRlZFxuICogQHBhcmFtIHByb3AgLSBgcHJvcGAgb2YgZmlsdGVyLCBlLGcsIGBkYXRhSWRgLCBgbmFtZWAsIGB2YWx1ZWBcbiAqICAgICAgICAgICAgICAgIG9yIGFuIGFycmF5IGUuZy4gWydpZHgnLCAnbmFtZSddLiBpbiB0aGF0IGNhc2UgdGhlIHZhbHVlXG4gKiAgICAgICAgICAgICAgICBzaG91bGQgYWxzbyBiZSBhbiBhcnJheSBvZiB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMgKGJ5IGluZGV4KVxuICogQHBhcmFtIHZhbHVlIC0gbmV3IHZhbHVlXG4gKiBAcGFyYW0gdmFsdWVJbmRleCAtIGRhdGFJZCBpbmRleFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXIoXG4gIGlkeDogbnVtYmVyLFxuICBwcm9wOiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgdmFsdWU6IGFueSxcbiAgdmFsdWVJbmRleD86IG51bWJlclxuKTogTWVyZ2U8U2V0RmlsdGVyVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRklMVEVSfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9GSUxURVIsXG4gICAgaWR4LFxuICAgIHByb3AsXG4gICAgdmFsdWUsXG4gICAgdmFsdWVJbmRleFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvbiA9IHtcbiAgaWR4OiBudW1iZXI7XG4gIHByb3A6IHN0cmluZztcbiAgdmFsdWU6IGFueTtcbiAgdmFsdWVJbmRleD86IG51bWJlcjtcbn07XG4vKipcbiAqIFNhbWUgYXMgVXBkYXRlIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeCAtYGlkeGAgb2YgZmlsdGVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBwcm9wIC0gYHByb3BgIG9mIGZpbHRlciwgZSxnLCBgZGF0YUlkYCwgYG5hbWVgLCBgdmFsdWVgXG4gKiBAcGFyYW0gdmFsdWUgLSBuZXcgdmFsdWVcbiAqIEBwYXJhbSB2YWx1ZUluZGV4IC0gZGF0YUlkIGluZGV4XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWUoXG4gIGlkeDogbnVtYmVyLFxuICBwcm9wOiBzdHJpbmcsXG4gIHZhbHVlOiBhbnksXG4gIHZhbHVlSW5kZXg/OiBudW1iZXJcbik6IE1lcmdlPFxuICBTZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvbixcbiAge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRklMVEVSX0FOSU1BVElPTl9USU1FfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9BTklNQVRJT05fVElNRSxcbiAgICBpZHgsXG4gICAgcHJvcCxcbiAgICB2YWx1ZSxcbiAgICB2YWx1ZUluZGV4XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGFuaW1hdGlvbldpbmRvdzogc3RyaW5nO1xufTtcbi8qKlxuICogU2FtZSBhcyBVcGRhdGUgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb2