@loaders.gl/wms 3.4.13 → 3.4.15
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/dist.min.js +0 -7
- package/dist/es5/bundle.js +1 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/csw-capabilities-loader.js +5 -26
- package/dist/es5/csw-capabilities-loader.js.map +1 -1
- package/dist/es5/csw-domain-loader.js +5 -26
- package/dist/es5/csw-domain-loader.js.map +1 -1
- package/dist/es5/csw-records-loader.js +4 -25
- package/dist/es5/csw-records-loader.js.map +1 -1
- package/dist/es5/gml-loader.js +5 -26
- package/dist/es5/gml-loader.js.map +1 -1
- package/dist/es5/index.js +16 -16
- package/dist/es5/lerc-loader.js +10 -47
- package/dist/es5/lerc-loader.js.map +1 -1
- package/dist/es5/lib/create-image-source.js +8 -19
- package/dist/es5/lib/create-image-source.js.map +1 -1
- package/dist/es5/lib/parsers/csw/parse-csw-capabilities.js +7 -9
- package/dist/es5/lib/parsers/csw/parse-csw-capabilities.js.map +1 -1
- package/dist/es5/lib/parsers/csw/parse-csw-domain.js +11 -25
- package/dist/es5/lib/parsers/csw/parse-csw-domain.js.map +1 -1
- package/dist/es5/lib/parsers/csw/parse-csw-records.js +21 -47
- package/dist/es5/lib/parsers/csw/parse-csw-records.js.map +1 -1
- package/dist/es5/lib/parsers/csw/parse-exception-report.js +2 -2
- package/dist/es5/lib/parsers/csw/parse-exception-report.js.map +1 -1
- package/dist/es5/lib/parsers/gml/deep-strict-equal.js +9 -11
- package/dist/es5/lib/parsers/gml/deep-strict-equal.js.map +1 -1
- package/dist/es5/lib/parsers/gml/parse-gml.js +79 -130
- package/dist/es5/lib/parsers/gml/parse-gml.js.map +1 -1
- package/dist/es5/lib/parsers/wms/parse-wms-capabilities.js +69 -126
- package/dist/es5/lib/parsers/wms/parse-wms-capabilities.js.map +1 -1
- package/dist/es5/lib/parsers/wms/parse-wms-error.js +3 -3
- package/dist/es5/lib/parsers/wms/parse-wms-error.js.map +1 -1
- package/dist/es5/lib/parsers/wms/parse-wms-features.js +5 -7
- package/dist/es5/lib/parsers/wms/parse-wms-features.js.map +1 -1
- package/dist/es5/lib/parsers/wms/parse-wms-layer-description.js +1 -1
- package/dist/es5/lib/parsers/wms/parse-wms-layer-description.js.map +1 -1
- package/dist/es5/lib/parsers/xml/parse-xml-helpers.js +6 -10
- package/dist/es5/lib/parsers/xml/parse-xml-helpers.js.map +1 -1
- package/dist/es5/lib/services/arcgis/arcgis-image-service.js +48 -146
- package/dist/es5/lib/services/arcgis/arcgis-image-service.js.map +1 -1
- package/dist/es5/lib/services/arcgis/arcgis-server.js +26 -98
- package/dist/es5/lib/services/arcgis/arcgis-server.js.map +1 -1
- package/dist/es5/lib/services/generic/image-service.js +32 -103
- package/dist/es5/lib/services/generic/image-service.js.map +1 -1
- package/dist/es5/lib/services/ogc/csw-service.js +134 -334
- package/dist/es5/lib/services/ogc/csw-service.js.map +1 -1
- package/dist/es5/lib/services/ogc/wms-service.js +218 -494
- package/dist/es5/lib/services/ogc/wms-service.js.map +1 -1
- package/dist/es5/lib/sources/data-source.js +28 -43
- package/dist/es5/lib/sources/data-source.js.map +1 -1
- package/dist/es5/lib/sources/image-source.js +1 -17
- package/dist/es5/lib/sources/image-source.js.map +1 -1
- package/dist/es5/lib/sources/tile-source.js +1 -17
- package/dist/es5/lib/sources/tile-source.js.map +1 -1
- package/dist/es5/lib/sources/utils/utils.js +11 -19
- package/dist/es5/lib/sources/utils/utils.js.map +1 -1
- package/dist/es5/wip/arcgis-feature-service.js +16 -23
- package/dist/es5/wip/arcgis-feature-service.js.map +1 -1
- package/dist/es5/wip/lib/wcs/parse-wcs-capabilities.js +7 -9
- package/dist/es5/wip/lib/wcs/parse-wcs-capabilities.js.map +1 -1
- package/dist/es5/wip/lib/wfs/parse-wfs-capabilities.js +7 -9
- package/dist/es5/wip/lib/wfs/parse-wfs-capabilities.js.map +1 -1
- package/dist/es5/wip/lib/wmts/parse-wmts-capabilities.js +7 -9
- package/dist/es5/wip/lib/wmts/parse-wmts-capabilities.js.map +1 -1
- package/dist/es5/wip/wcs-capabilities-loader.js +5 -26
- package/dist/es5/wip/wcs-capabilities-loader.js.map +1 -1
- package/dist/es5/wip/wfs-capabilities-loader.js +5 -26
- package/dist/es5/wip/wfs-capabilities-loader.js.map +1 -1
- package/dist/es5/wip/wms-feature-info-loader.js +6 -29
- package/dist/es5/wip/wms-feature-info-loader.js.map +1 -1
- package/dist/es5/wip/wms-layer-description-loader.js +6 -29
- package/dist/es5/wip/wms-layer-description-loader.js.map +1 -1
- package/dist/es5/wip/wmts-capabilities-loader.js +5 -26
- package/dist/es5/wip/wmts-capabilities-loader.js.map +1 -1
- package/dist/es5/wms-capabilities-loader.js +5 -26
- package/dist/es5/wms-capabilities-loader.js.map +1 -1
- package/dist/es5/wms-error-loader.js +13 -36
- package/dist/es5/wms-error-loader.js.map +1 -1
- package/dist/esm/csw-capabilities-loader.js +1 -1
- package/dist/esm/csw-domain-loader.js +1 -1
- package/dist/esm/csw-records-loader.js +1 -1
- package/dist/esm/gml-loader.js +1 -1
- package/dist/esm/lerc-loader.js +1 -1
- package/dist/esm/lib/services/ogc/wms-service.js +0 -1
- package/dist/esm/lib/services/ogc/wms-service.js.map +1 -1
- package/dist/esm/wip/wcs-capabilities-loader.js +1 -1
- package/dist/esm/wip/wfs-capabilities-loader.js +1 -1
- package/dist/esm/wip/wmts-capabilities-loader.js +1 -1
- package/dist/esm/wms-capabilities-loader.js +1 -1
- package/dist/esm/wms-error-loader.js +1 -1
- package/dist/lib/services/ogc/wms-service.d.ts +0 -75
- package/dist/lib/services/ogc/wms-service.d.ts.map +1 -1
- package/package.json +6 -6
- package/src/lib/services/ogc/wms-service.ts +0 -9
|
@@ -1,33 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
6
|
exports.parseWMSCapabilities = parseWMSCapabilities;
|
|
8
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
7
|
var _xml = require("@loaders.gl/xml");
|
|
11
8
|
var _parseXmlHelpers = require("../xml/parse-xml-helpers");
|
|
12
|
-
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, 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 normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
13
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
14
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
15
9
|
function parseWMSCapabilities(xmlText, options) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
10
|
+
const parsedXML = _xml.XMLLoader.parseTextSync(xmlText, options);
|
|
11
|
+
const xmlCapabilities = parsedXML.WMT_MS_Capabilities || parsedXML.WMS_Capabilities || parsedXML;
|
|
12
|
+
const capabilities = extractCapabilities(xmlCapabilities);
|
|
19
13
|
if (options !== null && options !== void 0 && options.inheritedLayerProps) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
try {
|
|
23
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
24
|
-
var layer = _step.value;
|
|
25
|
-
addInheritedLayerProps(layer, null);
|
|
26
|
-
}
|
|
27
|
-
} catch (err) {
|
|
28
|
-
_iterator.e(err);
|
|
29
|
-
} finally {
|
|
30
|
-
_iterator.f();
|
|
14
|
+
for (const layer of capabilities.layers) {
|
|
15
|
+
addInheritedLayerProps(layer, null);
|
|
31
16
|
}
|
|
32
17
|
}
|
|
33
18
|
if (options !== null && options !== void 0 && options.includeRawData || options !== null && options !== void 0 && options.raw) {
|
|
@@ -40,7 +25,7 @@ function parseWMSCapabilities(xmlText, options) {
|
|
|
40
25
|
}
|
|
41
26
|
function extractCapabilities(xml) {
|
|
42
27
|
var _xml$Service, _xml$Service2, _xml$Service3, _xml$Service4, _xml$Service5, _xml$Service6, _xml$Service6$Keyword, _xml$Service7, _xml$Service8, _xml$Service9, _xml$Service10, _xml$Service11, _xml$Service12, _xml$Service13, _xml$Capability, _xml$Capability2;
|
|
43
|
-
|
|
28
|
+
const capabilities = {
|
|
44
29
|
version: String(xml.version || ''),
|
|
45
30
|
name: String(((_xml$Service = xml.Service) === null || _xml$Service === void 0 ? void 0 : _xml$Service.Name) || 'unnamed'),
|
|
46
31
|
title: (_xml$Service2 = xml.Service) !== null && _xml$Service2 !== void 0 && _xml$Service2.Title ? String((_xml$Service3 = xml.Service) === null || _xml$Service3 === void 0 ? void 0 : _xml$Service3.Title) : undefined,
|
|
@@ -55,23 +40,11 @@ function extractCapabilities(xml) {
|
|
|
55
40
|
requests: extractRequests((_xml$Capability = xml.Capability) === null || _xml$Capability === void 0 ? void 0 : _xml$Capability.Request),
|
|
56
41
|
exceptions: extractExceptions(xml.Exception)
|
|
57
42
|
};
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
try {
|
|
62
|
-
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
63
|
-
var xmlSubLayer = _step2.value;
|
|
64
|
-
capabilities.layers.push(extractLayer(xmlSubLayer));
|
|
65
|
-
}
|
|
66
|
-
} catch (err) {
|
|
67
|
-
_iterator2.e(err);
|
|
68
|
-
} finally {
|
|
69
|
-
_iterator2.f();
|
|
43
|
+
const xmlLayers = (0, _parseXmlHelpers.getXMLArray)((_xml$Capability2 = xml.Capability) === null || _xml$Capability2 === void 0 ? void 0 : _xml$Capability2.Layer);
|
|
44
|
+
for (const xmlSubLayer of xmlLayers) {
|
|
45
|
+
capabilities.layers.push(extractLayer(xmlSubLayer));
|
|
70
46
|
}
|
|
71
|
-
for (
|
|
72
|
-
var _Object$entries$_i = (0, _slicedToArray2.default)(_Object$entries[_i], 2),
|
|
73
|
-
key = _Object$entries$_i[0],
|
|
74
|
-
value = _Object$entries$_i[1];
|
|
47
|
+
for (const [key, value] of Object.entries(capabilities)) {
|
|
75
48
|
if (value === undefined) {
|
|
76
49
|
delete capabilities[key];
|
|
77
50
|
}
|
|
@@ -79,28 +52,17 @@ function extractCapabilities(xml) {
|
|
|
79
52
|
return capabilities;
|
|
80
53
|
}
|
|
81
54
|
function extractRequests(xmlRequests) {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
name = _step3$value[0],
|
|
89
|
-
xmlRequest = _step3$value[1];
|
|
90
|
-
var mimeTypes = (0, _parseXmlHelpers.getXMLStringArray)(xmlRequest === null || xmlRequest === void 0 ? void 0 : xmlRequest.Format);
|
|
91
|
-
requests[name] = {
|
|
92
|
-
mimeTypes: mimeTypes
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
} catch (err) {
|
|
96
|
-
_iterator3.e(err);
|
|
97
|
-
} finally {
|
|
98
|
-
_iterator3.f();
|
|
55
|
+
const requests = {};
|
|
56
|
+
for (const [name, xmlRequest] of Object.entries(xmlRequests || {})) {
|
|
57
|
+
const mimeTypes = (0, _parseXmlHelpers.getXMLStringArray)(xmlRequest === null || xmlRequest === void 0 ? void 0 : xmlRequest.Format);
|
|
58
|
+
requests[name] = {
|
|
59
|
+
mimeTypes
|
|
60
|
+
};
|
|
99
61
|
}
|
|
100
62
|
return requests;
|
|
101
63
|
}
|
|
102
64
|
function extractExceptions(xmlException) {
|
|
103
|
-
|
|
65
|
+
const xmlExceptionFormats = (0, _parseXmlHelpers.getXMLArray)(xmlException === null || xmlException === void 0 ? void 0 : xmlException.Format);
|
|
104
66
|
if (xmlExceptionFormats.length > 0) {
|
|
105
67
|
return {
|
|
106
68
|
mimeTypes: (0, _parseXmlHelpers.getXMLStringArray)(xmlException)
|
|
@@ -110,19 +72,17 @@ function extractExceptions(xmlException) {
|
|
|
110
72
|
}
|
|
111
73
|
function extractLayer(xmlLayer) {
|
|
112
74
|
var _xmlLayer$KeywordList;
|
|
113
|
-
|
|
75
|
+
const layer = {
|
|
114
76
|
title: String((xmlLayer === null || xmlLayer === void 0 ? void 0 : xmlLayer.Title) || ''),
|
|
115
77
|
name: (xmlLayer === null || xmlLayer === void 0 ? void 0 : xmlLayer.Name) && String(xmlLayer === null || xmlLayer === void 0 ? void 0 : xmlLayer.Name),
|
|
116
78
|
abstract: (xmlLayer === null || xmlLayer === void 0 ? void 0 : xmlLayer.Name) && String(xmlLayer === null || xmlLayer === void 0 ? void 0 : xmlLayer.Abstract),
|
|
117
79
|
keywords: (0, _parseXmlHelpers.getXMLStringArray)((_xmlLayer$KeywordList = xmlLayer.KeywordList) === null || _xmlLayer$KeywordList === void 0 ? void 0 : _xmlLayer$KeywordList.Keyword)
|
|
118
80
|
};
|
|
119
|
-
|
|
120
|
-
if (crs && Array.isArray(crs) && crs.every(
|
|
121
|
-
return typeof _ === 'string';
|
|
122
|
-
})) {
|
|
81
|
+
const crs = (xmlLayer === null || xmlLayer === void 0 ? void 0 : xmlLayer.CRS) || (xmlLayer === null || xmlLayer === void 0 ? void 0 : xmlLayer.SRS);
|
|
82
|
+
if (crs && Array.isArray(crs) && crs.every(_ => typeof _ === 'string')) {
|
|
123
83
|
layer.crs = crs;
|
|
124
84
|
}
|
|
125
|
-
|
|
85
|
+
let geographicBoundingBox = (xmlLayer === null || xmlLayer === void 0 ? void 0 : xmlLayer.EX_GeographicBoundingBox) && extractEXBoundingBox(xmlLayer === null || xmlLayer === void 0 ? void 0 : xmlLayer.EX_GeographicBoundingBox);
|
|
126
86
|
if (geographicBoundingBox) {
|
|
127
87
|
layer.geographicBoundingBox = geographicBoundingBox;
|
|
128
88
|
}
|
|
@@ -130,14 +90,12 @@ function extractLayer(xmlLayer) {
|
|
|
130
90
|
if (geographicBoundingBox) {
|
|
131
91
|
layer.geographicBoundingBox = geographicBoundingBox;
|
|
132
92
|
}
|
|
133
|
-
|
|
93
|
+
const boundingBoxes = (xmlLayer === null || xmlLayer === void 0 ? void 0 : xmlLayer.BoundingBox) && extractWMSBoundingBoxes(xmlLayer === null || xmlLayer === void 0 ? void 0 : xmlLayer.BoundingBox);
|
|
134
94
|
if (boundingBoxes && boundingBoxes.length > 0) {
|
|
135
95
|
layer.boundingBoxes = boundingBoxes;
|
|
136
96
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
return extractDimension(xml);
|
|
140
|
-
});
|
|
97
|
+
const xmlDimensions = (0, _parseXmlHelpers.getXMLArray)(xmlLayer === null || xmlLayer === void 0 ? void 0 : xmlLayer.Dimension);
|
|
98
|
+
const dimensions = xmlDimensions.map(xml => extractDimension(xml));
|
|
141
99
|
if (dimensions.length) {
|
|
142
100
|
layer.dimensions = dimensions;
|
|
143
101
|
}
|
|
@@ -150,27 +108,15 @@ function extractLayer(xmlLayer) {
|
|
|
150
108
|
if (xmlLayer !== null && xmlLayer !== void 0 && xmlLayer.queryable) {
|
|
151
109
|
layer.queryable = (0, _parseXmlHelpers.getXMLBoolean)(xmlLayer === null || xmlLayer === void 0 ? void 0 : xmlLayer.queryable);
|
|
152
110
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
try {
|
|
158
|
-
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
159
|
-
var xmlSubLayer = _step4.value;
|
|
160
|
-
layers.push(extractLayer(xmlSubLayer));
|
|
161
|
-
}
|
|
162
|
-
} catch (err) {
|
|
163
|
-
_iterator4.e(err);
|
|
164
|
-
} finally {
|
|
165
|
-
_iterator4.f();
|
|
111
|
+
const xmlLayers = (0, _parseXmlHelpers.getXMLArray)(xmlLayer === null || xmlLayer === void 0 ? void 0 : xmlLayer.Layer);
|
|
112
|
+
const layers = [];
|
|
113
|
+
for (const xmlSubLayer of xmlLayers) {
|
|
114
|
+
layers.push(extractLayer(xmlSubLayer));
|
|
166
115
|
}
|
|
167
116
|
if (layers.length > 0) {
|
|
168
117
|
layer.layers = layers;
|
|
169
118
|
}
|
|
170
|
-
for (
|
|
171
|
-
var _Object$entries2$_i = (0, _slicedToArray2.default)(_Object$entries2[_i2], 2),
|
|
172
|
-
key = _Object$entries2$_i[0],
|
|
173
|
-
value = _Object$entries2$_i[1];
|
|
119
|
+
for (const [key, value] of Object.entries(layer)) {
|
|
174
120
|
if (value === undefined) {
|
|
175
121
|
delete layer[key];
|
|
176
122
|
}
|
|
@@ -178,35 +124,39 @@ function extractLayer(xmlLayer) {
|
|
|
178
124
|
return layer;
|
|
179
125
|
}
|
|
180
126
|
function extractEXBoundingBox(xmlBoundingBox) {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
127
|
+
const {
|
|
128
|
+
westBoundLongitude: w,
|
|
129
|
+
northBoundLatitude: n,
|
|
130
|
+
eastBoundLongitude: e,
|
|
131
|
+
southBoundLatitude: s
|
|
132
|
+
} = xmlBoundingBox;
|
|
185
133
|
return [[w, s], [e, n]];
|
|
186
134
|
}
|
|
187
135
|
function extractLatLonBoundingBox(xmlBoundingBox) {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
136
|
+
const {
|
|
137
|
+
minx,
|
|
138
|
+
miny,
|
|
139
|
+
maxx,
|
|
140
|
+
maxy
|
|
141
|
+
} = xmlBoundingBox;
|
|
192
142
|
return [[minx, miny], [maxx, maxy]];
|
|
193
143
|
}
|
|
194
144
|
function extractWMSBoundingBoxes(xmlBoundingBoxes) {
|
|
195
|
-
|
|
196
|
-
return xmlBoxes.map(
|
|
197
|
-
return extractWMSBoundingBox(xmlBox);
|
|
198
|
-
});
|
|
145
|
+
const xmlBoxes = (0, _parseXmlHelpers.getXMLArray)(xmlBoundingBoxes);
|
|
146
|
+
return xmlBoxes.map(xmlBox => extractWMSBoundingBox(xmlBox));
|
|
199
147
|
}
|
|
200
148
|
function extractWMSBoundingBox(xmlBoundingBox) {
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
149
|
+
const {
|
|
150
|
+
CRS,
|
|
151
|
+
SRS,
|
|
152
|
+
minx,
|
|
153
|
+
miny,
|
|
154
|
+
maxx,
|
|
155
|
+
maxy,
|
|
156
|
+
resx,
|
|
157
|
+
resy
|
|
158
|
+
} = xmlBoundingBox;
|
|
159
|
+
const boundingBox = {
|
|
210
160
|
crs: CRS || SRS,
|
|
211
161
|
boundingBox: [[(0, _parseXmlHelpers.getXMLFloat)(minx), (0, _parseXmlHelpers.getXMLFloat)(miny)], [(0, _parseXmlHelpers.getXMLFloat)(maxx), (0, _parseXmlHelpers.getXMLFloat)(maxy)]]
|
|
212
162
|
};
|
|
@@ -219,13 +169,15 @@ function extractWMSBoundingBox(xmlBoundingBox) {
|
|
|
219
169
|
return boundingBox;
|
|
220
170
|
}
|
|
221
171
|
function extractDimension(xmlDimension) {
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
172
|
+
const {
|
|
173
|
+
name,
|
|
174
|
+
units,
|
|
175
|
+
value: extent
|
|
176
|
+
} = xmlDimension;
|
|
177
|
+
const dimension = {
|
|
178
|
+
name,
|
|
179
|
+
units,
|
|
180
|
+
extent
|
|
229
181
|
};
|
|
230
182
|
if (xmlDimension.unitSymbol) {
|
|
231
183
|
dimension.unitSymbol = xmlDimension.unitSymbol;
|
|
@@ -246,28 +198,19 @@ function extractDimension(xmlDimension) {
|
|
|
246
198
|
}
|
|
247
199
|
function addInheritedLayerProps(layer, parent) {
|
|
248
200
|
if (parent !== null && parent !== void 0 && parent.geographicBoundingBox && !layer.geographicBoundingBox) {
|
|
249
|
-
layer.geographicBoundingBox =
|
|
201
|
+
layer.geographicBoundingBox = [...parent.geographicBoundingBox];
|
|
250
202
|
}
|
|
251
203
|
if (parent !== null && parent !== void 0 && parent.crs && !layer.crs) {
|
|
252
|
-
layer.crs =
|
|
204
|
+
layer.crs = [...parent.crs];
|
|
253
205
|
}
|
|
254
206
|
if (parent !== null && parent !== void 0 && parent.boundingBoxes && !layer.boundingBoxes) {
|
|
255
|
-
layer.boundingBoxes =
|
|
207
|
+
layer.boundingBoxes = [...parent.boundingBoxes];
|
|
256
208
|
}
|
|
257
209
|
if (parent !== null && parent !== void 0 && parent.dimensions && !layer.dimensions) {
|
|
258
|
-
layer.dimensions =
|
|
210
|
+
layer.dimensions = [...parent.dimensions];
|
|
259
211
|
}
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
try {
|
|
263
|
-
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
264
|
-
var subLayer = _step5.value;
|
|
265
|
-
addInheritedLayerProps(subLayer, layer);
|
|
266
|
-
}
|
|
267
|
-
} catch (err) {
|
|
268
|
-
_iterator5.e(err);
|
|
269
|
-
} finally {
|
|
270
|
-
_iterator5.f();
|
|
212
|
+
for (const subLayer of layer.layers || []) {
|
|
213
|
+
addInheritedLayerProps(subLayer, layer);
|
|
271
214
|
}
|
|
272
215
|
}
|
|
273
216
|
//# sourceMappingURL=parse-wms-capabilities.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-wms-capabilities.js","names":["_xml","require","_parseXmlHelpers","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","parseWMSCapabilities","xmlText","options","parsedXML","XMLLoader","parseTextSync","xmlCapabilities","WMT_MS_Capabilities","WMS_Capabilities","capabilities","extractCapabilities","inheritedLayerProps","_iterator","layers","_step","layer","addInheritedLayerProps","includeRawData","raw","includeXMLText","xml","_xml$Service","_xml$Service2","_xml$Service3","_xml$Service4","_xml$Service5","_xml$Service6","_xml$Service6$Keyword","_xml$Service7","_xml$Service8","_xml$Service9","_xml$Service10","_xml$Service11","_xml$Service12","_xml$Service13","_xml$Capability","_xml$Capability2","version","String","Service","Name","title","Title","undefined","abstract","Abstract","keywords","getXMLStringArray","KeywordList","Keyword","fees","Fees","JSON","stringify","accessConstraints","AccessConstraints","layerLimit","getXMLInteger","LayerLimit","maxWidth","maxHeight","requests","extractRequests","Capability","Request","exceptions","extractExceptions","Exception","xmlLayers","getXMLArray","Layer","_iterator2","_step2","xmlSubLayer","push","extractLayer","_i","_Object$entries","entries","_Object$entries$_i","_slicedToArray2","default","key","xmlRequests","_iterator3","_step3","_step3$value","xmlRequest","mimeTypes","Format","xmlException","xmlExceptionFormats","xmlLayer","_xmlLayer$KeywordList","crs","CRS","SRS","every","_","geographicBoundingBox","EX_GeographicBoundingBox","extractEXBoundingBox","LatLonBoundingBox","extractLatLonBoundingBox","boundingBoxes","BoundingBox","extractWMSBoundingBoxes","xmlDimensions","Dimension","dimensions","map","extractDimension","opaque","getXMLBoolean","cascaded","queryable","_iterator4","_step4","_i2","_Object$entries2","_Object$entries2$_i","xmlBoundingBox","w","westBoundLongitude","northBoundLatitude","eastBoundLongitude","southBoundLatitude","minx","miny","maxx","maxy","xmlBoundingBoxes","xmlBoxes","xmlBox","extractWMSBoundingBox","resx","resy","boundingBox","getXMLFloat","xResolution","yResolution","xmlDimension","units","extent","dimension","unitSymbol","defaultValue","multipleValues","nearestValue","current","parent","_toConsumableArray2","_iterator5","_step5","subLayer"],"sources":["../../../../../src/lib/parsers/wms/parse-wms-capabilities.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {XMLLoader} from '@loaders.gl/xml';\nimport {\n getXMLArray,\n getXMLStringArray,\n getXMLInteger,\n getXMLFloat,\n getXMLBoolean\n} from '../xml/parse-xml-helpers';\n\n/** All capabilities of a WMS service - response to a WMS `GetCapabilities` data structure extracted from XML */\nexport type WMSCapabilities = {\n /** Version of the WMS service */\n version?: string; // '1.3.0' | '1.1.1' | '1.1.0' | '1.0.0'\n /** A short name for the service */\n name: string;\n /** A human readable name for the service */\n title?: string;\n /** A more extensive description of the service */\n abstract?: string;\n /** A set of keywords e.g. for searching services */\n keywords: string[];\n /** A field of unspecified format, if present describes any access constraints required to use the service. */\n accessConstraints?: string;\n /** A field of unspecified format, if present describes any fees associated with the use of the service */\n fees?: string;\n /** If present, the max number of layers that can be rendered by the service */\n layerLimit?: number;\n /** If present, the widest image that can be rendered by the service */\n maxWidth?: number;\n /** If present, the tallest image that can be rendered by the service */\n maxHeight?: number;\n /** Hierarchical list of layers. */\n layers: WMSLayer[];\n /** A map with information about supported WMS requests. If a record is present, the request is supported by the service */\n requests: Record<string, WMSRequest>;\n /** Information about any exceptions that the service will report (HTTP status != 2xx) */\n exceptions?: WMSExceptions;\n /** Only if `options.raw`: raw untyped JSON parsed from XML. Can include information not extracted in the typed response. */\n raw?: Record<string, unknown>;\n /** Only if `options.xml`, the unparsed XML string can be requested */\n xml?: string;\n};\n\n/**\n * Metadata about a layer\n * Layers inherit many properties from their parent layers, see description of individual props for details.\n * @see https://www.ogc.org/standard/wms/ 7.2.4.6\n */\nexport type WMSLayer = {\n /** The title is a human readable name. It is mandatory on each layer. Not inherited. */\n title: string;\n /** A layer is renderable if it has a name. A named parent layer will render all its sublayers. Not inherited. */\n name?: string;\n /** A narrative description of the map layer. */\n abstract?: string;\n /** A set of keywords e.g. for searching layers */\n keywords: string[];\n /** layer limits in unspecified CRS:84-like lng/lat, for quick access w/o CRS calculations. Defined or inherited. */\n geographicBoundingBox?: [min: [x: number, y: number], max: [x: number, y: number]];\n /** Supported CRS. Either defined or inherited. */\n crs?: string[];\n /** Bounding boxes in specific CRS:es */\n boundingBoxes?: WMSBoundingBox[];\n\n // minScale: number;\n // maxScale: number;\n // dimensions: ?? 7.2.4.6.10\n // MetadataURL\n // Attribution\n // Identifier and AuthorityURL\n // FeatureListURL\n // DataURL\n\n /** any extra dimension such as time */\n dimensions?: WMSDimension[];\n\n /** Whether queries can be performed on the layer */\n queryable?: boolean;\n /** `false` if layer has significant no-data areas that the client can display as transparent. */\n opaque?: boolean;\n /** WMS cascading allows server to expose layers coming from other WMS servers as if they were local layers */\n cascaded?: boolean;\n // noSubsets: boolean\n // fixedWith: number\n // fixedHeight: number\n\n /** A list of styles. @note not yet supported by WMSCapabilitiesLoader */\n styles?: unknown[];\n\n /** Sublayers - these inherit crs and boundingBox) if not overridden) */\n layers?: WMSLayer[];\n};\n\n/**\n * A bounding box specifies the coordinate range for data in the layer.\n * No data is available outside the bounding box.\n */\nexport type WMSBoundingBox = {\n /** CRS indicates the Layer CRS that applies to this bounding box. */\n crs: string;\n /** `[[w, s], [e, n]]`, indicates the limits of the bounding box using the axis units and order of the specified CRS. */\n boundingBox: [min: [x: number, y: number], max: [x: number, y: number]];\n /** Spatial horizontal resolution of data in same units as bounding box */\n xResolution?: number;\n /** Spatial vertical resolution of data in same units as bounding box */\n yResolution?: number;\n};\n\n/**\n * An optional dimension that can be queried using the `name=...` parameter\n * Note that layers that have at least one dimension without `default` value\n * become unrenderable unless the dimension value is supplied to GetMap requests.\n */\nexport type WMSDimension = {\n /** name of dimension, becomes a valid parameter key for this layer */\n name: string;\n /** Textual units for this dimensional axis */\n units: string;\n /** Unit symbol for this dimensional axis */\n unitSymbol?: string;\n /** Default value if no value is supplied. If dimension lacks defaultValue, requests fail if no value is supplied */\n defaultValue?: string;\n /** Can multiple values of the dimension be requested? */\n multipleValues?: boolean;\n /* Will nearest values will be substituted when out of range, if false exact values are required */\n nearestValue?: boolean;\n /** A special value \"current\" is supported, typically for time dimension */\n current?: boolean;\n /** Text content indicating available values for dimension */\n extent: string;\n};\n\n/** Metadata about a supported WMS request */\nexport type WMSRequest = {\n /** MIMEtypes that can be returned by this request. */\n mimeTypes: string[];\n};\n\nexport type WMSExceptions = {\n /** MIME types for exception response payloads. */\n mimeTypes: string[];\n};\n\nexport type ParseWMSCapabilitiesOptions = {\n /** Add inherited layer information to sub layers */\n inheritedLayerProps?: boolean;\n /** Include the \"raw\" JSON (parsed but untyped, unprocessed XML). May contain additional fields */\n includeRawData?: boolean;\n /** Include the original XML document text. May contain additional information. */\n includeXMLText?: boolean;\n /** @deprecated Use includeRawData` */\n raw?: boolean;\n // xml options are passed through to xml loader\n};\n\n/**\n * Parses a typed data structure from raw XML for `GetCapabilities` response\n * @note Error handlings is fairly weak\n */\nexport function parseWMSCapabilities(\n xmlText: string,\n options?: ParseWMSCapabilitiesOptions\n): WMSCapabilities {\n const parsedXML = XMLLoader.parseTextSync(xmlText, options);\n const xmlCapabilities: any =\n parsedXML.WMT_MS_Capabilities || parsedXML.WMS_Capabilities || parsedXML;\n const capabilities = extractCapabilities(xmlCapabilities);\n // In case the processed, normalized capabilities do not contain everything,\n // the user can get the parsed XML structure.\n if (options?.inheritedLayerProps) {\n // Traverse layers and inject missing props from parents\n for (const layer of capabilities.layers) {\n addInheritedLayerProps(layer, null);\n }\n // Not yet implemented\n }\n\n if (options?.includeRawData || options?.raw) {\n capabilities.raw = xmlCapabilities;\n }\n\n if (options?.includeXMLText) {\n capabilities.xml = xmlText;\n }\n\n return capabilities;\n}\n\n/** Extract typed capability data from XML */\nfunction extractCapabilities(xml: any): WMSCapabilities {\n const capabilities: WMSCapabilities = {\n version: String(xml.version || ''),\n name: String(xml.Service?.Name || 'unnamed'),\n title: xml.Service?.Title ? String(xml.Service?.Title) : undefined,\n abstract: xml.Service?.Abstract ? String(xml.Service?.Abstract) : undefined,\n keywords: getXMLStringArray(xml.Service?.KeywordList?.Keyword),\n fees: xml.Service?.Fees ? JSON.stringify(xml.Service?.Fees) : undefined,\n accessConstraints: xml.Service?.AccessConstraints\n ? JSON.stringify(xml.Service?.AccessConstraints)\n : undefined,\n layerLimit: getXMLInteger(xml.Service?.LayerLimit),\n maxWidth: getXMLInteger(xml.Service?.maxWidth),\n maxHeight: getXMLInteger(xml.Service?.maxHeight),\n layers: [],\n requests: extractRequests(xml.Capability?.Request),\n exceptions: extractExceptions(xml.Exception)\n // contact field is a mess of largely irrelevant information, put it last\n // contact: xml.Service?.Contact ? JSON.stringify(xml.Service?.Contact) : undefined,\n };\n\n // LAYERS\n const xmlLayers = getXMLArray(xml.Capability?.Layer);\n for (const xmlSubLayer of xmlLayers) {\n capabilities.layers.push(extractLayer(xmlSubLayer));\n }\n\n // Clean up object\n for (const [key, value] of Object.entries(capabilities)) {\n if (value === undefined) {\n delete capabilities[key];\n }\n }\n\n return capabilities;\n}\n\n/** Extract typed request metadata from XML requests field */\nfunction extractRequests(xmlRequests: any): Record<string, WMSRequest> {\n const requests: Record<string, WMSRequest> = {};\n for (const [name, xmlRequest] of Object.entries(xmlRequests || {}) as any) {\n const mimeTypes = getXMLStringArray(xmlRequest?.Format);\n requests[name] = {mimeTypes};\n }\n return requests;\n}\n\nfunction extractExceptions(xmlException: any): WMSExceptions | undefined {\n const xmlExceptionFormats = getXMLArray(xmlException?.Format);\n if (xmlExceptionFormats.length > 0) {\n return {\n mimeTypes: getXMLStringArray(xmlException)\n };\n }\n return undefined;\n}\n\n/** Extract request data */\n// eslint-disable-next-line complexity, max-statements\nfunction extractLayer(xmlLayer: any): WMSLayer {\n const layer: WMSLayer = {\n // All layers must have a title\n title: String(xmlLayer?.Title || ''),\n // Name is required only if renderable\n name: xmlLayer?.Name && String(xmlLayer?.Name),\n abstract: xmlLayer?.Name && String(xmlLayer?.Abstract),\n keywords: getXMLStringArray(xmlLayer.KeywordList?.Keyword)\n };\n\n // WMS 1.3.0 changes SRS to CRS\n const crs = xmlLayer?.CRS || xmlLayer?.SRS;\n if (crs && Array.isArray(crs) && crs.every((_) => typeof _ === 'string')) {\n layer.crs = crs;\n }\n\n // v1.3.0 extract simple geographic bounding box\n let geographicBoundingBox =\n xmlLayer?.EX_GeographicBoundingBox && extractEXBoundingBox(xmlLayer?.EX_GeographicBoundingBox);\n if (geographicBoundingBox) {\n layer.geographicBoundingBox = geographicBoundingBox;\n }\n\n // v1.1.1 extract simple geographic bounding box\n geographicBoundingBox =\n xmlLayer?.LatLonBoundingBox && extractLatLonBoundingBox(xmlLayer?.LatLonBoundingBox);\n if (geographicBoundingBox) {\n layer.geographicBoundingBox = geographicBoundingBox;\n }\n\n // Extract per-CRS bounding boxes\n const boundingBoxes = xmlLayer?.BoundingBox && extractWMSBoundingBoxes(xmlLayer?.BoundingBox);\n if (boundingBoxes && boundingBoxes.length > 0) {\n layer.boundingBoxes = boundingBoxes;\n }\n\n // Extract dimensions\n const xmlDimensions = getXMLArray(xmlLayer?.Dimension);\n const dimensions = xmlDimensions.map((xml) => extractDimension(xml));\n if (dimensions.length) {\n layer.dimensions = dimensions;\n }\n\n if (xmlLayer?.opaque) {\n layer.opaque = getXMLBoolean(xmlLayer?.opaque);\n }\n if (xmlLayer?.cascaded) {\n layer.cascaded = getXMLBoolean(xmlLayer?.cascaded);\n }\n if (xmlLayer?.queryable) {\n layer.queryable = getXMLBoolean(xmlLayer?.queryable);\n }\n\n // Single layer is not represented as array in XML\n const xmlLayers = getXMLArray(xmlLayer?.Layer);\n const layers: WMSLayer[] = [];\n\n for (const xmlSubLayer of xmlLayers) {\n layers.push(extractLayer(xmlSubLayer));\n }\n\n if (layers.length > 0) {\n layer.layers = layers;\n }\n\n // Clean up object\n for (const [key, value] of Object.entries(layer)) {\n if (value === undefined) {\n delete layer[key];\n }\n }\n\n return layer;\n}\n\n/** WMS 1.3.0 Loosely defined geospatial bounding box in unspecified CRS for quick content searches */\nfunction extractEXBoundingBox(xmlBoundingBox: any): [[number, number], [number, number]] {\n const {\n westBoundLongitude: w,\n northBoundLatitude: n,\n eastBoundLongitude: e,\n southBoundLatitude: s\n } = xmlBoundingBox;\n return [\n [w, s],\n [e, n]\n ];\n}\n\n/** WMS 1.1.1 Loosely defined geospatial bounding box in unspecified CRS for quick content searches */\nfunction extractLatLonBoundingBox(xmlBoundingBox: any): [[number, number], [number, number]] {\n const {minx, miny, maxx, maxy} = xmlBoundingBox;\n return [\n [minx, miny],\n [maxx, maxy]\n ];\n}\n\n/** Loosely defined geospatial bounding box in unspecified CRS for quick content searches */\nfunction extractWMSBoundingBoxes(xmlBoundingBoxes: any): WMSBoundingBox[] {\n const xmlBoxes = getXMLArray(xmlBoundingBoxes);\n return xmlBoxes.map((xmlBox) => extractWMSBoundingBox(xmlBox));\n}\n\n/** Loosely defined geospatial bounding box in unspecified CRS for quick content searches */\nfunction extractWMSBoundingBox(xmlBoundingBox: any): WMSBoundingBox {\n const {CRS, SRS, minx, miny, maxx, maxy, resx, resy} = xmlBoundingBox;\n const boundingBox: WMSBoundingBox = {\n // CRS in 1.3.0, SRS in 1.1.1\n crs: CRS || SRS,\n boundingBox: [\n [getXMLFloat(minx) as number, getXMLFloat(miny) as number],\n [getXMLFloat(maxx) as number, getXMLFloat(maxy) as number]\n ]\n };\n if (resx) {\n boundingBox.xResolution = resx;\n }\n if (resy) {\n boundingBox.yResolution = resy;\n }\n return boundingBox;\n}\n\n/**\n * Extracts optional WMS Dimension layer field\n * @param xmlDimension\n * @example <Dimension name=\"time\" units=\"ISO8601\" default=\"2018-01-01\" nearestValue=\"0\">2001-01-01/2018-01-01/P1Y</Dimension>\n * @see https://mapserver.org/ogc/wms_dimension.html\n */\nfunction extractDimension(xmlDimension: any): WMSDimension {\n const {name, units, value: extent} = xmlDimension;\n\n const dimension: WMSDimension = {name, units, extent};\n\n if (xmlDimension.unitSymbol) {\n dimension.unitSymbol = xmlDimension.unitSymbol;\n }\n if (xmlDimension.default) {\n dimension.defaultValue = xmlDimension.default;\n }\n if (xmlDimension.multipleValues) {\n dimension.multipleValues = getXMLBoolean(xmlDimension.multipleValues);\n }\n if (xmlDimension.nearestValue) {\n dimension.nearestValue = getXMLBoolean(xmlDimension.nearestValue);\n }\n if (xmlDimension.current) {\n dimension.current = getXMLBoolean(xmlDimension.current);\n }\n\n return dimension;\n}\n\n/** Traverse layers and inject missing props from parents */\n// eslint-disable-next-line complexity\nfunction addInheritedLayerProps(layer: WMSLayer, parent: WMSLayer | null): void {\n if (parent?.geographicBoundingBox && !layer.geographicBoundingBox) {\n layer.geographicBoundingBox = [...parent.geographicBoundingBox];\n }\n\n if (parent?.crs && !layer.crs) {\n layer.crs = [...parent.crs];\n }\n\n if (parent?.boundingBoxes && !layer.boundingBoxes) {\n layer.boundingBoxes = [...parent.boundingBoxes];\n }\n\n if (parent?.dimensions && !layer.dimensions) {\n layer.dimensions = [...parent.dimensions];\n }\n\n for (const subLayer of layer.layers || []) {\n addInheritedLayerProps(subLayer, layer);\n }\n}\n"],"mappings":";;;;;;;;;AAEA,IAAAA,IAAA,GAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAD,OAAA;AAMkC,SAAAE,2BAAAC,CAAA,EAAAC,cAAA,QAAAC,EAAA,UAAAC,MAAA,oBAAAH,CAAA,CAAAG,MAAA,CAAAC,QAAA,KAAAJ,CAAA,qBAAAE,EAAA,QAAAG,KAAA,CAAAC,OAAA,CAAAN,CAAA,MAAAE,EAAA,GAAAK,2BAAA,CAAAP,CAAA,MAAAC,cAAA,IAAAD,CAAA,WAAAA,CAAA,CAAAQ,MAAA,qBAAAN,EAAA,EAAAF,CAAA,GAAAE,EAAA,MAAAO,CAAA,UAAAC,CAAA,YAAAA,EAAA,eAAAC,CAAA,EAAAD,CAAA,EAAAE,CAAA,WAAAA,EAAA,QAAAH,CAAA,IAAAT,CAAA,CAAAQ,MAAA,WAAAK,IAAA,mBAAAA,IAAA,SAAAC,KAAA,EAAAd,CAAA,CAAAS,CAAA,UAAAM,CAAA,WAAAA,EAAAC,EAAA,UAAAA,EAAA,KAAAC,CAAA,EAAAP,CAAA,gBAAAQ,SAAA,iJAAAC,gBAAA,SAAAC,MAAA,UAAAC,GAAA,WAAAV,CAAA,WAAAA,EAAA,IAAAT,EAAA,GAAAA,EAAA,CAAAoB,IAAA,CAAAtB,CAAA,MAAAY,CAAA,WAAAA,EAAA,QAAAW,IAAA,GAAArB,EAAA,CAAAsB,IAAA,IAAAL,gBAAA,GAAAI,IAAA,CAAAV,IAAA,SAAAU,IAAA,KAAAR,CAAA,WAAAA,EAAAU,GAAA,IAAAL,MAAA,SAAAC,GAAA,GAAAI,GAAA,KAAAR,CAAA,WAAAA,EAAA,eAAAE,gBAAA,IAAAjB,EAAA,CAAAwB,MAAA,UAAAxB,EAAA,CAAAwB,MAAA,oBAAAN,MAAA,QAAAC,GAAA;AAAA,SAAAd,4BAAAP,CAAA,EAAA2B,MAAA,SAAA3B,CAAA,qBAAAA,CAAA,sBAAA4B,iBAAA,CAAA5B,CAAA,EAAA2B,MAAA,OAAAf,CAAA,GAAAiB,MAAA,CAAAC,SAAA,CAAAC,QAAA,CAAAT,IAAA,CAAAtB,CAAA,EAAAgC,KAAA,aAAApB,CAAA,iBAAAZ,CAAA,CAAAiC,WAAA,EAAArB,CAAA,GAAAZ,CAAA,CAAAiC,WAAA,CAAAC,IAAA,MAAAtB,CAAA,cAAAA,CAAA,mBAAAP,KAAA,CAAA8B,IAAA,CAAAnC,CAAA,OAAAY,CAAA,+DAAAwB,IAAA,CAAAxB,CAAA,UAAAgB,iBAAA,CAAA5B,CAAA,EAAA2B,MAAA;AAAA,SAAAC,kBAAAS,GAAA,EAAAC,GAAA,QAAAA,GAAA,YAAAA,GAAA,GAAAD,GAAA,CAAA7B,MAAA,EAAA8B,GAAA,GAAAD,GAAA,CAAA7B,MAAA,WAAAC,CAAA,MAAA8B,IAAA,OAAAlC,KAAA,CAAAiC,GAAA,GAAA7B,CAAA,GAAA6B,GAAA,EAAA7B,CAAA,IAAA8B,IAAA,CAAA9B,CAAA,IAAA4B,GAAA,CAAA5B,CAAA,UAAA8B,IAAA;AAwJ3B,SAASC,oBAAoBA,CAClCC,OAAe,EACfC,OAAqC,EACpB;EACjB,IAAMC,SAAS,GAAGC,cAAS,CAACC,aAAa,CAACJ,OAAO,EAAEC,OAAO,CAAC;EAC3D,IAAMI,eAAoB,GACxBH,SAAS,CAACI,mBAAmB,IAAIJ,SAAS,CAACK,gBAAgB,IAAIL,SAAS;EAC1E,IAAMM,YAAY,GAAGC,mBAAmB,CAACJ,eAAe,CAAC;EAGzD,IAAIJ,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAES,mBAAmB,EAAE;IAAA,IAAAC,SAAA,GAAArD,0BAAA,CAEZkD,YAAY,CAACI,MAAM;MAAAC,KAAA;IAAA;MAAvC,KAAAF,SAAA,CAAAzC,CAAA,MAAA2C,KAAA,GAAAF,SAAA,CAAAxC,CAAA,IAAAC,IAAA,GAAyC;QAAA,IAA9B0C,KAAK,GAAAD,KAAA,CAAAxC,KAAA;QACd0C,sBAAsB,CAACD,KAAK,EAAE,IAAI,CAAC;MACrC;IAAC,SAAAlC,GAAA;MAAA+B,SAAA,CAAArC,CAAA,CAAAM,GAAA;IAAA;MAAA+B,SAAA,CAAAnC,CAAA;IAAA;EAEH;EAEA,IAAIyB,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEe,cAAc,IAAIf,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEgB,GAAG,EAAE;IAC3CT,YAAY,CAACS,GAAG,GAAGZ,eAAe;EACpC;EAEA,IAAIJ,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEiB,cAAc,EAAE;IAC3BV,YAAY,CAACW,GAAG,GAAGnB,OAAO;EAC5B;EAEA,OAAOQ,YAAY;AACrB;AAGA,SAASC,mBAAmBA,CAACU,GAAQ,EAAmB;EAAA,IAAAC,YAAA,EAAAC,aAAA,EAAAC,aAAA,EAAAC,aAAA,EAAAC,aAAA,EAAAC,aAAA,EAAAC,qBAAA,EAAAC,aAAA,EAAAC,aAAA,EAAAC,aAAA,EAAAC,cAAA,EAAAC,cAAA,EAAAC,cAAA,EAAAC,cAAA,EAAAC,eAAA,EAAAC,gBAAA;EACtD,IAAM3B,YAA6B,GAAG;IACpC4B,OAAO,EAAEC,MAAM,CAAClB,GAAG,CAACiB,OAAO,IAAI,EAAE,CAAC;IAClC3C,IAAI,EAAE4C,MAAM,CAAC,EAAAjB,YAAA,GAAAD,GAAG,CAACmB,OAAO,cAAAlB,YAAA,uBAAXA,YAAA,CAAamB,IAAI,KAAI,SAAS,CAAC;IAC5CC,KAAK,EAAE,CAAAnB,aAAA,GAAAF,GAAG,CAACmB,OAAO,cAAAjB,aAAA,eAAXA,aAAA,CAAaoB,KAAK,GAAGJ,MAAM,EAAAf,aAAA,GAACH,GAAG,CAACmB,OAAO,cAAAhB,aAAA,uBAAXA,aAAA,CAAamB,KAAK,CAAC,GAAGC,SAAS;IAClEC,QAAQ,EAAE,CAAApB,aAAA,GAAAJ,GAAG,CAACmB,OAAO,cAAAf,aAAA,eAAXA,aAAA,CAAaqB,QAAQ,GAAGP,MAAM,EAAAb,aAAA,GAACL,GAAG,CAACmB,OAAO,cAAAd,aAAA,uBAAXA,aAAA,CAAaoB,QAAQ,CAAC,GAAGF,SAAS;IAC3EG,QAAQ,EAAE,IAAAC,kCAAiB,GAAArB,aAAA,GAACN,GAAG,CAACmB,OAAO,cAAAb,aAAA,wBAAAC,qBAAA,GAAXD,aAAA,CAAasB,WAAW,cAAArB,qBAAA,uBAAxBA,qBAAA,CAA0BsB,OAAO,CAAC;IAC9DC,IAAI,EAAE,CAAAtB,aAAA,GAAAR,GAAG,CAACmB,OAAO,cAAAX,aAAA,eAAXA,aAAA,CAAauB,IAAI,GAAGC,IAAI,CAACC,SAAS,EAAAxB,aAAA,GAACT,GAAG,CAACmB,OAAO,cAAAV,aAAA,uBAAXA,aAAA,CAAasB,IAAI,CAAC,GAAGR,SAAS;IACvEW,iBAAiB,EAAE,CAAAxB,aAAA,GAAAV,GAAG,CAACmB,OAAO,cAAAT,aAAA,eAAXA,aAAA,CAAayB,iBAAiB,GAC7CH,IAAI,CAACC,SAAS,EAAAtB,cAAA,GAACX,GAAG,CAACmB,OAAO,cAAAR,cAAA,uBAAXA,cAAA,CAAawB,iBAAiB,CAAC,GAC9CZ,SAAS;IACba,UAAU,EAAE,IAAAC,8BAAa,GAAAzB,cAAA,GAACZ,GAAG,CAACmB,OAAO,cAAAP,cAAA,uBAAXA,cAAA,CAAa0B,UAAU,CAAC;IAClDC,QAAQ,EAAE,IAAAF,8BAAa,GAAAxB,cAAA,GAACb,GAAG,CAACmB,OAAO,cAAAN,cAAA,uBAAXA,cAAA,CAAa0B,QAAQ,CAAC;IAC9CC,SAAS,EAAE,IAAAH,8BAAa,GAAAvB,cAAA,GAACd,GAAG,CAACmB,OAAO,cAAAL,cAAA,uBAAXA,cAAA,CAAa0B,SAAS,CAAC;IAChD/C,MAAM,EAAE,EAAE;IACVgD,QAAQ,EAAEC,eAAe,EAAA3B,eAAA,GAACf,GAAG,CAAC2C,UAAU,cAAA5B,eAAA,uBAAdA,eAAA,CAAgB6B,OAAO,CAAC;IAClDC,UAAU,EAAEC,iBAAiB,CAAC9C,GAAG,CAAC+C,SAAS;EAG7C,CAAC;EAGD,IAAMC,SAAS,GAAG,IAAAC,4BAAW,GAAAjC,gBAAA,GAAChB,GAAG,CAAC2C,UAAU,cAAA3B,gBAAA,uBAAdA,gBAAA,CAAgBkC,KAAK,CAAC;EAAC,IAAAC,UAAA,GAAAhH,0BAAA,CAC3B6G,SAAS;IAAAI,MAAA;EAAA;IAAnC,KAAAD,UAAA,CAAApG,CAAA,MAAAqG,MAAA,GAAAD,UAAA,CAAAnG,CAAA,IAAAC,IAAA,GAAqC;MAAA,IAA1BoG,WAAW,GAAAD,MAAA,CAAAlG,KAAA;MACpBmC,YAAY,CAACI,MAAM,CAAC6D,IAAI,CAACC,YAAY,CAACF,WAAW,CAAC,CAAC;IACrD;EAAC,SAAA5F,GAAA;IAAA0F,UAAA,CAAAhG,CAAA,CAAAM,GAAA;EAAA;IAAA0F,UAAA,CAAA9F,CAAA;EAAA;EAGD,SAAAmG,EAAA,MAAAC,eAAA,GAA2BxF,MAAM,CAACyF,OAAO,CAACrE,YAAY,CAAC,EAAAmE,EAAA,GAAAC,eAAA,CAAA7G,MAAA,EAAA4G,EAAA,IAAE;IAApD,IAAAG,kBAAA,OAAAC,eAAA,CAAAC,OAAA,EAAAJ,eAAA,CAAAD,EAAA;MAAOM,GAAG,GAAAH,kBAAA;MAAEzG,KAAK,GAAAyG,kBAAA;IACpB,IAAIzG,KAAK,KAAKqE,SAAS,EAAE;MACvB,OAAOlC,YAAY,CAACyE,GAAG,CAAC;IAC1B;EACF;EAEA,OAAOzE,YAAY;AACrB;AAGA,SAASqD,eAAeA,CAACqB,WAAgB,EAA8B;EACrE,IAAMtB,QAAoC,GAAG,CAAC,CAAC;EAAC,IAAAuB,UAAA,GAAA7H,0BAAA,CACf8B,MAAM,CAACyF,OAAO,CAACK,WAAW,IAAI,CAAC,CAAC,CAAC;IAAAE,MAAA;EAAA;IAAlE,KAAAD,UAAA,CAAAjH,CAAA,MAAAkH,MAAA,GAAAD,UAAA,CAAAhH,CAAA,IAAAC,IAAA,GAA2E;MAAA,IAAAiH,YAAA,OAAAN,eAAA,CAAAC,OAAA,EAAAI,MAAA,CAAA/G,KAAA;QAA/DoB,IAAI,GAAA4F,YAAA;QAAEC,UAAU,GAAAD,YAAA;MAC1B,IAAME,SAAS,GAAG,IAAAzC,kCAAiB,EAACwC,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEE,MAAM,CAAC;MACvD5B,QAAQ,CAACnE,IAAI,CAAC,GAAG;QAAC8F,SAAS,EAATA;MAAS,CAAC;IAC9B;EAAC,SAAA3G,GAAA;IAAAuG,UAAA,CAAA7G,CAAA,CAAAM,GAAA;EAAA;IAAAuG,UAAA,CAAA3G,CAAA;EAAA;EACD,OAAOoF,QAAQ;AACjB;AAEA,SAASK,iBAAiBA,CAACwB,YAAiB,EAA6B;EACvE,IAAMC,mBAAmB,GAAG,IAAAtB,4BAAW,EAACqB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAED,MAAM,CAAC;EAC7D,IAAIE,mBAAmB,CAAC3H,MAAM,GAAG,CAAC,EAAE;IAClC,OAAO;MACLwH,SAAS,EAAE,IAAAzC,kCAAiB,EAAC2C,YAAY;IAC3C,CAAC;EACH;EACA,OAAO/C,SAAS;AAClB;AAIA,SAASgC,YAAYA,CAACiB,QAAa,EAAY;EAAA,IAAAC,qBAAA;EAC7C,IAAM9E,KAAe,GAAG;IAEtB0B,KAAK,EAAEH,MAAM,CAAC,CAAAsD,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAElD,KAAK,KAAI,EAAE,CAAC;IAEpChD,IAAI,EAAE,CAAAkG,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEpD,IAAI,KAAIF,MAAM,CAACsD,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEpD,IAAI,CAAC;IAC9CI,QAAQ,EAAE,CAAAgD,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEpD,IAAI,KAAIF,MAAM,CAACsD,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAE/C,QAAQ,CAAC;IACtDC,QAAQ,EAAE,IAAAC,kCAAiB,GAAA8C,qBAAA,GAACD,QAAQ,CAAC5C,WAAW,cAAA6C,qBAAA,uBAApBA,qBAAA,CAAsB5C,OAAO;EAC3D,CAAC;EAGD,IAAM6C,GAAG,GAAG,CAAAF,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEG,GAAG,MAAIH,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEI,GAAG;EAC1C,IAAIF,GAAG,IAAIjI,KAAK,CAACC,OAAO,CAACgI,GAAG,CAAC,IAAIA,GAAG,CAACG,KAAK,CAAC,UAACC,CAAC;IAAA,OAAK,OAAOA,CAAC,KAAK,QAAQ;EAAA,EAAC,EAAE;IACxEnF,KAAK,CAAC+E,GAAG,GAAGA,GAAG;EACjB;EAGA,IAAIK,qBAAqB,GACvB,CAAAP,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEQ,wBAAwB,KAAIC,oBAAoB,CAACT,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEQ,wBAAwB,CAAC;EAChG,IAAID,qBAAqB,EAAE;IACzBpF,KAAK,CAACoF,qBAAqB,GAAGA,qBAAqB;EACrD;EAGAA,qBAAqB,GACnB,CAAAP,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEU,iBAAiB,KAAIC,wBAAwB,CAACX,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEU,iBAAiB,CAAC;EACtF,IAAIH,qBAAqB,EAAE;IACzBpF,KAAK,CAACoF,qBAAqB,GAAGA,qBAAqB;EACrD;EAGA,IAAMK,aAAa,GAAG,CAAAZ,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEa,WAAW,KAAIC,uBAAuB,CAACd,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEa,WAAW,CAAC;EAC7F,IAAID,aAAa,IAAIA,aAAa,CAACxI,MAAM,GAAG,CAAC,EAAE;IAC7C+C,KAAK,CAACyF,aAAa,GAAGA,aAAa;EACrC;EAGA,IAAMG,aAAa,GAAG,IAAAtC,4BAAW,EAACuB,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEgB,SAAS,CAAC;EACtD,IAAMC,UAAU,GAAGF,aAAa,CAACG,GAAG,CAAC,UAAC1F,GAAG;IAAA,OAAK2F,gBAAgB,CAAC3F,GAAG,CAAC;EAAA,EAAC;EACpE,IAAIyF,UAAU,CAAC7I,MAAM,EAAE;IACrB+C,KAAK,CAAC8F,UAAU,GAAGA,UAAU;EAC/B;EAEA,IAAIjB,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAEoB,MAAM,EAAE;IACpBjG,KAAK,CAACiG,MAAM,GAAG,IAAAC,8BAAa,EAACrB,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEoB,MAAM,CAAC;EAChD;EACA,IAAIpB,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAEsB,QAAQ,EAAE;IACtBnG,KAAK,CAACmG,QAAQ,GAAG,IAAAD,8BAAa,EAACrB,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEsB,QAAQ,CAAC;EACpD;EACA,IAAItB,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAEuB,SAAS,EAAE;IACvBpG,KAAK,CAACoG,SAAS,GAAG,IAAAF,8BAAa,EAACrB,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEuB,SAAS,CAAC;EACtD;EAGA,IAAM/C,SAAS,GAAG,IAAAC,4BAAW,EAACuB,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEtB,KAAK,CAAC;EAC9C,IAAMzD,MAAkB,GAAG,EAAE;EAAC,IAAAuG,UAAA,GAAA7J,0BAAA,CAEJ6G,SAAS;IAAAiD,MAAA;EAAA;IAAnC,KAAAD,UAAA,CAAAjJ,CAAA,MAAAkJ,MAAA,GAAAD,UAAA,CAAAhJ,CAAA,IAAAC,IAAA,GAAqC;MAAA,IAA1BoG,WAAW,GAAA4C,MAAA,CAAA/I,KAAA;MACpBuC,MAAM,CAAC6D,IAAI,CAACC,YAAY,CAACF,WAAW,CAAC,CAAC;IACxC;EAAC,SAAA5F,GAAA;IAAAuI,UAAA,CAAA7I,CAAA,CAAAM,GAAA;EAAA;IAAAuI,UAAA,CAAA3I,CAAA;EAAA;EAED,IAAIoC,MAAM,CAAC7C,MAAM,GAAG,CAAC,EAAE;IACrB+C,KAAK,CAACF,MAAM,GAAGA,MAAM;EACvB;EAGA,SAAAyG,GAAA,MAAAC,gBAAA,GAA2BlI,MAAM,CAACyF,OAAO,CAAC/D,KAAK,CAAC,EAAAuG,GAAA,GAAAC,gBAAA,CAAAvJ,MAAA,EAAAsJ,GAAA,IAAE;IAA7C,IAAAE,mBAAA,OAAAxC,eAAA,CAAAC,OAAA,EAAAsC,gBAAA,CAAAD,GAAA;MAAOpC,GAAG,GAAAsC,mBAAA;MAAElJ,KAAK,GAAAkJ,mBAAA;IACpB,IAAIlJ,KAAK,KAAKqE,SAAS,EAAE;MACvB,OAAO5B,KAAK,CAACmE,GAAG,CAAC;IACnB;EACF;EAEA,OAAOnE,KAAK;AACd;AAGA,SAASsF,oBAAoBA,CAACoB,cAAmB,EAAwC;EACvF,IACsBC,CAAC,GAInBD,cAAc,CAJhBE,kBAAkB;IACEvJ,CAAC,GAGnBqJ,cAAc,CAHhBG,kBAAkB;IACErJ,CAAC,GAEnBkJ,cAAc,CAFhBI,kBAAkB;IACE1J,CAAC,GACnBsJ,cAAc,CADhBK,kBAAkB;EAEpB,OAAO,CACL,CAACJ,CAAC,EAAEvJ,CAAC,CAAC,EACN,CAACI,CAAC,EAAEH,CAAC,CAAC,CACP;AACH;AAGA,SAASmI,wBAAwBA,CAACkB,cAAmB,EAAwC;EAC3F,IAAOM,IAAI,GAAsBN,cAAc,CAAxCM,IAAI;IAAEC,IAAI,GAAgBP,cAAc,CAAlCO,IAAI;IAAEC,IAAI,GAAUR,cAAc,CAA5BQ,IAAI;IAAEC,IAAI,GAAIT,cAAc,CAAtBS,IAAI;EAC7B,OAAO,CACL,CAACH,IAAI,EAAEC,IAAI,CAAC,EACZ,CAACC,IAAI,EAAEC,IAAI,CAAC,CACb;AACH;AAGA,SAASxB,uBAAuBA,CAACyB,gBAAqB,EAAoB;EACxE,IAAMC,QAAQ,GAAG,IAAA/D,4BAAW,EAAC8D,gBAAgB,CAAC;EAC9C,OAAOC,QAAQ,CAACtB,GAAG,CAAC,UAACuB,MAAM;IAAA,OAAKC,qBAAqB,CAACD,MAAM,CAAC;EAAA,EAAC;AAChE;AAGA,SAASC,qBAAqBA,CAACb,cAAmB,EAAkB;EAClE,IAAO1B,GAAG,GAA6C0B,cAAc,CAA9D1B,GAAG;IAAEC,GAAG,GAAwCyB,cAAc,CAAzDzB,GAAG;IAAE+B,IAAI,GAAkCN,cAAc,CAApDM,IAAI;IAAEC,IAAI,GAA4BP,cAAc,CAA9CO,IAAI;IAAEC,IAAI,GAAsBR,cAAc,CAAxCQ,IAAI;IAAEC,IAAI,GAAgBT,cAAc,CAAlCS,IAAI;IAAEK,IAAI,GAAUd,cAAc,CAA5Bc,IAAI;IAAEC,IAAI,GAAIf,cAAc,CAAtBe,IAAI;EACnD,IAAMC,WAA2B,GAAG;IAElC3C,GAAG,EAAEC,GAAG,IAAIC,GAAG;IACfyC,WAAW,EAAE,CACX,CAAC,IAAAC,4BAAW,EAACX,IAAI,CAAC,EAAY,IAAAW,4BAAW,EAACV,IAAI,CAAC,CAAW,EAC1D,CAAC,IAAAU,4BAAW,EAACT,IAAI,CAAC,EAAY,IAAAS,4BAAW,EAACR,IAAI,CAAC,CAAW;EAE9D,CAAC;EACD,IAAIK,IAAI,EAAE;IACRE,WAAW,CAACE,WAAW,GAAGJ,IAAI;EAChC;EACA,IAAIC,IAAI,EAAE;IACRC,WAAW,CAACG,WAAW,GAAGJ,IAAI;EAChC;EACA,OAAOC,WAAW;AACpB;AAQA,SAAS1B,gBAAgBA,CAAC8B,YAAiB,EAAgB;EACzD,IAAOnJ,IAAI,GAA0BmJ,YAAY,CAA1CnJ,IAAI;IAAEoJ,KAAK,GAAmBD,YAAY,CAApCC,KAAK;IAASC,MAAM,GAAIF,YAAY,CAA7BvK,KAAK;EAEzB,IAAM0K,SAAuB,GAAG;IAACtJ,IAAI,EAAJA,IAAI;IAAEoJ,KAAK,EAALA,KAAK;IAAEC,MAAM,EAANA;EAAM,CAAC;EAErD,IAAIF,YAAY,CAACI,UAAU,EAAE;IAC3BD,SAAS,CAACC,UAAU,GAAGJ,YAAY,CAACI,UAAU;EAChD;EACA,IAAIJ,YAAY,CAAC5D,OAAO,EAAE;IACxB+D,SAAS,CAACE,YAAY,GAAGL,YAAY,CAAC5D,OAAO;EAC/C;EACA,IAAI4D,YAAY,CAACM,cAAc,EAAE;IAC/BH,SAAS,CAACG,cAAc,GAAG,IAAAlC,8BAAa,EAAC4B,YAAY,CAACM,cAAc,CAAC;EACvE;EACA,IAAIN,YAAY,CAACO,YAAY,EAAE;IAC7BJ,SAAS,CAACI,YAAY,GAAG,IAAAnC,8BAAa,EAAC4B,YAAY,CAACO,YAAY,CAAC;EACnE;EACA,IAAIP,YAAY,CAACQ,OAAO,EAAE;IACxBL,SAAS,CAACK,OAAO,GAAG,IAAApC,8BAAa,EAAC4B,YAAY,CAACQ,OAAO,CAAC;EACzD;EAEA,OAAOL,SAAS;AAClB;AAIA,SAAShI,sBAAsBA,CAACD,KAAe,EAAEuI,MAAuB,EAAQ;EAC9E,IAAIA,MAAM,aAANA,MAAM,eAANA,MAAM,CAAEnD,qBAAqB,IAAI,CAACpF,KAAK,CAACoF,qBAAqB,EAAE;IACjEpF,KAAK,CAACoF,qBAAqB,OAAAoD,mBAAA,CAAAtE,OAAA,EAAOqE,MAAM,CAACnD,qBAAqB,CAAC;EACjE;EAEA,IAAImD,MAAM,aAANA,MAAM,eAANA,MAAM,CAAExD,GAAG,IAAI,CAAC/E,KAAK,CAAC+E,GAAG,EAAE;IAC7B/E,KAAK,CAAC+E,GAAG,OAAAyD,mBAAA,CAAAtE,OAAA,EAAOqE,MAAM,CAACxD,GAAG,CAAC;EAC7B;EAEA,IAAIwD,MAAM,aAANA,MAAM,eAANA,MAAM,CAAE9C,aAAa,IAAI,CAACzF,KAAK,CAACyF,aAAa,EAAE;IACjDzF,KAAK,CAACyF,aAAa,OAAA+C,mBAAA,CAAAtE,OAAA,EAAOqE,MAAM,CAAC9C,aAAa,CAAC;EACjD;EAEA,IAAI8C,MAAM,aAANA,MAAM,eAANA,MAAM,CAAEzC,UAAU,IAAI,CAAC9F,KAAK,CAAC8F,UAAU,EAAE;IAC3C9F,KAAK,CAAC8F,UAAU,OAAA0C,mBAAA,CAAAtE,OAAA,EAAOqE,MAAM,CAACzC,UAAU,CAAC;EAC3C;EAAC,IAAA2C,UAAA,GAAAjM,0BAAA,CAEsBwD,KAAK,CAACF,MAAM,IAAI,EAAE;IAAA4I,MAAA;EAAA;IAAzC,KAAAD,UAAA,CAAArL,CAAA,MAAAsL,MAAA,GAAAD,UAAA,CAAApL,CAAA,IAAAC,IAAA,GAA2C;MAAA,IAAhCqL,QAAQ,GAAAD,MAAA,CAAAnL,KAAA;MACjB0C,sBAAsB,CAAC0I,QAAQ,EAAE3I,KAAK,CAAC;IACzC;EAAC,SAAAlC,GAAA;IAAA2K,UAAA,CAAAjL,CAAA,CAAAM,GAAA;EAAA;IAAA2K,UAAA,CAAA/K,CAAA;EAAA;AACH"}
|
|
1
|
+
{"version":3,"file":"parse-wms-capabilities.js","names":["_xml","require","_parseXmlHelpers","parseWMSCapabilities","xmlText","options","parsedXML","XMLLoader","parseTextSync","xmlCapabilities","WMT_MS_Capabilities","WMS_Capabilities","capabilities","extractCapabilities","inheritedLayerProps","layer","layers","addInheritedLayerProps","includeRawData","raw","includeXMLText","xml","_xml$Service","_xml$Service2","_xml$Service3","_xml$Service4","_xml$Service5","_xml$Service6","_xml$Service6$Keyword","_xml$Service7","_xml$Service8","_xml$Service9","_xml$Service10","_xml$Service11","_xml$Service12","_xml$Service13","_xml$Capability","_xml$Capability2","version","String","name","Service","Name","title","Title","undefined","abstract","Abstract","keywords","getXMLStringArray","KeywordList","Keyword","fees","Fees","JSON","stringify","accessConstraints","AccessConstraints","layerLimit","getXMLInteger","LayerLimit","maxWidth","maxHeight","requests","extractRequests","Capability","Request","exceptions","extractExceptions","Exception","xmlLayers","getXMLArray","Layer","xmlSubLayer","push","extractLayer","key","value","Object","entries","xmlRequests","xmlRequest","mimeTypes","Format","xmlException","xmlExceptionFormats","length","xmlLayer","_xmlLayer$KeywordList","crs","CRS","SRS","Array","isArray","every","_","geographicBoundingBox","EX_GeographicBoundingBox","extractEXBoundingBox","LatLonBoundingBox","extractLatLonBoundingBox","boundingBoxes","BoundingBox","extractWMSBoundingBoxes","xmlDimensions","Dimension","dimensions","map","extractDimension","opaque","getXMLBoolean","cascaded","queryable","xmlBoundingBox","westBoundLongitude","w","northBoundLatitude","n","eastBoundLongitude","e","southBoundLatitude","s","minx","miny","maxx","maxy","xmlBoundingBoxes","xmlBoxes","xmlBox","extractWMSBoundingBox","resx","resy","boundingBox","getXMLFloat","xResolution","yResolution","xmlDimension","units","extent","dimension","unitSymbol","default","defaultValue","multipleValues","nearestValue","current","parent","subLayer"],"sources":["../../../../../src/lib/parsers/wms/parse-wms-capabilities.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {XMLLoader} from '@loaders.gl/xml';\nimport {\n getXMLArray,\n getXMLStringArray,\n getXMLInteger,\n getXMLFloat,\n getXMLBoolean\n} from '../xml/parse-xml-helpers';\n\n/** All capabilities of a WMS service - response to a WMS `GetCapabilities` data structure extracted from XML */\nexport type WMSCapabilities = {\n /** Version of the WMS service */\n version?: string; // '1.3.0' | '1.1.1' | '1.1.0' | '1.0.0'\n /** A short name for the service */\n name: string;\n /** A human readable name for the service */\n title?: string;\n /** A more extensive description of the service */\n abstract?: string;\n /** A set of keywords e.g. for searching services */\n keywords: string[];\n /** A field of unspecified format, if present describes any access constraints required to use the service. */\n accessConstraints?: string;\n /** A field of unspecified format, if present describes any fees associated with the use of the service */\n fees?: string;\n /** If present, the max number of layers that can be rendered by the service */\n layerLimit?: number;\n /** If present, the widest image that can be rendered by the service */\n maxWidth?: number;\n /** If present, the tallest image that can be rendered by the service */\n maxHeight?: number;\n /** Hierarchical list of layers. */\n layers: WMSLayer[];\n /** A map with information about supported WMS requests. If a record is present, the request is supported by the service */\n requests: Record<string, WMSRequest>;\n /** Information about any exceptions that the service will report (HTTP status != 2xx) */\n exceptions?: WMSExceptions;\n /** Only if `options.raw`: raw untyped JSON parsed from XML. Can include information not extracted in the typed response. */\n raw?: Record<string, unknown>;\n /** Only if `options.xml`, the unparsed XML string can be requested */\n xml?: string;\n};\n\n/**\n * Metadata about a layer\n * Layers inherit many properties from their parent layers, see description of individual props for details.\n * @see https://www.ogc.org/standard/wms/ 7.2.4.6\n */\nexport type WMSLayer = {\n /** The title is a human readable name. It is mandatory on each layer. Not inherited. */\n title: string;\n /** A layer is renderable if it has a name. A named parent layer will render all its sublayers. Not inherited. */\n name?: string;\n /** A narrative description of the map layer. */\n abstract?: string;\n /** A set of keywords e.g. for searching layers */\n keywords: string[];\n /** layer limits in unspecified CRS:84-like lng/lat, for quick access w/o CRS calculations. Defined or inherited. */\n geographicBoundingBox?: [min: [x: number, y: number], max: [x: number, y: number]];\n /** Supported CRS. Either defined or inherited. */\n crs?: string[];\n /** Bounding boxes in specific CRS:es */\n boundingBoxes?: WMSBoundingBox[];\n\n // minScale: number;\n // maxScale: number;\n // dimensions: ?? 7.2.4.6.10\n // MetadataURL\n // Attribution\n // Identifier and AuthorityURL\n // FeatureListURL\n // DataURL\n\n /** any extra dimension such as time */\n dimensions?: WMSDimension[];\n\n /** Whether queries can be performed on the layer */\n queryable?: boolean;\n /** `false` if layer has significant no-data areas that the client can display as transparent. */\n opaque?: boolean;\n /** WMS cascading allows server to expose layers coming from other WMS servers as if they were local layers */\n cascaded?: boolean;\n // noSubsets: boolean\n // fixedWith: number\n // fixedHeight: number\n\n /** A list of styles. @note not yet supported by WMSCapabilitiesLoader */\n styles?: unknown[];\n\n /** Sublayers - these inherit crs and boundingBox) if not overridden) */\n layers?: WMSLayer[];\n};\n\n/**\n * A bounding box specifies the coordinate range for data in the layer.\n * No data is available outside the bounding box.\n */\nexport type WMSBoundingBox = {\n /** CRS indicates the Layer CRS that applies to this bounding box. */\n crs: string;\n /** `[[w, s], [e, n]]`, indicates the limits of the bounding box using the axis units and order of the specified CRS. */\n boundingBox: [min: [x: number, y: number], max: [x: number, y: number]];\n /** Spatial horizontal resolution of data in same units as bounding box */\n xResolution?: number;\n /** Spatial vertical resolution of data in same units as bounding box */\n yResolution?: number;\n};\n\n/**\n * An optional dimension that can be queried using the `name=...` parameter\n * Note that layers that have at least one dimension without `default` value\n * become unrenderable unless the dimension value is supplied to GetMap requests.\n */\nexport type WMSDimension = {\n /** name of dimension, becomes a valid parameter key for this layer */\n name: string;\n /** Textual units for this dimensional axis */\n units: string;\n /** Unit symbol for this dimensional axis */\n unitSymbol?: string;\n /** Default value if no value is supplied. If dimension lacks defaultValue, requests fail if no value is supplied */\n defaultValue?: string;\n /** Can multiple values of the dimension be requested? */\n multipleValues?: boolean;\n /* Will nearest values will be substituted when out of range, if false exact values are required */\n nearestValue?: boolean;\n /** A special value \"current\" is supported, typically for time dimension */\n current?: boolean;\n /** Text content indicating available values for dimension */\n extent: string;\n};\n\n/** Metadata about a supported WMS request */\nexport type WMSRequest = {\n /** MIMEtypes that can be returned by this request. */\n mimeTypes: string[];\n};\n\nexport type WMSExceptions = {\n /** MIME types for exception response payloads. */\n mimeTypes: string[];\n};\n\nexport type ParseWMSCapabilitiesOptions = {\n /** Add inherited layer information to sub layers */\n inheritedLayerProps?: boolean;\n /** Include the \"raw\" JSON (parsed but untyped, unprocessed XML). May contain additional fields */\n includeRawData?: boolean;\n /** Include the original XML document text. May contain additional information. */\n includeXMLText?: boolean;\n /** @deprecated Use includeRawData` */\n raw?: boolean;\n // xml options are passed through to xml loader\n};\n\n/**\n * Parses a typed data structure from raw XML for `GetCapabilities` response\n * @note Error handlings is fairly weak\n */\nexport function parseWMSCapabilities(\n xmlText: string,\n options?: ParseWMSCapabilitiesOptions\n): WMSCapabilities {\n const parsedXML = XMLLoader.parseTextSync(xmlText, options);\n const xmlCapabilities: any =\n parsedXML.WMT_MS_Capabilities || parsedXML.WMS_Capabilities || parsedXML;\n const capabilities = extractCapabilities(xmlCapabilities);\n // In case the processed, normalized capabilities do not contain everything,\n // the user can get the parsed XML structure.\n if (options?.inheritedLayerProps) {\n // Traverse layers and inject missing props from parents\n for (const layer of capabilities.layers) {\n addInheritedLayerProps(layer, null);\n }\n // Not yet implemented\n }\n\n if (options?.includeRawData || options?.raw) {\n capabilities.raw = xmlCapabilities;\n }\n\n if (options?.includeXMLText) {\n capabilities.xml = xmlText;\n }\n\n return capabilities;\n}\n\n/** Extract typed capability data from XML */\nfunction extractCapabilities(xml: any): WMSCapabilities {\n const capabilities: WMSCapabilities = {\n version: String(xml.version || ''),\n name: String(xml.Service?.Name || 'unnamed'),\n title: xml.Service?.Title ? String(xml.Service?.Title) : undefined,\n abstract: xml.Service?.Abstract ? String(xml.Service?.Abstract) : undefined,\n keywords: getXMLStringArray(xml.Service?.KeywordList?.Keyword),\n fees: xml.Service?.Fees ? JSON.stringify(xml.Service?.Fees) : undefined,\n accessConstraints: xml.Service?.AccessConstraints\n ? JSON.stringify(xml.Service?.AccessConstraints)\n : undefined,\n layerLimit: getXMLInteger(xml.Service?.LayerLimit),\n maxWidth: getXMLInteger(xml.Service?.maxWidth),\n maxHeight: getXMLInteger(xml.Service?.maxHeight),\n layers: [],\n requests: extractRequests(xml.Capability?.Request),\n exceptions: extractExceptions(xml.Exception)\n // contact field is a mess of largely irrelevant information, put it last\n // contact: xml.Service?.Contact ? JSON.stringify(xml.Service?.Contact) : undefined,\n };\n\n // LAYERS\n const xmlLayers = getXMLArray(xml.Capability?.Layer);\n for (const xmlSubLayer of xmlLayers) {\n capabilities.layers.push(extractLayer(xmlSubLayer));\n }\n\n // Clean up object\n for (const [key, value] of Object.entries(capabilities)) {\n if (value === undefined) {\n delete capabilities[key];\n }\n }\n\n return capabilities;\n}\n\n/** Extract typed request metadata from XML requests field */\nfunction extractRequests(xmlRequests: any): Record<string, WMSRequest> {\n const requests: Record<string, WMSRequest> = {};\n for (const [name, xmlRequest] of Object.entries(xmlRequests || {}) as any) {\n const mimeTypes = getXMLStringArray(xmlRequest?.Format);\n requests[name] = {mimeTypes};\n }\n return requests;\n}\n\nfunction extractExceptions(xmlException: any): WMSExceptions | undefined {\n const xmlExceptionFormats = getXMLArray(xmlException?.Format);\n if (xmlExceptionFormats.length > 0) {\n return {\n mimeTypes: getXMLStringArray(xmlException)\n };\n }\n return undefined;\n}\n\n/** Extract request data */\n// eslint-disable-next-line complexity, max-statements\nfunction extractLayer(xmlLayer: any): WMSLayer {\n const layer: WMSLayer = {\n // All layers must have a title\n title: String(xmlLayer?.Title || ''),\n // Name is required only if renderable\n name: xmlLayer?.Name && String(xmlLayer?.Name),\n abstract: xmlLayer?.Name && String(xmlLayer?.Abstract),\n keywords: getXMLStringArray(xmlLayer.KeywordList?.Keyword)\n };\n\n // WMS 1.3.0 changes SRS to CRS\n const crs = xmlLayer?.CRS || xmlLayer?.SRS;\n if (crs && Array.isArray(crs) && crs.every((_) => typeof _ === 'string')) {\n layer.crs = crs;\n }\n\n // v1.3.0 extract simple geographic bounding box\n let geographicBoundingBox =\n xmlLayer?.EX_GeographicBoundingBox && extractEXBoundingBox(xmlLayer?.EX_GeographicBoundingBox);\n if (geographicBoundingBox) {\n layer.geographicBoundingBox = geographicBoundingBox;\n }\n\n // v1.1.1 extract simple geographic bounding box\n geographicBoundingBox =\n xmlLayer?.LatLonBoundingBox && extractLatLonBoundingBox(xmlLayer?.LatLonBoundingBox);\n if (geographicBoundingBox) {\n layer.geographicBoundingBox = geographicBoundingBox;\n }\n\n // Extract per-CRS bounding boxes\n const boundingBoxes = xmlLayer?.BoundingBox && extractWMSBoundingBoxes(xmlLayer?.BoundingBox);\n if (boundingBoxes && boundingBoxes.length > 0) {\n layer.boundingBoxes = boundingBoxes;\n }\n\n // Extract dimensions\n const xmlDimensions = getXMLArray(xmlLayer?.Dimension);\n const dimensions = xmlDimensions.map((xml) => extractDimension(xml));\n if (dimensions.length) {\n layer.dimensions = dimensions;\n }\n\n if (xmlLayer?.opaque) {\n layer.opaque = getXMLBoolean(xmlLayer?.opaque);\n }\n if (xmlLayer?.cascaded) {\n layer.cascaded = getXMLBoolean(xmlLayer?.cascaded);\n }\n if (xmlLayer?.queryable) {\n layer.queryable = getXMLBoolean(xmlLayer?.queryable);\n }\n\n // Single layer is not represented as array in XML\n const xmlLayers = getXMLArray(xmlLayer?.Layer);\n const layers: WMSLayer[] = [];\n\n for (const xmlSubLayer of xmlLayers) {\n layers.push(extractLayer(xmlSubLayer));\n }\n\n if (layers.length > 0) {\n layer.layers = layers;\n }\n\n // Clean up object\n for (const [key, value] of Object.entries(layer)) {\n if (value === undefined) {\n delete layer[key];\n }\n }\n\n return layer;\n}\n\n/** WMS 1.3.0 Loosely defined geospatial bounding box in unspecified CRS for quick content searches */\nfunction extractEXBoundingBox(xmlBoundingBox: any): [[number, number], [number, number]] {\n const {\n westBoundLongitude: w,\n northBoundLatitude: n,\n eastBoundLongitude: e,\n southBoundLatitude: s\n } = xmlBoundingBox;\n return [\n [w, s],\n [e, n]\n ];\n}\n\n/** WMS 1.1.1 Loosely defined geospatial bounding box in unspecified CRS for quick content searches */\nfunction extractLatLonBoundingBox(xmlBoundingBox: any): [[number, number], [number, number]] {\n const {minx, miny, maxx, maxy} = xmlBoundingBox;\n return [\n [minx, miny],\n [maxx, maxy]\n ];\n}\n\n/** Loosely defined geospatial bounding box in unspecified CRS for quick content searches */\nfunction extractWMSBoundingBoxes(xmlBoundingBoxes: any): WMSBoundingBox[] {\n const xmlBoxes = getXMLArray(xmlBoundingBoxes);\n return xmlBoxes.map((xmlBox) => extractWMSBoundingBox(xmlBox));\n}\n\n/** Loosely defined geospatial bounding box in unspecified CRS for quick content searches */\nfunction extractWMSBoundingBox(xmlBoundingBox: any): WMSBoundingBox {\n const {CRS, SRS, minx, miny, maxx, maxy, resx, resy} = xmlBoundingBox;\n const boundingBox: WMSBoundingBox = {\n // CRS in 1.3.0, SRS in 1.1.1\n crs: CRS || SRS,\n boundingBox: [\n [getXMLFloat(minx) as number, getXMLFloat(miny) as number],\n [getXMLFloat(maxx) as number, getXMLFloat(maxy) as number]\n ]\n };\n if (resx) {\n boundingBox.xResolution = resx;\n }\n if (resy) {\n boundingBox.yResolution = resy;\n }\n return boundingBox;\n}\n\n/**\n * Extracts optional WMS Dimension layer field\n * @param xmlDimension\n * @example <Dimension name=\"time\" units=\"ISO8601\" default=\"2018-01-01\" nearestValue=\"0\">2001-01-01/2018-01-01/P1Y</Dimension>\n * @see https://mapserver.org/ogc/wms_dimension.html\n */\nfunction extractDimension(xmlDimension: any): WMSDimension {\n const {name, units, value: extent} = xmlDimension;\n\n const dimension: WMSDimension = {name, units, extent};\n\n if (xmlDimension.unitSymbol) {\n dimension.unitSymbol = xmlDimension.unitSymbol;\n }\n if (xmlDimension.default) {\n dimension.defaultValue = xmlDimension.default;\n }\n if (xmlDimension.multipleValues) {\n dimension.multipleValues = getXMLBoolean(xmlDimension.multipleValues);\n }\n if (xmlDimension.nearestValue) {\n dimension.nearestValue = getXMLBoolean(xmlDimension.nearestValue);\n }\n if (xmlDimension.current) {\n dimension.current = getXMLBoolean(xmlDimension.current);\n }\n\n return dimension;\n}\n\n/** Traverse layers and inject missing props from parents */\n// eslint-disable-next-line complexity\nfunction addInheritedLayerProps(layer: WMSLayer, parent: WMSLayer | null): void {\n if (parent?.geographicBoundingBox && !layer.geographicBoundingBox) {\n layer.geographicBoundingBox = [...parent.geographicBoundingBox];\n }\n\n if (parent?.crs && !layer.crs) {\n layer.crs = [...parent.crs];\n }\n\n if (parent?.boundingBoxes && !layer.boundingBoxes) {\n layer.boundingBoxes = [...parent.boundingBoxes];\n }\n\n if (parent?.dimensions && !layer.dimensions) {\n layer.dimensions = [...parent.dimensions];\n }\n\n for (const subLayer of layer.layers || []) {\n addInheritedLayerProps(subLayer, layer);\n }\n}\n"],"mappings":"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"}
|
|
@@ -7,9 +7,9 @@ exports.parseWMSError = parseWMSError;
|
|
|
7
7
|
var _xml = require("@loaders.gl/xml");
|
|
8
8
|
function parseWMSError(text, options) {
|
|
9
9
|
var _XMLLoader$parseTextS, _parsedXML$ServiceExc, _parsedXML$ogcServic;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
const parsedXML = (_XMLLoader$parseTextS = _xml.XMLLoader.parseTextSync) === null || _XMLLoader$parseTextS === void 0 ? void 0 : _XMLLoader$parseTextS.call(_xml.XMLLoader, text, options);
|
|
11
|
+
const serviceExceptionXML = (parsedXML === null || parsedXML === void 0 ? void 0 : (_parsedXML$ServiceExc = parsedXML.ServiceExceptionReport) === null || _parsedXML$ServiceExc === void 0 ? void 0 : _parsedXML$ServiceExc.ServiceException) || (parsedXML === null || parsedXML === void 0 ? void 0 : (_parsedXML$ogcServic = parsedXML['ogc:ServiceExceptionReport']) === null || _parsedXML$ogcServic === void 0 ? void 0 : _parsedXML$ogcServic['ogc:ServiceException']);
|
|
12
|
+
const message = typeof serviceExceptionXML === 'string' ? serviceExceptionXML : serviceExceptionXML.value || serviceExceptionXML.code || 'Unknown error';
|
|
13
13
|
return message;
|
|
14
14
|
}
|
|
15
15
|
//# sourceMappingURL=parse-wms-error.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-wms-error.js","names":["_xml","require","parseWMSError","text","options","_XMLLoader$parseTextS","_parsedXML$ServiceExc","_parsedXML$ogcServic","parsedXML","XMLLoader","parseTextSync","call","serviceExceptionXML","ServiceExceptionReport","ServiceException","message","value","code"],"sources":["../../../../../src/lib/parsers/wms/parse-wms-error.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {XMLLoader} from '@loaders.gl/xml';\n\n/**\n * Extract an error message from WMS error response XML\n * @param text\n * @param options\n * @returns a string with a human readable message\n */\nexport function parseWMSError(text: string, options): string {\n const parsedXML = XMLLoader.parseTextSync?.(text, options);\n const serviceExceptionXML =\n parsedXML?.ServiceExceptionReport?.ServiceException ||\n parsedXML?.['ogc:ServiceExceptionReport']?.['ogc:ServiceException'];\n // Sigh, can be either a string or an object\n const message =\n typeof serviceExceptionXML === 'string'\n ? serviceExceptionXML\n : serviceExceptionXML.value || serviceExceptionXML.code || 'Unknown error';\n return message;\n}\n"],"mappings":";;;;;;AAEA,IAAAA,IAAA,GAAAC,OAAA;AAQO,SAASC,aAAaA,CAACC,IAAY,EAAEC,OAAO,EAAU;EAAA,IAAAC,qBAAA,EAAAC,qBAAA,EAAAC,oBAAA;EAC3D,
|
|
1
|
+
{"version":3,"file":"parse-wms-error.js","names":["_xml","require","parseWMSError","text","options","_XMLLoader$parseTextS","_parsedXML$ServiceExc","_parsedXML$ogcServic","parsedXML","XMLLoader","parseTextSync","call","serviceExceptionXML","ServiceExceptionReport","ServiceException","message","value","code"],"sources":["../../../../../src/lib/parsers/wms/parse-wms-error.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {XMLLoader} from '@loaders.gl/xml';\n\n/**\n * Extract an error message from WMS error response XML\n * @param text\n * @param options\n * @returns a string with a human readable message\n */\nexport function parseWMSError(text: string, options): string {\n const parsedXML = XMLLoader.parseTextSync?.(text, options);\n const serviceExceptionXML =\n parsedXML?.ServiceExceptionReport?.ServiceException ||\n parsedXML?.['ogc:ServiceExceptionReport']?.['ogc:ServiceException'];\n // Sigh, can be either a string or an object\n const message =\n typeof serviceExceptionXML === 'string'\n ? serviceExceptionXML\n : serviceExceptionXML.value || serviceExceptionXML.code || 'Unknown error';\n return message;\n}\n"],"mappings":";;;;;;AAEA,IAAAA,IAAA,GAAAC,OAAA;AAQO,SAASC,aAAaA,CAACC,IAAY,EAAEC,OAAO,EAAU;EAAA,IAAAC,qBAAA,EAAAC,qBAAA,EAAAC,oBAAA;EAC3D,MAAMC,SAAS,IAAAH,qBAAA,GAAGI,cAAS,CAACC,aAAa,cAAAL,qBAAA,uBAAvBA,qBAAA,CAAAM,IAAA,CAAAF,cAAS,EAAiBN,IAAI,EAAEC,OAAO,CAAC;EAC1D,MAAMQ,mBAAmB,GACvB,CAAAJ,SAAS,aAATA,SAAS,wBAAAF,qBAAA,GAATE,SAAS,CAAEK,sBAAsB,cAAAP,qBAAA,uBAAjCA,qBAAA,CAAmCQ,gBAAgB,MACnDN,SAAS,aAATA,SAAS,wBAAAD,oBAAA,GAATC,SAAS,CAAG,4BAA4B,CAAC,cAAAD,oBAAA,uBAAzCA,oBAAA,CAA4C,sBAAsB,CAAC;EAErE,MAAMQ,OAAO,GACX,OAAOH,mBAAmB,KAAK,QAAQ,GACnCA,mBAAmB,GACnBA,mBAAmB,CAACI,KAAK,IAAIJ,mBAAmB,CAACK,IAAI,IAAI,eAAe;EAC9E,OAAOF,OAAO;AAChB"}
|
|
@@ -7,17 +7,15 @@ exports.parseWMSFeatureInfo = parseWMSFeatureInfo;
|
|
|
7
7
|
var _xml = require("@loaders.gl/xml");
|
|
8
8
|
function parseWMSFeatureInfo(text, options) {
|
|
9
9
|
var _parsedXML$FeatureInf;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
const parsedXML = _xml.XMLLoader.parseTextSync(text, options);
|
|
11
|
+
const xmlFeatureInfo = ((_parsedXML$FeatureInf = parsedXML.FeatureInfoResponse) === null || _parsedXML$FeatureInf === void 0 ? void 0 : _parsedXML$FeatureInf.FIELDS) || [];
|
|
12
|
+
const xmlFeatures = Array.isArray(xmlFeatureInfo) ? xmlFeatureInfo : [xmlFeatureInfo];
|
|
13
13
|
return {
|
|
14
|
-
features: xmlFeatures.map(
|
|
15
|
-
return extractFeature(xmlFeature);
|
|
16
|
-
})
|
|
14
|
+
features: xmlFeatures.map(xmlFeature => extractFeature(xmlFeature))
|
|
17
15
|
};
|
|
18
16
|
}
|
|
19
17
|
function extractFeature(xmlFeature) {
|
|
20
|
-
|
|
18
|
+
const xmlFields = xmlFeature || {};
|
|
21
19
|
return {
|
|
22
20
|
attributes: xmlFields,
|
|
23
21
|
type: '',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-wms-features.js","names":["_xml","require","parseWMSFeatureInfo","text","options","_parsedXML$FeatureInf","parsedXML","XMLLoader","parseTextSync","xmlFeatureInfo","FeatureInfoResponse","FIELDS","xmlFeatures","Array","isArray","features","map","xmlFeature","extractFeature","xmlFields","attributes","type","bounds","bottom","top","left","right"],"sources":["../../../../../src/lib/parsers/wms/parse-wms-features.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {XMLLoader} from '@loaders.gl/xml';\n\n/** WMS Feature info - response to a WMS `GetFeatureInfo` request */\nexport type WMSFeatureInfo = {\n features: WMSFeature[];\n};\n\nexport type WMSFeature = {\n attributes: Record<string, number | string>;\n type: string;\n bounds: {top: number; bottom: number; left: number; right: number};\n};\n\n/**\n * Parses a typed data structure from raw XML for `GetFeatureInfo` response\n * @note Error handlings is fairly weak\n */\nexport function parseWMSFeatureInfo(text: string, options): WMSFeatureInfo {\n const parsedXML = XMLLoader.parseTextSync(text, options);\n const xmlFeatureInfo: any = parsedXML.FeatureInfoResponse?.FIELDS || [];\n\n const xmlFeatures = Array.isArray(xmlFeatureInfo) ? xmlFeatureInfo : [xmlFeatureInfo];\n\n return {\n features: xmlFeatures.map((xmlFeature) => extractFeature(xmlFeature))\n };\n}\n\nfunction extractFeature(xmlFeature: any) {\n const xmlFields = xmlFeature || {};\n // TODO - not correct\n return {\n attributes: xmlFields,\n type: '',\n bounds: {bottom: 0, top: 0, left: 0, right: 0}\n };\n}\n"],"mappings":";;;;;;AAEA,IAAAA,IAAA,GAAAC,OAAA;AAiBO,SAASC,mBAAmBA,CAACC,IAAY,EAAEC,OAAO,EAAkB;EAAA,IAAAC,qBAAA;EACzE,
|
|
1
|
+
{"version":3,"file":"parse-wms-features.js","names":["_xml","require","parseWMSFeatureInfo","text","options","_parsedXML$FeatureInf","parsedXML","XMLLoader","parseTextSync","xmlFeatureInfo","FeatureInfoResponse","FIELDS","xmlFeatures","Array","isArray","features","map","xmlFeature","extractFeature","xmlFields","attributes","type","bounds","bottom","top","left","right"],"sources":["../../../../../src/lib/parsers/wms/parse-wms-features.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {XMLLoader} from '@loaders.gl/xml';\n\n/** WMS Feature info - response to a WMS `GetFeatureInfo` request */\nexport type WMSFeatureInfo = {\n features: WMSFeature[];\n};\n\nexport type WMSFeature = {\n attributes: Record<string, number | string>;\n type: string;\n bounds: {top: number; bottom: number; left: number; right: number};\n};\n\n/**\n * Parses a typed data structure from raw XML for `GetFeatureInfo` response\n * @note Error handlings is fairly weak\n */\nexport function parseWMSFeatureInfo(text: string, options): WMSFeatureInfo {\n const parsedXML = XMLLoader.parseTextSync(text, options);\n const xmlFeatureInfo: any = parsedXML.FeatureInfoResponse?.FIELDS || [];\n\n const xmlFeatures = Array.isArray(xmlFeatureInfo) ? xmlFeatureInfo : [xmlFeatureInfo];\n\n return {\n features: xmlFeatures.map((xmlFeature) => extractFeature(xmlFeature))\n };\n}\n\nfunction extractFeature(xmlFeature: any) {\n const xmlFields = xmlFeature || {};\n // TODO - not correct\n return {\n attributes: xmlFields,\n type: '',\n bounds: {bottom: 0, top: 0, left: 0, right: 0}\n };\n}\n"],"mappings":";;;;;;AAEA,IAAAA,IAAA,GAAAC,OAAA;AAiBO,SAASC,mBAAmBA,CAACC,IAAY,EAAEC,OAAO,EAAkB;EAAA,IAAAC,qBAAA;EACzE,MAAMC,SAAS,GAAGC,cAAS,CAACC,aAAa,CAACL,IAAI,EAAEC,OAAO,CAAC;EACxD,MAAMK,cAAmB,GAAG,EAAAJ,qBAAA,GAAAC,SAAS,CAACI,mBAAmB,cAAAL,qBAAA,uBAA7BA,qBAAA,CAA+BM,MAAM,KAAI,EAAE;EAEvE,MAAMC,WAAW,GAAGC,KAAK,CAACC,OAAO,CAACL,cAAc,CAAC,GAAGA,cAAc,GAAG,CAACA,cAAc,CAAC;EAErF,OAAO;IACLM,QAAQ,EAAEH,WAAW,CAACI,GAAG,CAAEC,UAAU,IAAKC,cAAc,CAACD,UAAU,CAAC;EACtE,CAAC;AACH;AAEA,SAASC,cAAcA,CAACD,UAAe,EAAE;EACvC,MAAME,SAAS,GAAGF,UAAU,IAAI,CAAC,CAAC;EAElC,OAAO;IACLG,UAAU,EAAED,SAAS;IACrBE,IAAI,EAAE,EAAE;IACRC,MAAM,EAAE;MAACC,MAAM,EAAE,CAAC;MAAEC,GAAG,EAAE,CAAC;MAAEC,IAAI,EAAE,CAAC;MAAEC,KAAK,EAAE;IAAC;EAC/C,CAAC;AACH"}
|
|
@@ -7,7 +7,7 @@ exports.parseWMSLayerDescription = parseWMSLayerDescription;
|
|
|
7
7
|
var _xml = require("@loaders.gl/xml");
|
|
8
8
|
function parseWMSLayerDescription(text, options) {
|
|
9
9
|
var _XMLLoader$parseTextS;
|
|
10
|
-
|
|
10
|
+
const parsedXML = (_XMLLoader$parseTextS = _xml.XMLLoader.parseTextSync) === null || _XMLLoader$parseTextS === void 0 ? void 0 : _XMLLoader$parseTextS.call(_xml.XMLLoader, text, options);
|
|
11
11
|
return parsedXML;
|
|
12
12
|
}
|
|
13
13
|
//# sourceMappingURL=parse-wms-layer-description.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-wms-layer-description.js","names":["_xml","require","parseWMSLayerDescription","text","options","_XMLLoader$parseTextS","parsedXML","XMLLoader","parseTextSync","call"],"sources":["../../../../../src/lib/parsers/wms/parse-wms-layer-description.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport type {XMLLoaderOptions} from '@loaders.gl/xml';\nimport {XMLLoader} from '@loaders.gl/xml';\n\n/** Layer description - response to a WMS `DescribeLayer` request */\nexport type WMSLayerDescription = {\n layers: {}[];\n};\n\n/**\n * Parses a typed data structure from raw XML for `GetFeatureInfo` response\n * @note Error handlings is fairly weak\n */\nexport function parseWMSLayerDescription(\n text: string,\n options?: XMLLoaderOptions\n): WMSLayerDescription {\n const parsedXML = XMLLoader.parseTextSync?.(text, options);\n // TODO - implement parser\n return parsedXML as unknown as WMSLayerDescription;\n}\n"],"mappings":";;;;;;AAGA,IAAAA,IAAA,GAAAC,OAAA;AAWO,SAASC,wBAAwBA,CACtCC,IAAY,EACZC,OAA0B,EACL;EAAA,IAAAC,qBAAA;EACrB,
|
|
1
|
+
{"version":3,"file":"parse-wms-layer-description.js","names":["_xml","require","parseWMSLayerDescription","text","options","_XMLLoader$parseTextS","parsedXML","XMLLoader","parseTextSync","call"],"sources":["../../../../../src/lib/parsers/wms/parse-wms-layer-description.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport type {XMLLoaderOptions} from '@loaders.gl/xml';\nimport {XMLLoader} from '@loaders.gl/xml';\n\n/** Layer description - response to a WMS `DescribeLayer` request */\nexport type WMSLayerDescription = {\n layers: {}[];\n};\n\n/**\n * Parses a typed data structure from raw XML for `GetFeatureInfo` response\n * @note Error handlings is fairly weak\n */\nexport function parseWMSLayerDescription(\n text: string,\n options?: XMLLoaderOptions\n): WMSLayerDescription {\n const parsedXML = XMLLoader.parseTextSync?.(text, options);\n // TODO - implement parser\n return parsedXML as unknown as WMSLayerDescription;\n}\n"],"mappings":";;;;;;AAGA,IAAAA,IAAA,GAAAC,OAAA;AAWO,SAASC,wBAAwBA,CACtCC,IAAY,EACZC,OAA0B,EACL;EAAA,IAAAC,qBAAA;EACrB,MAAMC,SAAS,IAAAD,qBAAA,GAAGE,cAAS,CAACC,aAAa,cAAAH,qBAAA,uBAAvBA,qBAAA,CAAAI,IAAA,CAAAF,cAAS,EAAiBJ,IAAI,EAAEC,OAAO,CAAC;EAE1D,OAAOE,SAAS;AAClB"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
@@ -9,7 +8,6 @@ exports.getXMLBoolean = getXMLBoolean;
|
|
|
9
8
|
exports.getXMLFloat = getXMLFloat;
|
|
10
9
|
exports.getXMLInteger = getXMLInteger;
|
|
11
10
|
exports.getXMLStringArray = getXMLStringArray;
|
|
12
|
-
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
13
11
|
function getXMLArray(xmlValue) {
|
|
14
12
|
if (Array.isArray(xmlValue)) {
|
|
15
13
|
return xmlValue;
|
|
@@ -20,17 +18,15 @@ function getXMLArray(xmlValue) {
|
|
|
20
18
|
return [];
|
|
21
19
|
}
|
|
22
20
|
function getXMLStringArray(xmlValue) {
|
|
23
|
-
|
|
24
|
-
if (xmlArray.length > 0 && xmlArray.every(
|
|
25
|
-
return typeof _ === 'string';
|
|
26
|
-
})) {
|
|
21
|
+
const xmlArray = getXMLArray(xmlValue);
|
|
22
|
+
if (xmlArray.length > 0 && xmlArray.every(_ => typeof _ === 'string')) {
|
|
27
23
|
return xmlArray;
|
|
28
24
|
}
|
|
29
25
|
return [];
|
|
30
26
|
}
|
|
31
27
|
function getXMLFloat(xmlValue) {
|
|
32
|
-
|
|
33
|
-
switch (
|
|
28
|
+
let defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
|
|
29
|
+
switch (typeof xmlValue) {
|
|
34
30
|
case 'number':
|
|
35
31
|
return xmlValue;
|
|
36
32
|
case 'string':
|
|
@@ -40,8 +36,8 @@ function getXMLFloat(xmlValue) {
|
|
|
40
36
|
}
|
|
41
37
|
}
|
|
42
38
|
function getXMLInteger(xmlValue) {
|
|
43
|
-
|
|
44
|
-
switch (
|
|
39
|
+
let defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
|
|
40
|
+
switch (typeof xmlValue) {
|
|
45
41
|
case 'number':
|
|
46
42
|
return xmlValue;
|
|
47
43
|
case 'string':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-xml-helpers.js","names":["getXMLArray","xmlValue","Array","isArray","getXMLStringArray","xmlArray","length","every","_","getXMLFloat","defaultValue","arguments","undefined","
|
|
1
|
+
{"version":3,"file":"parse-xml-helpers.js","names":["getXMLArray","xmlValue","Array","isArray","getXMLStringArray","xmlArray","length","every","_","getXMLFloat","defaultValue","arguments","undefined","parseFloat","getXMLInteger","parseInt","getXMLBoolean"],"sources":["../../../../../src/lib/parsers/xml/parse-xml-helpers.ts"],"sourcesContent":["// loaders.gl, MIT license\n\n/** A single element of an array is not represented as an array in XML */\nexport function getXMLArray(xmlValue: any): any[] {\n // Already an array, return as is\n if (Array.isArray(xmlValue)) {\n return xmlValue;\n }\n // Single value, wrap in array\n if (xmlValue) {\n return [xmlValue];\n }\n // nullish, return empty array\n return [];\n}\n\n/** Get a list of strings from XML */\nexport function getXMLStringArray(xmlValue: any): string[] {\n const xmlArray = getXMLArray(xmlValue);\n if (xmlArray.length > 0 && xmlArray.every((_) => typeof _ === 'string')) {\n return xmlArray as string[];\n }\n // TODO - error handling?\n return [];\n}\n\n/** Get XML float */\nexport function getXMLFloat(xmlValue: any, defaultValue = undefined): number | undefined {\n switch (typeof xmlValue) {\n case 'number':\n return xmlValue;\n case 'string':\n return parseFloat(xmlValue);\n default:\n return undefined;\n }\n}\n\n/** Get XML integer */\nexport function getXMLInteger(xmlValue: any, defaultValue = undefined): number | undefined {\n switch (typeof xmlValue) {\n case 'number':\n return xmlValue;\n case 'string':\n return parseInt(xmlValue, 10);\n default:\n return undefined;\n }\n}\n\n/** Somewhat arbitrary boolean parsing */\nexport function getXMLBoolean(xmlValue: any): boolean {\n switch (xmlValue) {\n case 'true':\n return true;\n case 'false':\n return false;\n case '1':\n return true;\n case '0':\n return false;\n default:\n return false;\n }\n}\n"],"mappings":";;;;;;;;;;AAGO,SAASA,WAAWA,CAACC,QAAa,EAAS;EAEhD,IAAIC,KAAK,CAACC,OAAO,CAACF,QAAQ,CAAC,EAAE;IAC3B,OAAOA,QAAQ;EACjB;EAEA,IAAIA,QAAQ,EAAE;IACZ,OAAO,CAACA,QAAQ,CAAC;EACnB;EAEA,OAAO,EAAE;AACX;AAGO,SAASG,iBAAiBA,CAACH,QAAa,EAAY;EACzD,MAAMI,QAAQ,GAAGL,WAAW,CAACC,QAAQ,CAAC;EACtC,IAAII,QAAQ,CAACC,MAAM,GAAG,CAAC,IAAID,QAAQ,CAACE,KAAK,CAAEC,CAAC,IAAK,OAAOA,CAAC,KAAK,QAAQ,CAAC,EAAE;IACvE,OAAOH,QAAQ;EACjB;EAEA,OAAO,EAAE;AACX;AAGO,SAASI,WAAWA,CAACR,QAAa,EAAgD;EAAA,IAA9CS,YAAY,GAAAC,SAAA,CAAAL,MAAA,QAAAK,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAGC,SAAS;EACjE,QAAQ,OAAOX,QAAQ;IACrB,KAAK,QAAQ;MACX,OAAOA,QAAQ;IACjB,KAAK,QAAQ;MACX,OAAOY,UAAU,CAACZ,QAAQ,CAAC;IAC7B;MACE,OAAOW,SAAS;EACpB;AACF;AAGO,SAASE,aAAaA,CAACb,QAAa,EAAgD;EAAA,IAA9CS,YAAY,GAAAC,SAAA,CAAAL,MAAA,QAAAK,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAGC,SAAS;EACnE,QAAQ,OAAOX,QAAQ;IACrB,KAAK,QAAQ;MACX,OAAOA,QAAQ;IACjB,KAAK,QAAQ;MACX,OAAOc,QAAQ,CAACd,QAAQ,EAAE,EAAE,CAAC;IAC/B;MACE,OAAOW,SAAS;EACpB;AACF;AAGO,SAASI,aAAaA,CAACf,QAAa,EAAW;EACpD,QAAQA,QAAQ;IACd,KAAK,MAAM;MACT,OAAO,IAAI;IACb,KAAK,OAAO;MACV,OAAO,KAAK;IACd,KAAK,GAAG;MACN,OAAO,IAAI;IACb,KAAK,GAAG;MACN,OAAO,KAAK;IACd;MACE,OAAO,KAAK;EAChB;AACF"}
|