@loaders.gl/arcgis 5.0.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 (125) hide show
  1. package/LICENSE +52 -0
  2. package/README.md +28 -0
  3. package/dist/arcgis/arcgis-capability-graph.d.ts +50 -0
  4. package/dist/arcgis/arcgis-capability-graph.d.ts.map +1 -0
  5. package/dist/arcgis/arcgis-capability-graph.js +221 -0
  6. package/dist/arcgis/arcgis-capability-graph.js.map +1 -0
  7. package/dist/arcgis/arcgis-feature-query.d.ts +53 -0
  8. package/dist/arcgis/arcgis-feature-query.d.ts.map +1 -0
  9. package/dist/arcgis/arcgis-feature-query.js +381 -0
  10. package/dist/arcgis/arcgis-feature-query.js.map +1 -0
  11. package/dist/arcgis/arcgis-feature-server-source-loader-types.d.ts +33 -0
  12. package/dist/arcgis/arcgis-feature-server-source-loader-types.d.ts.map +1 -0
  13. package/dist/arcgis/arcgis-feature-server-source-loader-types.js +21 -0
  14. package/dist/arcgis/arcgis-feature-server-source-loader-types.js.map +1 -0
  15. package/dist/arcgis/arcgis-feature-server-source-loader.d.ts +84 -0
  16. package/dist/arcgis/arcgis-feature-server-source-loader.d.ts.map +1 -0
  17. package/dist/arcgis/arcgis-feature-server-source-loader.js +280 -0
  18. package/dist/arcgis/arcgis-feature-server-source-loader.js.map +1 -0
  19. package/dist/arcgis/arcgis-image-server-source-loader-types.d.ts +31 -0
  20. package/dist/arcgis/arcgis-image-server-source-loader-types.d.ts.map +1 -0
  21. package/dist/arcgis/arcgis-image-server-source-loader-types.js +21 -0
  22. package/dist/arcgis/arcgis-image-server-source-loader-types.js.map +1 -0
  23. package/dist/arcgis/arcgis-image-server-source-loader.d.ts +60 -0
  24. package/dist/arcgis/arcgis-image-server-source-loader.d.ts.map +1 -0
  25. package/dist/arcgis/arcgis-image-server-source-loader.js +130 -0
  26. package/dist/arcgis/arcgis-image-server-source-loader.js.map +1 -0
  27. package/dist/arcgis/arcgis-image-tile-source-loader-types.d.ts +31 -0
  28. package/dist/arcgis/arcgis-image-tile-source-loader-types.d.ts.map +1 -0
  29. package/dist/arcgis/arcgis-image-tile-source-loader-types.js +21 -0
  30. package/dist/arcgis/arcgis-image-tile-source-loader-types.js.map +1 -0
  31. package/dist/arcgis/arcgis-image-tile-source-loader.d.ts +63 -0
  32. package/dist/arcgis/arcgis-image-tile-source-loader.d.ts.map +1 -0
  33. package/dist/arcgis/arcgis-image-tile-source-loader.js +147 -0
  34. package/dist/arcgis/arcgis-image-tile-source-loader.js.map +1 -0
  35. package/dist/arcgis/arcgis-map-tile-source-loader-types.d.ts +31 -0
  36. package/dist/arcgis/arcgis-map-tile-source-loader-types.d.ts.map +1 -0
  37. package/dist/arcgis/arcgis-map-tile-source-loader-types.js +21 -0
  38. package/dist/arcgis/arcgis-map-tile-source-loader-types.js.map +1 -0
  39. package/dist/arcgis/arcgis-map-tile-source-loader.d.ts +62 -0
  40. package/dist/arcgis/arcgis-map-tile-source-loader.d.ts.map +1 -0
  41. package/dist/arcgis/arcgis-map-tile-source-loader.js +196 -0
  42. package/dist/arcgis/arcgis-map-tile-source-loader.js.map +1 -0
  43. package/dist/arcgis/arcgis-scene-aggregation.d.ts +34 -0
  44. package/dist/arcgis/arcgis-scene-aggregation.d.ts.map +1 -0
  45. package/dist/arcgis/arcgis-scene-aggregation.js +57 -0
  46. package/dist/arcgis/arcgis-scene-aggregation.js.map +1 -0
  47. package/dist/arcgis/arcgis-scene-server-source-loader-types.d.ts +31 -0
  48. package/dist/arcgis/arcgis-scene-server-source-loader-types.d.ts.map +1 -0
  49. package/dist/arcgis/arcgis-scene-server-source-loader-types.js +21 -0
  50. package/dist/arcgis/arcgis-scene-server-source-loader-types.js.map +1 -0
  51. package/dist/arcgis/arcgis-scene-server-source-loader.d.ts +64 -0
  52. package/dist/arcgis/arcgis-scene-server-source-loader.d.ts.map +1 -0
  53. package/dist/arcgis/arcgis-scene-server-source-loader.js +159 -0
  54. package/dist/arcgis/arcgis-scene-server-source-loader.js.map +1 -0
  55. package/dist/arcgis/arcgis-server.d.ts +15 -0
  56. package/dist/arcgis/arcgis-server.d.ts.map +1 -0
  57. package/dist/arcgis/arcgis-server.js +41 -0
  58. package/dist/arcgis/arcgis-server.js.map +1 -0
  59. package/dist/arcgis/arcgis-url-utils.d.ts +3 -0
  60. package/dist/arcgis/arcgis-url-utils.d.ts.map +1 -0
  61. package/dist/arcgis/arcgis-url-utils.js +23 -0
  62. package/dist/arcgis/arcgis-url-utils.js.map +1 -0
  63. package/dist/arcgis/arcgis-vector-tile-server-source-loader-types.d.ts +31 -0
  64. package/dist/arcgis/arcgis-vector-tile-server-source-loader-types.d.ts.map +1 -0
  65. package/dist/arcgis/arcgis-vector-tile-server-source-loader-types.js +21 -0
  66. package/dist/arcgis/arcgis-vector-tile-server-source-loader-types.js.map +1 -0
  67. package/dist/arcgis/arcgis-vector-tile-server-source-loader.d.ts +66 -0
  68. package/dist/arcgis/arcgis-vector-tile-server-source-loader.d.ts.map +1 -0
  69. package/dist/arcgis/arcgis-vector-tile-server-source-loader.js +150 -0
  70. package/dist/arcgis/arcgis-vector-tile-server-source-loader.js.map +1 -0
  71. package/dist/arcgis-feature-query-types.d.ts +77 -0
  72. package/dist/arcgis-feature-query-types.d.ts.map +1 -0
  73. package/dist/arcgis-feature-query-types.js +5 -0
  74. package/dist/arcgis-feature-query-types.js.map +1 -0
  75. package/dist/arcgis-items.d.ts +64 -0
  76. package/dist/arcgis-items.d.ts.map +1 -0
  77. package/dist/arcgis-items.js +137 -0
  78. package/dist/arcgis-items.js.map +1 -0
  79. package/dist/arcgis-source-types.d.ts +372 -0
  80. package/dist/arcgis-source-types.d.ts.map +1 -0
  81. package/dist/arcgis-source-types.js +108 -0
  82. package/dist/arcgis-source-types.js.map +1 -0
  83. package/dist/authentication.d.ts +25 -0
  84. package/dist/authentication.d.ts.map +1 -0
  85. package/dist/authentication.js +94 -0
  86. package/dist/authentication.js.map +1 -0
  87. package/dist/bundled.d.ts +152 -0
  88. package/dist/bundled.d.ts.map +1 -0
  89. package/dist/bundled.js +34 -0
  90. package/dist/bundled.js.map +1 -0
  91. package/dist/index.cjs +25620 -0
  92. package/dist/index.cjs.map +6 -0
  93. package/dist/index.d.ts +24 -0
  94. package/dist/index.d.ts.map +1 -0
  95. package/dist/index.js +11 -0
  96. package/dist/index.js.map +1 -0
  97. package/dist/service-registry.d.ts +18 -0
  98. package/dist/service-registry.d.ts.map +1 -0
  99. package/dist/service-registry.js +29 -0
  100. package/dist/service-registry.js.map +1 -0
  101. package/package.json +96 -0
  102. package/src/arcgis/arcgis-capability-graph.ts +297 -0
  103. package/src/arcgis/arcgis-feature-query.ts +442 -0
  104. package/src/arcgis/arcgis-feature-server-source-loader-types.ts +34 -0
  105. package/src/arcgis/arcgis-feature-server-source-loader.ts +373 -0
  106. package/src/arcgis/arcgis-image-server-source-loader-types.ts +34 -0
  107. package/src/arcgis/arcgis-image-server-source-loader.ts +186 -0
  108. package/src/arcgis/arcgis-image-tile-source-loader-types.ts +34 -0
  109. package/src/arcgis/arcgis-image-tile-source-loader.ts +192 -0
  110. package/src/arcgis/arcgis-map-tile-source-loader-types.ts +34 -0
  111. package/src/arcgis/arcgis-map-tile-source-loader.ts +248 -0
  112. package/src/arcgis/arcgis-scene-aggregation.ts +90 -0
  113. package/src/arcgis/arcgis-scene-server-source-loader-types.ts +36 -0
  114. package/src/arcgis/arcgis-scene-server-source-loader.ts +216 -0
  115. package/src/arcgis/arcgis-server.ts +61 -0
  116. package/src/arcgis/arcgis-url-utils.ts +26 -0
  117. package/src/arcgis/arcgis-vector-tile-server-source-loader-types.ts +36 -0
  118. package/src/arcgis/arcgis-vector-tile-server-source-loader.ts +196 -0
  119. package/src/arcgis-feature-query-types.ts +89 -0
  120. package/src/arcgis-items.ts +233 -0
  121. package/src/arcgis-source-types.ts +372 -0
  122. package/src/authentication.ts +118 -0
  123. package/src/bundled.ts +68 -0
  124. package/src/index.ts +70 -0
  125. package/src/service-registry.ts +43 -0
@@ -0,0 +1,118 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import type {
6
+ AuthenticatedFetchOptions,
7
+ FetchLike,
8
+ RequestCredential,
9
+ TokenValue
10
+ } from '@loaders.gl/loader-utils';
11
+ import {
12
+ TokenAuthentication,
13
+ createAuthenticatedFetch,
14
+ createQueryParameterCredential
15
+ } from '@loaders.gl/loader-utils';
16
+
17
+ /** Maximum JSON error bytes retained by the authentication detector. */
18
+ const MAXIMUM_AUTHENTICATION_ERROR_BYTES = 16384;
19
+
20
+ /** ArcGIS token authentication independent of the application's sign-in SDK. */
21
+ export class ArcGISAuthentication extends TokenAuthentication {
22
+ /** Discriminator used in `core.credentials`. */
23
+ static readonly type = 'arcgis';
24
+ /** Creates an exact-origin ArcGIS credential. */
25
+ constructor(options: ArcGISCredentialOptions) {
26
+ super(createArcGISCredential(options));
27
+ }
28
+
29
+ /**
30
+ * Creates a fetch transport for discovery and service requests.
31
+ * Refreshes are isolated by trusted origin so server-specific tokens cannot cross hosts.
32
+ * Reuse the returned transport to deduplicate concurrent refreshes within each origin.
33
+ */
34
+ createFetch(options: Pick<AuthenticatedFetchOptions, 'fetch' | 'fetchOptions'> = {}): FetchLike {
35
+ return createAuthenticatedFetch({
36
+ ...options,
37
+ credentials: this.origins.map(origin =>
38
+ createArcGISCredential({
39
+ origins: [origin],
40
+ token: this.token
41
+ })
42
+ )
43
+ });
44
+ }
45
+ }
46
+
47
+ /** Options for an ArcGIS REST service credential. */
48
+ export type ArcGISCredentialOptions = {
49
+ /** ArcGIS token or application-managed token callback. */
50
+ token: TokenValue;
51
+ /** Exact ArcGIS Online or Enterprise origins authorized to receive the token. */
52
+ origins: readonly string[];
53
+ };
54
+
55
+ /** Creates an exact-origin ArcGIS `token` query credential. */
56
+ export function createArcGISCredential(options: ArcGISCredentialOptions): RequestCredential {
57
+ return {
58
+ ...createQueryParameterCredential({
59
+ id: 'arcgis-token',
60
+ origins: options.origins,
61
+ parameterName: 'token',
62
+ token: options.token,
63
+ refreshStatusCodes: [401, 403, 498, 499]
64
+ }),
65
+ shouldRefresh: isArcGISAuthenticationError,
66
+ canReplayRequest: canReplayArcGISRequest
67
+ };
68
+ }
69
+
70
+ /**
71
+ * Detects small JSON authentication errors without buffering successful feature/tile bodies.
72
+ * Only 498/499 envelopes trigger renewal; permission and query errors remain visible.
73
+ */
74
+ async function isArcGISAuthenticationError(response: Response): Promise<boolean> {
75
+ if (response.status !== 200 || !response.headers.get('content-type')?.includes('json'))
76
+ return false;
77
+ if (Number(response.headers.get('content-length')) > MAXIMUM_AUTHENTICATION_ERROR_BYTES)
78
+ return false;
79
+ const reader = response.clone().body?.getReader();
80
+ if (!reader) return false;
81
+ const chunks: Uint8Array[] = [];
82
+ let length = 0;
83
+ try {
84
+ while (true) {
85
+ const {value, done} = await reader.read();
86
+ if (done) {
87
+ const bytes = new Uint8Array(length);
88
+ let offset = 0;
89
+ for (const chunk of chunks) {
90
+ bytes.set(chunk, offset);
91
+ offset += chunk.length;
92
+ }
93
+ const json = JSON.parse(new TextDecoder().decode(bytes));
94
+ return json?.error?.code === 498 || json?.error?.code === 499;
95
+ }
96
+ if (value.byteLength > MAXIMUM_AUTHENTICATION_ERROR_BYTES - length) return false;
97
+ length += value.byteLength;
98
+ // Copy only accepted bytes so small views cannot retain oversized backing buffers.
99
+ chunks.push(value.slice());
100
+ }
101
+ } catch {
102
+ return false;
103
+ } finally {
104
+ // A tee cancellation can wait for the original consumer; do not await it here.
105
+ void reader.cancel().catch(() => {});
106
+ }
107
+ }
108
+
109
+ /** Permits string or URLSearchParams form POST queries on numbered feature or map layers. */
110
+ function canReplayArcGISRequest(url: string, request: RequestInit): boolean {
111
+ return (
112
+ request.method?.toUpperCase() === 'POST' &&
113
+ /\/(FeatureServer|MapServer)\/\d+\/query\/?$/i.test(new URL(url).pathname) &&
114
+ new Headers(request.headers).get('content-type')?.split(';')[0] ===
115
+ 'application/x-www-form-urlencoded' &&
116
+ (typeof request.body === 'string' || request.body instanceof URLSearchParams)
117
+ );
118
+ }
package/src/bundled.ts ADDED
@@ -0,0 +1,68 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import {ArcGISFeatureServerSourceLoaderWithParser as ArcGISFeatureServerSourceLoader} from './arcgis/arcgis-feature-server-source-loader';
6
+ export {
7
+ ArcGISFeatureServerSourceLoaderWithParser as ArcGISFeatureServerSourceLoader,
8
+ ArcGISVectorSource,
9
+ ArcGISFeatureQueryError
10
+ } from './arcgis/arcgis-feature-server-source-loader';
11
+ import {ArcGISImageServerSourceLoaderWithParser as ArcGISImageServerSourceLoader} from './arcgis/arcgis-image-server-source-loader';
12
+ export {
13
+ ArcGISImageServerSourceLoaderWithParser as ArcGISImageServerSourceLoader,
14
+ ArcGISImageSource
15
+ } from './arcgis/arcgis-image-server-source-loader';
16
+ import {ArcGISImageTileSourceLoaderWithParser as ArcGISImageTileSourceLoader} from './arcgis/arcgis-image-tile-source-loader';
17
+ export {
18
+ ArcGISImageTileSourceLoaderWithParser as ArcGISImageTileSourceLoader,
19
+ ArcGISImageTileSource
20
+ } from './arcgis/arcgis-image-tile-source-loader';
21
+ import {ArcGISMapTileSourceLoaderWithParser as ArcGISMapTileSourceLoader} from './arcgis/arcgis-map-tile-source-loader';
22
+ export {
23
+ ArcGISMapTileSourceLoaderWithParser as ArcGISMapTileSourceLoader,
24
+ ArcGISMapTileSource
25
+ } from './arcgis/arcgis-map-tile-source-loader';
26
+ import {ArcGISSceneServerSourceLoaderWithParser as ArcGISSceneServerSourceLoader} from './arcgis/arcgis-scene-server-source-loader';
27
+ export {
28
+ ArcGISSceneServerSourceLoaderWithParser as ArcGISSceneServerSourceLoader,
29
+ ArcGISSceneServerSource,
30
+ ArcGISSceneServerQueryError
31
+ } from './arcgis/arcgis-scene-server-source-loader';
32
+ import {ArcGISVectorTileServerSourceLoaderWithParser as ArcGISVectorTileServerSourceLoader} from './arcgis/arcgis-vector-tile-server-source-loader';
33
+ export {
34
+ ArcGISVectorTileServerSourceLoaderWithParser as ArcGISVectorTileServerSourceLoader,
35
+ ArcGISVectorTileServerSource
36
+ } from './arcgis/arcgis-vector-tile-server-source-loader';
37
+
38
+ export type * from './index';
39
+ export {
40
+ getArcGISServices,
41
+ discoverArcGISCapabilities,
42
+ selectArcGISService
43
+ } from './arcgis/arcgis-capability-graph';
44
+ export {aggregateArcGISSceneFeatures} from './arcgis/arcgis-scene-aggregation';
45
+ export {ArcGISAuthentication, createArcGISCredential} from './authentication';
46
+
47
+ /** A synchronous ArcGIS source loader, including its runtime implementation. */
48
+ export type ArcGISLoader = (typeof ARCGIS_LOADERS)[number];
49
+
50
+ /** All runtime ArcGIS loaders, in the same selection order as the package root. */
51
+ export const ARCGIS_LOADERS = [
52
+ ArcGISFeatureServerSourceLoader,
53
+ ArcGISImageServerSourceLoader,
54
+ ArcGISImageTileSourceLoader,
55
+ ArcGISMapTileSourceLoader,
56
+ ArcGISVectorTileServerSourceLoader,
57
+ ArcGISSceneServerSourceLoader
58
+ ];
59
+
60
+ /** Finds a runtime source loader by its canonical identifier or service type. */
61
+ export function getArcGISLoader(serviceType: string): ArcGISLoader | undefined {
62
+ const normalizedServiceType = serviceType.toLowerCase();
63
+ return ARCGIS_LOADERS.find(
64
+ loader => loader.id === normalizedServiceType || loader.type === normalizedServiceType
65
+ );
66
+ }
67
+
68
+ export {resolveArcGISItem} from './arcgis-items';
package/src/index.ts ADDED
@@ -0,0 +1,70 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ export type {Service as ArcGISService} from './arcgis/arcgis-server';
6
+ export type {
7
+ ArcGISCapabilityGraph,
8
+ ArcGISCapabilityGraphOptions,
9
+ ArcGISServiceCapabilities,
10
+ ArcGISServiceSelection
11
+ } from './arcgis/arcgis-capability-graph';
12
+
13
+ export {ArcGISFeatureServerSourceLoader} from './arcgis/arcgis-feature-server-source-loader-types';
14
+ export type {ArcGISVectorSource} from './arcgis/arcgis-feature-server-source-loader';
15
+ export {ArcGISImageServerSourceLoader} from './arcgis/arcgis-image-server-source-loader-types';
16
+ export type {ArcGISImageSource} from './arcgis/arcgis-image-server-source-loader';
17
+ export {ArcGISImageTileSourceLoader} from './arcgis/arcgis-image-tile-source-loader-types';
18
+ export type {ArcGISImageTileSource} from './arcgis/arcgis-image-tile-source-loader';
19
+ export {ArcGISMapTileSourceLoader} from './arcgis/arcgis-map-tile-source-loader-types';
20
+ export type {ArcGISMapTileSource} from './arcgis/arcgis-map-tile-source-loader';
21
+ export {ArcGISSceneServerSourceLoader} from './arcgis/arcgis-scene-server-source-loader-types';
22
+ export type {
23
+ ArcGISSceneServerSource,
24
+ ArcGISSceneServerQueryError
25
+ } from './arcgis/arcgis-scene-server-source-loader';
26
+ export {ArcGISVectorTileServerSourceLoader} from './arcgis/arcgis-vector-tile-server-source-loader-types';
27
+ export type {ArcGISVectorTileServerSource} from './arcgis/arcgis-vector-tile-server-source-loader';
28
+ export type {
29
+ ArcGISFeatureServiceQueryOptions,
30
+ ArcGISFeatureServerSourceLoaderOptions,
31
+ ArcGISExportImageParameters,
32
+ ArcGISImageSourceLoaderProps,
33
+ ArcGISImageTileSourceLoaderOptions,
34
+ ArcGISMapTileSourceLoaderOptions,
35
+ ArcGISVectorTileServiceMetadata,
36
+ ArcGISVectorTileServerSourceLoaderOptions,
37
+ ArcGISSceneServerSourceOptions,
38
+ ArcGISSceneQueryOptions,
39
+ ArcGISSceneQueryResult
40
+ } from './arcgis-source-types';
41
+
42
+ export type {
43
+ ArcGISSceneAggregationOperation,
44
+ ArcGISSceneAggregationSpec,
45
+ ArcGISSceneAggregationOptions,
46
+ ArcGISSceneAggregationGroup
47
+ } from './arcgis/arcgis-scene-aggregation';
48
+
49
+ export type {ArcGISLoader} from './service-registry';
50
+ export {ARCGIS_LOADERS, getArcGISLoader} from './service-registry';
51
+
52
+ export type {ArcGISAuthentication} from './authentication';
53
+ export type {ArcGISCredentialOptions} from './authentication';
54
+
55
+ export type {
56
+ ArcGISFeatureQueryParameters,
57
+ ArcGISFeatureQueryOptions,
58
+ ArcGISFeatureQueryProgress,
59
+ ArcGISFeatureQueryResult,
60
+ ArcGISFeatureObjectIds,
61
+ ArcGISFeatureExtent
62
+ } from './arcgis-feature-query-types';
63
+ export type {ArcGISFeatureQueryError} from './arcgis/arcgis-feature-query';
64
+
65
+ export type {
66
+ ArcGISItem,
67
+ ArcGISItemLayer,
68
+ ArcGISItemResolution,
69
+ ArcGISItemOptions
70
+ } from './arcgis-items';
@@ -0,0 +1,43 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import {ArcGISFeatureServerSourceLoader} from './arcgis/arcgis-feature-server-source-loader-types';
6
+ import {ArcGISImageServerSourceLoader} from './arcgis/arcgis-image-server-source-loader-types';
7
+ import {ArcGISImageTileSourceLoader} from './arcgis/arcgis-image-tile-source-loader-types';
8
+ import {ArcGISMapTileSourceLoader} from './arcgis/arcgis-map-tile-source-loader-types';
9
+ import {ArcGISSceneServerSourceLoader} from './arcgis/arcgis-scene-server-source-loader-types';
10
+ import {ArcGISVectorTileServerSourceLoader} from './arcgis/arcgis-vector-tile-server-source-loader-types';
11
+
12
+ /** A source loader currently exposed through the ArcGIS package. */
13
+ export type ArcGISLoader =
14
+ | typeof ArcGISFeatureServerSourceLoader
15
+ | typeof ArcGISImageServerSourceLoader
16
+ | typeof ArcGISImageTileSourceLoader
17
+ | typeof ArcGISMapTileSourceLoader
18
+ | typeof ArcGISVectorTileServerSourceLoader
19
+ | typeof ArcGISSceneServerSourceLoader;
20
+
21
+ /** All source loaders owned by `@loaders.gl/arcgis`, in URL-selection order. */
22
+ export const ARCGIS_LOADERS: ArcGISLoader[] = [
23
+ ArcGISFeatureServerSourceLoader,
24
+ ArcGISImageServerSourceLoader,
25
+ ArcGISImageTileSourceLoader,
26
+ ArcGISMapTileSourceLoader,
27
+ ArcGISVectorTileServerSourceLoader,
28
+ ArcGISSceneServerSourceLoader
29
+ ];
30
+
31
+ /**
32
+ * Finds a service loader by its canonical loader id or service type.
33
+ *
34
+ * The lookup is intentionally small and explicit. It provides discovery without
35
+ * introducing a second request lifecycle or hiding provider-specific options.
36
+ */
37
+ export function getArcGISLoader(serviceType: string): ArcGISLoader | undefined {
38
+ const normalizedServiceType = serviceType.toLowerCase();
39
+ return ARCGIS_LOADERS.find(
40
+ serviceLoader =>
41
+ serviceLoader.id === normalizedServiceType || serviceLoader.type === normalizedServiceType
42
+ );
43
+ }