@kepler.gl/deckgl-layers 3.3.0-alpha.5 → 3.3.0-alpha.6
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/3d-building-layer/3d-building-layer.js +66 -0
- package/dist/cjs/3d-building-layer/3d-building-utils.js +166 -0
- package/dist/cjs/3d-building-layer/types.js +6 -0
- package/dist/cjs/cluster-layer/cluster-layer.js +292 -0
- package/dist/cjs/column-layer/enhanced-column-layer.js +160 -0
- package/dist/{deckgl-extensions → cjs/deckgl-extensions}/filter-arrow-layer.js +1 -1
- package/dist/cjs/deckgl-extensions/filter-shader-module.js +26 -0
- package/dist/cjs/globe/atmosphere-layer.js +220 -0
- package/dist/cjs/globe/enhanced-multi-icon-layer.js +63 -0
- package/dist/cjs/globe/globe-depth-disk-layer.js +145 -0
- package/dist/cjs/globe/globe-layers.js +569 -0
- package/dist/cjs/globe/globe-stars-layer.js +69 -0
- package/dist/cjs/globe/globe-view.js +407 -0
- package/dist/{globe → cjs/globe}/index.js +1 -1
- package/dist/cjs/globe/mvt-label-layer.js +190 -0
- package/dist/cjs/grid-layer/enhanced-cpu-grid-layer.js +116 -0
- package/dist/cjs/hexagon-layer/enhanced-hexagon-layer.js +134 -0
- package/dist/{index.js → cjs/index.js} +1 -1
- package/dist/cjs/layer-utils/aggregation-utils.js +181 -0
- package/dist/cjs/layer-utils/cluster-utils.js +93 -0
- package/dist/cjs/layer-utils/cpu-aggregator.js +798 -0
- package/dist/cjs/layer-utils/globe-cell-utils.js +173 -0
- package/dist/cjs/layer-utils/shader-utils.js +38 -0
- package/dist/cjs/line-layer/line-layer.js +95 -0
- package/dist/cjs/raster/images.js +271 -0
- package/dist/cjs/raster/pipeline-validation-patch.js +101 -0
- package/dist/cjs/raster/raster-layer/raster-layer-shaders.js +163 -0
- package/dist/cjs/raster/raster-layer/raster-layer-webgl1.fs.js +10 -0
- package/dist/cjs/raster/raster-layer/raster-layer-webgl1.vs.js +10 -0
- package/dist/cjs/raster/raster-layer/raster-layer-webgl2.fs.js +10 -0
- package/dist/cjs/raster/raster-layer/raster-layer-webgl2.vs.js +10 -0
- package/dist/cjs/raster/raster-layer/raster-layer.js +287 -0
- package/dist/cjs/raster/raster-mesh-layer/matrix.js +18 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +38 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +10 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +10 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +10 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +10 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer.js +321 -0
- package/dist/cjs/raster/raster-processing-uniforms.js +124 -0
- package/dist/cjs/raster/types.js +6 -0
- package/dist/cjs/raster/util.js +139 -0
- package/dist/cjs/raster/webgl/color/colormap.js +45 -0
- package/dist/cjs/raster/webgl/color/filter.js +58 -0
- package/dist/cjs/raster/webgl/color/gamma-contrast.js +68 -0
- package/dist/cjs/raster/webgl/color/linear-rescale.js +35 -0
- package/dist/cjs/raster/webgl/color/saturation.js +42 -0
- package/dist/cjs/raster/webgl/color/sigmoidal-contrast.js +68 -0
- package/dist/{raster → cjs/raster}/webgl/index.js +1 -1
- package/dist/cjs/raster/webgl/pansharpen/pansharpen-brovey.js +46 -0
- package/dist/cjs/raster/webgl/spectral-indices/evi.js +26 -0
- package/dist/cjs/raster/webgl/spectral-indices/msavi.js +25 -0
- package/dist/cjs/raster/webgl/spectral-indices/normalized-difference.js +19 -0
- package/dist/cjs/raster/webgl/spectral-indices/savi.js +21 -0
- package/dist/cjs/raster/webgl/texture/combine-bands.js +65 -0
- package/dist/cjs/raster/webgl/texture/mask.js +50 -0
- package/dist/cjs/raster/webgl/texture/reorder-bands.js +72 -0
- package/dist/cjs/raster/webgl/texture/rgba-image.js +34 -0
- package/dist/cjs/raster/webgl/types.js +6 -0
- package/dist/cjs/svg-icon-layer/scatterplot-icon-layer.js +88 -0
- package/dist/cjs/svg-icon-layer/svg-icon-layer.js +104 -0
- package/dist/cjs/wms/wms-layer.js +624 -0
- package/dist/esm/3d-building-layer/3d-building-layer.js +62 -0
- package/dist/esm/3d-building-layer/3d-building-utils.js +157 -0
- package/dist/esm/3d-building-layer/types.js +3 -0
- package/dist/esm/cluster-layer/cluster-layer.js +286 -0
- package/dist/esm/column-layer/enhanced-column-layer.js +156 -0
- package/dist/esm/deckgl-extensions/filter-arrow-layer.js +64 -0
- package/dist/esm/deckgl-extensions/filter-shader-module.js +20 -0
- package/dist/esm/globe/atmosphere-layer.js +214 -0
- package/dist/esm/globe/enhanced-multi-icon-layer.js +60 -0
- package/dist/esm/globe/globe-depth-disk-layer.js +140 -0
- package/dist/esm/globe/globe-layers.js +561 -0
- package/dist/esm/globe/globe-stars-layer.js +63 -0
- package/dist/esm/globe/globe-view.js +401 -0
- package/dist/esm/globe/index.js +26 -0
- package/dist/esm/globe/mvt-label-layer.js +187 -0
- package/dist/esm/grid-layer/enhanced-cpu-grid-layer.js +112 -0
- package/dist/esm/hexagon-layer/enhanced-hexagon-layer.js +130 -0
- package/dist/esm/index.js +22 -0
- package/dist/esm/layer-utils/aggregation-utils.js +172 -0
- package/dist/esm/layer-utils/cluster-utils.js +86 -0
- package/dist/esm/layer-utils/cpu-aggregator.js +788 -0
- package/dist/esm/layer-utils/globe-cell-utils.js +167 -0
- package/dist/esm/layer-utils/shader-utils.js +32 -0
- package/dist/esm/line-layer/line-layer.js +91 -0
- package/dist/esm/raster/images.js +267 -0
- package/dist/esm/raster/pipeline-validation-patch.js +94 -0
- package/dist/esm/raster/raster-layer/raster-layer-shaders.js +153 -0
- package/dist/esm/raster/raster-layer/raster-layer-webgl1.fs.js +5 -0
- package/dist/esm/raster/raster-layer/raster-layer-webgl1.vs.js +5 -0
- package/dist/esm/raster/raster-layer/raster-layer-webgl2.fs.js +5 -0
- package/dist/esm/raster/raster-layer/raster-layer-webgl2.vs.js +5 -0
- package/dist/esm/raster/raster-layer/raster-layer.js +283 -0
- package/dist/esm/raster/raster-mesh-layer/matrix.js +12 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +30 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +5 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +5 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +5 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +5 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer.js +318 -0
- package/dist/esm/raster/raster-processing-uniforms.js +118 -0
- package/dist/esm/raster/types.js +3 -0
- package/dist/esm/raster/util.js +134 -0
- package/dist/esm/raster/webgl/color/colormap.js +39 -0
- package/dist/esm/raster/webgl/color/filter.js +52 -0
- package/dist/esm/raster/webgl/color/gamma-contrast.js +62 -0
- package/dist/esm/raster/webgl/color/linear-rescale.js +29 -0
- package/dist/esm/raster/webgl/color/saturation.js +36 -0
- package/dist/esm/raster/webgl/color/sigmoidal-contrast.js +62 -0
- package/dist/esm/raster/webgl/index.js +26 -0
- package/dist/esm/raster/webgl/pansharpen/pansharpen-brovey.js +40 -0
- package/dist/esm/raster/webgl/spectral-indices/evi.js +20 -0
- package/dist/esm/raster/webgl/spectral-indices/msavi.js +19 -0
- package/dist/esm/raster/webgl/spectral-indices/normalized-difference.js +13 -0
- package/dist/esm/raster/webgl/spectral-indices/savi.js +15 -0
- package/dist/esm/raster/webgl/texture/combine-bands.js +58 -0
- package/dist/esm/raster/webgl/texture/mask.js +44 -0
- package/dist/esm/raster/webgl/texture/reorder-bands.js +65 -0
- package/dist/esm/raster/webgl/texture/rgba-image.js +28 -0
- package/dist/esm/raster/webgl/types.js +3 -0
- package/dist/esm/svg-icon-layer/scatterplot-icon-layer.js +84 -0
- package/dist/esm/svg-icon-layer/svg-icon-layer.js +101 -0
- package/dist/esm/wms/wms-layer.js +619 -0
- package/dist/wms/wms-layer.d.ts +8 -0
- package/package.json +17 -8
- package/dist/3d-building-layer/3d-building-layer.js +0 -66
- package/dist/3d-building-layer/3d-building-utils.js +0 -166
- package/dist/3d-building-layer/types.js +0 -6
- package/dist/cluster-layer/cluster-layer.js +0 -292
- package/dist/column-layer/enhanced-column-layer.js +0 -160
- package/dist/deckgl-extensions/filter-shader-module.js +0 -26
- package/dist/globe/atmosphere-layer.js +0 -220
- package/dist/globe/enhanced-multi-icon-layer.js +0 -63
- package/dist/globe/globe-depth-disk-layer.js +0 -145
- package/dist/globe/globe-layers.js +0 -569
- package/dist/globe/globe-stars-layer.js +0 -69
- package/dist/globe/globe-view.js +0 -404
- package/dist/globe/mvt-label-layer.js +0 -190
- package/dist/grid-layer/enhanced-cpu-grid-layer.js +0 -116
- package/dist/hexagon-layer/enhanced-hexagon-layer.js +0 -134
- package/dist/layer-utils/aggregation-utils.js +0 -181
- package/dist/layer-utils/cluster-utils.js +0 -93
- package/dist/layer-utils/cpu-aggregator.js +0 -798
- package/dist/layer-utils/globe-cell-utils.js +0 -173
- package/dist/layer-utils/shader-utils.js +0 -38
- package/dist/line-layer/line-layer.js +0 -95
- package/dist/raster/images.js +0 -271
- package/dist/raster/pipeline-validation-patch.js +0 -101
- package/dist/raster/raster-layer/raster-layer-shaders.js +0 -163
- package/dist/raster/raster-layer/raster-layer-webgl1.fs.js +0 -10
- package/dist/raster/raster-layer/raster-layer-webgl1.vs.js +0 -10
- package/dist/raster/raster-layer/raster-layer-webgl2.fs.js +0 -10
- package/dist/raster/raster-layer/raster-layer-webgl2.vs.js +0 -10
- package/dist/raster/raster-layer/raster-layer.js +0 -287
- package/dist/raster/raster-mesh-layer/matrix.js +0 -18
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +0 -38
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +0 -10
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +0 -10
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +0 -10
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +0 -10
- package/dist/raster/raster-mesh-layer/raster-mesh-layer.js +0 -321
- package/dist/raster/raster-processing-uniforms.js +0 -124
- package/dist/raster/types.js +0 -6
- package/dist/raster/util.js +0 -139
- package/dist/raster/webgl/color/colormap.js +0 -45
- package/dist/raster/webgl/color/filter.js +0 -58
- package/dist/raster/webgl/color/gamma-contrast.js +0 -68
- package/dist/raster/webgl/color/linear-rescale.js +0 -35
- package/dist/raster/webgl/color/saturation.js +0 -42
- package/dist/raster/webgl/color/sigmoidal-contrast.js +0 -68
- package/dist/raster/webgl/pansharpen/pansharpen-brovey.js +0 -46
- package/dist/raster/webgl/spectral-indices/evi.js +0 -26
- package/dist/raster/webgl/spectral-indices/msavi.js +0 -25
- package/dist/raster/webgl/spectral-indices/normalized-difference.js +0 -19
- package/dist/raster/webgl/spectral-indices/savi.js +0 -21
- package/dist/raster/webgl/texture/combine-bands.js +0 -65
- package/dist/raster/webgl/texture/mask.js +0 -50
- package/dist/raster/webgl/texture/reorder-bands.js +0 -72
- package/dist/raster/webgl/texture/rgba-image.js +0 -34
- package/dist/raster/webgl/types.js +0 -6
- package/dist/svg-icon-layer/scatterplot-icon-layer.js +0 -88
- package/dist/svg-icon-layer/svg-icon-layer.js +0 -104
- package/dist/wms/wms-layer.js +0 -594
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
2
|
+
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
|
3
|
+
import _createClass from "@babel/runtime/helpers/esm/createClass";
|
|
4
|
+
import _possibleConstructorReturn from "@babel/runtime/helpers/esm/possibleConstructorReturn";
|
|
5
|
+
import _getPrototypeOf from "@babel/runtime/helpers/esm/getPrototypeOf";
|
|
6
|
+
import _get from "@babel/runtime/helpers/esm/get";
|
|
7
|
+
import _inherits from "@babel/runtime/helpers/esm/inherits";
|
|
8
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
9
|
+
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
|
10
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
11
|
+
function _superPropGet(t, o, e, r) { var p = _get(_getPrototypeOf(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; }
|
|
12
|
+
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; }
|
|
13
|
+
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; }
|
|
14
|
+
// SPDX-License-Identifier: MIT
|
|
15
|
+
// Copyright contributors to the kepler.gl project
|
|
16
|
+
|
|
17
|
+
import { SimpleMeshLayer } from '@deck.gl/mesh-layers';
|
|
18
|
+
import { Geometry } from '@luma.gl/engine';
|
|
19
|
+
import { Model } from '@luma.gl/engine';
|
|
20
|
+
import { buildRasterMeshFragmentShader, buildRasterMeshVertexShader, rasterMeshUniforms } from './raster-mesh-layer-shaders';
|
|
21
|
+
import { ensureRasterHooksRegistered, prepareLumaModules } from '../raster-layer/raster-layer-shaders';
|
|
22
|
+
import { loadImages } from '../images';
|
|
23
|
+
import { modulesEqual, applyModuleUniforms } from '../util';
|
|
24
|
+
import { patchPipelineValidation } from '../pipeline-validation-patch';
|
|
25
|
+
import { rasterProcessingUniforms } from '../raster-processing-uniforms';
|
|
26
|
+
import { TOPOLOGY } from '@kepler.gl/constants';
|
|
27
|
+
function validateGeometryAttributes(attributes) {
|
|
28
|
+
if (!(attributes.positions || attributes.POSITION)) {
|
|
29
|
+
throw new Error('RasterMeshLayer requires "positions" or "POSITION" attribute in mesh property.');
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/*
|
|
34
|
+
* Convert mesh data into geometry
|
|
35
|
+
* @returns geometry
|
|
36
|
+
*/
|
|
37
|
+
function getGeometry(data) {
|
|
38
|
+
if ('attributes' in data && data.attributes) {
|
|
39
|
+
validateGeometryAttributes(data.attributes);
|
|
40
|
+
if (data instanceof Geometry) {
|
|
41
|
+
return data;
|
|
42
|
+
}
|
|
43
|
+
return new Geometry(data);
|
|
44
|
+
} else if ('positions' in data || 'POSITION' in data) {
|
|
45
|
+
validateGeometryAttributes(data);
|
|
46
|
+
return new Geometry({
|
|
47
|
+
attributes: data
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
throw Error('Invalid mesh');
|
|
51
|
+
}
|
|
52
|
+
var defaultProps = _objectSpread(_objectSpread({}, SimpleMeshLayer.defaultProps), {}, {
|
|
53
|
+
modules: {
|
|
54
|
+
type: 'array',
|
|
55
|
+
value: [],
|
|
56
|
+
compare: true
|
|
57
|
+
},
|
|
58
|
+
images: {
|
|
59
|
+
type: 'object',
|
|
60
|
+
value: {},
|
|
61
|
+
compare: true
|
|
62
|
+
},
|
|
63
|
+
moduleProps: {
|
|
64
|
+
type: 'object',
|
|
65
|
+
value: {},
|
|
66
|
+
compare: true
|
|
67
|
+
},
|
|
68
|
+
onRedrawNeeded: {
|
|
69
|
+
type: 'function',
|
|
70
|
+
value: null,
|
|
71
|
+
compare: false
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
var RasterMeshLayer = /*#__PURE__*/function (_SimpleMeshLayer) {
|
|
75
|
+
function RasterMeshLayer() {
|
|
76
|
+
var _this;
|
|
77
|
+
_classCallCheck(this, RasterMeshLayer);
|
|
78
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
79
|
+
args[_key] = arguments[_key];
|
|
80
|
+
}
|
|
81
|
+
_this = _callSuper(this, RasterMeshLayer, [].concat(args));
|
|
82
|
+
_defineProperty(_this, "_redrawScheduled", false);
|
|
83
|
+
_defineProperty(_this, "_pendingImageRetry", null);
|
|
84
|
+
/** How many consecutive frames have retried a failed texture upload. */
|
|
85
|
+
_defineProperty(_this, "_imageRetryCount", 0);
|
|
86
|
+
return _this;
|
|
87
|
+
}
|
|
88
|
+
_inherits(RasterMeshLayer, _SimpleMeshLayer);
|
|
89
|
+
return _createClass(RasterMeshLayer, [{
|
|
90
|
+
key: "initializeState",
|
|
91
|
+
value: function initializeState() {
|
|
92
|
+
patchPipelineValidation();
|
|
93
|
+
ensureRasterHooksRegistered();
|
|
94
|
+
this.setState({
|
|
95
|
+
images: {}
|
|
96
|
+
});
|
|
97
|
+
_superPropGet(RasterMeshLayer, "initializeState", this, 3)([]);
|
|
98
|
+
}
|
|
99
|
+
}, {
|
|
100
|
+
key: "getShaders",
|
|
101
|
+
value: function getShaders() {
|
|
102
|
+
var _this$props$modules = this.props.modules,
|
|
103
|
+
modules = _this$props$modules === void 0 ? [] : _this$props$modules;
|
|
104
|
+
var lumaModules = prepareLumaModules(modules);
|
|
105
|
+
var parentShaders = _superPropGet(RasterMeshLayer, "getShaders", this, 3)([]);
|
|
106
|
+
|
|
107
|
+
// Filter out simpleMeshUniforms from parent — RasterMeshLayer uses its own
|
|
108
|
+
// shaders that don't reference SimpleMesh uniforms, and every UBO counts
|
|
109
|
+
// against the WebGL2 GL_MAX_FRAGMENT_UNIFORM_BUFFERS limit (typically 12).
|
|
110
|
+
var parentModules = (parentShaders.modules || []).filter(function (m) {
|
|
111
|
+
return m.name !== 'simpleMesh';
|
|
112
|
+
});
|
|
113
|
+
return _objectSpread(_objectSpread({}, parentShaders), {}, {
|
|
114
|
+
vs: buildRasterMeshVertexShader(),
|
|
115
|
+
fs: buildRasterMeshFragmentShader(),
|
|
116
|
+
modules: [].concat(_toConsumableArray(parentModules), [rasterMeshUniforms, rasterProcessingUniforms], _toConsumableArray(lumaModules))
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// eslint-disable-next-line complexity
|
|
121
|
+
}, {
|
|
122
|
+
key: "updateState",
|
|
123
|
+
value: function updateState(params) {
|
|
124
|
+
var props = params.props,
|
|
125
|
+
oldProps = params.oldProps,
|
|
126
|
+
changeFlags = params.changeFlags,
|
|
127
|
+
context = params.context;
|
|
128
|
+
_superPropGet(RasterMeshLayer, "updateState", this, 3)([{
|
|
129
|
+
props: props,
|
|
130
|
+
oldProps: oldProps,
|
|
131
|
+
changeFlags: changeFlags,
|
|
132
|
+
context: context
|
|
133
|
+
}]);
|
|
134
|
+
var modules = props && props.modules;
|
|
135
|
+
var oldModules = oldProps && oldProps.modules;
|
|
136
|
+
if (props.mesh !== oldProps.mesh || changeFlags.extensionsChanged || !modulesEqual(modules, oldModules)) {
|
|
137
|
+
var _this$getAttributeMan;
|
|
138
|
+
if (this.state.model) {
|
|
139
|
+
var _this$state$model$des, _this$state$model;
|
|
140
|
+
(_this$state$model$des = (_this$state$model = this.state.model).destroy) === null || _this$state$model$des === void 0 || _this$state$model$des.call(_this$state$model);
|
|
141
|
+
}
|
|
142
|
+
if (props.mesh) {
|
|
143
|
+
this.state.model = this.getModel(props.mesh);
|
|
144
|
+
var attributes = props.mesh.attributes || props.mesh;
|
|
145
|
+
this.setState({
|
|
146
|
+
hasNormals: Boolean(attributes.NORMAL || attributes.normals)
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
(_this$getAttributeMan = this.getAttributeManager()) === null || _this$getAttributeMan === void 0 || _this$getAttributeMan.invalidateAll();
|
|
150
|
+
}
|
|
151
|
+
if (props && props.images) {
|
|
152
|
+
this.updateImages({
|
|
153
|
+
props: props,
|
|
154
|
+
oldProps: oldProps
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
if (this.state.model) {
|
|
158
|
+
var _this$state$model$set, _this$state$model2;
|
|
159
|
+
(_this$state$model$set = (_this$state$model2 = this.state.model).setTopology) === null || _this$state$model$set === void 0 || _this$state$model$set.call(_this$state$model2, this.props.wireframe ? TOPOLOGY.LINE_STRIP : TOPOLOGY.TRIANGLE_LIST);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}, {
|
|
163
|
+
key: "updateImages",
|
|
164
|
+
value: function updateImages(_ref) {
|
|
165
|
+
var props = _ref.props,
|
|
166
|
+
oldProps = _ref.oldProps;
|
|
167
|
+
var images = this.state.images;
|
|
168
|
+
var device = this.context.device;
|
|
169
|
+
var gl = (device === null || device === void 0 ? void 0 : device.gl) || this.context.gl;
|
|
170
|
+
var _loadImages = loadImages({
|
|
171
|
+
gl: gl,
|
|
172
|
+
device: device,
|
|
173
|
+
images: images,
|
|
174
|
+
imagesData: props.images,
|
|
175
|
+
oldImagesData: oldProps.images
|
|
176
|
+
}),
|
|
177
|
+
newImages = _loadImages.images,
|
|
178
|
+
hasPendingUploads = _loadImages.hasPendingUploads;
|
|
179
|
+
if (newImages) {
|
|
180
|
+
this.setState({
|
|
181
|
+
images: newImages
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
// If any texture upload failed, stash the imagesData and schedule a retry
|
|
185
|
+
// next frame. The retry passes oldImagesData: {} so all keys bypass the
|
|
186
|
+
// isEqual skip-check.
|
|
187
|
+
if (hasPendingUploads) {
|
|
188
|
+
this._pendingImageRetry = props.images;
|
|
189
|
+
this._imageRetryCount = 0;
|
|
190
|
+
this._scheduleRedraw();
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}, {
|
|
194
|
+
key: "draw",
|
|
195
|
+
value: function draw(_opts) {
|
|
196
|
+
var _this$props$opacity;
|
|
197
|
+
// If a previous frame had failed texture uploads, retry them now before
|
|
198
|
+
// checking whether the images state is complete. Pass oldImagesData: {} so
|
|
199
|
+
// all keys are treated as new and bypass the isEqual skip-check.
|
|
200
|
+
// Retries are bounded to MAX_IMAGE_RETRY_ATTEMPTS to avoid an infinite
|
|
201
|
+
// redraw loop when image data is permanently invalid.
|
|
202
|
+
if (this._pendingImageRetry) {
|
|
203
|
+
var _this$context$device;
|
|
204
|
+
var retry = this._pendingImageRetry;
|
|
205
|
+
this._pendingImageRetry = null;
|
|
206
|
+
var _loadImages2 = loadImages({
|
|
207
|
+
gl: ((_this$context$device = this.context.device) === null || _this$context$device === void 0 ? void 0 : _this$context$device.gl) || this.context.gl,
|
|
208
|
+
device: this.context.device,
|
|
209
|
+
images: this.state.images,
|
|
210
|
+
imagesData: retry,
|
|
211
|
+
oldImagesData: {}
|
|
212
|
+
}),
|
|
213
|
+
newImages = _loadImages2.images,
|
|
214
|
+
hasPendingUploads = _loadImages2.hasPendingUploads;
|
|
215
|
+
if (newImages) {
|
|
216
|
+
this.setState({
|
|
217
|
+
images: newImages
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
if (hasPendingUploads) {
|
|
221
|
+
this._imageRetryCount++;
|
|
222
|
+
if (this._imageRetryCount < RasterMeshLayer.MAX_IMAGE_RETRY_ATTEMPTS) {
|
|
223
|
+
this._pendingImageRetry = retry;
|
|
224
|
+
this._scheduleRedraw();
|
|
225
|
+
} else {
|
|
226
|
+
console.warn("RasterMeshLayer: texture upload failed after ".concat(RasterMeshLayer.MAX_IMAGE_RETRY_ATTEMPTS, " attempts, giving up."));
|
|
227
|
+
this._imageRetryCount = 0;
|
|
228
|
+
}
|
|
229
|
+
} else {
|
|
230
|
+
this._imageRetryCount = 0;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
var _this$state = this.state,
|
|
234
|
+
model = _this$state.model,
|
|
235
|
+
images = _this$state.images;
|
|
236
|
+
var moduleProps = this.props.moduleProps;
|
|
237
|
+
if (!model || !images || Object.keys(images).length === 0 || !Object.values(images).every(function (item) {
|
|
238
|
+
return item;
|
|
239
|
+
})) {
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// Set mesh-specific UBO uniforms
|
|
244
|
+
model.shaderInputs.setProps({
|
|
245
|
+
rasterMesh: {
|
|
246
|
+
meshOpacity: (_this$props$opacity = this.props.opacity) !== null && _this$props$opacity !== void 0 ? _this$props$opacity : 1,
|
|
247
|
+
meshFlatShading: !this.state.hasNormals ? 1.0 : 0.0
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
// Apply each custom module's uniforms/bindings to shaderInputs directly.
|
|
252
|
+
// We call getUniforms once per module and write the results into
|
|
253
|
+
// shaderInputs.moduleUniforms/moduleBindings, bypassing setProps() which
|
|
254
|
+
// would call getUniforms a second time on already-transformed values.
|
|
255
|
+
var allModuleProps = _objectSpread(_objectSpread({}, moduleProps), images);
|
|
256
|
+
var modules = this.props.modules || [];
|
|
257
|
+
applyModuleUniforms(model.shaderInputs, modules, allModuleProps);
|
|
258
|
+
var drawSuccess = model.draw(this.context.renderPass);
|
|
259
|
+
if (!drawSuccess) {
|
|
260
|
+
this._scheduleRedraw();
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}, {
|
|
264
|
+
key: "_scheduleRedraw",
|
|
265
|
+
value: function _scheduleRedraw() {
|
|
266
|
+
var _this2 = this;
|
|
267
|
+
if (this._redrawScheduled) return;
|
|
268
|
+
this._redrawScheduled = true;
|
|
269
|
+
requestAnimationFrame(function () {
|
|
270
|
+
var _this2$context$layerM;
|
|
271
|
+
_this2._redrawScheduled = false;
|
|
272
|
+
if (_this2.context.deck) {
|
|
273
|
+
// @ts-expect-error accessing private deck.gl property
|
|
274
|
+
_this2.context.deck._needsRedraw = 'RasterMeshLayer pipeline pending';
|
|
275
|
+
}
|
|
276
|
+
(_this2$context$layerM = _this2.context.layerManager) === null || _this2$context$layerM === void 0 || _this2$context$layerM.setNeedsRedraw('RasterMeshLayer pipeline pending');
|
|
277
|
+
if (typeof _this2.props.onRedrawNeeded === 'function') {
|
|
278
|
+
_this2.props.onRedrawNeeded();
|
|
279
|
+
}
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
}, {
|
|
283
|
+
key: "finalizeState",
|
|
284
|
+
value: function finalizeState() {
|
|
285
|
+
_superPropGet(RasterMeshLayer, "finalizeState", this, 3)([this.context]);
|
|
286
|
+
if (this.state.images) {
|
|
287
|
+
for (var _i = 0, _Object$values = Object.values(this.state.images); _i < _Object$values.length; _i++) {
|
|
288
|
+
var image = _Object$values[_i];
|
|
289
|
+
if (Array.isArray(image)) {
|
|
290
|
+
image.map(function (x) {
|
|
291
|
+
var _x$delete;
|
|
292
|
+
return x && (x.destroy ? x.destroy() : (_x$delete = x["delete"]) === null || _x$delete === void 0 ? void 0 : _x$delete.call(x));
|
|
293
|
+
});
|
|
294
|
+
} else if (image) {
|
|
295
|
+
var _image$delete;
|
|
296
|
+
image.destroy ? image.destroy() : (_image$delete = image["delete"]) === null || _image$delete === void 0 ? void 0 : _image$delete.call(image);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}, {
|
|
302
|
+
key: "getModel",
|
|
303
|
+
value: function getModel(mesh) {
|
|
304
|
+
var device = this.context.device || this.context.gl;
|
|
305
|
+
var model = new Model(device, Object.assign({}, this.getShaders(), {
|
|
306
|
+
id: this.props.id,
|
|
307
|
+
geometry: getGeometry(mesh),
|
|
308
|
+
isInstanced: false
|
|
309
|
+
}));
|
|
310
|
+
return model;
|
|
311
|
+
}
|
|
312
|
+
}]);
|
|
313
|
+
}(SimpleMeshLayer);
|
|
314
|
+
_defineProperty(RasterMeshLayer, "MAX_IMAGE_RETRY_ATTEMPTS", 3);
|
|
315
|
+
export { RasterMeshLayer as default };
|
|
316
|
+
RasterMeshLayer.layerName = 'RasterMeshLayer';
|
|
317
|
+
RasterMeshLayer.defaultProps = defaultProps;
|
|
318
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTaW1wbGVNZXNoTGF5ZXIiLCJHZW9tZXRyeSIsIk1vZGVsIiwiYnVpbGRSYXN0ZXJNZXNoRnJhZ21lbnRTaGFkZXIiLCJidWlsZFJhc3Rlck1lc2hWZXJ0ZXhTaGFkZXIiLCJyYXN0ZXJNZXNoVW5pZm9ybXMiLCJlbnN1cmVSYXN0ZXJIb29rc1JlZ2lzdGVyZWQiLCJwcmVwYXJlTHVtYU1vZHVsZXMiLCJsb2FkSW1hZ2VzIiwibW9kdWxlc0VxdWFsIiwiYXBwbHlNb2R1bGVVbmlmb3JtcyIsInBhdGNoUGlwZWxpbmVWYWxpZGF0aW9uIiwicmFzdGVyUHJvY2Vzc2luZ1VuaWZvcm1zIiwiVE9QT0xPR1kiLCJ2YWxpZGF0ZUdlb21ldHJ5QXR0cmlidXRlcyIsImF0dHJpYnV0ZXMiLCJwb3NpdGlvbnMiLCJQT1NJVElPTiIsIkVycm9yIiwiZ2V0R2VvbWV0cnkiLCJkYXRhIiwiZGVmYXVsdFByb3BzIiwiX29iamVjdFNwcmVhZCIsIm1vZHVsZXMiLCJ0eXBlIiwidmFsdWUiLCJjb21wYXJlIiwiaW1hZ2VzIiwibW9kdWxlUHJvcHMiLCJvblJlZHJhd05lZWRlZCIsIlJhc3Rlck1lc2hMYXllciIsIl9TaW1wbGVNZXNoTGF5ZXIiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjayIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiX2NhbGxTdXBlciIsImNvbmNhdCIsIl9kZWZpbmVQcm9wZXJ0eSIsIl9pbmhlcml0cyIsIl9jcmVhdGVDbGFzcyIsImtleSIsImluaXRpYWxpemVTdGF0ZSIsInNldFN0YXRlIiwiX3N1cGVyUHJvcEdldCIsImdldFNoYWRlcnMiLCJfdGhpcyRwcm9wcyRtb2R1bGVzIiwicHJvcHMiLCJsdW1hTW9kdWxlcyIsInBhcmVudFNoYWRlcnMiLCJwYXJlbnRNb2R1bGVzIiwiZmlsdGVyIiwibSIsIm5hbWUiLCJ2cyIsImZzIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwidXBkYXRlU3RhdGUiLCJwYXJhbXMiLCJvbGRQcm9wcyIsImNoYW5nZUZsYWdzIiwiY29udGV4dCIsIm9sZE1vZHVsZXMiLCJtZXNoIiwiZXh0ZW5zaW9uc0NoYW5nZWQiLCJfdGhpcyRnZXRBdHRyaWJ1dGVNYW4iLCJzdGF0ZSIsIm1vZGVsIiwiX3RoaXMkc3RhdGUkbW9kZWwkZGVzIiwiX3RoaXMkc3RhdGUkbW9kZWwiLCJkZXN0cm95IiwiY2FsbCIsImdldE1vZGVsIiwiaGFzTm9ybWFscyIsIkJvb2xlYW4iLCJOT1JNQUwiLCJub3JtYWxzIiwiZ2V0QXR0cmlidXRlTWFuYWdlciIsImludmFsaWRhdGVBbGwiLCJ1cGRhdGVJbWFnZXMiLCJfdGhpcyRzdGF0ZSRtb2RlbCRzZXQiLCJfdGhpcyRzdGF0ZSRtb2RlbDIiLCJzZXRUb3BvbG9neSIsIndpcmVmcmFtZSIsIkxJTkVfU1RSSVAiLCJUUklBTkdMRV9MSVNUIiwiX3JlZiIsImRldmljZSIsImdsIiwiX2xvYWRJbWFnZXMiLCJpbWFnZXNEYXRhIiwib2xkSW1hZ2VzRGF0YSIsIm5ld0ltYWdlcyIsImhhc1BlbmRpbmdVcGxvYWRzIiwiX3BlbmRpbmdJbWFnZVJldHJ5IiwiX2ltYWdlUmV0cnlDb3VudCIsIl9zY2hlZHVsZVJlZHJhdyIsImRyYXciLCJfb3B0cyIsIl90aGlzJHByb3BzJG9wYWNpdHkiLCJfdGhpcyRjb250ZXh0JGRldmljZSIsInJldHJ5IiwiX2xvYWRJbWFnZXMyIiwiTUFYX0lNQUdFX1JFVFJZX0FUVEVNUFRTIiwiY29uc29sZSIsIndhcm4iLCJfdGhpcyRzdGF0ZSIsIk9iamVjdCIsImtleXMiLCJ2YWx1ZXMiLCJldmVyeSIsIml0ZW0iLCJzaGFkZXJJbnB1dHMiLCJzZXRQcm9wcyIsInJhc3Rlck1lc2giLCJtZXNoT3BhY2l0eSIsIm9wYWNpdHkiLCJtZXNoRmxhdFNoYWRpbmciLCJhbGxNb2R1bGVQcm9wcyIsImRyYXdTdWNjZXNzIiwicmVuZGVyUGFzcyIsIl90aGlzMiIsIl9yZWRyYXdTY2hlZHVsZWQiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJfdGhpczIkY29udGV4dCRsYXllck0iLCJkZWNrIiwiX25lZWRzUmVkcmF3IiwibGF5ZXJNYW5hZ2VyIiwic2V0TmVlZHNSZWRyYXciLCJmaW5hbGl6ZVN0YXRlIiwiX2kiLCJfT2JqZWN0JHZhbHVlcyIsImltYWdlIiwiaXNBcnJheSIsIm1hcCIsIngiLCJfeCRkZWxldGUiLCJfaW1hZ2UkZGVsZXRlIiwiYXNzaWduIiwiaWQiLCJnZW9tZXRyeSIsImlzSW5zdGFuY2VkIiwiZGVmYXVsdCIsImxheWVyTmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9yYXN0ZXIvcmFzdGVyLW1lc2gtbGF5ZXIvcmFzdGVyLW1lc2gtbGF5ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtVcGRhdGVQYXJhbWV0ZXJzfSBmcm9tICdAZGVjay5nbC9jb3JlJztcbmltcG9ydCB7U2ltcGxlTWVzaExheWVyLCBTaW1wbGVNZXNoTGF5ZXJQcm9wc30gZnJvbSAnQGRlY2suZ2wvbWVzaC1sYXllcnMnO1xuaW1wb3J0IHtHZW9tZXRyeX0gZnJvbSAnQGx1bWEuZ2wvZW5naW5lJztcbmltcG9ydCB7TW9kZWx9IGZyb20gJ0BsdW1hLmdsL2VuZ2luZSc7XG5cbmltcG9ydCB7XG4gIGJ1aWxkUmFzdGVyTWVzaEZyYWdtZW50U2hhZGVyLFxuICBidWlsZFJhc3Rlck1lc2hWZXJ0ZXhTaGFkZXIsXG4gIHJhc3Rlck1lc2hVbmlmb3Jtc1xufSBmcm9tICcuL3Jhc3Rlci1tZXNoLWxheWVyLXNoYWRlcnMnO1xuaW1wb3J0IHtcbiAgZW5zdXJlUmFzdGVySG9va3NSZWdpc3RlcmVkLFxuICBwcmVwYXJlTHVtYU1vZHVsZXNcbn0gZnJvbSAnLi4vcmFzdGVyLWxheWVyL3Jhc3Rlci1sYXllci1zaGFkZXJzJztcbmltcG9ydCB7bG9hZEltYWdlc30gZnJvbSAnLi4vaW1hZ2VzJztcbmltcG9ydCB0eXBlIHtSYXN0ZXJMYXllckFkZGVkUHJvcHMsIEltYWdlU3RhdGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7bW9kdWxlc0VxdWFsLCBhcHBseU1vZHVsZVVuaWZvcm1zfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7cGF0Y2hQaXBlbGluZVZhbGlkYXRpb259IGZyb20gJy4uL3BpcGVsaW5lLXZhbGlkYXRpb24tcGF0Y2gnO1xuaW1wb3J0IHtyYXN0ZXJQcm9jZXNzaW5nVW5pZm9ybXN9IGZyb20gJy4uL3Jhc3Rlci1wcm9jZXNzaW5nLXVuaWZvcm1zJztcbmltcG9ydCB7VE9QT0xPR1l9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxudHlwZSBNZXNoID0gU2ltcGxlTWVzaExheWVyUHJvcHNbJ21lc2gnXTtcblxuaW50ZXJmYWNlIE1lc2hEYXRhIHtcbiAgYXR0cmlidXRlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBwb3NpdGlvbnM/OiB1bmtub3duO1xuICBQT1NJVElPTj86IHVua25vd247XG4gIE5PUk1BTD86IHVua25vd247XG4gIG5vcm1hbHM/OiB1bmtub3duO1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUdlb21ldHJ5QXR0cmlidXRlcyhhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICBpZiAoIShhdHRyaWJ1dGVzLnBvc2l0aW9ucyB8fCBhdHRyaWJ1dGVzLlBPU0lUSU9OKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdSYXN0ZXJNZXNoTGF5ZXIgcmVxdWlyZXMgXCJwb3NpdGlvbnNcIiBvciBcIlBPU0lUSU9OXCIgYXR0cmlidXRlIGluIG1lc2ggcHJvcGVydHkuJ1xuICAgICk7XG4gIH1cbn1cblxuLypcbiAqIENvbnZlcnQgbWVzaCBkYXRhIGludG8gZ2VvbWV0cnlcbiAqIEByZXR1cm5zIGdlb21ldHJ5XG4gKi9cbmZ1bmN0aW9uIGdldEdlb21ldHJ5KGRhdGE6IE1lc2hEYXRhIHwgR2VvbWV0cnkpOiBHZW9tZXRyeSB7XG4gIGlmICgnYXR0cmlidXRlcycgaW4gZGF0YSAmJiBkYXRhLmF0dHJpYnV0ZXMpIHtcbiAgICB2YWxpZGF0ZUdlb21ldHJ5QXR0cmlidXRlcyhkYXRhLmF0dHJpYnV0ZXMpO1xuICAgIGlmIChkYXRhIGluc3RhbmNlb2YgR2VvbWV0cnkpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEdlb21ldHJ5KGRhdGEgYXMgQ29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBHZW9tZXRyeT5bMF0pO1xuICB9IGVsc2UgaWYgKCdwb3NpdGlvbnMnIGluIGRhdGEgfHwgJ1BPU0lUSU9OJyBpbiBkYXRhKSB7XG4gICAgdmFsaWRhdGVHZW9tZXRyeUF0dHJpYnV0ZXMoZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgcmV0dXJuIG5ldyBHZW9tZXRyeSh7XG4gICAgICBhdHRyaWJ1dGVzOiBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgfSBhcyBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8dHlwZW9mIEdlb21ldHJ5PlswXSk7XG4gIH1cbiAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgbWVzaCcpO1xufVxuXG5jb25zdCBkZWZhdWx0UHJvcHMgPSB7XG4gIC4uLlNpbXBsZU1lc2hMYXllci5kZWZhdWx0UHJvcHMsXG4gIG1vZHVsZXM6IHt0eXBlOiAnYXJyYXknLCB2YWx1ZTogW10sIGNvbXBhcmU6IHRydWV9LFxuICBpbWFnZXM6IHt0eXBlOiAnb2JqZWN0JywgdmFsdWU6IHt9LCBjb21wYXJlOiB0cnVlfSxcbiAgbW9kdWxlUHJvcHM6IHt0eXBlOiAnb2JqZWN0JywgdmFsdWU6IHt9LCBjb21wYXJlOiB0cnVlfSxcbiAgb25SZWRyYXdOZWVkZWQ6IHt0eXBlOiAnZnVuY3Rpb24nLCB2YWx1ZTogbnVsbCwgY29tcGFyZTogZmFsc2V9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSYXN0ZXJNZXNoTGF5ZXIgZXh0ZW5kcyBTaW1wbGVNZXNoTGF5ZXI8YW55LCBSYXN0ZXJMYXllckFkZGVkUHJvcHM+IHtcbiAgZGVjbGFyZSBzdGF0ZTogU2ltcGxlTWVzaExheWVyPFJhc3RlckxheWVyQWRkZWRQcm9wcz5bJ3N0YXRlJ10gJiB7XG4gICAgaW1hZ2VzOiBJbWFnZVN0YXRlO1xuICB9O1xuXG4gIF9yZWRyYXdTY2hlZHVsZWQgPSBmYWxzZTtcbiAgX3BlbmRpbmdJbWFnZVJldHJ5OiBSYXN0ZXJMYXllckFkZGVkUHJvcHNbJ2ltYWdlcyddIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBIb3cgbWFueSBjb25zZWN1dGl2ZSBmcmFtZXMgaGF2ZSByZXRyaWVkIGEgZmFpbGVkIHRleHR1cmUgdXBsb2FkLiAqL1xuICBfaW1hZ2VSZXRyeUNvdW50ID0gMDtcbiAgc3RhdGljIHJlYWRvbmx5IE1BWF9JTUFHRV9SRVRSWV9BVFRFTVBUUyA9IDM7XG5cbiAgaW5pdGlhbGl6ZVN0YXRlKCk6IHZvaWQge1xuICAgIHBhdGNoUGlwZWxpbmVWYWxpZGF0aW9uKCk7XG4gICAgZW5zdXJlUmFzdGVySG9va3NSZWdpc3RlcmVkKCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7aW1hZ2VzOiB7fX0pO1xuICAgIHN1cGVyLmluaXRpYWxpemVTdGF0ZSgpO1xuICB9XG5cbiAgZ2V0U2hhZGVycygpOiBhbnkge1xuICAgIGNvbnN0IHttb2R1bGVzID0gW119ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IGx1bWFNb2R1bGVzID0gcHJlcGFyZUx1bWFNb2R1bGVzKG1vZHVsZXMpO1xuICAgIGNvbnN0IHBhcmVudFNoYWRlcnMgPSBzdXBlci5nZXRTaGFkZXJzKCk7XG5cbiAgICAvLyBGaWx0ZXIgb3V0IHNpbXBsZU1lc2hVbmlmb3JtcyBmcm9tIHBhcmVudCDigJQgUmFzdGVyTWVzaExheWVyIHVzZXMgaXRzIG93blxuICAgIC8vIHNoYWRlcnMgdGhhdCBkb24ndCByZWZlcmVuY2UgU2ltcGxlTWVzaCB1bmlmb3JtcywgYW5kIGV2ZXJ5IFVCTyBjb3VudHNcbiAgICAvLyBhZ2FpbnN0IHRoZSBXZWJHTDIgR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fQlVGRkVSUyBsaW1pdCAodHlwaWNhbGx5IDEyKS5cbiAgICBjb25zdCBwYXJlbnRNb2R1bGVzID0gKHBhcmVudFNoYWRlcnMubW9kdWxlcyB8fCBbXSkuZmlsdGVyKFxuICAgICAgKG06IHtuYW1lPzogc3RyaW5nfSkgPT4gbS5uYW1lICE9PSAnc2ltcGxlTWVzaCdcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnBhcmVudFNoYWRlcnMsXG4gICAgICB2czogYnVpbGRSYXN0ZXJNZXNoVmVydGV4U2hhZGVyKCksXG4gICAgICBmczogYnVpbGRSYXN0ZXJNZXNoRnJhZ21lbnRTaGFkZXIoKSxcbiAgICAgIG1vZHVsZXM6IFsuLi5wYXJlbnRNb2R1bGVzLCByYXN0ZXJNZXNoVW5pZm9ybXMsIHJhc3RlclByb2Nlc3NpbmdVbmlmb3JtcywgLi4ubHVtYU1vZHVsZXNdXG4gICAgfTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gIHVwZGF0ZVN0YXRlKHBhcmFtczogVXBkYXRlUGFyYW1ldGVyczxTaW1wbGVNZXNoTGF5ZXI8YW55LCBSYXN0ZXJMYXllckFkZGVkUHJvcHM+Pik6IHZvaWQge1xuICAgIGNvbnN0IHtwcm9wcywgb2xkUHJvcHMsIGNoYW5nZUZsYWdzLCBjb250ZXh0fSA9IHBhcmFtcztcbiAgICBzdXBlci51cGRhdGVTdGF0ZSh7cHJvcHMsIG9sZFByb3BzLCBjaGFuZ2VGbGFncywgY29udGV4dH0pO1xuXG4gICAgY29uc3QgbW9kdWxlcyA9IHByb3BzICYmIHByb3BzLm1vZHVsZXM7XG4gICAgY29uc3Qgb2xkTW9kdWxlcyA9IG9sZFByb3BzICYmIG9sZFByb3BzLm1vZHVsZXM7XG5cbiAgICBpZiAoXG4gICAgICBwcm9wcy5tZXNoICE9PSBvbGRQcm9wcy5tZXNoIHx8XG4gICAgICBjaGFuZ2VGbGFncy5leHRlbnNpb25zQ2hhbmdlZCB8fFxuICAgICAgIW1vZHVsZXNFcXVhbChtb2R1bGVzLCBvbGRNb2R1bGVzKVxuICAgICkge1xuICAgICAgaWYgKHRoaXMuc3RhdGUubW9kZWwpIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5tb2RlbC5kZXN0cm95Py4oKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5tZXNoKSB7XG4gICAgICAgIHRoaXMuc3RhdGUubW9kZWwgPSB0aGlzLmdldE1vZGVsKHByb3BzLm1lc2ggYXMgTWVzaCk7XG5cbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9ICgocHJvcHMubWVzaCBhcyBNZXNoRGF0YSkuYXR0cmlidXRlcyB8fCBwcm9wcy5tZXNoKSBhcyBNZXNoRGF0YTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaGFzTm9ybWFsczogQm9vbGVhbihhdHRyaWJ1dGVzLk5PUk1BTCB8fCBhdHRyaWJ1dGVzLm5vcm1hbHMpXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5nZXRBdHRyaWJ1dGVNYW5hZ2VyKCk/LmludmFsaWRhdGVBbGwoKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMgJiYgcHJvcHMuaW1hZ2VzKSB7XG4gICAgICB0aGlzLnVwZGF0ZUltYWdlcyh7cHJvcHMsIG9sZFByb3BzfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGUubW9kZWwpIHtcbiAgICAgIHRoaXMuc3RhdGUubW9kZWwuc2V0VG9wb2xvZ3k/LihcbiAgICAgICAgdGhpcy5wcm9wcy53aXJlZnJhbWUgPyBUT1BPTE9HWS5MSU5FX1NUUklQIDogVE9QT0xPR1kuVFJJQU5HTEVfTElTVFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVJbWFnZXMoe1xuICAgIHByb3BzLFxuICAgIG9sZFByb3BzXG4gIH06IHtcbiAgICBwcm9wczogUmFzdGVyTGF5ZXJBZGRlZFByb3BzO1xuICAgIG9sZFByb3BzOiBSYXN0ZXJMYXllckFkZGVkUHJvcHM7XG4gIH0pOiB2b2lkIHtcbiAgICBjb25zdCB7aW1hZ2VzfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgZGV2aWNlID0gdGhpcy5jb250ZXh0LmRldmljZTtcbiAgICBjb25zdCBnbCA9IGRldmljZT8uZ2wgfHwgdGhpcy5jb250ZXh0LmdsO1xuXG4gICAgY29uc3Qge2ltYWdlczogbmV3SW1hZ2VzLCBoYXNQZW5kaW5nVXBsb2Fkc30gPSBsb2FkSW1hZ2VzKHtcbiAgICAgIGdsLFxuICAgICAgZGV2aWNlLFxuICAgICAgaW1hZ2VzLFxuICAgICAgaW1hZ2VzRGF0YTogcHJvcHMuaW1hZ2VzLFxuICAgICAgb2xkSW1hZ2VzRGF0YTogb2xkUHJvcHMuaW1hZ2VzXG4gICAgfSk7XG5cbiAgICBpZiAobmV3SW1hZ2VzKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtpbWFnZXM6IG5ld0ltYWdlc30pO1xuICAgIH1cbiAgICAvLyBJZiBhbnkgdGV4dHVyZSB1cGxvYWQgZmFpbGVkLCBzdGFzaCB0aGUgaW1hZ2VzRGF0YSBhbmQgc2NoZWR1bGUgYSByZXRyeVxuICAgIC8vIG5leHQgZnJhbWUuIFRoZSByZXRyeSBwYXNzZXMgb2xkSW1hZ2VzRGF0YToge30gc28gYWxsIGtleXMgYnlwYXNzIHRoZVxuICAgIC8vIGlzRXF1YWwgc2tpcC1jaGVjay5cbiAgICBpZiAoaGFzUGVuZGluZ1VwbG9hZHMpIHtcbiAgICAgIHRoaXMuX3BlbmRpbmdJbWFnZVJldHJ5ID0gcHJvcHMuaW1hZ2VzO1xuICAgICAgdGhpcy5faW1hZ2VSZXRyeUNvdW50ID0gMDtcbiAgICAgIHRoaXMuX3NjaGVkdWxlUmVkcmF3KCk7XG4gICAgfVxuICB9XG5cbiAgZHJhdyhfb3B0czogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICAvLyBJZiBhIHByZXZpb3VzIGZyYW1lIGhhZCBmYWlsZWQgdGV4dHVyZSB1cGxvYWRzLCByZXRyeSB0aGVtIG5vdyBiZWZvcmVcbiAgICAvLyBjaGVja2luZyB3aGV0aGVyIHRoZSBpbWFnZXMgc3RhdGUgaXMgY29tcGxldGUuIFBhc3Mgb2xkSW1hZ2VzRGF0YToge30gc29cbiAgICAvLyBhbGwga2V5cyBhcmUgdHJlYXRlZCBhcyBuZXcgYW5kIGJ5cGFzcyB0aGUgaXNFcXVhbCBza2lwLWNoZWNrLlxuICAgIC8vIFJldHJpZXMgYXJlIGJvdW5kZWQgdG8gTUFYX0lNQUdFX1JFVFJZX0FUVEVNUFRTIHRvIGF2b2lkIGFuIGluZmluaXRlXG4gICAgLy8gcmVkcmF3IGxvb3Agd2hlbiBpbWFnZSBkYXRhIGlzIHBlcm1hbmVudGx5IGludmFsaWQuXG4gICAgaWYgKHRoaXMuX3BlbmRpbmdJbWFnZVJldHJ5KSB7XG4gICAgICBjb25zdCByZXRyeSA9IHRoaXMuX3BlbmRpbmdJbWFnZVJldHJ5O1xuICAgICAgdGhpcy5fcGVuZGluZ0ltYWdlUmV0cnkgPSBudWxsO1xuICAgICAgY29uc3Qge2ltYWdlczogbmV3SW1hZ2VzLCBoYXNQZW5kaW5nVXBsb2Fkc30gPSBsb2FkSW1hZ2VzKHtcbiAgICAgICAgZ2w6IHRoaXMuY29udGV4dC5kZXZpY2U/LmdsIHx8IHRoaXMuY29udGV4dC5nbCxcbiAgICAgICAgZGV2aWNlOiB0aGlzLmNvbnRleHQuZGV2aWNlLFxuICAgICAgICBpbWFnZXM6IHRoaXMuc3RhdGUuaW1hZ2VzLFxuICAgICAgICBpbWFnZXNEYXRhOiByZXRyeSxcbiAgICAgICAgb2xkSW1hZ2VzRGF0YToge31cbiAgICAgIH0pO1xuICAgICAgaWYgKG5ld0ltYWdlcykge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtpbWFnZXM6IG5ld0ltYWdlc30pO1xuICAgICAgfVxuICAgICAgaWYgKGhhc1BlbmRpbmdVcGxvYWRzKSB7XG4gICAgICAgIHRoaXMuX2ltYWdlUmV0cnlDb3VudCsrO1xuICAgICAgICBpZiAodGhpcy5faW1hZ2VSZXRyeUNvdW50IDwgUmFzdGVyTWVzaExheWVyLk1BWF9JTUFHRV9SRVRSWV9BVFRFTVBUUykge1xuICAgICAgICAgIHRoaXMuX3BlbmRpbmdJbWFnZVJldHJ5ID0gcmV0cnk7XG4gICAgICAgICAgdGhpcy5fc2NoZWR1bGVSZWRyYXcoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgUmFzdGVyTWVzaExheWVyOiB0ZXh0dXJlIHVwbG9hZCBmYWlsZWQgYWZ0ZXIgJHtSYXN0ZXJNZXNoTGF5ZXIuTUFYX0lNQUdFX1JFVFJZX0FUVEVNUFRTfSBhdHRlbXB0cywgZ2l2aW5nIHVwLmBcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuX2ltYWdlUmV0cnlDb3VudCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2ltYWdlUmV0cnlDb3VudCA9IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qge21vZGVsLCBpbWFnZXN9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCB7bW9kdWxlUHJvcHN9ID0gdGhpcy5wcm9wcztcblxuICAgIGlmIChcbiAgICAgICFtb2RlbCB8fFxuICAgICAgIWltYWdlcyB8fFxuICAgICAgT2JqZWN0LmtleXMoaW1hZ2VzKS5sZW5ndGggPT09IDAgfHxcbiAgICAgICFPYmplY3QudmFsdWVzKGltYWdlcykuZXZlcnkoaXRlbSA9PiBpdGVtKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNldCBtZXNoLXNwZWNpZmljIFVCTyB1bmlmb3Jtc1xuICAgIG1vZGVsLnNoYWRlcklucHV0cy5zZXRQcm9wcyh7XG4gICAgICByYXN0ZXJNZXNoOiB7XG4gICAgICAgIG1lc2hPcGFjaXR5OiB0aGlzLnByb3BzLm9wYWNpdHkgPz8gMSxcbiAgICAgICAgbWVzaEZsYXRTaGFkaW5nOiAhdGhpcy5zdGF0ZS5oYXNOb3JtYWxzID8gMS4wIDogMC4wXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBBcHBseSBlYWNoIGN1c3RvbSBtb2R1bGUncyB1bmlmb3Jtcy9iaW5kaW5ncyB0byBzaGFkZXJJbnB1dHMgZGlyZWN0bHkuXG4gICAgLy8gV2UgY2FsbCBnZXRVbmlmb3JtcyBvbmNlIHBlciBtb2R1bGUgYW5kIHdyaXRlIHRoZSByZXN1bHRzIGludG9cbiAgICAvLyBzaGFkZXJJbnB1dHMubW9kdWxlVW5pZm9ybXMvbW9kdWxlQmluZGluZ3MsIGJ5cGFzc2luZyBzZXRQcm9wcygpIHdoaWNoXG4gICAgLy8gd291bGQgY2FsbCBnZXRVbmlmb3JtcyBhIHNlY29uZCB0aW1lIG9uIGFscmVhZHktdHJhbnNmb3JtZWQgdmFsdWVzLlxuICAgIGNvbnN0IGFsbE1vZHVsZVByb3BzID0gey4uLm1vZHVsZVByb3BzLCAuLi5pbWFnZXN9O1xuICAgIGNvbnN0IG1vZHVsZXMgPSB0aGlzLnByb3BzLm1vZHVsZXMgfHwgW107XG4gICAgYXBwbHlNb2R1bGVVbmlmb3Jtcyhtb2RlbC5zaGFkZXJJbnB1dHMsIG1vZHVsZXMsIGFsbE1vZHVsZVByb3BzKTtcblxuICAgIGNvbnN0IGRyYXdTdWNjZXNzID0gbW9kZWwuZHJhdyh0aGlzLmNvbnRleHQucmVuZGVyUGFzcyk7XG4gICAgaWYgKCFkcmF3U3VjY2Vzcykge1xuICAgICAgdGhpcy5fc2NoZWR1bGVSZWRyYXcoKTtcbiAgICB9XG4gIH1cblxuICBfc2NoZWR1bGVSZWRyYXcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3JlZHJhd1NjaGVkdWxlZCkgcmV0dXJuO1xuICAgIHRoaXMuX3JlZHJhd1NjaGVkdWxlZCA9IHRydWU7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIHRoaXMuX3JlZHJhd1NjaGVkdWxlZCA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMuY29udGV4dC5kZWNrKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYWNjZXNzaW5nIHByaXZhdGUgZGVjay5nbCBwcm9wZXJ0eVxuICAgICAgICB0aGlzLmNvbnRleHQuZGVjay5fbmVlZHNSZWRyYXcgPSAnUmFzdGVyTWVzaExheWVyIHBpcGVsaW5lIHBlbmRpbmcnO1xuICAgICAgfVxuICAgICAgdGhpcy5jb250ZXh0LmxheWVyTWFuYWdlcj8uc2V0TmVlZHNSZWRyYXcoJ1Jhc3Rlck1lc2hMYXllciBwaXBlbGluZSBwZW5kaW5nJyk7XG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25SZWRyYXdOZWVkZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vblJlZHJhd05lZWRlZCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZmluYWxpemVTdGF0ZSgpOiB2b2lkIHtcbiAgICBzdXBlci5maW5hbGl6ZVN0YXRlKHRoaXMuY29udGV4dCk7XG5cbiAgICBpZiAodGhpcy5zdGF0ZS5pbWFnZXMpIHtcbiAgICAgIGZvciAoY29uc3QgaW1hZ2Ugb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnN0YXRlLmltYWdlcykpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW1hZ2UpKSB7XG4gICAgICAgICAgaW1hZ2UubWFwKHggPT4geCAmJiAoeC5kZXN0cm95ID8geC5kZXN0cm95KCkgOiB4LmRlbGV0ZT8uKCkpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbWFnZSkge1xuICAgICAgICAgIGltYWdlLmRlc3Ryb3kgPyBpbWFnZS5kZXN0cm95KCkgOiBpbWFnZS5kZWxldGU/LigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldE1vZGVsKG1lc2g6IE1lc2gpOiBNb2RlbCB7XG4gICAgY29uc3QgZGV2aWNlID0gdGhpcy5jb250ZXh0LmRldmljZSB8fCB0aGlzLmNvbnRleHQuZ2w7XG5cbiAgICBjb25zdCBtb2RlbCA9IG5ldyBNb2RlbChcbiAgICAgIGRldmljZSxcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZ2V0U2hhZGVycygpLCB7XG4gICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICBnZW9tZXRyeTogZ2V0R2VvbWV0cnkobWVzaCBhcyBNZXNoRGF0YSB8IEdlb21ldHJ5KSxcbiAgICAgICAgaXNJbnN0YW5jZWQ6IGZhbHNlXG4gICAgICB9KVxuICAgICk7XG5cbiAgICByZXR1cm4gbW9kZWw7XG4gIH1cbn1cblxuUmFzdGVyTWVzaExheWVyLmxheWVyTmFtZSA9ICdSYXN0ZXJNZXNoTGF5ZXInO1xuUmFzdGVyTWVzaExheWVyLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7O0FBR0EsU0FBUUEsZUFBZSxRQUE2QixzQkFBc0I7QUFDMUUsU0FBUUMsUUFBUSxRQUFPLGlCQUFpQjtBQUN4QyxTQUFRQyxLQUFLLFFBQU8saUJBQWlCO0FBRXJDLFNBQ0VDLDZCQUE2QixFQUM3QkMsMkJBQTJCLEVBQzNCQyxrQkFBa0IsUUFDYiw2QkFBNkI7QUFDcEMsU0FDRUMsMkJBQTJCLEVBQzNCQyxrQkFBa0IsUUFDYixzQ0FBc0M7QUFDN0MsU0FBUUMsVUFBVSxRQUFPLFdBQVc7QUFFcEMsU0FBUUMsWUFBWSxFQUFFQyxtQkFBbUIsUUFBTyxTQUFTO0FBQ3pELFNBQVFDLHVCQUF1QixRQUFPLDhCQUE4QjtBQUNwRSxTQUFRQyx3QkFBd0IsUUFBTywrQkFBK0I7QUFDdEUsU0FBUUMsUUFBUSxRQUFPLHNCQUFzQjtBQWE3QyxTQUFTQywwQkFBMEJBLENBQUNDLFVBQW1DLEVBQUU7RUFDdkUsSUFBSSxFQUFFQSxVQUFVLENBQUNDLFNBQVMsSUFBSUQsVUFBVSxDQUFDRSxRQUFRLENBQUMsRUFBRTtJQUNsRCxNQUFNLElBQUlDLEtBQUssQ0FDYixnRkFDRixDQUFDO0VBQ0g7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNDLFdBQVdBLENBQUNDLElBQXlCLEVBQVk7RUFDeEQsSUFBSSxZQUFZLElBQUlBLElBQUksSUFBSUEsSUFBSSxDQUFDTCxVQUFVLEVBQUU7SUFDM0NELDBCQUEwQixDQUFDTSxJQUFJLENBQUNMLFVBQVUsQ0FBQztJQUMzQyxJQUFJSyxJQUFJLFlBQVluQixRQUFRLEVBQUU7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
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// Copyright contributors to the kepler.gl project
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Shared UBO for all raster processing module uniforms.
|
|
6
|
+
*
|
|
7
|
+
* WebGL2 guarantees only 12 fragment uniform blocks (GL_MAX_FRAGMENT_UNIFORM_BUFFERS).
|
|
8
|
+
* Without consolidation, the base layer already uses 8–9 blocks (project, picking,
|
|
9
|
+
* lighting, phongMaterial, floatColors, layer, shadow, simpleMesh/rasterMesh, raster),
|
|
10
|
+
* leaving only 3–4 for raster processing modules. Since a typical pipeline can use
|
|
11
|
+
* 5–9 raster modules (combineBands, mask, reorderBands, linearRescale, gammaContrast,
|
|
12
|
+
* sigmoidalContrast, colormap, filter, saturation), each declaring its own UBO block
|
|
13
|
+
* would exceed the limit.
|
|
14
|
+
*
|
|
15
|
+
* This module declares a single UBO that contains all possible raster processing
|
|
16
|
+
* uniforms. Individual modules' GLSL code still references the uniforms through
|
|
17
|
+
* the block instance name, and prepareLumaModules() rewires the declarations.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
var RASTER_PROCESSING_UNIFORM_BLOCK = "uniform rasterProcessingUniforms {\n // linear_rescale\n float linear_rescale_scaler;\n float linear_rescale_offset;\n\n // gamma_contrast\n float gamma_contrast_gamma1;\n float gamma_contrast_gamma2;\n float gamma_contrast_gamma3;\n float gamma_contrast_gamma4;\n\n // sigmoidalContrast\n float sigmoidalContrast_contrast;\n float sigmoidalContrast_bias;\n\n // colormap\n int colormap_hasCategoricalColors;\n int colormap_categoricalMinValue;\n int colormap_categoricalMaxValue;\n int colormap_maxPixelValue;\n\n // bandFilter\n float bandFilter_min1;\n float bandFilter_max1;\n float bandFilter_min2;\n float bandFilter_max2;\n float bandFilter_min3;\n float bandFilter_max3;\n float bandFilter_min4;\n float bandFilter_max4;\n\n // saturation\n float saturation_value;\n\n // reorder_bands\n mat4 reorder_bands_ordering;\n\n // mask (shared by mask_image_float, mask_image_uint, mask_image_int)\n float mask_keepMin;\n float mask_keepMax;\n\n // pansharpen_brovey\n float pansharpen_brovey_panWeight;\n} rasterProcessing;\n";
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* GLSL #define aliases that let per-module code continue referencing uniforms
|
|
24
|
+
* through their original block instance names (e.g. `linear_rescale.scaler`).
|
|
25
|
+
*/
|
|
26
|
+
var ALIAS_DEFINES = "#define linear_rescale_scaler_ALIAS rasterProcessing.linear_rescale_scaler\n#define linear_rescale_offset_ALIAS rasterProcessing.linear_rescale_offset\n#define gamma_contrast_gamma1_ALIAS rasterProcessing.gamma_contrast_gamma1\n#define gamma_contrast_gamma2_ALIAS rasterProcessing.gamma_contrast_gamma2\n#define gamma_contrast_gamma3_ALIAS rasterProcessing.gamma_contrast_gamma3\n#define gamma_contrast_gamma4_ALIAS rasterProcessing.gamma_contrast_gamma4\n#define sigmoidalContrast_contrast_ALIAS rasterProcessing.sigmoidalContrast_contrast\n#define sigmoidalContrast_bias_ALIAS rasterProcessing.sigmoidalContrast_bias\n#define colormap_hasCategoricalColors_ALIAS rasterProcessing.colormap_hasCategoricalColors\n#define colormap_categoricalMinValue_ALIAS rasterProcessing.colormap_categoricalMinValue\n#define colormap_categoricalMaxValue_ALIAS rasterProcessing.colormap_categoricalMaxValue\n#define colormap_maxPixelValue_ALIAS rasterProcessing.colormap_maxPixelValue\n#define bandFilter_min1_ALIAS rasterProcessing.bandFilter_min1\n#define bandFilter_max1_ALIAS rasterProcessing.bandFilter_max1\n#define bandFilter_min2_ALIAS rasterProcessing.bandFilter_min2\n#define bandFilter_max2_ALIAS rasterProcessing.bandFilter_max2\n#define bandFilter_min3_ALIAS rasterProcessing.bandFilter_min3\n#define bandFilter_max3_ALIAS rasterProcessing.bandFilter_max3\n#define bandFilter_min4_ALIAS rasterProcessing.bandFilter_min4\n#define bandFilter_max4_ALIAS rasterProcessing.bandFilter_max4\n#define saturation_value_ALIAS rasterProcessing.saturation_value\n#define reorder_bands_ordering_ALIAS rasterProcessing.reorder_bands_ordering\n#define mask_keepMin_ALIAS rasterProcessing.mask_keepMin\n#define mask_keepMax_ALIAS rasterProcessing.mask_keepMax\n#define pansharpen_brovey_panWeight_ALIAS rasterProcessing.pansharpen_brovey_panWeight\n";
|
|
27
|
+
export var RASTER_PROCESSING_FS = RASTER_PROCESSING_UNIFORM_BLOCK + ALIAS_DEFINES;
|
|
28
|
+
export var rasterProcessingUniforms = {
|
|
29
|
+
name: 'rasterProcessing',
|
|
30
|
+
fs: RASTER_PROCESSING_FS,
|
|
31
|
+
vs: '',
|
|
32
|
+
uniformTypes: {
|
|
33
|
+
linear_rescale_scaler: 'f32',
|
|
34
|
+
linear_rescale_offset: 'f32',
|
|
35
|
+
gamma_contrast_gamma1: 'f32',
|
|
36
|
+
gamma_contrast_gamma2: 'f32',
|
|
37
|
+
gamma_contrast_gamma3: 'f32',
|
|
38
|
+
gamma_contrast_gamma4: 'f32',
|
|
39
|
+
sigmoidalContrast_contrast: 'f32',
|
|
40
|
+
sigmoidalContrast_bias: 'f32',
|
|
41
|
+
colormap_hasCategoricalColors: 'i32',
|
|
42
|
+
colormap_categoricalMinValue: 'i32',
|
|
43
|
+
colormap_categoricalMaxValue: 'i32',
|
|
44
|
+
colormap_maxPixelValue: 'i32',
|
|
45
|
+
bandFilter_min1: 'f32',
|
|
46
|
+
bandFilter_max1: 'f32',
|
|
47
|
+
bandFilter_min2: 'f32',
|
|
48
|
+
bandFilter_max2: 'f32',
|
|
49
|
+
bandFilter_min3: 'f32',
|
|
50
|
+
bandFilter_max3: 'f32',
|
|
51
|
+
bandFilter_min4: 'f32',
|
|
52
|
+
bandFilter_max4: 'f32',
|
|
53
|
+
saturation_value: 'f32',
|
|
54
|
+
reorder_bands_ordering: 'mat4x4<f32>',
|
|
55
|
+
mask_keepMin: 'f32',
|
|
56
|
+
mask_keepMax: 'f32',
|
|
57
|
+
pansharpen_brovey_panWeight: 'f32'
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Map from original module uniform names (as returned by getUniforms) to
|
|
63
|
+
* the prefixed names used in the shared UBO.
|
|
64
|
+
*/
|
|
65
|
+
export var UNIFORM_NAME_MAP = {
|
|
66
|
+
linear_rescale: {
|
|
67
|
+
scaler: 'linear_rescale_scaler',
|
|
68
|
+
offset: 'linear_rescale_offset'
|
|
69
|
+
},
|
|
70
|
+
gamma_contrast: {
|
|
71
|
+
gamma1: 'gamma_contrast_gamma1',
|
|
72
|
+
gamma2: 'gamma_contrast_gamma2',
|
|
73
|
+
gamma3: 'gamma_contrast_gamma3',
|
|
74
|
+
gamma4: 'gamma_contrast_gamma4'
|
|
75
|
+
},
|
|
76
|
+
sigmoidalContrast: {
|
|
77
|
+
contrast: 'sigmoidalContrast_contrast',
|
|
78
|
+
bias: 'sigmoidalContrast_bias'
|
|
79
|
+
},
|
|
80
|
+
colormap: {
|
|
81
|
+
hasCategoricalColors: 'colormap_hasCategoricalColors',
|
|
82
|
+
categoricalMinValue: 'colormap_categoricalMinValue',
|
|
83
|
+
categoricalMaxValue: 'colormap_categoricalMaxValue',
|
|
84
|
+
maxPixelValue: 'colormap_maxPixelValue'
|
|
85
|
+
},
|
|
86
|
+
bandFilter: {
|
|
87
|
+
min1: 'bandFilter_min1',
|
|
88
|
+
max1: 'bandFilter_max1',
|
|
89
|
+
min2: 'bandFilter_min2',
|
|
90
|
+
max2: 'bandFilter_max2',
|
|
91
|
+
min3: 'bandFilter_min3',
|
|
92
|
+
max3: 'bandFilter_max3',
|
|
93
|
+
min4: 'bandFilter_min4',
|
|
94
|
+
max4: 'bandFilter_max4'
|
|
95
|
+
},
|
|
96
|
+
saturation: {
|
|
97
|
+
value: 'saturation_value'
|
|
98
|
+
},
|
|
99
|
+
reorder_bands: {
|
|
100
|
+
ordering: 'reorder_bands_ordering'
|
|
101
|
+
},
|
|
102
|
+
mask_image_float: {
|
|
103
|
+
keepMin: 'mask_keepMin',
|
|
104
|
+
keepMax: 'mask_keepMax'
|
|
105
|
+
},
|
|
106
|
+
mask_image_uint: {
|
|
107
|
+
keepMin: 'mask_keepMin',
|
|
108
|
+
keepMax: 'mask_keepMax'
|
|
109
|
+
},
|
|
110
|
+
mask_image_int: {
|
|
111
|
+
keepMin: 'mask_keepMin',
|
|
112
|
+
keepMax: 'mask_keepMax'
|
|
113
|
+
},
|
|
114
|
+
pansharpen_brovey: {
|
|
115
|
+
panWeight: 'pansharpen_brovey_panWeight'
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSQVNURVJfUFJPQ0VTU0lOR19VTklGT1JNX0JMT0NLIiwiQUxJQVNfREVGSU5FUyIsIlJBU1RFUl9QUk9DRVNTSU5HX0ZTIiwicmFzdGVyUHJvY2Vzc2luZ1VuaWZvcm1zIiwibmFtZSIsImZzIiwidnMiLCJ1bmlmb3JtVHlwZXMiLCJsaW5lYXJfcmVzY2FsZV9zY2FsZXIiLCJsaW5lYXJfcmVzY2FsZV9vZmZzZXQiLCJnYW1tYV9jb250cmFzdF9nYW1tYTEiLCJnYW1tYV9jb250cmFzdF9nYW1tYTIiLCJnYW1tYV9jb250cmFzdF9nYW1tYTMiLCJnYW1tYV9jb250cmFzdF9nYW1tYTQiLCJzaWdtb2lkYWxDb250cmFzdF9jb250cmFzdCIsInNpZ21vaWRhbENvbnRyYXN0X2JpYXMiLCJjb2xvcm1hcF9oYXNDYXRlZ29yaWNhbENvbG9ycyIsImNvbG9ybWFwX2NhdGVnb3JpY2FsTWluVmFsdWUiLCJjb2xvcm1hcF9jYXRlZ29yaWNhbE1heFZhbHVlIiwiY29sb3JtYXBfbWF4UGl4ZWxWYWx1ZSIsImJhbmRGaWx0ZXJfbWluMSIsImJhbmRGaWx0ZXJfbWF4MSIsImJhbmRGaWx0ZXJfbWluMiIsImJhbmRGaWx0ZXJfbWF4MiIsImJhbmRGaWx0ZXJfbWluMyIsImJhbmRGaWx0ZXJfbWF4MyIsImJhbmRGaWx0ZXJfbWluNCIsImJhbmRGaWx0ZXJfbWF4NCIsInNhdHVyYXRpb25fdmFsdWUiLCJyZW9yZGVyX2JhbmRzX29yZGVyaW5nIiwibWFza19rZWVwTWluIiwibWFza19rZWVwTWF4IiwicGFuc2hhcnBlbl9icm92ZXlfcGFuV2VpZ2h0IiwiVU5JRk9STV9OQU1FX01BUCIsImxpbmVhcl9yZXNjYWxlIiwic2NhbGVyIiwib2Zmc2V0IiwiZ2FtbWFfY29udHJhc3QiLCJnYW1tYTEiLCJnYW1tYTIiLCJnYW1tYTMiLCJnYW1tYTQiLCJzaWdtb2lkYWxDb250cmFzdCIsImNvbnRyYXN0IiwiYmlhcyIsImNvbG9ybWFwIiwiaGFzQ2F0ZWdvcmljYWxDb2xvcnMiLCJjYXRlZ29yaWNhbE1pblZhbHVlIiwiY2F0ZWdvcmljYWxNYXhWYWx1ZSIsIm1heFBpeGVsVmFsdWUiLCJiYW5kRmlsdGVyIiwibWluMSIsIm1heDEiLCJtaW4yIiwibWF4MiIsIm1pbjMiLCJtYXgzIiwibWluNCIsIm1heDQiLCJzYXR1cmF0aW9uIiwidmFsdWUiLCJyZW9yZGVyX2JhbmRzIiwib3JkZXJpbmciLCJtYXNrX2ltYWdlX2Zsb2F0Iiwia2VlcE1pbiIsImtlZXBNYXgiLCJtYXNrX2ltYWdlX3VpbnQiLCJtYXNrX2ltYWdlX2ludCIsInBhbnNoYXJwZW5fYnJvdmV5IiwicGFuV2VpZ2h0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Jhc3Rlci9yYXN0ZXItcHJvY2Vzc2luZy11bmlmb3Jtcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG4vKipcbiAqIFNoYXJlZCBVQk8gZm9yIGFsbCByYXN0ZXIgcHJvY2Vzc2luZyBtb2R1bGUgdW5pZm9ybXMuXG4gKlxuICogV2ViR0wyIGd1YXJhbnRlZXMgb25seSAxMiBmcmFnbWVudCB1bmlmb3JtIGJsb2NrcyAoR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fQlVGRkVSUykuXG4gKiBXaXRob3V0IGNvbnNvbGlkYXRpb24sIHRoZSBiYXNlIGxheWVyIGFscmVhZHkgdXNlcyA44oCTOSBibG9ja3MgKHByb2plY3QsIHBpY2tpbmcsXG4gKiBsaWdodGluZywgcGhvbmdNYXRlcmlhbCwgZmxvYXRDb2xvcnMsIGxheWVyLCBzaGFkb3csIHNpbXBsZU1lc2gvcmFzdGVyTWVzaCwgcmFzdGVyKSxcbiAqIGxlYXZpbmcgb25seSAz4oCTNCBmb3IgcmFzdGVyIHByb2Nlc3NpbmcgbW9kdWxlcy4gU2luY2UgYSB0eXBpY2FsIHBpcGVsaW5lIGNhbiB1c2VcbiAqIDXigJM5IHJhc3RlciBtb2R1bGVzIChjb21iaW5lQmFuZHMsIG1hc2ssIHJlb3JkZXJCYW5kcywgbGluZWFyUmVzY2FsZSwgZ2FtbWFDb250cmFzdCxcbiAqIHNpZ21vaWRhbENvbnRyYXN0LCBjb2xvcm1hcCwgZmlsdGVyLCBzYXR1cmF0aW9uKSwgZWFjaCBkZWNsYXJpbmcgaXRzIG93biBVQk8gYmxvY2tcbiAqIHdvdWxkIGV4Y2VlZCB0aGUgbGltaXQuXG4gKlxuICogVGhpcyBtb2R1bGUgZGVjbGFyZXMgYSBzaW5nbGUgVUJPIHRoYXQgY29udGFpbnMgYWxsIHBvc3NpYmxlIHJhc3RlciBwcm9jZXNzaW5nXG4gKiB1bmlmb3Jtcy4gSW5kaXZpZHVhbCBtb2R1bGVzJyBHTFNMIGNvZGUgc3RpbGwgcmVmZXJlbmNlcyB0aGUgdW5pZm9ybXMgdGhyb3VnaFxuICogdGhlIGJsb2NrIGluc3RhbmNlIG5hbWUsIGFuZCBwcmVwYXJlTHVtYU1vZHVsZXMoKSByZXdpcmVzIHRoZSBkZWNsYXJhdGlvbnMuXG4gKi9cblxuY29uc3QgUkFTVEVSX1BST0NFU1NJTkdfVU5JRk9STV9CTE9DSyA9IGBcXFxudW5pZm9ybSByYXN0ZXJQcm9jZXNzaW5nVW5pZm9ybXMge1xuICAvLyBsaW5lYXJfcmVzY2FsZVxuICBmbG9hdCBsaW5lYXJfcmVzY2FsZV9zY2FsZXI7XG4gIGZsb2F0IGxpbmVhcl9yZXNjYWxlX29mZnNldDtcblxuICAvLyBnYW1tYV9jb250cmFzdFxuICBmbG9hdCBnYW1tYV9jb250cmFzdF9nYW1tYTE7XG4gIGZsb2F0IGdhbW1hX2NvbnRyYXN0X2dhbW1hMjtcbiAgZmxvYXQgZ2FtbWFfY29udHJhc3RfZ2FtbWEzO1xuICBmbG9hdCBnYW1tYV9jb250cmFzdF9nYW1tYTQ7XG5cbiAgLy8gc2lnbW9pZGFsQ29udHJhc3RcbiAgZmxvYXQgc2lnbW9pZGFsQ29udHJhc3RfY29udHJhc3Q7XG4gIGZsb2F0IHNpZ21vaWRhbENvbnRyYXN0X2JpYXM7XG5cbiAgLy8gY29sb3JtYXBcbiAgaW50IGNvbG9ybWFwX2hhc0NhdGVnb3JpY2FsQ29sb3JzO1xuICBpbnQgY29sb3JtYXBfY2F0ZWdvcmljYWxNaW5WYWx1ZTtcbiAgaW50IGNvbG9ybWFwX2NhdGVnb3JpY2FsTWF4VmFsdWU7XG4gIGludCBjb2xvcm1hcF9tYXhQaXhlbFZhbHVlO1xuXG4gIC8vIGJhbmRGaWx0ZXJcbiAgZmxvYXQgYmFuZEZpbHRlcl9taW4xO1xuICBmbG9hdCBiYW5kRmlsdGVyX21heDE7XG4gIGZsb2F0IGJhbmRGaWx0ZXJfbWluMjtcbiAgZmxvYXQgYmFuZEZpbHRlcl9tYXgyO1xuICBmbG9hdCBiYW5kRmlsdGVyX21pbjM7XG4gIGZsb2F0IGJhbmRGaWx0ZXJfbWF4MztcbiAgZmxvYXQgYmFuZEZpbHRlcl9taW40O1xuICBmbG9hdCBiYW5kRmlsdGVyX21heDQ7XG5cbiAgLy8gc2F0dXJhdGlvblxuICBmbG9hdCBzYXR1cmF0aW9uX3ZhbHVlO1xuXG4gIC8vIHJlb3JkZXJfYmFuZHNcbiAgbWF0NCByZW9yZGVyX2JhbmRzX29yZGVyaW5nO1xuXG4gIC8vIG1hc2sgKHNoYXJlZCBieSBtYXNrX2ltYWdlX2Zsb2F0LCBtYXNrX2ltYWdlX3VpbnQsIG1hc2tfaW1hZ2VfaW50KVxuICBmbG9hdCBtYXNrX2tlZXBNaW47XG4gIGZsb2F0IG1hc2tfa2VlcE1heDtcblxuICAvLyBwYW5zaGFycGVuX2Jyb3ZleVxuICBmbG9hdCBwYW5zaGFycGVuX2Jyb3ZleV9wYW5XZWlnaHQ7XG59IHJhc3RlclByb2Nlc3Npbmc7XG5gO1xuXG4vKipcbiAqIEdMU0wgI2RlZmluZSBhbGlhc2VzIHRoYXQgbGV0IHBlci1tb2R1bGUgY29kZSBjb250aW51ZSByZWZlcmVuY2luZyB1bmlmb3Jtc1xuICogdGhyb3VnaCB0aGVpciBvcmlnaW5hbCBibG9jayBpbnN0YW5jZSBuYW1lcyAoZS5nLiBgbGluZWFyX3Jlc2NhbGUuc2NhbGVyYCkuXG4gKi9cbmNvbnN0IEFMSUFTX0RFRklORVMgPSBgXFxcbiNkZWZpbmUgbGluZWFyX3Jlc2NhbGVfc2NhbGVyX0FMSUFTIHJhc3RlclByb2Nlc3NpbmcubGluZWFyX3Jlc2NhbGVfc2NhbGVyXG4jZGVmaW5lIGxpbmVhcl9yZXNjYWxlX29mZnNldF9BTElBUyByYXN0ZXJQcm9jZXNzaW5nLmxpbmVhcl9yZXNjYWxlX29mZnNldFxuI2RlZmluZSBnYW1tYV9jb250cmFzdF9nYW1tYTFfQUxJQVMgcmFzdGVyUHJvY2Vzc2luZy5nYW1tYV9jb250cmFzdF9nYW1tYTFcbiNkZWZpbmUgZ2FtbWFfY29udHJhc3RfZ2FtbWEyX0FMSUFTIHJhc3RlclByb2Nlc3NpbmcuZ2FtbWFfY29udHJhc3RfZ2FtbWEyXG4jZGVmaW5lIGdhbW1hX2NvbnRyYXN0X2dhbW1hM19BTElBUyByYXN0ZXJQcm9jZXNzaW5nLmdhbW1hX2NvbnRyYXN0X2dhbW1hM1xuI2RlZmluZSBnYW1tYV9jb250cmFzdF9nYW1tYTRfQUxJQVMgcmFzdGVyUHJvY2Vzc2luZy5nYW1tYV9jb250cmFzdF9nYW1tYTRcbiNkZWZpbmUgc2lnbW9pZGFsQ29udHJhc3RfY29udHJhc3RfQUxJQVMgcmFzdGVyUHJvY2Vzc2luZy5zaWdtb2lkYWxDb250cmFzdF9jb250cmFzdFxuI2RlZmluZSBzaWdtb2lkYWxDb250cmFzdF9iaWFzX0FMSUFTIHJhc3RlclByb2Nlc3Npbmcuc2lnbW9pZGFsQ29udHJhc3RfYmlhc1xuI2RlZmluZSBjb2xvcm1hcF9oYXNDYXRlZ29yaWNhbENvbG9yc19BTElBUyByYXN0ZXJQcm9jZXNzaW5nLmNvbG9ybWFwX2hhc0NhdGVnb3JpY2FsQ29sb3JzXG4jZGVmaW5lIGNvbG9ybWFwX2NhdGVnb3JpY2FsTWluVmFsdWVfQUxJQVMgcmFzdGVyUHJvY2Vzc2luZy5jb2xvcm1hcF9jYXRlZ29yaWNhbE1pblZhbHVlXG4jZGVmaW5lIGNvbG9ybWFwX2NhdGVnb3JpY2FsTWF4VmFsdWVfQUxJQVMgcmFzdGVyUHJvY2Vzc2luZy5jb2xvcm1hcF9jYXRlZ29yaWNhbE1heFZhbHVlXG4jZGVmaW5lIGNvbG9ybWFwX21heFBpeGVsVmFsdWVfQUxJQVMgcmFzdGVyUHJvY2Vzc2luZy5jb2xvcm1hcF9tYXhQaXhlbFZhbHVlXG4jZGVmaW5lIGJhbmRGaWx0ZXJfbWluMV9BTElBUyByYXN0ZXJQcm9jZXNzaW5nLmJhbmRGaWx0ZXJfbWluMVxuI2RlZmluZSBiYW5kRmlsdGVyX21heDFfQUxJQVMgcmFzdGVyUHJvY2Vzc2luZy5iYW5kRmlsdGVyX21heDFcbiNkZWZpbmUgYmFuZEZpbHRlcl9taW4yX0FMSUFTIHJhc3RlclByb2Nlc3NpbmcuYmFuZEZpbHRlcl9taW4yXG4jZGVmaW5lIGJhbmRGaWx0ZXJfbWF4Ml9BTElBUyByYXN0ZXJQcm9jZXNzaW5nLmJhbmRGaWx0ZXJfbWF4MlxuI2RlZmluZSBiYW5kRmlsdGVyX21pbjNfQUxJQVMgcmFzdGVyUHJvY2Vzc2luZy5iYW5kRmlsdGVyX21pbjNcbiNkZWZpbmUgYmFuZEZpbHRlcl9tYXgzX0FMSUFTIHJhc3RlclByb2Nlc3NpbmcuYmFuZEZpbHRlcl9tYXgzXG4jZGVmaW5lIGJhbmRGaWx0ZXJfbWluNF9BTElBUyByYXN0ZXJQcm9jZXNzaW5nLmJhbmRGaWx0ZXJfbWluNFxuI2RlZmluZSBiYW5kRmlsdGVyX21heDRfQUxJQVMgcmFzdGVyUHJvY2Vzc2luZy5iYW5kRmlsdGVyX21heDRcbiNkZWZpbmUgc2F0dXJhdGlvbl92YWx1ZV9BTElBUyByYXN0ZXJQcm9jZXNzaW5nLnNhdHVyYXRpb25fdmFsdWVcbiNkZWZpbmUgcmVvcmRlcl9iYW5kc19vcmRlcmluZ19BTElBUyByYXN0ZXJQcm9jZXNzaW5nLnJlb3JkZXJfYmFuZHNfb3JkZXJpbmdcbiNkZWZpbmUgbWFza19rZWVwTWluX0FMSUFTIHJhc3RlclByb2Nlc3NpbmcubWFza19rZWVwTWluXG4jZGVmaW5lIG1hc2tfa2VlcE1heF9BTElBUyByYXN0ZXJQcm9jZXNzaW5nLm1hc2tfa2VlcE1heFxuI2RlZmluZSBwYW5zaGFycGVuX2Jyb3ZleV9wYW5XZWlnaHRfQUxJQVMgcmFzdGVyUHJvY2Vzc2luZy5wYW5zaGFycGVuX2Jyb3ZleV9wYW5XZWlnaHRcbmA7XG5cbmV4cG9ydCBjb25zdCBSQVNURVJfUFJPQ0VTU0lOR19GUyA9IFJBU1RFUl9QUk9DRVNTSU5HX1VOSUZPUk1fQkxPQ0sgKyBBTElBU19ERUZJTkVTO1xuXG5leHBvcnQgY29uc3QgcmFzdGVyUHJvY2Vzc2luZ1VuaWZvcm1zID0ge1xuICBuYW1lOiAncmFzdGVyUHJvY2Vzc2luZycsXG4gIGZzOiBSQVNURVJfUFJPQ0VTU0lOR19GUyxcbiAgdnM6ICcnLFxuICB1bmlmb3JtVHlwZXM6IHtcbiAgICBsaW5lYXJfcmVzY2FsZV9zY2FsZXI6ICdmMzInLFxuICAgIGxpbmVhcl9yZXNjYWxlX29mZnNldDogJ2YzMicsXG4gICAgZ2FtbWFfY29udHJhc3RfZ2FtbWExOiAnZjMyJyxcbiAgICBnYW1tYV9jb250cmFzdF9nYW1tYTI6ICdmMzInLFxuICAgIGdhbW1hX2NvbnRyYXN0X2dhbW1hMzogJ2YzMicsXG4gICAgZ2FtbWFfY29udHJhc3RfZ2FtbWE0OiAnZjMyJyxcbiAgICBzaWdtb2lkYWxDb250cmFzdF9jb250cmFzdDogJ2YzMicsXG4gICAgc2lnbW9pZGFsQ29udHJhc3RfYmlhczogJ2YzMicsXG4gICAgY29sb3JtYXBfaGFzQ2F0ZWdvcmljYWxDb2xvcnM6ICdpMzInLFxuICAgIGNvbG9ybWFwX2NhdGVnb3JpY2FsTWluVmFsdWU6ICdpMzInLFxuICAgIGNvbG9ybWFwX2NhdGVnb3JpY2FsTWF4VmFsdWU6ICdpMzInLFxuICAgIGNvbG9ybWFwX21heFBpeGVsVmFsdWU6ICdpMzInLFxuICAgIGJhbmRGaWx0ZXJfbWluMTogJ2YzMicsXG4gICAgYmFuZEZpbHRlcl9tYXgxOiAnZjMyJyxcbiAgICBiYW5kRmlsdGVyX21pbjI6ICdmMzInLFxuICAgIGJhbmRGaWx0ZXJfbWF4MjogJ2YzMicsXG4gICAgYmFuZEZpbHRlcl9taW4zOiAnZjMyJyxcbiAgICBiYW5kRmlsdGVyX21heDM6ICdmMzInLFxuICAgIGJhbmRGaWx0ZXJfbWluNDogJ2YzMicsXG4gICAgYmFuZEZpbHRlcl9tYXg0OiAnZjMyJyxcbiAgICBzYXR1cmF0aW9uX3ZhbHVlOiAnZjMyJyxcbiAgICByZW9yZGVyX2JhbmRzX29yZGVyaW5nOiAnbWF0NHg0PGYzMj4nLFxuICAgIG1hc2tfa2VlcE1pbjogJ2YzMicsXG4gICAgbWFza19rZWVwTWF4OiAnZjMyJyxcbiAgICBwYW5zaGFycGVuX2Jyb3ZleV9wYW5XZWlnaHQ6ICdmMzInXG4gIH1cbn07XG5cbi8qKlxuICogTWFwIGZyb20gb3JpZ2luYWwgbW9kdWxlIHVuaWZvcm0gbmFtZXMgKGFzIHJldHVybmVkIGJ5IGdldFVuaWZvcm1zKSB0b1xuICogdGhlIHByZWZpeGVkIG5hbWVzIHVzZWQgaW4gdGhlIHNoYXJlZCBVQk8uXG4gKi9cbmV4cG9ydCBjb25zdCBVTklGT1JNX05BTUVfTUFQOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IHtcbiAgbGluZWFyX3Jlc2NhbGU6IHtcbiAgICBzY2FsZXI6ICdsaW5lYXJfcmVzY2FsZV9zY2FsZXInLFxuICAgIG9mZnNldDogJ2xpbmVhcl9yZXNjYWxlX29mZnNldCdcbiAgfSxcbiAgZ2FtbWFfY29udHJhc3Q6IHtcbiAgICBnYW1tYTE6ICdnYW1tYV9jb250cmFzdF9nYW1tYTEnLFxuICAgIGdhbW1hMjogJ2dhbW1hX2NvbnRyYXN0X2dhbW1hMicsXG4gICAgZ2FtbWEzOiAnZ2FtbWFfY29udHJhc3RfZ2FtbWEzJyxcbiAgICBnYW1tYTQ6ICdnYW1tYV9jb250cmFzdF9nYW1tYTQnXG4gIH0sXG4gIHNpZ21vaWRhbENvbnRyYXN0OiB7XG4gICAgY29udHJhc3Q6ICdzaWdtb2lkYWxDb250cmFzdF9jb250cmFzdCcsXG4gICAgYmlhczogJ3NpZ21vaWRhbENvbnRyYXN0X2JpYXMnXG4gIH0sXG4gIGNvbG9ybWFwOiB7XG4gICAgaGFzQ2F0ZWdvcmljYWxDb2xvcnM6ICdjb2xvcm1hcF9oYXNDYXRlZ29yaWNhbENvbG9ycycsXG4gICAgY2F0ZWdvcmljYWxNaW5WYWx1ZTogJ2NvbG9ybWFwX2NhdGVnb3JpY2FsTWluVmFsdWUnLFxuICAgIGNhdGVnb3JpY2FsTWF4VmFsdWU6ICdjb2xvcm1hcF9jYXRlZ29yaWNhbE1heFZhbHVlJyxcbiAgICBtYXhQaXhlbFZhbHVlOiAnY29sb3JtYXBfbWF4UGl4ZWxWYWx1ZSdcbiAgfSxcbiAgYmFuZEZpbHRlcjoge1xuICAgIG1pbjE6ICdiYW5kRmlsdGVyX21pbjEnLFxuICAgIG1heDE6ICdiYW5kRmlsdGVyX21heDEnLFxuICAgIG1pbjI6ICdiYW5kRmlsdGVyX21pbjInLFxuICAgIG1heDI6ICdiYW5kRmlsdGVyX21heDInLFxuICAgIG1pbjM6ICdiYW5kRmlsdGVyX21pbjMnLFxuICAgIG1heDM6ICdiYW5kRmlsdGVyX21heDMnLFxuICAgIG1pbjQ6ICdiYW5kRmlsdGVyX21pbjQnLFxuICAgIG1heDQ6ICdiYW5kRmlsdGVyX21heDQnXG4gIH0sXG4gIHNhdHVyYXRpb246IHtcbiAgICB2YWx1ZTogJ3NhdHVyYXRpb25fdmFsdWUnXG4gIH0sXG4gIHJlb3JkZXJfYmFuZHM6IHtcbiAgICBvcmRlcmluZzogJ3Jlb3JkZXJfYmFuZHNfb3JkZXJpbmcnXG4gIH0sXG4gIG1hc2tfaW1hZ2VfZmxvYXQ6IHtcbiAgICBrZWVwTWluOiAnbWFza19rZWVwTWluJyxcbiAgICBrZWVwTWF4OiAnbWFza19rZWVwTWF4J1xuICB9LFxuICBtYXNrX2ltYWdlX3VpbnQ6IHtcbiAgICBrZWVwTWluOiAnbWFza19rZWVwTWluJyxcbiAgICBrZWVwTWF4OiAnbWFza19rZWVwTWF4J1xuICB9LFxuICBtYXNrX2ltYWdlX2ludDoge1xuICAgIGtlZXBNaW46ICdtYXNrX2tlZXBNaW4nLFxuICAgIGtlZXBNYXg6ICdtYXNrX2tlZXBNYXgnXG4gIH0sXG4gIHBhbnNoYXJwZW5fYnJvdmV5OiB7XG4gICAgcGFuV2VpZ2h0OiAncGFuc2hhcnBlbl9icm92ZXlfcGFuV2VpZ2h0J1xuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
export {};
|
|
3
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Jhc3Rlci90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgdHlwZSB7VGV4dHVyZX0gZnJvbSAnQGx1bWEuZ2wvY29yZSc7XG5pbXBvcnQgdHlwZSB7U2hhZGVyTW9kdWxlfSBmcm9tICcuL3dlYmdsJztcblxuLyoqIEFsbG93ZWQgaW5wdXQgZm9yIGltYWdlcyBwcm9wIOKAlCBlaXRoZXIgR1BVLXJlc2lkZW50IFRleHR1cmUgb2JqZWN0cyBvclxuICogbGVnYWN5IHJhc3RlciB0ZXh0dXJlIGRlc2NyaXB0b3JzIHdpdGggQ1BVIGRhdGEgdGhhdCB3aWxsIGJlIHVwbG9hZGVkLlxuICovXG5leHBvcnQgdHlwZSBJbWFnZUlucHV0ID0gUmVjb3JkPFxuICBzdHJpbmcsXG4gIFRleHR1cmUgfCBUZXh0dXJlW10gfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+W11cbj47XG5cbi8qKiBJbnRlcm5hbCBzdG9yYWdlIG9mIGltYWdlc1xuICogVGhlIFRleHR1cmUgb2JqZWN0IHJlZmVyZW5jZXMgZGF0YSBvbiB0aGUgR1BVXG4gKi9cbmV4cG9ydCB0eXBlIEltYWdlU3RhdGUgPSBSZWNvcmQ8c3RyaW5nLCBUZXh0dXJlIHwgVGV4dHVyZVtdPjtcblxuLyoqIFByb3BlcnRpZXMgYWRkZWQgYnkgUmFzdGVyTGF5ZXIuICovXG5leHBvcnQgdHlwZSBSYXN0ZXJMYXllckFkZGVkUHJvcHMgPSB7XG4gIG1vZHVsZXM6IFNoYWRlck1vZHVsZVtdO1xuICBpbWFnZXM6IEltYWdlSW5wdXQ7XG4gIG1vZHVsZVByb3BzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuICBvblJlZHJhd05lZWRlZD86ICgoKSA9PiB2b2lkKSB8IG51bGw7XG59O1xuIl0sIm1hcHBpbmdzIjoiIiwiaWdub3JlTGlzdCI6W119
|