UNPKG

kepler.gl

Version:

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

103 lines (96 loc) 16.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports.validateAccessors = validateAccessors; exports.validateColorVector = validateColorVector; exports.validateVectorAccessors = validateVectorAccessors; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _typed = require("@deck.gl/core/typed"); var arrow = _interopRequireWildcard(require("apache-arrow")); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; } 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; } } }; } 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; } } 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; } // SPDX-License-Identifier: MIT // Copyright contributors to the kepler.gl project // deck.gl-community // SPDX-License-Identifier: MIT // Copyright (c) vis.gl contributors function validateAccessors(props, table) { var vectorAccessors = []; var colorVectorAccessors = []; for (var _i = 0, _Object$entries = Object.entries(props); _i < _Object$entries.length; _i++) { var _Object$entries$_i = (0, _slicedToArray2["default"])(_Object$entries[_i], 2), accessorName = _Object$entries$_i[0], accessorValue = _Object$entries$_i[1]; // Is it an accessor if (accessorName.startsWith('get')) { // Is it a vector accessor if (accessorValue instanceof arrow.Vector) { vectorAccessors.push(accessorValue); // Is it a color vector accessor if (accessorName.endsWith('Color')) { colorVectorAccessors.push(accessorValue); } } } } validateVectorAccessors(table, vectorAccessors); for (var _i2 = 0, _colorVectorAccessors = colorVectorAccessors; _i2 < _colorVectorAccessors.length; _i2++) { var colorVectorAccessor = _colorVectorAccessors[_i2]; validateColorVector(colorVectorAccessor); } } /** * Provide validation for accessors provided * * - Assert that all vectors have the same number of chunks as the main table * - Assert that all chunks in each vector have the same number of rows as the * relevant batch in the main table. * */ function validateVectorAccessors(table, vectorAccessors) { // Check the same number of chunks as the table's batches var _iterator = _createForOfIteratorHelper(vectorAccessors), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var vectorAccessor = _step.value; (0, _typed.assert)(table.batches.length === vectorAccessor.data.length); } // Check that each table batch/vector data has the same number of rows } catch (err) { _iterator.e(err); } finally { _iterator.f(); } var _iterator2 = _createForOfIteratorHelper(vectorAccessors), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var _vectorAccessor = _step2.value; for (var i = 0; i < table.batches.length; i++) { (0, _typed.assert)(table.batches[i].numRows === _vectorAccessor.data[i].length); } } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } } function validateColorVector(vector) { // Assert the color vector is a FixedSizeList (0, _typed.assert)(arrow.DataType.isFixedSizeList(vector.type)); // Assert it has 3 or 4 values (0, _typed.assert)(vector.type.listSize === 3 || vector.type.listSize === 4); // Assert the child type is an integer (0, _typed.assert)(arrow.DataType.isInt(vector.type.children[0])); // Assert the child type is a Uint8 // Property 'type' does not exist on type 'Int_<Ints>'. Did you mean 'TType'? (0, _typed.assert)(vector.type.children[0].type.bitWidth === 8); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZWQiLCJyZXF1aXJlIiwiYXJyb3ciLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJ2YWxpZGF0ZUFjY2Vzc29ycyIsInByb3BzIiwidGFibGUiLCJ2ZWN0b3JBY2Nlc3NvcnMiLCJjb2xvclZlY3RvckFjY2Vzc29ycyIsIl9pIiwiX09iamVjdCRlbnRyaWVzIiwiZW50cmllcyIsIl9PYmplY3QkZW50cmllcyRfaSIsIl9zbGljZWRUb0FycmF5MiIsImFjY2Vzc29yTmFtZSIsImFjY2Vzc29yVmFsdWUiLCJzdGFydHNXaXRoIiwiVmVjdG9yIiwicHVzaCIsImVuZHNXaXRoIiwidmFsaWRhdGVWZWN0b3JBY2Nlc3NvcnMiLCJfaTIiLCJfY29sb3JWZWN0b3JBY2Nlc3NvcnMiLCJjb2xvclZlY3RvckFjY2Vzc29yIiwidmFsaWRhdGVDb2xvclZlY3RvciIsIl9pdGVyYXRvciIsIl9zdGVwIiwidmVjdG9yQWNjZXNzb3IiLCJhc3NlcnQiLCJiYXRjaGVzIiwiZGF0YSIsImVyciIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJudW1Sb3dzIiwidmVjdG9yIiwiRGF0YVR5cGUiLCJpc0ZpeGVkU2l6ZUxpc3QiLCJ0eXBlIiwibGlzdFNpemUiLCJpc0ludCIsImNoaWxkcmVuIiwiYml0V2lkdGgiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdmFsaWRhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuLy8gZGVjay5nbC1jb21tdW5pdHlcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCAoYykgdmlzLmdsIGNvbnRyaWJ1dG9yc1xuXG5pbXBvcnQge2Fzc2VydH0gZnJvbSAnQGRlY2suZ2wvY29yZS90eXBlZCc7XG5pbXBvcnQgKiBhcyBhcnJvdyBmcm9tICdhcGFjaGUtYXJyb3cnO1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVBY2Nlc3NvcnMocHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4sIHRhYmxlOiBhcnJvdy5UYWJsZSk6IHZvaWQge1xuICBjb25zdCB2ZWN0b3JBY2Nlc3NvcnM6IGFycm93LlZlY3RvcltdID0gW107XG4gIGNvbnN0IGNvbG9yVmVjdG9yQWNjZXNzb3JzOiBhcnJvdy5WZWN0b3JbXSA9IFtdO1xuICBmb3IgKGNvbnN0IFthY2Nlc3Nvck5hbWUsIGFjY2Vzc29yVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BzKSkge1xuICAgIC8vIElzIGl0IGFuIGFjY2Vzc29yXG4gICAgaWYgKGFjY2Vzc29yTmFtZS5zdGFydHNXaXRoKCdnZXQnKSkge1xuICAgICAgLy8gSXMgaXQgYSB2ZWN0b3IgYWNjZXNzb3JcbiAgICAgIGlmIChhY2Nlc3NvclZhbHVlIGluc3RhbmNlb2YgYXJyb3cuVmVjdG9yKSB7XG4gICAgICAgIHZlY3RvckFjY2Vzc29ycy5wdXNoKGFjY2Vzc29yVmFsdWUpO1xuXG4gICAgICAgIC8vIElzIGl0IGEgY29sb3IgdmVjdG9yIGFjY2Vzc29yXG4gICAgICAgIGlmIChhY2Nlc3Nvck5hbWUuZW5kc1dpdGgoJ0NvbG9yJykpIHtcbiAgICAgICAgICBjb2xvclZlY3RvckFjY2Vzc29ycy5wdXNoKGFjY2Vzc29yVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVWZWN0b3JBY2Nlc3NvcnModGFibGUsIHZlY3RvckFjY2Vzc29ycyk7XG4gIGZvciAoY29uc3QgY29sb3JWZWN0b3JBY2Nlc3NvciBvZiBjb2xvclZlY3RvckFjY2Vzc29ycykge1xuICAgIHZhbGlkYXRlQ29sb3JWZWN0b3IoY29sb3JWZWN0b3JBY2Nlc3Nvcik7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm92aWRlIHZhbGlkYXRpb24gZm9yIGFjY2Vzc29ycyBwcm92aWRlZFxuICpcbiAqIC0gQXNzZXJ0IHRoYXQgYWxsIHZlY3RvcnMgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgY2h1bmtzIGFzIHRoZSBtYWluIHRhYmxlXG4gKiAtIEFzc2VydCB0aGF0IGFsbCBjaHVua3MgaW4gZWFjaCB2ZWN0b3IgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2Ygcm93cyBhcyB0aGVcbiAqICAgcmVsZXZhbnQgYmF0Y2ggaW4gdGhlIG1haW4gdGFibGUuXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVWZWN0b3JBY2Nlc3NvcnModGFibGU6IGFycm93LlRhYmxlLCB2ZWN0b3JBY2Nlc3NvcnM6IGFycm93LlZlY3RvcltdKSB7XG4gIC8vIENoZWNrIHRoZSBzYW1lIG51bWJlciBvZiBjaHVua3MgYXMgdGhlIHRhYmxlJ3MgYmF0Y2hlc1xuICBmb3IgKGNvbnN0IHZlY3RvckFjY2Vzc29yIG9mIHZlY3RvckFjY2Vzc29ycykge1xuICAgIGFzc2VydCh0YWJsZS5iYXRjaGVzLmxlbmd0aCA9PT0gdmVjdG9yQWNjZXNzb3IuZGF0YS5sZW5ndGgpO1xuICB9XG5cbiAgLy8gQ2hlY2sgdGhhdCBlYWNoIHRhYmxlIGJhdGNoL3ZlY3RvciBkYXRhIGhhcyB0aGUgc2FtZSBudW1iZXIgb2Ygcm93c1xuICBmb3IgKGNvbnN0IHZlY3RvckFjY2Vzc29yIG9mIHZlY3RvckFjY2Vzc29ycykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFibGUuYmF0Y2hlcy5sZW5ndGg7IGkrKykge1xuICAgICAgYXNzZXJ0KHRhYmxlLmJhdGNoZXNbaV0ubnVtUm93cyA9PT0gdmVjdG9yQWNjZXNzb3IuZGF0YVtpXS5sZW5ndGgpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDb2xvclZlY3Rvcih2ZWN0b3I6IGFycm93LlZlY3Rvcikge1xuICAvLyBBc3NlcnQgdGhlIGNvbG9yIHZlY3RvciBpcyBhIEZpeGVkU2l6ZUxpc3RcbiAgYXNzZXJ0KGFycm93LkRhdGFUeXBlLmlzRml4ZWRTaXplTGlzdCh2ZWN0b3IudHlwZSkpO1xuXG4gIC8vIEFzc2VydCBpdCBoYXMgMyBvciA0IHZhbHVlc1xuICBhc3NlcnQodmVjdG9yLnR5cGUubGlzdFNpemUgPT09IDMgfHwgdmVjdG9yLnR5cGUubGlzdFNpemUgPT09IDQpO1xuXG4gIC8vIEFzc2VydCB0aGUgY2hpbGQgdHlwZSBpcyBhbiBpbnRlZ2VyXG4gIGFzc2VydChhcnJvdy5EYXRhVHlwZS5pc0ludCh2ZWN0b3IudHlwZS5jaGlsZHJlblswXSkpO1xuXG4gIC8vIEFzc2VydCB0aGUgY2hpbGQgdHlwZSBpcyBhIFVpbnQ4XG4gIC8vIFByb3BlcnR5ICd0eXBlJyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlICdJbnRfPEludHM+Jy4gRGlkIHlvdSBtZWFuICdUVHlwZSc/XG4gIGFzc2VydCh2ZWN0b3IudHlwZS5jaGlsZHJlblswXS50eXBlLmJpdFdpZHRoID09PSA4KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFPQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFDLHVC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QUFBO0lBQUFOLFNBQUEsQ0FBQS9ELENBQUEsQ0FBQXFFLEdBQUE7RUFBQTtJQUFBTixTQUFBLENBQUFoQyxDQUFBO0VBQUE7RUFBQSxJQUFBdUMsVUFBQSxHQUFBbkQsMEJBQUEsQ0FDNkIwQixlQUFlO0lBQUEwQixNQUFBO0VBQUE7SUFBNUMsS0FBQUQsVUFBQSxDQUFBMUMsQ0FBQSxNQUFBMkMsTUFBQSxHQUFBRCxVQUFBLENBQUE5RCxDQUFBLElBQUFxQixJQUFBLEdBQThDO01BQUEsSUFBbkNvQyxlQUFjLEdBQUFNLE1BQUEsQ0FBQXpDLEtBQUE7TUFDdkIsS0FBSyxJQUFJYixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUcyQixLQUFLLENBQUN1QixPQUFPLENBQUMxQyxNQUFNLEVBQUVSLENBQUMsRUFBRSxFQUFFO1FBQzdDLElBQUFpRCxhQUFNLEVBQUN0QixLQUFLLENBQUN1QixPQUFPLENBQUNsRCxDQUFDLENBQUMsQ0FBQ3VELE9BQU8sS0FBS1AsZUFBYyxDQUFDRyxJQUFJLENBQUNuRCxDQUFDLENBQUMsQ0FBQ1EsTUFBTSxDQUFDO01BQ3BFO0lBQ0Y7RUFBQyxTQUFBNEMsR0FBQTtJQUFBQyxVQUFBLENBQUF0RSxDQUFBLENBQUFxRSxHQUFBO0VBQUE7SUFBQUMsVUFBQSxDQUFBdkMsQ0FBQTtFQUFBO0FBQ0g7QUFFTyxTQUFTK0IsbUJBQW1CQSxDQUFDVyxNQUFvQixFQUFFO0VBQ3hEO0VBQ0EsSUFBQVAsYUFBTSxFQUFDckUsS0FBSyxDQUFDNkUsUUFBUSxDQUFDQyxlQUFlLENBQUNGLE1BQU0sQ0FBQ0csSUFBSSxDQUFDLENBQUM7O0VBRW5EO0VBQ0EsSUFBQVYsYUFBTSxFQUFDTyxNQUFNLENBQUNHLElBQUksQ0FBQ0MsUUFBUSxLQUFLLENBQUMsSUFBSUosTUFBTSxDQUFDRyxJQUFJLENBQUNDLFFBQVEsS0FBSyxDQUFDLENBQUM7O0VBRWhFO0VBQ0EsSUFBQVgsYUFBTSxFQUFDckUsS0FBSyxDQUFDNkUsUUFBUSxDQUFDSSxLQUFLLENBQUNMLE1BQU0sQ0FBQ0csSUFBSSxDQUFDRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7RUFFckQ7RUFDQTtFQUNBLElBQUFiLGFBQU0sRUFBQ08sTUFBTSxDQUFDRyxJQUFJLENBQUNHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ0gsSUFBSSxDQUFDSSxRQUFRLEtBQUssQ0FBQyxDQUFDO0FBQ3JEIiwiaWdub3JlTGlzdCI6W119