@loaders.gl/wms 4.0.0-alpha.23 → 4.0.0-alpha.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/dist/es5/csw-capabilities-loader.js +1 -1
  2. package/dist/es5/csw-domain-loader.js +1 -1
  3. package/dist/es5/csw-records-loader.js +1 -1
  4. package/dist/es5/gml-loader.js +1 -1
  5. package/dist/es5/gml-loader.js.map +1 -1
  6. package/dist/es5/lerc-loader.js +1 -1
  7. package/dist/es5/lerc-loader.js.map +1 -1
  8. package/dist/es5/lib/parsers/gml/parse-gml.js.map +1 -1
  9. package/dist/es5/wip/wcs-capabilities-loader.js +1 -1
  10. package/dist/es5/wip/wfs-capabilities-loader.js +1 -1
  11. package/dist/es5/wip/wmts-capabilities-loader.js +1 -1
  12. package/dist/es5/wms-capabilities-loader.js +1 -1
  13. package/dist/es5/wms-error-loader.js +1 -1
  14. package/dist/esm/csw-capabilities-loader.js +1 -1
  15. package/dist/esm/csw-domain-loader.js +1 -1
  16. package/dist/esm/csw-records-loader.js +1 -1
  17. package/dist/esm/gml-loader.js +1 -1
  18. package/dist/esm/gml-loader.js.map +1 -1
  19. package/dist/esm/lerc-loader.js +1 -1
  20. package/dist/esm/lerc-loader.js.map +1 -1
  21. package/dist/esm/lib/parsers/gml/parse-gml.js.map +1 -1
  22. package/dist/esm/wip/wcs-capabilities-loader.js +1 -1
  23. package/dist/esm/wip/wfs-capabilities-loader.js +1 -1
  24. package/dist/esm/wip/wmts-capabilities-loader.js +1 -1
  25. package/dist/esm/wms-capabilities-loader.js +1 -1
  26. package/dist/esm/wms-error-loader.js +1 -1
  27. package/dist/gml-loader.d.ts +2 -1
  28. package/dist/gml-loader.d.ts.map +1 -1
  29. package/dist/lerc-loader.d.ts +2 -1
  30. package/dist/lerc-loader.d.ts.map +1 -1
  31. package/dist/lib/parsers/gml/parse-gml.d.ts +1 -0
  32. package/dist/lib/parsers/gml/parse-gml.d.ts.map +1 -1
  33. package/package.json +6 -6
  34. package/src/gml-loader.ts +2 -1
  35. package/src/lerc-loader.ts +1 -1
  36. package/src/lib/parsers/gml/parse-gml.ts +2 -0
  37. package/dist/bundle.js +0 -6
  38. package/dist/csw-capabilities-loader.js +0 -30
  39. package/dist/csw-domain-loader.js +0 -30
  40. package/dist/csw-records-loader.js +0 -30
  41. package/dist/gml-loader.js +0 -30
  42. package/dist/index.js +0 -39
  43. package/dist/lerc-loader.js +0 -55
  44. package/dist/lib/create-image-source.js +0 -39
  45. package/dist/lib/parsers/csw/parse-csw-capabilities.js +0 -24
  46. package/dist/lib/parsers/csw/parse-csw-domain.js +0 -33
  47. package/dist/lib/parsers/csw/parse-csw-records.js +0 -58
  48. package/dist/lib/parsers/csw/parse-exception-report.js +0 -30
  49. package/dist/lib/parsers/gml/deep-strict-equal.js +0 -119
  50. package/dist/lib/parsers/gml/parse-gml.js +0 -371
  51. package/dist/lib/parsers/lerc/lerc-types.js +0 -3
  52. package/dist/lib/parsers/wms/parse-wms-capabilities.js +0 -233
  53. package/dist/lib/parsers/wms/parse-wms-error.js +0 -22
  54. package/dist/lib/parsers/wms/parse-wms-features.js +0 -27
  55. package/dist/lib/parsers/wms/parse-wms-layer-description.js +0 -15
  56. package/dist/lib/parsers/xml/parse-xml-helpers.js +0 -68
  57. package/dist/lib/services/arcgis/arcgis-image-service.js +0 -94
  58. package/dist/lib/services/arcgis/arcgis-server.js +0 -42
  59. package/dist/lib/services/generic/image-service.js +0 -47
  60. package/dist/lib/services/ogc/csw-service.js +0 -168
  61. package/dist/lib/services/ogc/wms-service.js +0 -309
  62. package/dist/lib/sources/data-source.js +0 -56
  63. package/dist/lib/sources/image-source.js +0 -13
  64. package/dist/lib/sources/tile-source.js +0 -13
  65. package/dist/lib/sources/utils/utils.js +0 -38
  66. package/dist/lib/wfs/parse-wfs.js +0 -32
  67. package/dist/lib/wmts/parse-wmts.js +0 -35
  68. package/dist/wip/arcgis-feature-service.js +0 -28
  69. package/dist/wip/data-source.js +0 -59
  70. package/dist/wip/lib/wcs/parse-wcs-capabilities.js +0 -15
  71. package/dist/wip/lib/wfs/parse-wfs-capabilities.js +0 -19
  72. package/dist/wip/lib/wmts/parse-wmts-capabilities.js +0 -77
  73. package/dist/wip/wcs-capabilities-loader.js +0 -31
  74. package/dist/wip/wfs-capabilities-loader.js +0 -31
  75. package/dist/wip/wms-feature-info-loader.js +0 -18
  76. package/dist/wip/wms-layer-description-loader.js +0 -17
  77. package/dist/wip/wmts-capabilities-loader.js +0 -32
  78. package/dist/wms-capabilities-loader.js +0 -34
  79. package/dist/wms-error-loader.js +0 -42
@@ -1,68 +0,0 @@
1
- "use strict";
2
- // loaders.gl, MIT license
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.getXMLBoolean = exports.getXMLInteger = exports.getXMLFloat = exports.getXMLStringArray = exports.getXMLArray = void 0;
5
- /** A single element of an array is not represented as an array in XML */
6
- function getXMLArray(xmlValue) {
7
- // Already an array, return as is
8
- if (Array.isArray(xmlValue)) {
9
- return xmlValue;
10
- }
11
- // Single value, wrap in array
12
- if (xmlValue) {
13
- return [xmlValue];
14
- }
15
- // nullish, return empty array
16
- return [];
17
- }
18
- exports.getXMLArray = getXMLArray;
19
- /** Get a list of strings from XML */
20
- function getXMLStringArray(xmlValue) {
21
- const xmlArray = getXMLArray(xmlValue);
22
- if (xmlArray.length > 0 && xmlArray.every((_) => typeof _ === 'string')) {
23
- return xmlArray;
24
- }
25
- // TODO - error handling?
26
- return [];
27
- }
28
- exports.getXMLStringArray = getXMLStringArray;
29
- /** Get XML float */
30
- function getXMLFloat(xmlValue, defaultValue = undefined) {
31
- switch (typeof xmlValue) {
32
- case 'number':
33
- return xmlValue;
34
- case 'string':
35
- return parseFloat(xmlValue);
36
- default:
37
- return undefined;
38
- }
39
- }
40
- exports.getXMLFloat = getXMLFloat;
41
- /** Get XML integer */
42
- function getXMLInteger(xmlValue, defaultValue = undefined) {
43
- switch (typeof xmlValue) {
44
- case 'number':
45
- return xmlValue;
46
- case 'string':
47
- return parseInt(xmlValue, 10);
48
- default:
49
- return undefined;
50
- }
51
- }
52
- exports.getXMLInteger = getXMLInteger;
53
- /** Somewhat arbitrary boolean parsing */
54
- function getXMLBoolean(xmlValue) {
55
- switch (xmlValue) {
56
- case 'true':
57
- return true;
58
- case 'false':
59
- return false;
60
- case '1':
61
- return true;
62
- case '0':
63
- return false;
64
- default:
65
- return false;
66
- }
67
- }
68
- exports.getXMLBoolean = getXMLBoolean;
@@ -1,94 +0,0 @@
1
- "use strict";
2
- // loaders.gl, MIT license
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.ArcGISImageServer = void 0;
5
- const image_source_1 = require("../../sources/image-source");
6
- /**
7
- * ArcGIS ImageServer
8
- * Note - exports a big API, that could be exposed here if there is a use case
9
- * @see https://developers.arcgis.com/rest/services-reference/enterprise/image-service.htm
10
- */
11
- class ArcGISImageServer extends image_source_1.ImageSource {
12
- constructor(props) {
13
- super(props);
14
- }
15
- // ImageSource (normalized endpoints)
16
- async getMetadata() {
17
- return (await this.metadata());
18
- // TODO - normalize metadata
19
- }
20
- async getImage(parameters) {
21
- throw new Error('not implemented');
22
- // TODO - Map generic parameters to ArcGIS specific parameters
23
- // return await this.exportImage(parameters);
24
- }
25
- // ImageServer endpoints
26
- async metadata() {
27
- // We just need a JSON parsing...
28
- // return this.getUrl({path: '', ...options});
29
- throw new Error('not implemented');
30
- }
31
- /**
32
- * Form a URL to an ESRI ImageServer
33
- // https://sampleserver6.arcgisonline.com/arcgis/rest/services/NLCDLandCover2001/ImageServer/exportImage?bbox=${bounds[0]},${bounds[1]},${bounds[2]},${bounds[3]}&bboxSR=4326&size=${width},${height}&imageSR=102100&time=&format=jpgpng&pixelType=U8&noData=&noDataInterpretation=esriNoDataMatchAny&interpolation=+RSP_NearestNeighbor&compression=&compressionQuality=&bandIds=&mosaicRule=&renderingRule=&f=image`,
34
- */
35
- exportImage(options) {
36
- // See WMSService.getMap()
37
- throw new Error('not implemented');
38
- }
39
- // URL creators
40
- metadataURL(options) {
41
- return `${this.props.url}?f=pjson`;
42
- }
43
- /**
44
- * Form a URL to an ESRI ImageServer
45
- // https://sampleserver6.arcgisonline.com/arcgis/rest/services/NLCDLandCover2001/ImageServer/exportImage?
46
- // bbox=${bounds[0]},${bounds[1]},${bounds[2]},${bounds[3]}&bboxSR=4326&
47
- // size=${width},${height}&imageSR=102100&time=&format=jpgpng&pixelType=U8&
48
- // noData=&noDataInterpretation=esriNoDataMatchAny&interpolation=+RSP_NearestNeighbor&compression=&
49
- // compressionQuality=&bandIds=&mosaicRule=&renderingRule=&
50
- // f=image
51
- */
52
- exportImageURL(options) {
53
- const bbox = `bbox=${options.bbox[0]},${options.bbox[1]},${options.bbox[2]},${options.bbox[3]}`;
54
- const size = `size=${options.width},${options.height}`;
55
- const arcgisOptions = { ...options, bbox, size };
56
- // @ts-expect-error
57
- delete arcgisOptions.width;
58
- // @ts-expect-error
59
- delete arcgisOptions.height;
60
- return this.getUrl('exportImage', arcgisOptions);
61
- }
62
- // INTERNAL METHODS
63
- /**
64
- * @note protected, since perhaps getWMSUrl may need to be overridden to handle certain backends?
65
- * @note if override is common, maybe add a callback prop?
66
- * */
67
- getUrl(path, options, extra) {
68
- let url = `${this.props.url}/${path}`;
69
- let first = true;
70
- for (const [key, value] of Object.entries(options)) {
71
- url += first ? '?' : '&';
72
- first = false;
73
- if (Array.isArray(value)) {
74
- url += `${key.toUpperCase()}=${value.join(',')}`;
75
- }
76
- else {
77
- url += `${key.toUpperCase()}=${value ? String(value) : ''}`;
78
- }
79
- }
80
- return url;
81
- }
82
- /** Checks for and parses a WMS XML formatted ServiceError and throws an exception */
83
- async checkResponse(response) {
84
- if (!response.ok) {
85
- // } || response.headers['content-type'] === WMSErrorLoader.mimeTypes[0]) {
86
- // const arrayBuffer = await response.arrayBuffer();
87
- // const error = await WMSErrorLoader.parse(arrayBuffer, this.loadOptions);
88
- throw new Error('error');
89
- }
90
- }
91
- }
92
- exports.ArcGISImageServer = ArcGISImageServer;
93
- ArcGISImageServer.type = 'arcgis-image-server';
94
- ArcGISImageServer.testURL = (url) => url.toLowerCase().includes('ImageServer');
@@ -1,42 +0,0 @@
1
- "use strict";
2
- // loaders.gl, MIT license
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.getArcGISServices = void 0;
5
- /**
6
- * (Recursively) load the service directory from an ArcGIS Server URL
7
- * @param url
8
- * @param fetchFile= Optional fetch function override
9
- * @returns
10
- */
11
- async function getArcGISServices(url, fetchFile = fetch) {
12
- if (url.includes('rest/services')) {
13
- const serverUrl = url.replace(/rest\/services.*$/i, 'rest/services');
14
- return loadServiceDirectory(serverUrl, fetchFile, []);
15
- }
16
- return null;
17
- }
18
- exports.getArcGISServices = getArcGISServices;
19
- async function loadServiceDirectory(serverUrl, fetch, path) {
20
- const serviceUrl = `${serverUrl}/${path.join('/')}`;
21
- const response = await fetch(`${serviceUrl}?f=pjson`);
22
- const directory = await response.json();
23
- const services = extractServices(directory, serviceUrl);
24
- const folders = (directory.folders || []);
25
- const promises = folders.map((folder) => loadServiceDirectory(`${serverUrl}`, fetch, [...path, folder]));
26
- for (const folderServices of await Promise.all(promises)) {
27
- services.push(...folderServices);
28
- }
29
- return services;
30
- }
31
- function extractServices(directory, url) {
32
- const arcgisServices = (directory.services || []);
33
- const services = [];
34
- for (const service of arcgisServices) {
35
- services.push({
36
- name: service.name,
37
- type: `arcgis-${service.type.toLocaleLowerCase().replace('server', '-server')}`,
38
- url: `${url}${service.name}/${service.type}`
39
- });
40
- }
41
- return services;
42
- }
@@ -1,47 +0,0 @@
1
- "use strict";
2
- // loaders.gl, MIT license
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.ImageService = void 0;
5
- const images_1 = require("@loaders.gl/images");
6
- const image_source_1 = require("../../sources/image-source");
7
- /**
8
- * Quickly connect to "ad hoc" image sources without subclassing ImageSource.
9
- * ImageSource allows template url strings to be used to ad hoc connect to arbitrary image data sources
10
- * Accepts a template url string and builds requests URLs
11
- */
12
- class ImageService extends image_source_1.ImageSource {
13
- constructor(props) {
14
- super(props);
15
- }
16
- // IMAGE SOURCE API
17
- async getMetadata() {
18
- throw new Error('ImageSource.getMetadata not implemented');
19
- }
20
- async getImage(parameters) {
21
- const granularParameters = this.getGranularParameters(parameters);
22
- const url = this.getURLFromTemplate(granularParameters);
23
- const response = await this.fetch(url);
24
- const arrayBuffer = await response.arrayBuffer();
25
- return await images_1.ImageLoader.parse(arrayBuffer);
26
- }
27
- // HELPERS
28
- /** Break up bounding box in east, north, south, west */
29
- getGranularParameters(parameters) {
30
- const [east, north, west, south] = parameters.bbox;
31
- return { ...parameters, east, north, south, west };
32
- }
33
- /** Supports both ${} and {} notations */
34
- getURLFromTemplate(parameters) {
35
- let url = this.props.url;
36
- for (const [key, value] of Object.entries(parameters)) {
37
- // TODO - parameter could be repeated
38
- // const regex = new RegExp(`\${${key}}`, 'g');
39
- url = url.replace(`\${${key}}`, String(value));
40
- url = url.replace(`{${key}}`, String(value));
41
- }
42
- return url;
43
- }
44
- }
45
- exports.ImageService = ImageService;
46
- ImageService.type = 'template';
47
- ImageService.testURL = (url) => url.toLowerCase().includes('{');
@@ -1,168 +0,0 @@
1
- "use strict";
2
- // loaders.gl, MIT license
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.CSWService = void 0;
5
- const data_source_1 = require("../../sources/data-source");
6
- const csw_capabilities_loader_1 = require("../../../csw-capabilities-loader");
7
- const csw_records_loader_1 = require("../../../csw-records-loader");
8
- const csw_domain_loader_1 = require("../../../csw-domain-loader");
9
- const wms_error_loader_1 = require("../../../wms-error-loader");
10
- /**
11
- * The CSWService class
12
- * - provides type safe methods to form URLs to a CSW service
13
- * - provides type safe methods to query and parse results (and errors) from a CSW service
14
- * @note Only the URL parameter conversion is supported. XML posts are not supported.
15
- */
16
- class CSWService extends data_source_1.DataSource {
17
- /** Create a CSWService */
18
- constructor(props) {
19
- super(props);
20
- this.capabilities = null;
21
- /** A list of loaders used by the CSWService methods */
22
- this.loaders = [wms_error_loader_1.WMSErrorLoader, csw_capabilities_loader_1.CSWCapabilitiesLoader];
23
- }
24
- async getMetadata() {
25
- const capabilities = await this.getCapabilities();
26
- return this.normalizeMetadata(capabilities);
27
- }
28
- normalizeMetadata(capabilities) {
29
- return capabilities;
30
- }
31
- async getServiceDirectory(options) {
32
- const services = [];
33
- const unknownServices = [];
34
- const records = await this.getRecords();
35
- for (const record of records.records) {
36
- for (const reference of record.references) {
37
- const url = reference.value;
38
- switch (reference.scheme) {
39
- case 'OGC:WMS':
40
- services.push({ name: record.title, type: 'ogc-wms-service', ...this._parseOGCUrl(url) });
41
- break;
42
- case 'OGC:WMTS':
43
- services.push({
44
- name: record.title,
45
- type: 'ogc-wmts-service',
46
- ...this._parseOGCUrl(url)
47
- });
48
- break;
49
- case 'OGC:WFS':
50
- services.push({ name: record.title, type: 'ogc-wfs-service', ...this._parseOGCUrl(url) });
51
- break;
52
- default:
53
- unknownServices.push({
54
- name: record.title,
55
- type: 'unknown',
56
- url: reference.value,
57
- scheme: reference.scheme
58
- });
59
- }
60
- }
61
- }
62
- return options?.includeUnknown ? services.concat(unknownServices) : services;
63
- }
64
- _parseOGCUrl(url) {
65
- const parts = url.split('?');
66
- return {
67
- url: parts[0],
68
- params: parts[1] || ''
69
- };
70
- }
71
- // CSW Service API Stubs
72
- /** Get Capabilities */
73
- async getCapabilities(wmsParameters, vendorParameters) {
74
- const url = this.getCapabilitiesURL(wmsParameters, vendorParameters);
75
- const response = await this.fetch(url);
76
- const arrayBuffer = await response.arrayBuffer();
77
- this._checkResponse(response, arrayBuffer);
78
- const capabilities = await csw_capabilities_loader_1.CSWCapabilitiesLoader.parse(arrayBuffer, this.props.loadOptions);
79
- return capabilities;
80
- }
81
- /** Get Records */
82
- async getRecords(wmsParameters, vendorParameters) {
83
- const url = this.getRecordsURL(wmsParameters, vendorParameters);
84
- const response = await this.fetch(url);
85
- const arrayBuffer = await response.arrayBuffer();
86
- this._checkResponse(response, arrayBuffer);
87
- return await csw_records_loader_1.CSWRecordsLoader.parse(arrayBuffer, this.props.loadOptions);
88
- }
89
- /** Get Domain */
90
- async getDomain(wmsParameters, vendorParameters) {
91
- const url = this.getDomainURL(wmsParameters, vendorParameters);
92
- const response = await this.fetch(url);
93
- const arrayBuffer = await response.arrayBuffer();
94
- this._checkResponse(response, arrayBuffer);
95
- return await csw_domain_loader_1.CSWDomainLoader.parse(arrayBuffer, this.props.loadOptions);
96
- }
97
- // Typed URL creators
98
- // For applications that want full control of fetching and parsing
99
- /** Generate a URL for the GetCapabilities request */
100
- getCapabilitiesURL(wmsParameters, vendorParameters) {
101
- const options = {
102
- version: '3.0.0',
103
- ...wmsParameters,
104
- ...vendorParameters,
105
- service: 'CSW',
106
- request: 'GetCapabilities'
107
- };
108
- return this._getCSWUrl(options, vendorParameters);
109
- }
110
- /** Generate a URL for the GetCapabilities request */
111
- getRecordsURL(wmsParameters, vendorParameters) {
112
- const options = {
113
- version: '3.0.0',
114
- typenames: 'csw:Record',
115
- ...wmsParameters,
116
- ...vendorParameters,
117
- service: 'CSW',
118
- request: 'GetRecords'
119
- };
120
- return this._getCSWUrl(options, vendorParameters);
121
- }
122
- /** Generate a URL for the GetCapabilities request */
123
- getDomainURL(wmsParameters, vendorParameters) {
124
- const options = {
125
- version: '3.0.0',
126
- ...wmsParameters,
127
- ...vendorParameters,
128
- service: 'CSW',
129
- request: 'GetDomain'
130
- };
131
- return this._getCSWUrl(options, vendorParameters);
132
- }
133
- // INTERNAL METHODS
134
- /**
135
- * @note case _getCSWUrl may need to be overridden to handle certain backends?
136
- * */
137
- _getCSWUrl(options, vendorParameters) {
138
- let url = this.props.url;
139
- let first = true;
140
- for (const [key, value] of Object.entries(options)) {
141
- url += first ? '?' : '&';
142
- first = false;
143
- if (Array.isArray(value)) {
144
- url += `${key.toUpperCase()}=${value.join(',')}`;
145
- }
146
- else {
147
- url += `${key.toUpperCase()}=${value ? String(value) : ''}`;
148
- }
149
- }
150
- return encodeURI(url);
151
- }
152
- /** Checks for and parses a CSW XML formatted ServiceError and throws an exception */
153
- _checkResponse(response, arrayBuffer) {
154
- const contentType = response.headers['content-type'];
155
- if (!response.ok || wms_error_loader_1.WMSErrorLoader.mimeTypes.includes(contentType)) {
156
- const error = wms_error_loader_1.WMSErrorLoader.parseSync?.(arrayBuffer, this.props.loadOptions);
157
- throw new Error(error);
158
- }
159
- }
160
- /** Error situation detected */
161
- _parseError(arrayBuffer) {
162
- const error = wms_error_loader_1.WMSErrorLoader.parseSync?.(arrayBuffer, this.props.loadOptions);
163
- return new Error(error);
164
- }
165
- }
166
- exports.CSWService = CSWService;
167
- CSWService.type = 'csw';
168
- CSWService.testURL = (url) => url.toLowerCase().includes('csw');