@kepler.gl/mcp 0.0.0-stage → 3.3.0-alpha.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/commands/add-column-command.js +192 -0
- package/dist/cjs/commands/basemap-command.js +80 -0
- package/dist/cjs/commands/boundary-command.js +81 -0
- package/dist/cjs/commands/command-wrappers.js +122 -0
- package/dist/cjs/commands/dataset-context-command.js +87 -0
- package/dist/cjs/commands/index.js +230 -0
- package/dist/cjs/commands/layer-creation-command.js +534 -0
- package/dist/cjs/commands/layer-style-command.js +136 -0
- package/dist/cjs/commands/load-data-command.js +270 -0
- package/dist/cjs/commands/save-data-command.js +118 -0
- package/dist/cjs/commands/split-view-command.js +261 -0
- package/dist/cjs/commands/table-command.js +199 -0
- package/dist/cjs/commands/time-filter-command.js +289 -0
- package/dist/cjs/commands/toggle-time-filter-command.js +155 -0
- package/dist/cjs/commands/types.js +6 -0
- package/dist/cjs/commands/utils.js +536 -0
- package/dist/cjs/commands/view-mode-command.js +94 -0
- package/dist/cjs/index.js +39 -0
- package/dist/cjs/map-contract.js +6 -0
- package/dist/cjs/server/bridge-server.js +435 -0
- package/dist/cjs/server/index.js +31 -0
- package/dist/cjs/server/stdio.js +201 -0
- package/dist/cjs/types.js +30 -0
- package/dist/commands/add-column-command.d.ts +4 -0
- package/dist/commands/basemap-command.d.ts +4 -0
- package/dist/commands/boundary-command.d.ts +4 -0
- package/dist/commands/command-wrappers.d.ts +52 -0
- package/dist/commands/dataset-context-command.d.ts +4 -0
- package/dist/commands/index.d.ts +31 -0
- package/dist/commands/layer-creation-command.d.ts +8 -0
- package/dist/commands/layer-style-command.d.ts +4 -0
- package/dist/commands/load-data-command.d.ts +4 -0
- package/dist/commands/save-data-command.d.ts +4 -0
- package/dist/commands/split-view-command.d.ts +4 -0
- package/dist/commands/table-command.d.ts +4 -0
- package/dist/commands/time-filter-command.d.ts +13 -0
- package/dist/commands/toggle-time-filter-command.d.ts +4 -0
- package/dist/commands/types.d.ts +132 -0
- package/dist/commands/utils.d.ts +138 -0
- package/dist/commands/view-mode-command.d.ts +4 -0
- package/dist/esm/commands/add-column-command.js +185 -0
- package/dist/esm/commands/basemap-command.js +72 -0
- package/dist/esm/commands/boundary-command.js +73 -0
- package/dist/esm/commands/command-wrappers.js +114 -0
- package/dist/esm/commands/dataset-context-command.js +79 -0
- package/dist/esm/commands/index.js +51 -0
- package/dist/esm/commands/layer-creation-command.js +527 -0
- package/dist/esm/commands/layer-style-command.js +130 -0
- package/dist/esm/commands/load-data-command.js +264 -0
- package/dist/esm/commands/save-data-command.js +112 -0
- package/dist/esm/commands/split-view-command.js +255 -0
- package/dist/esm/commands/table-command.js +194 -0
- package/dist/esm/commands/time-filter-command.js +280 -0
- package/dist/esm/commands/toggle-time-filter-command.js +147 -0
- package/dist/esm/commands/types.js +3 -0
- package/dist/esm/commands/utils.js +521 -0
- package/dist/esm/commands/view-mode-command.js +86 -0
- package/dist/esm/index.js +20 -0
- package/dist/esm/map-contract.js +3 -0
- package/dist/esm/server/bridge-server.js +428 -0
- package/dist/esm/server/index.js +13 -0
- package/dist/esm/server/stdio.js +198 -0
- package/dist/esm/types.js +24 -0
- package/dist/index.d.ts +15 -0
- package/dist/map-contract.d.ts +31 -0
- package/dist/server/bridge-server.d.ts +53 -0
- package/dist/server/index.d.ts +9 -0
- package/dist/server/stdio.d.ts +2 -0
- package/dist/types.d.ts +24 -0
- package/package.json +84 -4
- package/skill/kepler/SKILL.md +438 -0
- package/skill/kepler/skill.yaml +4 -0
- package/README.md +0 -3
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
2
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
3
|
+
// SPDX-License-Identifier: MIT
|
|
4
|
+
// Copyright contributors to the kepler.gl project
|
|
5
|
+
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { addFilter, setFilter, setFilterAnimationTime, setFilterAnimationWindow } from '@kepler.gl/actions';
|
|
8
|
+
var MILLIS_SECOND = 1000;
|
|
9
|
+
var MILLIS_MINUTE = 60 * MILLIS_SECOND;
|
|
10
|
+
var MILLIS_HOUR = 60 * MILLIS_MINUTE;
|
|
11
|
+
var MILLIS_DAY = 24 * MILLIS_HOUR;
|
|
12
|
+
var MILLIS_WEEK = 7 * MILLIS_DAY;
|
|
13
|
+
var MILLIS_MONTH = 30 * MILLIS_DAY;
|
|
14
|
+
var MILLIS_3_MONTH = 91 * MILLIS_DAY;
|
|
15
|
+
var MILLIS_YEAR = 365 * MILLIS_DAY;
|
|
16
|
+
export var INTERVAL_MILLIS = {
|
|
17
|
+
'1-second': MILLIS_SECOND,
|
|
18
|
+
'1-minute': MILLIS_MINUTE,
|
|
19
|
+
'1-hour': MILLIS_HOUR,
|
|
20
|
+
'1-day': MILLIS_DAY,
|
|
21
|
+
'1-week': MILLIS_WEEK,
|
|
22
|
+
'1-month': MILLIS_MONTH,
|
|
23
|
+
'3-month': MILLIS_3_MONTH,
|
|
24
|
+
'1-year': MILLIS_YEAR
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Infer a sensible animation interval from a time filter's domain and (when
|
|
29
|
+
* available) the actual distinct timestamps in the dataset. Mirrors the logic
|
|
30
|
+
* used by spatial-agent's `detectIntervalFromDomain` so the skill-path behaves
|
|
31
|
+
* identically.
|
|
32
|
+
*/
|
|
33
|
+
export function detectIntervalFromDomain(domain, mappedValues) {
|
|
34
|
+
var span = domain[1] - domain[0];
|
|
35
|
+
if (span <= 0) return '1-year';
|
|
36
|
+
var numUniqueSteps;
|
|
37
|
+
if (mappedValues && mappedValues.length > 0) {
|
|
38
|
+
var unique = new Set(mappedValues.filter(function (v) {
|
|
39
|
+
return v != null;
|
|
40
|
+
}));
|
|
41
|
+
numUniqueSteps = unique.size;
|
|
42
|
+
} else {
|
|
43
|
+
numUniqueSteps = 2;
|
|
44
|
+
}
|
|
45
|
+
if (numUniqueSteps <= 1) return '1-year';
|
|
46
|
+
var avgGap = span / Math.max(numUniqueSteps - 1, 1);
|
|
47
|
+
if (avgGap >= MILLIS_YEAR * 0.8) return '1-year';
|
|
48
|
+
if (avgGap >= MILLIS_MONTH * 2.5) return '3-month';
|
|
49
|
+
if (avgGap >= MILLIS_MONTH * 0.8) return '1-month';
|
|
50
|
+
if (avgGap >= MILLIS_DAY * 5) return '1-week';
|
|
51
|
+
if (avgGap >= MILLIS_DAY * 0.8) return '1-day';
|
|
52
|
+
if (avgGap >= MILLIS_HOUR * 0.8) return '1-hour';
|
|
53
|
+
if (avgGap >= MILLIS_MINUTE * 0.8) return '1-minute';
|
|
54
|
+
return '1-second';
|
|
55
|
+
}
|
|
56
|
+
var sleep = function sleep(ms) {
|
|
57
|
+
return new Promise(function (resolve) {
|
|
58
|
+
return setTimeout(resolve, ms);
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
export var addTimeFilterCommandId = 'map.add-time-filter';
|
|
62
|
+
export function getAddTimeFilterCommand(ctx) {
|
|
63
|
+
return {
|
|
64
|
+
id: addTimeFilterCommandId,
|
|
65
|
+
name: 'Add time filter',
|
|
66
|
+
group: 'Map',
|
|
67
|
+
description: "Add a time-range filter to animate a NON-trip layer over a TIMESTAMP/DATE column. The time controller appears at the bottom of the map.\n\nDO NOT call this for a trip layer \u2014 trips have built-in time animation.\n\nThe dataset and a layer for it must already exist on the map (e.g. from map.add-layer or map.load-data).\n\nPass the datasetName and the dateTimeColumn to animate over. The interval is auto-detected from the data when omitted; pass it explicitly to override.",
|
|
68
|
+
metadata: {
|
|
69
|
+
readOnly: false,
|
|
70
|
+
riskLevel: 'medium',
|
|
71
|
+
idempotent: false
|
|
72
|
+
},
|
|
73
|
+
inputSchema: z.object({
|
|
74
|
+
datasetName: z.string().describe('The name (label) or id of the dataset to animate.'),
|
|
75
|
+
dateTimeColumn: z.string().describe('A TIMESTAMP or DATE column in the dataset. Do NOT pass an integer/string epoch column — build a real TIMESTAMP column first.'),
|
|
76
|
+
interval: z["enum"](['1-second', '1-minute', '1-hour', '1-day', '1-week', '1-month', '3-month', '1-year']).optional().describe('Animation step. Auto-detected from the data span and distinct timestamps when omitted.')
|
|
77
|
+
}),
|
|
78
|
+
execute: function () {
|
|
79
|
+
var _execute = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(_execCtx, input) {
|
|
80
|
+
var _ref, datasetName, dateTimeColumn, interval, _dataset$fields, _visState$filters, _ctx$getVisState$filt3, _resolvedInterval, visState, datasets, datasetId, dataset, filterField, _dataset$fields2, filters, existingFilterIdx, filterIdx, filterId, attempt, _ctx$getVisState$filt, _ctx$getVisState$filt2, currentFilters, targetFilter, resolvedInterval, _ctx$getVisState$filt5, _dataset$fields$index, _dataset$fields3, mappedValues, fieldIdx, rows, MAX_SAMPLES, step, i, val, ts, datasetBins, _attempt, _ctx$getVisState$filt4, updatedFilter, _timeBins$datasetId, timeBins, bins, finalFilter, _INTERVAL_MILLIS, domainStart, windowSize;
|
|
81
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
82
|
+
while (1) switch (_context.prev = _context.next) {
|
|
83
|
+
case 0:
|
|
84
|
+
_ref = input !== null && input !== void 0 ? input : {}, datasetName = _ref.datasetName, dateTimeColumn = _ref.dateTimeColumn, interval = _ref.interval;
|
|
85
|
+
_context.prev = 1;
|
|
86
|
+
if (!(interval !== undefined && (typeof interval !== 'string' || !Object.prototype.hasOwnProperty.call(INTERVAL_MILLIS, interval)))) {
|
|
87
|
+
_context.next = 4;
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
throw new Error("Invalid interval \"".concat(String(interval), "\". Must be one of: ").concat(Object.keys(INTERVAL_MILLIS).join(', '), "."));
|
|
91
|
+
case 4:
|
|
92
|
+
visState = ctx.getVisState();
|
|
93
|
+
datasets = visState.datasets;
|
|
94
|
+
datasetId = Object.keys(datasets).find(function (dataId) {
|
|
95
|
+
return datasets[dataId].label === datasetName || dataId === datasetName;
|
|
96
|
+
});
|
|
97
|
+
if (datasetId) {
|
|
98
|
+
_context.next = 9;
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
throw new Error("Dataset ".concat(datasetName, " not found."));
|
|
102
|
+
case 9:
|
|
103
|
+
dataset = datasets[datasetId];
|
|
104
|
+
filterField = (_dataset$fields = dataset.fields) === null || _dataset$fields === void 0 ? void 0 : _dataset$fields.find(function (f) {
|
|
105
|
+
return f.name === dateTimeColumn;
|
|
106
|
+
});
|
|
107
|
+
if (filterField) {
|
|
108
|
+
_context.next = 13;
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
throw new Error("Column ".concat(dateTimeColumn, " not found in dataset ").concat(datasetName, ". Available: ").concat((_dataset$fields2 = dataset.fields) === null || _dataset$fields2 === void 0 ? void 0 : _dataset$fields2.map(function (f) {
|
|
112
|
+
return f.name;
|
|
113
|
+
}).join(', ')));
|
|
114
|
+
case 13:
|
|
115
|
+
if (!(filterField.type !== 'timestamp' && filterField.type !== 'date')) {
|
|
116
|
+
_context.next = 15;
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
throw new Error("Column ".concat(dateTimeColumn, " is of type \"").concat(filterField.type, "\", not timestamp/date. Build a real TIMESTAMP column first (Kepler.gl cannot animate on integer/string epochs)."));
|
|
120
|
+
case 15:
|
|
121
|
+
// Explicitly typed: `VisState.filters` is untyped (index signature) and
|
|
122
|
+
// strict consumers (e.g. kepler-assistant, which vendors this module)
|
|
123
|
+
// would otherwise flag the `.findIndex(f => …)` callback as implicit any.
|
|
124
|
+
filters = (_visState$filters = visState.filters) !== null && _visState$filters !== void 0 ? _visState$filters : [];
|
|
125
|
+
existingFilterIdx = filters.findIndex(function (f) {
|
|
126
|
+
return (Array.isArray(f.dataId) ? f.dataId.includes(datasetId) : f.dataId === datasetId) && (Array.isArray(f.name) ? f.name.includes(dateTimeColumn) : f.name === dateTimeColumn);
|
|
127
|
+
});
|
|
128
|
+
if (!(existingFilterIdx >= 0)) {
|
|
129
|
+
_context.next = 22;
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
filterIdx = existingFilterIdx;
|
|
133
|
+
filterId = filters[existingFilterIdx].id;
|
|
134
|
+
_context.next = 36;
|
|
135
|
+
break;
|
|
136
|
+
case 22:
|
|
137
|
+
filterIdx = filters.length;
|
|
138
|
+
ctx.dispatch(addFilter(datasetId));
|
|
139
|
+
ctx.dispatch(setFilter(filterIdx, 'name', dateTimeColumn));
|
|
140
|
+
// Poll for the filter entry to appear instead of a fixed sleep: on
|
|
141
|
+
// slower devices the filter (and its id) may not be available yet,
|
|
142
|
+
// and a fixed delay would leave filterId as an empty string, making
|
|
143
|
+
// the later setFilterAnimationWindow({id: filterId, ...}) behave
|
|
144
|
+
// unpredictably.
|
|
145
|
+
filterId = '';
|
|
146
|
+
attempt = 0;
|
|
147
|
+
case 27:
|
|
148
|
+
if (!(attempt < 10 && !filterId)) {
|
|
149
|
+
_context.next = 34;
|
|
150
|
+
break;
|
|
151
|
+
}
|
|
152
|
+
_context.next = 30;
|
|
153
|
+
return sleep(100);
|
|
154
|
+
case 30:
|
|
155
|
+
filterId = (_ctx$getVisState$filt = (_ctx$getVisState$filt2 = ctx.getVisState().filters) === null || _ctx$getVisState$filt2 === void 0 || (_ctx$getVisState$filt2 = _ctx$getVisState$filt2[filterIdx]) === null || _ctx$getVisState$filt2 === void 0 ? void 0 : _ctx$getVisState$filt2.id) !== null && _ctx$getVisState$filt !== void 0 ? _ctx$getVisState$filt : '';
|
|
156
|
+
case 31:
|
|
157
|
+
attempt++;
|
|
158
|
+
_context.next = 27;
|
|
159
|
+
break;
|
|
160
|
+
case 34:
|
|
161
|
+
if (filterId) {
|
|
162
|
+
_context.next = 36;
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
throw new Error("Timed out waiting for the time filter on column \"".concat(dateTimeColumn, "\" to be created. Please try again."));
|
|
166
|
+
case 36:
|
|
167
|
+
currentFilters = (_ctx$getVisState$filt3 = ctx.getVisState().filters) !== null && _ctx$getVisState$filt3 !== void 0 ? _ctx$getVisState$filt3 : [];
|
|
168
|
+
targetFilter = currentFilters[filterIdx];
|
|
169
|
+
resolvedInterval = interval;
|
|
170
|
+
if (!(targetFilter !== null && targetFilter !== void 0 && targetFilter.domain && targetFilter.domain.length === 2)) {
|
|
171
|
+
_context.next = 59;
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
if (!resolvedInterval) {
|
|
175
|
+
fieldIdx = (_dataset$fields$index = (_dataset$fields3 = dataset.fields) === null || _dataset$fields3 === void 0 ? void 0 : _dataset$fields3.indexOf(filterField)) !== null && _dataset$fields$index !== void 0 ? _dataset$fields$index : -1;
|
|
176
|
+
if (fieldIdx >= 0 && dataset.dataContainer) {
|
|
177
|
+
rows = dataset.dataContainer.numRows();
|
|
178
|
+
mappedValues = [];
|
|
179
|
+
// Sample a bounded number of rows — iterating every row can freeze
|
|
180
|
+
// the UI thread on large datasets, and a sample is enough for a
|
|
181
|
+
// reasonable interval estimate.
|
|
182
|
+
MAX_SAMPLES = 1000;
|
|
183
|
+
step = Math.max(1, Math.floor(rows / MAX_SAMPLES));
|
|
184
|
+
for (i = 0; i < rows; i += step) {
|
|
185
|
+
val = dataset.dataContainer.valueAt(i, fieldIdx);
|
|
186
|
+
if (val != null) {
|
|
187
|
+
ts = typeof val === 'number' ? val : new Date(val).getTime();
|
|
188
|
+
if (!isNaN(ts)) mappedValues.push(ts);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
resolvedInterval = detectIntervalFromDomain(targetFilter.domain, mappedValues);
|
|
193
|
+
}
|
|
194
|
+
ctx.dispatch(setFilter(filterIdx, 'plotType', {
|
|
195
|
+
interval: resolvedInterval
|
|
196
|
+
}));
|
|
197
|
+
ctx.dispatch(setFilterAnimationWindow({
|
|
198
|
+
id: filterId,
|
|
199
|
+
animationWindow: 'free'
|
|
200
|
+
}));
|
|
201
|
+
|
|
202
|
+
// Poll for timeBins to become available (kepler computes them async).
|
|
203
|
+
_attempt = 0;
|
|
204
|
+
case 44:
|
|
205
|
+
if (!(_attempt < 10)) {
|
|
206
|
+
_context.next = 57;
|
|
207
|
+
break;
|
|
208
|
+
}
|
|
209
|
+
_context.next = 47;
|
|
210
|
+
return sleep(200);
|
|
211
|
+
case 47:
|
|
212
|
+
updatedFilter = (_ctx$getVisState$filt4 = ctx.getVisState().filters) === null || _ctx$getVisState$filt4 === void 0 ? void 0 : _ctx$getVisState$filt4[filterIdx];
|
|
213
|
+
if (!(updatedFilter !== null && updatedFilter !== void 0 && updatedFilter.domain && updatedFilter.domain.length === 2)) {
|
|
214
|
+
_context.next = 54;
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
// timeBins is keyed by dataset id, then by interval:
|
|
218
|
+
// {[dataId]: {[interval]: bins[]}}. Look up the bins for THIS
|
|
219
|
+
// filter's dataset — grabbing the first entry via
|
|
220
|
+
// Object.values(timeBins)[0] would pick the wrong dataset's bins
|
|
221
|
+
// when multiple datasets/filters exist, animating against the
|
|
222
|
+
// wrong time window.
|
|
223
|
+
timeBins = updatedFilter.timeBins;
|
|
224
|
+
bins = timeBins === null || timeBins === void 0 || (_timeBins$datasetId = timeBins[datasetId]) === null || _timeBins$datasetId === void 0 ? void 0 : _timeBins$datasetId[resolvedInterval];
|
|
225
|
+
if (!(bins && bins.length > 0)) {
|
|
226
|
+
_context.next = 54;
|
|
227
|
+
break;
|
|
228
|
+
}
|
|
229
|
+
datasetBins = bins;
|
|
230
|
+
return _context.abrupt("break", 57);
|
|
231
|
+
case 54:
|
|
232
|
+
_attempt++;
|
|
233
|
+
_context.next = 44;
|
|
234
|
+
break;
|
|
235
|
+
case 57:
|
|
236
|
+
finalFilter = (_ctx$getVisState$filt5 = ctx.getVisState().filters) === null || _ctx$getVisState$filt5 === void 0 ? void 0 : _ctx$getVisState$filt5[filterIdx];
|
|
237
|
+
if (finalFilter !== null && finalFilter !== void 0 && finalFilter.domain && finalFilter.domain.length === 2) {
|
|
238
|
+
if (datasetBins && datasetBins.length > 0) {
|
|
239
|
+
ctx.dispatch(setFilterAnimationTime(filterIdx, 'value', [datasetBins[0].x0, datasetBins[0].x1]));
|
|
240
|
+
} else {
|
|
241
|
+
domainStart = finalFilter.domain[0];
|
|
242
|
+
windowSize = (_INTERVAL_MILLIS = INTERVAL_MILLIS[resolvedInterval]) !== null && _INTERVAL_MILLIS !== void 0 ? _INTERVAL_MILLIS : MILLIS_YEAR;
|
|
243
|
+
ctx.dispatch(setFilterAnimationTime(filterIdx, 'value', [domainStart, domainStart + windowSize]));
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
case 59:
|
|
247
|
+
return _context.abrupt("return", {
|
|
248
|
+
success: true,
|
|
249
|
+
commandId: addTimeFilterCommandId,
|
|
250
|
+
data: {
|
|
251
|
+
details: "Time filter added on column \"".concat(dateTimeColumn, "\" for dataset \"").concat(datasetName, "\" (interval: ").concat((_resolvedInterval = resolvedInterval) !== null && _resolvedInterval !== void 0 ? _resolvedInterval : 'auto', ", filter index: ").concat(filterIdx, "). The time controller is now visible at the bottom of the map."),
|
|
252
|
+
filterIndex: filterIdx,
|
|
253
|
+
interval: resolvedInterval
|
|
254
|
+
}
|
|
255
|
+
});
|
|
256
|
+
case 62:
|
|
257
|
+
_context.prev = 62;
|
|
258
|
+
_context.t0 = _context["catch"](1);
|
|
259
|
+
return _context.abrupt("return", {
|
|
260
|
+
success: false,
|
|
261
|
+
commandId: addTimeFilterCommandId,
|
|
262
|
+
error: _context.t0 instanceof Error ? _context.t0.message : 'Unknown error',
|
|
263
|
+
data: {
|
|
264
|
+
instruction: 'Check that the dataset exists, the column is a TIMESTAMP/DATE, and a layer for the dataset is already on the map. Do not retry more than once.'
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
case 65:
|
|
268
|
+
case "end":
|
|
269
|
+
return _context.stop();
|
|
270
|
+
}
|
|
271
|
+
}, _callee, null, [[1, 62]]);
|
|
272
|
+
}));
|
|
273
|
+
function execute(_x, _x2) {
|
|
274
|
+
return _execute.apply(this, arguments);
|
|
275
|
+
}
|
|
276
|
+
return execute;
|
|
277
|
+
}()
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ6IiwiYWRkRmlsdGVyIiwic2V0RmlsdGVyIiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZSIsInNldEZpbHRlckFuaW1hdGlvbldpbmRvdyIsIk1JTExJU19TRUNPTkQiLCJNSUxMSVNfTUlOVVRFIiwiTUlMTElTX0hPVVIiLCJNSUxMSVNfREFZIiwiTUlMTElTX1dFRUsiLCJNSUxMSVNfTU9OVEgiLCJNSUxMSVNfM19NT05USCIsIk1JTExJU19ZRUFSIiwiSU5URVJWQUxfTUlMTElTIiwiZGV0ZWN0SW50ZXJ2YWxGcm9tRG9tYWluIiwiZG9tYWluIiwibWFwcGVkVmFsdWVzIiwic3BhbiIsIm51bVVuaXF1ZVN0ZXBzIiwibGVuZ3RoIiwidW5pcXVlIiwiU2V0IiwiZmlsdGVyIiwidiIsInNpemUiLCJhdmdHYXAiLCJNYXRoIiwibWF4Iiwic2xlZXAiLCJtcyIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsImFkZFRpbWVGaWx0ZXJDb21tYW5kSWQiLCJnZXRBZGRUaW1lRmlsdGVyQ29tbWFuZCIsImN0eCIsImlkIiwibmFtZSIsImdyb3VwIiwiZGVzY3JpcHRpb24iLCJtZXRhZGF0YSIsInJlYWRPbmx5Iiwicmlza0xldmVsIiwiaWRlbXBvdGVudCIsImlucHV0U2NoZW1hIiwib2JqZWN0IiwiZGF0YXNldE5hbWUiLCJzdHJpbmciLCJkZXNjcmliZSIsImRhdGVUaW1lQ29sdW1uIiwiaW50ZXJ2YWwiLCJvcHRpb25hbCIsImV4ZWN1dGUiLCJfZXhlY3V0ZSIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiX2V4ZWNDdHgiLCJpbnB1dCIsIl9yZWYiLCJfZGF0YXNldCRmaWVsZHMiLCJfdmlzU3RhdGUkZmlsdGVycyIsIl9jdHgkZ2V0VmlzU3RhdGUkZmlsdDMiLCJfcmVzb2x2ZWRJbnRlcnZhbCIsInZpc1N0YXRlIiwiZGF0YXNldHMiLCJkYXRhc2V0SWQiLCJkYXRhc2V0IiwiZmlsdGVyRmllbGQiLCJfZGF0YXNldCRmaWVsZHMyIiwiZmlsdGVycyIsImV4aXN0aW5nRmlsdGVySWR4IiwiZmlsdGVySWR4IiwiZmlsdGVySWQiLCJhdHRlbXB0IiwiX2N0eCRnZXRWaXNTdGF0ZSRmaWx0IiwiX2N0eCRnZXRWaXNTdGF0ZSRmaWx0MiIsImN1cnJlbnRGaWx0ZXJzIiwidGFyZ2V0RmlsdGVyIiwicmVzb2x2ZWRJbnRlcnZhbCIsIl9jdHgkZ2V0VmlzU3RhdGUkZmlsdDUiLCJfZGF0YXNldCRmaWVsZHMkaW5kZXgiLCJfZGF0YXNldCRmaWVsZHMzIiwiZmllbGRJZHgiLCJyb3dzIiwiTUFYX1NBTVBMRVMiLCJzdGVwIiwiaSIsInZhbCIsInRzIiwiZGF0YXNldEJpbnMiLCJfYXR0ZW1wdCIsIl9jdHgkZ2V0VmlzU3RhdGUkZmlsdDQiLCJ1cGRhdGVkRmlsdGVyIiwiX3RpbWVCaW5zJGRhdGFzZXRJZCIsInRpbWVCaW5zIiwiYmlucyIsImZpbmFsRmlsdGVyIiwiX0lOVEVSVkFMX01JTExJUyIsImRvbWFpblN0YXJ0Iiwid2luZG93U2l6ZSIsIndyYXAiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJ1bmRlZmluZWQiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJFcnJvciIsImNvbmNhdCIsIlN0cmluZyIsImtleXMiLCJqb2luIiwiZ2V0VmlzU3RhdGUiLCJmaW5kIiwiZGF0YUlkIiwibGFiZWwiLCJmaWVsZHMiLCJmIiwibWFwIiwidHlwZSIsImZpbmRJbmRleCIsIkFycmF5IiwiaXNBcnJheSIsImluY2x1ZGVzIiwiZGlzcGF0Y2giLCJpbmRleE9mIiwiZGF0YUNvbnRhaW5lciIsIm51bVJvd3MiLCJmbG9vciIsInZhbHVlQXQiLCJEYXRlIiwiZ2V0VGltZSIsImlzTmFOIiwicHVzaCIsImFuaW1hdGlvbldpbmRvdyIsImFicnVwdCIsIngwIiwieDEiLCJzdWNjZXNzIiwiY29tbWFuZElkIiwiZGF0YSIsImRldGFpbHMiLCJmaWx0ZXJJbmRleCIsInQwIiwiZXJyb3IiLCJtZXNzYWdlIiwiaW5zdHJ1Y3Rpb24iLCJzdG9wIiwiX3giLCJfeDIiLCJhcHBseSIsImFyZ3VtZW50cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy90aW1lLWZpbHRlci1jb21tYW5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB0eXBlIHtSb29tQ29tbWFuZH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5pbXBvcnQgdHlwZSBLZXBsZXJUYWJsZSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB0eXBlIHtEYXRhc2V0c30gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge1xuICBhZGRGaWx0ZXIsXG4gIHNldEZpbHRlcixcbiAgc2V0RmlsdGVyQW5pbWF0aW9uVGltZSxcbiAgc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93XG59IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7S2VwbGVyQ29udGV4dH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIEludGVydmFsS2V5ID1cbiAgfCAnMS1zZWNvbmQnXG4gIHwgJzEtbWludXRlJ1xuICB8ICcxLWhvdXInXG4gIHwgJzEtZGF5J1xuICB8ICcxLXdlZWsnXG4gIHwgJzEtbW9udGgnXG4gIHwgJzMtbW9udGgnXG4gIHwgJzEteWVhcic7XG5cbmNvbnN0IE1JTExJU19TRUNPTkQgPSAxXzAwMDtcbmNvbnN0IE1JTExJU19NSU5VVEUgPSA2MCAqIE1JTExJU19TRUNPTkQ7XG5jb25zdCBNSUxMSVNfSE9VUiA9IDYwICogTUlMTElTX01JTlVURTtcbmNvbnN0IE1JTExJU19EQVkgPSAyNCAqIE1JTExJU19IT1VSO1xuY29uc3QgTUlMTElTX1dFRUsgPSA3ICogTUlMTElTX0RBWTtcbmNvbnN0IE1JTExJU19NT05USCA9IDMwICogTUlMTElTX0RBWTtcbmNvbnN0IE1JTExJU18zX01PTlRIID0gOTEgKiBNSUxMSVNfREFZO1xuY29uc3QgTUlMTElTX1lFQVIgPSAzNjUgKiBNSUxMSVNfREFZO1xuXG5leHBvcnQgY29uc3QgSU5URVJWQUxfTUlMTElTOiBSZWNvcmQ8SW50ZXJ2YWxLZXksIG51bWJlcj4gPSB7XG4gICcxLXNlY29uZCc6IE1JTExJU19TRUNPTkQsXG4gICcxLW1pbnV0ZSc6IE1JTExJU19NSU5VVEUsXG4gICcxLWhvdXInOiBNSUxMSVNfSE9VUixcbiAgJzEtZGF5JzogTUlMTElTX0RBWSxcbiAgJzEtd2Vlayc6IE1JTExJU19XRUVLLFxuICAnMS1tb250aCc6IE1JTExJU19NT05USCxcbiAgJzMtbW9udGgnOiBNSUxMSVNfM19NT05USCxcbiAgJzEteWVhcic6IE1JTExJU19ZRUFSXG59O1xuXG4vKipcbiAqIEluZmVyIGEgc2Vuc2libGUgYW5pbWF0aW9uIGludGVydmFsIGZyb20gYSB0aW1lIGZpbHRlcidzIGRvbWFpbiBhbmQgKHdoZW5cbiAqIGF2YWlsYWJsZSkgdGhlIGFjdHVhbCBkaXN0aW5jdCB0aW1lc3RhbXBzIGluIHRoZSBkYXRhc2V0LiBNaXJyb3JzIHRoZSBsb2dpY1xuICogdXNlZCBieSBzcGF0aWFsLWFnZW50J3MgYGRldGVjdEludGVydmFsRnJvbURvbWFpbmAgc28gdGhlIHNraWxsLXBhdGggYmVoYXZlc1xuICogaWRlbnRpY2FsbHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RJbnRlcnZhbEZyb21Eb21haW4oXG4gIGRvbWFpbjogW251bWJlciwgbnVtYmVyXSxcbiAgbWFwcGVkVmFsdWVzPzogbnVtYmVyW11cbik6IEludGVydmFsS2V5IHtcbiAgY29uc3Qgc3BhbiA9IGRvbWFpblsxXSAtIGRvbWFpblswXTtcbiAgaWYgKHNwYW4gPD0gMCkgcmV0dXJuICcxLXllYXInO1xuXG4gIGxldCBudW1VbmlxdWVTdGVwczogbnVtYmVyO1xuICBpZiAobWFwcGVkVmFsdWVzICYmIG1hcHBlZFZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgdW5pcXVlID0gbmV3IFNldChtYXBwZWRWYWx1ZXMuZmlsdGVyKHYgPT4gdiAhPSBudWxsKSk7XG4gICAgbnVtVW5pcXVlU3RlcHMgPSB1bmlxdWUuc2l6ZTtcbiAgfSBlbHNlIHtcbiAgICBudW1VbmlxdWVTdGVwcyA9IDI7XG4gIH1cblxuICBpZiAobnVtVW5pcXVlU3RlcHMgPD0gMSkgcmV0dXJuICcxLXllYXInO1xuXG4gIGNvbnN0IGF2Z0dhcCA9IHNwYW4gLyBNYXRoLm1heChudW1VbmlxdWVTdGVwcyAtIDEsIDEpO1xuXG4gIGlmIChhdmdHYXAgPj0gTUlMTElTX1lFQVIgKiAwLjgpIHJldHVybiAnMS15ZWFyJztcbiAgaWYgKGF2Z0dhcCA+PSBNSUxMSVNfTU9OVEggKiAyLjUpIHJldHVybiAnMy1tb250aCc7XG4gIGlmIChhdmdHYXAgPj0gTUlMTElTX01PTlRIICogMC44KSByZXR1cm4gJzEtbW9udGgnO1xuICBpZiAoYXZnR2FwID49IE1JTExJU19EQVkgKiA1KSByZXR1cm4gJzEtd2Vlayc7XG4gIGlmIChhdmdHYXAgPj0gTUlMTElTX0RBWSAqIDAuOCkgcmV0dXJuICcxLWRheSc7XG4gIGlmIChhdmdHYXAgPj0gTUlMTElTX0hPVVIgKiAwLjgpIHJldHVybiAnMS1ob3VyJztcbiAgaWYgKGF2Z0dhcCA+PSBNSUxMSVNfTUlOVVRFICogMC44KSByZXR1cm4gJzEtbWludXRlJztcbiAgcmV0dXJuICcxLXNlY29uZCc7XG59XG5cbmNvbnN0IHNsZWVwID0gKG1zOiBudW1iZXIpID0+IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xuXG5leHBvcnQgY29uc3QgYWRkVGltZUZpbHRlckNvbW1hbmRJZCA9ICdtYXAuYWRkLXRpbWUtZmlsdGVyJyBhcyBjb25zdDtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFkZFRpbWVGaWx0ZXJDb21tYW5kKGN0eDogS2VwbGVyQ29udGV4dCk6IFJvb21Db21tYW5kIHtcbiAgcmV0dXJuIHtcbiAgICBpZDogYWRkVGltZUZpbHRlckNvbW1hbmRJZCxcbiAgICBuYW1lOiAnQWRkIHRpbWUgZmlsdGVyJyxcbiAgICBncm91cDogJ01hcCcsXG4gICAgZGVzY3JpcHRpb246IGBBZGQgYSB0aW1lLXJhbmdlIGZpbHRlciB0byBhbmltYXRlIGEgTk9OLXRyaXAgbGF5ZXIgb3ZlciBhIFRJTUVTVEFNUC9EQVRFIGNvbHVtbi4gVGhlIHRpbWUgY29udHJvbGxlciBhcHBlYXJzIGF0IHRoZSBib3R0b20gb2YgdGhlIG1hcC5cblxuRE8gTk9UIGNhbGwgdGhpcyBmb3IgYSB0cmlwIGxheWVyIOKAlCB0cmlwcyBoYXZlIGJ1aWx0LWluIHRpbWUgYW5pbWF0aW9uLlxuXG5UaGUgZGF0YXNldCBhbmQgYSBsYXllciBmb3IgaXQgbXVzdCBhbHJlYWR5IGV4aXN0IG9uIHRoZSBtYXAgKGUuZy4gZnJvbSBtYXAuYWRkLWxheWVyIG9yIG1hcC5sb2FkLWRhdGEpLlxuXG5QYXNzIHRoZSBkYXRhc2V0TmFtZSBhbmQgdGhlIGRhdGVUaW1lQ29sdW1uIHRvIGFuaW1hdGUgb3Zlci4gVGhlIGludGVydmFsIGlzIGF1dG8tZGV0ZWN0ZWQgZnJvbSB0aGUgZGF0YSB3aGVuIG9taXR0ZWQ7IHBhc3MgaXQgZXhwbGljaXRseSB0byBvdmVycmlkZS5gLFxuICAgIG1ldGFkYXRhOiB7cmVhZE9ubHk6IGZhbHNlLCByaXNrTGV2ZWw6ICdtZWRpdW0nLCBpZGVtcG90ZW50OiBmYWxzZX0sXG4gICAgaW5wdXRTY2hlbWE6IHoub2JqZWN0KHtcbiAgICAgIGRhdGFzZXROYW1lOiB6LnN0cmluZygpLmRlc2NyaWJlKCdUaGUgbmFtZSAobGFiZWwpIG9yIGlkIG9mIHRoZSBkYXRhc2V0IHRvIGFuaW1hdGUuJyksXG4gICAgICBkYXRlVGltZUNvbHVtbjogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLmRlc2NyaWJlKFxuICAgICAgICAgICdBIFRJTUVTVEFNUCBvciBEQVRFIGNvbHVtbiBpbiB0aGUgZGF0YXNldC4gRG8gTk9UIHBhc3MgYW4gaW50ZWdlci9zdHJpbmcgZXBvY2ggY29sdW1uIOKAlCBidWlsZCBhIHJlYWwgVElNRVNUQU1QIGNvbHVtbiBmaXJzdC4nXG4gICAgICAgICksXG4gICAgICBpbnRlcnZhbDogelxuICAgICAgICAuZW51bShbJzEtc2Vjb25kJywgJzEtbWludXRlJywgJzEtaG91cicsICcxLWRheScsICcxLXdlZWsnLCAnMS1tb250aCcsICczLW1vbnRoJywgJzEteWVhciddKVxuICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAuZGVzY3JpYmUoXG4gICAgICAgICAgJ0FuaW1hdGlvbiBzdGVwLiBBdXRvLWRldGVjdGVkIGZyb20gdGhlIGRhdGEgc3BhbiBhbmQgZGlzdGluY3QgdGltZXN0YW1wcyB3aGVuIG9taXR0ZWQuJ1xuICAgICAgICApXG4gICAgfSkgYXMgYW55LFxuICAgIGV4ZWN1dGU6IGFzeW5jIChfZXhlY0N0eCwgaW5wdXQpID0+IHtcbiAgICAgIGNvbnN0IHtkYXRhc2V0TmFtZSwgZGF0ZVRpbWVDb2x1bW4sIGludGVydmFsfSA9IChpbnB1dCA/PyB7fSkgYXMge1xuICAgICAgICBkYXRhc2V0TmFtZTogc3RyaW5nO1xuICAgICAgICBkYXRlVGltZUNvbHVtbjogc3RyaW5nO1xuICAgICAgICBpbnRlcnZhbD86IEludGVydmFsS2V5O1xuICAgICAgfTtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFJ1bnRpbWUgZ3VhcmQ6IHRoZSBicmlkZ2Uvd2ViTUNQIGNhbGwgZXhlY3V0ZSB3aXRob3V0IHpvZCBwYXJzaW5nLFxuICAgICAgICAvLyBzbyBhbiBpbnZhbGlkIGludGVydmFsIG11c3Qgbm90IGJlIHdyaXR0ZW4gaW50byBrZXBsZXIgZmlsdGVyIHN0YXRlXG4gICAgICAgIC8vIChwbG90VHlwZS5pbnRlcnZhbCkuIFVzZSBhbiBvd24tcHJvcGVydHkgY2hlY2sg4oCUIGBpbmAgbWF0Y2hlc1xuICAgICAgICAvLyBpbmhlcml0ZWQgcHJvcGVydGllcyAoZS5nLiBcInRvU3RyaW5nXCIpLCBzbyBhIGNyYWZ0ZWQgaW50ZXJ2YWwgY291bGRcbiAgICAgICAgLy8gb3RoZXJ3aXNlIGJ5cGFzcyB0aGUgZ3VhcmQg4oCUIGFuZCByZXF1aXJlIGEgc3RyaW5nIHZhbHVlLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgaW50ZXJ2YWwgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICh0eXBlb2YgaW50ZXJ2YWwgIT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKElOVEVSVkFMX01JTExJUywgaW50ZXJ2YWwpKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgSW52YWxpZCBpbnRlcnZhbCBcIiR7U3RyaW5nKGludGVydmFsKX1cIi4gTXVzdCBiZSBvbmUgb2Y6ICR7T2JqZWN0LmtleXMoXG4gICAgICAgICAgICAgIElOVEVSVkFMX01JTExJU1xuICAgICAgICAgICAgKS5qb2luKCcsICcpfS5gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2aXNTdGF0ZSA9IGN0eC5nZXRWaXNTdGF0ZSgpO1xuICAgICAgICBjb25zdCBkYXRhc2V0czogRGF0YXNldHMgPSB2aXNTdGF0ZS5kYXRhc2V0cztcblxuICAgICAgICBjb25zdCBkYXRhc2V0SWQgPSBPYmplY3Qua2V5cyhkYXRhc2V0cykuZmluZChcbiAgICAgICAgICBkYXRhSWQgPT4gZGF0YXNldHNbZGF0YUlkXS5sYWJlbCA9PT0gZGF0YXNldE5hbWUgfHwgZGF0YUlkID09PSBkYXRhc2V0TmFtZVxuICAgICAgICApO1xuICAgICAgICBpZiAoIWRhdGFzZXRJZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRGF0YXNldCAke2RhdGFzZXROYW1lfSBub3QgZm91bmQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW2RhdGFzZXRJZF0gYXMgS2VwbGVyVGFibGU7XG5cbiAgICAgICAgY29uc3QgZmlsdGVyRmllbGQgPSBkYXRhc2V0LmZpZWxkcz8uZmluZChmID0+IGYubmFtZSA9PT0gZGF0ZVRpbWVDb2x1bW4pO1xuICAgICAgICBpZiAoIWZpbHRlckZpZWxkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYENvbHVtbiAke2RhdGVUaW1lQ29sdW1ufSBub3QgZm91bmQgaW4gZGF0YXNldCAke2RhdGFzZXROYW1lfS4gQXZhaWxhYmxlOiAke2RhdGFzZXQuZmllbGRzXG4gICAgICAgICAgICAgID8ubWFwKGYgPT4gZi5uYW1lKVxuICAgICAgICAgICAgICAuam9pbignLCAnKX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVyRmllbGQudHlwZSAhPT0gJ3RpbWVzdGFtcCcgJiYgZmlsdGVyRmllbGQudHlwZSAhPT0gJ2RhdGUnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYENvbHVtbiAke2RhdGVUaW1lQ29sdW1ufSBpcyBvZiB0eXBlIFwiJHtmaWx0ZXJGaWVsZC50eXBlfVwiLCBub3QgdGltZXN0YW1wL2RhdGUuIEJ1aWxkIGEgcmVhbCBUSU1FU1RBTVAgY29sdW1uIGZpcnN0IChLZXBsZXIuZ2wgY2Fubm90IGFuaW1hdGUgb24gaW50ZWdlci9zdHJpbmcgZXBvY2hzKS5gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEV4cGxpY2l0bHkgdHlwZWQ6IGBWaXNTdGF0ZS5maWx0ZXJzYCBpcyB1bnR5cGVkIChpbmRleCBzaWduYXR1cmUpIGFuZFxuICAgICAgICAvLyBzdHJpY3QgY29uc3VtZXJzIChlLmcuIGtlcGxlci1hc3Npc3RhbnQsIHdoaWNoIHZlbmRvcnMgdGhpcyBtb2R1bGUpXG4gICAgICAgIC8vIHdvdWxkIG90aGVyd2lzZSBmbGFnIHRoZSBgLmZpbmRJbmRleChmID0+IOKApilgIGNhbGxiYWNrIGFzIGltcGxpY2l0IGFueS5cbiAgICAgICAgY29uc3QgZmlsdGVyczogYW55W10gPSB2aXNTdGF0ZS5maWx0ZXJzID8/IFtdO1xuICAgICAgICBjb25zdCBleGlzdGluZ0ZpbHRlcklkeCA9IGZpbHRlcnMuZmluZEluZGV4KFxuICAgICAgICAgIGYgPT5cbiAgICAgICAgICAgIChBcnJheS5pc0FycmF5KGYuZGF0YUlkKSA/IGYuZGF0YUlkLmluY2x1ZGVzKGRhdGFzZXRJZCkgOiBmLmRhdGFJZCA9PT0gZGF0YXNldElkKSAmJlxuICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoZi5uYW1lKSA/IGYubmFtZS5pbmNsdWRlcyhkYXRlVGltZUNvbHVtbikgOiBmLm5hbWUgPT09IGRhdGVUaW1lQ29sdW1uKVxuICAgICAgICApO1xuXG4gICAgICAgIGxldCBmaWx0ZXJJZHg6IG51bWJlcjtcbiAgICAgICAgbGV0IGZpbHRlcklkOiBzdHJpbmc7XG5cbiAgICAgICAgaWYgKGV4aXN0aW5nRmlsdGVySWR4ID49IDApIHtcbiAgICAgICAgICBmaWx0ZXJJZHggPSBleGlzdGluZ0ZpbHRlcklkeDtcbiAgICAgICAgICBmaWx0ZXJJZCA9IGZpbHRlcnNbZXhpc3RpbmdGaWx0ZXJJZHhdLmlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpbHRlcklkeCA9IGZpbHRlcnMubGVuZ3RoO1xuICAgICAgICAgIGN0eC5kaXNwYXRjaChhZGRGaWx0ZXIoZGF0YXNldElkKSk7XG4gICAgICAgICAgY3R4LmRpc3BhdGNoKHNldEZpbHRlcihmaWx0ZXJJZHgsICduYW1lJywgZGF0ZVRpbWVDb2x1bW4pKTtcbiAgICAgICAgICAvLyBQb2xsIGZvciB0aGUgZmlsdGVyIGVudHJ5IHRvIGFwcGVhciBpbnN0ZWFkIG9mIGEgZml4ZWQgc2xlZXA6IG9uXG4gICAgICAgICAgLy8gc2xvd2VyIGRldmljZXMgdGhlIGZpbHRlciAoYW5kIGl0cyBpZCkgbWF5IG5vdCBiZSBhdmFpbGFibGUgeWV0LFxuICAgICAgICAgIC8vIGFuZCBhIGZpeGVkIGRlbGF5IHdvdWxkIGxlYXZlIGZpbHRlcklkIGFzIGFuIGVtcHR5IHN0cmluZywgbWFraW5nXG4gICAgICAgICAgLy8gdGhlIGxhdGVyIHNldEZpbHRlckFuaW1hdGlvbldpbmRvdyh7aWQ6IGZpbHRlcklkLCAuLi59KSBiZWhhdmVcbiAgICAgICAgICAvLyB1bnByZWRpY3RhYmx5LlxuICAgICAgICAgIGZpbHRlcklkID0gJyc7XG4gICAgICAgICAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPCAxMCAmJiAhZmlsdGVySWQ7IGF0dGVtcHQrKykge1xuICAgICAgICAgICAgYXdhaXQgc2xlZXAoMTAwKTtcbiAgICAgICAgICAgIGZpbHRlcklkID0gY3R4LmdldFZpc1N0YXRlKCkuZmlsdGVycz8uW2ZpbHRlcklkeF0/LmlkID8/ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWZpbHRlcklkKSB7XG4gICAgICAgICAgICAvLyBGYWlsIGZhc3QgaW5zdGVhZCBvZiBwcm9jZWVkaW5nIHdpdGggYW4gZW1wdHkgaWQg4oCUIHRoZSBsYXRlclxuICAgICAgICAgICAgLy8gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93KHtpZDogZmlsdGVySWQsIC4uLn0pIHdvdWxkIG5vLW9wIG9yXG4gICAgICAgICAgICAvLyB1cGRhdGUgdGhlIHdyb25nIGZpbHRlci5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYFRpbWVkIG91dCB3YWl0aW5nIGZvciB0aGUgdGltZSBmaWx0ZXIgb24gY29sdW1uIFwiJHtkYXRlVGltZUNvbHVtbn1cIiB0byBiZSBjcmVhdGVkLiBQbGVhc2UgdHJ5IGFnYWluLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3VycmVudEZpbHRlcnMgPSBjdHguZ2V0VmlzU3RhdGUoKS5maWx0ZXJzID8/IFtdO1xuICAgICAgICBjb25zdCB0YXJnZXRGaWx0ZXIgPSBjdXJyZW50RmlsdGVyc1tmaWx0ZXJJZHhdO1xuXG4gICAgICAgIGxldCByZXNvbHZlZEludGVydmFsOiBJbnRlcnZhbEtleSB8IHN0cmluZyB8IHVuZGVmaW5lZCA9IGludGVydmFsO1xuXG4gICAgICAgIGlmICh0YXJnZXRGaWx0ZXI/LmRvbWFpbiAmJiB0YXJnZXRGaWx0ZXIuZG9tYWluLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIGlmICghcmVzb2x2ZWRJbnRlcnZhbCkge1xuICAgICAgICAgICAgbGV0IG1hcHBlZFZhbHVlczogbnVtYmVyW10gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBmaWVsZElkeCA9IGRhdGFzZXQuZmllbGRzPy5pbmRleE9mKGZpbHRlckZpZWxkKSA/PyAtMTtcbiAgICAgICAgICAgIGlmIChmaWVsZElkeCA+PSAwICYmIGRhdGFzZXQuZGF0YUNvbnRhaW5lcikge1xuICAgICAgICAgICAgICBjb25zdCByb3dzID0gZGF0YXNldC5kYXRhQ29udGFpbmVyLm51bVJvd3MoKTtcbiAgICAgICAgICAgICAgbWFwcGVkVmFsdWVzID0gW107XG4gICAgICAgICAgICAgIC8vIFNhbXBsZSBhIGJvdW5kZWQgbnVtYmVyIG9mIHJvd3Mg4oCUIGl0ZXJhdGluZyBldmVyeSByb3cgY2FuIGZyZWV6ZVxuICAgICAgICAgICAgICAvLyB0aGUgVUkgdGhyZWFkIG9uIGxhcmdlIGRhdGFzZXRzLCBhbmQgYSBzYW1wbGUgaXMgZW5vdWdoIGZvciBhXG4gICAgICAgICAgICAgIC8vIHJlYXNvbmFibGUgaW50ZXJ2YWwgZXN0aW1hdGUuXG4gICAgICAgICAgICAgIGNvbnN0IE1BWF9TQU1QTEVTID0gMTAwMDtcbiAgICAgICAgICAgICAgY29uc3Qgc3RlcCA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3Iocm93cyAvIE1BWF9TQU1QTEVTKSk7XG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSArPSBzdGVwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsID0gZGF0YXNldC5kYXRhQ29udGFpbmVyLnZhbHVlQXQoaSwgZmllbGRJZHgpO1xuICAgICAgICAgICAgICAgIGlmICh2YWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgdHMgPSB0eXBlb2YgdmFsID09PSAnbnVtYmVyJyA/IHZhbCA6IG5ldyBEYXRlKHZhbCBhcyBhbnkpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4odHMpKSBtYXBwZWRWYWx1ZXMucHVzaCh0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlZEludGVydmFsID0gZGV0ZWN0SW50ZXJ2YWxGcm9tRG9tYWluKFxuICAgICAgICAgICAgICB0YXJnZXRGaWx0ZXIuZG9tYWluIGFzIFtudW1iZXIsIG51bWJlcl0sXG4gICAgICAgICAgICAgIG1hcHBlZFZhbHVlc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdHguZGlzcGF0Y2goc2V0RmlsdGVyKGZpbHRlcklkeCwgJ3Bsb3RUeXBlJywge2ludGVydmFsOiByZXNvbHZlZEludGVydmFsfSkpO1xuICAgICAgICAgIGN0eC5kaXNwYXRjaChzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3coe2lkOiBmaWx0ZXJJZCwgYW5pbWF0aW9uV2luZG93OiAnZnJlZSd9KSk7XG5cbiAgICAgICAgICAvLyBQb2xsIGZvciB0aW1lQmlucyB0byBiZWNvbWUgYXZhaWxhYmxlIChrZXBsZXIgY29tcHV0ZXMgdGhlbSBhc3luYykuXG4gICAgICAgICAgbGV0IGRhdGFzZXRCaW5zOiB7eDA6IG51bWJlcjsgeDE6IG51bWJlcn1bXSB8IHVuZGVmaW5lZDtcbiAgICAgICAgICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8IDEwOyBhdHRlbXB0KyspIHtcbiAgICAgICAgICAgIGF3YWl0IHNsZWVwKDIwMCk7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkRmlsdGVyID0gY3R4LmdldFZpc1N0YXRlKCkuZmlsdGVycz8uW2ZpbHRlcklkeF07XG4gICAgICAgICAgICBpZiAodXBkYXRlZEZpbHRlcj8uZG9tYWluICYmIHVwZGF0ZWRGaWx0ZXIuZG9tYWluLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAvLyB0aW1lQmlucyBpcyBrZXllZCBieSBkYXRhc2V0IGlkLCB0aGVuIGJ5IGludGVydmFsOlxuICAgICAgICAgICAgICAvLyB7W2RhdGFJZF06IHtbaW50ZXJ2YWxdOiBiaW5zW119fS4gTG9vayB1cCB0aGUgYmlucyBmb3IgVEhJU1xuICAgICAgICAgICAgICAvLyBmaWx0ZXIncyBkYXRhc2V0IOKAlCBncmFiYmluZyB0aGUgZmlyc3QgZW50cnkgdmlhXG4gICAgICAgICAgICAgIC8vIE9iamVjdC52YWx1ZXModGltZUJpbnMpWzBdIHdvdWxkIHBpY2sgdGhlIHdyb25nIGRhdGFzZXQncyBiaW5zXG4gICAgICAgICAgICAgIC8vIHdoZW4gbXVsdGlwbGUgZGF0YXNldHMvZmlsdGVycyBleGlzdCwgYW5pbWF0aW5nIGFnYWluc3QgdGhlXG4gICAgICAgICAgICAgIC8vIHdyb25nIHRpbWUgd2luZG93LlxuICAgICAgICAgICAgICBjb25zdCB0aW1lQmlucyA9ICh1cGRhdGVkRmlsdGVyIGFzIGFueSkudGltZUJpbnM7XG4gICAgICAgICAgICAgIGNvbnN0IGJpbnMgPSB0aW1lQmlucz8uW2RhdGFzZXRJZF0/LltyZXNvbHZlZEludGVydmFsIGFzIHN0cmluZ107XG4gICAgICAgICAgICAgIGlmIChiaW5zICYmIGJpbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGRhdGFzZXRCaW5zID0gYmlucztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGZpbmFsRmlsdGVyID0gY3R4LmdldFZpc1N0YXRlKCkuZmlsdGVycz8uW2ZpbHRlcklkeF07XG4gICAgICAgICAgaWYgKGZpbmFsRmlsdGVyPy5kb21haW4gJiYgZmluYWxGaWx0ZXIuZG9tYWluLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgaWYgKGRhdGFzZXRCaW5zICYmIGRhdGFzZXRCaW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgY3R4LmRpc3BhdGNoKFxuICAgICAgICAgICAgICAgIHNldEZpbHRlckFuaW1hdGlvblRpbWUoZmlsdGVySWR4LCAndmFsdWUnLCBbZGF0YXNldEJpbnNbMF0ueDAsIGRhdGFzZXRCaW5zWzBdLngxXSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRvbWFpblN0YXJ0ID0gKGZpbmFsRmlsdGVyLmRvbWFpbiBhcyBudW1iZXJbXSlbMF07XG4gICAgICAgICAgICAgIGNvbnN0IHdpbmRvd1NpemUgPSBJTlRFUlZBTF9NSUxMSVNbcmVzb2x2ZWRJbnRlcnZhbCBhcyBJbnRlcnZhbEtleV0gPz8gTUlMTElTX1lFQVI7XG4gICAgICAgICAgICAgIGN0eC5kaXNwYXRjaChcbiAgICAgICAgICAgICAgICBzZXRGaWx0ZXJBbmltYXRpb25UaW1lKGZpbHRlcklkeCwgJ3ZhbHVlJywgW2RvbWFpblN0YXJ0LCBkb21haW5TdGFydCArIHdpbmRvd1NpemVdKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICBjb21tYW5kSWQ6IGFkZFRpbWVGaWx0ZXJDb21tYW5kSWQsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgZGV0YWlsczogYFRpbWUgZmlsdGVyIGFkZGVkIG9uIGNvbHVtbiBcIiR7ZGF0ZVRpbWVDb2x1bW59XCIgZm9yIGRhdGFzZXQgXCIke2RhdGFzZXROYW1lfVwiIChpbnRlcnZhbDogJHtcbiAgICAgICAgICAgICAgcmVzb2x2ZWRJbnRlcnZhbCA/PyAnYXV0bydcbiAgICAgICAgICAgIH0sIGZpbHRlciBpbmRleDogJHtmaWx0ZXJJZHh9KS4gVGhlIHRpbWUgY29udHJvbGxlciBpcyBub3cgdmlzaWJsZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBtYXAuYCxcbiAgICAgICAgICAgIGZpbHRlckluZGV4OiBmaWx0ZXJJZHgsXG4gICAgICAgICAgICBpbnRlcnZhbDogcmVzb2x2ZWRJbnRlcnZhbFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgY29tbWFuZElkOiBhZGRUaW1lRmlsdGVyQ29tbWFuZElkLFxuICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBpbnN0cnVjdGlvbjpcbiAgICAgICAgICAgICAgJ0NoZWNrIHRoYXQgdGhlIGRhdGFzZXQgZXhpc3RzLCB0aGUgY29sdW1uIGlzIGEgVElNRVNUQU1QL0RBVEUsIGFuZCBhIGxheWVyIGZvciB0aGUgZGF0YXNldCBpcyBhbHJlYWR5IG9uIHRoZSBtYXAuIERvIG5vdCByZXRyeSBtb3JlIHRoYW4gb25jZS4nXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBOztBQUdBLFNBQVFBLENBQUMsUUFBTyxLQUFLO0FBR3JCLFNBQ0VDLFNBQVMsRUFDVEMsU0FBUyxFQUNUQyxzQkFBc0IsRUFDdEJDLHdCQUF3QixRQUNuQixvQkFBb0I7QUFhM0Is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
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
2
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
3
|
+
// SPDX-License-Identifier: MIT
|
|
4
|
+
// Copyright contributors to the kepler.gl project
|
|
5
|
+
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { setFilterView } from '@kepler.gl/actions';
|
|
8
|
+
export var toggleTimeFilterCommandId = 'map.toggle-time-filter';
|
|
9
|
+
export function getToggleTimeFilterCommand(ctx) {
|
|
10
|
+
return {
|
|
11
|
+
id: toggleTimeFilterCommandId,
|
|
12
|
+
name: 'Toggle time controller',
|
|
13
|
+
group: 'Map',
|
|
14
|
+
description: "Show or hide the enlarged time controller at the bottom of the map.\n\nA time filter must already exist on the map (created via map.add-time-filter).\n\n- action: \"show\" \u2014 enlarge the time controller so it is visible at the bottom of the map.\n- action: \"hide\" \u2014 collapse the time controller back to the side panel.",
|
|
15
|
+
metadata: {
|
|
16
|
+
readOnly: false,
|
|
17
|
+
riskLevel: 'low',
|
|
18
|
+
idempotent: true
|
|
19
|
+
},
|
|
20
|
+
inputSchema: z.object({
|
|
21
|
+
action: z["enum"](['show', 'hide']).describe('"show" enlarges the time controller at the bottom of the map; "hide" collapses it to the side panel.'),
|
|
22
|
+
filterIndex: z.number().optional().describe('Index of the time filter to toggle. If omitted, the first time-range filter found is used.')
|
|
23
|
+
}),
|
|
24
|
+
execute: function () {
|
|
25
|
+
var _execute = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(_execCtx, input) {
|
|
26
|
+
var _ref, action, filterIndex, _visState$filters, visState, filters, targetIdx, found, view;
|
|
27
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
28
|
+
while (1) switch (_context.prev = _context.next) {
|
|
29
|
+
case 0:
|
|
30
|
+
_ref = input !== null && input !== void 0 ? input : {}, action = _ref.action, filterIndex = _ref.filterIndex;
|
|
31
|
+
_context.prev = 1;
|
|
32
|
+
if (!(action !== 'show' && action !== 'hide')) {
|
|
33
|
+
_context.next = 4;
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
return _context.abrupt("return", {
|
|
37
|
+
success: false,
|
|
38
|
+
commandId: toggleTimeFilterCommandId,
|
|
39
|
+
error: "Invalid action \"".concat(String(action), "\". Must be \"show\" or \"hide\"."),
|
|
40
|
+
data: {
|
|
41
|
+
instruction: 'Pass action: "show" to enlarge the time controller, or "hide" to collapse it.'
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
case 4:
|
|
45
|
+
if (!(filterIndex !== undefined && (!Number.isInteger(filterIndex) || filterIndex < 0))) {
|
|
46
|
+
_context.next = 6;
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
return _context.abrupt("return", {
|
|
50
|
+
success: false,
|
|
51
|
+
commandId: toggleTimeFilterCommandId,
|
|
52
|
+
error: "Invalid filterIndex \"".concat(String(filterIndex), "\". Must be a non-negative integer."),
|
|
53
|
+
data: {
|
|
54
|
+
instruction: 'Pass filterIndex as a non-negative integer, or omit it to auto-detect the first time filter.'
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
case 6:
|
|
58
|
+
visState = ctx.getVisState();
|
|
59
|
+
filters = (_visState$filters = visState.filters) !== null && _visState$filters !== void 0 ? _visState$filters : [];
|
|
60
|
+
if (!(filters.length === 0)) {
|
|
61
|
+
_context.next = 10;
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
return _context.abrupt("return", {
|
|
65
|
+
success: false,
|
|
66
|
+
commandId: toggleTimeFilterCommandId,
|
|
67
|
+
error: 'No filters found on the map. Add a time filter first via map.add-time-filter.',
|
|
68
|
+
data: {
|
|
69
|
+
instruction: 'Call map.add-time-filter before map.toggle-time-filter.'
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
case 10:
|
|
73
|
+
if (!(filterIndex === undefined)) {
|
|
74
|
+
_context.next = 17;
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
found = filters.findIndex(function (f) {
|
|
78
|
+
return f.type === 'timeRange' || f.type === 'time';
|
|
79
|
+
}); // Don't fall back to index 0 when no time filter exists — toggling
|
|
80
|
+
// the first (non-time) filter would mutate an unrelated filter,
|
|
81
|
+
// contradicting the "a time filter must already exist" contract.
|
|
82
|
+
if (!(found < 0)) {
|
|
83
|
+
_context.next = 14;
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
return _context.abrupt("return", {
|
|
87
|
+
success: false,
|
|
88
|
+
commandId: toggleTimeFilterCommandId,
|
|
89
|
+
error: 'No time filter found on the map. Add a time filter first via map.add-time-filter.',
|
|
90
|
+
data: {
|
|
91
|
+
instruction: 'Call map.add-time-filter before map.toggle-time-filter.'
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
case 14:
|
|
95
|
+
targetIdx = found;
|
|
96
|
+
_context.next = 18;
|
|
97
|
+
break;
|
|
98
|
+
case 17:
|
|
99
|
+
targetIdx = filterIndex;
|
|
100
|
+
case 18:
|
|
101
|
+
if (!(targetIdx < 0 || targetIdx >= filters.length)) {
|
|
102
|
+
_context.next = 20;
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
return _context.abrupt("return", {
|
|
106
|
+
success: false,
|
|
107
|
+
commandId: toggleTimeFilterCommandId,
|
|
108
|
+
error: "Filter index ".concat(targetIdx, " is out of range. There are ").concat(filters.length, " filter(s)."),
|
|
109
|
+
data: {
|
|
110
|
+
instruction: "Use a filterIndex between 0 and ".concat(filters.length - 1, ".")
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
case 20:
|
|
114
|
+
view = action === 'show' ? 'enlarged' : 'side';
|
|
115
|
+
ctx.dispatch(setFilterView(targetIdx, view));
|
|
116
|
+
return _context.abrupt("return", {
|
|
117
|
+
success: true,
|
|
118
|
+
commandId: toggleTimeFilterCommandId,
|
|
119
|
+
data: {
|
|
120
|
+
details: action === 'show' ? "Time filter at index ".concat(targetIdx, " is now enlarged. The time controller is visible at the bottom of the map.") : "Time filter at index ".concat(targetIdx, " has been collapsed back to the side panel.")
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
case 25:
|
|
124
|
+
_context.prev = 25;
|
|
125
|
+
_context.t0 = _context["catch"](1);
|
|
126
|
+
return _context.abrupt("return", {
|
|
127
|
+
success: false,
|
|
128
|
+
commandId: toggleTimeFilterCommandId,
|
|
129
|
+
error: _context.t0 instanceof Error ? _context.t0.message : 'Unknown error',
|
|
130
|
+
data: {
|
|
131
|
+
instruction: 'Check that a time filter exists. If the error persists, ask the user to try with different parameters.'
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
case 28:
|
|
135
|
+
case "end":
|
|
136
|
+
return _context.stop();
|
|
137
|
+
}
|
|
138
|
+
}, _callee, null, [[1, 25]]);
|
|
139
|
+
}));
|
|
140
|
+
function execute(_x, _x2) {
|
|
141
|
+
return _execute.apply(this, arguments);
|
|
142
|
+
}
|
|
143
|
+
return execute;
|
|
144
|
+
}()
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ6Iiwic2V0RmlsdGVyVmlldyIsInRvZ2dsZVRpbWVGaWx0ZXJDb21tYW5kSWQiLCJnZXRUb2dnbGVUaW1lRmlsdGVyQ29tbWFuZCIsImN0eCIsImlkIiwibmFtZSIsImdyb3VwIiwiZGVzY3JpcHRpb24iLCJtZXRhZGF0YSIsInJlYWRPbmx5Iiwicmlza0xldmVsIiwiaWRlbXBvdGVudCIsImlucHV0U2NoZW1hIiwib2JqZWN0IiwiYWN0aW9uIiwiZGVzY3JpYmUiLCJmaWx0ZXJJbmRleCIsIm51bWJlciIsIm9wdGlvbmFsIiwiZXhlY3V0ZSIsIl9leGVjdXRlIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJfZXhlY0N0eCIsImlucHV0IiwiX3JlZiIsIl92aXNTdGF0ZSRmaWx0ZXJzIiwidmlzU3RhdGUiLCJmaWx0ZXJzIiwidGFyZ2V0SWR4IiwiZm91bmQiLCJ2aWV3Iiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImFicnVwdCIsInN1Y2Nlc3MiLCJjb21tYW5kSWQiLCJlcnJvciIsImNvbmNhdCIsIlN0cmluZyIsImRhdGEiLCJpbnN0cnVjdGlvbiIsInVuZGVmaW5lZCIsIk51bWJlciIsImlzSW50ZWdlciIsImdldFZpc1N0YXRlIiwibGVuZ3RoIiwiZmluZEluZGV4IiwiZiIsInR5cGUiLCJkaXNwYXRjaCIsImRldGFpbHMiLCJ0MCIsIkVycm9yIiwibWVzc2FnZSIsInN0b3AiLCJfeCIsIl94MiIsImFwcGx5IiwiYXJndW1lbnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3RvZ2dsZS10aW1lLWZpbHRlci1jb21tYW5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB0eXBlIHtSb29tQ29tbWFuZH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5pbXBvcnQge3NldEZpbHRlclZpZXd9IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7S2VwbGVyQ29udGV4dH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCB0b2dnbGVUaW1lRmlsdGVyQ29tbWFuZElkID0gJ21hcC50b2dnbGUtdGltZS1maWx0ZXInIGFzIGNvbnN0O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VG9nZ2xlVGltZUZpbHRlckNvbW1hbmQoY3R4OiBLZXBsZXJDb250ZXh0KTogUm9vbUNvbW1hbmQge1xuICByZXR1cm4ge1xuICAgIGlkOiB0b2dnbGVUaW1lRmlsdGVyQ29tbWFuZElkLFxuICAgIG5hbWU6ICdUb2dnbGUgdGltZSBjb250cm9sbGVyJyxcbiAgICBncm91cDogJ01hcCcsXG4gICAgZGVzY3JpcHRpb246IGBTaG93IG9yIGhpZGUgdGhlIGVubGFyZ2VkIHRpbWUgY29udHJvbGxlciBhdCB0aGUgYm90dG9tIG9mIHRoZSBtYXAuXG5cbkEgdGltZSBmaWx0ZXIgbXVzdCBhbHJlYWR5IGV4aXN0IG9uIHRoZSBtYXAgKGNyZWF0ZWQgdmlhIG1hcC5hZGQtdGltZS1maWx0ZXIpLlxuXG4tIGFjdGlvbjogXCJzaG93XCIg4oCUIGVubGFyZ2UgdGhlIHRpbWUgY29udHJvbGxlciBzbyBpdCBpcyB2aXNpYmxlIGF0IHRoZSBib3R0b20gb2YgdGhlIG1hcC5cbi0gYWN0aW9uOiBcImhpZGVcIiDigJQgY29sbGFwc2UgdGhlIHRpbWUgY29udHJvbGxlciBiYWNrIHRvIHRoZSBzaWRlIHBhbmVsLmAsXG4gICAgbWV0YWRhdGE6IHtyZWFkT25seTogZmFsc2UsIHJpc2tMZXZlbDogJ2xvdycsIGlkZW1wb3RlbnQ6IHRydWV9LFxuICAgIGlucHV0U2NoZW1hOiB6Lm9iamVjdCh7XG4gICAgICBhY3Rpb246IHpcbiAgICAgICAgLmVudW0oWydzaG93JywgJ2hpZGUnXSlcbiAgICAgICAgLmRlc2NyaWJlKFxuICAgICAgICAgICdcInNob3dcIiBlbmxhcmdlcyB0aGUgdGltZSBjb250cm9sbGVyIGF0IHRoZSBib3R0b20gb2YgdGhlIG1hcDsgXCJoaWRlXCIgY29sbGFwc2VzIGl0IHRvIHRoZSBzaWRlIHBhbmVsLidcbiAgICAgICAgKSxcbiAgICAgIGZpbHRlckluZGV4OiB6XG4gICAgICAgIC5udW1iZXIoKVxuICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAuZGVzY3JpYmUoXG4gICAgICAgICAgJ0luZGV4IG9mIHRoZSB0aW1lIGZpbHRlciB0byB0b2dnbGUuIElmIG9taXR0ZWQsIHRoZSBmaXJzdCB0aW1lLXJhbmdlIGZpbHRlciBmb3VuZCBpcyB1c2VkLidcbiAgICAgICAgKVxuICAgIH0pIGFzIGFueSxcbiAgICBleGVjdXRlOiBhc3luYyAoX2V4ZWNDdHgsIGlucHV0KSA9PiB7XG4gICAgICBjb25zdCB7YWN0aW9uLCBmaWx0ZXJJbmRleH0gPSAoaW5wdXQgPz8ge30pIGFzIHtcbiAgICAgICAgYWN0aW9uOiAnc2hvdycgfCAnaGlkZSc7XG4gICAgICAgIGZpbHRlckluZGV4PzogbnVtYmVyO1xuICAgICAgfTtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFJ1bnRpbWUgZ3VhcmQ6IHRoZSBicmlkZ2Uvd2ViTUNQIGNhbGwgZXhlY3V0ZSBkaXJlY3RseSB3aXRob3V0IHpvZFxuICAgICAgICAvLyBwYXJzaW5nLCBzbyBhIG1pc3NpbmcvaW52YWxpZCBhY3Rpb24gbXVzdCBub3Qgc2lsZW50bHkgZmFsbCBiYWNrIHRvXG4gICAgICAgIC8vICdzaWRlJyAod2hpY2ggd291bGQgaGlkZSB0aGUgY29udHJvbGxlciDigJQgYSBzdXJwcmlzaW5nIG11dGF0aW9uKS5cbiAgICAgICAgaWYgKGFjdGlvbiAhPT0gJ3Nob3cnICYmIGFjdGlvbiAhPT0gJ2hpZGUnKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgY29tbWFuZElkOiB0b2dnbGVUaW1lRmlsdGVyQ29tbWFuZElkLFxuICAgICAgICAgICAgZXJyb3I6IGBJbnZhbGlkIGFjdGlvbiBcIiR7U3RyaW5nKGFjdGlvbil9XCIuIE11c3QgYmUgXCJzaG93XCIgb3IgXCJoaWRlXCIuYCxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb246XG4gICAgICAgICAgICAgICAgJ1Bhc3MgYWN0aW9uOiBcInNob3dcIiB0byBlbmxhcmdlIHRoZSB0aW1lIGNvbnRyb2xsZXIsIG9yIFwiaGlkZVwiIHRvIGNvbGxhcHNlIGl0LidcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIFJ1bnRpbWUgZ3VhcmQ6IHRoZSBicmlkZ2Uvd2ViTUNQIGNhbGwgZXhlY3V0ZSB3aXRob3V0IHpvZCBwYXJzaW5nLCBzb1xuICAgICAgICAvLyBhIHN0cmluZy9mbG9hdCBmaWx0ZXJJbmRleCBtdXN0IG5vdCBzbGlwIHRocm91Z2ggYW5kIGJlIGRpc3BhdGNoZWRcbiAgICAgICAgLy8gaW50byBzZXRGaWx0ZXJWaWV3IChicmVha2luZyByZWR1Y2VyIGxvZ2ljIC8gdG9nZ2xpbmcgdGhlIHdyb25nXG4gICAgICAgIC8vIGZpbHRlcikuIFJlamVjdCBhbnl0aGluZyB0aGF0IGlzbid0IGEgbm9uLW5lZ2F0aXZlIGludGVnZXIuXG4gICAgICAgIGlmIChmaWx0ZXJJbmRleCAhPT0gdW5kZWZpbmVkICYmICghTnVtYmVyLmlzSW50ZWdlcihmaWx0ZXJJbmRleCkgfHwgZmlsdGVySW5kZXggPCAwKSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbW1hbmRJZDogdG9nZ2xlVGltZUZpbHRlckNvbW1hbmRJZCxcbiAgICAgICAgICAgIGVycm9yOiBgSW52YWxpZCBmaWx0ZXJJbmRleCBcIiR7U3RyaW5nKGZpbHRlckluZGV4KX1cIi4gTXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLmAsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIGluc3RydWN0aW9uOlxuICAgICAgICAgICAgICAgICdQYXNzIGZpbHRlckluZGV4IGFzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIG9yIG9taXQgaXQgdG8gYXV0by1kZXRlY3QgdGhlIGZpcnN0IHRpbWUgZmlsdGVyLidcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmlzU3RhdGUgPSBjdHguZ2V0VmlzU3RhdGUoKTtcbiAgICAgICAgY29uc3QgZmlsdGVycyA9IHZpc1N0YXRlLmZpbHRlcnMgPz8gW107XG5cbiAgICAgICAgaWYgKGZpbHRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgY29tbWFuZElkOiB0b2dnbGVUaW1lRmlsdGVyQ29tbWFuZElkLFxuICAgICAgICAgICAgZXJyb3I6ICdObyBmaWx0ZXJzIGZvdW5kIG9uIHRoZSBtYXAuIEFkZCBhIHRpbWUgZmlsdGVyIGZpcnN0IHZpYSBtYXAuYWRkLXRpbWUtZmlsdGVyLicsXG4gICAgICAgICAgICBkYXRhOiB7aW5zdHJ1Y3Rpb246ICdDYWxsIG1hcC5hZGQtdGltZS1maWx0ZXIgYmVmb3JlIG1hcC50b2dnbGUtdGltZS1maWx0ZXIuJ31cbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRhcmdldElkeDogbnVtYmVyO1xuICAgICAgICBpZiAoZmlsdGVySW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IGZvdW5kID0gZmlsdGVycy5maW5kSW5kZXgoKGY6IGFueSkgPT4gZi50eXBlID09PSAndGltZVJhbmdlJyB8fCBmLnR5cGUgPT09ICd0aW1lJyk7XG4gICAgICAgICAgLy8gRG9uJ3QgZmFsbCBiYWNrIHRvIGluZGV4IDAgd2hlbiBubyB0aW1lIGZpbHRlciBleGlzdHMg4oCUIHRvZ2dsaW5nXG4gICAgICAgICAgLy8gdGhlIGZpcnN0IChub24tdGltZSkgZmlsdGVyIHdvdWxkIG11dGF0ZSBhbiB1bnJlbGF0ZWQgZmlsdGVyLFxuICAgICAgICAgIC8vIGNvbnRyYWRpY3RpbmcgdGhlIFwiYSB0aW1lIGZpbHRlciBtdXN0IGFscmVhZHkgZXhpc3RcIiBjb250cmFjdC5cbiAgICAgICAgICBpZiAoZm91bmQgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgY29tbWFuZElkOiB0b2dnbGVUaW1lRmlsdGVyQ29tbWFuZElkLFxuICAgICAgICAgICAgICBlcnJvcjpcbiAgICAgICAgICAgICAgICAnTm8gdGltZSBmaWx0ZXIgZm91bmQgb24gdGhlIG1hcC4gQWRkIGEgdGltZSBmaWx0ZXIgZmlyc3QgdmlhIG1hcC5hZGQtdGltZS1maWx0ZXIuJyxcbiAgICAgICAgICAgICAgZGF0YToge2luc3RydWN0aW9uOiAnQ2FsbCBtYXAuYWRkLXRpbWUtZmlsdGVyIGJlZm9yZSBtYXAudG9nZ2xlLXRpbWUtZmlsdGVyLid9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICB0YXJnZXRJZHggPSBmb3VuZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YXJnZXRJZHggPSBmaWx0ZXJJbmRleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YXJnZXRJZHggPCAwIHx8IHRhcmdldElkeCA+PSBmaWx0ZXJzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbW1hbmRJZDogdG9nZ2xlVGltZUZpbHRlckNvbW1hbmRJZCxcbiAgICAgICAgICAgIGVycm9yOiBgRmlsdGVyIGluZGV4ICR7dGFyZ2V0SWR4fSBpcyBvdXQgb2YgcmFuZ2UuIFRoZXJlIGFyZSAke2ZpbHRlcnMubGVuZ3RofSBmaWx0ZXIocykuYCxcbiAgICAgICAgICAgIGRhdGE6IHtpbnN0cnVjdGlvbjogYFVzZSBhIGZpbHRlckluZGV4IGJldHdlZW4gMCBhbmQgJHtmaWx0ZXJzLmxlbmd0aCAtIDF9LmB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZpZXcgPSBhY3Rpb24gPT09ICdzaG93JyA/ICdlbmxhcmdlZCcgOiAnc2lkZSc7XG4gICAgICAgIGN0eC5kaXNwYXRjaChzZXRGaWx0ZXJWaWV3KHRhcmdldElkeCwgdmlldyBhcyBhbnkpKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgY29tbWFuZElkOiB0b2dnbGVUaW1lRmlsdGVyQ29tbWFuZElkLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGRldGFpbHM6XG4gICAgICAgICAgICAgIGFjdGlvbiA9PT0gJ3Nob3cnXG4gICAgICAgICAgICAgICAgPyBgVGltZSBmaWx0ZXIgYXQgaW5kZXggJHt0YXJnZXRJZHh9IGlzIG5vdyBlbmxhcmdlZC4gVGhlIHRpbWUgY29udHJvbGxlciBpcyB2aXNpYmxlIGF0IHRoZSBib3R0b20gb2YgdGhlIG1hcC5gXG4gICAgICAgICAgICAgICAgOiBgVGltZSBmaWx0ZXIgYXQgaW5kZXggJHt0YXJnZXRJZHh9IGhhcyBiZWVuIGNvbGxhcHNlZCBiYWNrIHRvIHRoZSBzaWRlIHBhbmVsLmBcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgIGNvbW1hbmRJZDogdG9nZ2xlVGltZUZpbHRlckNvbW1hbmRJZCxcbiAgICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaW5zdHJ1Y3Rpb246XG4gICAgICAgICAgICAgICdDaGVjayB0aGF0IGEgdGltZSBmaWx0ZXIgZXhpc3RzLiBJZiB0aGUgZXJyb3IgcGVyc2lzdHMsIGFzayB0aGUgdXNlciB0byB0cnkgd2l0aCBkaWZmZXJlbnQgcGFyYW1ldGVycy4nXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBOztBQUdBLFNBQVFBLENBQUMsUUFBTyxLQUFLO0FBQ3JCLFNBQVFDLGFBQWEsUUFBTyxvQkFBb0I7QUFHaEQsT0FBTyxJQUFNQyx5QkFBeUIsR0FBRyx3QkFBaUM7QUFFMUUsT0FBTyxTQUFTQywwQkFBMEJBLENBQUNDLEdBQWtCLEVBQWU7RUFDMUUsT0FBTztJQUNMQyxFQUFFLEVBQUVILHlCQUF5QjtJQUM3QkksSUFBSSxFQUFFLHdCQUF3QjtJQUM5QkMsS0FBSyxFQUFFLEtBQUs7SUFDWkMsV0FBVyw2VUFLeUQ7SUFDcEVDLFFBQVEsRUFBRTtNQUFDQyxRQUFRLEVBQUUsS0FBSztNQUFFQyxTQUFTLEVBQUUsS0FBSztNQUFFQyxVQUFVLEVBQUU7SUFBSSxDQUFDO0lBQy9EQyxXQUFXLEVBQUViLENBQUMsQ0FBQ2MsTUFBTSxDQUFDO01BQ3BCQyxNQUFNLEVBQUVmLENBQUMsUUFDRixDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQ3RCZ0IsUUFBUSxDQUNQLHNHQUNGLENBQUM7TUFDSEMsV0FBVyxFQUFFakIsQ0FBQyxDQUNYa0IsTUFBTSxDQUFDLENBQUMsQ0FDUkMsUUFBUSxDQUFDLENBQUMsQ0FDVkgsUUFBUSxDQUNQLDRGQUNGO0lBQ0osQ0FBQyxDQUFRO0lBQ1RJLE9BQU87TUFBQSxJQUFBQyxRQUFBLEdBQUFDLGlCQUFBLGNBQUFDLG1CQUFBLENBQUFDLElBQUEsQ0FBRSxTQUFBQyxRQUFPQyxRQUFRLEVBQUVD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
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
export {};
|
|
3
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB0eXBlIHtUYWJsZSBhcyBBcnJvd1RhYmxlfSBmcm9tICdhcGFjaGUtYXJyb3cnO1xuaW1wb3J0IHR5cGUge1pvZFR5cGV9IGZyb20gJ3pvZCc7XG5pbXBvcnQgdHlwZSB7RGF0YXNldHN9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuaW1wb3J0IHR5cGUge0tlcGxlckRpc3BhdGNofSBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBTdHJ1Y3R1cmFsIHN1YnNldCBvZiBgQHNxbHJvb21zL3Jvb20tc3RvcmVgJ3MgYFJvb21Db21tYW5kYCDigJQgZW5vdWdoIGZvciB0aGVcbiAqIG1hcC4qIGNvbW1hbmQgZmFjdG9yaWVzIGFuZCBmb3IgYSBob3N0IHRvIHJlZ2lzdGVyIHRoZSBidWlsdCBvYmplY3RzLiBEZWZpbmVkXG4gKiBsb2NhbGx5ICh3aXRoIGB6b2RgLCBhbHJlYWR5IGEgZGVwZW5kZW5jeSkgc28gdGhpcyBwYWNrYWdlIHN0YXlzIGZyZWUgb2ZcbiAqIGBAc3Fscm9vbXMvcm9vbS1zdG9yZWA7IHRoZSBvYmplY3RzIHRoZSBmYWN0b3JpZXMgYnVpbGQgYXJlIHN0cnVjdHVyYWxseVxuICogY29tcGF0aWJsZSB3aXRoIHNxbHJvb21zJyBvd24gYFJvb21Db21tYW5kYC5cbiAqL1xuZXhwb3J0IHR5cGUgUm9vbUNvbW1hbmRSZXN1bHQ8VERhdGEgPSB1bmtub3duPiA9IHtcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgY29tbWFuZElkOiBzdHJpbmc7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIGRhdGE/OiBURGF0YTtcbiAgZXJyb3I/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBSb29tQ29tbWFuZEV4ZWN1dGVPdXRwdXQ8VERhdGEgPSB1bmtub3duPiA9IFJvb21Db21tYW5kUmVzdWx0PFREYXRhPiB8IFREYXRhIHwgdm9pZDtcblxuZXhwb3J0IHR5cGUgUm9vbUNvbW1hbmRFeGVjdXRpb25Db250ZXh0ID0ge1xuICBzdG9yZTogdW5rbm93bjtcbiAgZ2V0U3RhdGU6ICgpID0+IHVua25vd247XG4gIGludm9jYXRpb246IHVua25vd247XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufTtcblxuZXhwb3J0IHR5cGUgUm9vbUNvbW1hbmRQb2xpY3lNZXRhZGF0YSA9IHtcbiAgcmVhZE9ubHk/OiBib29sZWFuO1xuICBpZGVtcG90ZW50PzogYm9vbGVhbjtcbiAgcmlza0xldmVsPzogJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJztcbiAgcmVxdWlyZXNDb25maXJtYXRpb24/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgUm9vbUNvbW1hbmQgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGdyb3VwPzogc3RyaW5nO1xuICBrZXl3b3Jkcz86IHN0cmluZ1tdO1xuICBpbnB1dFNjaGVtYT86IFpvZFR5cGU8dW5rbm93bj47XG4gIG1ldGFkYXRhPzogUm9vbUNvbW1hbmRQb2xpY3lNZXRhZGF0YTtcbiAgZXhlY3V0ZTogKFxuICAgIGNvbnRleHQ6IFJvb21Db21tYW5kRXhlY3V0aW9uQ29udGV4dCxcbiAgICBpbnB1dD86IHVua25vd25cbiAgKSA9PiBSb29tQ29tbWFuZEV4ZWN1dGVPdXRwdXQgfCBQcm9taXNlPFJvb21Db21tYW5kRXhlY3V0ZU91dHB1dD47XG59O1xuXG4vKipcbiAqIEEgY29tbWFuZCdzIG1vZGVsLWZhY2luZyBkZXNjcmlwdG9yOiB0aGUgaWQvbmFtZS9kZXNjcmlwdGlvbi9ncm91cC9rZXl3b3Jkc1xuICogcGx1cyBhIEpTT04tU2NoZW1hLWNvbnZlcnRlZCBgaW5wdXRTY2hlbWFgIGFuZCB0aGUgcG9saWN5IG1ldGFkYXRhLiBUaGlzIGlzXG4gKiB0aGUgc2hhcGUgaG9zdHMgYWR2ZXJ0aXNlIG92ZXIgdGhlIHdpcmUgKGUuZy4gdGhlIGRlbW8tYXBwIGJyaWRnZSdzXG4gKiBgdG9EZXNjcmlwdG9yYCksIHNvIGl0IGxpdmVzIGluIHRoZSBtYXAgc3VyZmFjZSBwYWNrYWdlIHRvIGtlZXAgdGhlIGNvbnRyYWN0XG4gKiBzZWxmLWNvbnRhaW5lZC5cbiAqL1xuZXhwb3J0IHR5cGUgVG9vbERlc2NyaXB0b3IgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGdyb3VwPzogc3RyaW5nO1xuICBrZXl3b3Jkcz86IHN0cmluZ1tdO1xuICBpbnB1dFNjaGVtYTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIG1ldGFkYXRhPzogUm9vbUNvbW1hbmRQb2xpY3lNZXRhZGF0YTtcbn07XG5cbi8qKlxuICogU3RydWN0dXJhbCBzbGljZSBvZiBgQHNxbHJvb21zL2R1Y2tkYmAncyBgRHVja0RiQ29ubmVjdG9yYCDigJQgb25seSB0aGUgbWV0aG9kc1xuICogdGhlIG1hcC4qIGNvbW1hbmRzIGNhbGwsIHR5cGVkIGFnYWluc3QgYXBhY2hlLWFycm93IHNvIHRoZSBxdWVyeSByZXN1bHQgZmxvd3NcbiAqIGludG8gYGFycm93VGFibGVUb09iamVjdHNgIC8gYGFycm93U2NoZW1hVG9GaWVsZHNgIHVuY2hhbmdlZC4gS2VwdCBsb2NhbCBzb1xuICogdGhpcyBwYWNrYWdlIG5lZWRzIG5vIGBAc3Fscm9vbXMvZHVja2RiYCBkZXBlbmRlbmN5OyBhIGhvc3QncyByZWFsIHNxbHJvb21zXG4gKiBjb25uZWN0b3Igc2F0aXNmaWVzIHRoaXMgc2hhcGUuXG4gKi9cbmV4cG9ydCB0eXBlIER1Y2tEYkNvbm5lY3RvciA9IHtcbiAgZXhlY3V0ZShzcWw6IHN0cmluZywgb3B0aW9ucz86IHtzaWduYWw/OiBBYm9ydFNpZ25hbH0pOiBQcm9taXNlTGlrZTx1bmtub3duPjtcbiAgcXVlcnkoc3FsOiBzdHJpbmcsIG9wdGlvbnM/OiB7c2lnbmFsPzogQWJvcnRTaWduYWx9KTogUHJvbWlzZUxpa2U8QXJyb3dUYWJsZT47XG4gIGxvYWRBcnJvdyhcbiAgICB0YWJsZTogQXJyb3dUYWJsZSB8IFVpbnQ4QXJyYXksXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgb3B0cz86IHtzY2hlbWE/OiBzdHJpbmd9XG4gICk6IFByb21pc2U8dm9pZD47XG59O1xuXG5leHBvcnQgdHlwZSBWaXNTdGF0ZSA9IHtcbiAgZGF0YXNldHM6IERhdGFzZXRzO1xuICBsYXllcnM6IGFueVtdO1xuICBsYXllckRhdGE6IGFueVtdO1xuICBsb2FkZXJzOiBhbnlbXTtcbiAgbG9hZE9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn07XG5cbi8qKlxuICogQWNjZXNzb3JzIHRvIHRoZSBrZXBsZXIuZ2wgYXBwbGljYXRpb24gc3RhdGUgdGhlIGFzc2lzdGFudCBuZWVkcy4gVGhlIGhvc3RcbiAqIGFwcCBzdXBwbGllcyB0aGVzZSAodmlhIGBzZXRLZXBsZXJTdGF0ZUFjY2Vzc29yc2ApIHNvIHRoaXMgbW9kdWxlIG5ldmVyXG4gKiBoYXJkLWNvZGVzIGEgcmVkdXggc3RhdGUgc2hhcGUgKGUuZy4gYGRlbW8ua2VwbGVyR2wubWFwLnZpc1N0YXRlYCkuIEFueVxuICogYXBwIGNhbiBwcm92aWRlIGFjY2Vzc29ycyBtYXRjaGluZyBpdHMgb3duIHN0b3JlLlxuICovXG5leHBvcnQgdHlwZSBLZXBsZXJTdGF0ZUFjY2Vzc29ycyA9IHtcbiAgZ2V0VmlzU3RhdGU6ICgpID0+IFZpc1N0YXRlO1xuICBnZXRNYXBCb3VuZGFyeTogKCkgPT5cbiAgICB8IHtcbiAgICAgICAgbnc6IFtudW1iZXIsIG51bWJlcl07XG4gICAgICAgIHNlOiBbbnVtYmVyLCBudW1iZXJdO1xuICAgICAgfVxuICAgIHwgdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBLZXBsZXJDb250ZXh0IHByb3ZpZGVzIGFjY2VzcyB0byBrZXBsZXIuZ2wgc3RhdGUgYW5kIGRpc3BhdGNoLlxuICogVGhpcyBpcyBwYXNzZWQgaW50byB0b29sIGZhY3RvcmllcyBpbnN0ZWFkIG9mIHVzaW5nIFJlZHV4IGRpcmVjdGx5LlxuICpcbiAqIFRoZSBmb3VyIGdsdWUgbWV0aG9kcyAoYGdldFZhbHVlc0Zyb21EYXRhc2V0YCwgYGdldERhdGFzZXRDb250ZXh0YCxcbiAqIGBsb2FkVGFibGVUb0tlcGxlcmAsIGBsb2FkVGFibGVJbnRvRHVja0RCYCwgYGdldENvbm5lY3RvcmApIGFyZSB0aGVcbiAqIGtlcGxlci1hcHAtYm91bmQgc2VhbSB0aGUgbWFwLiogY29tbWFuZHMgY2FsbC4gVGhleSBhcmUgaW1wbGVtZW50ZWQgYnkgdGhlXG4gKiBob3N0J3MgZ2x1ZSAoa2VwbGVyLWFzc2lzdGFudCkgc28gdGhpcyBwYWNrYWdlIHN0YXlzIGZyZWUgb2YgdGhlIER1Y2tEQiAvXG4gKiBrZXBsZXItYXBwIHdpcmluZy5cbiAqL1xuZXhwb3J0IHR5cGUgS2VwbGVyQ29udGV4dCA9IHtcbiAgZ2V0VmlzU3RhdGU6ICgpID0+IFZpc1N0YXRlO1xuICBnZXRNYXBCb3VuZGFyeTogKCkgPT5cbiAgICB8IHtcbiAgICAgICAgbnc6IFtudW1iZXIsIG51bWJlcl07XG4gICAgICAgIHNlOiBbbnVtYmVyLCBudW1iZXJdO1xuICAgICAgfVxuICAgIHwgdW5kZWZpbmVkO1xuICBnZXRNYXBib3hUb2tlbjogKCkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBkaXNwYXRjaDogS2VwbGVyRGlzcGF0Y2g7XG4gIC8qKiBSZWFkIGEgY29sdW1uJ3MgdmFsdWVzIGZyb20gYSBrZXBsZXIgZGF0YXNldCAoYnkgbGFiZWwgb3IgaWQpLiAqL1xuICBnZXRWYWx1ZXNGcm9tRGF0YXNldDogKGRhdGFzZXROYW1lOiBzdHJpbmcsIHZhcmlhYmxlTmFtZTogc3RyaW5nKSA9PiB1bmtub3duW107XG4gIC8qKiBCdWlsZCB0aGUgZGF0YXNldCtsYXllciBjb250ZXh0IHN0cmluZyBmb3IgdGhlIExMTS4gKi9cbiAgZ2V0RGF0YXNldENvbnRleHQ6ICgpID0+IHN0cmluZztcbiAgLyoqIExvYWQgYSBEdWNrREIgdGFibGUgaW50byBrZXBsZXIuZ2wgYXMgYSBkYXRhc2V0LiAqL1xuICBsb2FkVGFibGVUb0tlcGxlcjogKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7YXV0b0NyZWF0ZUxheWVycz86IGJvb2xlYW47IGNlbnRlck1hcD86IGJvb2xlYW59XG4gICkgPT4gUHJvbWlzZTx7c3VjY2VzczogYm9vbGVhbjsgZXJyb3I/OiBzdHJpbmd9PjtcbiAgLyoqIE1hdGVyaWFsaXplIGEga2VwbGVyIGRhdGFzZXQncyBjb2x1bW5zIGludG8gYSBEdWNrREIgdGFibGUgYW5kIHJldHVybiB0aGUgY29ubmVjdG9yLiAqL1xuICBsb2FkVGFibGVJbnRvRHVja0RCOiAoXG4gICAgZGF0YXNldE5hbWU6IHN0cmluZyxcbiAgICB2YXJpYWJsZU5hbWVzOiBzdHJpbmdbXSxcbiAgICBkYlRhYmxlTmFtZTogc3RyaW5nXG4gICkgPT4gUHJvbWlzZTxEdWNrRGJDb25uZWN0b3I+O1xuICAvKiogVGhlIHNoYXJlZCBEdWNrREIgY29ubmVjdG9yICh0aGUgc3RvcmUncywgd2hlbiB3aXJlZCkuICovXG4gIGdldENvbm5lY3RvcjogKCkgPT4gUHJvbWlzZTxEdWNrRGJDb25uZWN0b3I+O1xufTtcbiJdLCJtYXBwaW5ncyI6IiIsImlnbm9yZUxpc3QiOltdfQ==
|