@kepler.gl/deckgl-arrow-layers 3.1.0-alpha.1 → 3.1.0-alpha.2
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/constants.d.ts +13 -0
- package/dist/constants.js +26 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +34 -0
- package/dist/layers/geo-arrow-arc-layer.d.ts +62 -0
- package/dist/layers/geo-arrow-arc-layer.js +146 -0
- package/dist/layers/geo-arrow-scatterplot-layer.d.ts +56 -0
- package/dist/layers/geo-arrow-scatterplot-layer.js +223 -0
- package/dist/layers/geo-arrow-text-layer.d.ts +80 -0
- package/dist/layers/geo-arrow-text-layer.js +175 -0
- package/dist/types.d.ts +62 -0
- package/dist/types.js +6 -0
- package/dist/utils/picking.d.ts +16 -0
- package/dist/utils/picking.js +54 -0
- package/dist/utils/utils.d.ts +54 -0
- package/dist/utils/utils.js +307 -0
- package/dist/utils/validate.d.ts +12 -0
- package/dist/utils/validate.js +103 -0
- package/package.json +2 -2
package/dist/types.js
ADDED
@@ -0,0 +1,6 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbi8vIGRlY2suZ2wtY29tbXVuaXR5XG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgKGMpIHZpcy5nbCBjb250cmlidXRvcnNcblxuaW1wb3J0IHR5cGUge0JpbmFyeUF0dHJpYnV0ZSwgQ29sb3IsIFBpY2tpbmdJbmZvfSBmcm9tICdAZGVjay5nbC9jb3JlL3R5cGVkJztcbmltcG9ydCB7VHlwZWRBcnJheX0gZnJvbSAnQG1hdGguZ2wvdHlwZXMnO1xuaW1wb3J0ICogYXMgYXJyb3cgZnJvbSAnYXBhY2hlLWFycm93JztcblxuLyoqXG4gKiBBbiBpbmRpdmlkdWFsIGxheWVyJ3MgZGF0YVxuICovXG5leHBvcnQgdHlwZSBHZW9BcnJvd0xheWVyRGF0YTxUPiA9IHtcbiAgZGF0YTogVDtcbiAgbGVuZ3RoOiBudW1iZXI7XG4gIGF0dHJpYnV0ZXM/OiBSZWNvcmQ8c3RyaW5nLCBUeXBlZEFycmF5IHwgQnVmZmVyIHwgQmluYXJ5QXR0cmlidXRlPjtcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgdHlwZSBmb3IgbGF5ZXIgZGF0YSBoYW5kbGluZywgdXNlZCBpbiBgd3JhcEFjY2Vzc29yRnVuY3Rpb25gLlxuICovXG5leHBvcnQgdHlwZSBfR2VvQXJyb3dJbnRlcm5hbExheWVyRGF0YTxUPiA9IEdlb0Fycm93TGF5ZXJEYXRhPFQ+ICYge1xuICAvKipcbiAgICogQSBsb29rdXAgdGFibGUgZnJvbSBleHBhbmRlZCBtdWx0aS1nZW9tZXRyeSBpbmRleCB0byBvcmlnaW5hbCBpbmRleC5cbiAgICpcbiAgICogVGhpcyBpcyBvbWl0dGVkIGZyb20gdGhlIHVzZXItZmFjaW5nIHR5cGUgYmVjYXVzZSBpbiBgd3JhcEFjY2Vzc29yRnVuY3Rpb25gXG4gICAqIGluIGB1dGlscy50c2Agd2UgYXBwbHkgdGhlIGxvb2t1cCBmcm9tIFwiZXhwbG9kZWRcIiByb3cgdG8gXCJvcmlnaW5hbFwiIHJvdy5cbiAgICovXG4gIGludmVydGVkR2VvbU9mZnNldHM/OiBVaW50OEFycmF5IHwgVWludDE2QXJyYXkgfCBVaW50MzJBcnJheTtcbn07XG5cbmV4cG9ydCB0eXBlIEFjY2Vzc29yQ29udGV4dDxUPiA9IHtcbiAgLyoqIFRoZSBjdXJyZW50IHJvdyBpbmRleCBvZiB0aGUgY3VycmVudCBpdGVyYXRpb24gKi9cbiAgaW5kZXg6IG51bWJlcjtcbiAgLyoqIFRoZSB2YWx1ZSBvZiB0aGUgYGRhdGFgIHByb3AgKi9cbiAgZGF0YTogR2VvQXJyb3dMYXllckRhdGE8VD47XG4gIC8qKiBBIHByZS1hbGxvY2F0ZWQgYXJyYXkuIFRoZSBhY2Nlc3NvciBmdW5jdGlvbiBjYW4gb3B0aW9uYWxseSBmaWxsIGRhdGEgaW50byB0aGlzIGFycmF5IGFuZCByZXR1cm4gaXQsXG4gICAqIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBuZXcgYXJyYXkgZm9yIGV2ZXJ5IG9iamVjdC4gSW4gc29tZSBicm93c2VycyB0aGlzIGltcHJvdmVzIHBlcmZvcm1hbmNlIHNpZ25pZmljYW50bHlcbiAgICogYnkgcmVkdWNpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uLiAqL1xuICB0YXJnZXQ6IG51bWJlcltdO1xufTtcblxuLyoqXG4gKiBJbnRlcm5hbCB0eXBlIGZvciBsYXllciBkYXRhIGhhbmRsaW5nLCB1c2VkIGluIGB3cmFwQWNjZXNzb3JGdW5jdGlvbmAuXG4gKi9cbmV4cG9ydCB0eXBlIF9JbnRlcm5hbEFjY2Vzc29yQ29udGV4dDxUPiA9IEFjY2Vzc29yQ29udGV4dDxUPiAmIHtcbiAgLyoqIFRoZSB2YWx1ZSBvZiB0aGUgYGRhdGFgIHByb3AgKi9cbiAgZGF0YTogX0dlb0Fycm93SW50ZXJuYWxMYXllckRhdGE8VD47XG59O1xuXG4vKiogRnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdmFsdWUgZm9yIGVhY2ggb2JqZWN0LiAqL1xuZXhwb3J0IHR5cGUgQWNjZXNzb3JGdW5jdGlvbjxJbiwgT3V0PiA9IChcbiAgLyoqIENvbnRleHR1YWwgaW5mb3JtYXRpb24gb2YgdGhlIGN1cnJlbnQgZWxlbWVudC4gKi9cbiAgb2JqZWN0SW5mbzogQWNjZXNzb3JDb250ZXh0PEluPlxuKSA9PiBPdXQ7XG5cbi8qKiBFaXRoZXIgYSB1bmlmb3JtIHZhbHVlIGZvciBhbGwgb2JqZWN0cywgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB2YWx1ZSBmb3IgZWFjaCBvYmplY3QuICovXG5leHBvcnQgdHlwZSBBY2Nlc3NvcjxJbiwgT3V0PiA9IE91dCB8IEFjY2Vzc29yRnVuY3Rpb248SW4sIE91dD47XG5cbmV4cG9ydCB0eXBlIEdlb0Fycm93UGlja2luZ0luZm8gPSBQaWNraW5nSW5mbyAmIHtcbiAgb2JqZWN0PzogYXJyb3cuU3RydWN0Um93UHJveHk7XG59O1xuXG5leHBvcnQgdHlwZSBGbG9hdEFjY2Vzc29yID0gYXJyb3cuVmVjdG9yPGFycm93LkZsb2F0PiB8IEFjY2Vzc29yPGFycm93LlJlY29yZEJhdGNoLCBudW1iZXI+O1xuZXhwb3J0IHR5cGUgVGltZXN0YW1wQWNjZXNzb3IgPSBhcnJvdy5WZWN0b3I8YXJyb3cuTGlzdDxhcnJvdy5GbG9hdD4+O1xuZXhwb3J0IHR5cGUgQ29sb3JBY2Nlc3NvciA9XG4gIHwgYXJyb3cuVmVjdG9yPGFycm93LkZpeGVkU2l6ZUxpc3Q8YXJyb3cuVWludDg+PlxuICB8IEFjY2Vzc29yPGFycm93LlJlY29yZEJhdGNoLCBDb2xvciB8IENvbG9yW10+O1xuZXhwb3J0IHR5cGUgTm9ybWFsQWNjZXNzb3IgPVxuICB8IGFycm93LlZlY3RvcjxhcnJvdy5GaXhlZFNpemVMaXN0PGFycm93LkZsb2F0MzI+PlxuICB8IEFjY2Vzc29yPGFycm93LlRhYmxlLCBhcnJvdy5WZWN0b3I8YXJyb3cuRml4ZWRTaXplTGlzdDxhcnJvdy5GbG9hdDMyPj4+O1xuXG5leHBvcnQgdHlwZSBFeHRlbnNpb25Qcm9wcyA9IHtcbiAgZ2V0RmlsdGVyZWQ/OiAoe2luZGV4OiBudW1iZXJ9KSA9PiBudW1iZXI7XG4gIGdldEZpbHRlclZhbHVlPzogKGQ6IGFueSwgb2JqZWN0SW5mbz86IHtpbmRleDogbnVtYmVyfSkgPT4gKG51bWJlciB8IG51bWJlcltdKVtdO1xufTtcbiJdLCJtYXBwaW5ncyI6IiIsImlnbm9yZUxpc3QiOltdfQ==
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import * as arrow from 'apache-arrow';
|
2
|
+
import { GetPickingInfoParams } from '@deck.gl/core/typed';
|
3
|
+
import { GeoArrowPickingInfo } from '../types';
|
4
|
+
export interface GeoArrowExtraPickingProps {
|
5
|
+
recordBatchIdx: number;
|
6
|
+
tableOffsets: Uint32Array;
|
7
|
+
data: {
|
8
|
+
invertedGeomOffsets?: Uint8Array | Uint16Array | Uint32Array;
|
9
|
+
};
|
10
|
+
}
|
11
|
+
export declare function getPickingInfo({ info, sourceLayer }: GetPickingInfoParams & {
|
12
|
+
sourceLayer: {
|
13
|
+
props: GeoArrowExtraPickingProps;
|
14
|
+
};
|
15
|
+
}, table: arrow.Table): GeoArrowPickingInfo;
|
16
|
+
export declare function computeChunkOffsets<T extends arrow.DataType>(chunks: ReadonlyArray<arrow.Data<T>>): Uint32Array;
|
@@ -0,0 +1,54 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
5
|
+
value: true
|
6
|
+
});
|
7
|
+
exports.computeChunkOffsets = computeChunkOffsets;
|
8
|
+
exports.getPickingInfo = getPickingInfo;
|
9
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
10
|
+
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; }
|
11
|
+
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) { (0, _defineProperty2["default"])(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; }
|
12
|
+
// SPDX-License-Identifier: MIT
|
13
|
+
// Copyright contributors to the kepler.gl project
|
14
|
+
|
15
|
+
// deck.gl-community
|
16
|
+
// SPDX-License-Identifier: MIT
|
17
|
+
// Copyright (c) vis.gl contributors
|
18
|
+
|
19
|
+
function getPickingInfo(_ref, table) {
|
20
|
+
var info = _ref.info,
|
21
|
+
sourceLayer = _ref.sourceLayer;
|
22
|
+
// Geometry index as rendered
|
23
|
+
var index = info.index;
|
24
|
+
|
25
|
+
// if a Multi- geometry dataset, map from the rendered index back to the
|
26
|
+
// feature index
|
27
|
+
if (sourceLayer.props.data.invertedGeomOffsets) {
|
28
|
+
index = sourceLayer.props.data.invertedGeomOffsets[index];
|
29
|
+
}
|
30
|
+
var recordBatchIdx = sourceLayer.props.recordBatchIdx;
|
31
|
+
var tableOffsets = sourceLayer.props.tableOffsets;
|
32
|
+
var batch = table.batches[recordBatchIdx];
|
33
|
+
var row = batch.get(index);
|
34
|
+
if (row === null) {
|
35
|
+
return info;
|
36
|
+
}
|
37
|
+
var currentBatchOffset = tableOffsets[recordBatchIdx];
|
38
|
+
|
39
|
+
// Update index to be _global_ index, not within the specific record batch
|
40
|
+
index += currentBatchOffset;
|
41
|
+
return _objectSpread(_objectSpread({}, info), {}, {
|
42
|
+
index: index,
|
43
|
+
object: row
|
44
|
+
});
|
45
|
+
}
|
46
|
+
|
47
|
+
// This is vendored from Arrow JS because it's a private API
|
48
|
+
function computeChunkOffsets(chunks) {
|
49
|
+
return chunks.reduce(function (offsets, chunk, index) {
|
50
|
+
offsets[index + 1] = offsets[index] + chunk.length;
|
51
|
+
return offsets;
|
52
|
+
}, new Uint32Array(chunks.length + 1));
|
53
|
+
}
|
54
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRQaWNraW5nSW5mbyIsIl9yZWYiLCJ0YWJsZSIsImluZm8iLCJzb3VyY2VMYXllciIsImluZGV4IiwicHJvcHMiLCJkYXRhIiwiaW52ZXJ0ZWRHZW9tT2Zmc2V0cyIsInJlY29yZEJhdGNoSWR4IiwidGFibGVPZmZzZXRzIiwiYmF0Y2giLCJiYXRjaGVzIiwicm93IiwiZ2V0IiwiY3VycmVudEJhdGNoT2Zmc2V0IiwiX29iamVjdFNwcmVhZCIsIm9iamVjdCIsImNvbXB1dGVDaHVua09mZnNldHMiLCJjaHVua3MiLCJyZWR1Y2UiLCJvZmZzZXRzIiwiY2h1bmsiLCJsZW5ndGgiLCJVaW50MzJBcnJheSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9waWNraW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbi8vIGRlY2suZ2wtY29tbXVuaXR5XG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgKGMpIHZpcy5nbCBjb250cmlidXRvcnNcblxuaW1wb3J0ICogYXMgYXJyb3cgZnJvbSAnYXBhY2hlLWFycm93JztcbmltcG9ydCB7R2V0UGlja2luZ0luZm9QYXJhbXN9IGZyb20gJ0BkZWNrLmdsL2NvcmUvdHlwZWQnO1xuaW1wb3J0IHtHZW9BcnJvd1BpY2tpbmdJbmZvfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VvQXJyb3dFeHRyYVBpY2tpbmdQcm9wcyB7XG4gIHJlY29yZEJhdGNoSWR4OiBudW1iZXI7XG4gIHRhYmxlT2Zmc2V0czogVWludDMyQXJyYXk7XG4gIGRhdGE6IHtcbiAgICBpbnZlcnRlZEdlb21PZmZzZXRzPzogVWludDhBcnJheSB8IFVpbnQxNkFycmF5IHwgVWludDMyQXJyYXk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQaWNraW5nSW5mbyhcbiAge1xuICAgIGluZm8sXG4gICAgc291cmNlTGF5ZXJcbiAgfTogR2V0UGlja2luZ0luZm9QYXJhbXMgJiB7XG4gICAgc291cmNlTGF5ZXI6IHtwcm9wczogR2VvQXJyb3dFeHRyYVBpY2tpbmdQcm9wc307XG4gIH0sXG4gIHRhYmxlOiBhcnJvdy5UYWJsZVxuKTogR2VvQXJyb3dQaWNraW5nSW5mbyB7XG4gIC8vIEdlb21ldHJ5IGluZGV4IGFzIHJlbmRlcmVkXG4gIGxldCBpbmRleCA9IGluZm8uaW5kZXg7XG5cbiAgLy8gaWYgYSBNdWx0aS0gZ2VvbWV0cnkgZGF0YXNldCwgbWFwIGZyb20gdGhlIHJlbmRlcmVkIGluZGV4IGJhY2sgdG8gdGhlXG4gIC8vIGZlYXR1cmUgaW5kZXhcbiAgaWYgKHNvdXJjZUxheWVyLnByb3BzLmRhdGEuaW52ZXJ0ZWRHZW9tT2Zmc2V0cykge1xuICAgIGluZGV4ID0gc291cmNlTGF5ZXIucHJvcHMuZGF0YS5pbnZlcnRlZEdlb21PZmZzZXRzW2luZGV4XTtcbiAgfVxuXG4gIGNvbnN0IHJlY29yZEJhdGNoSWR4ID0gc291cmNlTGF5ZXIucHJvcHMucmVjb3JkQmF0Y2hJZHg7XG4gIGNvbnN0IHRhYmxlT2Zmc2V0cyA9IHNvdXJjZUxheWVyLnByb3BzLnRhYmxlT2Zmc2V0cztcblxuICBjb25zdCBiYXRjaCA9IHRhYmxlLmJhdGNoZXNbcmVjb3JkQmF0Y2hJZHhdO1xuICBjb25zdCByb3cgPSBiYXRjaC5nZXQoaW5kZXgpO1xuICBpZiAocm93ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGluZm87XG4gIH1cblxuICBjb25zdCBjdXJyZW50QmF0Y2hPZmZzZXQgPSB0YWJsZU9mZnNldHNbcmVjb3JkQmF0Y2hJZHhdO1xuXG4gIC8vIFVwZGF0ZSBpbmRleCB0byBiZSBfZ2xvYmFsXyBpbmRleCwgbm90IHdpdGhpbiB0aGUgc3BlY2lmaWMgcmVjb3JkIGJhdGNoXG4gIGluZGV4ICs9IGN1cnJlbnRCYXRjaE9mZnNldDtcbiAgcmV0dXJuIHtcbiAgICAuLi5pbmZvLFxuICAgIGluZGV4LFxuICAgIG9iamVjdDogcm93XG4gIH07XG59XG5cbi8vIFRoaXMgaXMgdmVuZG9yZWQgZnJvbSBBcnJvdyBKUyBiZWNhdXNlIGl0J3MgYSBwcml2YXRlIEFQSVxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVDaHVua09mZnNldHM8VCBleHRlbmRzIGFycm93LkRhdGFUeXBlPihcbiAgY2h1bmtzOiBSZWFkb25seUFycmF5PGFycm93LkRhdGE8VD4+XG4pIHtcbiAgcmV0dXJuIGNodW5rcy5yZWR1Y2UoKG9mZnNldHMsIGNodW5rLCBpbmRleCkgPT4ge1xuICAgIG9mZnNldHNbaW5kZXggKyAxXSA9IG9mZnNldHNbaW5kZXhdICsgY2h1bmsubGVuZ3RoO1xuICAgIHJldHVybiBvZmZzZXRzO1xuICB9LCBuZXcgVWludDMyQXJyYXkoY2h1bmtzLmxlbmd0aCArIDEpKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFjTyxTQUFTQSxjQUFjQSxDQUFBQyxJQUFBLEVBTzVCQyxLQUFrQixFQUNHO0VBQUEsSUFObkJDLElBQUksR0FBQUYsSUFBQSxDQUFKRSxJQUFJO0lBQ0pDLFdBQVcsR0FBQUgsSUFBQSxDQUFYRyxXQUFXO0VBTWI7RUFDQSxJQUFJQyxLQUFLLEdBQUdGLElBQUksQ0FBQ0UsS0FBSzs7RUFFdEI7RUFDQTtFQUNBLElBQUlELFdBQVcsQ0FBQ0UsS0FBSyxDQUFDQyxJQUFJLENBQUNDLG1CQUFtQixFQUFFO0lBQzlDSCxLQUFLLEdBQUdELFdBQVcsQ0FBQ0UsS0FBSyxDQUFDQyxJQUFJLENBQUNDLG1CQUFtQixDQUFDSCxLQUFLLENBQUM7RUFDM0Q7RUFFQSxJQUFNSSxjQUFjLEdBQUdMLFdBQVcsQ0FBQ0UsS0FBSyxDQUFDRyxjQUFjO0VBQ3ZELElBQU1DLFlBQVksR0FBR04sV0FBVyxDQUFDRSxLQUFLLENBQUNJLFlBQVk7RUFFbkQsSUFBTUMsS0FBSyxHQUFHVCxLQUFLLENBQUNVLE9BQU8sQ0FBQ0gsY0FBYyxDQUFDO0VBQzNDLElBQU1JLEdBQUcsR0FBR0YsS0FBSyxDQUFDRyxHQUFHLENBQUNULEtBQUssQ0FBQztFQUM1QixJQUFJUSxHQUFHLEtBQUssSUFBSSxFQUFFO0lBQ2hCLE9BQU9WLElBQUk7RUFDYjtFQUVBLElBQU1ZLGtCQUFrQixHQUFHTCxZQUFZLENBQUNELGNBQWMsQ0FBQzs7RUFFdkQ7RUFDQUosS0FBSyxJQUFJVSxrQkFBa0I7RUFDM0IsT0FBQUMsYUFBQSxDQUFBQSxhQUFBLEtBQ0tiLElBQUk7SUFDUEUsS0FBSyxFQUFMQSxLQUFLO0lBQ0xZLE1BQU0sRUFBRUo7RUFBRztBQUVmOztBQUVBO0FBQ08sU0FBU0ssbUJBQW1CQSxDQUNqQ0MsTUFBb0MsRUFDcEM7RUFDQSxPQUFPQSxNQUFNLENBQUNDLE1BQU0sQ0FBQyxVQUFDQyxPQUFPLEVBQUVDLEtBQUssRUFBRWpCLEtBQUssRUFBSztJQUM5Q2dCLE9BQU8sQ0FBQ2hCLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBR2dCLE9BQU8sQ0FBQ2hCLEtBQUssQ0FBQyxHQUFHaUIsS0FBSyxDQUFDQyxNQUFNO0lBQ2xELE9BQU9GLE9BQU87RUFDaEIsQ0FBQyxFQUFFLElBQUlHLFdBQVcsQ0FBQ0wsTUFBTSxDQUFDSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEMiLCJpZ25vcmVMaXN0IjpbXX0=
|
@@ -0,0 +1,54 @@
|
|
1
|
+
import * as arrow from 'apache-arrow';
|
2
|
+
import * as ga from '@geoarrow/geoarrow-js';
|
3
|
+
export declare type TypedArray = Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | Int8Array | Int16Array | Int32Array | Float32Array | Float64Array;
|
4
|
+
export declare function findGeometryColumnIndex(schema: arrow.Schema, extensionName: string, geometryColumnName?: string | null): number | null;
|
5
|
+
/**
|
6
|
+
* Returns `true` if the input is a reference to a column in the table
|
7
|
+
*/
|
8
|
+
export declare function isColumnReference(input: any): input is string;
|
9
|
+
declare type AssignAccessorProps = {
|
10
|
+
/** The object on which to assign the resolved accesor */
|
11
|
+
props: Record<string, any>;
|
12
|
+
/** The name of the prop to set */
|
13
|
+
propName: string;
|
14
|
+
/** The user-supplied input to the layer. Must either be a scalar value or a reference to a column in the table. */
|
15
|
+
propInput: any;
|
16
|
+
/** Numeric index in the table */
|
17
|
+
chunkIdx: number;
|
18
|
+
/** a map from the geometry index to the coord offsets for that geometry. */
|
19
|
+
geomCoordOffsets?: Int32Array | null;
|
20
|
+
/** Absolute offset of the batch in the table/vector. Added to the sampling index. */
|
21
|
+
batchOffset?: number;
|
22
|
+
};
|
23
|
+
/**
|
24
|
+
* Resolve accessor and assign to props object
|
25
|
+
*
|
26
|
+
* This is useful as a helper function because a scalar prop is set at the top
|
27
|
+
* level while a vectorized prop is set inside data.attributes
|
28
|
+
*
|
29
|
+
*/
|
30
|
+
export declare function assignAccessor(args: AssignAccessorProps): void;
|
31
|
+
/**
|
32
|
+
* Expand an array from "one element per geometry" to "one element per coordinate"
|
33
|
+
*
|
34
|
+
* @param input: the input array to expand
|
35
|
+
* @param size : the number of nested elements in the input array per geometry. So for example, for RGB data this would be 3, for RGBA this would be 4. For radius, this would be 1.
|
36
|
+
* @param geomOffsets : an offsets array mapping from the geometry to the coordinate indexes. So in the case of a LineStringArray, this is retrieved directly from the GeoArrow storage. In the case of a PolygonArray, this comes from the resolved indexes that need to be given to the SolidPolygonLayer anyways.
|
37
|
+
*
|
38
|
+
* @return {TypedArray} values expanded to be per-coordinate
|
39
|
+
*/
|
40
|
+
export declare function expandArrayToCoords<T extends TypedArray>(input: T, size: number, geomOffsets: Int32Array): T;
|
41
|
+
/**
|
42
|
+
* Get a geometry vector with the specified extension type name from the table.
|
43
|
+
*/
|
44
|
+
export declare function getGeometryVector(table: arrow.Table, geoarrowTypeName: string): arrow.Vector | null;
|
45
|
+
export declare function getListNestingLevels(data: arrow.Data): number;
|
46
|
+
export declare function getMultiLineStringResolvedOffsets(data: ga.data.MultiLineStringData): Int32Array;
|
47
|
+
export declare function getPolygonResolvedOffsets(data: ga.data.PolygonData): Int32Array;
|
48
|
+
export declare function getMultiPolygonResolvedOffsets(data: ga.data.MultiPolygonData): Int32Array;
|
49
|
+
/**
|
50
|
+
* Invert offsets so that lookup can go in the opposite direction
|
51
|
+
*/
|
52
|
+
export declare function invertOffsets(offsets: Int32Array): Uint8Array | Uint16Array | Uint32Array;
|
53
|
+
export declare function extractAccessorsFromProps(props: Record<string, any>, excludeKeys: string[]): [Record<string, any>, Record<string, any>];
|
54
|
+
export {};
|
@@ -0,0 +1,307 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
6
|
+
value: true
|
7
|
+
});
|
8
|
+
exports.assignAccessor = assignAccessor;
|
9
|
+
exports.expandArrayToCoords = expandArrayToCoords;
|
10
|
+
exports.extractAccessorsFromProps = extractAccessorsFromProps;
|
11
|
+
exports.findGeometryColumnIndex = findGeometryColumnIndex;
|
12
|
+
exports.getGeometryVector = getGeometryVector;
|
13
|
+
exports.getListNestingLevels = getListNestingLevels;
|
14
|
+
exports.getMultiLineStringResolvedOffsets = getMultiLineStringResolvedOffsets;
|
15
|
+
exports.getMultiPolygonResolvedOffsets = getMultiPolygonResolvedOffsets;
|
16
|
+
exports.getPolygonResolvedOffsets = getPolygonResolvedOffsets;
|
17
|
+
exports.invertOffsets = invertOffsets;
|
18
|
+
exports.isColumnReference = isColumnReference;
|
19
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
20
|
+
var _typed = require("@deck.gl/core/typed");
|
21
|
+
var arrow = _interopRequireWildcard(require("apache-arrow"));
|
22
|
+
var ga = _interopRequireWildcard(require("@geoarrow/geoarrow-js"));
|
23
|
+
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); }
|
24
|
+
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; }
|
25
|
+
// SPDX-License-Identifier: MIT
|
26
|
+
// Copyright contributors to the kepler.gl project
|
27
|
+
|
28
|
+
// deck.gl-community
|
29
|
+
// SPDX-License-Identifier: MIT
|
30
|
+
// Copyright (c) vis.gl contributors
|
31
|
+
|
32
|
+
function findGeometryColumnIndex(schema, extensionName, geometryColumnName) {
|
33
|
+
var index = schema.fields.findIndex(function (field) {
|
34
|
+
return field.name === geometryColumnName || field.metadata.get('ARROW:extension:name') === extensionName;
|
35
|
+
});
|
36
|
+
return index !== -1 ? index : null;
|
37
|
+
}
|
38
|
+
|
39
|
+
/**
|
40
|
+
* Returns `true` if the input is a reference to a column in the table
|
41
|
+
*/
|
42
|
+
function isColumnReference(input) {
|
43
|
+
return typeof input === 'string';
|
44
|
+
}
|
45
|
+
function isDataInterleavedCoords(data) {
|
46
|
+
// TODO: also check 2 or 3d? Float64?
|
47
|
+
return data.type instanceof arrow.FixedSizeList;
|
48
|
+
}
|
49
|
+
function isDataSeparatedCoords(data) {
|
50
|
+
// TODO: also check child names? Float64?
|
51
|
+
return data.type instanceof arrow.Struct;
|
52
|
+
}
|
53
|
+
|
54
|
+
/**
|
55
|
+
* Convert geoarrow Struct coordinates to FixedSizeList coords
|
56
|
+
*
|
57
|
+
* The GeoArrow spec allows for either separated or interleaved coords, but at
|
58
|
+
* this time deck.gl only supports interleaved.
|
59
|
+
*/
|
60
|
+
// TODO: this hasn't been tested yet
|
61
|
+
// @ts-expect-error
|
62
|
+
function convertStructToFixedSizeList(coords) {
|
63
|
+
if (isDataInterleavedCoords(coords)) {
|
64
|
+
return coords;
|
65
|
+
} else if (isDataSeparatedCoords(coords)) {
|
66
|
+
// TODO: support 3d
|
67
|
+
var interleavedCoords = new Float64Array(coords.length * 2);
|
68
|
+
var _coords$children = (0, _slicedToArray2["default"])(coords.children, 2),
|
69
|
+
xChild = _coords$children[0],
|
70
|
+
yChild = _coords$children[1];
|
71
|
+
for (var i = 0; i < coords.length; i++) {
|
72
|
+
interleavedCoords[i * 2] = xChild.values[i];
|
73
|
+
interleavedCoords[i * 2 + 1] = yChild.values[i];
|
74
|
+
}
|
75
|
+
var childDataType = new arrow.Float64();
|
76
|
+
var dataType = new arrow.FixedSizeList(2, new arrow.Field('coords', childDataType));
|
77
|
+
var interleavedCoordsData = arrow.makeData({
|
78
|
+
type: childDataType,
|
79
|
+
length: interleavedCoords.length
|
80
|
+
});
|
81
|
+
var data = arrow.makeData({
|
82
|
+
type: dataType,
|
83
|
+
length: coords.length,
|
84
|
+
nullCount: coords.nullCount,
|
85
|
+
nullBitmap: coords.nullBitmap,
|
86
|
+
child: interleavedCoordsData
|
87
|
+
});
|
88
|
+
return data;
|
89
|
+
}
|
90
|
+
(0, _typed.assert)(false);
|
91
|
+
}
|
92
|
+
/**
|
93
|
+
* A wrapper around a user-provided accessor function
|
94
|
+
*
|
95
|
+
* For layers like Scatterplot, Path, and Polygon, we automatically handle
|
96
|
+
* "exploding" the table when multi-geometry input are provided. This means that
|
97
|
+
* the upstream `index` value passed to the user will be the correct row index
|
98
|
+
* _only_ for non-exploded data.
|
99
|
+
*
|
100
|
+
* With this function, we simplify the user usage by automatically converting
|
101
|
+
* back from "exploded" index back to the original row index.
|
102
|
+
*/
|
103
|
+
function wrapAccessorFunction(objectInfo, userAccessorFunction, batchOffset) {
|
104
|
+
var index = objectInfo.index,
|
105
|
+
data = objectInfo.data;
|
106
|
+
var newIndex = index + batchOffset;
|
107
|
+
if (data.invertedGeomOffsets !== undefined) {
|
108
|
+
newIndex = data.invertedGeomOffsets[index];
|
109
|
+
}
|
110
|
+
var newObjectData = {
|
111
|
+
data: data.data,
|
112
|
+
length: data.length,
|
113
|
+
attributes: data.attributes
|
114
|
+
};
|
115
|
+
var newObjectInfo = {
|
116
|
+
index: newIndex,
|
117
|
+
data: newObjectData,
|
118
|
+
target: objectInfo.target
|
119
|
+
};
|
120
|
+
return userAccessorFunction(newObjectInfo);
|
121
|
+
}
|
122
|
+
|
123
|
+
/**
|
124
|
+
* Resolve accessor and assign to props object
|
125
|
+
*
|
126
|
+
* This is useful as a helper function because a scalar prop is set at the top
|
127
|
+
* level while a vectorized prop is set inside data.attributes
|
128
|
+
*
|
129
|
+
*/
|
130
|
+
function assignAccessor(args) {
|
131
|
+
var props = args.props,
|
132
|
+
propName = args.propName,
|
133
|
+
propInput = args.propInput,
|
134
|
+
chunkIdx = args.chunkIdx,
|
135
|
+
geomCoordOffsets = args.geomCoordOffsets,
|
136
|
+
_args$batchOffset = args.batchOffset,
|
137
|
+
batchOffset = _args$batchOffset === void 0 ? 0 : _args$batchOffset;
|
138
|
+
if (propInput === undefined) {
|
139
|
+
return;
|
140
|
+
}
|
141
|
+
if (propInput instanceof arrow.Vector) {
|
142
|
+
var columnData = propInput.data[chunkIdx];
|
143
|
+
if (arrow.DataType.isFixedSizeList(columnData)) {
|
144
|
+
(0, _typed.assert)(columnData.children.length === 1);
|
145
|
+
var values = columnData.children[0].values;
|
146
|
+
if (geomCoordOffsets) {
|
147
|
+
values = expandArrayToCoords(values, columnData.type.listSize, geomCoordOffsets);
|
148
|
+
}
|
149
|
+
props.data.attributes[propName] = {
|
150
|
+
value: values,
|
151
|
+
size: columnData.type.listSize,
|
152
|
+
// Set to `true` to signify that colors are already 0-255, and deck/luma
|
153
|
+
// does not need to rescale
|
154
|
+
// https://github.com/visgl/deck.gl/blob/401d624c0529faaa62125714c376b3ba3b8f379f/docs/api-reference/core/attribute-manager.md?plain=1#L66
|
155
|
+
normalized: true
|
156
|
+
};
|
157
|
+
} else if (arrow.DataType.isFloat(columnData)) {
|
158
|
+
var _values = columnData.values;
|
159
|
+
if (geomCoordOffsets) {
|
160
|
+
_values = expandArrayToCoords(_values, 1, geomCoordOffsets);
|
161
|
+
}
|
162
|
+
props.data.attributes[propName] = {
|
163
|
+
value: _values,
|
164
|
+
size: 1
|
165
|
+
};
|
166
|
+
}
|
167
|
+
} else if (typeof propInput === 'function') {
|
168
|
+
props[propName] = function (object, objectInfo) {
|
169
|
+
// Special case that doesn't have the same parameters
|
170
|
+
if (propName === 'getPolygonOffset') {
|
171
|
+
return propInput(object, objectInfo);
|
172
|
+
}
|
173
|
+
return wrapAccessorFunction(objectInfo, propInput, batchOffset);
|
174
|
+
};
|
175
|
+
} else {
|
176
|
+
props[propName] = propInput;
|
177
|
+
}
|
178
|
+
}
|
179
|
+
|
180
|
+
/**
|
181
|
+
* Expand an array from "one element per geometry" to "one element per coordinate"
|
182
|
+
*
|
183
|
+
* @param input: the input array to expand
|
184
|
+
* @param size : the number of nested elements in the input array per geometry. So for example, for RGB data this would be 3, for RGBA this would be 4. For radius, this would be 1.
|
185
|
+
* @param geomOffsets : an offsets array mapping from the geometry to the coordinate indexes. So in the case of a LineStringArray, this is retrieved directly from the GeoArrow storage. In the case of a PolygonArray, this comes from the resolved indexes that need to be given to the SolidPolygonLayer anyways.
|
186
|
+
*
|
187
|
+
* @return {TypedArray} values expanded to be per-coordinate
|
188
|
+
*/
|
189
|
+
function expandArrayToCoords(input, size, geomOffsets) {
|
190
|
+
var numCoords = geomOffsets[geomOffsets.length - 1];
|
191
|
+
// @ts-expect-error
|
192
|
+
var outputArray = new input.constructor(numCoords * size);
|
193
|
+
|
194
|
+
// geomIdx is an index into the geomOffsets array
|
195
|
+
// geomIdx is also the geometry/table index
|
196
|
+
for (var geomIdx = 0; geomIdx < geomOffsets.length - 1; geomIdx++) {
|
197
|
+
// geomOffsets maps from the geometry index to the coord index
|
198
|
+
// So here we get the range of coords that this geometry covers
|
199
|
+
var lastCoordIdx = geomOffsets[geomIdx];
|
200
|
+
var nextCoordIdx = geomOffsets[geomIdx + 1];
|
201
|
+
|
202
|
+
// Iterate over this range of coord indices
|
203
|
+
for (var coordIdx = lastCoordIdx; coordIdx < nextCoordIdx; coordIdx++) {
|
204
|
+
// Iterate over size
|
205
|
+
for (var i = 0; i < size; i++) {
|
206
|
+
// Copy from the geometry index in `input` to the coord index in
|
207
|
+
// `output`
|
208
|
+
outputArray[coordIdx * size + i] = input[geomIdx * size + i];
|
209
|
+
}
|
210
|
+
}
|
211
|
+
}
|
212
|
+
return outputArray;
|
213
|
+
}
|
214
|
+
|
215
|
+
/**
|
216
|
+
* Get a geometry vector with the specified extension type name from the table.
|
217
|
+
*/
|
218
|
+
function getGeometryVector(table, geoarrowTypeName) {
|
219
|
+
var geometryColumnIdx = findGeometryColumnIndex(table.schema, geoarrowTypeName);
|
220
|
+
if (geometryColumnIdx === null) {
|
221
|
+
return null;
|
222
|
+
// throw new Error(`No column found with extension type ${geoarrowTypeName}`);
|
223
|
+
}
|
224
|
+
return table.getChildAt(geometryColumnIdx);
|
225
|
+
}
|
226
|
+
function getListNestingLevels(data) {
|
227
|
+
var nestingLevels = 0;
|
228
|
+
if (arrow.DataType.isList(data.type)) {
|
229
|
+
nestingLevels += 1;
|
230
|
+
data = data.children[0];
|
231
|
+
}
|
232
|
+
return nestingLevels;
|
233
|
+
}
|
234
|
+
function getMultiLineStringResolvedOffsets(data) {
|
235
|
+
var geomOffsets = data.valueOffsets;
|
236
|
+
var lineStringData = ga.child.getMultiLineStringChild(data);
|
237
|
+
var ringOffsets = lineStringData.valueOffsets;
|
238
|
+
var resolvedRingOffsets = new Int32Array(geomOffsets.length);
|
239
|
+
for (var i = 0; i < resolvedRingOffsets.length; ++i) {
|
240
|
+
// Perform the lookup into the ringIndices array using the geomOffsets
|
241
|
+
// array
|
242
|
+
resolvedRingOffsets[i] = ringOffsets[geomOffsets[i]];
|
243
|
+
}
|
244
|
+
return resolvedRingOffsets;
|
245
|
+
}
|
246
|
+
function getPolygonResolvedOffsets(data) {
|
247
|
+
var geomOffsets = data.valueOffsets;
|
248
|
+
var ringData = ga.child.getPolygonChild(data);
|
249
|
+
var ringOffsets = ringData.valueOffsets;
|
250
|
+
var resolvedRingOffsets = new Int32Array(geomOffsets.length);
|
251
|
+
for (var i = 0; i < resolvedRingOffsets.length; ++i) {
|
252
|
+
// Perform the lookup into the ringIndices array using the geomOffsets
|
253
|
+
// array
|
254
|
+
resolvedRingOffsets[i] = ringOffsets[geomOffsets[i]];
|
255
|
+
}
|
256
|
+
return resolvedRingOffsets;
|
257
|
+
}
|
258
|
+
function getMultiPolygonResolvedOffsets(data) {
|
259
|
+
var polygonData = ga.child.getMultiPolygonChild(data);
|
260
|
+
var ringData = ga.child.getPolygonChild(polygonData);
|
261
|
+
var geomOffsets = data.valueOffsets;
|
262
|
+
var polygonOffsets = polygonData.valueOffsets;
|
263
|
+
var ringOffsets = ringData.valueOffsets;
|
264
|
+
var resolvedRingOffsets = new Int32Array(geomOffsets.length);
|
265
|
+
for (var i = 0; i < resolvedRingOffsets.length; ++i) {
|
266
|
+
resolvedRingOffsets[i] = ringOffsets[polygonOffsets[geomOffsets[i]]];
|
267
|
+
}
|
268
|
+
return resolvedRingOffsets;
|
269
|
+
}
|
270
|
+
|
271
|
+
/**
|
272
|
+
* Invert offsets so that lookup can go in the opposite direction
|
273
|
+
*/
|
274
|
+
function invertOffsets(offsets) {
|
275
|
+
var largestOffset = offsets[offsets.length - 1];
|
276
|
+
var arrayConstructor = offsets.length < Math.pow(2, 8) ? Uint8Array : offsets.length < Math.pow(2, 16) ? Uint16Array : Uint32Array;
|
277
|
+
var invertedOffsets = new arrayConstructor(largestOffset);
|
278
|
+
for (var arrayIdx = 0; arrayIdx < offsets.length - 1; arrayIdx++) {
|
279
|
+
var thisOffset = offsets[arrayIdx];
|
280
|
+
var nextOffset = offsets[arrayIdx + 1];
|
281
|
+
for (var offset = thisOffset; offset < nextOffset; offset++) {
|
282
|
+
invertedOffsets[offset] = arrayIdx;
|
283
|
+
}
|
284
|
+
}
|
285
|
+
return invertedOffsets;
|
286
|
+
}
|
287
|
+
|
288
|
+
// TODO: better typing
|
289
|
+
function extractAccessorsFromProps(props, excludeKeys) {
|
290
|
+
var accessors = {};
|
291
|
+
var otherProps = {};
|
292
|
+
for (var _i = 0, _Object$entries = Object.entries(props); _i < _Object$entries.length; _i++) {
|
293
|
+
var _Object$entries$_i = (0, _slicedToArray2["default"])(_Object$entries[_i], 2),
|
294
|
+
key = _Object$entries$_i[0],
|
295
|
+
value = _Object$entries$_i[1];
|
296
|
+
if (excludeKeys.includes(key)) {
|
297
|
+
continue;
|
298
|
+
}
|
299
|
+
if (key.startsWith('get')) {
|
300
|
+
accessors[key] = value;
|
301
|
+
} else {
|
302
|
+
otherProps[key] = value;
|
303
|
+
}
|
304
|
+
}
|
305
|
+
return [accessors, otherProps];
|
306
|
+
}
|
307
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZWQiLCJyZXF1aXJlIiwiYXJyb3ciLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsImdhIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiZmluZEdlb21ldHJ5Q29sdW1uSW5kZXgiLCJzY2hlbWEiLCJleHRlbnNpb25OYW1lIiwiZ2VvbWV0cnlDb2x1bW5OYW1lIiwiaW5kZXgiLCJmaWVsZHMiLCJmaW5kSW5kZXgiLCJmaWVsZCIsIm5hbWUiLCJtZXRhZGF0YSIsImlzQ29sdW1uUmVmZXJlbmNlIiwiaW5wdXQiLCJpc0RhdGFJbnRlcmxlYXZlZENvb3JkcyIsImRhdGEiLCJ0eXBlIiwiRml4ZWRTaXplTGlzdCIsImlzRGF0YVNlcGFyYXRlZENvb3JkcyIsIlN0cnVjdCIsImNvbnZlcnRTdHJ1Y3RUb0ZpeGVkU2l6ZUxpc3QiLCJjb29yZHMiLCJpbnRlcmxlYXZlZENvb3JkcyIsIkZsb2F0NjRBcnJheSIsImxlbmd0aCIsIl9jb29yZHMkY2hpbGRyZW4iLCJfc2xpY2VkVG9BcnJheTIiLCJjaGlsZHJlbiIsInhDaGlsZCIsInlDaGlsZCIsInZhbHVlcyIsImNoaWxkRGF0YVR5cGUiLCJGbG9hdDY0IiwiZGF0YVR5cGUiLCJGaWVsZCIsImludGVybGVhdmVkQ29vcmRzRGF0YSIsIm1ha2VEYXRhIiwibnVsbENvdW50IiwibnVsbEJpdG1hcCIsImNoaWxkIiwiYXNzZXJ0Iiwid3JhcEFjY2Vzc29yRnVuY3Rpb24iLCJvYmplY3RJbmZvIiwidXNlckFjY2Vzc29yRnVuY3Rpb24iLCJiYXRjaE9mZnNldCIsIm5ld0luZGV4IiwiaW52ZXJ0ZWRHZW9tT2Zmc2V0cyIsInVuZGVmaW5lZCIsIm5ld09iamVjdERhdGEiLCJhdHRyaWJ1dGVzIiwibmV3T2JqZWN0SW5mbyIsInRhcmdldCIsImFzc2lnbkFjY2Vzc29yIiwiYXJncyIsInByb3BzIiwicHJvcE5hbWUiLCJwcm9wSW5wdXQiLCJjaHVua0lkeCIsImdlb21Db29yZE9mZnNldHMiLCJfYXJncyRiYXRjaE9mZnNldCIsIlZlY3RvciIsImNvbHVtbkRhdGEiLCJEYXRhVHlwZSIsImlzRml4ZWRTaXplTGlzdCIsImV4cGFuZEFycmF5VG9Db29yZHMiLCJsaXN0U2l6ZSIsInZhbHVlIiwic2l6ZSIsIm5vcm1hbGl6ZWQiLCJpc0Zsb2F0Iiwib2JqZWN0IiwiZ2VvbU9mZnNldHMiLCJudW1Db29yZHMiLCJvdXRwdXRBcnJheSIsImNvbnN0cnVjdG9yIiwiZ2VvbUlkeCIsImxhc3RDb29yZElkeCIsIm5leHRDb29yZElkeCIsImNvb3JkSWR4IiwiZ2V0R2VvbWV0cnlWZWN0b3IiLCJ0YWJsZSIsImdlb2Fycm93VHlwZU5hbWUiLCJnZW9tZXRyeUNvbHVtbklkeCIsImdldENoaWxkQXQiLCJnZXRMaXN0TmVzdGluZ0xldmVscyIsIm5lc3RpbmdMZXZlbHMiLCJpc0xpc3QiLCJnZXRNdWx0aUxpbmVTdHJpbmdSZXNvbHZlZE9mZnNldHMiLCJ2YWx1ZU9mZnNldHMiLCJsaW5lU3RyaW5nRGF0YSIsImdldE11bHRpTGluZVN0cmluZ0NoaWxkIiwicmluZ09mZnNldHMiLCJyZXNvbHZlZFJpbmdPZmZzZXRzIiwiSW50MzJBcnJheSIsImdldFBvbHlnb25SZXNvbHZlZE9mZnNldHMiLCJyaW5nRGF0YSIsImdldFBvbHlnb25DaGlsZCIsImdldE11bHRpUG9seWdvblJlc29sdmVkT2Zmc2V0cyIsInBvbHlnb25EYXRhIiwiZ2V0TXVsdGlQb2x5Z29uQ2hpbGQiLCJwb2x5Z29uT2Zmc2V0cyIsImludmVydE9mZnNldHMiLCJvZmZzZXRzIiwibGFyZ2VzdE9mZnNldCIsImFycmF5Q29uc3RydWN0b3IiLCJNYXRoIiwicG93IiwiVWludDhBcnJheSIsIlVpbnQxNkFycmF5IiwiVWludDMyQXJyYXkiLCJpbnZlcnRlZE9mZnNldHMiLCJhcnJheUlkeCIsInRoaXNPZmZzZXQiLCJuZXh0T2Zmc2V0Iiwib2Zmc2V0IiwiZXh0cmFjdEFjY2Vzc29yc0Zyb21Qcm9wcyIsImV4Y2x1ZGVLZXlzIiwiYWNjZXNzb3JzIiwib3RoZXJQcm9wcyIsIl9pIiwiX09iamVjdCRlbnRyaWVzIiwiZW50cmllcyIsIl9PYmplY3QkZW50cmllcyRfaSIsImtleSIsImluY2x1ZGVzIiwic3RhcnRzV2l0aCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy91dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG4vLyBkZWNrLmdsLWNvbW11bml0eVxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IChjKSB2aXMuZ2wgY29udHJpYnV0b3JzXG5cbmltcG9ydCB7YXNzZXJ0fSBmcm9tICdAZGVjay5nbC9jb3JlL3R5cGVkJztcbmltcG9ydCAqIGFzIGFycm93IGZyb20gJ2FwYWNoZS1hcnJvdyc7XG5pbXBvcnQgKiBhcyBnYSBmcm9tICdAZ2VvYXJyb3cvZ2VvYXJyb3ctanMnO1xuaW1wb3J0IHtBY2Nlc3NvckNvbnRleHQsIEFjY2Vzc29yRnVuY3Rpb24sIF9JbnRlcm5hbEFjY2Vzc29yQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBUeXBlZEFycmF5ID1cbiAgfCBVaW50OEFycmF5XG4gIHwgVWludDhDbGFtcGVkQXJyYXlcbiAgfCBVaW50MTZBcnJheVxuICB8IFVpbnQzMkFycmF5XG4gIHwgSW50OEFycmF5XG4gIHwgSW50MTZBcnJheVxuICB8IEludDMyQXJyYXlcbiAgfCBGbG9hdDMyQXJyYXlcbiAgfCBGbG9hdDY0QXJyYXk7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kR2VvbWV0cnlDb2x1bW5JbmRleChcbiAgc2NoZW1hOiBhcnJvdy5TY2hlbWEsXG4gIGV4dGVuc2lvbk5hbWU6IHN0cmluZyxcbiAgZ2VvbWV0cnlDb2x1bW5OYW1lPzogc3RyaW5nIHwgbnVsbFxuKTogbnVtYmVyIHwgbnVsbCB7XG4gIGNvbnN0IGluZGV4ID0gc2NoZW1hLmZpZWxkcy5maW5kSW5kZXgoXG4gICAgZmllbGQgPT5cbiAgICAgIGZpZWxkLm5hbWUgPT09IGdlb21ldHJ5Q29sdW1uTmFtZSB8fFxuICAgICAgZmllbGQubWV0YWRhdGEuZ2V0KCdBUlJPVzpleHRlbnNpb246bmFtZScpID09PSBleHRlbnNpb25OYW1lXG4gICk7XG4gIHJldHVybiBpbmRleCAhPT0gLTEgPyBpbmRleCA6IG51bGw7XG59XG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGlucHV0IGlzIGEgcmVmZXJlbmNlIHRvIGEgY29sdW1uIGluIHRoZSB0YWJsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb2x1bW5SZWZlcmVuY2UoaW5wdXQ6IGFueSk6IGlucHV0IGlzIHN0cmluZyB7XG4gIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnO1xufVxuXG5mdW5jdGlvbiBpc0RhdGFJbnRlcmxlYXZlZENvb3JkcyhcbiAgZGF0YTogYXJyb3cuRGF0YVxuKTogZGF0YSBpcyBhcnJvdy5EYXRhPGFycm93LkZpeGVkU2l6ZUxpc3Q8YXJyb3cuRmxvYXQ2ND4+IHtcbiAgLy8gVE9ETzogYWxzbyBjaGVjayAyIG9yIDNkPyBGbG9hdDY0P1xuICByZXR1cm4gZGF0YS50eXBlIGluc3RhbmNlb2YgYXJyb3cuRml4ZWRTaXplTGlzdDtcbn1cblxuZnVuY3Rpb24gaXNEYXRhU2VwYXJhdGVkQ29vcmRzKFxuICBkYXRhOiBhcnJvdy5EYXRhXG4pOiBkYXRhIGlzIGFycm93LkRhdGE8YXJyb3cuU3RydWN0PHt4OiBhcnJvdy5GbG9hdDY0OyB5OiBhcnJvdy5GbG9hdDY0fT4+IHtcbiAgLy8gVE9ETzogYWxzbyBjaGVjayBjaGlsZCBuYW1lcz8gRmxvYXQ2ND9cbiAgcmV0dXJuIGRhdGEudHlwZSBpbnN0YW5jZW9mIGFycm93LlN0cnVjdDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGdlb2Fycm93IFN0cnVjdCBjb29yZGluYXRlcyB0byBGaXhlZFNpemVMaXN0IGNvb3Jkc1xuICpcbiAqIFRoZSBHZW9BcnJvdyBzcGVjIGFsbG93cyBmb3IgZWl0aGVyIHNlcGFyYXRlZCBvciBpbnRlcmxlYXZlZCBjb29yZHMsIGJ1dCBhdFxuICogdGhpcyB0aW1lIGRlY2suZ2wgb25seSBzdXBwb3J0cyBpbnRlcmxlYXZlZC5cbiAqL1xuLy8gVE9ETzogdGhpcyBoYXNuJ3QgYmVlbiB0ZXN0ZWQgeWV0XG4vLyBAdHMtZXhwZWN0LWVycm9yXG5mdW5jdGlvbiBjb252ZXJ0U3RydWN0VG9GaXhlZFNpemVMaXN0KFxuICBjb29yZHM6XG4gICAgfCBhcnJvdy5EYXRhPGFycm93LkZpeGVkU2l6ZUxpc3Q8YXJyb3cuRmxvYXQ2ND4+XG4gICAgfCBhcnJvdy5EYXRhPGFycm93LlN0cnVjdDx7eDogYXJyb3cuRmxvYXQ2NDsgeTogYXJyb3cuRmxvYXQ2NH0+PlxuKTogYXJyb3cuRGF0YTxhcnJvdy5GaXhlZFNpemVMaXN0PGFycm93LkZsb2F0NjQ+PiB7XG4gIGlmIChpc0RhdGFJbnRlcmxlYXZlZENvb3Jkcyhjb29yZHMpKSB7XG4gICAgcmV0dXJuIGNvb3JkcztcbiAgfSBlbHNlIGlmIChpc0RhdGFTZXBhcmF0ZWRDb29yZHMoY29vcmRzKSkge1xuICAgIC8vIFRPRE86IHN1cHBvcnQgM2RcbiAgICBjb25zdCBpbnRlcmxlYXZlZENvb3JkcyA9IG5ldyBGbG9hdDY0QXJyYXkoY29vcmRzLmxlbmd0aCAqIDIpO1xuICAgIGNvbnN0IFt4Q2hpbGQsIHlDaGlsZF0gPSBjb29yZHMuY2hpbGRyZW47XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGludGVybGVhdmVkQ29vcmRzW2kgKiAyXSA9IHhDaGlsZC52YWx1ZXNbaV07XG4gICAgICBpbnRlcmxlYXZlZENvb3Jkc1tpICogMiArIDFdID0geUNoaWxkLnZhbHVlc1tpXTtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZERhdGFUeXBlID0gbmV3IGFycm93LkZsb2F0NjQoKTtcbiAgICBjb25zdCBkYXRhVHlwZSA9IG5ldyBhcnJvdy5GaXhlZFNpemVMaXN0KDIsIG5ldyBhcnJvdy5GaWVsZCgnY29vcmRzJywgY2hpbGREYXRhVHlwZSkpO1xuXG4gICAgY29uc3QgaW50ZXJsZWF2ZWRDb29yZHNEYXRhID0gYXJyb3cubWFrZURhdGEoe1xuICAgICAgdHlwZTogY2hpbGREYXRhVHlwZSxcbiAgICAgIGxlbmd0aDogaW50ZXJsZWF2ZWRDb29yZHMubGVuZ3RoXG4gICAgfSk7XG5cbiAgICBjb25zdCBkYXRhID0gYXJyb3cubWFrZURhdGEoe1xuICAgICAgdHlwZTogZGF0YVR5cGUsXG4gICAgICBsZW5ndGg6IGNvb3Jkcy5sZW5ndGgsXG4gICAgICBudWxsQ291bnQ6IGNvb3Jkcy5udWxsQ291bnQsXG4gICAgICBudWxsQml0bWFwOiBjb29yZHMubnVsbEJpdG1hcCxcbiAgICAgIGNoaWxkOiBpbnRlcmxlYXZlZENvb3Jkc0RhdGFcbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzc2VydChmYWxzZSk7XG59XG5cbnR5cGUgQXNzaWduQWNjZXNzb3JQcm9wcyA9IHtcbiAgLyoqIFRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXNzaWduIHRoZSByZXNvbHZlZCBhY2Nlc29yICovXG4gIHByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAvKiogVGhlIG5hbWUgb2YgdGhlIHByb3AgdG8gc2V0ICovXG4gIHByb3BOYW1lOiBzdHJpbmc7XG4gIC8qKiBUaGUgdXNlci1zdXBwbGllZCBpbnB1dCB0byB0aGUgbGF5ZXIuIE11c3QgZWl0aGVyIGJlIGEgc2NhbGFyIHZhbHVlIG9yIGEgcmVmZXJlbmNlIHRvIGEgY29sdW1uIGluIHRoZSB0YWJsZS4gKi9cbiAgcHJvcElucHV0OiBhbnk7XG4gIC8qKiBOdW1lcmljIGluZGV4IGluIHRoZSB0YWJsZSAqL1xuICBjaHVua0lkeDogbnVtYmVyO1xuICAvKiogYSBtYXAgZnJvbSB0aGUgZ2VvbWV0cnkgaW5kZXggdG8gdGhlIGNvb3JkIG9mZnNldHMgZm9yIHRoYXQgZ2VvbWV0cnkuICovXG4gIGdlb21Db29yZE9mZnNldHM/OiBJbnQzMkFycmF5IHwgbnVsbDtcbiAgLyoqIEFic29sdXRlIG9mZnNldCBvZiB0aGUgYmF0Y2ggaW4gdGhlIHRhYmxlL3ZlY3Rvci4gQWRkZWQgdG8gdGhlIHNhbXBsaW5nIGluZGV4LiAqL1xuICBiYXRjaE9mZnNldD86IG51bWJlcjtcbn07XG5cbi8qKlxuICogQSB3cmFwcGVyIGFyb3VuZCBhIHVzZXItcHJvdmlkZWQgYWNjZXNzb3IgZnVuY3Rpb25cbiAqXG4gKiBGb3IgbGF5ZXJzIGxpa2UgU2NhdHRlcnBsb3QsIFBhdGgsIGFuZCBQb2x5Z29uLCB3ZSBhdXRvbWF0aWNhbGx5IGhhbmRsZVxuICogXCJleHBsb2RpbmdcIiB0aGUgdGFibGUgd2hlbiBtdWx0aS1nZW9tZXRyeSBpbnB1dCBhcmUgcHJvdmlkZWQuIFRoaXMgbWVhbnMgdGhhdFxuICogdGhlIHVwc3RyZWFtIGBpbmRleGAgdmFsdWUgcGFzc2VkIHRvIHRoZSB1c2VyIHdpbGwgYmUgdGhlIGNvcnJlY3Qgcm93IGluZGV4XG4gKiBfb25seV8gZm9yIG5vbi1leHBsb2RlZCBkYXRhLlxuICpcbiAqIFdpdGggdGhpcyBmdW5jdGlvbiwgd2Ugc2ltcGxpZnkgdGhlIHVzZXIgdXNhZ2UgYnkgYXV0b21hdGljYWxseSBjb252ZXJ0aW5nXG4gKiBiYWNrIGZyb20gXCJleHBsb2RlZFwiIGluZGV4IGJhY2sgdG8gdGhlIG9yaWdpbmFsIHJvdyBpbmRleC5cbiAqL1xuZnVuY3Rpb24gd3JhcEFjY2Vzc29yRnVuY3Rpb248SW4sIE91dD4oXG4gIG9iamVjdEluZm86IF9JbnRlcm5hbEFjY2Vzc29yQ29udGV4dDxJbj4sXG4gIHVzZXJBY2Nlc3NvckZ1bmN0aW9uOiBBY2Nlc3NvckZ1bmN0aW9uPEluLCBPdXQ+LFxuICBiYXRjaE9mZnNldDogbnVtYmVyXG4pOiBPdXQge1xuICBjb25zdCB7aW5kZXgsIGRhdGF9ID0gb2JqZWN0SW5mbztcbiAgbGV0IG5ld0luZGV4ID0gaW5kZXggKyBiYXRjaE9mZnNldDtcbiAgaWYgKGRhdGEuaW52ZXJ0ZWRHZW9tT2Zmc2V0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbmV3SW5kZXggPSBkYXRhLmludmVydGVkR2VvbU9mZnNldHNbaW5kZXhdO1xuICB9XG4gIGNvbnN0IG5ld09iamVjdERhdGEgPSB7XG4gICAgZGF0YTogZGF0YS5kYXRhLFxuICAgIGxlbmd0aDogZGF0YS5sZW5ndGgsXG4gICAgYXR0cmlidXRlczogZGF0YS5hdHRyaWJ1dGVzXG4gIH07XG4gIGNvbnN0IG5ld09iamVjdEluZm8gPSB7XG4gICAgaW5kZXg6IG5ld0luZGV4LFxuICAgIGRhdGE6IG5ld09iamVjdERhdGEsXG4gICAgdGFyZ2V0OiBvYmplY3RJbmZvLnRhcmdldFxuICB9O1xuICByZXR1cm4gdXNlckFjY2Vzc29yRnVuY3Rpb24obmV3T2JqZWN0SW5mbyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhY2Nlc3NvciBhbmQgYXNzaWduIHRvIHByb3BzIG9iamVjdFxuICpcbiAqIFRoaXMgaXMgdXNlZnVsIGFzIGEgaGVscGVyIGZ1bmN0aW9uIGJlY2F1c2UgYSBzY2FsYXIgcHJvcCBpcyBzZXQgYXQgdGhlIHRvcFxuICogbGV2ZWwgd2hpbGUgYSB2ZWN0b3JpemVkIHByb3AgaXMgc2V0IGluc2lkZSBkYXRhLmF0dHJpYnV0ZXNcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ25BY2Nlc3NvcihhcmdzOiBBc3NpZ25BY2Nlc3NvclByb3BzKSB7XG4gIGNvbnN0IHtwcm9wcywgcHJvcE5hbWUsIHByb3BJbnB1dCwgY2h1bmtJZHgsIGdlb21Db29yZE9mZnNldHMsIGJhdGNoT2Zmc2V0ID0gMH0gPSBhcmdzO1xuXG4gIGlmIChwcm9wSW5wdXQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChwcm9wSW5wdXQgaW5zdGFuY2VvZiBhcnJvdy5WZWN0b3IpIHtcbiAgICBjb25zdCBjb2x1bW5EYXRhID0gcHJvcElucHV0LmRhdGFbY2h1bmtJZHhdO1xuXG4gICAgaWYgKGFycm93LkRhdGFUeXBlLmlzRml4ZWRTaXplTGlzdChjb2x1bW5EYXRhKSkge1xuICAgICAgYXNzZXJ0KGNvbHVtbkRhdGEuY2hpbGRyZW4ubGVuZ3RoID09PSAxKTtcbiAgICAgIGxldCB2YWx1ZXMgPSBjb2x1bW5EYXRhLmNoaWxkcmVuWzBdLnZhbHVlcztcblxuICAgICAgaWYgKGdlb21Db29yZE9mZnNldHMpIHtcbiAgICAgICAgdmFsdWVzID0gZXhwYW5kQXJyYXlUb0Nvb3Jkcyh2YWx1ZXMsIGNvbHVtbkRhdGEudHlwZS5saXN0U2l6ZSwgZ2VvbUNvb3JkT2Zmc2V0cyk7XG4gICAgICB9XG5cbiAgICAgIHByb3BzLmRhdGEuYXR0cmlidXRlc1twcm9wTmFtZV0gPSB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZXMsXG4gICAgICAgIHNpemU6IGNvbHVtbkRhdGEudHlwZS5saXN0U2l6ZSxcbiAgICAgICAgLy8gU2V0IHRvIGB0cnVlYCB0byBzaWduaWZ5IHRoYXQgY29sb3JzIGFyZSBhbHJlYWR5IDAtMjU1LCBhbmQgZGVjay9sdW1hXG4gICAgICAgIC8vIGRvZXMgbm90IG5lZWQgdG8gcmVzY2FsZVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdmlzZ2wvZGVjay5nbC9ibG9iLzQwMWQ2MjRjMDUyOWZhYWE2MjEyNTcxNGMzNzZiM2JhM2I4ZjM3OWYvZG9jcy9hcGktcmVmZXJlbmNlL2NvcmUvYXR0cmlidXRlLW1hbmFnZXIubWQ/cGxhaW49MSNMNjZcbiAgICAgICAgbm9ybWFsaXplZDogdHJ1ZVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGFycm93LkRhdGFUeXBlLmlzRmxvYXQoY29sdW1uRGF0YSkpIHtcbiAgICAgIGxldCB2YWx1ZXMgPSBjb2x1bW5EYXRhLnZhbHVlcztcblxuICAgICAgaWYgKGdlb21Db29yZE9mZnNldHMpIHtcbiAgICAgICAgdmFsdWVzID0gZXhwYW5kQXJyYXlUb0Nvb3Jkcyh2YWx1ZXMsIDEsIGdlb21Db29yZE9mZnNldHMpO1xuICAgICAgfVxuXG4gICAgICBwcm9wcy5kYXRhLmF0dHJpYnV0ZXNbcHJvcE5hbWVdID0ge1xuICAgICAgICB2YWx1ZTogdmFsdWVzLFxuICAgICAgICBzaXplOiAxXG4gICAgICB9O1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJvcElucHV0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcHJvcHNbcHJvcE5hbWVdID0gPEluPihvYmplY3Q6IGFueSwgb2JqZWN0SW5mbzogQWNjZXNzb3JDb250ZXh0PEluPikgPT4ge1xuICAgICAgLy8gU3BlY2lhbCBjYXNlIHRoYXQgZG9lc24ndCBoYXZlIHRoZSBzYW1lIHBhcmFtZXRlcnNcbiAgICAgIGlmIChwcm9wTmFtZSA9PT0gJ2dldFBvbHlnb25PZmZzZXQnKSB7XG4gICAgICAgIHJldHVybiBwcm9wSW5wdXQob2JqZWN0LCBvYmplY3RJbmZvKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHdyYXBBY2Nlc3NvckZ1bmN0aW9uKG9iamVjdEluZm8sIHByb3BJbnB1dCwgYmF0Y2hPZmZzZXQpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcHJvcHNbcHJvcE5hbWVdID0gcHJvcElucHV0O1xuICB9XG59XG5cbi8qKlxuICogRXhwYW5kIGFuIGFycmF5IGZyb20gXCJvbmUgZWxlbWVudCBwZXIgZ2VvbWV0cnlcIiB0byBcIm9uZSBlbGVtZW50IHBlciBjb29yZGluYXRlXCJcbiAqXG4gKiBAcGFyYW0gaW5wdXQ6IHRoZSBpbnB1dCBhcnJheSB0byBleHBhbmRcbiAqIEBwYXJhbSBzaXplIDogdGhlIG51bWJlciBvZiBuZXN0ZWQgZWxlbWVudHMgaW4gdGhlIGlucHV0IGFycmF5IHBlciBnZW9tZXRyeS4gU28gZm9yIGV4YW1wbGUsIGZvciBSR0IgZGF0YSB0aGlzIHdvdWxkIGJlIDMsIGZvciBSR0JBIHRoaXMgd291bGQgYmUgNC4gRm9yIHJhZGl1cywgdGhpcyB3b3VsZCBiZSAxLlxuICogQHBhcmFtIGdlb21PZmZzZXRzIDogYW4gb2Zmc2V0cyBhcnJheSBtYXBwaW5nIGZyb20gdGhlIGdlb21ldHJ5IHRvIHRoZSBjb29yZGluYXRlIGluZGV4ZXMuIFNvIGluIHRoZSBjYXNlIG9mIGEgTGluZVN0cmluZ0FycmF5LCB0aGlzIGlzIHJldHJpZXZlZCBkaXJlY3RseSBmcm9tIHRoZSBHZW9BcnJvdyBzdG9yYWdlLiBJbiB0aGUgY2FzZSBvZiBhIFBvbHlnb25BcnJheSwgdGhpcyBjb21lcyBmcm9tIHRoZSByZXNvbHZlZCBpbmRleGVzIHRoYXQgbmVlZCB0byBiZSBnaXZlbiB0byB0aGUgU29saWRQb2x5Z29uTGF5ZXIgYW55d2F5cy5cbiAqXG4gKiBAcmV0dXJuICB7VHlwZWRBcnJheX0gdmFsdWVzIGV4cGFuZGVkIHRvIGJlIHBlci1jb29yZGluYXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBhbmRBcnJheVRvQ29vcmRzPFQgZXh0ZW5kcyBUeXBlZEFycmF5PihcbiAgaW5wdXQ6IFQsXG4gIHNpemU6IG51bWJlcixcbiAgZ2VvbU9mZnNldHM6IEludDMyQXJyYXlcbik6IFQge1xuICBjb25zdCBudW1Db29yZHMgPSBnZW9tT2Zmc2V0c1tnZW9tT2Zmc2V0cy5sZW5ndGggLSAxXTtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICBjb25zdCBvdXRwdXRBcnJheTogVCA9IG5ldyBpbnB1dC5jb25zdHJ1Y3RvcihudW1Db29yZHMgKiBzaXplKTtcblxuICAvLyBnZW9tSWR4IGlzIGFuIGluZGV4IGludG8gdGhlIGdlb21PZmZzZXRzIGFycmF5XG4gIC8vIGdlb21JZHggaXMgYWxzbyB0aGUgZ2VvbWV0cnkvdGFibGUgaW5kZXhcbiAgZm9yIChsZXQgZ2VvbUlkeCA9IDA7IGdlb21JZHggPCBnZW9tT2Zmc2V0cy5sZW5ndGggLSAxOyBnZW9tSWR4KyspIHtcbiAgICAvLyBnZW9tT2Zmc2V0cyBtYXBzIGZyb20gdGhlIGdlb21ldHJ5IGluZGV4IHRvIHRoZSBjb29yZCBpbmRleFxuICAgIC8vIFNvIGhlcmUgd2UgZ2V0IHRoZSByYW5nZSBvZiBjb29yZHMgdGhhdCB0aGlzIGdlb21ldHJ5IGNvdmVyc1xuICAgIGNvbnN0IGxhc3RDb29yZElkeCA9IGdlb21PZmZzZXRzW2dlb21JZHhdO1xuICAgIGNvbnN0IG5leHRDb29yZElkeCA9IGdlb21PZmZzZXRzW2dlb21JZHggKyAxXTtcblxuICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGlzIHJhbmdlIG9mIGNvb3JkIGluZGljZXNcbiAgICBmb3IgKGxldCBjb29yZElkeCA9IGxhc3RDb29yZElkeDsgY29vcmRJZHggPCBuZXh0Q29vcmRJZHg7IGNvb3JkSWR4KyspIHtcbiAgICAgIC8vIEl0ZXJhdGUgb3ZlciBzaXplXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICAvLyBDb3B5IGZyb20gdGhlIGdlb21ldHJ5IGluZGV4IGluIGBpbnB1dGAgdG8gdGhlIGNvb3JkIGluZGV4IGluXG4gICAgICAgIC8vIGBvdXRwdXRgXG4gICAgICAgIG91dHB1dEFycmF5W2Nvb3JkSWR4ICogc2l6ZSArIGldID0gaW5wdXRbZ2VvbUlkeCAqIHNpemUgKyBpXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3V0cHV0QXJyYXk7XG59XG5cbi8qKlxuICogR2V0IGEgZ2VvbWV0cnkgdmVjdG9yIHdpdGggdGhlIHNwZWNpZmllZCBleHRlbnNpb24gdHlwZSBuYW1lIGZyb20gdGhlIHRhYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2VvbWV0cnlWZWN0b3IoXG4gIHRhYmxlOiBhcnJvdy5UYWJsZSxcbiAgZ2VvYXJyb3dUeXBlTmFtZTogc3RyaW5nXG4pOiBhcnJvdy5WZWN0b3IgfCBudWxsIHtcbiAgY29uc3QgZ2VvbWV0cnlDb2x1bW5JZHggPSBmaW5kR2VvbWV0cnlDb2x1bW5JbmRleCh0YWJsZS5zY2hlbWEsIGdlb2Fycm93VHlwZU5hbWUpO1xuXG4gIGlmIChnZW9tZXRyeUNvbHVtbklkeCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICAgIC8vIHRocm93IG5ldyBFcnJvcihgTm8gY29sdW1uIGZvdW5kIHdpdGggZXh0ZW5zaW9uIHR5cGUgJHtnZW9hcnJvd1R5cGVOYW1lfWApO1xuICB9XG5cbiAgcmV0dXJuIHRhYmxlLmdldENoaWxkQXQoZ2VvbWV0cnlDb2x1bW5JZHgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlzdE5lc3RpbmdMZXZlbHMoZGF0YTogYXJyb3cuRGF0YSk6IG51bWJlciB7XG4gIGxldCBuZXN0aW5nTGV2ZWxzID0gMDtcbiAgaWYgKGFycm93LkRhdGFUeXBlLmlzTGlzdChkYXRhLnR5cGUpKSB7XG4gICAgbmVzdGluZ0xldmVscyArPSAxO1xuICAgIGRhdGEgPSBkYXRhLmNoaWxkcmVuWzBdO1xuICB9XG4gIHJldHVybiBuZXN0aW5nTGV2ZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TXVsdGlMaW5lU3RyaW5nUmVzb2x2ZWRPZmZzZXRzKGRhdGE6IGdhLmRhdGEuTXVsdGlMaW5lU3RyaW5nRGF0YSk6IEludDMyQXJyYXkge1xuICBjb25zdCBnZW9tT2Zmc2V0cyA9IGRhdGEudmFsdWVPZmZzZXRzO1xuICBjb25zdCBsaW5lU3RyaW5nRGF0YSA9IGdhLmNoaWxkLmdldE11bHRpTGluZVN0cmluZ0NoaWxkKGRhdGEpO1xuICBjb25zdCByaW5nT2Zmc2V0cyA9IGxpbmVTdHJpbmdEYXRhLnZhbHVlT2Zmc2V0cztcblxuICBjb25zdCByZXNvbHZlZFJpbmdPZmZzZXRzID0gbmV3IEludDMyQXJyYXkoZ2VvbU9mZnNldHMubGVuZ3RoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNvbHZlZFJpbmdPZmZzZXRzLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gUGVyZm9ybSB0aGUgbG9va3VwIGludG8gdGhlIHJpbmdJbmRpY2VzIGFycmF5IHVzaW5nIHRoZSBnZW9tT2Zmc2V0c1xuICAgIC8vIGFycmF5XG4gICAgcmVzb2x2ZWRSaW5nT2Zmc2V0c1tpXSA9IHJpbmdPZmZzZXRzW2dlb21PZmZzZXRzW2ldXTtcbiAgfVxuXG4gIHJldHVybiByZXNvbHZlZFJpbmdPZmZzZXRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9seWdvblJlc29sdmVkT2Zmc2V0cyhkYXRhOiBnYS5kYXRhLlBvbHlnb25EYXRhKTogSW50MzJBcnJheSB7XG4gIGNvbnN0IGdlb21PZmZzZXRzID0gZGF0YS52YWx1ZU9mZnNldHM7XG4gIGNvbnN0IHJpbmdEYXRhID0gZ2EuY2hpbGQuZ2V0UG9seWdvbkNoaWxkKGRhdGEpO1xuICBjb25zdCByaW5nT2Zmc2V0cyA9IHJpbmdEYXRhLnZhbHVlT2Zmc2V0cztcblxuICBjb25zdCByZXNvbHZlZFJpbmdPZmZzZXRzID0gbmV3IEludDMyQXJyYXkoZ2VvbU9mZnNldHMubGVuZ3RoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNvbHZlZFJpbmdPZmZzZXRzLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gUGVyZm9ybSB0aGUgbG9va3VwIGludG8gdGhlIHJpbmdJbmRpY2VzIGFycmF5IHVzaW5nIHRoZSBnZW9tT2Zmc2V0c1xuICAgIC8vIGFycmF5XG4gICAgcmVzb2x2ZWRSaW5nT2Zmc2V0c1tpXSA9IHJpbmdPZmZzZXRzW2dlb21PZmZzZXRzW2ldXTtcbiAgfVxuXG4gIHJldHVybiByZXNvbHZlZFJpbmdPZmZzZXRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TXVsdGlQb2x5Z29uUmVzb2x2ZWRPZmZzZXRzKGRhdGE6IGdhLmRhdGEuTXVsdGlQb2x5Z29uRGF0YSk6IEludDMyQXJyYXkge1xuICBjb25zdCBwb2x5Z29uRGF0YSA9IGdhLmNoaWxkLmdldE11bHRpUG9seWdvbkNoaWxkKGRhdGEpO1xuICBjb25zdCByaW5nRGF0YSA9IGdhLmNoaWxkLmdldFBvbHlnb25DaGlsZChwb2x5Z29uRGF0YSk7XG5cbiAgY29uc3QgZ2VvbU9mZnNldHMgPSBkYXRhLnZhbHVlT2Zmc2V0cztcbiAgY29uc3QgcG9seWdvbk9mZnNldHMgPSBwb2x5Z29uRGF0YS52YWx1ZU9mZnNldHM7XG4gIGNvbnN0IHJpbmdPZmZzZXRzID0gcmluZ0RhdGEudmFsdWVPZmZzZXRzO1xuXG4gIGNvbnN0IHJlc29sdmVkUmluZ09mZnNldHMgPSBuZXcgSW50MzJBcnJheShnZW9tT2Zmc2V0cy5sZW5ndGgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc29sdmVkUmluZ09mZnNldHMubGVuZ3RoOyArK2kpIHtcbiAgICByZXNvbHZlZFJpbmdPZmZzZXRzW2ldID0gcmluZ09mZnNldHNbcG9seWdvbk9mZnNldHNbZ2VvbU9mZnNldHNbaV1dXTtcbiAgfVxuXG4gIHJldHVybiByZXNvbHZlZFJpbmdPZmZzZXRzO1xufVxuXG4vKipcbiAqIEludmVydCBvZmZzZXRzIHNvIHRoYXQgbG9va3VwIGNhbiBnbyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnRPZmZzZXRzKG9mZnNldHM6IEludDMyQXJyYXkpOiBVaW50OEFycmF5IHwgVWludDE2QXJyYXkgfCBVaW50MzJBcnJheSB7XG4gIGNvbnN0IGxhcmdlc3RPZmZzZXQgPSBvZmZzZXRzW29mZnNldHMubGVuZ3RoIC0gMV07XG5cbiAgY29uc3QgYXJyYXlDb25zdHJ1Y3RvciA9XG4gICAgb2Zmc2V0cy5sZW5ndGggPCBNYXRoLnBvdygyLCA4KVxuICAgICAgPyBVaW50OEFycmF5XG4gICAgICA6IG9mZnNldHMubGVuZ3RoIDwgTWF0aC5wb3coMiwgMTYpXG4gICAgICA/IFVpbnQxNkFycmF5XG4gICAgICA6IFVpbnQzMkFycmF5O1xuXG4gIGNvbnN0IGludmVydGVkT2Zmc2V0cyA9IG5ldyBhcnJheUNvbnN0cnVjdG9yKGxhcmdlc3RPZmZzZXQpO1xuICBmb3IgKGxldCBhcnJheUlkeCA9IDA7IGFycmF5SWR4IDwgb2Zmc2V0cy5sZW5ndGggLSAxOyBhcnJheUlkeCsrKSB7XG4gICAgY29uc3QgdGhpc09mZnNldCA9IG9mZnNldHNbYXJyYXlJZHhdO1xuICAgIGNvbnN0IG5leHRPZmZzZXQgPSBvZmZzZXRzW2FycmF5SWR4ICsgMV07XG4gICAgZm9yIChsZXQgb2Zmc2V0ID0gdGhpc09mZnNldDsgb2Zmc2V0IDwgbmV4dE9mZnNldDsgb2Zmc2V0KyspIHtcbiAgICAgIGludmVydGVkT2Zmc2V0c1tvZmZzZXRdID0gYXJyYXlJZHg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGludmVydGVkT2Zmc2V0cztcbn1cblxuLy8gVE9ETzogYmV0dGVyIHR5cGluZ1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RBY2Nlc3NvcnNGcm9tUHJvcHMoXG4gIHByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICBleGNsdWRlS2V5czogc3RyaW5nW11cbik6IFtSZWNvcmQ8c3RyaW5nLCBhbnk+LCBSZWNvcmQ8c3RyaW5nLCBhbnk+XSB7XG4gIGNvbnN0IGFjY2Vzc29yczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICBjb25zdCBvdGhlclByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BzKSkge1xuICAgIGlmIChleGNsdWRlS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoJ2dldCcpKSB7XG4gICAgICBhY2Nlc3NvcnNba2V5XSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdGhlclByb3BzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gW2FjY2Vzc29ycywgb3RoZXJQcm9wc107XG59XG4iXSwibWFw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R0FDVkwsT0FBTyxDQUFDOUUsTUFBTSxHQUFHaUYsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUNoQ0UsV0FBVyxHQUNYQyxXQUFXO0VBRWpCLElBQU1DLGVBQWUsR0FBRyxJQUFJTixnQkFBZ0IsQ0FBQ0QsYUFBYSxDQUFDO0VBQzNELEtBQUssSUFBSVEsUUFBUSxHQUFHLENBQUMsRUFBRUEsUUFBUSxHQUFHVCxPQUFPLENBQUM5RSxNQUFNLEdBQUcsQ0FBQyxFQUFFdUYsUUFBUSxFQUFFLEVBQUU7SUFDaEUsSUFBTUMsVUFBVSxHQUFHVixPQUFPLENBQUNTLFFBQVEsQ0FBQztJQUNwQyxJQUFNRSxVQUFVLEdBQUdYLE9BQU8sQ0FBQ1MsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUN4QyxLQUFLLElBQUlHLE1BQU0sR0FBR0YsVUFBVSxFQUFFRSxNQUFNLEdBQUdELFVBQVUsRUFBRUMsTUFBTSxFQUFFLEVBQUU7TUFDM0RKLGVBQWUsQ0FBQ0ksTUFBTSxDQUFDLEdBQUdILFFBQVE7SUFDcEM7RUFDRjtFQUVBLE9BQU9ELGVBQWU7QUFDeEI7O0FBRUE7QUFDTyxTQUFTSyx5QkFBeUJBLENBQ3ZDN0QsS0FBMEIsRUFDMUI4RCxXQUFxQixFQUN1QjtFQUM1QyxJQUFNQyxTQUE4QixHQUFHLENBQUMsQ0FBQztFQUN6QyxJQUFNQyxVQUErQixHQUFHLENBQUMsQ0FBQztFQUMxQyxTQUFBQyxFQUFBLE1BQUFDLGVBQUEsR0FBMkI5SCxNQUFNLENBQUMrSCxPQUFPLENBQUNuRSxLQUFLLENBQUMsRUFBQWlFLEVBQUEsR0FBQUMsZUFBQSxDQUFBaEcsTUFBQSxFQUFBK0YsRUFBQSxJQUFFO0lBQTdDLElBQUFHLGtCQUFBLE9BQUFoRyxlQUFBLGFBQUE4RixlQUFBLENBQUFELEVBQUE7TUFBT0ksR0FBRyxHQUFBRCxrQkFBQTtNQUFFeEQsS0FBSyxHQUFBd0Qsa0JBQUE7SUFDcEIsSUFBSU4sV0FBVyxDQUFDUSxRQUFRLENBQUNELEdBQUcsQ0FBQyxFQUFFO01BQzdCO0lBQ0Y7SUFFQSxJQUFJQSxHQUFHLENBQUNFLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtNQUN6QlIsU0FBUyxDQUFDTSxHQUFHLENBQUMsR0FBR3pELEtBQUs7SUFDeEIsQ0FBQyxNQUFNO01BQ0xvRCxVQUFVLENBQUNLLEdBQUcsQ0FBQyxHQUFHekQsS0FBSztJQUN6QjtFQUNGO0VBRUEsT0FBTyxDQUFDbUQsU0FBUyxFQUFFQyxVQUFVLENBQUM7QUFDaEMiLCJpZ25vcmVMaXN0IjpbXX0=
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import * as arrow from 'apache-arrow';
|
2
|
+
export declare function validateAccessors(props: Record<string, any>, table: arrow.Table): void;
|
3
|
+
/**
|
4
|
+
* Provide validation for accessors provided
|
5
|
+
*
|
6
|
+
* - Assert that all vectors have the same number of chunks as the main table
|
7
|
+
* - Assert that all chunks in each vector have the same number of rows as the
|
8
|
+
* relevant batch in the main table.
|
9
|
+
*
|
10
|
+
*/
|
11
|
+
export declare function validateVectorAccessors(table: arrow.Table, vectorAccessors: arrow.Vector[]): void;
|
12
|
+
export declare function validateColorVector(vector: arrow.Vector): void;
|