@loaders.gl/wms
Version:
Framework-independent loaders for the WMS (Web Map Service) standard
65 lines (56 loc) • 2.11 kB
text/typescript
// loaders.gl
// SPDX-License-Identifier: MIT
// Copyright (c) vis.gl contributors
import type {LoaderWithParser} from '@loaders.gl/loader-utils';
import type {XMLLoaderOptions} from '@loaders.gl/xml';
import {WMSCapabilities, parseWMSCapabilities} from './lib/parsers/wms/parse-wms-capabilities';
// __VERSION__ is injected by babel-plugin-version-inline
// @ts-ignore TS2304: Cannot find name '__VERSION__'.
const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
// Parsed data types
export type {
WMSCapabilities,
WMSLayer,
WMSBoundingBox,
WMSDimension,
WMSRequest,
WMSExceptions
} from './lib/parsers/wms/parse-wms-capabilities';
export type WMSCapabilitiesLoaderOptions = XMLLoaderOptions & {
wms?: {
/** Add inherited layer information to sub layers */
inheritedLayerProps?: boolean;
/** Include the "raw" JSON (parsed but untyped, unprocessed XML). May contain additional fields */
includeRawJSON?: boolean;
/** Include the original XML document text. May contain additional information. */
includeXMLText?: boolean;
};
};
/**
* Loader for the response to the WMS GetCapability request
*/
export const WMSCapabilitiesLoader = {
dataType: null as unknown as WMSCapabilities,
batchType: null as never,
id: 'wms-capabilities',
name: 'WMS Capabilities',
module: 'wms',
version: VERSION,
worker: false,
extensions: ['xml'],
mimeTypes: ['application/vnd.ogc.wms_xml', 'application/xml', 'text/xml'],
testText: testXMLFile,
options: {
wms: {}
},
parse: async (arrayBuffer: ArrayBuffer, options?: WMSCapabilitiesLoaderOptions) =>
// TODO pass in XML options
parseWMSCapabilities(new TextDecoder().decode(arrayBuffer), options?.wms),
parseTextSync: (text: string, options?: WMSCapabilitiesLoaderOptions) =>
// TODO pass in XML options
parseWMSCapabilities(text, options?.wms)
} as const satisfies LoaderWithParser<WMSCapabilities, never, WMSCapabilitiesLoaderOptions>;
function testXMLFile(text: string): boolean {
// TODO - There could be space first.
return text.startsWith('<?xml');
}