diff --git a/src/enums/common/artifact.ts b/src/enums/common/artifact.ts index e858e72..4314e41 100644 --- a/src/enums/common/artifact.ts +++ b/src/enums/common/artifact.ts @@ -1,23 +1,26 @@ -export enum ArtifactDEMType { - MODEL = 'MODEL', - METADATA = 'METADATA', - ROI = 'ROI', - LEGEND = 'LEGEND', -} +/* eslint-disable @typescript-eslint/naming-convention */ +import { LegendLinkType, ThumbnailLinkType } from './metadata/linkType'; -export enum ArtifactRasterType { - GPKG = 'GPKG', - LEGEND = 'LEGEND', - METADATA = 'METADATA', - THUMBNAILS_SMALL = 'THUMBNAILS_SMALL', - THUMBNAILS_MEDIUM = 'THUMBNAILS_MEDIUM', - THUMBNAILS_LARGE = 'THUMBNAILS_LARGE', -} +export const ArtifactDEMType = { + MODEL: 'MODEL', + METADATA: 'METADATA', + ROI: 'ROI', + ...LegendLinkType, +} as const; +export type ArtifactDEMType = (typeof ArtifactDEMType)[keyof typeof ArtifactDEMType]; -export enum Artifact3DType { - MODEL_3D = 'MODEL_3D', - METADATA = 'METADATA', - THUMBNAILS_SMALL = 'THUMBNAILS_SMALL', - THUMBNAILS_MEDIUM = 'THUMBNAILS_MEDIUM', - THUMBNAILS_LARGE = 'THUMBNAILS_LARGE', -} +export const ArtifactRasterType = { + GPKG: 'GPKG', + METADATA: 'METADATA', + ...LegendLinkType, + ...ThumbnailLinkType, +} as const; +export type ArtifactRasterType = (typeof ArtifactRasterType)[keyof typeof ArtifactRasterType]; + +export const Artifact3DType = { + MODEL_3D: 'MODEL_3D', + METADATA: 'METADATA', + ...ThumbnailLinkType, +} as const; +export type Artifact3DType = (typeof Artifact3DType)[keyof typeof Artifact3DType]; +/* eslint-enable @typescript-eslint/naming-convention */ diff --git a/src/enums/common/metadata/linkType.ts b/src/enums/common/metadata/linkType.ts index 2d14f02..112a988 100644 --- a/src/enums/common/metadata/linkType.ts +++ b/src/enums/common/metadata/linkType.ts @@ -1,61 +1 @@ -import { DemProtocolType, RasterProtocolType, ThreeDProtocolType, VectorProtocolType } from './protocolType'; - -/* eslint-disable @typescript-eslint/naming-convention */ - -export const ThumbnailLinkType = { - THUMBNAIL_S: 'THUMBNAIL_S', - THUMBNAIL_M: 'THUMBNAIL_M', - THUMBNAIL_L: 'THUMBNAIL_L', -} as const; -export type ThumbnailLinkType = (typeof ThumbnailLinkType)[keyof typeof ThumbnailLinkType]; - -export const LegendLinkType = { - LEGEND_DOC: 'LEGEND_DOC', - LEGEND_IMG: 'LEGEND_IMG', -} as const; -export type LegendLinkType = (typeof LegendLinkType)[keyof typeof LegendLinkType]; - -export const AssetLinkType = { - ...ThumbnailLinkType, - ...LegendLinkType, -} as const; -export type AssetLinkType = (typeof AssetLinkType)[keyof typeof AssetLinkType]; - -export const RasterLinkType = { - WMTS_KVP: 'WMTS_KVP', - WMTS_BASE: 'WMTS_BASE', - WMS_BASE: 'WMS_BASE', - WMTS: RasterProtocolType.WMTS, - WMS: RasterProtocolType.WMS, - WFS: RasterProtocolType.WFS, - ...AssetLinkType, -} as const; -export type RasterLinkType = (typeof RasterLinkType)[keyof typeof RasterLinkType]; - -export const ThreeDLinkType = { - ...ThreeDProtocolType, - ...ThumbnailLinkType, -} as const; -export type ThreeDLinkType = (typeof ThreeDLinkType)[keyof typeof ThreeDLinkType]; - -export const DemLinkType = { - ...DemProtocolType, - ...ThumbnailLinkType, - DOWNLOAD: 'DOWNLOAD', -} as const; -export type DemLinkType = (typeof DemLinkType)[keyof typeof DemLinkType]; - -export const VectorLinkType = { - ...VectorProtocolType, -} as const; -export type VectorLinkType = (typeof VectorLinkType)[keyof typeof VectorLinkType]; - -export const LinkType = { - ...RasterLinkType, - ...ThreeDLinkType, - ...DemLinkType, - ...VectorLinkType, -} as const; -export type LinkType = RasterLinkType | ThreeDLinkType | DemLinkType | VectorLinkType; - -/* eslint-enable @typescript-eslint/naming-convention */ +export * from './linkType/common'; diff --git a/src/enums/common/metadata/linkType/DemLinkType.ts b/src/enums/common/metadata/linkType/DemLinkType.ts new file mode 100644 index 0000000..553a468 --- /dev/null +++ b/src/enums/common/metadata/linkType/DemLinkType.ts @@ -0,0 +1,11 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +import { DemProtocolType } from '../protocolType/DemProtocolType'; +import { ThumbnailLinkType } from './common'; + +export const DemLinkType = { + ...DemProtocolType, + ...ThumbnailLinkType, + DOWNLOAD: 'DOWNLOAD', +} as const; +export type DemLinkType = (typeof DemLinkType)[keyof typeof DemLinkType]; +/* eslint-enable @typescript-eslint/naming-convention */ diff --git a/src/enums/common/metadata/linkType/RasterLinkType.ts b/src/enums/common/metadata/linkType/RasterLinkType.ts new file mode 100644 index 0000000..ca3f766 --- /dev/null +++ b/src/enums/common/metadata/linkType/RasterLinkType.ts @@ -0,0 +1,13 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +import { RasterProtocolType } from '../protocolType/RasterProtocolType'; +import { AssetLinkType } from './common'; + +export const RasterLinkType = { + WMTS_KVP: 'WMTS_KVP', + WMTS_BASE: 'WMTS_BASE', + WMS_BASE: 'WMS_BASE', + ...RasterProtocolType, + ...AssetLinkType, +} as const; +export type RasterLinkType = (typeof RasterLinkType)[keyof typeof RasterLinkType]; +/* eslint-enable @typescript-eslint/naming-convention */ diff --git a/src/enums/common/metadata/linkType/ThreeDLinkType.ts b/src/enums/common/metadata/linkType/ThreeDLinkType.ts new file mode 100644 index 0000000..7eb68fc --- /dev/null +++ b/src/enums/common/metadata/linkType/ThreeDLinkType.ts @@ -0,0 +1,10 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +import { ThreeDProtocolType } from '../protocolType/ThreeDProtocolType'; +import { ThumbnailLinkType } from './common'; + +export const ThreeDLinkType = { + ...ThreeDProtocolType, + ...ThumbnailLinkType, +} as const; +export type ThreeDLinkType = (typeof ThreeDLinkType)[keyof typeof ThreeDLinkType]; +/* eslint-enable @typescript-eslint/naming-convention */ diff --git a/src/enums/common/metadata/linkType/VectorLinkType.ts b/src/enums/common/metadata/linkType/VectorLinkType.ts new file mode 100644 index 0000000..196a420 --- /dev/null +++ b/src/enums/common/metadata/linkType/VectorLinkType.ts @@ -0,0 +1,8 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +import { VectorProtocolType } from '../protocolType/VectorProtocolType'; + +export const VectorLinkType = { + ...VectorProtocolType, +} as const; +export type VectorLinkType = (typeof VectorLinkType)[keyof typeof VectorLinkType]; +/* eslint-enable @typescript-eslint/naming-convention */ diff --git a/src/enums/common/metadata/linkType/common.ts b/src/enums/common/metadata/linkType/common.ts new file mode 100644 index 0000000..b825f70 --- /dev/null +++ b/src/enums/common/metadata/linkType/common.ts @@ -0,0 +1,20 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +export const ThumbnailLinkType = { + THUMBNAIL_S: 'THUMBNAIL_S', + THUMBNAIL_M: 'THUMBNAIL_M', + THUMBNAIL_L: 'THUMBNAIL_L', +} as const; +export type ThumbnailLinkType = (typeof ThumbnailLinkType)[keyof typeof ThumbnailLinkType]; + +export const LegendLinkType = { + LEGEND_DOC: 'LEGEND_DOC', + LEGEND_IMG: 'LEGEND_IMG', +} as const; +export type LegendLinkType = (typeof LegendLinkType)[keyof typeof LegendLinkType]; + +export const AssetLinkType = { + ...ThumbnailLinkType, + ...LegendLinkType, +} as const; +export type AssetLinkType = (typeof AssetLinkType)[keyof typeof AssetLinkType]; +/* eslint-enable @typescript-eslint/naming-convention */ diff --git a/src/enums/common/metadata/protocolType.ts b/src/enums/common/metadata/protocolType.ts index 47ebfc5..c7ca6c0 100644 --- a/src/enums/common/metadata/protocolType.ts +++ b/src/enums/common/metadata/protocolType.ts @@ -1,36 +1,30 @@ -export enum RasterProtocolType { - WMS = 'WMS', - WMTS = 'WMTS', - XYZ = 'XYZ', - OSM = 'OSM', - WFS = 'WFS', -} - -export enum ThreeDProtocolType { - COPC = 'COPC', - THREE_D_TILES = '3DTiles', - TERRAIN_QMESH = 'TERRAIN_QMESH', - WFS = 'WFS', -} - -export enum DemProtocolType { - WMTS = 'WMTS', - TERRAIN_QMESH = 'TERRAIN_QMESH', - WFS = 'WFS', - WCS = 'WCS', -} - -export enum VectorProtocolType { - WMTS = 'WMTS', - WFS = 'WFS', - VECTOR_TILES = 'VECTOR_TILES', -} +import { + OGC_ImageryProtocolType, + OGC_ThreeDProtocolType, + OGC_VectorProtocolType, + OPEN_ThreeDProtocolType, + OPEN_VectorProtocolType, + PROPRIETARY_DemProtocolType, + PROPRIETARY_ImageryProtocolType, +} from './protocolType/common'; // eslint-disable-next-line @typescript-eslint/naming-convention export const ProtocolType = { - ...RasterProtocolType, - ...ThreeDProtocolType, - ...DemProtocolType, - ...VectorProtocolType, + ...OGC_ImageryProtocolType, + ...PROPRIETARY_ImageryProtocolType, + ...OGC_VectorProtocolType, + ...OPEN_VectorProtocolType, + ...OGC_ThreeDProtocolType, + ...OPEN_ThreeDProtocolType, + ...PROPRIETARY_DemProtocolType, } as const; -export type ProtocolType = RasterProtocolType | ThreeDProtocolType | DemProtocolType | VectorProtocolType; +export type ProtocolType = + | import('./protocolType/common').OGC_ImageryProtocolType + | import('./protocolType/common').PROPRIETARY_ImageryProtocolType + | import('./protocolType/common').OGC_VectorProtocolType + | import('./protocolType/common').OPEN_VectorProtocolType + | import('./protocolType/common').OGC_ThreeDProtocolType + | import('./protocolType/common').OPEN_ThreeDProtocolType + | import('./protocolType/common').PROPRIETARY_DemProtocolType; + +export * from './protocolType/common'; diff --git a/src/enums/common/metadata/protocolType/DemProtocolType.ts b/src/enums/common/metadata/protocolType/DemProtocolType.ts new file mode 100644 index 0000000..0380923 --- /dev/null +++ b/src/enums/common/metadata/protocolType/DemProtocolType.ts @@ -0,0 +1,11 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +import { OGC_ImageryProtocolType, OGC_VectorProtocolType, PROPRIETARY_DemProtocolType } from './common'; + +export const DemProtocolType = { + WMTS: OGC_ImageryProtocolType.WMTS, + TERRAIN_QMESH: PROPRIETARY_DemProtocolType.TERRAIN_QMESH, + WFS: OGC_VectorProtocolType.WFS, + WCS: OGC_ImageryProtocolType.WCS, +} as const; +export type DemProtocolType = (typeof DemProtocolType)[keyof typeof DemProtocolType]; +/* eslint-enable @typescript-eslint/naming-convention */ diff --git a/src/enums/common/metadata/protocolType/RasterProtocolType.ts b/src/enums/common/metadata/protocolType/RasterProtocolType.ts new file mode 100644 index 0000000..b0d3bba --- /dev/null +++ b/src/enums/common/metadata/protocolType/RasterProtocolType.ts @@ -0,0 +1,10 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +import { OGC_ImageryProtocolType, OGC_VectorProtocolType } from './common'; + +export const RasterProtocolType = { + WMTS: OGC_ImageryProtocolType.WMTS, + WMS: OGC_ImageryProtocolType.WMS, + WFS: OGC_VectorProtocolType.WFS, +} as const; +export type RasterProtocolType = (typeof RasterProtocolType)[keyof typeof RasterProtocolType]; +/* eslint-enable @typescript-eslint/naming-convention */ diff --git a/src/enums/common/metadata/protocolType/ThreeDProtocolType.ts b/src/enums/common/metadata/protocolType/ThreeDProtocolType.ts new file mode 100644 index 0000000..3f831d3 --- /dev/null +++ b/src/enums/common/metadata/protocolType/ThreeDProtocolType.ts @@ -0,0 +1,11 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +import { OGC_ThreeDProtocolType, OGC_VectorProtocolType, OPEN_ThreeDProtocolType, PROPRIETARY_DemProtocolType } from './common'; + +export const ThreeDProtocolType = { + COPC: OPEN_ThreeDProtocolType.COPC, + THREE_D_TILES: OGC_ThreeDProtocolType.THREE_D_TILES, + TERRAIN_QMESH: PROPRIETARY_DemProtocolType.TERRAIN_QMESH, + WFS: OGC_VectorProtocolType.WFS, +} as const; +export type ThreeDProtocolType = (typeof ThreeDProtocolType)[keyof typeof ThreeDProtocolType]; +/* eslint-enable @typescript-eslint/naming-convention */ diff --git a/src/enums/common/metadata/protocolType/VectorProtocolType.ts b/src/enums/common/metadata/protocolType/VectorProtocolType.ts new file mode 100644 index 0000000..eac23b2 --- /dev/null +++ b/src/enums/common/metadata/protocolType/VectorProtocolType.ts @@ -0,0 +1,10 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +import { OGC_ImageryProtocolType, OGC_VectorProtocolType, OPEN_VectorProtocolType } from './common'; + +export const VectorProtocolType = { + WMTS: OGC_ImageryProtocolType.WMTS, + WFS: OGC_VectorProtocolType.WFS, + VECTOR_TILES: OPEN_VectorProtocolType.VECTOR_TILES, +} as const; +export type VectorProtocolType = (typeof VectorProtocolType)[keyof typeof VectorProtocolType]; +/* eslint-enable @typescript-eslint/naming-convention */ diff --git a/src/enums/common/metadata/protocolType/common.ts b/src/enums/common/metadata/protocolType/common.ts new file mode 100644 index 0000000..14231d0 --- /dev/null +++ b/src/enums/common/metadata/protocolType/common.ts @@ -0,0 +1,52 @@ +/* eslint-disable @typescript-eslint/naming-convention */ + +/* +Category Reference Guide: + +OGC: Open Geospatial Consortium Certified Open Industry Standard. +STD: Ubiquitous/De Facto Web Specification Standard. +OPEN: Open-Source or Open-Access Specification Format. +PROPRIETARY: Proprietary Corporate API / Enterprise Network Service Protocol. +INTERNAL: Embedded Cesium Core Debugging or Algorithmic Runtime Component. +*/ + +export const OGC_ImageryProtocolType = { + WMS: 'WMS', + WMTS: 'WMTS', + XYZ: 'XYZ', + WCS: 'WCS', +} as const; +export type OGC_ImageryProtocolType = (typeof OGC_ImageryProtocolType)[keyof typeof OGC_ImageryProtocolType]; + +export const PROPRIETARY_ImageryProtocolType = { + OSM: 'OSM', + MAPBOX_STYLE: 'MAPBOX_STYLE', + BING_MAPS: 'BING_MAPS', +} as const; +export type PROPRIETARY_ImageryProtocolType = (typeof PROPRIETARY_ImageryProtocolType)[keyof typeof PROPRIETARY_ImageryProtocolType]; + +export const OGC_VectorProtocolType = { + WFS: 'WFS', +} as const; +export type OGC_VectorProtocolType = (typeof OGC_VectorProtocolType)[keyof typeof OGC_VectorProtocolType]; + +export const OPEN_VectorProtocolType = { + VECTOR_TILES: 'VECTOR_TILES', +} as const; +export type OPEN_VectorProtocolType = (typeof OPEN_VectorProtocolType)[keyof typeof OPEN_VectorProtocolType]; + +export const OGC_ThreeDProtocolType = { + THREE_D_TILES: '3DTiles', +} as const; +export type OGC_ThreeDProtocolType = (typeof OGC_ThreeDProtocolType)[keyof typeof OGC_ThreeDProtocolType]; + +export const OPEN_ThreeDProtocolType = { + COPC: 'COPC', +} as const; +export type OPEN_ThreeDProtocolType = (typeof OPEN_ThreeDProtocolType)[keyof typeof OPEN_ThreeDProtocolType]; + +export const PROPRIETARY_DemProtocolType = { + TERRAIN_QMESH: 'TERRAIN_QMESH', +} as const; +export type PROPRIETARY_DemProtocolType = (typeof PROPRIETARY_DemProtocolType)[keyof typeof PROPRIETARY_DemProtocolType]; +/* eslint-enable @typescript-eslint/naming-convention */ diff --git a/tests/unit/linkType.spec.ts b/tests/unit/linkType.spec.ts index 3409d0f..1691167 100644 --- a/tests/unit/linkType.spec.ts +++ b/tests/unit/linkType.spec.ts @@ -1,70 +1,44 @@ -import { DemLinkType, LinkType, RasterLinkType, ThreeDLinkType, VectorLinkType } from '../../src/enums/common/metadata/linkType'; +import * as linkTypeModule from '../../src/enums/common/metadata/linkType'; +import { AssetLinkType, LegendLinkType, ThumbnailLinkType } from '../../src/enums/common/metadata/linkType'; const sorted = (values: string[]): string[] => [...values].sort((a, b) => a.localeCompare(b)); -describe('LinkType (combined enum-like construct)', () => { - it('exposes exactly the union of unique values across all four source enums', () => { - const expected = new Set([ - ...Object.values(RasterLinkType), - ...Object.values(ThreeDLinkType), - ...Object.values(DemLinkType), - ...Object.values(VectorLinkType), - ]); - expect(sorted(Object.values(LinkType))).toEqual(sorted(Array.from(expected))); +describe('linkType', () => { + it('exposes exactly the expected thumbnail values', () => { + expect(sorted(Object.values(ThumbnailLinkType))).toEqual(sorted(['THUMBNAIL_S', 'THUMBNAIL_M', 'THUMBNAIL_L'])); }); - it('deduplicates overlapping keys without losing information (same string value either way)', () => { - // WMTS appears in RasterLinkType, DemLinkType and VectorLinkType - all with the same value. - expect(LinkType.WMTS).toBe('WMTS'); - // WFS appears in RasterLinkType and VectorLinkType. - expect(LinkType.WFS).toBe('WFS'); - // TERRAIN_QMESH appears in ThreeDLinkType and DemLinkType. - expect(LinkType.TERRAIN_QMESH).toBe('TERRAIN_QMESH'); - // THUMBNAIL_S/M/L appear in RasterLinkType, ThreeDLinkType and DemLinkType. - expect(LinkType.THUMBNAIL_S).toBe('THUMBNAIL_S'); + it('exposes exactly the expected legend values', () => { + expect(sorted(Object.values(LegendLinkType))).toEqual(sorted(['LEGEND_DOC', 'LEGEND_IMG'])); }); - it('supports direct member (dot) access for values unique to a single source enum', () => { - expect(LinkType.WMTS_KVP).toBe('WMTS_KVP'); // raster-only - expect(LinkType.THREE_D_TILES).toBe('3DTiles'); // 3D-only - expect(LinkType.LEGEND_DOC).toBe('LEGEND_DOC'); // raster-only + it('composes AssetLinkType as exactly the union of thumbnail and legend values', () => { + const expected = new Set([...Object.values(ThumbnailLinkType), ...Object.values(LegendLinkType)]); + expect(sorted(Object.values(AssetLinkType))).toEqual(sorted(Array.from(expected))); }); - it('accepts every source enum member as a value of the LinkType type (compile-time contract)', () => { - // These assignments are the actual test: this file must compile. If the combined type were - // derived as `(typeof LinkType)[keyof typeof LinkType]` instead of the explicit union, some - // of these would fail to compile with TS2820 (verified during implementation) because - // object-spread keeps only one source enum's nominal type per overlapping key. - const a: LinkType = RasterLinkType.WMTS; - const b: LinkType = DemLinkType.WMTS; - const c: LinkType = VectorLinkType.WMTS; - const d: LinkType = RasterLinkType.WFS; - const e: LinkType = VectorLinkType.WFS; - const f: LinkType = ThreeDLinkType.TERRAIN_QMESH; - const g: LinkType = DemLinkType.TERRAIN_QMESH; - const h: LinkType = RasterLinkType.THUMBNAIL_S; - const i: LinkType = ThreeDLinkType.THUMBNAIL_S; - const j: LinkType = DemLinkType.THUMBNAIL_S; - const k: LinkType = RasterLinkType.LEGEND_DOC; - const l: LinkType = ThreeDLinkType.THREE_D_TILES; + it('supports direct member (dot) access', () => { + expect(ThumbnailLinkType.THUMBNAIL_S).toBe('THUMBNAIL_S'); + expect(LegendLinkType.LEGEND_DOC).toBe('LEGEND_DOC'); + expect(AssetLinkType.THUMBNAIL_L).toBe('THUMBNAIL_L'); + expect(AssetLinkType.LEGEND_IMG).toBe('LEGEND_IMG'); + }); + + it('is usable as a TypeScript type (not value-only)', () => { + const accept = (a: AssetLinkType): AssetLinkType => a; + const thumbnail: ThumbnailLinkType = ThumbnailLinkType.THUMBNAIL_M; + const legend: LegendLinkType = LegendLinkType.LEGEND_DOC; + + // Both source enums must stay assignable to the composed type. + expect(accept(thumbnail)).toBe('THUMBNAIL_M'); + expect(accept(legend)).toBe('LEGEND_DOC'); + }); - expect([a, b, c, d, e, f, g, h, i, j, k, l]).toEqual([ - 'WMTS', - 'WMTS', - 'WMTS', - 'WFS', - 'WFS', - 'TERRAIN_QMESH', - 'TERRAIN_QMESH', - 'THUMBNAIL_S', - 'THUMBNAIL_S', - 'THUMBNAIL_S', - 'LEGEND_DOC', - '3DTiles', - ]); + it('rejects a value that belongs to none of the exported enums', () => { + expect(Object.values(AssetLinkType)).not.toContain('NOT_A_REAL_LINK_TYPE'); }); - it('rejects a value that belongs to none of the four source enums', () => { - expect(Object.values(LinkType)).not.toContain('NOT_A_REAL_LINK_TYPE'); + it('no longer re-exports the domain-specific link enums (moved to mc-models)', () => { + expect(sorted(Object.keys(linkTypeModule))).toEqual(sorted(['ThumbnailLinkType', 'LegendLinkType', 'AssetLinkType'])); }); }); diff --git a/tests/unit/protocolType.spec.ts b/tests/unit/protocolType.spec.ts index 8aaa507..8157a31 100644 --- a/tests/unit/protocolType.spec.ts +++ b/tests/unit/protocolType.spec.ts @@ -10,7 +10,7 @@ const sorted = (values: string[]): string[] => [...values].sort((a, b) => a.loca describe('protocolType', () => { it('exposes exactly the expected values', () => { expect(sorted(Object.values(ProtocolType))).toEqual( - sorted(['WMS', 'WMTS', 'XYZ', 'OSM', 'WFS', 'WCS', 'COPC', '3DTiles', 'TERRAIN_QMESH', 'VECTOR_TILES']) + sorted(['WMS', 'WMTS', 'XYZ', 'OSM', 'MAPBOX_STYLE', 'BING_MAPS', 'WFS', 'WCS', 'COPC', '3DTiles', 'TERRAIN_QMESH', 'VECTOR_TILES']) ); });