@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,130 @@
|
|
|
1
|
+
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
2
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
3
|
+
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
4
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
5
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
6
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
7
|
+
// SPDX-License-Identifier: MIT
|
|
8
|
+
// Copyright contributors to the kepler.gl project
|
|
9
|
+
|
|
10
|
+
import { z } from 'zod';
|
|
11
|
+
import { layerVisualChannelConfigChange } from '@kepler.gl/actions';
|
|
12
|
+
export var updateLayerColorCommandId = 'map.update-layer-color';
|
|
13
|
+
export function getUpdateLayerColorCommand(ctx) {
|
|
14
|
+
return {
|
|
15
|
+
id: updateLayerColorCommandId,
|
|
16
|
+
name: 'Update layer color',
|
|
17
|
+
group: 'Map',
|
|
18
|
+
description: 'Update the color palette of an existing layer.',
|
|
19
|
+
metadata: {
|
|
20
|
+
readOnly: false,
|
|
21
|
+
riskLevel: 'low',
|
|
22
|
+
idempotent: true
|
|
23
|
+
},
|
|
24
|
+
inputSchema: z.object({
|
|
25
|
+
layerId: z.string(),
|
|
26
|
+
numberOfColors: z.number(),
|
|
27
|
+
customColors: z.array(z.string()).describe('An array of hex color values. Try to generate colors from user description like: van gogh starry night, water color etc.')
|
|
28
|
+
}),
|
|
29
|
+
execute: function () {
|
|
30
|
+
var _execute = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(_execCtx, input) {
|
|
31
|
+
var _ref, layerId, numberOfColors, customColors, HEX_COLOR_RE, visState, layers, layer, channel, newConfig, oldColorRange, newColorRange, newVisConfig;
|
|
32
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
33
|
+
while (1) switch (_context.prev = _context.next) {
|
|
34
|
+
case 0:
|
|
35
|
+
_ref = input !== null && input !== void 0 ? input : {}, layerId = _ref.layerId, numberOfColors = _ref.numberOfColors, customColors = _ref.customColors;
|
|
36
|
+
_context.prev = 1;
|
|
37
|
+
if (!(typeof layerId !== 'string' || layerId.length === 0)) {
|
|
38
|
+
_context.next = 4;
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
throw new Error('layerId is required and must be a string.');
|
|
42
|
+
case 4:
|
|
43
|
+
if (!(typeof numberOfColors !== 'number' || !Number.isInteger(numberOfColors) || numberOfColors <= 0)) {
|
|
44
|
+
_context.next = 6;
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
throw new Error('numberOfColors is required and must be a positive integer.');
|
|
48
|
+
case 6:
|
|
49
|
+
// The schema/description promise hex colors — a non-hex string would
|
|
50
|
+
// produce an invalid palette downstream, so reject it up front with an
|
|
51
|
+
// actionable error instead of a confusing render.
|
|
52
|
+
HEX_COLOR_RE = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;
|
|
53
|
+
if (!(!Array.isArray(customColors) || customColors.some(function (c) {
|
|
54
|
+
return typeof c !== 'string' || !HEX_COLOR_RE.test(c);
|
|
55
|
+
}))) {
|
|
56
|
+
_context.next = 9;
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
throw new Error('customColors is required and must be an array of hex color strings (e.g. #RRGGBB or #RRGGBBAA).');
|
|
60
|
+
case 9:
|
|
61
|
+
visState = ctx.getVisState();
|
|
62
|
+
layers = visState.layers;
|
|
63
|
+
layer = layers.find(function (l) {
|
|
64
|
+
return l.id === layerId;
|
|
65
|
+
});
|
|
66
|
+
if (layer) {
|
|
67
|
+
_context.next = 14;
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
throw new Error("Layer with id ".concat(layerId, " not found"));
|
|
71
|
+
case 14:
|
|
72
|
+
if (!(numberOfColors !== customColors.length)) {
|
|
73
|
+
_context.next = 16;
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
throw new Error("customColors array must contain exactly ".concat(numberOfColors, " colors"));
|
|
77
|
+
case 16:
|
|
78
|
+
channel = 'color';
|
|
79
|
+
newConfig = {};
|
|
80
|
+
oldColorRange = layer.config.visConfig.colorRange;
|
|
81
|
+
if (!(oldColorRange.colorMap && customColors.length !== oldColorRange.colorMap.length)) {
|
|
82
|
+
_context.next = 21;
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
throw new Error("Layer ".concat(layerId, " has ").concat(oldColorRange.colorMap.length, " classes (custom colorMap); provide exactly ").concat(oldColorRange.colorMap.length, " colors, got ").concat(customColors.length, "."));
|
|
86
|
+
case 21:
|
|
87
|
+
newColorRange = _objectSpread(_objectSpread({}, oldColorRange), {}, {
|
|
88
|
+
colors: customColors
|
|
89
|
+
}, oldColorRange.colorMap ? {
|
|
90
|
+
colorMap: _toConsumableArray(oldColorRange.colorMap.map(function (c, i) {
|
|
91
|
+
return [c[0], customColors[i]];
|
|
92
|
+
}))
|
|
93
|
+
} : {});
|
|
94
|
+
newVisConfig = {
|
|
95
|
+
colorRange: newColorRange,
|
|
96
|
+
strokeColorRange: newColorRange
|
|
97
|
+
};
|
|
98
|
+
ctx.dispatch(layerVisualChannelConfigChange(layer, newConfig, channel, newVisConfig));
|
|
99
|
+
return _context.abrupt("return", {
|
|
100
|
+
success: true,
|
|
101
|
+
commandId: updateLayerColorCommandId,
|
|
102
|
+
data: {
|
|
103
|
+
details: "Color updated to ".concat(customColors.join(', '), " for layer ").concat(layerId)
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
case 27:
|
|
107
|
+
_context.prev = 27;
|
|
108
|
+
_context.t0 = _context["catch"](1);
|
|
109
|
+
return _context.abrupt("return", {
|
|
110
|
+
success: false,
|
|
111
|
+
commandId: updateLayerColorCommandId,
|
|
112
|
+
error: _context.t0 instanceof Error ? _context.t0.message : 'Unknown error',
|
|
113
|
+
data: {
|
|
114
|
+
instruction: 'Try to fix the error. If the error persists, ask the user to try with different parameters.'
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
case 30:
|
|
118
|
+
case "end":
|
|
119
|
+
return _context.stop();
|
|
120
|
+
}
|
|
121
|
+
}, _callee, null, [[1, 27]]);
|
|
122
|
+
}));
|
|
123
|
+
function execute(_x, _x2) {
|
|
124
|
+
return _execute.apply(this, arguments);
|
|
125
|
+
}
|
|
126
|
+
return execute;
|
|
127
|
+
}()
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ6IiwibGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlIiwidXBkYXRlTGF5ZXJDb2xvckNvbW1hbmRJZCIsImdldFVwZGF0ZUxheWVyQ29sb3JDb21tYW5kIiwiY3R4IiwiaWQiLCJuYW1lIiwiZ3JvdXAiLCJkZXNjcmlwdGlvbiIsIm1ldGFkYXRhIiwicmVhZE9ubHkiLCJyaXNrTGV2ZWwiLCJpZGVtcG90ZW50IiwiaW5wdXRTY2hlbWEiLCJvYmplY3QiLCJsYXllcklkIiwic3RyaW5nIiwibnVtYmVyT2ZDb2xvcnMiLCJudW1iZXIiLCJjdXN0b21Db2xvcnMiLCJhcnJheSIsImRlc2NyaWJlIiwiZXhlY3V0ZSIsIl9leGVjdXRlIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJfZXhlY0N0eCIsImlucHV0IiwiX3JlZiIsIkhFWF9DT0xPUl9SRSIsInZpc1N0YXRlIiwibGF5ZXJzIiwibGF5ZXIiLCJjaGFubmVsIiwibmV3Q29uZmlnIiwib2xkQ29sb3JSYW5nZSIsIm5ld0NvbG9yUmFuZ2UiLCJuZXdWaXNDb25maWciLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwibGVuZ3RoIiwiRXJyb3IiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJBcnJheSIsImlzQXJyYXkiLCJzb21lIiwiYyIsInRlc3QiLCJnZXRWaXNTdGF0ZSIsImZpbmQiLCJsIiwiY29uY2F0IiwiY29uZmlnIiwidmlzQ29uZmlnIiwiY29sb3JSYW5nZSIsImNvbG9yTWFwIiwiX29iamVjdFNwcmVhZCIsImNvbG9ycyIsIl90b0NvbnN1bWFibGVBcnJheSIsIm1hcCIsImkiLCJzdHJva2VDb2xvclJhbmdlIiwiZGlzcGF0Y2giLCJhYnJ1cHQiLCJzdWNjZXNzIiwiY29tbWFuZElkIiwiZGF0YSIsImRldGFpbHMiLCJqb2luIiwidDAiLCJlcnJvciIsIm1lc3NhZ2UiLCJpbnN0cnVjdGlvbiIsInN0b3AiLCJfeCIsIl94MiIsImFwcGx5IiwiYXJndW1lbnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2xheWVyLXN0eWxlLWNvbW1hbmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHR5cGUge1Jvb21Db21tYW5kfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7en0gZnJvbSAnem9kJztcbmltcG9ydCB7bGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlfSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHR5cGUge0tlcGxlckNvbnRleHR9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJDb2xvckNvbW1hbmRJZCA9ICdtYXAudXBkYXRlLWxheWVyLWNvbG9yJyBhcyBjb25zdDtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVwZGF0ZUxheWVyQ29sb3JDb21tYW5kKGN0eDogS2VwbGVyQ29udGV4dCk6IFJvb21Db21tYW5kIHtcbiAgcmV0dXJuIHtcbiAgICBpZDogdXBkYXRlTGF5ZXJDb2xvckNvbW1hbmRJZCxcbiAgICBuYW1lOiAnVXBkYXRlIGxheWVyIGNvbG9yJyxcbiAgICBncm91cDogJ01hcCcsXG4gICAgZGVzY3JpcHRpb246ICdVcGRhdGUgdGhlIGNvbG9yIHBhbGV0dGUgb2YgYW4gZXhpc3RpbmcgbGF5ZXIuJyxcbiAgICBtZXRhZGF0YToge3JlYWRPbmx5OiBmYWxzZSwgcmlza0xldmVsOiAnbG93JywgaWRlbXBvdGVudDogdHJ1ZX0sXG4gICAgaW5wdXRTY2hlbWE6IHoub2JqZWN0KHtcbiAgICAgIGxheWVySWQ6IHouc3RyaW5nKCksXG4gICAgICBudW1iZXJPZkNvbG9yczogei5udW1iZXIoKSxcbiAgICAgIGN1c3RvbUNvbG9yczogelxuICAgICAgICAuYXJyYXkoei5zdHJpbmcoKSlcbiAgICAgICAgLmRlc2NyaWJlKFxuICAgICAgICAgICdBbiBhcnJheSBvZiBoZXggY29sb3IgdmFsdWVzLiBUcnkgdG8gZ2VuZXJhdGUgY29sb3JzIGZyb20gdXNlciBkZXNjcmlwdGlvbiBsaWtlOiB2YW4gZ29naCBzdGFycnkgbmlnaHQsIHdhdGVyIGNvbG9yIGV0Yy4nXG4gICAgICAgIClcbiAgICB9KSBhcyBhbnksXG4gICAgZXhlY3V0ZTogYXN5bmMgKF9leGVjQ3R4LCBpbnB1dCkgPT4ge1xuICAgICAgY29uc3Qge2xheWVySWQsIG51bWJlck9mQ29sb3JzLCBjdXN0b21Db2xvcnN9ID0gKGlucHV0ID8/IHt9KSBhcyB7XG4gICAgICAgIGxheWVySWQ6IHN0cmluZztcbiAgICAgICAgbnVtYmVyT2ZDb2xvcnM6IG51bWJlcjtcbiAgICAgICAgY3VzdG9tQ29sb3JzOiBzdHJpbmdbXTtcbiAgICAgIH07XG4gICAgICB0cnkge1xuICAgICAgICAvLyBSdW50aW1lIGd1YXJkczogdGhlIGJyaWRnZS93ZWJNQ1AgY2FsbCBleGVjdXRlIHdpdGhvdXQgem9kIHBhcnNpbmcsXG4gICAgICAgIC8vIHNvIG1pc3Npbmcvd3JvbmctdHlwZWQgaW5wdXRzIG11c3QgZmFpbCB3aXRoIGFjdGlvbmFibGUgZXJyb3JzXG4gICAgICAgIC8vIGluc3RlYWQgb2YgYSBUeXBlRXJyb3IgKGUuZy4gcmVhZGluZyBgLmxlbmd0aGAgb2YgdW5kZWZpbmVkKS5cbiAgICAgICAgaWYgKHR5cGVvZiBsYXllcklkICE9PSAnc3RyaW5nJyB8fCBsYXllcklkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbGF5ZXJJZCBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhIHN0cmluZy4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZW9mIG51bWJlck9mQ29sb3JzICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICFOdW1iZXIuaXNJbnRlZ2VyKG51bWJlck9mQ29sb3JzKSB8fFxuICAgICAgICAgIG51bWJlck9mQ29sb3JzIDw9IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdudW1iZXJPZkNvbG9ycyBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIuJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGhlIHNjaGVtYS9kZXNjcmlwdGlvbiBwcm9taXNlIGhleCBjb2xvcnMg4oCUIGEgbm9uLWhleCBzdHJpbmcgd291bGRcbiAgICAgICAgLy8gcHJvZHVjZSBhbiBpbnZhbGlkIHBhbGV0dGUgZG93bnN0cmVhbSwgc28gcmVqZWN0IGl0IHVwIGZyb250IHdpdGggYW5cbiAgICAgICAgLy8gYWN0aW9uYWJsZSBlcnJvciBpbnN0ZWFkIG9mIGEgY29uZnVzaW5nIHJlbmRlci5cbiAgICAgICAgY29uc3QgSEVYX0NPTE9SX1JFID0gL14jKFswLTlhLWZBLUZdezN9fFswLTlhLWZBLUZdezZ9fFswLTlhLWZBLUZdezh9KSQvO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIUFycmF5LmlzQXJyYXkoY3VzdG9tQ29sb3JzKSB8fFxuICAgICAgICAgIGN1c3RvbUNvbG9ycy5zb21lKGMgPT4gdHlwZW9mIGMgIT09ICdzdHJpbmcnIHx8ICFIRVhfQ09MT1JfUkUudGVzdChjKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ2N1c3RvbUNvbG9ycyBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhbiBhcnJheSBvZiBoZXggY29sb3Igc3RyaW5ncyAoZS5nLiAjUlJHR0JCIG9yICNSUkdHQkJBQSkuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2aXNTdGF0ZSA9IGN0eC5nZXRWaXNTdGF0ZSgpO1xuICAgICAgICBjb25zdCBsYXllcnMgPSB2aXNTdGF0ZS5sYXllcnM7XG4gICAgICAgIGNvbnN0IGxheWVyID0gbGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgICAgICAgaWYgKCFsYXllcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgd2l0aCBpZCAke2xheWVySWR9IG5vdCBmb3VuZGApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG51bWJlck9mQ29sb3JzICE9PSBjdXN0b21Db2xvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjdXN0b21Db2xvcnMgYXJyYXkgbXVzdCBjb250YWluIGV4YWN0bHkgJHtudW1iZXJPZkNvbG9yc30gY29sb3JzYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaGFubmVsID0gJ2NvbG9yJztcbiAgICAgICAgY29uc3QgbmV3Q29uZmlnID0ge307XG5cbiAgICAgICAgY29uc3Qgb2xkQ29sb3JSYW5nZSA9IGxheWVyLmNvbmZpZy52aXNDb25maWcuY29sb3JSYW5nZTtcbiAgICAgICAgaWYgKG9sZENvbG9yUmFuZ2UuY29sb3JNYXAgJiYgY3VzdG9tQ29sb3JzLmxlbmd0aCAhPT0gb2xkQ29sb3JSYW5nZS5jb2xvck1hcC5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgTGF5ZXIgJHtsYXllcklkfSBoYXMgJHtvbGRDb2xvclJhbmdlLmNvbG9yTWFwLmxlbmd0aH0gY2xhc3NlcyAoY3VzdG9tIGNvbG9yTWFwKTsgcHJvdmlkZSBleGFjdGx5ICR7b2xkQ29sb3JSYW5nZS5jb2xvck1hcC5sZW5ndGh9IGNvbG9ycywgZ290ICR7Y3VzdG9tQ29sb3JzLmxlbmd0aH0uYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3Q29sb3JSYW5nZSA9IHtcbiAgICAgICAgICAuLi5vbGRDb2xvclJhbmdlLFxuICAgICAgICAgIGNvbG9yczogY3VzdG9tQ29sb3JzLFxuICAgICAgICAgIC4uLihvbGRDb2xvclJhbmdlLmNvbG9yTWFwXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBjb2xvck1hcDogW1xuICAgICAgICAgICAgICAgICAgLi4ub2xkQ29sb3JSYW5nZS5jb2xvck1hcC5tYXAoKGM6IGFueSwgaTogbnVtYmVyKSA9PiBbY1swXSwgY3VzdG9tQ29sb3JzW2ldXSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge30pXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgbmV3VmlzQ29uZmlnID0ge1xuICAgICAgICAgIGNvbG9yUmFuZ2U6IG5ld0NvbG9yUmFuZ2UsXG4gICAgICAgICAgc3Ryb2tlQ29sb3JSYW5nZTogbmV3Q29sb3JSYW5nZVxuICAgICAgICB9O1xuXG4gICAgICAgIGN0eC5kaXNwYXRjaChsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UobGF5ZXIsIG5ld0NvbmZpZywgY2hhbm5lbCwgbmV3VmlzQ29uZmlnKSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgIGNvbW1hbmRJZDogdXBkYXRlTGF5ZXJDb2xvckNvbW1hbmRJZCxcbiAgICAgICAgICBkYXRhOiB7ZGV0YWlsczogYENvbG9yIHVwZGF0ZWQgdG8gJHtjdXN0b21Db2xvcnMuam9pbignLCAnKX0gZm9yIGxheWVyICR7bGF5ZXJJZH1gfVxuICAgICAgICB9O1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICBjb21tYW5kSWQ6IHVwZGF0ZUxheWVyQ29sb3JDb21tYW5kSWQsXG4gICAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGluc3RydWN0aW9uOlxuICAgICAgICAgICAgICAnVHJ5IHRvIGZpeCB0aGUgZXJyb3IuIElmIHRoZSBlcnJvciBwZXJzaXN0cywgYXNrIHRoZSB1c2VyIHRvIHRyeSB3aXRoIGRpZmZlcmVudCBwYXJhbWV0ZXJzLidcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBOztBQUdBLFNBQVFBLENBQUMsUUFBTyxLQUFLO0FBQ3JCLFNBQVFDLDhCQUE4QixRQUFPLG9CQUFvQjtBQUdqRSxPQUFPLElBQU1DLHlCQUF5QixHQUFHLHdCQUFpQztBQUUxRSxPQUFPLFNBQVNDLDBCQUEwQkEsQ0FBQ0MsR0FBa0IsRUFBZTtFQUMxRSxPQUFPO0lBQ0xDLEVBQUUsRUFBRUgseUJBQXlCO0lBQzdCSSxJQUFJLEVBQUUsb0JBQW9CO0lBQzFCQyxLQUFLLEVBQUUsS0FBSztJQUNaQyxXQUFXLEVBQUUsZ0RBQWdEO0lBQzdEQyxRQUFRLEVBQUU7TUFBQ0MsUUFBUSxFQUFFLEtBQUs7TUFBRUMsU0FBUyxFQUFFLEtBQUs7TUFBRUMsVUFBVSxFQUFFO0lBQUksQ0FBQztJQUMvREMsV0FBVyxFQUFFYixDQUFDLENBQUNjLE1BQU0sQ0FBQztNQUNwQkMsT0FBTyxFQUFFZixDQUFDLENBQUNnQixNQUFNLENBQUMsQ0FBQztNQUNuQkMsY0FBYyxFQUFFakIsQ0FBQyxDQUFDa0IsTUFBTSxDQUFDLENBQUM7TUFDMUJDLFlBQVksRUFBRW5CLENBQUMsQ0FDWm9CLEtBQUssQ0FBQ3BCLENBQUMsQ0FBQ2dCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FDakJLLFFBQVEsQ0FDUCwwSEFDRjtJQUNKLENBQUMsQ0FBUTtJQUNUQyxPQUFPO01BQUEsSUFBQUMsUUFBQSxHQUFBQyxpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQUUsU0FBQUMsUUFBT0MsUUFBUSxFQUFFQyxLQUFLO1FBQUEsSUFBQUMsSUFBQSxFQUFBZixPQUFBLEVBQUFFLGNBQUEsRUFBQUUsWUFBQSxFQUFBWSxZQUFBLEVBQUFDLFFB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
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
2
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
3
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
4
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
5
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
6
|
+
// SPDX-License-Identifier: MIT
|
|
7
|
+
// Copyright contributors to the kepler.gl project
|
|
8
|
+
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
import { addDataToMap } from '@kepler.gl/actions';
|
|
11
|
+
import { readFileInBatches, processFileData } from '@kepler.gl/processors';
|
|
12
|
+
// MIME type → file extension for data URLs, so a `data:text/csv;base64,...`
|
|
13
|
+
// payload gets a sensible default dataset name (`data.csv`) instead of `data`.
|
|
14
|
+
var DATA_URL_EXTENSIONS = {
|
|
15
|
+
'text/csv': '.csv',
|
|
16
|
+
'application/csv': '.csv',
|
|
17
|
+
'application/json': '.json',
|
|
18
|
+
'application/geo+json': '.geojson',
|
|
19
|
+
'application/vnd.apache.arrow.file': '.arrow',
|
|
20
|
+
'application/vnd.apache.parquet': '.parquet',
|
|
21
|
+
'text/plain': '.txt'
|
|
22
|
+
};
|
|
23
|
+
function fileNameFromDataUrl(parsedUrl) {
|
|
24
|
+
var _DATA_URL_EXTENSIONS$;
|
|
25
|
+
// data:text/csv;base64,... → pathname is "text/csv;base64,"
|
|
26
|
+
var mime = parsedUrl.pathname.split(';')[0].toLowerCase();
|
|
27
|
+
return "data".concat((_DATA_URL_EXTENSIONS$ = DATA_URL_EXTENSIONS[mime]) !== null && _DATA_URL_EXTENSIONS$ !== void 0 ? _DATA_URL_EXTENSIONS$ : '');
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Same 32-bit string hash the processors use for dataset ids — applied to a
|
|
31
|
+
// data URL's content so the dataset id is content-derived (unique per payload)
|
|
32
|
+
// without storing the whole (potentially large) data URL in the metadata.
|
|
33
|
+
function hashString(str) {
|
|
34
|
+
var hash = 0;
|
|
35
|
+
for (var i = 0; i < str.length; i++) {
|
|
36
|
+
// eslint-disable-next-line no-bitwise
|
|
37
|
+
hash = (hash << 5) - hash + str.charCodeAt(i);
|
|
38
|
+
// eslint-disable-next-line no-bitwise
|
|
39
|
+
hash |= 0;
|
|
40
|
+
}
|
|
41
|
+
return hash.toString(36);
|
|
42
|
+
}
|
|
43
|
+
export var loadDataCommandId = 'map.load-data';
|
|
44
|
+
export function getLoadDataCommand(ctx) {
|
|
45
|
+
return {
|
|
46
|
+
id: loadDataCommandId,
|
|
47
|
+
name: 'Load data from URL',
|
|
48
|
+
group: 'Map',
|
|
49
|
+
description: 'Load a dataset from a URL into kepler.gl. The dataset is named after the URL filename, ' + 'or after `datasetName` when provided. Does NOT create a layer — call map.add-layer to visualize. ' + 'Do NOT create a duplicate dataset (e.g. via map.create-table) just to rename it; ' + 'name it here with `datasetName` instead, or use the URL-filename dataset as-is. ' + 'LOCAL FILES: a local file must be served over http(s) — the browser cannot fetch ' + "`file://` paths. To load a file you have on disk: (1) copy it into the demo app's " + 'served directory (e.g. `examples/demo-app/dist/`) and pass `/filename.csv`, or ' + '(2) serve it with a CORS-enabled local server (`npx serve --cors -l 8000` in the ' + "file's folder) and pass `http://localhost:8000/filename.csv`. " + 'EMBEDDED CONTENT: if you have the file content but cannot serve it (e.g. a remote ' + 'browser context), pass it as a data URL — `data:text/csv;base64,<base64 content>` ' + '(encode with `base64 -i file.csv`). Works for small files (up to ~2MB). ' + 'LARGE DATASETS: for files over a few MB, prefer Parquet (.parquet) over GeoJSON/CSV — ' + 'it loads much faster and is less likely to time out. Convert GeoJSON to GeoParquet ' + 'with geopandas (`gdf.to_parquet("data.parquet")`); kepler reads GeoParquet geometry (WKB) natively.',
|
|
50
|
+
metadata: {
|
|
51
|
+
readOnly: false,
|
|
52
|
+
riskLevel: 'medium',
|
|
53
|
+
requiresConfirmation: true
|
|
54
|
+
},
|
|
55
|
+
inputSchema: z.object({
|
|
56
|
+
url: z.string().describe('The URL to load data from. May be a full http(s) URL, a path served by the demo app ' + '(e.g. /data.geojson), or a data URL embedding small file content (data:text/csv;base64,...).'),
|
|
57
|
+
datasetName: z.string().optional().describe('Optional name for the loaded dataset. If omitted, the URL filename is used. ' + 'Use this instead of creating a duplicate dataset to rename it.')
|
|
58
|
+
}),
|
|
59
|
+
execute: function () {
|
|
60
|
+
var _execute = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(execCtx, input) {
|
|
61
|
+
var _ref, url, datasetName, _visState$loaders, _visState$loadOptions, _parsedData$, hasScheme, pageOrigin, parsedUrl, MAX_DATA_URL_LENGTH, visState, response, reason, blob, fileName, file, sourceUrl, batches, result, content, parsedData, _iterator, _step, d, _ref2, dataInfo;
|
|
62
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
63
|
+
while (1) switch (_context.prev = _context.next) {
|
|
64
|
+
case 0:
|
|
65
|
+
_ref = input !== null && input !== void 0 ? input : {}, url = _ref.url, datasetName = _ref.datasetName;
|
|
66
|
+
_context.prev = 1;
|
|
67
|
+
if (!(typeof url !== 'string' || url.trim() === '')) {
|
|
68
|
+
_context.next = 4;
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
throw new Error("Invalid URL: ".concat(url));
|
|
72
|
+
case 4:
|
|
73
|
+
// Resolve the URL before validating the scheme. A scheme-less string is
|
|
74
|
+
// a relative reference — resolve it against the page origin so files
|
|
75
|
+
// served by the demo app itself (same-origin) can be loaded with a bare
|
|
76
|
+
// path (e.g. `/sf_streets.geojson`). Browsers cannot fetch `file://`
|
|
77
|
+
// URLs, so a local file must be served over http(s) by the page's own
|
|
78
|
+
// server (or a CORS-enabled local server). `data:` URLs are allowed for
|
|
79
|
+
// small files — they embed the content directly, which is the one way
|
|
80
|
+
// an agent in a remote browser context can load a local file it cannot
|
|
81
|
+
// serve. `javascript:` and other schemes are rejected.
|
|
82
|
+
hasScheme = /^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(url);
|
|
83
|
+
pageOrigin = typeof window !== 'undefined' ? window.location.origin : undefined;
|
|
84
|
+
_context.prev = 6;
|
|
85
|
+
parsedUrl = hasScheme ? new URL(url) : new URL(url, pageOrigin);
|
|
86
|
+
_context.next = 13;
|
|
87
|
+
break;
|
|
88
|
+
case 10:
|
|
89
|
+
_context.prev = 10;
|
|
90
|
+
_context.t0 = _context["catch"](6);
|
|
91
|
+
throw new Error("Invalid URL: ".concat(url));
|
|
92
|
+
case 13:
|
|
93
|
+
if (!(parsedUrl.protocol === 'data:')) {
|
|
94
|
+
_context.next = 19;
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
// Cap the size so a huge embedded payload can't stall the load or
|
|
98
|
+
// bloat the tool input. For larger files the agent should serve the
|
|
99
|
+
// file over http(s) or convert to Parquet instead.
|
|
100
|
+
MAX_DATA_URL_LENGTH = 2 * 1024 * 1024; // ~2MB of base64
|
|
101
|
+
if (!(parsedUrl.href.length > MAX_DATA_URL_LENGTH)) {
|
|
102
|
+
_context.next = 17;
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
throw new Error("Data URL is too large (".concat(parsedUrl.href.length, " chars). ") + 'For files over a few MB, serve the file over http(s) or convert to Parquet.');
|
|
106
|
+
case 17:
|
|
107
|
+
_context.next = 21;
|
|
108
|
+
break;
|
|
109
|
+
case 19:
|
|
110
|
+
if (!(parsedUrl.protocol !== 'http:' && parsedUrl.protocol !== 'https:')) {
|
|
111
|
+
_context.next = 21;
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
throw new Error("Unsupported URL scheme \"".concat(parsedUrl.protocol, "\". Only http(s) URLs are supported."));
|
|
115
|
+
case 21:
|
|
116
|
+
visState = ctx.getVisState(); // Thread the caller's AbortSignal into the fetch so WebMCP/bridge
|
|
117
|
+
// cancellations stop long-running loads instead of letting them hang.
|
|
118
|
+
_context.next = 24;
|
|
119
|
+
return fetch(parsedUrl.href, {
|
|
120
|
+
signal: execCtx === null || execCtx === void 0 ? void 0 : execCtx.signal
|
|
121
|
+
});
|
|
122
|
+
case 24:
|
|
123
|
+
response = _context.sent;
|
|
124
|
+
if (response.ok) {
|
|
125
|
+
_context.next = 28;
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
// Include the numeric status — statusText is often empty (e.g. some
|
|
129
|
+
// CDNs / error pages), and the code alone makes failures diagnosable.
|
|
130
|
+
reason = response.statusText ? "HTTP ".concat(response.status, " ").concat(response.statusText) : "HTTP ".concat(response.status);
|
|
131
|
+
throw new Error("Failed to fetch data from ".concat(parsedUrl.href, ": ").concat(reason));
|
|
132
|
+
case 28:
|
|
133
|
+
_context.next = 30;
|
|
134
|
+
return response.blob();
|
|
135
|
+
case 30:
|
|
136
|
+
blob = _context.sent;
|
|
137
|
+
// Derive the filename from the URL pathname so query strings (e.g.
|
|
138
|
+
// `data.csv?x=1`) don't end up in the dataset name. A data URL has no
|
|
139
|
+
// pathname — fall back to a name derived from its MIME type so the
|
|
140
|
+
// dataset gets a sensible default label (e.g. `data.csv`).
|
|
141
|
+
fileName = parsedUrl.protocol === 'data:' ? fileNameFromDataUrl(parsedUrl) : parsedUrl.pathname.split('/').pop() || 'data'; // Carry the Blob's MIME type into the File so loader selection in
|
|
142
|
+
// readFileInBatches can use it — a URL with no extension (or a
|
|
143
|
+
// misleading one) would otherwise leave file.type empty and fail to
|
|
144
|
+
// pick the right loader.
|
|
145
|
+
file = new File([blob], fileName, {
|
|
146
|
+
type: blob.type || undefined
|
|
147
|
+
}); // Preserve the source URL so processors hash by URL (avoiding dataset-id
|
|
148
|
+
// collisions between same-named files) and can attach externally-hosted
|
|
149
|
+
// metadata — mirrors loadExternallyHostedDataset. Use the RESOLVED href
|
|
150
|
+
// so a relative path and its absolute form hash to the same dataset id.
|
|
151
|
+
// For a data URL the href IS the content (potentially large) — hash it
|
|
152
|
+
// down so the id stays content-derived (unique per payload) without
|
|
153
|
+
// storing the whole payload in the dataset metadata.
|
|
154
|
+
sourceUrl = parsedUrl.protocol === 'data:' ? "data:".concat(hashString(parsedUrl.href)) : parsedUrl.href;
|
|
155
|
+
file.keplerSourceUrl = sourceUrl;
|
|
156
|
+
_context.next = 37;
|
|
157
|
+
return readFileInBatches({
|
|
158
|
+
file: file,
|
|
159
|
+
fileCache: [],
|
|
160
|
+
loaders: (_visState$loaders = visState.loaders) !== null && _visState$loaders !== void 0 ? _visState$loaders : [],
|
|
161
|
+
loadOptions: (_visState$loadOptions = visState.loadOptions) !== null && _visState$loadOptions !== void 0 ? _visState$loadOptions : {}
|
|
162
|
+
});
|
|
163
|
+
case 37:
|
|
164
|
+
batches = _context.sent;
|
|
165
|
+
_context.next = 40;
|
|
166
|
+
return batches.next();
|
|
167
|
+
case 40:
|
|
168
|
+
result = _context.sent;
|
|
169
|
+
content = {
|
|
170
|
+
data: [],
|
|
171
|
+
fileName: ''
|
|
172
|
+
};
|
|
173
|
+
parsedData = [];
|
|
174
|
+
case 43:
|
|
175
|
+
if (result.done) {
|
|
176
|
+
_context.next = 55;
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
179
|
+
content = result.value;
|
|
180
|
+
_context.next = 47;
|
|
181
|
+
return batches.next();
|
|
182
|
+
case 47:
|
|
183
|
+
result = _context.sent;
|
|
184
|
+
if (!result.done) {
|
|
185
|
+
_context.next = 53;
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
_context.next = 51;
|
|
189
|
+
return processFileData({
|
|
190
|
+
content: content,
|
|
191
|
+
fileCache: []
|
|
192
|
+
});
|
|
193
|
+
case 51:
|
|
194
|
+
parsedData = _context.sent;
|
|
195
|
+
return _context.abrupt("break", 55);
|
|
196
|
+
case 53:
|
|
197
|
+
_context.next = 43;
|
|
198
|
+
break;
|
|
199
|
+
case 55:
|
|
200
|
+
if (!(parsedData.length === 0)) {
|
|
201
|
+
_context.next = 57;
|
|
202
|
+
break;
|
|
203
|
+
}
|
|
204
|
+
throw new Error("No data could be parsed from ".concat(url, "."));
|
|
205
|
+
case 57:
|
|
206
|
+
// Apply a caller-chosen dataset name (default: the URL filename) so the
|
|
207
|
+
// agent never has to create a duplicate dataset just to rename it.
|
|
208
|
+
_iterator = _createForOfIteratorHelper(parsedData);
|
|
209
|
+
try {
|
|
210
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
211
|
+
d = _step.value;
|
|
212
|
+
if (d !== null && d !== void 0 && d.info) {
|
|
213
|
+
d.info.label = (_ref2 = datasetName !== null && datasetName !== void 0 ? datasetName : d.info.label) !== null && _ref2 !== void 0 ? _ref2 : fileName;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
} catch (err) {
|
|
217
|
+
_iterator.e(err);
|
|
218
|
+
} finally {
|
|
219
|
+
_iterator.f();
|
|
220
|
+
}
|
|
221
|
+
ctx.dispatch(addDataToMap({
|
|
222
|
+
datasets: parsedData,
|
|
223
|
+
// Do NOT auto-create a layer — the assistant creates the layer
|
|
224
|
+
// explicitly via `map.add-layer` (with full styling control), so
|
|
225
|
+
// loading data never produces a duplicate default layer.
|
|
226
|
+
options: {
|
|
227
|
+
autoCreateLayers: false,
|
|
228
|
+
centerMap: true
|
|
229
|
+
}
|
|
230
|
+
}));
|
|
231
|
+
dataInfo = (_parsedData$ = parsedData[0]) === null || _parsedData$ === void 0 ? void 0 : _parsedData$.info;
|
|
232
|
+
return _context.abrupt("return", {
|
|
233
|
+
success: true,
|
|
234
|
+
commandId: loadDataCommandId,
|
|
235
|
+
data: {
|
|
236
|
+
details: "Successfully loaded data from ".concat(url),
|
|
237
|
+
dataInfo: dataInfo
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
case 64:
|
|
241
|
+
_context.prev = 64;
|
|
242
|
+
_context.t1 = _context["catch"](1);
|
|
243
|
+
return _context.abrupt("return", {
|
|
244
|
+
success: false,
|
|
245
|
+
commandId: loadDataCommandId,
|
|
246
|
+
error: _context.t1 instanceof Error ? _context.t1.message : 'Unknown error',
|
|
247
|
+
data: {
|
|
248
|
+
instruction: 'Try to fix the error. If the error persists, ask the user to try with a different URL or format.'
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
case 67:
|
|
252
|
+
case "end":
|
|
253
|
+
return _context.stop();
|
|
254
|
+
}
|
|
255
|
+
}, _callee, null, [[1, 64], [6, 10]]);
|
|
256
|
+
}));
|
|
257
|
+
function execute(_x, _x2) {
|
|
258
|
+
return _execute.apply(this, arguments);
|
|
259
|
+
}
|
|
260
|
+
return execute;
|
|
261
|
+
}()
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ6IiwiYWRkRGF0YVRvTWFwIiwicmVhZEZpbGVJbkJhdGNoZXMiLCJwcm9jZXNzRmlsZURhdGEiLCJEQVRBX1VSTF9FWFRFTlNJT05TIiwiZmlsZU5hbWVGcm9tRGF0YVVybCIsInBhcnNlZFVybCIsIl9EQVRBX1VSTF9FWFRFTlNJT05TJCIsIm1pbWUiLCJwYXRobmFtZSIsInNwbGl0IiwidG9Mb3dlckNhc2UiLCJjb25jYXQiLCJoYXNoU3RyaW5nIiwic3RyIiwiaGFzaCIsImkiLCJsZW5ndGgiLCJjaGFyQ29kZUF0IiwidG9TdHJpbmciLCJsb2FkRGF0YUNvbW1hbmRJZCIsImdldExvYWREYXRhQ29tbWFuZCIsImN0eCIsImlkIiwibmFtZSIsImdyb3VwIiwiZGVzY3JpcHRpb24iLCJtZXRhZGF0YSIsInJlYWRPbmx5Iiwicmlza0xldmVsIiwicmVxdWlyZXNDb25maXJtYXRpb24iLCJpbnB1dFNjaGVtYSIsIm9iamVjdCIsInVybCIsInN0cmluZyIsImRlc2NyaWJlIiwiZGF0YXNldE5hbWUiLCJvcHRpb25hbCIsImV4ZWN1dGUiLCJfZXhlY3V0ZSIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiZXhlY0N0eCIsImlucHV0IiwiX3JlZiIsIl92aXNTdGF0ZSRsb2FkZXJzIiwiX3Zpc1N0YXRlJGxvYWRPcHRpb25zIiwiX3BhcnNlZERhdGEkIiwiaGFzU2NoZW1lIiwicGFnZU9yaWdpbiIsIk1BWF9EQVRBX1VSTF9MRU5HVEgiLCJ2aXNTdGF0ZSIsInJlc3BvbnNlIiwicmVhc29uIiwiYmxvYiIsImZpbGVOYW1lIiwiZmlsZSIsInNvdXJjZVVybCIsImJhdGNoZXMiLCJyZXN1bHQiLCJjb250ZW50IiwicGFyc2VkRGF0YSIsIl9pdGVyYXRvciIsIl9zdGVwIiwiZCIsIl9yZWYyIiwiZGF0YUluZm8iLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwidHJpbSIsIkVycm9yIiwidGVzdCIsIndpbmRvdyIsImxvY2F0aW9uIiwib3JpZ2luIiwidW5kZWZpbmVkIiwiVVJMIiwidDAiLCJwcm90b2NvbCIsImhyZWYiLCJnZXRWaXNTdGF0ZSIsImZldGNoIiwic2lnbmFsIiwic2VudCIsIm9rIiwic3RhdHVzVGV4dCIsInN0YXR1cyIsInBvcCIsIkZpbGUiLCJ0eXBlIiwia2VwbGVyU291cmNlVXJsIiwiZmlsZUNhY2hlIiwibG9hZGVycyIsImxvYWRPcHRpb25zIiwiZGF0YSIsImRvbmUiLCJ2YWx1ZSIsImFicnVwdCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwicyIsIm4iLCJpbmZvIiwibGFiZWwiLCJlcnIiLCJlIiwiZiIsImRpc3BhdGNoIiwiZGF0YXNldHMiLCJvcHRpb25zIiwiYXV0b0NyZWF0ZUxheWVycyIsImNlbnRlck1hcCIsInN1Y2Nlc3MiLCJjb21tYW5kSWQiLCJkZXRhaWxzIiwidDEiLCJlcnJvciIsIm1lc3NhZ2UiLCJpbnN0cnVjdGlvbiIsInN0b3AiLCJfeCIsIl94MiIsImFwcGx5IiwiYXJndW1lbnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2xvYWQtZGF0YS1jb21tYW5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB0eXBlIHtSb29tQ29tbWFuZH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5pbXBvcnQge2FkZERhdGFUb01hcH0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcbmltcG9ydCB7cmVhZEZpbGVJbkJhdGNoZXMsIHByb2Nlc3NGaWxlRGF0YX0gZnJvbSAnQGtlcGxlci5nbC9wcm9jZXNzb3JzJztcbmltcG9ydCB0eXBlIHtQcm9jZXNzRmlsZURhdGFDb250ZW50fSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuaW1wb3J0IHR5cGUge0tlcGxlckNvbnRleHR9IGZyb20gJy4vdHlwZXMnO1xuXG4vLyBNSU1FIHR5cGUg4oaSIGZpbGUgZXh0ZW5zaW9uIGZvciBkYXRhIFVSTHMsIHNvIGEgYGRhdGE6dGV4dC9jc3Y7YmFzZTY0LC4uLmBcbi8vIHBheWxvYWQgZ2V0cyBhIHNlbnNpYmxlIGRlZmF1bHQgZGF0YXNldCBuYW1lIChgZGF0YS5jc3ZgKSBpbnN0ZWFkIG9mIGBkYXRhYC5cbmNvbnN0IERBVEFfVVJMX0VYVEVOU0lPTlM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICd0ZXh0L2Nzdic6ICcuY3N2JyxcbiAgJ2FwcGxpY2F0aW9uL2Nzdic6ICcuY3N2JyxcbiAgJ2FwcGxpY2F0aW9uL2pzb24nOiAnLmpzb24nLFxuICAnYXBwbGljYXRpb24vZ2VvK2pzb24nOiAnLmdlb2pzb24nLFxuICAnYXBwbGljYXRpb24vdm5kLmFwYWNoZS5hcnJvdy5maWxlJzogJy5hcnJvdycsXG4gICdhcHBsaWNhdGlvbi92bmQuYXBhY2hlLnBhcnF1ZXQnOiAnLnBhcnF1ZXQnLFxuICAndGV4dC9wbGFpbic6ICcudHh0J1xufTtcblxuZnVuY3Rpb24gZmlsZU5hbWVGcm9tRGF0YVVybChwYXJzZWRVcmw6IFVSTCk6IHN0cmluZyB7XG4gIC8vIGRhdGE6dGV4dC9jc3Y7YmFzZTY0LC4uLiDihpIgcGF0aG5hbWUgaXMgXCJ0ZXh0L2NzdjtiYXNlNjQsXCJcbiAgY29uc3QgbWltZSA9IHBhcnNlZFVybC5wYXRobmFtZS5zcGxpdCgnOycpWzBdLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBgZGF0YSR7REFUQV9VUkxfRVhURU5TSU9OU1ttaW1lXSA/PyAnJ31gO1xufVxuXG4vLyBTYW1lIDMyLWJpdCBzdHJpbmcgaGFzaCB0aGUgcHJvY2Vzc29ycyB1c2UgZm9yIGRhdGFzZXQgaWRzIOKAlCBhcHBsaWVkIHRvIGFcbi8vIGRhdGEgVVJMJ3MgY29udGVudCBzbyB0aGUgZGF0YXNldCBpZCBpcyBjb250ZW50LWRlcml2ZWQgKHVuaXF1ZSBwZXIgcGF5bG9hZClcbi8vIHdpdGhvdXQgc3RvcmluZyB0aGUgd2hvbGUgKHBvdGVudGlhbGx5IGxhcmdlKSBkYXRhIFVSTCBpbiB0aGUgbWV0YWRhdGEuXG5mdW5jdGlvbiBoYXNoU3RyaW5nKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IGhhc2ggPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgaGFzaCA9IChoYXNoIDw8IDUpIC0gaGFzaCArIHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgaGFzaCB8PSAwO1xuICB9XG4gIHJldHVybiBoYXNoLnRvU3RyaW5nKDM2KTtcbn1cblxuZXhwb3J0IGNvbnN0IGxvYWREYXRhQ29tbWFuZElkID0gJ21hcC5sb2FkLWRhdGEnIGFzIGNvbnN0O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9hZERhdGFDb21tYW5kKGN0eDogS2VwbGVyQ29udGV4dCk6IFJvb21Db21tYW5kIHtcbiAgcmV0dXJuIHtcbiAgICBpZDogbG9hZERhdGFDb21tYW5kSWQsXG4gICAgbmFtZTogJ0xvYWQgZGF0YSBmcm9tIFVSTCcsXG4gICAgZ3JvdXA6ICdNYXAnLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ0xvYWQgYSBkYXRhc2V0IGZyb20gYSBVUkwgaW50byBrZXBsZXIuZ2wuIFRoZSBkYXRhc2V0IGlzIG5hbWVkIGFmdGVyIHRoZSBVUkwgZmlsZW5hbWUsICcgK1xuICAgICAgJ29yIGFmdGVyIGBkYXRhc2V0TmFtZWAgd2hlbiBwcm92aWRlZC4gRG9lcyBOT1QgY3JlYXRlIGEgbGF5ZXIg4oCUIGNhbGwgbWFwLmFkZC1sYXllciB0byB2aXN1YWxpemUuICcgK1xuICAgICAgJ0RvIE5PVCBjcmVhdGUgYSBkdXBsaWNhdGUgZGF0YXNldCAoZS5nLiB2aWEgbWFwLmNyZWF0ZS10YWJsZSkganVzdCB0byByZW5hbWUgaXQ7ICcgK1xuICAgICAgJ25hbWUgaXQgaGVyZSB3aXRoIGBkYXRhc2V0TmFtZWAgaW5zdGVhZCwgb3IgdXNlIHRoZSBVUkwtZmlsZW5hbWUgZGF0YXNldCBhcy1pcy4gJyArXG4gICAgICAnTE9DQUwgRklMRVM6IGEgbG9jYWwgZmlsZSBtdXN0IGJlIHNlcnZlZCBvdmVyIGh0dHAocykg4oCUIHRoZSBicm93c2VyIGNhbm5vdCBmZXRjaCAnICtcbiAgICAgIFwiYGZpbGU6Ly9gIHBhdGhzLiBUbyBsb2FkIGEgZmlsZSB5b3UgaGF2ZSBvbiBkaXNrOiAoMSkgY29weSBpdCBpbnRvIHRoZSBkZW1vIGFwcCdzIFwiICtcbiAgICAgICdzZXJ2ZWQgZGlyZWN0b3J5IChlLmcuIGBleGFtcGxlcy9kZW1vLWFwcC9kaXN0L2ApIGFuZCBwYXNzIGAvZmlsZW5hbWUuY3N2YCwgb3IgJyArXG4gICAgICAnKDIpIHNlcnZlIGl0IHdpdGggYSBDT1JTLWVuYWJsZWQgbG9jYWwgc2VydmVyIChgbnB4IHNlcnZlIC0tY29ycyAtbCA4MDAwYCBpbiB0aGUgJyArXG4gICAgICBcImZpbGUncyBmb2xkZXIpIGFuZCBwYXNzIGBodHRwOi8vbG9jYWxob3N0OjgwMDAvZmlsZW5hbWUuY3N2YC4gXCIgK1xuICAgICAgJ0VNQkVEREVEIENPTlRFTlQ6IGlmIHlvdSBoYXZlIHRoZSBmaWxlIGNvbnRlbnQgYnV0IGNhbm5vdCBzZXJ2ZSBpdCAoZS5nLiBhIHJlbW90ZSAnICtcbiAgICAgICdicm93c2VyIGNvbnRleHQpLCBwYXNzIGl0IGFzIGEgZGF0YSBVUkwg4oCUIGBkYXRhOnRleHQvY3N2O2Jhc2U2NCw8YmFzZTY0IGNvbnRlbnQ+YCAnICtcbiAgICAgICcoZW5jb2RlIHdpdGggYGJhc2U2NCAtaSBmaWxlLmNzdmApLiBXb3JrcyBmb3Igc21hbGwgZmlsZXMgKHVwIHRvIH4yTUIpLiAnICtcbiAgICAgICdMQVJHRSBEQVRBU0VUUzogZm9yIGZpbGVzIG92ZXIgYSBmZXcgTUIsIHByZWZlciBQYXJxdWV0ICgucGFycXVldCkgb3ZlciBHZW9KU09OL0NTViDigJQgJyArXG4gICAgICAnaXQgbG9hZHMgbXVjaCBmYXN0ZXIgYW5kIGlzIGxlc3MgbGlrZWx5IHRvIHRpbWUgb3V0LiBDb252ZXJ0IEdlb0pTT04gdG8gR2VvUGFycXVldCAnICtcbiAgICAgICd3aXRoIGdlb3BhbmRhcyAoYGdkZi50b19wYXJxdWV0KFwiZGF0YS5wYXJxdWV0XCIpYCk7IGtlcGxlciByZWFkcyBHZW9QYXJxdWV0IGdlb21ldHJ5IChXS0IpIG5hdGl2ZWx5LicsXG4gICAgbWV0YWRhdGE6IHtyZWFkT25seTogZmFsc2UsIHJpc2tMZXZlbDogJ21lZGl1bScsIHJlcXVpcmVzQ29uZmlybWF0aW9uOiB0cnVlfSxcbiAgICBpbnB1dFNjaGVtYTogei5vYmplY3Qoe1xuICAgICAgdXJsOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAuZGVzY3JpYmUoXG4gICAgICAgICAgJ1RoZSBVUkwgdG8gbG9hZCBkYXRhIGZyb20uIE1heSBiZSBhIGZ1bGwgaHR0cChzKSBVUkwsIGEgcGF0aCBzZXJ2ZWQgYnkgdGhlIGRlbW8gYXBwICcgK1xuICAgICAgICAgICAgJyhlLmcuIC9kYXRhLmdlb2pzb24pLCBvciBhIGRhdGEgVVJMIGVtYmVkZGluZyBzbWFsbCBmaWxlIGNvbnRlbnQgKGRhdGE6dGV4dC9jc3Y7YmFzZTY0LC4uLikuJ1xuICAgICAgICApLFxuICAgICAgZGF0YXNldE5hbWU6IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZXNjcmliZShcbiAgICAgICAgICAnT3B0aW9uYWwgbmFtZSBmb3IgdGhlIGxvYWRlZCBkYXRhc2V0LiBJZiBvbWl0dGVkLCB0aGUgVVJMIGZpbGVuYW1lIGlzIHVzZWQuICcgK1xuICAgICAgICAgICAgJ1VzZSB0aGlzIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBkdXBsaWNhdGUgZGF0YXNldCB0byByZW5hbWUgaXQuJ1xuICAgICAgICApXG4gICAgfSkgYXMgYW55LFxuICAgIGV4ZWN1dGU6IGFzeW5jIChleGVjQ3R4LCBpbnB1dCkgPT4ge1xuICAgICAgY29uc3Qge3VybCwgZGF0YXNldE5hbWV9ID0gKGlucHV0ID8/IHt9KSBhcyB7dXJsOiBzdHJpbmc7IGRhdGFzZXROYW1lPzogc3RyaW5nfTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJyB8fCB1cmwudHJpbSgpID09PSAnJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBVUkw6ICR7dXJsfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVzb2x2ZSB0aGUgVVJMIGJlZm9yZSB2YWxpZGF0aW5nIHRoZSBzY2hlbWUuIEEgc2NoZW1lLWxlc3Mgc3RyaW5nIGlzXG4gICAgICAgIC8vIGEgcmVsYXRpdmUgcmVmZXJlbmNlIOKAlCByZXNvbHZlIGl0IGFnYWluc3QgdGhlIHBhZ2Ugb3JpZ2luIHNvIGZpbGVzXG4gICAgICAgIC8vIHNlcnZlZCBieSB0aGUgZGVtbyBhcHAgaXRzZWxmIChzYW1lLW9yaWdpbikgY2FuIGJlIGxvYWRlZCB3aXRoIGEgYmFyZVxuICAgICAgICAvLyBwYXRoIChlLmcuIGAvc2Zfc3RyZWV0cy5nZW9qc29uYCkuIEJyb3dzZXJzIGNhbm5vdCBmZXRjaCBgZmlsZTovL2BcbiAgICAgICAgLy8gVVJMcywgc28gYSBsb2NhbCBmaWxlIG11c3QgYmUgc2VydmVkIG92ZXIgaHR0cChzKSBieSB0aGUgcGFnZSdzIG93blxuICAgICAgICAvLyBzZXJ2ZXIgKG9yIGEgQ09SUy1lbmFibGVkIGxvY2FsIHNlcnZlcikuIGBkYXRhOmAgVVJMcyBhcmUgYWxsb3dlZCBmb3JcbiAgICAgICAgLy8gc21hbGwgZmlsZXMg4oCUIHRoZXkgZW1iZWQgdGhlIGNvbnRlbnQgZGlyZWN0bHksIHdoaWNoIGlzIHRoZSBvbmUgd2F5XG4gICAgICAgIC8vIGFuIGFnZW50IGluIGEgcmVtb3RlIGJyb3dzZXIgY29udGV4dCBjYW4gbG9hZCBhIGxvY2FsIGZpbGUgaXQgY2Fubm90XG4gICAgICAgIC8vIHNlcnZlLiBgamF2YXNjcmlwdDpgIGFuZCBvdGhlciBzY2hlbWVzIGFyZSByZWplY3RlZC5cbiAgICAgICAgY29uc3QgaGFzU2NoZW1lID0gL15bYS16QS1aXVthLXpBLVowLTkrLi1dKjovLnRlc3QodXJsKTtcbiAgICAgICAgY29uc3QgcGFnZU9yaWdpbiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LmxvY2F0aW9uLm9yaWdpbiA6IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHBhcnNlZFVybDogVVJMO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHBhcnNlZFVybCA9IGhhc1NjaGVtZSA/IG5ldyBVUkwodXJsKSA6IG5ldyBVUkwodXJsLCBwYWdlT3JpZ2luKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFVSTDogJHt1cmx9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCA9PT0gJ2RhdGE6Jykge1xuICAgICAgICAgIC8vIENhcCB0aGUgc2l6ZSBzbyBhIGh1Z2UgZW1iZWRkZWQgcGF5bG9hZCBjYW4ndCBzdGFsbCB0aGUgbG9hZCBvclxuICAgICAgICAgIC8vIGJsb2F0IHRoZSB0b29sIGlucHV0LiBGb3IgbGFyZ2VyIGZpbGVzIHRoZSBhZ2VudCBzaG91bGQgc2VydmUgdGhlXG4gICAgICAgICAgLy8gZmlsZSBvdmVyIGh0dHAocykgb3IgY29udmVydCB0byBQYXJxdWV0IGluc3RlYWQuXG4gICAgICAgICAgY29uc3QgTUFYX0RBVEFfVVJMX0xFTkdUSCA9IDIgKiAxMDI0ICogMTAyNDsgLy8gfjJNQiBvZiBiYXNlNjRcbiAgICAgICAgICBpZiAocGFyc2VkVXJsLmhyZWYubGVuZ3RoID4gTUFYX0RBVEFfVVJMX0xFTkdUSCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgRGF0YSBVUkwgaXMgdG9vIGxhcmdlICgke3BhcnNlZFVybC5ocmVmLmxlbmd0aH0gY2hhcnMpLiBgICtcbiAgICAgICAgICAgICAgICAnRm9yIGZpbGVzIG92ZXIgYSBmZXcgTUIsIHNlcnZlIHRoZSBmaWxlIG92ZXIgaHR0cChzKSBvciBjb252ZXJ0IHRvIFBhcnF1ZXQuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFyc2VkVXJsLnByb3RvY29sICE9PSAnaHR0cDonICYmIHBhcnNlZFVybC5wcm90b2NvbCAhPT0gJ2h0dHBzOicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgVW5zdXBwb3J0ZWQgVVJMIHNjaGVtZSBcIiR7cGFyc2VkVXJsLnByb3RvY29sfVwiLiBPbmx5IGh0dHAocykgVVJMcyBhcmUgc3VwcG9ydGVkLmBcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmlzU3RhdGUgPSBjdHguZ2V0VmlzU3RhdGUoKTtcbiAgICAgICAgLy8gVGhyZWFkIHRoZSBjYWxsZXIncyBBYm9ydFNpZ25hbCBpbnRvIHRoZSBmZXRjaCBzbyBXZWJNQ1AvYnJpZGdlXG4gICAgICAgIC8vIGNhbmNlbGxhdGlvbnMgc3RvcCBsb25nLXJ1bm5pbmcgbG9hZHMgaW5zdGVhZCBvZiBsZXR0aW5nIHRoZW0gaGFuZy5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChwYXJzZWRVcmwuaHJlZiwge3NpZ25hbDogZXhlY0N0eD8uc2lnbmFsfSk7XG4gICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAvLyBJbmNsdWRlIHRoZSBudW1lcmljIHN0YXR1cyDigJQgc3RhdHVzVGV4dCBpcyBvZnRlbiBlbXB0eSAoZS5nLiBzb21lXG4gICAgICAgICAgLy8gQ0ROcyAvIGVycm9yIHBhZ2VzKSwgYW5kIHRoZSBjb2RlIGFsb25lIG1ha2VzIGZhaWx1cmVzIGRpYWdub3NhYmxlLlxuICAgICAgICAgIGNvbnN0IHJlYXNvbiA9IHJlc3BvbnNlLnN0YXR1c1RleHRcbiAgICAgICAgICAgID8gYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gXG4gICAgICAgICAgICA6IGBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfWA7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggZGF0YSBmcm9tICR7cGFyc2VkVXJsLmhyZWZ9OiAke3JlYXNvbn1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCByZXNwb25zZS5ibG9iKCk7XG4gICAgICAgIC8vIERlcml2ZSB0aGUgZmlsZW5hbWUgZnJvbSB0aGUgVVJMIHBhdGhuYW1lIHNvIHF1ZXJ5IHN0cmluZ3MgKGUuZy5cbiAgICAgICAgLy8gYGRhdGEuY3N2P3g9MWApIGRvbid0IGVuZCB1cCBpbiB0aGUgZGF0YXNldCBuYW1lLiBBIGRhdGEgVVJMIGhhcyBub1xuICAgICAgICAvLyBwYXRobmFtZSDigJQgZmFsbCBiYWNrIHRvIGEgbmFtZSBkZXJpdmVkIGZyb20gaXRzIE1JTUUgdHlwZSBzbyB0aGVcbiAgICAgICAgLy8gZGF0YXNldCBnZXRzIGEgc2Vuc2libGUgZGVmYXVsdCBsYWJlbCAoZS5nLiBgZGF0YS5jc3ZgKS5cbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPVxuICAgICAgICAgIHBhcnNlZFVybC5wcm90b2NvbCA9PT0gJ2RhdGE6J1xuICAgICAgICAgICAgPyBmaWxlTmFtZUZyb21EYXRhVXJsKHBhcnNlZFVybClcbiAgICAgICAgICAgIDogcGFyc2VkVXJsLnBhdGhuYW1lLnNwbGl0KCcvJykucG9wKCkgfHwgJ2RhdGEnO1xuICAgICAgICAvLyBDYXJyeSB0aGUgQmxvYidzIE1JTUUgdHlwZSBpbnRvIHRoZSBGaWxlIHNvIGxvYWRlciBzZWxlY3Rpb24gaW5cbiAgICAgICAgLy8gcmVhZEZpbGVJbkJhdGNoZXMgY2FuIHVzZSBpdCDigJQgYSBVUkwgd2l0aCBubyBleHRlbnNpb24gKG9yIGFcbiAgICAgICAgLy8gbWlzbGVhZGluZyBvbmUpIHdvdWxkIG90aGVyd2lzZSBsZWF2ZSBmaWxlLnR5cGUgZW1wdHkgYW5kIGZhaWwgdG9cbiAgICAgICAgLy8gcGljayB0aGUgcmlnaHQgbG9hZGVyLlxuICAgICAgICBjb25zdCBmaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCBmaWxlTmFtZSwge3R5cGU6IGJsb2IudHlwZSB8fCB1bmRlZmluZWR9KTtcbiAgICAgICAgLy8gUHJlc2VydmUgdGhlIHNvdXJjZSBVUkwgc28gcHJvY2Vzc29ycyBoYXNoIGJ5IFVSTCAoYXZvaWRpbmcgZGF0YXNldC1pZFxuICAgICAgICAvLyBjb2xsaXNpb25zIGJldHdlZW4gc2FtZS1uYW1lZCBmaWxlcykgYW5kIGNhbiBhdHRhY2ggZXh0ZXJuYWxseS1ob3N0ZWRcbiAgICAgICAgLy8gbWV0YWRhdGEg4oCUIG1pcnJvcnMgbG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0LiBVc2UgdGhlIFJFU09MVkVEIGhyZWZcbiAgICAgICAgLy8gc28gYSByZWxhdGl2ZSBwYXRoIGFuZCBpdHMgYWJzb2x1dGUgZm9ybSBoYXNoIHRvIHRoZSBzYW1lIGRhdGFzZXQgaWQuXG4gICAgICAgIC8vIEZvciBhIGRhdGEgVVJMIHRoZSBocmVmIElTIHRoZSBjb250ZW50IChwb3RlbnRpYWxseSBsYXJnZSkg4oCUIGhhc2ggaXRcbiAgICAgICAgLy8gZG93biBzbyB0aGUgaWQgc3RheXMgY29udGVudC1kZXJpdmVkICh1bmlxdWUgcGVyIHBheWxvYWQpIHdpdGhvdXRcbiAgICAgICAgLy8gc3RvcmluZyB0aGUgd2hvbGUgcGF5bG9hZCBpbiB0aGUgZGF0YXNldCBtZXRhZGF0YS5cbiAgICAgICAgY29uc3Qgc291cmNlVXJsID1cbiAgICAgICAgICBwYXJzZWRVcmwucHJvdG9jb2wgPT09ICdkYXRhOicgPyBgZGF0YToke2hhc2hTdHJpbmcocGFyc2VkVXJsLmhyZWYpfWAgOiBwYXJzZWRVcmwuaHJlZjtcbiAgICAgICAgKGZpbGUgYXMgRmlsZSAmIHtrZXBsZXJTb3VyY2VVcmw/OiBzdHJpbmd9KS5rZXBsZXJTb3VyY2VVcmwgPSBzb3VyY2VVcmw7XG5cbiAgICAgICAgY29uc3QgYmF0Y2hlcyA9IGF3YWl0IHJlYWRGaWxlSW5CYXRjaGVzKHtcbiAgICAgICAgICBmaWxlLFxuICAgICAgICAgIGZpbGVDYWNoZTogW10sXG4gICAgICAgICAgbG9hZGVyczogdmlzU3RhdGUubG9hZGVycyA/PyBbXSxcbiAgICAgICAgICBsb2FkT3B0aW9uczogdmlzU3RhdGUubG9hZE9wdGlvbnMgPz8ge31cbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGJhdGNoZXMubmV4dCgpO1xuICAgICAgICBsZXQgY29udGVudDogUHJvY2Vzc0ZpbGVEYXRhQ29udGVudCA9IHtkYXRhOiBbXSwgZmlsZU5hbWU6ICcnfTtcbiAgICAgICAgbGV0IHBhcnNlZERhdGE6IGFueVtdID0gW107XG5cbiAgICAgICAgd2hpbGUgKCFyZXN1bHQuZG9uZSkge1xuICAgICAgICAgIGNvbnRlbnQgPSByZXN1bHQudmFsdWUgYXMgUHJvY2Vzc0ZpbGVEYXRhQ29udGVudDtcbiAgICAgICAgICByZXN1bHQgPSBhd2FpdCBiYXRjaGVzLm5leHQoKTtcbiAgICAgICAgICBpZiAocmVzdWx0LmRvbmUpIHtcbiAgICAgICAgICAgIHBhcnNlZERhdGEgPSBhd2FpdCBwcm9jZXNzRmlsZURhdGEoe2NvbnRlbnQsIGZpbGVDYWNoZTogW119KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZWREYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gZGF0YSBjb3VsZCBiZSBwYXJzZWQgZnJvbSAke3VybH0uYCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBcHBseSBhIGNhbGxlci1jaG9zZW4gZGF0YXNldCBuYW1lIChkZWZhdWx0OiB0aGUgVVJMIGZpbGVuYW1lKSBzbyB0aGVcbiAgICAgICAgLy8gYWdlbnQgbmV2ZXIgaGFzIHRvIGNyZWF0ZSBhIGR1cGxpY2F0ZSBkYXRhc2V0IGp1c3QgdG8gcmVuYW1lIGl0LlxuICAgICAgICBmb3IgKGNvbnN0IGQgb2YgcGFyc2VkRGF0YSkge1xuICAgICAgICAgIGlmIChkPy5pbmZvKSB7XG4gICAgICAgICAgICBkLmluZm8ubGFiZWwgPSBkYXRhc2V0TmFtZSA/PyBkLmluZm8ubGFiZWwgPz8gZmlsZU5hbWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY3R4LmRpc3BhdGNoKFxuICAgICAgICAgIGFkZERhdGFUb01hcCh7XG4gICAgICAgICAgICBkYXRhc2V0czogcGFyc2VkRGF0YSxcbiAgICAgICAgICAgIC8vIERvIE5PVCBhdXRvLWNyZWF0ZSBhIGxheWVyIOKAlCB0aGUgYXNzaXN0YW50IGNyZWF0ZXMgdGhlIGxheWVyXG4gICAgICAgICAgICAvLyBleHBsaWNpdGx5IHZpYSBgbWFwLmFkZC1sYXllcmAgKHdpdGggZnVsbCBzdHlsaW5nIGNvbnRyb2wpLCBzb1xuICAgICAgICAgICAgLy8gbG9hZGluZyBkYXRhIG5ldmVyIHByb2R1Y2VzIGEgZHVwbGljYXRlIGRlZmF1bHQgbGF5ZXIuXG4gICAgICAgICAgICBvcHRpb25zOiB7YXV0b0NyZWF0ZUxheWVyczogZmFsc2UsIGNlbnRlck1hcDogdHJ1ZX1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGRhdGFJbmZvID0gcGFyc2VkRGF0YVswXT8uaW5mbztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgIGNvbW1hbmRJZDogbG9hZERhdGFDb21tYW5kSWQsXG4gICAgICAgICAgZGF0YToge2RldGFpbHM6IGBTdWNjZXNzZnVsbHkgbG9hZGVkIGRhdGEgZnJvbSAke3VybH1gLCBkYXRhSW5mb31cbiAgICAgICAgfTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgY29tbWFuZElkOiBsb2FkRGF0YUNvbW1hbmRJZCxcbiAgICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaW5zdHJ1Y3Rpb246XG4gICAgICAgICAgICAgICdUcnkgdG8gZml4IHRoZSBlcnJvci4gSWYgdGhlIGVycm9yIHBlcnNpc3RzLCBhc2sgdGhlIHVzZXIgdG8gdHJ5IHdpdGggYSBkaWZmZXJlbnQgVVJMIG9yIGZvcm1hdC4nXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBOztBQUdBLFNBQVFBLENBQUMsUUFBTyxLQUFLO0FBQ3JCLFNBQVFDLFlBQVksUUFBTyxvQkFBb0I7QUFDL0MsU0FBUUMsaUJBQWlCLEVBQUVDLGVBQWUsUUFBTyx1QkFBdUI7QUFJeEU7QUFDQTtBQUNBLElBQU1DLG1CQUEyQyxHQUFHO0VBQ2xELFVBQVUsRUFBRSxNQUFNO0VBQ2xCLGlCQUFpQixFQUFFLE1BQU07RUFDekIsa0JBQWtCLEVBQUUsT0FBTztFQUMzQixzQkFBc0IsRUFBRSxVQUFVO0VBQ2xDLG1DQUFtQyxFQUFFLFFBQVE7RUFDN0MsZ0NBQWdDLEVBQUUsVUFBVTtFQUM1QyxZQUFZLEVBQUU7QUFDaEIsQ0FBQztBQUVELFNBQVNDLG1CQUFtQkEsQ0FBQ0MsU0FBYyxFQUFVO0VBQUEsSUFBQUMscUJBQUE7RUFDbkQ7RUFDQSxJQUFNQyxJQUFJLEdBQUdGLFNBQVMsQ0FBQ0csUUFBUSxDQUFDQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENB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
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
2
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
3
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
4
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
5
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
6
|
+
// SPDX-License-Identifier: MIT
|
|
7
|
+
// Copyright contributors to the kepler.gl project
|
|
8
|
+
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
export var saveDataCommandId = 'map.save-data';
|
|
11
|
+
export function getSaveDataCommand(ctx) {
|
|
12
|
+
return {
|
|
13
|
+
id: saveDataCommandId,
|
|
14
|
+
name: 'Save DuckDB table to map',
|
|
15
|
+
group: 'Map',
|
|
16
|
+
description: 'Save a DuckDB table to kepler.gl as a map dataset. Works with any table including those from buffer, zipcode, county, state, isochrone, routing, query results, etc.',
|
|
17
|
+
metadata: {
|
|
18
|
+
readOnly: false,
|
|
19
|
+
riskLevel: 'medium',
|
|
20
|
+
requiresConfirmation: true
|
|
21
|
+
},
|
|
22
|
+
inputSchema: z.object({
|
|
23
|
+
datasetNames: z.array(z.string()).min(1).describe('The names of the DuckDB tables to load into kepler.gl.')
|
|
24
|
+
}),
|
|
25
|
+
execute: function () {
|
|
26
|
+
var _execute = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(_execCtx, input) {
|
|
27
|
+
var _ref, datasetNames, loadedDatasetNames, _iterator, _step, datasetName, result;
|
|
28
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
29
|
+
while (1) switch (_context.prev = _context.next) {
|
|
30
|
+
case 0:
|
|
31
|
+
_ref = input !== null && input !== void 0 ? input : {}, datasetNames = _ref.datasetNames;
|
|
32
|
+
_context.prev = 1;
|
|
33
|
+
if (!(!Array.isArray(datasetNames) || datasetNames.length === 0 || datasetNames.some(function (name) {
|
|
34
|
+
return typeof name !== 'string' || name.length === 0;
|
|
35
|
+
}))) {
|
|
36
|
+
_context.next = 4;
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
throw new Error('datasetNames must be a non-empty array of DuckDB table names, e.g. ["my_table"].');
|
|
40
|
+
case 4:
|
|
41
|
+
loadedDatasetNames = [];
|
|
42
|
+
_iterator = _createForOfIteratorHelper(datasetNames);
|
|
43
|
+
_context.prev = 6;
|
|
44
|
+
_iterator.s();
|
|
45
|
+
case 8:
|
|
46
|
+
if ((_step = _iterator.n()).done) {
|
|
47
|
+
_context.next = 18;
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
datasetName = _step.value;
|
|
51
|
+
_context.next = 12;
|
|
52
|
+
return ctx.loadTableToKepler(datasetName);
|
|
53
|
+
case 12:
|
|
54
|
+
result = _context.sent;
|
|
55
|
+
if (result.success) {
|
|
56
|
+
_context.next = 15;
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
throw new Error("Cannot save table \"".concat(datasetName, "\" to kepler.gl: ").concat(result.error));
|
|
60
|
+
case 15:
|
|
61
|
+
loadedDatasetNames.push(datasetName);
|
|
62
|
+
case 16:
|
|
63
|
+
_context.next = 8;
|
|
64
|
+
break;
|
|
65
|
+
case 18:
|
|
66
|
+
_context.next = 23;
|
|
67
|
+
break;
|
|
68
|
+
case 20:
|
|
69
|
+
_context.prev = 20;
|
|
70
|
+
_context.t0 = _context["catch"](6);
|
|
71
|
+
_iterator.e(_context.t0);
|
|
72
|
+
case 23:
|
|
73
|
+
_context.prev = 23;
|
|
74
|
+
_iterator.f();
|
|
75
|
+
return _context.finish(23);
|
|
76
|
+
case 26:
|
|
77
|
+
if (!(loadedDatasetNames.length === 0)) {
|
|
78
|
+
_context.next = 28;
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
throw new Error("No datasets found from ".concat(datasetNames.join(', ')));
|
|
82
|
+
case 28:
|
|
83
|
+
return _context.abrupt("return", {
|
|
84
|
+
success: true,
|
|
85
|
+
commandId: saveDataCommandId,
|
|
86
|
+
data: {
|
|
87
|
+
savedDatasetNames: loadedDatasetNames,
|
|
88
|
+
details: "Successfully saved dataset(s): ".concat(loadedDatasetNames.join(', '), " in kepler.gl")
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
case 31:
|
|
92
|
+
_context.prev = 31;
|
|
93
|
+
_context.t1 = _context["catch"](1);
|
|
94
|
+
return _context.abrupt("return", {
|
|
95
|
+
success: false,
|
|
96
|
+
commandId: saveDataCommandId,
|
|
97
|
+
error: "Cannot save data to kepler.gl: ".concat(_context.t1 instanceof Error ? _context.t1.message : String(_context.t1))
|
|
98
|
+
});
|
|
99
|
+
case 34:
|
|
100
|
+
case "end":
|
|
101
|
+
return _context.stop();
|
|
102
|
+
}
|
|
103
|
+
}, _callee, null, [[1, 31], [6, 20, 23, 26]]);
|
|
104
|
+
}));
|
|
105
|
+
function execute(_x, _x2) {
|
|
106
|
+
return _execute.apply(this, arguments);
|
|
107
|
+
}
|
|
108
|
+
return execute;
|
|
109
|
+
}()
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ6Iiwic2F2ZURhdGFDb21tYW5kSWQiLCJnZXRTYXZlRGF0YUNvbW1hbmQiLCJjdHgiLCJpZCIsIm5hbWUiLCJncm91cCIsImRlc2NyaXB0aW9uIiwibWV0YWRhdGEiLCJyZWFkT25seSIsInJpc2tMZXZlbCIsInJlcXVpcmVzQ29uZmlybWF0aW9uIiwiaW5wdXRTY2hlbWEiLCJvYmplY3QiLCJkYXRhc2V0TmFtZXMiLCJhcnJheSIsInN0cmluZyIsIm1pbiIsImRlc2NyaWJlIiwiZXhlY3V0ZSIsIl9leGVjdXRlIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJfZXhlY0N0eCIsImlucHV0IiwiX3JlZiIsImxvYWRlZERhdGFzZXROYW1lcyIsIl9pdGVyYXRvciIsIl9zdGVwIiwiZGF0YXNldE5hbWUiLCJyZXN1bHQiLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwic29tZSIsIkVycm9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImxvYWRUYWJsZVRvS2VwbGVyIiwic2VudCIsInN1Y2Nlc3MiLCJjb25jYXQiLCJlcnJvciIsInB1c2giLCJ0MCIsImUiLCJmIiwiZmluaXNoIiwiam9pbiIsImFicnVwdCIsImNvbW1hbmRJZCIsImRhdGEiLCJzYXZlZERhdGFzZXROYW1lcyIsImRldGFpbHMiLCJ0MSIsIm1lc3NhZ2UiLCJTdHJpbmciLCJzdG9wIiwiX3giLCJfeDIiLCJhcHBseSIsImFyZ3VtZW50cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9zYXZlLWRhdGEtY29tbWFuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgdHlwZSB7Um9vbUNvbW1hbmR9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHt6fSBmcm9tICd6b2QnO1xuaW1wb3J0IHR5cGUge0tlcGxlckNvbnRleHR9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3Qgc2F2ZURhdGFDb21tYW5kSWQgPSAnbWFwLnNhdmUtZGF0YScgYXMgY29uc3Q7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTYXZlRGF0YUNvbW1hbmQoY3R4OiBLZXBsZXJDb250ZXh0KTogUm9vbUNvbW1hbmQge1xuICByZXR1cm4ge1xuICAgIGlkOiBzYXZlRGF0YUNvbW1hbmRJZCxcbiAgICBuYW1lOiAnU2F2ZSBEdWNrREIgdGFibGUgdG8gbWFwJyxcbiAgICBncm91cDogJ01hcCcsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnU2F2ZSBhIER1Y2tEQiB0YWJsZSB0byBrZXBsZXIuZ2wgYXMgYSBtYXAgZGF0YXNldC4gV29ya3Mgd2l0aCBhbnkgdGFibGUgaW5jbHVkaW5nIHRob3NlIGZyb20gYnVmZmVyLCB6aXBjb2RlLCBjb3VudHksIHN0YXRlLCBpc29jaHJvbmUsIHJvdXRpbmcsIHF1ZXJ5IHJlc3VsdHMsIGV0Yy4nLFxuICAgIG1ldGFkYXRhOiB7cmVhZE9ubHk6IGZhbHNlLCByaXNrTGV2ZWw6ICdtZWRpdW0nLCByZXF1aXJlc0NvbmZpcm1hdGlvbjogdHJ1ZX0sXG4gICAgaW5wdXRTY2hlbWE6IHoub2JqZWN0KHtcbiAgICAgIGRhdGFzZXROYW1lczogelxuICAgICAgICAuYXJyYXkoei5zdHJpbmcoKSlcbiAgICAgICAgLm1pbigxKVxuICAgICAgICAuZGVzY3JpYmUoJ1RoZSBuYW1lcyBvZiB0aGUgRHVja0RCIHRhYmxlcyB0byBsb2FkIGludG8ga2VwbGVyLmdsLicpXG4gICAgfSkgYXMgYW55LFxuICAgIGV4ZWN1dGU6IGFzeW5jIChfZXhlY0N0eCwgaW5wdXQpID0+IHtcbiAgICAgIGNvbnN0IHtkYXRhc2V0TmFtZXN9ID0gKGlucHV0ID8/IHt9KSBhcyB7ZGF0YXNldE5hbWVzOiBzdHJpbmdbXX07XG4gICAgICB0cnkge1xuICAgICAgICAvLyBSdW50aW1lIGd1YXJkOiB0aGUgYnJpZGdlL3dlYk1DUCBjYWxsIGV4ZWN1dGUgd2l0aG91dCB6b2QgcGFyc2luZyxcbiAgICAgICAgLy8gc28gYSBtaXNzaW5nL2VtcHR5L3dyb25nLXR5cGVkIGRhdGFzZXROYW1lcyBtdXN0IG5vdCBmYWxsIHRocm91Z2ggdG9cbiAgICAgICAgLy8gYSBjb25mdXNpbmcgVHlwZUVycm9yIG9yIGFuIHVuaGVscGZ1bCBcIk5vIGRhdGFzZXRzIGZvdW5k4oCmXCIgbWVzc2FnZS5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFBcnJheS5pc0FycmF5KGRhdGFzZXROYW1lcykgfHxcbiAgICAgICAgICBkYXRhc2V0TmFtZXMubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgZGF0YXNldE5hbWVzLnNvbWUobmFtZSA9PiB0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycgfHwgbmFtZS5sZW5ndGggPT09IDApXG4gICAgICAgICkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdkYXRhc2V0TmFtZXMgbXVzdCBiZSBhIG5vbi1lbXB0eSBhcnJheSBvZiBEdWNrREIgdGFibGUgbmFtZXMsIGUuZy4gW1wibXlfdGFibGVcIl0uJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2FkZWREYXRhc2V0TmFtZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBkYXRhc2V0TmFtZSBvZiBkYXRhc2V0TmFtZXMpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjdHgubG9hZFRhYmxlVG9LZXBsZXIoZGF0YXNldE5hbWUpO1xuICAgICAgICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNhdmUgdGFibGUgXCIke2RhdGFzZXROYW1lfVwiIHRvIGtlcGxlci5nbDogJHtyZXN1bHQuZXJyb3J9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxvYWRlZERhdGFzZXROYW1lcy5wdXNoKGRhdGFzZXROYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb2FkZWREYXRhc2V0TmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBkYXRhc2V0cyBmb3VuZCBmcm9tICR7ZGF0YXNldE5hbWVzLmpvaW4oJywgJyl9YCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgY29tbWFuZElkOiBzYXZlRGF0YUNvbW1hbmRJZCxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBzYXZlZERhdGFzZXROYW1lczogbG9hZGVkRGF0YXNldE5hbWVzLFxuICAgICAgICAgICAgZGV0YWlsczogYFN1Y2Nlc3NmdWxseSBzYXZlZCBkYXRhc2V0KHMpOiAke2xvYWRlZERhdGFzZXROYW1lcy5qb2luKCcsICcpfSBpbiBrZXBsZXIuZ2xgXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICBjb21tYW5kSWQ6IHNhdmVEYXRhQ29tbWFuZElkLFxuICAgICAgICAgIGVycm9yOiBgQ2Fubm90IHNhdmUgZGF0YSB0byBrZXBsZXIuZ2w6ICR7XG4gICAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcbiAgICAgICAgICB9YFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBOztBQUdBLFNBQVFBLENBQUMsUUFBTyxLQUFLO0FBR3JCLE9B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
|