@loaders.gl/wms 3.3.0-alpha.10

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 (49) hide show
  1. package/LICENSE +41 -0
  2. package/README.md +7 -0
  3. package/dist/dist.min.js +2277 -0
  4. package/dist/es5/bundle.js +6 -0
  5. package/dist/es5/bundle.js.map +1 -0
  6. package/dist/es5/index.js +34 -0
  7. package/dist/es5/index.js.map +1 -0
  8. package/dist/es5/lib/data-sources/image-data-source.js +4 -0
  9. package/dist/es5/lib/data-sources/image-data-source.js.map +1 -0
  10. package/dist/es5/lib/data-sources/wms-data-source.js +223 -0
  11. package/dist/es5/lib/data-sources/wms-data-source.js.map +1 -0
  12. package/dist/es5/lib/parse-wms.js +102 -0
  13. package/dist/es5/lib/parse-wms.js.map +1 -0
  14. package/dist/es5/wms-capabilities-loader.js +54 -0
  15. package/dist/es5/wms-capabilities-loader.js.map +1 -0
  16. package/dist/es5/wms-feature-info-loader.js +44 -0
  17. package/dist/es5/wms-feature-info-loader.js.map +1 -0
  18. package/dist/es5/wms-layer-description-loader.js +44 -0
  19. package/dist/es5/wms-layer-description-loader.js.map +1 -0
  20. package/dist/es5/wms-types.js +2 -0
  21. package/dist/es5/wms-types.js.map +1 -0
  22. package/dist/esm/bundle.js +6 -0
  23. package/dist/esm/bundle.js.map +1 -0
  24. package/dist/esm/index.js +7 -0
  25. package/dist/esm/index.js.map +1 -0
  26. package/dist/esm/lib/data-sources/image-data-source.js +2 -0
  27. package/dist/esm/lib/data-sources/image-data-source.js.map +1 -0
  28. package/dist/esm/lib/data-sources/wms-data-source.js +70 -0
  29. package/dist/esm/lib/data-sources/wms-data-source.js.map +1 -0
  30. package/dist/esm/lib/parse-wms.js +70 -0
  31. package/dist/esm/lib/parse-wms.js.map +1 -0
  32. package/dist/esm/wms-capabilities-loader.js +25 -0
  33. package/dist/esm/wms-capabilities-loader.js.map +1 -0
  34. package/dist/esm/wms-feature-info-loader.js +14 -0
  35. package/dist/esm/wms-feature-info-loader.js.map +1 -0
  36. package/dist/esm/wms-layer-description-loader.js +14 -0
  37. package/dist/esm/wms-layer-description-loader.js.map +1 -0
  38. package/dist/esm/wms-types.js +2 -0
  39. package/dist/esm/wms-types.js.map +1 -0
  40. package/package.json +43 -0
  41. package/src/bundle.ts +6 -0
  42. package/src/index.ts +13 -0
  43. package/src/lib/data-sources/image-data-source.ts +84 -0
  44. package/src/lib/data-sources/wms-data-source.ts +99 -0
  45. package/src/lib/parse-wms.ts +92 -0
  46. package/src/wms-capabilities-loader.ts +40 -0
  47. package/src/wms-feature-info-loader.ts +21 -0
  48. package/src/wms-layer-description-loader.ts +21 -0
  49. package/src/wms-types.ts +2051 -0
@@ -0,0 +1,92 @@
1
+ // loaders.gl, MIT license
2
+
3
+ import type {
4
+ WMSCapabilities,
5
+ WMSLayer,
6
+ WMSRequest,
7
+ WMSFeatureInfo
8
+ // WMSFeature,
9
+ // WMSLayerDescription
10
+ } from '../wms-types';
11
+
12
+ import {XMLLoader} from '@loaders.gl/xml';
13
+
14
+ // GetCapabilities
15
+
16
+ /**
17
+ * Parses a typed data structure from raw XML for `GetCapabilities` response
18
+ * @note Error handlings is fairly weak
19
+ */
20
+ export function parseWMSCapabilities(text: string, options): WMSCapabilities {
21
+ const parsedXML = XMLLoader.parseTextSync(text, options);
22
+ const xmlCapabilities: any =
23
+ parsedXML.WMT_MS_Capabilities || parsedXML.WMS_Capabilities || parsedXML;
24
+ return extractCapabilities(xmlCapabilities);
25
+ }
26
+
27
+ /** Extract typed capability data from XML */
28
+ function extractCapabilities(xml: any): WMSCapabilities {
29
+ const capabilities: WMSCapabilities = {
30
+ name: xml.Service?.Name || 'unnamed',
31
+ title: xml.Service?.Title,
32
+ keywords: [],
33
+ requests: {},
34
+ layer: extractLayer(xml.Capability?.Layer),
35
+ raw: xml
36
+ };
37
+
38
+ for (const keyword of xml.Service?.KeywordList?.Keyword || []) {
39
+ capabilities.keywords.push(keyword);
40
+ }
41
+
42
+ for (const [name, xmlRequest] of Object.entries(xml.Capability?.Request || {})) {
43
+ capabilities.requests[name] = extractRequest(name, xmlRequest);
44
+ }
45
+
46
+ return capabilities;
47
+ }
48
+
49
+ /** Extract typed request data from XML */
50
+ function extractRequest(name: string, xmlRequest: any): WMSRequest {
51
+ const format: string | string[] = xmlRequest?.Format;
52
+ const mimeTypes: string[] = Array.isArray(format) ? format : [format];
53
+ return {name, mimeTypes};
54
+ }
55
+
56
+ /** Extract request data */
57
+ function extractLayer(xmlLayer: any): WMSLayer {
58
+ const layer: WMSLayer = {
59
+ name: xmlLayer?.Name,
60
+ title: xmlLayer?.Title,
61
+ srs: xmlLayer?.SRS || [],
62
+ layers: []
63
+ };
64
+
65
+ for (const xmlSubLayer of xmlLayer?.Layer || []) {
66
+ layer.layers?.push(extractLayer(xmlSubLayer));
67
+ }
68
+
69
+ return layer;
70
+ }
71
+
72
+ // GetFeatureInfo
73
+
74
+ /**
75
+ * Parses a typed data structure from raw XML for `GetFeatureInfo` response
76
+ * @note Error handlings is fairly weak
77
+ */
78
+ export function parseWMSFeatureInfo(text: string, options): WMSFeatureInfo {
79
+ const parsedXML = XMLLoader.parseTextSync(text, options);
80
+ const xmlFeatureInfo: any = parsedXML.FeatureInfoResponse?.FIELDS || [];
81
+
82
+ const xmlFeatures = Array.isArray(xmlFeatureInfo) ? xmlFeatureInfo : [xmlFeatureInfo];
83
+
84
+ return {
85
+ features: xmlFeatures.map((xmlFeature) => extractFeature(xmlFeature))
86
+ };
87
+ }
88
+
89
+ function extractFeature(xmlFeature: any) {
90
+ const xmlFields = xmlFeature || {};
91
+ return {attributes: xmlFields};
92
+ }
@@ -0,0 +1,40 @@
1
+ // loaders.gl, MIT license
2
+
3
+ import type {LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';
4
+ import {parseWMSCapabilities} from './lib/parse-wms';
5
+
6
+ // __VERSION__ is injected by babel-plugin-version-inline
7
+ // @ts-ignore TS2304: Cannot find name '__VERSION__'.
8
+ const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
9
+
10
+ export type WMSLoaderOptions = LoaderOptions & {
11
+ wms?: {};
12
+ };
13
+
14
+ /**
15
+ * Loader for the response to the WMS GetCapability request
16
+ */
17
+ export const WMSCapabilitiesLoader = {
18
+ name: 'WMS Capabilities',
19
+ id: 'wms-capabilities',
20
+
21
+ module: 'wms',
22
+ version: VERSION,
23
+ worker: false,
24
+ extensions: ['xml'],
25
+ mimeTypes: ['application/vnd.ogc.wms_xml', 'application/xml', 'text/xml'],
26
+ testText: testXMLFile,
27
+ options: {
28
+ wms: {}
29
+ },
30
+ parse: async (arrayBuffer: ArrayBuffer, options?: WMSLoaderOptions) =>
31
+ parseWMSCapabilities(new TextDecoder().decode(arrayBuffer), options),
32
+ parseTextSync: (text: string, options?: WMSLoaderOptions) => parseWMSCapabilities(text, options)
33
+ };
34
+
35
+ function testXMLFile(text: string): boolean {
36
+ // TODO - There could be space first.
37
+ return text.startsWith('<?xml');
38
+ }
39
+
40
+ export const _typecheckWMSCapabilitiesLoader: LoaderWithParser = WMSCapabilitiesLoader;
@@ -0,0 +1,21 @@
1
+ // loaders.gl, MIT license
2
+
3
+ import type {LoaderWithParser} from '@loaders.gl/loader-utils';
4
+ import {WMSCapabilitiesLoader, WMSLoaderOptions} from './wms-capabilities-loader';
5
+ import {parseWMSFeatureInfo} from './lib/parse-wms';
6
+
7
+ /**
8
+ * Loader for the response to the WMS GetFeatureInfo request
9
+ */
10
+ export const WMSFeatureInfoLoader = {
11
+ ...WMSCapabilitiesLoader,
12
+
13
+ name: 'WMS FeatureInfo',
14
+ id: 'wms-feature-info',
15
+
16
+ parse: async (arrayBuffer: ArrayBuffer, options?: WMSLoaderOptions) =>
17
+ parseWMSFeatureInfo(new TextDecoder().decode(arrayBuffer), options),
18
+ parseTextSync: (text: string, options?: WMSLoaderOptions) => parseWMSFeatureInfo(text, options)
19
+ };
20
+
21
+ export const _typecheckWMSFeatureInfoLoader: LoaderWithParser = WMSFeatureInfoLoader;
@@ -0,0 +1,21 @@
1
+ // loaders.gl, MIT license
2
+
3
+ import type {LoaderWithParser} from '@loaders.gl/loader-utils';
4
+ import {WMSCapabilitiesLoader, WMSLoaderOptions} from './wms-capabilities-loader';
5
+ import {parseWMSFeatureInfo} from './lib/parse-wms';
6
+
7
+ /**
8
+ * Loader for the response to the WMS GetFeatureInfo request
9
+ */
10
+ export const WMSLayerDescriptionLoader = {
11
+ ...WMSCapabilitiesLoader,
12
+
13
+ name: 'WMS DescribeLayer',
14
+ id: 'wms-layer-description',
15
+
16
+ parse: async (arrayBuffer: ArrayBuffer, options?: WMSLoaderOptions) =>
17
+ parseWMSFeatureInfo(new TextDecoder().decode(arrayBuffer), options),
18
+ parseTextSync: (text: string, options?: WMSLoaderOptions) => parseWMSFeatureInfo(text, options)
19
+ };
20
+
21
+ export const _typecheckWMSFeatureInfoLoader: LoaderWithParser = WMSLayerDescriptionLoader;