UNPKG

kepler.gl

Version:

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

172 lines (170 loc) 18.8 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.LoadDataToolComponent = LoadDataToolComponent; exports.loadData = void 0; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _react = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react"); var _lib = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react-redux/lib"); var _utils = require("@openassistant/utils"); var _zod = require("zod"); var _src = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/actions/src"); var _src2 = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/processors/src"); // SPDX-License-Identifier: MIT // Copyright contributors to the kepler.gl project var loadData = exports.loadData = (0, _utils.extendedTool)({ description: "Load dataset from a URL in kepler.gl.", parameters: _zod.z.object({ url: _zod.z.string().describe('The URL or file path to load data from') }), execute: executeLoadData, context: { getLoaders: function getLoaders() { throw new Error('getLoaders() not implemented.'); } }, component: LoadDataToolComponent }); function isLoadDataContext(context) { return context && typeof context.getLoaders === 'function'; } function executeLoadData(_x, _x2) { return _executeLoadData.apply(this, arguments); } function _executeLoadData() { _executeLoadData = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(_ref, options) { var url, getLoaders, _getLoaders, loaders, loadOptions, response, blob, fileName, file, batches, result, content, parsedData, dataInfo, errorMessage; return _regenerator["default"].wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: url = _ref.url; _context.prev = 1; if (isLoadDataContext(options.context)) { _context.next = 4; break; } throw new Error('Invalid load data context. Please provide a valid context.'); case 4: getLoaders = options.context.getLoaders; _getLoaders = getLoaders(), loaders = _getLoaders.loaders, loadOptions = _getLoaders.loadOptions; // Validate URL _context.prev = 6; new URL(url); _context.next = 13; break; case 10: _context.prev = 10; _context.t0 = _context["catch"](6); throw new Error("Invalid URL: ".concat(url)); case 13: _context.next = 15; return fetch(url); case 15: response = _context.sent; if (response.ok) { _context.next = 18; break; } throw new Error("Failed to fetch data from ".concat(url, ": ").concat(response.statusText)); case 18: _context.next = 20; return response.blob(); case 20: blob = _context.sent; fileName = url.split('/').pop() || 'data'; // Create file object file = new File([blob], fileName); // Process file data _context.next = 25; return (0, _src2.readFileInBatches)({ file: file, fileCache: [], loaders: loaders !== null && loaders !== void 0 ? loaders : [], loadOptions: loadOptions !== null && loadOptions !== void 0 ? loadOptions : {} }); case 25: batches = _context.sent; _context.next = 28; return batches.next(); case 28: result = _context.sent; content = { data: [], fileName: '' }; parsedData = []; case 31: if (result.done) { _context.next = 43; break; } content = result.value; _context.next = 35; return batches.next(); case 35: result = _context.sent; if (!result.done) { _context.next = 41; break; } _context.next = 39; return (0, _src2.processFileData)({ content: content, fileCache: [] }); case 39: parsedData = _context.sent; return _context.abrupt("break", 43); case 41: _context.next = 31; break; case 43: // get metadata for LLM dataInfo = parsedData[0].info; return _context.abrupt("return", { llmResult: { success: true, url: url, details: "Successfully loaded data from ".concat(url), dataInfo: dataInfo }, additionalData: { parsedData: parsedData } }); case 47: _context.prev = 47; _context.t1 = _context["catch"](1); errorMessage = _context.t1 instanceof Error ? _context.t1.message : 'Unknown error occurred'; return _context.abrupt("return", { llmResult: { success: false, url: url, details: "Error loading data: ".concat(errorMessage), instruction: 'Try to fix the error. If the error persists, pause the execution and ask the user to try with different URL or format.' } }); case 51: case "end": return _context.stop(); } }, _callee, null, [[1, 47], [6, 10]]); })); return _executeLoadData.apply(this, arguments); } function LoadDataToolComponent(_ref2) { var parsedData = _ref2.parsedData; var dispatch = (0, _lib.useDispatch)(); (0, _react.useEffect)(function () { dispatch((0, _src.addDataToMap)({ datasets: parsedData, options: { autoCreateLayers: true, centerMap: true } })); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); return null; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX2xpYiIsIl91dGlscyIsIl96b2QiLCJfc3JjIiwiX3NyYzIiLCJsb2FkRGF0YSIsImV4cG9ydHMiLCJleHRlbmRlZFRvb2wiLCJkZXNjcmlwdGlvbiIsInBhcmFtZXRlcnMiLCJ6Iiwib2JqZWN0IiwidXJsIiwic3RyaW5nIiwiZGVzY3JpYmUiLCJleGVjdXRlIiwiZXhlY3V0ZUxvYWREYXRhIiwiY29udGV4dCIsImdldExvYWRlcnMiLCJFcnJvciIsImNvbXBvbmVudCIsIkxvYWREYXRhVG9vbENvbXBvbmVudCIsImlzTG9hZERhdGFDb250ZXh0IiwiX3giLCJfeDIiLCJfZXhlY3V0ZUxvYWREYXRhIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsIl9yZWYiLCJvcHRpb25zIiwiX2dldExvYWRlcnMiLCJsb2FkZXJzIiwibG9hZE9wdGlvbnMiLCJyZXNwb25zZSIsImJsb2IiLCJmaWxlTmFtZSIsImZpbGUiLCJiYXRjaGVzIiwicmVzdWx0IiwiY29udGVudCIsInBhcnNlZERhdGEiLCJkYXRhSW5mbyIsImVycm9yTWVzc2FnZSIsIndyYXAiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJVUkwiLCJ0MCIsImNvbmNhdCIsImZldGNoIiwic2VudCIsIm9rIiwic3RhdHVzVGV4dCIsInNwbGl0IiwicG9wIiwiRmlsZSIsInJlYWRGaWxlSW5CYXRjaGVzIiwiZmlsZUNhY2hlIiwiZGF0YSIsImRvbmUiLCJ2YWx1ZSIsInByb2Nlc3NGaWxlRGF0YSIsImFicnVwdCIsImluZm8iLCJsbG1SZXN1bHQiLCJzdWNjZXNzIiwiZGV0YWlscyIsImFkZGl0aW9uYWxEYXRhIiwidDEiLCJtZXNzYWdlIiwiaW5zdHJ1Y3Rpb24iLCJzdG9wIiwiX3JlZjIiLCJkaXNwYXRjaCIsInVzZURpc3BhdGNoIiwidXNlRWZmZWN0IiwiYWRkRGF0YVRvTWFwIiwiZGF0YXNldHMiLCJhdXRvQ3JlYXRlTGF5ZXJzIiwiY2VudGVyTWFwIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FpLWFzc2lzdGFudC9zcmMvdG9vbHMva2VwbGVyLXRvb2xzL2xvYWRkYXRhLXRvb2wudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7dXNlRWZmZWN0fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZURpc3BhdGNofSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQge2V4dGVuZGVkVG9vbH0gZnJvbSAnQG9wZW5hc3Npc3RhbnQvdXRpbHMnO1xuaW1wb3J0IHt6fSBmcm9tICd6b2QnO1xuaW1wb3J0IHthZGREYXRhVG9NYXB9IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5pbXBvcnQge0xvYWRlcn0gZnJvbSAnQGxvYWRlcnMuZ2wvbG9hZGVyLXV0aWxzJztcbmltcG9ydCB7UHJvdG9EYXRhc2V0fSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7cmVhZEZpbGVJbkJhdGNoZXMsIHByb2Nlc3NGaWxlRGF0YSwgUHJvY2Vzc0ZpbGVEYXRhQ29udGVudH0gZnJvbSAnQGtlcGxlci5nbC9wcm9jZXNzb3JzJztcblxuZXhwb3J0IGNvbnN0IGxvYWREYXRhID0gZXh0ZW5kZWRUb29sPFxuICAvLyBwYXJhbWV0ZXJzIG9mIHRoZSB0b29sXG4gIHouWm9kT2JqZWN0PHtcbiAgICB1cmw6IHouWm9kU3RyaW5nO1xuICB9PixcbiAgLy8gcmV0dXJuIHR5cGUgb2YgdGhlIHRvb2xcbiAgRXhlY3V0ZUxvYWREYXRhUmVzdWx0WydsbG1SZXN1bHQnXSxcbiAgLy8gYWRkaXRpb25hbCBkYXRhIG9mIHRoZSB0b29sXG4gIEV4ZWN1dGVMb2FkRGF0YVJlc3VsdFsnYWRkaXRpb25hbERhdGEnXSxcbiAgLy8gY29udGV4dCBvZiB0aGUgdG9vbFxuICBMb2FkRGF0YVRvb2xDb250ZXh0XG4+KHtcbiAgZGVzY3JpcHRpb246IGBMb2FkIGRhdGFzZXQgZnJvbSBhIFVSTCBpbiBrZXBsZXIuZ2wuYCxcbiAgcGFyYW1ldGVyczogei5vYmplY3Qoe1xuICAgIHVybDogei5zdHJpbmcoKS5kZXNjcmliZSgnVGhlIFVSTCBvciBmaWxlIHBhdGggdG8gbG9hZCBkYXRhIGZyb20nKVxuICB9KSxcbiAgZXhlY3V0ZTogZXhlY3V0ZUxvYWREYXRhLFxuICBjb250ZXh0OiB7XG4gICAgZ2V0TG9hZGVyczogKCkgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRMb2FkZXJzKCkgbm90IGltcGxlbWVudGVkLicpO1xuICAgIH1cbiAgfSxcbiAgY29tcG9uZW50OiBMb2FkRGF0YVRvb2xDb21wb25lbnRcbn0pO1xuXG5leHBvcnQgdHlwZSBMb2FkRGF0YVRvb2wgPSB0eXBlb2YgbG9hZERhdGE7XG5cbnR5cGUgRXhlY3V0ZUxvYWREYXRhUmVzdWx0ID0ge1xuICBsbG1SZXN1bHQ6IHtcbiAgICBzdWNjZXNzOiBib29sZWFuO1xuICAgIHVybDogc3RyaW5nO1xuICAgIGRldGFpbHM/OiBzdHJpbmc7XG4gICAgZGF0YUluZm8/OiBvYmplY3Q7XG4gICAgaW5zdHJ1Y3Rpb24/OiBzdHJpbmc7XG4gIH07XG4gIGFkZGl0aW9uYWxEYXRhPzoge1xuICAgIHBhcnNlZERhdGE6IFByb3RvRGF0YXNldFtdO1xuICB9O1xufTtcblxudHlwZSBMb2FkRGF0YVRvb2xDb250ZXh0ID0ge1xuICBnZXRMb2FkZXJzOiAoKSA9PiB7XG4gICAgbG9hZGVycz86IExvYWRlcltdO1xuICAgIGxvYWRPcHRpb25zPzogb2JqZWN0O1xuICB9O1xufTtcblxuZnVuY3Rpb24gaXNMb2FkRGF0YUNvbnRleHQoY29udGV4dDogYW55KTogY29udGV4dCBpcyBMb2FkRGF0YVRvb2xDb250ZXh0IHtcbiAgcmV0dXJuIGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQuZ2V0TG9hZGVycyA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUxvYWREYXRhKHt1cmx9LCBvcHRpb25zKTogUHJvbWlzZTxFeGVjdXRlTG9hZERhdGFSZXN1bHQ+IHtcbiAgdHJ5IHtcbiAgICBpZiAoIWlzTG9hZERhdGFDb250ZXh0KG9wdGlvbnMuY29udGV4dCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBsb2FkIGRhdGEgY29udGV4dC4gUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBjb250ZXh0LicpO1xuICAgIH1cblxuICAgIGNvbnN0IHtnZXRMb2FkZXJzfSA9IG9wdGlvbnMuY29udGV4dDtcbiAgICBjb25zdCB7bG9hZGVycywgbG9hZE9wdGlvbnN9ID0gZ2V0TG9hZGVycygpO1xuXG4gICAgLy8gVmFsaWRhdGUgVVJMXG4gICAgdHJ5IHtcbiAgICAgIG5ldyBVUkwodXJsKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgVVJMOiAke3VybH1gKTtcbiAgICB9XG5cbiAgICAvLyBGZXRjaCBkYXRhXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwpO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoIGRhdGEgZnJvbSAke3VybH06ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBibG9iID0gYXdhaXQgcmVzcG9uc2UuYmxvYigpO1xuICAgIGNvbnN0IGZpbGVOYW1lID0gdXJsLnNwbGl0KCcvJykucG9wKCkgfHwgJ2RhdGEnO1xuXG4gICAgLy8gQ3JlYXRlIGZpbGUgb2JqZWN0XG4gICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlKFtibG9iXSwgZmlsZU5hbWUpO1xuXG4gICAgLy8gUHJvY2VzcyBmaWxlIGRhdGFcbiAgICBjb25zdCBiYXRjaGVzID0gYXdhaXQgcmVhZEZpbGVJbkJhdGNoZXMoe1xuICAgICAgZmlsZSxcbiAgICAgIGZpbGVDYWNoZTogW10sXG4gICAgICBsb2FkZXJzOiBsb2FkZXJzID8/IFtdLFxuICAgICAgbG9hZE9wdGlvbnM6IGxvYWRPcHRpb25zID8/IHt9XG4gICAgfSk7XG5cbiAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYmF0Y2hlcy5uZXh0KCk7XG4gICAgbGV0IGNvbnRlbnQ6IFByb2Nlc3NGaWxlRGF0YUNvbnRlbnQgPSB7ZGF0YTogW10sIGZpbGVOYW1lOiAnJ307XG4gICAgbGV0IHBhcnNlZERhdGE6IFByb3RvRGF0YXNldFtdID0gW107XG5cbiAgICB3aGlsZSAoIXJlc3VsdC5kb25lKSB7XG4gICAgICBjb250ZW50ID0gcmVzdWx0LnZhbHVlIGFzIFByb2Nlc3NGaWxlRGF0YUNvbnRlbnQ7XG4gICAgICByZXN1bHQgPSBhd2FpdCBiYXRjaGVzLm5leHQoKTtcbiAgICAgIGlmIChyZXN1bHQuZG9uZSkge1xuICAgICAgICBwYXJzZWREYXRhID0gYXdhaXQgcHJvY2Vzc0ZpbGVEYXRhKHtcbiAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgIGZpbGVDYWNoZTogW11cbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGdldCBtZXRhZGF0YSBmb3IgTExNXG4gICAgY29uc3QgZGF0YUluZm8gPSBwYXJzZWREYXRhWzBdLmluZm87XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGxtUmVzdWx0OiB7XG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIHVybCxcbiAgICAgICAgZGV0YWlsczogYFN1Y2Nlc3NmdWxseSBsb2FkZWQgZGF0YSBmcm9tICR7dXJsfWAsXG4gICAgICAgIGRhdGFJbmZvXG4gICAgICB9LFxuICAgICAgYWRkaXRpb25hbERhdGE6IHtcbiAgICAgICAgcGFyc2VkRGF0YVxuICAgICAgfVxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvciBvY2N1cnJlZCc7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxsbVJlc3VsdDoge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgdXJsLFxuICAgICAgICBkZXRhaWxzOiBgRXJyb3IgbG9hZGluZyBkYXRhOiAke2Vycm9yTWVzc2FnZX1gLFxuICAgICAgICBpbnN0cnVjdGlvbjpcbiAgICAgICAgICAnVHJ5IHRvIGZpeCB0aGUgZXJyb3IuIElmIHRoZSBlcnJvciBwZXJzaXN0cywgcGF1c2UgdGhlIGV4ZWN1dGlvbiBhbmQgYXNrIHRoZSB1c2VyIHRvIHRyeSB3aXRoIGRpZmZlcmVudCBVUkwgb3IgZm9ybWF0LidcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBMb2FkRGF0YVRvb2xDb21wb25lbnQoe3BhcnNlZERhdGF9KSB7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGRpc3BhdGNoKFxuICAgICAgYWRkRGF0YVRvTWFwKHtcbiAgICAgICAgZGF0YXNldHM6IHBhcnNlZERhdGEsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBhdXRvQ3JlYXRlTGF5ZXJzOiB0cnVlLFxuICAgICAgICAgIGNlbnRlck1hcDogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxJQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxNQUFBLEdBQUFGLE9BQUE7QUFD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