@kepler.gl/deckgl-layers 3.1.3 → 3.1.5

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.
Files changed (66) hide show
  1. package/dist/index.d.ts +3 -0
  2. package/dist/index.js +25 -2
  3. package/dist/layer-utils/cluster-utils.js +3 -3
  4. package/dist/raster/images.d.ts +9 -0
  5. package/dist/raster/images.js +165 -0
  6. package/dist/raster/raster-layer/raster-layer-webgl1.fs.d.ts +2 -0
  7. package/dist/raster/raster-layer/raster-layer-webgl1.fs.js +10 -0
  8. package/dist/raster/raster-layer/raster-layer-webgl1.vs.d.ts +2 -0
  9. package/dist/raster/raster-layer/raster-layer-webgl1.vs.js +10 -0
  10. package/dist/raster/raster-layer/raster-layer-webgl2.fs.d.ts +2 -0
  11. package/dist/raster/raster-layer/raster-layer-webgl2.fs.js +10 -0
  12. package/dist/raster/raster-layer/raster-layer-webgl2.vs.d.ts +2 -0
  13. package/dist/raster/raster-layer/raster-layer-webgl2.vs.js +10 -0
  14. package/dist/raster/raster-layer/raster-layer.d.ts +21 -0
  15. package/dist/raster/raster-layer/raster-layer.js +235 -0
  16. package/dist/raster/raster-mesh-layer/matrix.d.ts +2 -0
  17. package/dist/raster/raster-mesh-layer/matrix.js +18 -0
  18. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.d.ts +2 -0
  19. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +10 -0
  20. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.d.ts +2 -0
  21. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +10 -0
  22. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.d.ts +2 -0
  23. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +10 -0
  24. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.d.ts +2 -0
  25. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +10 -0
  26. package/dist/raster/raster-mesh-layer/raster-mesh-layer.d.ts +22 -0
  27. package/dist/raster/raster-mesh-layer/raster-mesh-layer.js +263 -0
  28. package/dist/raster/types.d.ts +17 -0
  29. package/dist/raster/types.js +6 -0
  30. package/dist/raster/util.d.ts +10 -0
  31. package/dist/raster/util.js +29 -0
  32. package/dist/raster/webgl/color/colormap.d.ts +2 -0
  33. package/dist/raster/webgl/color/colormap.js +39 -0
  34. package/dist/raster/webgl/color/filter.d.ts +2 -0
  35. package/dist/raster/webgl/color/filter.js +48 -0
  36. package/dist/raster/webgl/color/gamma-contrast.d.ts +2 -0
  37. package/dist/raster/webgl/color/gamma-contrast.js +62 -0
  38. package/dist/raster/webgl/color/linear-rescale.d.ts +2 -0
  39. package/dist/raster/webgl/color/linear-rescale.js +31 -0
  40. package/dist/raster/webgl/color/saturation.d.ts +2 -0
  41. package/dist/raster/webgl/color/saturation.js +39 -0
  42. package/dist/raster/webgl/color/sigmoidal-contrast.d.ts +2 -0
  43. package/dist/raster/webgl/color/sigmoidal-contrast.js +64 -0
  44. package/dist/raster/webgl/index.d.ts +16 -0
  45. package/dist/raster/webgl/index.js +135 -0
  46. package/dist/raster/webgl/pansharpen/pansharpen-brovey.d.ts +2 -0
  47. package/dist/raster/webgl/pansharpen/pansharpen-brovey.js +43 -0
  48. package/dist/raster/webgl/spectral-indices/evi.d.ts +2 -0
  49. package/dist/raster/webgl/spectral-indices/evi.js +26 -0
  50. package/dist/raster/webgl/spectral-indices/msavi.d.ts +2 -0
  51. package/dist/raster/webgl/spectral-indices/msavi.js +25 -0
  52. package/dist/raster/webgl/spectral-indices/normalized-difference.d.ts +2 -0
  53. package/dist/raster/webgl/spectral-indices/normalized-difference.js +19 -0
  54. package/dist/raster/webgl/spectral-indices/savi.d.ts +2 -0
  55. package/dist/raster/webgl/spectral-indices/savi.js +21 -0
  56. package/dist/raster/webgl/texture/combine-bands.d.ts +4 -0
  57. package/dist/raster/webgl/texture/combine-bands.js +65 -0
  58. package/dist/raster/webgl/texture/mask.d.ts +4 -0
  59. package/dist/raster/webgl/texture/mask.js +58 -0
  60. package/dist/raster/webgl/texture/reorder-bands.d.ts +10 -0
  61. package/dist/raster/webgl/texture/reorder-bands.js +69 -0
  62. package/dist/raster/webgl/texture/rgba-image.d.ts +2 -0
  63. package/dist/raster/webgl/texture/rgba-image.js +34 -0
  64. package/dist/raster/webgl/types.d.ts +23 -0
  65. package/dist/raster/webgl/types.js +6 -0
  66. package/package.json +5 -6
@@ -0,0 +1,263 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
10
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
11
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
12
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
13
+ var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
14
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
15
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
+ var _typed = require("@deck.gl/core/typed");
17
+ var _typed2 = require("@deck.gl/mesh-layers/typed");
18
+ var _constants = _interopRequireDefault(require("@luma.gl/constants"));
19
+ var _core = require("@luma.gl/core");
20
+ var _engine = require("@luma.gl/engine");
21
+ var _matrix = require("./matrix");
22
+ var _rasterMeshLayerWebgl = _interopRequireDefault(require("./raster-mesh-layer-webgl1.fs"));
23
+ var _rasterMeshLayerWebgl2 = _interopRequireDefault(require("./raster-mesh-layer-webgl1.vs"));
24
+ var _rasterMeshLayerWebgl3 = _interopRequireDefault(require("./raster-mesh-layer-webgl2.fs"));
25
+ var _rasterMeshLayerWebgl4 = _interopRequireDefault(require("./raster-mesh-layer-webgl2.vs"));
26
+ var _images = require("../images");
27
+ var _util = require("../util");
28
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
29
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
30
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
31
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
32
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
33
+ function _superPropGet(t, e, r, o) { var p = (0, _get2["default"])((0, _getPrototypeOf2["default"])(1 & o ? t.prototype : t), e, r); return 2 & o ? function (t) { return p.apply(r, t); } : p; }
34
+ 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; }
35
+ 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; } // SPDX-License-Identifier: MIT
36
+ // Copyright contributors to the kepler.gl project
37
+ function validateGeometryAttributes(attributes) {
38
+ _typed.log.assert(attributes.positions || attributes.POSITION, 'RasterMeshLayer requires "postions" or "POSITION" attribute in mesh property.');
39
+ }
40
+
41
+ /*
42
+ * Convert mesh data into geometry
43
+ * @returns geometry
44
+ */
45
+ function getGeometry(data) {
46
+ if (data.attributes) {
47
+ validateGeometryAttributes(data.attributes);
48
+ if (data instanceof _core.Geometry) {
49
+ return data;
50
+ }
51
+ return new _core.Geometry(data);
52
+ } else if (data.positions || data.POSITION) {
53
+ validateGeometryAttributes(data);
54
+ return new _core.Geometry({
55
+ attributes: data
56
+ });
57
+ }
58
+ throw Error('Invalid mesh');
59
+ }
60
+ var defaultProps = _objectSpread(_objectSpread({}, _typed2.SimpleMeshLayer.defaultProps), {}, {
61
+ modules: {
62
+ type: 'array',
63
+ value: [],
64
+ compare: true
65
+ },
66
+ images: {
67
+ type: 'object',
68
+ value: {},
69
+ compare: true
70
+ },
71
+ moduleProps: {
72
+ type: 'object',
73
+ value: {},
74
+ compare: true
75
+ }
76
+ });
77
+ var RasterMeshLayer = exports["default"] = /*#__PURE__*/function (_SimpleMeshLayer) {
78
+ function RasterMeshLayer() {
79
+ (0, _classCallCheck2["default"])(this, RasterMeshLayer);
80
+ return _callSuper(this, RasterMeshLayer, arguments);
81
+ }
82
+ (0, _inherits2["default"])(RasterMeshLayer, _SimpleMeshLayer);
83
+ return (0, _createClass2["default"])(RasterMeshLayer, [{
84
+ key: "initializeState",
85
+ value: function initializeState() {
86
+ var gl = this.context.gl;
87
+ var programManager = _engine.ProgramManager.getDefaultProgramManager(gl);
88
+ var fsStr1 = 'fs:DECKGL_MUTATE_COLOR(inout vec4 image, in vec2 coord)';
89
+ var fsStr2 = 'fs:DECKGL_CREATE_COLOR(inout vec4 image, in vec2 coord)';
90
+
91
+ // Only initialize shader hook functions _once globally_
92
+ // Since the program manager is shared across all layers, but many layers
93
+ // might be created, this solves the performance issue of always adding new
94
+ // hook functions.
95
+ if (!programManager._hookFunctions.includes(fsStr1)) {
96
+ programManager.addShaderHook(fsStr1);
97
+ }
98
+ if (!programManager._hookFunctions.includes(fsStr2)) {
99
+ programManager.addShaderHook(fsStr2);
100
+ }
101
+
102
+ // images is a mapping from keys to Texture2D objects. The keys should match
103
+ // names of uniforms in shader modules
104
+ this.setState({
105
+ images: {}
106
+ });
107
+ _superPropGet(RasterMeshLayer, "initializeState", this, 3)([]);
108
+ }
109
+ }, {
110
+ key: "getShaders",
111
+ value: function getShaders() {
112
+ var gl = this.context.gl;
113
+ var _this$props$modules = this.props.modules,
114
+ modules = _this$props$modules === void 0 ? [] : _this$props$modules;
115
+ var webgl2 = (0, _core.isWebGL2)(gl);
116
+
117
+ // Choose webgl version for module
118
+ // If fs2 or fs1 keys exist, prefer them, but fall back to fs, so that
119
+ // version-independent modules don't need to care
120
+ var _iterator = _createForOfIteratorHelper(modules),
121
+ _step;
122
+ try {
123
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
124
+ var module = _step.value;
125
+ module.fs = webgl2 ? module.fs2 || module.fs : module.fs1 || module.fs;
126
+
127
+ // Sampler type is always float for WebGL1
128
+ if (!webgl2 && module.defines) {
129
+ module.defines.SAMPLER_TYPE = 'sampler2D';
130
+ }
131
+ }
132
+ } catch (err) {
133
+ _iterator.e(err);
134
+ } finally {
135
+ _iterator.f();
136
+ }
137
+ return _objectSpread(_objectSpread({}, _superPropGet(RasterMeshLayer, "getShaders", this, 3)([])), {}, {
138
+ vs: webgl2 ? _rasterMeshLayerWebgl4["default"] : _rasterMeshLayerWebgl2["default"],
139
+ fs: webgl2 ? _rasterMeshLayerWebgl3["default"] : _rasterMeshLayerWebgl["default"],
140
+ modules: [_typed.project32, _typed.phongLighting].concat((0, _toConsumableArray2["default"])(modules))
141
+ });
142
+ }
143
+
144
+ // eslint-disable-next-line complexity
145
+ }, {
146
+ key: "updateState",
147
+ value: function updateState(params) {
148
+ var props = params.props,
149
+ oldProps = params.oldProps,
150
+ changeFlags = params.changeFlags,
151
+ context = params.context;
152
+ _superPropGet(RasterMeshLayer, "updateState", this, 3)([{
153
+ props: props,
154
+ oldProps: oldProps,
155
+ changeFlags: changeFlags,
156
+ context: context
157
+ }]);
158
+ var modules = props && props.modules;
159
+ var oldModules = oldProps && oldProps.modules;
160
+
161
+ // If the list of modules changed, need to recompile the shaders
162
+ if (props.mesh !== oldProps.mesh || changeFlags.extensionsChanged || !(0, _util.modulesEqual)(modules, oldModules)) {
163
+ var _this$getAttributeMan;
164
+ if (this.state.model) {
165
+ this.state.model["delete"]();
166
+ }
167
+ if (props.mesh) {
168
+ this.state.model = this.getModel(props.mesh);
169
+ var attributes = props.mesh.attributes || props.mesh;
170
+ this.setState({
171
+ hasNormals: Boolean(attributes.NORMAL || attributes.normals)
172
+ });
173
+ }
174
+ (_this$getAttributeMan = this.getAttributeManager()) === null || _this$getAttributeMan === void 0 || _this$getAttributeMan.invalidateAll();
175
+ }
176
+ if (props && props.images) {
177
+ this.updateImages({
178
+ props: props,
179
+ oldProps: oldProps
180
+ });
181
+ }
182
+ if (this.state.model) {
183
+ this.state.model.setDrawMode(this.props.wireframe ? _constants["default"].LINE_STRIP : _constants["default"].TRIANGLES);
184
+ }
185
+ }
186
+ }, {
187
+ key: "updateImages",
188
+ value: function updateImages(_ref) {
189
+ var props = _ref.props,
190
+ oldProps = _ref.oldProps;
191
+ var images = this.state.images;
192
+ var gl = this.context.gl;
193
+ var newImages = (0, _images.loadImages)({
194
+ gl: gl,
195
+ images: images,
196
+ imagesData: props.images,
197
+ oldImagesData: oldProps.images
198
+ });
199
+ if (newImages) {
200
+ this.setState({
201
+ images: newImages
202
+ });
203
+ }
204
+ }
205
+ }, {
206
+ key: "draw",
207
+ value: function draw(_ref2) {
208
+ var uniforms = _ref2.uniforms;
209
+ var _this$state = this.state,
210
+ model = _this$state.model,
211
+ images = _this$state.images;
212
+ var moduleProps = this.props.moduleProps;
213
+
214
+ // Render the image
215
+ if (!model || !images || Object.keys(images).length === 0 || !Object.values(images).every(function (item) {
216
+ return item;
217
+ })) {
218
+ return;
219
+ }
220
+ var viewport = this.context.viewport;
221
+ var _this$props = this.props,
222
+ sizeScale = _this$props.sizeScale,
223
+ coordinateSystem = _this$props.coordinateSystem,
224
+ _instanced = _this$props._instanced;
225
+ model.setUniforms(Object.assign({}, uniforms, {
226
+ sizeScale: sizeScale,
227
+ composeModelMatrix: !_instanced || (0, _matrix.shouldComposeModelMatrix)(viewport, coordinateSystem),
228
+ flatShading: !this.state.hasNormals
229
+ })).updateModuleSettings(_objectSpread(_objectSpread({}, moduleProps), images)).draw();
230
+ }
231
+ }, {
232
+ key: "finalizeState",
233
+ value: function finalizeState() {
234
+ _superPropGet(RasterMeshLayer, "finalizeState", this, 3)([this.context]);
235
+ if (this.state.images) {
236
+ for (var _i = 0, _Object$values = Object.values(this.state.images); _i < _Object$values.length; _i++) {
237
+ var image = _Object$values[_i];
238
+ if (Array.isArray(image)) {
239
+ image.map(function (x) {
240
+ return x && x["delete"]();
241
+ });
242
+ } else if (image) {
243
+ image["delete"]();
244
+ }
245
+ }
246
+ }
247
+ }
248
+ }, {
249
+ key: "getModel",
250
+ value: function getModel(mesh) {
251
+ var gl = this.context.gl;
252
+ var model = new _core.Model(gl, Object.assign({}, this.getShaders(), {
253
+ id: this.props.id,
254
+ geometry: getGeometry(mesh),
255
+ isInstanced: true
256
+ }));
257
+ return model;
258
+ }
259
+ }]);
260
+ }(_typed2.SimpleMeshLayer);
261
+ RasterMeshLayer.layerName = 'RasterMeshLayer';
262
+ RasterMeshLayer.defaultProps = defaultProps;
263
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZWQiLCJyZXF1aXJlIiwiX3R5cGVkMiIsIl9jb25zdGFudHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2NvcmUiLCJfZW5naW5lIiwiX21hdHJpeCIsIl9yYXN0ZXJNZXNoTGF5ZXJXZWJnbCIsIl9yYXN0ZXJNZXNoTGF5ZXJXZWJnbDIiLCJfcmFzdGVyTWVzaExheWVyV2ViZ2wzIiwiX3Jhc3Rlck1lc2hMYXllcldlYmdsNCIsIl9pbWFnZXMiLCJfdXRpbCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiciIsImUiLCJ0IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJvIiwiYSIsInUiLCJjYWxsIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImFwcGx5IiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJfc3VwZXJQcm9wR2V0IiwicCIsIl9nZXQyIiwib3duS2V5cyIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJ2YWxpZGF0ZUdlb21ldHJ5QXR0cmlidXRlcyIsImF0dHJpYnV0ZXMiLCJsb2ciLCJhc3NlcnQiLCJwb3NpdGlvbnMiLCJQT1NJVElPTiIsImdldEdlb21ldHJ5IiwiZGF0YSIsIkdlb21ldHJ5IiwiRXJyb3IiLCJkZWZhdWx0UHJvcHMiLCJTaW1wbGVNZXNoTGF5ZXIiLCJtb2R1bGVzIiwidHlwZSIsImNvbXBhcmUiLCJpbWFnZXMiLCJtb2R1bGVQcm9wcyIsIlJhc3Rlck1lc2hMYXllciIsImV4cG9ydHMiLCJfU2ltcGxlTWVzaExheWVyIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwiaW5pdGlhbGl6ZVN0YXRlIiwiZ2wiLCJjb250ZXh0IiwicHJvZ3JhbU1hbmFnZXIiLCJQcm9ncmFtTWFuYWdlciIsImdldERlZmF1bHRQcm9ncmFtTWFuYWdlciIsImZzU3RyMSIsImZzU3RyMiIsIl9ob29rRnVuY3Rpb25zIiwiaW5jbHVkZXMiLCJhZGRTaGFkZXJIb29rIiwic2V0U3RhdGUiLCJnZXRTaGFkZXJzIiwiX3RoaXMkcHJvcHMkbW9kdWxlcyIsInByb3BzIiwid2ViZ2wyIiwiaXNXZWJHTDIiLCJfaXRlcmF0b3IiLCJfc3RlcCIsIm1vZHVsZSIsImZzIiwiZnMyIiwiZnMxIiwiZGVmaW5lcyIsIlNBTVBMRVJfVFlQRSIsImVyciIsInZzIiwidnNXZWJHTDIiLCJ2c1dlYkdMMSIsImZzV2ViR0wyIiwiZnNXZWJHTDEiLCJwcm9qZWN0MzIiLCJwaG9uZ0xpZ2h0aW5nIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInVwZGF0ZVN0YXRlIiwicGFyYW1zIiwib2xkUHJvcHMiLCJjaGFuZ2VGbGFncyIsIm9sZE1vZHVsZXMiLCJtZXNoIiwiZXh0ZW5zaW9uc0NoYW5nZWQiLCJtb2R1bGVzRXF1YWwiLCJfdGhpcyRnZXRBdHRyaWJ1dGVNYW4iLCJzdGF0ZSIsIm1vZGVsIiwiZ2V0TW9kZWwiLCJoYXNOb3JtYWxzIiwiTk9STUFMIiwibm9ybWFscyIsImdldEF0dHJpYnV0ZU1hbmFnZXIiLCJpbnZhbGlkYXRlQWxsIiwidXBkYXRlSW1hZ2VzIiwic2V0RHJhd01vZGUiLCJ3aXJlZnJhbWUiLCJHTCIsIkxJTkVfU1RSSVAiLCJUUklBTkdMRVMiLCJfcmVmIiwibmV3SW1hZ2VzIiwibG9hZEltYWdlcyIsImltYWdlc0RhdGEiLCJvbGRJbWFnZXNEYXRhIiwiZHJhdyIsIl9yZWYyIiwidW5pZm9ybXMiLCJfdGhpcyRzdGF0ZSIsInZhbHVlcyIsImV2ZXJ5IiwiaXRlbSIsInZpZXdwb3J0IiwiX3RoaXMkcHJvcHMiLCJzaXplU2NhbGUiLCJjb29yZGluYXRlU3lzdGVtIiwiX2luc3RhbmNlZCIsInNldFVuaWZvcm1zIiwiYXNzaWduIiwiY29tcG9zZU1vZGVsTWF0cml4Iiwic2hvdWxkQ29tcG9zZU1vZGVsTWF0cml4IiwiZmxhdFNoYWRpbmciLCJ1cGRhdGVNb2R1bGVTZXR0aW5ncyIsImZpbmFsaXplU3RhdGUiLCJfaSIsIl9PYmplY3QkdmFsdWVzIiwiaW1hZ2UiLCJtYXAiLCJ4IiwiTW9kZWwiLCJpZCIsImdlb21ldHJ5IiwiaXNJbnN0YW5jZWQiLCJsYXllck5hbWUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmFzdGVyL3Jhc3Rlci1tZXNoLWxheWVyL3Jhc3Rlci1tZXNoLWxheWVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7cHJvamVjdDMyLCBwaG9uZ0xpZ2h0aW5nLCBsb2csIFVwZGF0ZVBhcmFtZXRlcnN9IGZyb20gJ0BkZWNrLmdsL2NvcmUvdHlwZWQnO1xuaW1wb3J0IHtTaW1wbGVNZXNoTGF5ZXIsIFNpbXBsZU1lc2hMYXllclByb3BzfSBmcm9tICdAZGVjay5nbC9tZXNoLWxheWVycy90eXBlZCc7XG5pbXBvcnQgR0wgZnJvbSAnQGx1bWEuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TW9kZWwsIEdlb21ldHJ5LCBpc1dlYkdMMn0gZnJvbSAnQGx1bWEuZ2wvY29yZSc7XG5pbXBvcnQge1Byb2dyYW1NYW5hZ2VyfSBmcm9tICdAbHVtYS5nbC9lbmdpbmUnO1xuaW1wb3J0IHtVbmlmb3Jtc09wdGlvbnN9IGZyb20gJ0BsdW1hLmdsL3dlYmdsL3NyYy9jbGFzc2VzL3VuaWZvcm1zJztcblxuaW1wb3J0IHtzaG91bGRDb21wb3NlTW9kZWxNYXRyaXh9IGZyb20gJy4vbWF0cml4JztcbmltcG9ydCBmc1dlYkdMMSBmcm9tICcuL3Jhc3Rlci1tZXNoLWxheWVyLXdlYmdsMS5mcyc7XG5pbXBvcnQgdnNXZWJHTDEgZnJvbSAnLi9yYXN0ZXItbWVzaC1sYXllci13ZWJnbDEudnMnO1xuaW1wb3J0IGZzV2ViR0wyIGZyb20gJy4vcmFzdGVyLW1lc2gtbGF5ZXItd2ViZ2wyLmZzJztcbmltcG9ydCB2c1dlYkdMMiBmcm9tICcuL3Jhc3Rlci1tZXNoLWxheWVyLXdlYmdsMi52cyc7XG5pbXBvcnQge2xvYWRJbWFnZXN9IGZyb20gJy4uL2ltYWdlcyc7XG5pbXBvcnQgdHlwZSB7UmFzdGVyTGF5ZXJBZGRlZFByb3BzLCBJbWFnZVN0YXRlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge21vZHVsZXNFcXVhbH0gZnJvbSAnLi4vdXRpbCc7XG5cbnR5cGUgTWVzaCA9IFNpbXBsZU1lc2hMYXllclByb3BzWydtZXNoJ107XG5cbmZ1bmN0aW9uIHZhbGlkYXRlR2VvbWV0cnlBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpIHtcbiAgbG9nLmFzc2VydChcbiAgICBhdHRyaWJ1dGVzLnBvc2l0aW9ucyB8fCBhdHRyaWJ1dGVzLlBPU0lUSU9OLFxuICAgICdSYXN0ZXJNZXNoTGF5ZXIgcmVxdWlyZXMgXCJwb3N0aW9uc1wiIG9yIFwiUE9TSVRJT05cIiBhdHRyaWJ1dGUgaW4gbWVzaCBwcm9wZXJ0eS4nXG4gICk7XG59XG5cbi8qXG4gKiBDb252ZXJ0IG1lc2ggZGF0YSBpbnRvIGdlb21ldHJ5XG4gKiBAcmV0dXJucyBnZW9tZXRyeVxuICovXG5mdW5jdGlvbiBnZXRHZW9tZXRyeShkYXRhKTogR2VvbWV0cnkge1xuICBpZiAoZGF0YS5hdHRyaWJ1dGVzKSB7XG4gICAgdmFsaWRhdGVHZW9tZXRyeUF0dHJpYnV0ZXMoZGF0YS5hdHRyaWJ1dGVzKTtcbiAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIEdlb21ldHJ5KSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBHZW9tZXRyeShkYXRhKTtcbiAgfSBlbHNlIGlmIChkYXRhLnBvc2l0aW9ucyB8fCBkYXRhLlBPU0lUSU9OKSB7XG4gICAgdmFsaWRhdGVHZW9tZXRyeUF0dHJpYnV0ZXMoZGF0YSk7XG4gICAgcmV0dXJuIG5ldyBHZW9tZXRyeSh7XG4gICAgICBhdHRyaWJ1dGVzOiBkYXRhXG4gICAgfSk7XG4gIH1cbiAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgbWVzaCcpO1xufVxuXG5jb25zdCBkZWZhdWx0UHJvcHMgPSB7XG4gIC4uLlNpbXBsZU1lc2hMYXllci5kZWZhdWx0UHJvcHMsXG4gIG1vZHVsZXM6IHt0eXBlOiAnYXJyYXknLCB2YWx1ZTogW10sIGNvbXBhcmU6IHRydWV9LFxuICBpbWFnZXM6IHt0eXBlOiAnb2JqZWN0JywgdmFsdWU6IHt9LCBjb21wYXJlOiB0cnVlfSxcbiAgbW9kdWxlUHJvcHM6IHt0eXBlOiAnb2JqZWN0JywgdmFsdWU6IHt9LCBjb21wYXJlOiB0cnVlfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmFzdGVyTWVzaExheWVyIGV4dGVuZHMgU2ltcGxlTWVzaExheWVyPGFueSwgUmFzdGVyTGF5ZXJBZGRlZFByb3BzPiB7XG4gIGRlY2xhcmUgc3RhdGU6IFNpbXBsZU1lc2hMYXllcjxSYXN0ZXJMYXllckFkZGVkUHJvcHM+WydzdGF0ZSddICYge1xuICAgIGltYWdlczogSW1hZ2VTdGF0ZTtcbiAgfTtcblxuICBpbml0aWFsaXplU3RhdGUoKTogdm9pZCB7XG4gICAgY29uc3Qge2dsfSA9IHRoaXMuY29udGV4dDtcbiAgICBjb25zdCBwcm9ncmFtTWFuYWdlciA9IFByb2dyYW1NYW5hZ2VyLmdldERlZmF1bHRQcm9ncmFtTWFuYWdlcihnbCk7XG5cbiAgICBjb25zdCBmc1N0cjEgPSAnZnM6REVDS0dMX01VVEFURV9DT0xPUihpbm91dCB2ZWM0IGltYWdlLCBpbiB2ZWMyIGNvb3JkKSc7XG4gICAgY29uc3QgZnNTdHIyID0gJ2ZzOkRFQ0tHTF9DUkVBVEVfQ09MT1IoaW5vdXQgdmVjNCBpbWFnZSwgaW4gdmVjMiBjb29yZCknO1xuXG4gICAgLy8gT25seSBpbml0aWFsaXplIHNoYWRlciBob29rIGZ1bmN0aW9ucyBfb25jZSBnbG9iYWxseV9cbiAgICAvLyBTaW5jZSB0aGUgcHJvZ3JhbSBtYW5hZ2VyIGlzIHNoYXJlZCBhY3Jvc3MgYWxsIGxheWVycywgYnV0IG1hbnkgbGF5ZXJzXG4gICAgLy8gbWlnaHQgYmUgY3JlYXRlZCwgdGhpcyBzb2x2ZXMgdGhlIHBlcmZvcm1hbmNlIGlzc3VlIG9mIGFsd2F5cyBhZGRpbmcgbmV3XG4gICAgLy8gaG9vayBmdW5jdGlvbnMuXG4gICAgaWYgKCFwcm9ncmFtTWFuYWdlci5faG9va0Z1bmN0aW9ucy5pbmNsdWRlcyhmc1N0cjEpKSB7XG4gICAgICBwcm9ncmFtTWFuYWdlci5hZGRTaGFkZXJIb29rKGZzU3RyMSk7XG4gICAgfVxuICAgIGlmICghcHJvZ3JhbU1hbmFnZXIuX2hvb2tGdW5jdGlvbnMuaW5jbHVkZXMoZnNTdHIyKSkge1xuICAgICAgcHJvZ3JhbU1hbmFnZXIuYWRkU2hhZGVySG9vayhmc1N0cjIpO1xuICAgIH1cblxuICAgIC8vIGltYWdlcyBpcyBhIG1hcHBpbmcgZnJvbSBrZXlzIHRvIFRleHR1cmUyRCBvYmplY3RzLiBUaGUga2V5cyBzaG91bGQgbWF0Y2hcbiAgICAvLyBuYW1lcyBvZiB1bmlmb3JtcyBpbiBzaGFkZXIgbW9kdWxlc1xuICAgIHRoaXMuc2V0U3RhdGUoe2ltYWdlczoge319KTtcblxuICAgIHN1cGVyLmluaXRpYWxpemVTdGF0ZSgpO1xuICB9XG5cbiAgZ2V0U2hhZGVycygpOiBhbnkge1xuICAgIGNvbnN0IHtnbH0gPSB0aGlzLmNvbnRleHQ7XG4gICAgY29uc3Qge21vZHVsZXMgPSBbXX0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHdlYmdsMiA9IGlzV2ViR0wyKGdsKTtcblxuICAgIC8vIENob29zZSB3ZWJnbCB2ZXJzaW9uIGZvciBtb2R1bGVcbiAgICAvLyBJZiBmczIgb3IgZnMxIGtleXMgZXhpc3QsIHByZWZlciB0aGVtLCBidXQgZmFsbCBiYWNrIHRvIGZzLCBzbyB0aGF0XG4gICAgLy8gdmVyc2lvbi1pbmRlcGVuZGVudCBtb2R1bGVzIGRvbid0IG5lZWQgdG8gY2FyZVxuICAgIGZvciAoY29uc3QgbW9kdWxlIG9mIG1vZHVsZXMpIHtcbiAgICAgIG1vZHVsZS5mcyA9IHdlYmdsMiA/IG1vZHVsZS5mczIgfHwgbW9kdWxlLmZzIDogbW9kdWxlLmZzMSB8fCBtb2R1bGUuZnM7XG5cbiAgICAgIC8vIFNhbXBsZXIgdHlwZSBpcyBhbHdheXMgZmxvYXQgZm9yIFdlYkdMMVxuICAgICAgaWYgKCF3ZWJnbDIgJiYgbW9kdWxlLmRlZmluZXMpIHtcbiAgICAgICAgbW9kdWxlLmRlZmluZXMuU0FNUExFUl9UWVBFID0gJ3NhbXBsZXIyRCc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN1cGVyLmdldFNoYWRlcnMoKSxcbiAgICAgIHZzOiB3ZWJnbDIgPyB2c1dlYkdMMiA6IHZzV2ViR0wxLFxuICAgICAgZnM6IHdlYmdsMiA/IGZzV2ViR0wyIDogZnNXZWJHTDEsXG4gICAgICBtb2R1bGVzOiBbcHJvamVjdDMyLCBwaG9uZ0xpZ2h0aW5nLCAuLi5tb2R1bGVzXVxuICAgIH07XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICB1cGRhdGVTdGF0ZShwYXJhbXM6IFVwZGF0ZVBhcmFtZXRlcnM8U2ltcGxlTWVzaExheWVyPGFueSwgUmFzdGVyTGF5ZXJBZGRlZFByb3BzPj4pOiB2b2lkIHtcbiAgICBjb25zdCB7cHJvcHMsIG9sZFByb3BzLCBjaGFuZ2VGbGFncywgY29udGV4dH0gPSBwYXJhbXM7XG4gICAgc3VwZXIudXBkYXRlU3RhdGUoe3Byb3BzLCBvbGRQcm9wcywgY2hhbmdlRmxhZ3MsIGNvbnRleHR9KTtcblxuICAgIGNvbnN0IG1vZHVsZXMgPSBwcm9wcyAmJiBwcm9wcy5tb2R1bGVzO1xuICAgIGNvbnN0IG9sZE1vZHVsZXMgPSBvbGRQcm9wcyAmJiBvbGRQcm9wcy5tb2R1bGVzO1xuXG4gICAgLy8gSWYgdGhlIGxpc3Qgb2YgbW9kdWxlcyBjaGFuZ2VkLCBuZWVkIHRvIHJlY29tcGlsZSB0aGUgc2hhZGVyc1xuICAgIGlmIChcbiAgICAgIHByb3BzLm1lc2ggIT09IG9sZFByb3BzLm1lc2ggfHxcbiAgICAgIGNoYW5nZUZsYWdzLmV4dGVuc2lvbnNDaGFuZ2VkIHx8XG4gICAgICAhbW9kdWxlc0VxdWFsKG1vZHVsZXMsIG9sZE1vZHVsZXMpXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5tb2RlbCkge1xuICAgICAgICB0aGlzLnN0YXRlLm1vZGVsLmRlbGV0ZSgpO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLm1lc2gpIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5tb2RlbCA9IHRoaXMuZ2V0TW9kZWwocHJvcHMubWVzaCBhcyBNZXNoKTtcblxuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gKHByb3BzLm1lc2ggYXMgYW55KS5hdHRyaWJ1dGVzIHx8IHByb3BzLm1lc2g7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGhhc05vcm1hbHM6IEJvb2xlYW4oYXR0cmlidXRlcy5OT1JNQUwgfHwgYXR0cmlidXRlcy5ub3JtYWxzKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZ2V0QXR0cmlidXRlTWFuYWdlcigpPy5pbnZhbGlkYXRlQWxsKCk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzICYmIHByb3BzLmltYWdlcykge1xuICAgICAgdGhpcy51cGRhdGVJbWFnZXMoe3Byb3BzLCBvbGRQcm9wc30pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YXRlLm1vZGVsKSB7XG4gICAgICB0aGlzLnN0YXRlLm1vZGVsLnNldERyYXdNb2RlKHRoaXMucHJvcHMud2lyZWZyYW1lID8gR0wuTElORV9TVFJJUCA6IEdMLlRSSUFOR0xFUyk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlSW1hZ2VzKHtcbiAgICBwcm9wcyxcbiAgICBvbGRQcm9wc1xuICB9OiB7XG4gICAgcHJvcHM6IFJhc3RlckxheWVyQWRkZWRQcm9wcztcbiAgICBvbGRQcm9wczogUmFzdGVyTGF5ZXJBZGRlZFByb3BzO1xuICB9KTogdm9pZCB7XG4gICAgY29uc3Qge2ltYWdlc30gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHtnbH0gPSB0aGlzLmNvbnRleHQ7XG5cbiAgICBjb25zdCBuZXdJbWFnZXMgPSBsb2FkSW1hZ2VzKHtcbiAgICAgIGdsLFxuICAgICAgaW1hZ2VzLFxuICAgICAgaW1hZ2VzRGF0YTogcHJvcHMuaW1hZ2VzLFxuICAgICAgb2xkSW1hZ2VzRGF0YTogb2xkUHJvcHMuaW1hZ2VzXG4gICAgfSk7XG5cbiAgICBpZiAobmV3SW1hZ2VzKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtpbWFnZXM6IG5ld0ltYWdlc30pO1xuICAgIH1cbiAgfVxuXG4gIGRyYXcoe3VuaWZvcm1zfTogVW5pZm9ybXNPcHRpb25zKTogdm9pZCB7XG4gICAgY29uc3Qge21vZGVsLCBpbWFnZXN9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCB7bW9kdWxlUHJvcHN9ID0gdGhpcy5wcm9wcztcblxuICAgIC8vIFJlbmRlciB0aGUgaW1hZ2VcbiAgICBpZiAoXG4gICAgICAhbW9kZWwgfHxcbiAgICAgICFpbWFnZXMgfHxcbiAgICAgIE9iamVjdC5rZXlzKGltYWdlcykubGVuZ3RoID09PSAwIHx8XG4gICAgICAhT2JqZWN0LnZhbHVlcyhpbWFnZXMpLmV2ZXJ5KGl0ZW0gPT4gaXRlbSlcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7dmlld3BvcnR9ID0gdGhpcy5jb250ZXh0O1xuICAgIGNvbnN0IHtzaXplU2NhbGUsIGNvb3JkaW5hdGVTeXN0ZW0sIF9pbnN0YW5jZWR9ID0gdGhpcy5wcm9wcztcblxuICAgIG1vZGVsXG4gICAgICAuc2V0VW5pZm9ybXMoXG4gICAgICAgIE9iamVjdC5hc3NpZ24oe30sIHVuaWZvcm1zLCB7XG4gICAgICAgICAgc2l6ZVNjYWxlLFxuICAgICAgICAgIGNvbXBvc2VNb2RlbE1hdHJpeDogIV9pbnN0YW5jZWQgfHwgc2hvdWxkQ29tcG9zZU1vZGVsTWF0cml4KHZpZXdwb3J0LCBjb29yZGluYXRlU3lzdGVtKSxcbiAgICAgICAgICBmbGF0U2hhZGluZzogIXRoaXMuc3RhdGUuaGFzTm9ybWFsc1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnVwZGF0ZU1vZHVsZVNldHRpbmdzKHtcbiAgICAgICAgLi4ubW9kdWxlUHJvcHMsXG4gICAgICAgIC4uLmltYWdlc1xuICAgICAgfSlcbiAgICAgIC5kcmF3KCk7XG4gIH1cblxuICBmaW5hbGl6ZVN0YXRlKCk6IHZvaWQge1xuICAgIHN1cGVyLmZpbmFsaXplU3RhdGUodGhpcy5jb250ZXh0KTtcblxuICAgIGlmICh0aGlzLnN0YXRlLmltYWdlcykge1xuICAgICAgZm9yIChjb25zdCBpbWFnZSBvZiBPYmplY3QudmFsdWVzKHRoaXMuc3RhdGUuaW1hZ2VzKSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpbWFnZSkpIHtcbiAgICAgICAgICBpbWFnZS5tYXAoeCA9PiB4ICYmIHguZGVsZXRlKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGltYWdlKSB7XG4gICAgICAgICAgaW1hZ2UuZGVsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TW9kZWwobWVzaDogTWVzaCk6IE1vZGVsIHtcbiAgICBjb25zdCB7Z2x9ID0gdGhpcy5jb250ZXh0O1xuXG4gICAgY29uc3QgbW9kZWwgPSBuZXcgTW9kZWwoXG4gICAgICBnbCxcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZ2V0U2hhZGVycygpLCB7XG4gICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICBnZW9tZXRyeTogZ2V0R2VvbWV0cnkobWVzaCksXG4gICAgICAgIGlzSW5zdGFuY2VkOiB0cnVlXG4gICAgICB9KVxuICAgICk7XG5cbiAgICByZXR1cm4gbW9kZWw7XG4gIH1cbn1cblxuUmFzdGVyTWVzaExheWVyLmxheWVyTmFtZSA9ICdSYXN0ZXJNZXNoTGF5ZXInO1xuUmFzdGVyTWVzaExheWVyLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsVUFBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksS0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssT0FBQSxHQUFBTCxPQUFBO0FBR0EsSUFBQU0sT0FBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8scUJBQUEsR0FBQUosc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFRLHNCQUFBLEdBQUFMLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBUyxzQkFBQSxHQUFBTixzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQVUsc0JBQUEsR0FBQVAsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFXLE9BQUEsR0FBQVgsT0FBQTtBQUVBLElBQUFZLEtBQUEsR0FBQVosT0FBQTtBQUFxQyxTQUFBYSwyQkFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEseUJBQUFDLE1BQUEsSUFBQUgsQ0FBQSxDQUFBRyxNQUFBLENBQUFDLFFB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
@@ -0,0 +1,17 @@
1
+ /// <reference types="luma.gl__webgl" />
2
+ import type { Texture2DProps, Texture2D } from '@luma.gl/webgl';
3
+ import type { ShaderModule } from './webgl';
4
+ /** Allowed input for images prop
5
+ * Texture2D is already on the GPU, while Texture2DProps can be data on the CPU that is not yet copied to the GPU.
6
+ */
7
+ export declare type ImageInput = Record<string, Texture2DProps | Texture2D | (Texture2DProps | Texture2D)[]>;
8
+ /** Internal storage of images
9
+ * The Texture2D object references data on the GPU
10
+ */
11
+ export declare type ImageState = Record<string, Texture2D | Texture2D[]>;
12
+ /** Properties added by RasterLayer. */
13
+ export declare type RasterLayerAddedProps = {
14
+ modules: ShaderModule[];
15
+ images: ImageInput;
16
+ moduleProps: Record<string, number>;
17
+ };
@@ -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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Jhc3Rlci90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgdHlwZSB7VGV4dHVyZTJEUHJvcHMsIFRleHR1cmUyRH0gZnJvbSAnQGx1bWEuZ2wvd2ViZ2wnO1xuXG5pbXBvcnQgdHlwZSB7U2hhZGVyTW9kdWxlfSBmcm9tICcuL3dlYmdsJztcblxuLyoqIEFsbG93ZWQgaW5wdXQgZm9yIGltYWdlcyBwcm9wXG4gKiBUZXh0dXJlMkQgaXMgYWxyZWFkeSBvbiB0aGUgR1BVLCB3aGlsZSBUZXh0dXJlMkRQcm9wcyBjYW4gYmUgZGF0YSBvbiB0aGUgQ1BVIHRoYXQgaXMgbm90IHlldCBjb3BpZWQgdG8gdGhlIEdQVS5cbiAqL1xuZXhwb3J0IHR5cGUgSW1hZ2VJbnB1dCA9IFJlY29yZDxcbiAgc3RyaW5nLFxuICBUZXh0dXJlMkRQcm9wcyB8IFRleHR1cmUyRCB8IChUZXh0dXJlMkRQcm9wcyB8IFRleHR1cmUyRClbXVxuPjtcblxuLyoqIEludGVybmFsIHN0b3JhZ2Ugb2YgaW1hZ2VzXG4gKiBUaGUgVGV4dHVyZTJEIG9iamVjdCByZWZlcmVuY2VzIGRhdGEgb24gdGhlIEdQVVxuICovXG5leHBvcnQgdHlwZSBJbWFnZVN0YXRlID0gUmVjb3JkPHN0cmluZywgVGV4dHVyZTJEIHwgVGV4dHVyZTJEW10+O1xuXG4vKiogUHJvcGVydGllcyBhZGRlZCBieSBSYXN0ZXJMYXllci4gKi9cbmV4cG9ydCB0eXBlIFJhc3RlckxheWVyQWRkZWRQcm9wcyA9IHtcbiAgbW9kdWxlczogU2hhZGVyTW9kdWxlW107XG4gIGltYWdlczogSW1hZ2VJbnB1dDtcbiAgbW9kdWxlUHJvcHM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG59O1xuIl0sIm1hcHBpbmdzIjoiIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,10 @@
1
+ import { ShaderModule } from './webgl/types';
2
+ /**
3
+ * Test if two lists of modules are equal
4
+ *
5
+ * @param modules Modules list
6
+ * @param oldModules Modules list
7
+ *
8
+ * @return true if both lists are equal
9
+ */
10
+ export declare function modulesEqual(modules: ShaderModule[], oldModules: ShaderModule[]): boolean;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.modulesEqual = modulesEqual;
7
+ // SPDX-License-Identifier: MIT
8
+ // Copyright contributors to the kepler.gl project
9
+
10
+ /**
11
+ * Test if two lists of modules are equal
12
+ *
13
+ * @param modules Modules list
14
+ * @param oldModules Modules list
15
+ *
16
+ * @return true if both lists are equal
17
+ */
18
+ function modulesEqual(modules, oldModules) {
19
+ if (modules.length !== oldModules.length) {
20
+ return false;
21
+ }
22
+ for (var i = 0; i < modules.length; i++) {
23
+ if (modules[i].name !== oldModules[i].name) {
24
+ return false;
25
+ }
26
+ }
27
+ return true;
28
+ }
29
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGVzRXF1YWwiLCJtb2R1bGVzIiwib2xkTW9kdWxlcyIsImxlbmd0aCIsImkiLCJuYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Jhc3Rlci91dGlsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7U2hhZGVyTW9kdWxlfSBmcm9tICcuL3dlYmdsL3R5cGVzJztcblxuLyoqXG4gKiBUZXN0IGlmIHR3byBsaXN0cyBvZiBtb2R1bGVzIGFyZSBlcXVhbFxuICpcbiAqIEBwYXJhbSBtb2R1bGVzICAgICBNb2R1bGVzIGxpc3RcbiAqIEBwYXJhbSBvbGRNb2R1bGVzICBNb2R1bGVzIGxpc3RcbiAqXG4gKiBAcmV0dXJuIHRydWUgaWYgYm90aCBsaXN0cyBhcmUgZXF1YWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZHVsZXNFcXVhbChtb2R1bGVzOiBTaGFkZXJNb2R1bGVbXSwgb2xkTW9kdWxlczogU2hhZGVyTW9kdWxlW10pOiBib29sZWFuIHtcbiAgaWYgKG1vZHVsZXMubGVuZ3RoICE9PSBvbGRNb2R1bGVzLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChtb2R1bGVzW2ldLm5hbWUgIT09IG9sZE1vZHVsZXNbaV0ubmFtZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBOztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQSxZQUFZQSxDQUFDQyxPQUF1QixFQUFFQyxVQUEwQixFQUFXO0VBQ3pGLElBQUlELE9BQU8sQ0FBQ0UsTUFBTSxLQUFLRCxVQUFVLENBQUNDLE1BQU0sRUFBRTtJQUN4QyxPQUFPLEtBQUs7RUFDZDtFQUVBLEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHSCxPQUFPLENBQUNFLE1BQU0sRUFBRUMsQ0FBQyxFQUFFLEVBQUU7SUFDdkMsSUFBSUgsT0FBTyxDQUFDRyxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxLQUFLSCxVQUFVLENBQUNFLENBQUMsQ0FBQyxDQUFDQyxJQUFJLEVBQUU7TUFDMUMsT0FBTyxLQUFLO0lBQ2Q7RUFDRjtFQUVBLE9BQU8sSUFBSTtBQUNiIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,2 @@
1
+ import { ShaderModule } from '../types';
2
+ export declare const colormap: ShaderModule;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.colormap = void 0;
7
+ // SPDX-License-Identifier: MIT
8
+ // Copyright contributors to the kepler.gl project
9
+
10
+ var fs = "uniform sampler2D uColormapTexture;\nuniform int uHasCategoricalColors;\nuniform int uCategoricalMinValue;\nuniform int uCategoricalMaxValue;\nuniform int uMaxPixelValue;\n\n// Apply colormap texture given value\n// Since the texture only varies in the x direction, setting v to 0.5 as a\n// constant is fine\n// Assumes the input range of value is -1 to 1\nvec4 colormap(sampler2D cmap, vec4 image) {\n vec2 uv;\n if (uHasCategoricalColors == 1) {\n float step = float(uMaxPixelValue) / float(uCategoricalMaxValue - uCategoricalMinValue);\n uv = vec2(image.r * step, 0.5);\n } else {\n uv = vec2(0.5 * image.r + 0.5, 0.5);\n }\n vec4 color = texture2D(cmap, uv);\n if(color.a <= 0.0) discard;\n return color;\n}\n";
11
+ function getUniforms() {
12
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
13
+ var imageColormap = opts.imageColormap,
14
+ minCategoricalBandValue = opts.minCategoricalBandValue,
15
+ maxCategoricalBandValue = opts.maxCategoricalBandValue,
16
+ dataTypeMaxValue = opts.dataTypeMaxValue,
17
+ maxPixelValue = opts.maxPixelValue;
18
+ if (!imageColormap) {
19
+ return null;
20
+ }
21
+ var isSupportedDataType = Number.isFinite(dataTypeMaxValue);
22
+ var isCategorical = isSupportedDataType && Number.isFinite(maxPixelValue) && Number.isFinite(minCategoricalBandValue) && Number.isFinite(maxCategoricalBandValue);
23
+ return {
24
+ uColormapTexture: imageColormap,
25
+ uHasCategoricalColors: isCategorical ? 1 : 0,
26
+ uCategoricalMinValue: Number.isFinite(minCategoricalBandValue) ? minCategoricalBandValue : 0,
27
+ uCategoricalMaxValue: Number.isFinite(maxCategoricalBandValue) ? maxCategoricalBandValue : 0,
28
+ uMaxPixelValue: Number.isFinite(maxPixelValue) ? maxPixelValue : 0
29
+ };
30
+ }
31
+ var colormap = exports.colormap = {
32
+ name: 'colormap',
33
+ fs: fs,
34
+ getUniforms: getUniforms,
35
+ inject: {
36
+ 'fs:DECKGL_MUTATE_COLOR': "\n image = colormap(uColormapTexture, image);\n "
37
+ }
38
+ };
39
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmcyIsImdldFVuaWZvcm1zIiwib3B0cyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImltYWdlQ29sb3JtYXAiLCJtaW5DYXRlZ29yaWNhbEJhbmRWYWx1ZSIsIm1heENhdGVnb3JpY2FsQmFuZFZhbHVlIiwiZGF0YVR5cGVNYXhWYWx1ZSIsIm1heFBpeGVsVmFsdWUiLCJpc1N1cHBvcnRlZERhdGFUeXBlIiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJpc0NhdGVnb3JpY2FsIiwidUNvbG9ybWFwVGV4dHVyZSIsInVIYXNDYXRlZ29yaWNhbENvbG9ycyIsInVDYXRlZ29yaWNhbE1pblZhbHVlIiwidUNhdGVnb3JpY2FsTWF4VmFsdWUiLCJ1TWF4UGl4ZWxWYWx1ZSIsImNvbG9ybWFwIiwiZXhwb3J0cyIsIm5hbWUiLCJpbmplY3QiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmFzdGVyL3dlYmdsL2NvbG9yL2NvbG9ybWFwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7VGV4dHVyZTJEfSBmcm9tICdAbHVtYS5nbC93ZWJnbCc7XG5cbmltcG9ydCB7R2V0VW5pZm9ybXNPdXRwdXQsIFNoYWRlck1vZHVsZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCBmcyA9IGBcXFxudW5pZm9ybSBzYW1wbGVyMkQgdUNvbG9ybWFwVGV4dHVyZTtcbnVuaWZvcm0gaW50IHVIYXNDYXRlZ29yaWNhbENvbG9ycztcbnVuaWZvcm0gaW50IHVDYXRlZ29yaWNhbE1pblZhbHVlO1xudW5pZm9ybSBpbnQgdUNhdGVnb3JpY2FsTWF4VmFsdWU7XG51bmlmb3JtIGludCB1TWF4UGl4ZWxWYWx1ZTtcblxuLy8gQXBwbHkgY29sb3JtYXAgdGV4dHVyZSBnaXZlbiB2YWx1ZVxuLy8gU2luY2UgdGhlIHRleHR1cmUgb25seSB2YXJpZXMgaW4gdGhlIHggZGlyZWN0aW9uLCBzZXR0aW5nIHYgdG8gMC41IGFzIGFcbi8vIGNvbnN0YW50IGlzIGZpbmVcbi8vIEFzc3VtZXMgdGhlIGlucHV0IHJhbmdlIG9mIHZhbHVlIGlzIC0xIHRvIDFcbnZlYzQgY29sb3JtYXAoc2FtcGxlcjJEIGNtYXAsIHZlYzQgaW1hZ2UpIHtcbiAgdmVjMiB1djtcbiAgaWYgKHVIYXNDYXRlZ29yaWNhbENvbG9ycyA9PSAxKSB7XG4gICAgZmxvYXQgc3RlcCA9IGZsb2F0KHVNYXhQaXhlbFZhbHVlKSAvIGZsb2F0KHVDYXRlZ29yaWNhbE1heFZhbHVlIC0gdUNhdGVnb3JpY2FsTWluVmFsdWUpO1xuICAgIHV2ID0gdmVjMihpbWFnZS5yICogc3RlcCwgMC41KTtcbiAgfSBlbHNlIHtcbiAgICB1diA9IHZlYzIoMC41ICogaW1hZ2UuciArIDAuNSwgMC41KTtcbiAgfVxuICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKGNtYXAsIHV2KTtcbiAgaWYoY29sb3IuYSA8PSAwLjApIGRpc2NhcmQ7XG4gIHJldHVybiBjb2xvcjtcbn1cbmA7XG5cbmZ1bmN0aW9uIGdldFVuaWZvcm1zKFxuICBvcHRzOiB7XG4gICAgaW1hZ2VDb2xvcm1hcD86IFRleHR1cmUyRDtcbiAgICBtaW5DYXRlZ29yaWNhbEJhbmRWYWx1ZT86IG51bWJlcjtcbiAgICBtYXhDYXRlZ29yaWNhbEJhbmRWYWx1ZT86IG51bWJlcjtcbiAgICBkYXRhVHlwZU1heFZhbHVlPzogbnVtYmVyO1xuICAgIG1heFBpeGVsVmFsdWU/OiBudW1iZXI7XG4gIH0gPSB7fVxuKTogR2V0VW5pZm9ybXNPdXRwdXQge1xuICBjb25zdCB7XG4gICAgaW1hZ2VDb2xvcm1hcCxcbiAgICBtaW5DYXRlZ29yaWNhbEJhbmRWYWx1ZSxcbiAgICBtYXhDYXRlZ29yaWNhbEJhbmRWYWx1ZSxcbiAgICBkYXRhVHlwZU1heFZhbHVlLFxuICAgIG1heFBpeGVsVmFsdWVcbiAgfSA9IG9wdHM7XG5cbiAgaWYgKCFpbWFnZUNvbG9ybWFwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBpc1N1cHBvcnRlZERhdGFUeXBlID0gTnVtYmVyLmlzRmluaXRlKGRhdGFUeXBlTWF4VmFsdWUpO1xuICBjb25zdCBpc0NhdGVnb3JpY2FsID1cbiAgICBpc1N1cHBvcnRlZERhdGFUeXBlICYmXG4gICAgTnVtYmVyLmlzRmluaXRlKG1heFBpeGVsVmFsdWUpICYmXG4gICAgTnVtYmVyLmlzRmluaXRlKG1pbkNhdGVnb3JpY2FsQmFuZFZhbHVlKSAmJlxuICAgIE51bWJlci5pc0Zpbml0ZShtYXhDYXRlZ29yaWNhbEJhbmRWYWx1ZSk7XG4gIHJldHVybiB7XG4gICAgdUNvbG9ybWFwVGV4dHVyZTogaW1hZ2VDb2xvcm1hcCxcbiAgICB1SGFzQ2F0ZWdvcmljYWxDb2xvcnM6IGlzQ2F0ZWdvcmljYWwgPyAxIDogMCxcbiAgICB1Q2F0ZWdvcmljYWxNaW5WYWx1ZTogTnVtYmVyLmlzRmluaXRlKG1pbkNhdGVnb3JpY2FsQmFuZFZhbHVlKSA/IG1pbkNhdGVnb3JpY2FsQmFuZFZhbHVlIDogMCxcbiAgICB1Q2F0ZWdvcmljYWxNYXhWYWx1ZTogTnVtYmVyLmlzRmluaXRlKG1heENhdGVnb3JpY2FsQmFuZFZhbHVlKSA/IG1heENhdGVnb3JpY2FsQmFuZFZhbHVlIDogMCxcbiAgICB1TWF4UGl4ZWxWYWx1ZTogTnVtYmVyLmlzRmluaXRlKG1heFBpeGVsVmFsdWUpID8gbWF4UGl4ZWxWYWx1ZSA6IDBcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbG9ybWFwOiBTaGFkZXJNb2R1bGUgPSB7XG4gIG5hbWU6ICdjb2xvcm1hcCcsXG4gIGZzLFxuICBnZXRVbmlmb3JtcyxcbiAgaW5qZWN0OiB7XG4gICAgJ2ZzOkRFQ0tHTF9NVVRBVEVfQ09MT1InOiBgXG4gICAgaW1hZ2UgPSBjb2xvcm1hcCh1Q29sb3JtYXBUZXh0dXJlLCBpbWFnZSk7XG4gICAgYFxuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBOztBQU1BLElBQU1BLEVBQUUsK3RCQXVCUDtBQUVELFNBQVNDLFdBQVdBLENBQUEsRUFRQztFQUFBLElBUG5CQyxJQU1DLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLENBQUMsQ0FBQztFQUVOLElBQ0VHLGFBQWEsR0FLWEosSUFBSSxDQUxOSSxhQUFhO0lBQ2JDLHVCQUF1QixHQUlyQkwsSUFBSSxDQUpOSyx1QkFBdUI7SUFDdkJDLHVCQUF1QixHQUdyQk4sSUFBSSxDQUhOTSx1QkFBdUI7SUFDdkJDLGdCQUFnQixHQUVkUCxJQUFJLENBRk5PLGdCQUFnQjtJQUNoQkMsYUFBYSxHQUNYUixJQUFJLENBRE5RLGFBQWE7RUFHZixJQUFJLENBQUNKLGFBQWEsRUFBRTtJQUNsQixPQUFPLElBQUk7RUFDYjtFQUVBLElBQU1LLG1CQUFtQixHQUFHQyxNQUFNLENBQUNDLFFBQVEsQ0FBQ0osZ0JBQWdCLENBQUM7RUFDN0QsSUFBTUssYUFBYSxHQUNqQkgsbUJBQW1CLElBQ25CQyxNQUFNLENBQUNDLFFBQVEsQ0FBQ0gsYUFBYSxDQUFDLElBQzlCRSxNQUFNLENBQUNDLFFBQVEsQ0FBQ04sdUJBQXVCLENBQUMsSUFDeENLLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDTCx1QkFBdUIsQ0FBQztFQUMxQyxPQUFPO0lBQ0xPLGdCQUFnQixFQUFFVCxhQUFhO0lBQy9CVSxxQkFBcUIsRUFBRUYsYUFBYSxHQUFHLENBQUMsR0FBRyxDQUFDO0lBQzVDRyxvQkFBb0IsRUFBRUwsTUFBTSxDQUFDQyxRQUFRLENBQUNOLHVCQUF1QixDQUFDLEdBQUdBLHVCQUF1QixHQUFHLENBQUM7SUFDNUZXLG9CQUFvQixFQUFFTixNQUFNLENBQUNDLFFBQVEsQ0FBQ0wsdUJBQXVCLENBQUMsR0FBR0EsdUJBQXVCLEdBQUcsQ0FBQztJQUM1RlcsY0FBYyxFQUFFUCxNQUFNLENBQUNDLFFBQVEsQ0FBQ0gsYUFBYSxDQUFDLEdBQUdBLGFBQWEsR0FBRztFQUNuRSxDQUFDO0FBQ0g7QUFFTyxJQUFNVSxRQUFzQixHQUFBQyxPQUFBLENBQUFELFFBQUEsR0FBRztFQUNwQ0UsSUFBSSxFQUFFLFVBQVU7RUFDaEJ0QixFQUFFLEVBQUZBLEVBQUU7RUFDRkMsV0FBVyxFQUFYQSxXQUFXO0VBQ1hzQixNQUFNLEVBQUU7SUFDTix3QkFBd0I7RUFHMUI7QUFDRixDQUFDIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,2 @@
1
+ import { ShaderModule } from '../types';
2
+ export declare const filter: ShaderModule;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.filter = void 0;
7
+ // SPDX-License-Identifier: MIT
8
+ // Copyright contributors to the kepler.gl project
9
+
10
+ var fs = "uniform float filterMin1;\nuniform float filterMax1;\nuniform float filterMin2;\nuniform float filterMax2;\nuniform float filterMin3;\nuniform float filterMax3;\nuniform float filterMin4;\nuniform float filterMax4;\n";
11
+
12
+ // You can't pass JS' -Infinity or Infinity to a shader as a uniform
13
+ var inf = Math.pow(2, 62);
14
+
15
+ // eslint-disable-next-line complexity
16
+ function getUniforms() {
17
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
18
+ var filterMin1 = opts.filterMin1,
19
+ filterMin2 = opts.filterMin2,
20
+ filterMin3 = opts.filterMin3,
21
+ filterMin4 = opts.filterMin4,
22
+ filterMax1 = opts.filterMax1,
23
+ filterMax2 = opts.filterMax2,
24
+ filterMax3 = opts.filterMax3,
25
+ filterMax4 = opts.filterMax4;
26
+ if (Number.isFinite(filterMin1) || Number.isFinite(filterMin2) || Number.isFinite(filterMin3) || Number.isFinite(filterMin4) || Number.isFinite(filterMax1) || Number.isFinite(filterMax2) || Number.isFinite(filterMax3) || Number.isFinite(filterMax4)) {
27
+ return {
28
+ filterMin1: Number.isFinite(filterMin1) ? filterMin1 : -inf,
29
+ filterMin2: Number.isFinite(filterMin2) ? filterMin2 : -inf,
30
+ filterMin3: Number.isFinite(filterMin3) ? filterMin3 : -inf,
31
+ filterMin4: Number.isFinite(filterMin4) ? filterMin4 : -inf,
32
+ filterMax1: Number.isFinite(filterMax1) ? filterMax1 : inf,
33
+ filterMax2: Number.isFinite(filterMax2) ? filterMax2 : inf,
34
+ filterMax3: Number.isFinite(filterMax3) ? filterMax3 : inf,
35
+ filterMax4: Number.isFinite(filterMax4) ? filterMax4 : inf
36
+ };
37
+ }
38
+ return null;
39
+ }
40
+ var filter = exports.filter = {
41
+ name: 'filter',
42
+ fs: fs,
43
+ getUniforms: getUniforms,
44
+ inject: {
45
+ 'fs:DECKGL_MUTATE_COLOR': "\n if (image.r < filterMin1) discard;\n if (image.g < filterMin2) discard;\n if (image.b < filterMin3) discard;\n if (image.a < filterMin4) discard;\n if (image.r > filterMax1) discard;\n if (image.g > filterMax2) discard;\n if (image.b > filterMax3) discard;\n if (image.a > filterMax4) discard;\n "
46
+ }
47
+ };
48
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmcyIsImluZiIsIk1hdGgiLCJwb3ciLCJnZXRVbmlmb3JtcyIsIm9wdHMiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJmaWx0ZXJNaW4xIiwiZmlsdGVyTWluMiIsImZpbHRlck1pbjMiLCJmaWx0ZXJNaW40IiwiZmlsdGVyTWF4MSIsImZpbHRlck1heDIiLCJmaWx0ZXJNYXgzIiwiZmlsdGVyTWF4NCIsIk51bWJlciIsImlzRmluaXRlIiwiZmlsdGVyIiwiZXhwb3J0cyIsIm5hbWUiLCJpbmplY3QiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmFzdGVyL3dlYmdsL2NvbG9yL2ZpbHRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge0dldFVuaWZvcm1zT3V0cHV0LCBTaGFkZXJNb2R1bGV9IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgZnMgPSBgXFxcbnVuaWZvcm0gZmxvYXQgZmlsdGVyTWluMTtcbnVuaWZvcm0gZmxvYXQgZmlsdGVyTWF4MTtcbnVuaWZvcm0gZmxvYXQgZmlsdGVyTWluMjtcbnVuaWZvcm0gZmxvYXQgZmlsdGVyTWF4MjtcbnVuaWZvcm0gZmxvYXQgZmlsdGVyTWluMztcbnVuaWZvcm0gZmxvYXQgZmlsdGVyTWF4MztcbnVuaWZvcm0gZmxvYXQgZmlsdGVyTWluNDtcbnVuaWZvcm0gZmxvYXQgZmlsdGVyTWF4NDtcbmA7XG5cbi8vIFlvdSBjYW4ndCBwYXNzIEpTJyAtSW5maW5pdHkgb3IgSW5maW5pdHkgdG8gYSBzaGFkZXIgYXMgYSB1bmlmb3JtXG5jb25zdCBpbmYgPSBNYXRoLnBvdygyLCA2Mik7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5mdW5jdGlvbiBnZXRVbmlmb3JtcyhcbiAgb3B0czoge1xuICAgIGZpbHRlck1pbjE/OiBudW1iZXI7XG4gICAgZmlsdGVyTWluMj86IG51bWJlcjtcbiAgICBmaWx0ZXJNaW4zPzogbnVtYmVyO1xuICAgIGZpbHRlck1pbjQ/OiBudW1iZXI7XG4gICAgZmlsdGVyTWF4MT86IG51bWJlcjtcbiAgICBmaWx0ZXJNYXgyPzogbnVtYmVyO1xuICAgIGZpbHRlck1heDM/OiBudW1iZXI7XG4gICAgZmlsdGVyTWF4ND86IG51bWJlcjtcbiAgfSA9IHt9XG4pOiBHZXRVbmlmb3Jtc091dHB1dCB7XG4gIGNvbnN0IHtcbiAgICBmaWx0ZXJNaW4xLFxuICAgIGZpbHRlck1pbjIsXG4gICAgZmlsdGVyTWluMyxcbiAgICBmaWx0ZXJNaW40LFxuICAgIGZpbHRlck1heDEsXG4gICAgZmlsdGVyTWF4MixcbiAgICBmaWx0ZXJNYXgzLFxuICAgIGZpbHRlck1heDRcbiAgfSA9IG9wdHM7XG5cbiAgaWYgKFxuICAgIE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNaW4xKSB8fFxuICAgIE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNaW4yKSB8fFxuICAgIE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNaW4zKSB8fFxuICAgIE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNaW40KSB8fFxuICAgIE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNYXgxKSB8fFxuICAgIE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNYXgyKSB8fFxuICAgIE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNYXgzKSB8fFxuICAgIE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNYXg0KVxuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgZmlsdGVyTWluMTogTnVtYmVyLmlzRmluaXRlKGZpbHRlck1pbjEpID8gZmlsdGVyTWluMSA6IC1pbmYsXG4gICAgICBmaWx0ZXJNaW4yOiBOdW1iZXIuaXNGaW5pdGUoZmlsdGVyTWluMikgPyBmaWx0ZXJNaW4yIDogLWluZixcbiAgICAgIGZpbHRlck1pbjM6IE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNaW4zKSA/IGZpbHRlck1pbjMgOiAtaW5mLFxuICAgICAgZmlsdGVyTWluNDogTnVtYmVyLmlzRmluaXRlKGZpbHRlck1pbjQpID8gZmlsdGVyTWluNCA6IC1pbmYsXG4gICAgICBmaWx0ZXJNYXgxOiBOdW1iZXIuaXNGaW5pdGUoZmlsdGVyTWF4MSkgPyBmaWx0ZXJNYXgxIDogaW5mLFxuICAgICAgZmlsdGVyTWF4MjogTnVtYmVyLmlzRmluaXRlKGZpbHRlck1heDIpID8gZmlsdGVyTWF4MiA6IGluZixcbiAgICAgIGZpbHRlck1heDM6IE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNYXgzKSA/IGZpbHRlck1heDMgOiBpbmYsXG4gICAgICBmaWx0ZXJNYXg0OiBOdW1iZXIuaXNGaW5pdGUoZmlsdGVyTWF4NCkgPyBmaWx0ZXJNYXg0IDogaW5mXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgY29uc3QgZmlsdGVyOiBTaGFkZXJNb2R1bGUgPSB7XG4gIG5hbWU6ICdmaWx0ZXInLFxuICBmcyxcbiAgZ2V0VW5pZm9ybXMsXG4gIGluamVjdDoge1xuICAgICdmczpERUNLR0xfTVVUQVRFX0NPTE9SJzogYFxuICAgIGlmIChpbWFnZS5yIDwgZmlsdGVyTWluMSkgZGlzY2FyZDtcbiAgICBpZiAoaW1hZ2UuZyA8IGZpbHRlck1pbjIpIGRpc2NhcmQ7XG4gICAgaWYgKGltYWdlLmIgPCBmaWx0ZXJNaW4zKSBkaXNjYXJkO1xuICAgIGlmIChpbWFnZS5hIDwgZmlsdGVyTWluNCkgZGlzY2FyZDtcbiAgICBpZiAoaW1hZ2UuciA+IGZpbHRlck1heDEpIGRpc2NhcmQ7XG4gICAgaWYgKGltYWdlLmcgPiBmaWx0ZXJNYXgyKSBkaXNjYXJkO1xuICAgIGlmIChpbWFnZS5iID4gZmlsdGVyTWF4MykgZGlzY2FyZDtcbiAgICBpZiAoaW1hZ2UuYSA+IGZpbHRlck1heDQpIGRpc2NhcmQ7XG4gICAgYFxuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBOztBQUlBLElBQU1BLEVB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
@@ -0,0 +1,2 @@
1
+ import { ShaderModule } from '../types';
2
+ export declare const gammaContrast: ShaderModule;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.gammaContrast = void 0;
7
+ // SPDX-License-Identifier: MIT
8
+ // Copyright contributors to the kepler.gl project
9
+
10
+ // Gamma correction is a nonlinear operation that
11
+ // adjusts the image's channel values pixel-by-pixel according
12
+ // to a power-law:
13
+ //
14
+ // .. math:: pixel_{out} = pixel_{in} ^ {gamma}
15
+ //
16
+ // Setting gamma (:math:gamma) to be less than 1.0 darkens the image and
17
+ // setting gamma to be greater than 1.0 lightens it.
18
+
19
+ // Parameters
20
+ // ----------
21
+ // gamma (:math:gamma): float
22
+ // Reasonable values range from 0.8 to 2.4.
23
+
24
+ // NOTE: Input array must have float values between 0 and 1!
25
+ // NOTE: gamma must be >= 0
26
+ var fs = "#define epsilon 0.00000001\n\nuniform float gamma1;\nuniform float gamma2;\nuniform float gamma3;\nuniform float gamma4;\n\nfloat gammaContrast(float arr, float g) {\n // Gamma must be > 0\n g = clamp(g, epsilon, g);\n\n return pow(arr, 1.0 / g);\n}\n\nvec4 gammaContrast(vec4 arr, float g1, float g2, float g3, float g4) {\n arr.r = gammaContrast(arr.r, g1);\n arr.g = gammaContrast(arr.g, g2);\n arr.b = gammaContrast(arr.b, g3);\n arr.a = gammaContrast(arr.a, g4);\n\n return arr;\n}\n";
27
+ function getUniforms() {
28
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
29
+ var gammaContrastValue = opts.gammaContrastValue,
30
+ gammaContrastValue1 = opts.gammaContrastValue1,
31
+ gammaContrastValue2 = opts.gammaContrastValue2,
32
+ gammaContrastValue3 = opts.gammaContrastValue3,
33
+ gammaContrastValue4 = opts.gammaContrastValue4;
34
+
35
+ // Gamma must be > 0, so not using Number.isFinite is fine
36
+
37
+ if (gammaContrastValue) {
38
+ return {
39
+ gamma1: gammaContrastValue,
40
+ gamma2: gammaContrastValue,
41
+ gamma3: gammaContrastValue,
42
+ gamma4: gammaContrastValue
43
+ };
44
+ } else if (gammaContrastValue1 || gammaContrastValue2 || gammaContrastValue3 || gammaContrastValue4) {
45
+ return {
46
+ gamma1: gammaContrastValue1 || 1,
47
+ gamma2: gammaContrastValue2 || 1,
48
+ gamma3: gammaContrastValue3 || 1,
49
+ gamma4: gammaContrastValue4 || 1
50
+ };
51
+ }
52
+ return null;
53
+ }
54
+ var gammaContrast = exports.gammaContrast = {
55
+ name: 'gamma_contrast',
56
+ fs: fs,
57
+ getUniforms: getUniforms,
58
+ inject: {
59
+ 'fs:DECKGL_MUTATE_COLOR': "\n image = gammaContrast(image, gamma1, gamma2, gamma3, gamma4);\n "
60
+ }
61
+ };
62
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmcyIsImdldFVuaWZvcm1zIiwib3B0cyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImdhbW1hQ29udHJhc3RWYWx1ZSIsImdhbW1hQ29udHJhc3RWYWx1ZTEiLCJnYW1tYUNvbnRyYXN0VmFsdWUyIiwiZ2FtbWFDb250cmFzdFZhbHVlMyIsImdhbW1hQ29udHJhc3RWYWx1ZTQiLCJnYW1tYTEiLCJnYW1tYTIiLCJnYW1tYTMiLCJnYW1tYTQiLCJnYW1tYUNvbnRyYXN0IiwiZXhwb3J0cyIsIm5hbWUiLCJpbmplY3QiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmFzdGVyL3dlYmdsL2NvbG9yL2dhbW1hLWNvbnRyYXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7R2V0VW5pZm9ybXNPdXRwdXQsIFNoYWRlck1vZHVsZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vLyBHYW1tYSBjb3JyZWN0aW9uIGlzIGEgbm9ubGluZWFyIG9wZXJhdGlvbiB0aGF0XG4vLyBhZGp1c3RzIHRoZSBpbWFnZSdzIGNoYW5uZWwgdmFsdWVzIHBpeGVsLWJ5LXBpeGVsIGFjY29yZGluZ1xuLy8gdG8gYSBwb3dlci1sYXc6XG4vL1xuLy8gLi4gbWF0aDo6IHBpeGVsX3tvdXR9ID0gcGl4ZWxfe2lufSBeIHtnYW1tYX1cbi8vXG4vLyBTZXR0aW5nIGdhbW1hICg6bWF0aDpnYW1tYSkgdG8gYmUgbGVzcyB0aGFuIDEuMCBkYXJrZW5zIHRoZSBpbWFnZSBhbmRcbi8vIHNldHRpbmcgZ2FtbWEgdG8gYmUgZ3JlYXRlciB0aGFuIDEuMCBsaWdodGVucyBpdC5cblxuLy8gUGFyYW1ldGVyc1xuLy8gLS0tLS0tLS0tLVxuLy8gZ2FtbWEgKDptYXRoOmdhbW1hKTogZmxvYXRcbi8vICAgICBSZWFzb25hYmxlIHZhbHVlcyByYW5nZSBmcm9tIDAuOCB0byAyLjQuXG5cbi8vIE5PVEU6IElucHV0IGFycmF5IG11c3QgaGF2ZSBmbG9hdCB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAxIVxuLy8gTk9URTogZ2FtbWEgbXVzdCBiZSA+PSAwXG5jb25zdCBmcyA9IGBcXFxuI2RlZmluZSBlcHNpbG9uIDAuMDAwMDAwMDFcblxudW5pZm9ybSBmbG9hdCBnYW1tYTE7XG51bmlmb3JtIGZsb2F0IGdhbW1hMjtcbnVuaWZvcm0gZmxvYXQgZ2FtbWEzO1xudW5pZm9ybSBmbG9hdCBnYW1tYTQ7XG5cbmZsb2F0IGdhbW1hQ29udHJhc3QoZmxvYXQgYXJyLCBmbG9hdCBnKSB7XG4gIC8vIEdhbW1hIG11c3QgYmUgPiAwXG4gIGcgPSBjbGFtcChnLCBlcHNpbG9uLCBnKTtcblxuICByZXR1cm4gcG93KGFyciwgMS4wIC8gZyk7XG59XG5cbnZlYzQgZ2FtbWFDb250cmFzdCh2ZWM0IGFyciwgZmxvYXQgZzEsIGZsb2F0IGcyLCBmbG9hdCBnMywgZmxvYXQgZzQpIHtcbiAgYXJyLnIgPSBnYW1tYUNvbnRyYXN0KGFyci5yLCBnMSk7XG4gIGFyci5nID0gZ2FtbWFDb250cmFzdChhcnIuZywgZzIpO1xuICBhcnIuYiA9IGdhbW1hQ29udHJhc3QoYXJyLmIsIGczKTtcbiAgYXJyLmEgPSBnYW1tYUNvbnRyYXN0KGFyci5hLCBnNCk7XG5cbiAgcmV0dXJuIGFycjtcbn1cbmA7XG5cbmZ1bmN0aW9uIGdldFVuaWZvcm1zKFxuICBvcHRzOiB7XG4gICAgZ2FtbWFDb250cmFzdFZhbHVlPzogbnVtYmVyO1xuICAgIGdhbW1hQ29udHJhc3RWYWx1ZTE/OiBudW1iZXI7XG4gICAgZ2FtbWFDb250cmFzdFZhbHVlMj86IG51bWJlcjtcbiAgICBnYW1tYUNvbnRyYXN0VmFsdWUzPzogbnVtYmVyO1xuICAgIGdhbW1hQ29udHJhc3RWYWx1ZTQ/OiBudW1iZXI7XG4gIH0gPSB7fVxuKTogR2V0VW5pZm9ybXNPdXRwdXQge1xuICBjb25zdCB7XG4gICAgZ2FtbWFDb250cmFzdFZhbHVlLFxuICAgIGdhbW1hQ29udHJhc3RWYWx1ZTEsXG4gICAgZ2FtbWFDb250cmFzdFZhbHVlMixcbiAgICBnYW1tYUNvbnRyYXN0VmFsdWUzLFxuICAgIGdhbW1hQ29udHJhc3RWYWx1ZTRcbiAgfSA9IG9wdHM7XG5cbiAgLy8gR2FtbWEgbXVzdCBiZSA+IDAsIHNvIG5vdCB1c2luZyBOdW1iZXIuaXNGaW5pdGUgaXMgZmluZVxuXG4gIGlmIChnYW1tYUNvbnRyYXN0VmFsdWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ2FtbWExOiBnYW1tYUNvbnRyYXN0VmFsdWUsXG4gICAgICBnYW1tYTI6IGdhbW1hQ29udHJhc3RWYWx1ZSxcbiAgICAgIGdhbW1hMzogZ2FtbWFDb250cmFzdFZhbHVlLFxuICAgICAgZ2FtbWE0OiBnYW1tYUNvbnRyYXN0VmFsdWVcbiAgICB9O1xuICB9IGVsc2UgaWYgKFxuICAgIGdhbW1hQ29udHJhc3RWYWx1ZTEgfHxcbiAgICBnYW1tYUNvbnRyYXN0VmFsdWUyIHx8XG4gICAgZ2FtbWFDb250cmFzdFZhbHVlMyB8fFxuICAgIGdhbW1hQ29udHJhc3RWYWx1ZTRcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdhbW1hMTogZ2FtbWFDb250cmFzdFZhbHVlMSB8fCAxLFxuICAgICAgZ2FtbWEyOiBnYW1tYUNvbnRyYXN0VmFsdWUyIHx8IDEsXG4gICAgICBnYW1tYTM6IGdhbW1hQ29udHJhc3RWYWx1ZTMgfHwgMSxcbiAgICAgIGdhbW1hNDogZ2FtbWFDb250cmFzdFZhbHVlNCB8fCAxXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgY29uc3QgZ2FtbWFDb250cmFzdDogU2hhZGVyTW9kdWxlID0ge1xuICBuYW1lOiAnZ2FtbWFfY29udHJhc3QnLFxuICBmcyxcbiAgZ2V0VW5pZm9ybXMsXG4gIGluamVjdDoge1xuICAgICdmczpERUNLR0xfTVVUQVRFX0NPTE9SJzogYFxuICAgIGltYWdlID0gZ2FtbWFDb250cmFzdChpbWFnZSwgZ2FtbWExLCBnYW1tYTIsIGdhbW1hMywgZ2FtbWE0KTtcbiAgICBgXG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBTUEsRUFBRSxxZkF1QlA7QUFFRCxTQUFTQyxXQUFXQSxDQUFBLEVBUUM7RUFBQSxJQVBuQkMsSUFNQyxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxDQUFDLENBQUM7RUFFTixJQUNFRyxrQkFBa0IsR0FLaEJKLElBQUksQ0FMTkksa0JBQWtCO0lBQ2xCQyxtQkFBbUIsR0FJakJMLElBQUksQ0FKTkssbUJBQW1CO0lBQ25CQyxtQkFBbUIsR0FHakJOLElBQUksQ0FITk0sbUJBQW1CO0lBQ25CQyxtQkFBbUIsR0FFakJQLElBQUksQ0FGTk8sbUJBQW1CO0lBQ25CQyxtQkFBbUIsR0FDakJSLElBQUksQ0FETlEsbUJBQW1COztFQUdyQjs7RUFFQSxJQUFJSixrQkFBa0IsRUFBRTtJQUN0QixPQUFPO01BQ0xLLE1BQU0sRUFBRUwsa0JBQWtCO01BQzFCTSxNQUFNLEVBQUVOLGtCQUFrQjtNQUMxQk8sTUFBTSxFQUFFUCxrQkFBa0I7TUFDMUJRLE1BQU0sRUFBRVI7SUFDVixDQUFDO0VBQ0gsQ0FBQyxNQUFNLElBQ0xDLG1CQUFtQixJQUNuQkMsbUJBQW1CLElBQ25CQyxtQkFBbUIsSUFDbkJDLG1CQUFtQixFQUNuQjtJQUNBLE9BQU87TUFDTEMsTUFBTSxFQUFFSixtQkFBbUIsSUFBSSxDQUFDO01BQ2hDSyxNQUFNLEVBQUVKLG1CQUFtQixJQUFJLENBQUM7TUFDaENLLE1BQU0sRUFBRUosbUJBQW1CLElBQUksQ0FBQztNQUNoQ0ssTUFBTSxFQUFFSixtQkFBbUIsSUFBSTtJQUNqQyxDQUFDO0VBQ0g7RUFFQSxPQUFPLElBQUk7QUFDYjtBQUVPLElBQU1LLGFBQTJCLEdBQUFDLE9BQUEsQ0FBQUQsYUFBQSxHQUFHO0VBQ3pDRSxJQUFJLEVBQUUsZ0JBQWdCO0VBQ3RCakIsRUFBRSxFQUFGQSxFQUFFO0VBQ0ZDLFdBQVcsRUFBWEEsV0FBVztFQUNYaUIsTUFBTSxFQUFFO0lBQ04sd0JBQXdCO0VBRzFCO0FBQ0YsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1,2 @@
1
+ import { ShaderModule } from '../types';
2
+ export declare const linearRescale: ShaderModule;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.linearRescale = void 0;
7
+ // SPDX-License-Identifier: MIT
8
+ // Copyright contributors to the kepler.gl project
9
+
10
+ var fs = "uniform float linearRescaleScaler;\nuniform float linearRescaleOffset;\n\n// Perform a linear rescaling of image\nvec4 linear_rescale(vec4 arr, float scaler, float offset) {\n return arr * scaler + offset;\n}\n";
11
+ function getUniforms() {
12
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
13
+ var linearRescaleScaler = opts.linearRescaleScaler,
14
+ linearRescaleOffset = opts.linearRescaleOffset;
15
+ if (!Number.isFinite(linearRescaleScaler) && !Number.isFinite(linearRescaleOffset)) {
16
+ return null;
17
+ }
18
+ return {
19
+ linearRescaleScaler: Number.isFinite(linearRescaleScaler) ? linearRescaleScaler : 1,
20
+ linearRescaleOffset: Number.isFinite(linearRescaleOffset) ? linearRescaleOffset : 0
21
+ };
22
+ }
23
+ var linearRescale = exports.linearRescale = {
24
+ name: 'linear_rescale',
25
+ fs: fs,
26
+ getUniforms: getUniforms,
27
+ inject: {
28
+ 'fs:DECKGL_MUTATE_COLOR': "\n image = linear_rescale(image, linearRescaleScaler, linearRescaleOffset);\n "
29
+ }
30
+ };
31
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmcyIsImdldFVuaWZvcm1zIiwib3B0cyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImxpbmVhclJlc2NhbGVTY2FsZXIiLCJsaW5lYXJSZXNjYWxlT2Zmc2V0IiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJsaW5lYXJSZXNjYWxlIiwiZXhwb3J0cyIsIm5hbWUiLCJpbmplY3QiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmFzdGVyL3dlYmdsL2NvbG9yL2xpbmVhci1yZXNjYWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7R2V0VW5pZm9ybXNPdXRwdXQsIFNoYWRlck1vZHVsZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCBmcyA9IGBcXFxudW5pZm9ybSBmbG9hdCBsaW5lYXJSZXNjYWxlU2NhbGVyO1xudW5pZm9ybSBmbG9hdCBsaW5lYXJSZXNjYWxlT2Zmc2V0O1xuXG4vLyBQZXJmb3JtIGEgbGluZWFyIHJlc2NhbGluZyBvZiBpbWFnZVxudmVjNCBsaW5lYXJfcmVzY2FsZSh2ZWM0IGFyciwgZmxvYXQgc2NhbGVyLCBmbG9hdCBvZmZzZXQpIHtcbiAgcmV0dXJuIGFyciAqIHNjYWxlciArIG9mZnNldDtcbn1cbmA7XG5cbmZ1bmN0aW9uIGdldFVuaWZvcm1zKFxuICBvcHRzOiB7bGluZWFyUmVzY2FsZVNjYWxlcj86IG51bWJlcjsgbGluZWFyUmVzY2FsZU9mZnNldD86IG51bWJlcn0gPSB7fVxuKTogR2V0VW5pZm9ybXNPdXRwdXQge1xuICBjb25zdCB7bGluZWFyUmVzY2FsZVNjYWxlciwgbGluZWFyUmVzY2FsZU9mZnNldH0gPSBvcHRzO1xuXG4gIGlmICghTnVtYmVyLmlzRmluaXRlKGxpbmVhclJlc2NhbGVTY2FsZXIpICYmICFOdW1iZXIuaXNGaW5pdGUobGluZWFyUmVzY2FsZU9mZnNldCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbGluZWFyUmVzY2FsZVNjYWxlcjogTnVtYmVyLmlzRmluaXRlKGxpbmVhclJlc2NhbGVTY2FsZXIpID8gbGluZWFyUmVzY2FsZVNjYWxlciA6IDEsXG4gICAgbGluZWFyUmVzY2FsZU9mZnNldDogTnVtYmVyLmlzRmluaXRlKGxpbmVhclJlc2NhbGVPZmZzZXQpID8gbGluZWFyUmVzY2FsZU9mZnNldCA6IDBcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IGxpbmVhclJlc2NhbGU6IFNoYWRlck1vZHVsZSA9IHtcbiAgbmFtZTogJ2xpbmVhcl9yZXNjYWxlJyxcbiAgZnMsXG4gIGdldFVuaWZvcm1zLFxuICBpbmplY3Q6IHtcbiAgICAnZnM6REVDS0dMX01VVEFURV9DT0xPUic6IGBcbiAgICBpbWFnZSA9IGxpbmVhcl9yZXNjYWxlKGltYWdlLCBsaW5lYXJSZXNjYWxlU2NhbGVyLCBsaW5lYXJSZXNjYWxlT2Zmc2V0KTtcbiAgICBgXG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7O0FBSUEsSUFBTUEsRUFBRSx3TkFRUDtBQUVELFNBQVNDLFdBQVdBLENBQUEsRUFFQztFQUFBLElBRG5CQyxJQUFrRSxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxDQUFDLENBQUM7RUFFdkUsSUFBT0csbUJBQW1CLEdBQXlCSixJQUFJLENBQWhESSxtQkFBbUI7SUFBRUMsbUJBQW1CLEdBQUlMLElBQUksQ0FBM0JLLG1CQUFtQjtFQUUvQyxJQUFJLENBQUNDLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDSCxtQkFBbUIsQ0FBQyxJQUFJLENBQUNFLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDRixtQkFBbUIsQ0FBQyxFQUFFO0lBQ2xGLE9BQU8sSUFBSTtFQUNiO0VBRUEsT0FBTztJQUNMRCxtQkFBbUIsRUFBRUUsTUFBTSxDQUFDQyxRQUFRLENBQUNILG1CQUFtQixDQUFDLEdBQUdBLG1CQUFtQixHQUFHLENBQUM7SUFDbkZDLG1CQUFtQixFQUFFQyxNQUFNLENBQUNDLFFBQVEsQ0FBQ0YsbUJBQW1CLENBQUMsR0FBR0EsbUJBQW1CLEdBQUc7RUFDcEYsQ0FBQztBQUNIO0FBRU8sSUFBTUcsYUFBMkIsR0FBQUMsT0FBQSxDQUFBRCxhQUFBLEdBQUc7RUFDekNFLElBQUksRUFBRSxnQkFBZ0I7RUFDdEJaLEVBQUUsRUFBRkEsRUFBRTtFQUNGQyxXQUFXLEVBQVhBLFdBQVc7RUFDWFksTUFBTSxFQUFFO0lBQ04sd0JBQXdCO0VBRzFCO0FBQ0YsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1,2 @@
1
+ import { ShaderModule } from '../types';
2
+ export declare const saturation: ShaderModule;