@opengeoweb/webmap 4.7.1 → 4.9.1

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/index.esm.js CHANGED
@@ -518,10 +518,10 @@ var addBoundingBoxForLayer = function addBoundingBoxForLayer(layerObjectFromWMS)
518
518
  if (layerObjectFromWMS.LatLonBoundingBox) {
519
519
  var _layerBbox = layerObjectFromWMS.LatLonBoundingBox;
520
520
  return {
521
- east: _layerBbox.attr.maxx || null,
522
- west: _layerBbox.attr.minx || null,
523
- north: _layerBbox.attr.maxy || null,
524
- south: _layerBbox.attr.miny || null
521
+ east: _layerBbox.attr.maxx,
522
+ west: _layerBbox.attr.minx,
523
+ north: _layerBbox.attr.maxy,
524
+ south: _layerBbox.attr.miny
525
525
  };
526
526
  }
527
527
 
@@ -4003,7 +4003,6 @@ var version = '3.0.1';
4003
4003
  /* Global vars */
4004
4004
 
4005
4005
  var WebMapJSMapNo = 0;
4006
- var WebMapJSMapInstanceIds = [];
4007
4006
  var bgMapImageStore = new WMImageStore(bgImageStoreLength, {
4008
4007
  id: 'bgMapImageStore'
4009
4008
  });
@@ -4053,6 +4052,8 @@ var WMJSMap = /*#__PURE__*/function () {
4053
4052
 
4054
4053
  _classCallCheck(this, WMJSMap);
4055
4054
 
4055
+ this.internalMapId = '';
4056
+
4056
4057
  this.onContextMenu = function () {
4057
4058
  return false;
4058
4059
  };
@@ -4120,7 +4121,7 @@ var WMJSMap = /*#__PURE__*/function () {
4120
4121
  this.showScaleBarInMap = true;
4121
4122
  this.mouseHoverAnimationBox = false;
4122
4123
  this.callBack = new WMListener();
4123
- this.initialized = 0;
4124
+ this.initialized = false;
4124
4125
  this.suspendDrawing = false;
4125
4126
  this.activeLayer = undefined;
4126
4127
  /* Undo: */
@@ -4329,25 +4330,12 @@ var WMJSMap = /*#__PURE__*/function () {
4329
4330
  value: function makeComponentId(id) {
4330
4331
  var availableId = "WebMapJSMapNo_".concat(WebMapJSMapNo);
4331
4332
 
4332
- if (!this.mainElement.id) {
4333
- for (var testDestroyed in WebMapJSMapInstanceIds) {
4334
- if (WebMapJSMapInstanceIds[testDestroyed] === false) {
4335
- availableId = testDestroyed;
4336
- this.hasGeneratedId = true;
4337
- break;
4338
- }
4339
- }
4340
-
4341
- this.mainElement.id = availableId;
4342
- WebMapJSMapInstanceIds[this.mainElement.id] = true;
4343
- }
4344
-
4345
- if (this.hasGeneratedId === false) {
4346
- this.hasGeneratedId = true;
4333
+ if (this.internalMapId === '') {
4334
+ this.internalMapId = availableId;
4347
4335
  WebMapJSMapNo += 1;
4348
4336
  }
4349
4337
 
4350
- return "".concat(this.mainElement.id, "_").concat(id);
4338
+ return "".concat(this.internalMapId, "_").concat(id);
4351
4339
  }
4352
4340
  }, {
4353
4341
  key: "setMessage",
@@ -4805,8 +4793,7 @@ var WMJSMap = /*#__PURE__*/function () {
4805
4793
  this.bbox.bottom = -90;
4806
4794
  this.bbox.right = 180;
4807
4795
  this.bbox.top = 90;
4808
- this.srs = 'EPSG:4326';
4809
- this.setSize(this.mainElement.clientWidth, this.mainElement.clientHeight); // IMAGE buffer
4796
+ this.srs = 'EPSG:4326'; // IMAGE buffer
4810
4797
 
4811
4798
  this.divBuffer = new WMCanvasBuffer(this.callBack, getMapImageStore, this.getWidth(), this.getHeight(), {
4812
4799
  beforecanvasstartdraw: this._adagucBeforeDraw,
@@ -4820,7 +4807,7 @@ var WMJSMap = /*#__PURE__*/function () {
4820
4807
  if (imageEventType === WMImageEventType.Loaded) {
4821
4808
  _this3.draw('legendImageStore loaded');
4822
4809
  }
4823
- }, this.mainElement.id);
4810
+ }, this.internalMapId);
4824
4811
  this.callBack.addToCallback('display', this.display, true);
4825
4812
  this.callBack.addToCallback('draw', function () {
4826
4813
  debug(DebugType.Log);
@@ -4829,13 +4816,13 @@ var WMJSMap = /*#__PURE__*/function () {
4829
4816
  if (imageEventType === WMImageEventType.Loaded) {
4830
4817
  _this3.draw('bgMapImageStore loaded');
4831
4818
  }
4832
- }, this.mainElement.id);
4819
+ }, this.internalMapId);
4833
4820
 
4834
4821
  this._updateBoundingBox(this.bbox);
4835
4822
 
4836
4823
  this.wmAnimate = new WMJSAnimate(this);
4837
4824
  this.wmTileRenderer = new WMTileRenderer();
4838
- this.initialized = 1;
4825
+ this.initialized = true;
4839
4826
  }
4840
4827
  }, {
4841
4828
  key: "rebuildMapDimensions",
@@ -5230,9 +5217,9 @@ var WMJSMap = /*#__PURE__*/function () {
5230
5217
  value: function setSize(w, h) {
5231
5218
  var _this6 = this;
5232
5219
 
5233
- debug(DebugType.Log);
5220
+ debug(DebugType.Log, 'setSize', w, h, this.initialized);
5234
5221
 
5235
- if (w < 4 || h < 4) {
5222
+ if (w < 4 || h < 4 || this.initialized === false) {
5236
5223
  return;
5237
5224
  }
5238
5225
 
@@ -5761,6 +5748,7 @@ var WMJSMap = /*#__PURE__*/function () {
5761
5748
  }, {
5762
5749
  key: "destroy",
5763
5750
  value: function destroy() {
5751
+ if (!this.initialized) return;
5764
5752
  this.stopAnimating();
5765
5753
 
5766
5754
  for (var i = this.layers.length - 1; i >= 0; i -= 1) {
@@ -5769,11 +5757,24 @@ var WMJSMap = /*#__PURE__*/function () {
5769
5757
 
5770
5758
  this.detachEvents();
5771
5759
  this.callBack.destroy();
5772
- getMapImageStore.removeEventCallback(this.mainElement.id);
5773
- bgMapImageStore.removeEventCallback(this.mainElement.id);
5774
- getLegendImageStore().removeEventCallback(this.mainElement.id);
5775
- WebMapJSMapInstanceIds[this.mainElement.id] = false;
5760
+ this.callBack = null;
5761
+ getMapImageStore.removeEventCallback(this.internalMapId);
5762
+ bgMapImageStore.removeEventCallback(this.internalMapId);
5763
+ getLegendImageStore().removeEventCallback(this.internalMapId);
5764
+ this.internalMapId = '';
5765
+ this.mainElement.removeChild(this.baseDiv);
5766
+ this.baseDiv.innerHTML = '';
5767
+ this.divZoomBox.innerHTML = '';
5768
+ this.divBoundingBox.innerHTML = '';
5769
+ this.divDimInfo.innerHTML = '';
5770
+ this.loadingDiv.innerHTML = '';
5771
+ this.baseDiv = undefined;
5772
+ this.divZoomBox = undefined;
5773
+ this.divBoundingBox = undefined;
5774
+ this.divDimInfo = undefined;
5775
+ this.loadingDiv = undefined;
5776
5776
  this.isDestroyed = true;
5777
+ this.initialized = false;
5777
5778
  }
5778
5779
  }, {
5779
5780
  key: "detachEvents",
@@ -6797,7 +6798,8 @@ var WMJSMap = /*#__PURE__*/function () {
6797
6798
  }, {
6798
6799
  key: "removeListener",
6799
6800
  value: function removeListener(name, f) {
6800
- return this.callBack.removeEvents(name, f);
6801
+ if (this.isDestroyed) return;
6802
+ this.callBack.removeEvents(name, f);
6801
6803
  }
6802
6804
  }, {
6803
6805
  key: "getListener",
@@ -7697,7 +7699,7 @@ rootNode, path) {
7697
7699
  if (layers[j].Name) {
7698
7700
  nodeObject = {
7699
7701
  name: layers[j].Name.value,
7700
- text: layers[j].Title.value,
7702
+ title: layers[j].Title.value,
7701
7703
  leaf: isleaf,
7702
7704
  path: path,
7703
7705
  keywords: toArray(layers[j].KeywordList && layers[j].KeywordList.Keyword).map(function (keywords) {
@@ -7711,7 +7713,7 @@ rootNode, path) {
7711
7713
  } else {
7712
7714
  var nodeText = isNull(layers[j].Title) ? 'Layer' : layers[j].Title.value;
7713
7715
  nodeObject = {
7714
- text: nodeText,
7716
+ title: nodeText,
7715
7717
  leaf: isleaf,
7716
7718
  styles: []
7717
7719
  };
@@ -7726,7 +7728,7 @@ rootNode, path) {
7726
7728
  } // Sort nodes alphabetically.
7727
7729
 
7728
7730
 
7729
- sortByKey(rootNode, 'text');
7731
+ sortByKey(rootNode, 'title');
7730
7732
  };
7731
7733
  var generatedServiceIds = 0;
7732
7734
 
@@ -8036,7 +8038,7 @@ var WMJSService = /*#__PURE__*/function () {
8036
8038
  leaf: false,
8037
8039
  expanded: true,
8038
8040
  children: [],
8039
- text: '',
8041
+ title: '',
8040
8042
  keywords: [],
8041
8043
  "abstract": ''
8042
8044
  };
@@ -8053,9 +8055,9 @@ var WMJSService = /*#__PURE__*/function () {
8053
8055
  var WMSLayers = toArray(rootLayer.Layer);
8054
8056
 
8055
8057
  try {
8056
- nodeStructure.text = rootLayer.Title.value;
8058
+ nodeStructure.title = rootLayer.Title.value;
8057
8059
  } catch (e) {
8058
- nodeStructure.text = I18n.unnamed_service.text;
8060
+ nodeStructure.title = I18n.unnamed_service.text;
8059
8061
  }
8060
8062
 
8061
8063
  recursivelyFindLayer(WMSLayers, nodeStructure.children, []);
package/index.umd.js CHANGED
@@ -465,10 +465,10 @@
465
465
  if (layerObjectFromWMS.LatLonBoundingBox) {
466
466
  var layerBbox = layerObjectFromWMS.LatLonBoundingBox;
467
467
  return {
468
- east: layerBbox.attr.maxx || null,
469
- west: layerBbox.attr.minx || null,
470
- north: layerBbox.attr.maxy || null,
471
- south: layerBbox.attr.miny || null
468
+ east: layerBbox.attr.maxx,
469
+ west: layerBbox.attr.minx,
470
+ north: layerBbox.attr.maxy,
471
+ south: layerBbox.attr.miny
472
472
  };
473
473
  }
474
474
 
@@ -4059,7 +4059,6 @@
4059
4059
  /* Global vars */
4060
4060
 
4061
4061
  var WebMapJSMapNo = 0;
4062
- var WebMapJSMapInstanceIds = [];
4063
4062
  var bgMapImageStore = new WMImageStore(bgImageStoreLength, {
4064
4063
  id: 'bgMapImageStore'
4065
4064
  });
@@ -4109,6 +4108,8 @@
4109
4108
  function WMJSMap(_element) {
4110
4109
  var _this = this;
4111
4110
 
4111
+ this.internalMapId = '';
4112
+
4112
4113
  this.onContextMenu = function () {
4113
4114
  return false;
4114
4115
  };
@@ -4176,7 +4177,7 @@
4176
4177
  this.showScaleBarInMap = true;
4177
4178
  this.mouseHoverAnimationBox = false;
4178
4179
  this.callBack = new WMListener();
4179
- this.initialized = 0;
4180
+ this.initialized = false;
4180
4181
  this.suspendDrawing = false;
4181
4182
  this.activeLayer = undefined;
4182
4183
  /* Undo: */
@@ -4382,25 +4383,12 @@
4382
4383
  WMJSMap.prototype.makeComponentId = function (id) {
4383
4384
  var availableId = "WebMapJSMapNo_" + WebMapJSMapNo;
4384
4385
 
4385
- if (!this.mainElement.id) {
4386
- for (var testDestroyed in WebMapJSMapInstanceIds) {
4387
- if (WebMapJSMapInstanceIds[testDestroyed] === false) {
4388
- availableId = testDestroyed;
4389
- this.hasGeneratedId = true;
4390
- break;
4391
- }
4392
- }
4393
-
4394
- this.mainElement.id = availableId;
4395
- WebMapJSMapInstanceIds[this.mainElement.id] = true;
4396
- }
4397
-
4398
- if (this.hasGeneratedId === false) {
4399
- this.hasGeneratedId = true;
4386
+ if (this.internalMapId === '') {
4387
+ this.internalMapId = availableId;
4400
4388
  WebMapJSMapNo += 1;
4401
4389
  }
4402
4390
 
4403
- return this.mainElement.id + "_" + id;
4391
+ return this.internalMapId + "_" + id;
4404
4392
  };
4405
4393
 
4406
4394
  WMJSMap.prototype.setMessage = function (message) {
@@ -4843,8 +4831,7 @@
4843
4831
  this.bbox.bottom = -90;
4844
4832
  this.bbox.right = 180;
4845
4833
  this.bbox.top = 90;
4846
- this.srs = 'EPSG:4326';
4847
- this.setSize(this.mainElement.clientWidth, this.mainElement.clientHeight); // IMAGE buffer
4834
+ this.srs = 'EPSG:4326'; // IMAGE buffer
4848
4835
 
4849
4836
  this.divBuffer = new WMCanvasBuffer(this.callBack, getMapImageStore, this.getWidth(), this.getHeight(), {
4850
4837
  beforecanvasstartdraw: this._adagucBeforeDraw,
@@ -4858,7 +4845,7 @@
4858
4845
  if (imageEventType === exports.WMImageEventType.Loaded) {
4859
4846
  _this.draw('legendImageStore loaded');
4860
4847
  }
4861
- }, this.mainElement.id);
4848
+ }, this.internalMapId);
4862
4849
  this.callBack.addToCallback('display', this.display, true);
4863
4850
  this.callBack.addToCallback('draw', function () {
4864
4851
  debug(exports.DebugType.Log, 'draw event triggered externally, skipping');
@@ -4867,13 +4854,13 @@
4867
4854
  if (imageEventType === exports.WMImageEventType.Loaded) {
4868
4855
  _this.draw('bgMapImageStore loaded');
4869
4856
  }
4870
- }, this.mainElement.id);
4857
+ }, this.internalMapId);
4871
4858
 
4872
4859
  this._updateBoundingBox(this.bbox);
4873
4860
 
4874
4861
  this.wmAnimate = new WMJSAnimate(this);
4875
4862
  this.wmTileRenderer = new WMTileRenderer();
4876
- this.initialized = 1;
4863
+ this.initialized = true;
4877
4864
  };
4878
4865
 
4879
4866
  WMJSMap.prototype.rebuildMapDimensions = function () {
@@ -5239,9 +5226,9 @@
5239
5226
  WMJSMap.prototype.setSize = function (w, h) {
5240
5227
  var _this = this;
5241
5228
 
5242
- debug(exports.DebugType.Log, 'setSize', w, h);
5229
+ debug(exports.DebugType.Log, 'setSize', w, h, this.initialized);
5243
5230
 
5244
- if (w < 4 || h < 4) {
5231
+ if (w < 4 || h < 4 || this.initialized === false) {
5245
5232
  return;
5246
5233
  }
5247
5234
 
@@ -5748,6 +5735,7 @@
5748
5735
  };
5749
5736
 
5750
5737
  WMJSMap.prototype.destroy = function () {
5738
+ if (!this.initialized) return;
5751
5739
  this.stopAnimating();
5752
5740
 
5753
5741
  for (var i = this.layers.length - 1; i >= 0; i -= 1) {
@@ -5756,11 +5744,24 @@
5756
5744
 
5757
5745
  this.detachEvents();
5758
5746
  this.callBack.destroy();
5759
- getMapImageStore.removeEventCallback(this.mainElement.id);
5760
- bgMapImageStore.removeEventCallback(this.mainElement.id);
5761
- getLegendImageStore().removeEventCallback(this.mainElement.id);
5762
- WebMapJSMapInstanceIds[this.mainElement.id] = false;
5747
+ this.callBack = null;
5748
+ getMapImageStore.removeEventCallback(this.internalMapId);
5749
+ bgMapImageStore.removeEventCallback(this.internalMapId);
5750
+ getLegendImageStore().removeEventCallback(this.internalMapId);
5751
+ this.internalMapId = '';
5752
+ this.mainElement.removeChild(this.baseDiv);
5753
+ this.baseDiv.innerHTML = '';
5754
+ this.divZoomBox.innerHTML = '';
5755
+ this.divBoundingBox.innerHTML = '';
5756
+ this.divDimInfo.innerHTML = '';
5757
+ this.loadingDiv.innerHTML = '';
5758
+ this.baseDiv = undefined;
5759
+ this.divZoomBox = undefined;
5760
+ this.divBoundingBox = undefined;
5761
+ this.divDimInfo = undefined;
5762
+ this.loadingDiv = undefined;
5763
5763
  this.isDestroyed = true;
5764
+ this.initialized = false;
5764
5765
  };
5765
5766
 
5766
5767
  WMJSMap.prototype.detachEvents = function () {
@@ -6746,7 +6747,8 @@
6746
6747
  };
6747
6748
 
6748
6749
  WMJSMap.prototype.removeListener = function (name, f) {
6749
- return this.callBack.removeEvents(name, f);
6750
+ if (this.isDestroyed) return;
6751
+ this.callBack.removeEvents(name, f);
6750
6752
  };
6751
6753
 
6752
6754
  WMJSMap.prototype.getListener = function () {
@@ -7662,7 +7664,7 @@
7662
7664
  if (layers[j].Name) {
7663
7665
  nodeObject = {
7664
7666
  name: layers[j].Name.value,
7665
- text: layers[j].Title.value,
7667
+ title: layers[j].Title.value,
7666
7668
  leaf: isleaf,
7667
7669
  path: path,
7668
7670
  keywords: toArray(layers[j].KeywordList && layers[j].KeywordList.Keyword).map(function (keywords) {
@@ -7676,7 +7678,7 @@
7676
7678
  } else {
7677
7679
  var nodeText = isNull(layers[j].Title) ? 'Layer' : layers[j].Title.value;
7678
7680
  nodeObject = {
7679
- text: nodeText,
7681
+ title: nodeText,
7680
7682
  leaf: isleaf,
7681
7683
  styles: []
7682
7684
  };
@@ -7691,7 +7693,7 @@
7691
7693
  } // Sort nodes alphabetically.
7692
7694
 
7693
7695
 
7694
- sortByKey(rootNode, 'text');
7696
+ sortByKey(rootNode, 'title');
7695
7697
  };
7696
7698
  var generatedServiceIds = 0;
7697
7699
 
@@ -7993,7 +7995,7 @@
7993
7995
  leaf: false,
7994
7996
  expanded: true,
7995
7997
  children: [],
7996
- text: '',
7998
+ title: '',
7997
7999
  keywords: [],
7998
8000
  "abstract": ''
7999
8001
  };
@@ -8010,9 +8012,9 @@
8010
8012
  var WMSLayers = toArray(rootLayer.Layer);
8011
8013
 
8012
8014
  try {
8013
- nodeStructure.text = rootLayer.Title.value;
8015
+ nodeStructure.title = rootLayer.Title.value;
8014
8016
  } catch (e) {
8015
- nodeStructure.text = I18n.unnamed_service.text;
8017
+ nodeStructure.title = I18n.unnamed_service.text;
8016
8018
  }
8017
8019
 
8018
8020
  recursivelyFindLayer(WMSLayers, nodeStructure.children, []);
@@ -59,14 +59,15 @@ export default class WMJSMap {
59
59
  private loadedBBOX;
60
60
  drawnBBOX: WMBBOX;
61
61
  private divBuffer;
62
- private isDestroyed;
63
62
  private mapHeader;
64
63
  private currentCursor;
65
64
  private mapIsActivated;
66
65
  private isMapHeaderEnabled;
67
66
  private showScaleBarInMap;
68
67
  private callBack;
69
- private initialized;
68
+ initialized: boolean;
69
+ isDestroyed: boolean;
70
+ private internalMapId;
70
71
  private suspendDrawing;
71
72
  private activeLayer;
72
73
  private MaxUndos;
@@ -18,7 +18,7 @@ export declare const WMJSGetCapabilities: (service: string, succes: (param: any)
18
18
  headers?: any;
19
19
  }, disableCache?: boolean) => void;
20
20
  interface NodeObject {
21
- text: string;
21
+ title: string;
22
22
  leaf: boolean;
23
23
  name?: string;
24
24
  path?: string[];
@@ -1,6 +1,7 @@
1
1
  import type WMJSDimension from './WMJSDimension';
2
2
  import type WMLayer from './WMLayer';
3
3
  import type { DateInterval } from './WMTime';
4
+ import { Bbox } from './WMBBOX';
4
5
  export declare type WMPosition = {
5
6
  x: number;
6
7
  y: number;
@@ -30,6 +31,7 @@ export declare type Dimension = {
30
31
  timeInterval?: DateInterval;
31
32
  synced?: boolean;
32
33
  values?: string;
34
+ unitSymbol?: string;
33
35
  };
34
36
  export interface Style {
35
37
  title: string;
@@ -50,13 +52,67 @@ export declare type WMLayerType = {
50
52
  title?: string;
51
53
  headers?: Headers[];
52
54
  };
55
+ export interface CoordinateReferenceSystem {
56
+ name?: string;
57
+ bbox?: Bbox;
58
+ }
59
+ export interface LayerProps {
60
+ name: string | null;
61
+ leaf: boolean;
62
+ path: string[];
63
+ title: string;
64
+ abstract?: string;
65
+ keywords?: string[];
66
+ styles?: Style[];
67
+ dimensions?: Dimension[];
68
+ geographicBoundingBox?: GeographicBoundingBox | undefined;
69
+ queryable?: boolean;
70
+ crs?: CoordinateReferenceSystem[];
71
+ }
72
+ /**
73
+ * Represents the layers as advertised in the WMS GetCapabilities document
74
+ */
75
+ export interface LayerTree extends LayerProps {
76
+ children: LayerTree[];
77
+ }
78
+ export interface WMSBoundingBox {
79
+ attr: {
80
+ SRS?: string;
81
+ CRS?: string;
82
+ maxy: string;
83
+ miny: string;
84
+ maxx: string;
85
+ minx: string;
86
+ };
87
+ }
53
88
  /**
54
89
  * This interface is for reading from the WMS GetCapabilties document, which can have different structures for V1.1.1 and V1.3.0
55
90
  */
56
91
  export interface WMSLayerFromGetCapabilities {
92
+ attr: {
93
+ queryable: string;
94
+ opaque: string;
95
+ cascaded: string;
96
+ };
97
+ Name: {
98
+ attr: any;
99
+ value: string;
100
+ };
101
+ Title: {
102
+ attr: any;
103
+ value: string;
104
+ };
57
105
  Dimension: unknown;
58
106
  Style: unknown;
59
107
  Extent: unknown;
108
+ ScaleHint: unknown;
109
+ Abstract: {
110
+ value: string;
111
+ };
112
+ KeywordList: {
113
+ Keyword: unknown;
114
+ };
115
+ Layer: WMSLayerFromGetCapabilities | WMSLayerFromGetCapabilities[];
60
116
  EX_GeographicBoundingBox?: {
61
117
  northBoundLatitude: any;
62
118
  southBoundLatitude: any;
@@ -65,10 +121,14 @@ export interface WMSLayerFromGetCapabilities {
65
121
  };
66
122
  LatLonBoundingBox?: {
67
123
  attr: {
68
- maxy: any;
69
- miny: any;
70
- maxx: any;
71
- minx: any;
124
+ maxy: string;
125
+ miny: string;
126
+ maxx: string;
127
+ minx: string;
72
128
  };
73
129
  };
130
+ BoundingBox?: WMSBoundingBox[];
131
+ SRS?: {
132
+ value: string;
133
+ }[];
74
134
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeoweb/webmap",
3
- "version": "4.7.1",
3
+ "version": "4.9.1",
4
4
  "description": "GeoWeb webmap library for the opengeoweb project",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {