kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
104 lines (97 loc) • 17 kB
JavaScript
;
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 _utils = require("@kepler.gl/utils");
var arrow = _interopRequireWildcard(require("apache-arrow"));
var _utils2 = require("./utils");
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 ((0, _utils.isArrowVector)(accessorValue)) {
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, _utils2.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, _utils2.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, _utils2.assert)(arrow.DataType.isFixedSizeList(vector.type));
// Assert it has 3 or 4 values
(0, _utils2.assert)(vector.type.listSize === 3 || vector.type.listSize === 4);
// Assert the child type is an integer
(0, _utils2.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, _utils2.assert)(vector.type.children[0].type.bitWidth === 8);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXRpbHMiLCJyZXF1aXJlIiwiYXJyb3ciLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl91dGlsczIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJvIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwidmFsaWRhdGVBY2Nlc3NvcnMiLCJwcm9wcyIsInRhYmxlIiwidmVjdG9yQWNjZXNzb3JzIiwiY29sb3JWZWN0b3JBY2Nlc3NvcnMiLCJfaSIsIl9PYmplY3QkZW50cmllcyIsImVudHJpZXMiLCJfT2JqZWN0JGVudHJpZXMkX2kiLCJfc2xpY2VkVG9BcnJheTIiLCJhY2Nlc3Nvck5hbWUiLCJhY2Nlc3NvclZhbHVlIiwic3RhcnRzV2l0aCIsImlzQXJyb3dWZWN0b3IiLCJwdXNoIiwiZW5kc1dpdGgiLCJ2YWxpZGF0ZVZlY3RvckFjY2Vzc29ycyIsIl9pMiIsIl9jb2xvclZlY3RvckFjY2Vzc29ycyIsImNvbG9yVmVjdG9yQWNjZXNzb3IiLCJ2YWxpZGF0ZUNvbG9yVmVjdG9yIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJ2ZWN0b3JBY2Nlc3NvciIsImFzc2VydCIsImJhdGNoZXMiLCJkYXRhIiwiZXJyIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsIm51bVJvd3MiLCJ2ZWN0b3IiLCJEYXRhVHlwZSIsImlzRml4ZWRTaXplTGlzdCIsInR5cGUiLCJsaXN0U2l6ZSIsImlzSW50IiwiY2hpbGRyZW4iLCJiaXRXaWR0aCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy92YWxpZGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG4vLyBkZWNrLmdsLWNvbW11bml0eVxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IChjKSB2aXMuZ2wgY29udHJpYnV0b3JzXG5cbmltcG9ydCB7aXNBcnJvd1ZlY3Rvcn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQgKiBhcyBhcnJvdyBmcm9tICdhcGFjaGUtYXJyb3cnO1xuaW1wb3J0IHthc3NlcnR9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVBY2Nlc3NvcnMocHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4sIHRhYmxlOiBhcnJvdy5UYWJsZSk6IHZvaWQge1xuICBjb25zdCB2ZWN0b3JBY2Nlc3NvcnM6IGFycm93LlZlY3RvcltdID0gW107XG4gIGNvbnN0IGNvbG9yVmVjdG9yQWNjZXNzb3JzOiBhcnJvdy5WZWN0b3JbXSA9IFtdO1xuICBmb3IgKGNvbnN0IFthY2Nlc3Nvck5hbWUsIGFjY2Vzc29yVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BzKSkge1xuICAgIC8vIElzIGl0IGFuIGFjY2Vzc29yXG4gICAgaWYgKGFjY2Vzc29yTmFtZS5zdGFydHNXaXRoKCdnZXQnKSkge1xuICAgICAgLy8gSXMgaXQgYSB2ZWN0b3IgYWNjZXNzb3JcbiAgICAgIGlmIChpc0Fycm93VmVjdG9yKGFjY2Vzc29yVmFsdWUpKSB7XG4gICAgICAgIHZlY3RvckFjY2Vzc29ycy5wdXNoKGFjY2Vzc29yVmFsdWUpO1xuXG4gICAgICAgIC8vIElzIGl0IGEgY29sb3IgdmVjdG9yIGFjY2Vzc29yXG4gICAgICAgIGlmIChhY2Nlc3Nvck5hbWUuZW5kc1dpdGgoJ0NvbG9yJykpIHtcbiAgICAgICAgICBjb2xvclZlY3RvckFjY2Vzc29ycy5wdXNoKGFjY2Vzc29yVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVWZWN0b3JBY2Nlc3NvcnModGFibGUsIHZlY3RvckFjY2Vzc29ycyk7XG4gIGZvciAoY29uc3QgY29sb3JWZWN0b3JBY2Nlc3NvciBvZiBjb2xvclZlY3RvckFjY2Vzc29ycykge1xuICAgIHZhbGlkYXRlQ29sb3JWZWN0b3IoY29sb3JWZWN0b3JBY2Nlc3Nvcik7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm92aWRlIHZhbGlkYXRpb24gZm9yIGFjY2Vzc29ycyBwcm92aWRlZFxuICpcbiAqIC0gQXNzZXJ0IHRoYXQgYWxsIHZlY3RvcnMgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgY2h1bmtzIGFzIHRoZSBtYWluIHRhYmxlXG4gKiAtIEFzc2VydCB0aGF0IGFsbCBjaHVua3MgaW4gZWFjaCB2ZWN0b3IgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2Ygcm93cyBhcyB0aGVcbiAqICAgcmVsZXZhbnQgYmF0Y2ggaW4gdGhlIG1haW4gdGFibGUuXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVWZWN0b3JBY2Nlc3NvcnModGFibGU6IGFycm93LlRhYmxlLCB2ZWN0b3JBY2Nlc3NvcnM6IGFycm93LlZlY3RvcltdKSB7XG4gIC8vIENoZWNrIHRoZSBzYW1lIG51bWJlciBvZiBjaHVua3MgYXMgdGhlIHRhYmxlJ3MgYmF0Y2hlc1xuICBmb3IgKGNvbnN0IHZlY3RvckFjY2Vzc29yIG9mIHZlY3RvckFjY2Vzc29ycykge1xuICAgIGFzc2VydCh0YWJsZS5iYXRjaGVzLmxlbmd0aCA9PT0gdmVjdG9yQWNjZXNzb3IuZGF0YS5sZW5ndGgpO1xuICB9XG5cbiAgLy8gQ2hlY2sgdGhhdCBlYWNoIHRhYmxlIGJhdGNoL3ZlY3RvciBkYXRhIGhhcyB0aGUgc2FtZSBudW1iZXIgb2Ygcm93c1xuICBmb3IgKGNvbnN0IHZlY3RvckFjY2Vzc29yIG9mIHZlY3RvckFjY2Vzc29ycykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFibGUuYmF0Y2hlcy5sZW5ndGg7IGkrKykge1xuICAgICAgYXNzZXJ0KHRhYmxlLmJhdGNoZXNbaV0ubnVtUm93cyA9PT0gdmVjdG9yQWNjZXNzb3IuZGF0YVtpXS5sZW5ndGgpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDb2xvclZlY3Rvcih2ZWN0b3I6IGFycm93LlZlY3Rvcikge1xuICAvLyBBc3NlcnQgdGhlIGNvbG9yIHZlY3RvciBpcyBhIEZpeGVkU2l6ZUxpc3RcbiAgYXNzZXJ0KGFycm93LkRhdGFUeXBlLmlzRml4ZWRTaXplTGlzdCh2ZWN0b3IudHlwZSkpO1xuXG4gIC8vIEFzc2VydCBpdCBoYXMgMyBvciA0IHZhbHVlc1xuICBhc3NlcnQodmVjdG9yLnR5cGUubGlzdFNpemUgPT09IDMgfHwgdmVjdG9yLnR5cGUubGlzdFNpemUgPT09IDQpO1xuXG4gIC8vIEFzc2VydCB0aGUgY2hpbGQgdHlwZSBpcyBhbiBpbnRlZ2VyXG4gIGFzc2VydChhcnJvdy5EYXRhVHlwZS5pc0ludCh2ZWN0b3IudHlwZS5jaGlsZHJlblswXSkpO1xuXG4gIC8vIEFzc2VydCB0aGUgY2hpbGQgdHlwZSBpcyBhIFVpbnQ4XG4gIC8vIFByb3BlcnR5ICd0eXBlJyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlICdJbnRfPEludHM+Jy4gRGlkIHlvdSBtZWFuICdUVHlwZSc/XG4gIGFzc2VydCh2ZWN0b3IudHlwZS5jaGlsZHJlblswXS50eXBlLmJpdFdpZHRoID09PSA4KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFPQSxJ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TUFBTSxLQUFLd0MsY0FBYyxDQUFDRyxJQUFJLENBQUMzQyxNQUFNLENBQUM7SUFDN0Q7O0lBRUE7RUFBQSxTQUFBNEMsR0FBQTtJQUFBTixTQUFBLENBQUEvRCxDQUFBLENBQUFxRSxHQUFBO0VBQUE7SUFBQU4sU0FBQSxDQUFBaEMsQ0FBQTtFQUFBO0VBQUEsSUFBQXVDLFVBQUEsR0FBQW5ELDBCQUFBLENBQzZCMEIsZUFBZTtJQUFBMEIsTUFBQTtFQUFBO0lBQTVDLEtBQUFELFVBQUEsQ0FBQTFDLENBQUEsTUFBQTJDLE1BQUEsR0FBQUQsVUFBQSxDQUFBOUQsQ0FBQSxJQUFBcUIsSUFBQSxHQUE4QztNQUFBLElBQW5Db0MsZUFBYyxHQUFBTSxNQUFBLENBQUF6QyxLQUFBO01BQ3ZCLEtBQUssSUFBSWIsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHMkIsS0FBSyxDQUFDdUIsT0FBTyxDQUFDMUMsTUFBTSxFQUFFUixDQUFDLEVBQUUsRUFBRTtRQUM3QyxJQUFBaUQsY0FBTSxFQUFDdEIsS0FBSyxDQUFDdUIsT0FBTyxDQUFDbEQsQ0FBQyxDQUFDLENBQUN1RCxPQUFPLEtBQUtQLGVBQWMsQ0FBQ0csSUFBSSxDQUFDbkQsQ0FBQyxDQUFDLENBQUNRLE1BQU0sQ0FBQztNQUNwRTtJQUNGO0VBQUMsU0FBQTRDLEdBQUE7SUFBQUMsVUFBQSxDQUFBdEUsQ0FBQSxDQUFBcUUsR0FBQTtFQUFBO0lBQUFDLFVBQUEsQ0FBQXZDLENBQUE7RUFBQTtBQUNIO0FBRU8sU0FBUytCLG1CQUFtQkEsQ0FBQ1csTUFBb0IsRUFBRTtFQUN4RDtFQUNBLElBQUFQLGNBQU0sRUFBQ3RFLEtBQUssQ0FBQzhFLFFBQVEsQ0FBQ0MsZUFBZSxDQUFDRixNQUFNLENBQUNHLElBQUksQ0FBQyxDQUFDOztFQUVuRDtFQUNBLElBQUFWLGNBQU0sRUFBQ08sTUFBTSxDQUFDRyxJQUFJLENBQUNDLFFBQVEsS0FBSyxDQUFDLElBQUlKLE1BQU0sQ0FBQ0csSUFBSSxDQUFDQyxRQUFRLEtBQUssQ0FBQyxDQUFDOztFQUVoRTtFQUNBLElBQUFYLGNBQU0sRUFBQ3RFLEtBQUssQ0FBQzhFLFFBQVEsQ0FBQ0ksS0FBSyxDQUFDTCxNQUFNLENBQUNHLElBQUksQ0FBQ0csUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0VBRXJEO0VBQ0E7RUFDQSxJQUFBYixjQUFNLEVBQUNPLE1BQU0sQ0FBQ0csSUFBSSxDQUFDRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUNILElBQUksQ0FBQ0ksUUFBUSxLQUFLLENBQUMsQ0FBQztBQUNyRCIsImlnbm9yZUxpc3QiOltdfQ==