@loaders.gl/tiles 4.4.2 → 5.0.0-alpha.1

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 (198) hide show
  1. package/README.md +110 -1
  2. package/dist/dist.dev.js +4359 -1950
  3. package/dist/dist.min.js +1 -1
  4. package/dist/image-set.d.ts +94 -0
  5. package/dist/image-set.d.ts.map +1 -0
  6. package/dist/image-set.js +243 -0
  7. package/dist/image-set.js.map +1 -0
  8. package/dist/index.cjs +4178 -1892
  9. package/dist/index.cjs.map +4 -4
  10. package/dist/index.d.ts +27 -9
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +17 -8
  13. package/dist/index.js.map +1 -1
  14. package/dist/point-cloud/point-cloud-tile.d.ts +47 -0
  15. package/dist/point-cloud/point-cloud-tile.d.ts.map +1 -0
  16. package/dist/point-cloud/point-cloud-tile.js +67 -0
  17. package/dist/point-cloud/point-cloud-tile.js.map +1 -0
  18. package/dist/point-cloud/point-cloud-tileset.d.ts +131 -0
  19. package/dist/point-cloud/point-cloud-tileset.d.ts.map +1 -0
  20. package/dist/point-cloud/point-cloud-tileset.js +507 -0
  21. package/dist/point-cloud/point-cloud-tileset.js.map +1 -0
  22. package/dist/point-cloud/types.d.ts +64 -0
  23. package/dist/point-cloud/types.d.ts.map +1 -0
  24. package/dist/point-cloud/types.js +2 -0
  25. package/dist/point-cloud/types.js.map +1 -0
  26. package/dist/raster-set.d.ts +107 -0
  27. package/dist/raster-set.d.ts.map +1 -0
  28. package/dist/raster-set.js +268 -0
  29. package/dist/raster-set.js.map +1 -0
  30. package/dist/tileset-2d/adapter.d.ts +38 -0
  31. package/dist/tileset-2d/adapter.d.ts.map +1 -0
  32. package/dist/tileset-2d/adapter.js +5 -0
  33. package/dist/tileset-2d/adapter.js.map +1 -0
  34. package/dist/tileset-2d/index.d.ts +7 -0
  35. package/dist/tileset-2d/index.d.ts.map +1 -0
  36. package/dist/tileset-2d/index.js +6 -0
  37. package/dist/tileset-2d/index.js.map +1 -0
  38. package/dist/tileset-2d/tile-2d-header.d.ts +68 -0
  39. package/dist/tileset-2d/tile-2d-header.d.ts.map +1 -0
  40. package/dist/tileset-2d/tile-2d-header.js +181 -0
  41. package/dist/tileset-2d/tile-2d-header.js.map +1 -0
  42. package/dist/tileset-2d/tileset-2d.d.ts +201 -0
  43. package/dist/tileset-2d/tileset-2d.d.ts.map +1 -0
  44. package/dist/tileset-2d/tileset-2d.js +532 -0
  45. package/dist/tileset-2d/tileset-2d.js.map +1 -0
  46. package/dist/tileset-2d/types.d.ts +44 -0
  47. package/dist/tileset-2d/types.d.ts.map +1 -0
  48. package/dist/tileset-2d/types.js +5 -0
  49. package/dist/tileset-2d/types.js.map +1 -0
  50. package/dist/tileset-2d.d.ts +2 -0
  51. package/dist/tileset-2d.d.ts.map +1 -0
  52. package/dist/tileset-2d.js +5 -0
  53. package/dist/tileset-2d.js.map +1 -0
  54. package/dist/tileset-3d/common/indexed-archive-tileset-source.d.ts +60 -0
  55. package/dist/tileset-3d/common/indexed-archive-tileset-source.d.ts.map +1 -0
  56. package/dist/tileset-3d/common/indexed-archive-tileset-source.js +125 -0
  57. package/dist/tileset-3d/common/indexed-archive-tileset-source.js.map +1 -0
  58. package/dist/{tileset → tileset-3d/common}/tile-3d.d.ts +36 -27
  59. package/dist/tileset-3d/common/tile-3d.d.ts.map +1 -0
  60. package/dist/{tileset → tileset-3d/common}/tile-3d.js +53 -62
  61. package/dist/tileset-3d/common/tile-3d.js.map +1 -0
  62. package/dist/tileset-3d/common/tileset-3d.d.ts +177 -0
  63. package/dist/tileset-3d/common/tileset-3d.d.ts.map +1 -0
  64. package/dist/tileset-3d/common/tileset-3d.js +566 -0
  65. package/dist/tileset-3d/common/tileset-3d.js.map +1 -0
  66. package/dist/tileset-3d/common/tileset-cache.d.ts.map +1 -0
  67. package/dist/{tileset → tileset-3d/common}/tileset-cache.js +1 -1
  68. package/dist/tileset-3d/common/tileset-cache.js.map +1 -0
  69. package/dist/tileset-3d/common/tileset-source.d.ts +186 -0
  70. package/dist/tileset-3d/common/tileset-source.d.ts.map +1 -0
  71. package/dist/tileset-3d/common/tileset-source.js +17 -0
  72. package/dist/tileset-3d/common/tileset-source.js.map +1 -0
  73. package/dist/{tileset → tileset-3d/common}/tileset-traverser.d.ts +2 -2
  74. package/dist/tileset-3d/common/tileset-traverser.d.ts.map +1 -0
  75. package/dist/{tileset → tileset-3d/common}/tileset-traverser.js +2 -2
  76. package/dist/tileset-3d/common/tileset-traverser.js.map +1 -0
  77. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.d.ts +100 -0
  78. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.d.ts.map +1 -0
  79. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.js +312 -0
  80. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.js.map +1 -0
  81. package/dist/{tileset → tileset-3d}/format-3d-tiles/tileset-3d-traverser.d.ts +1 -1
  82. package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.d.ts.map +1 -0
  83. package/dist/{tileset → tileset-3d}/format-3d-tiles/tileset-3d-traverser.js +1 -1
  84. package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.js.map +1 -0
  85. package/dist/tileset-3d/format-i3s/i3s-pending-tiles-register.d.ts.map +1 -0
  86. package/dist/tileset-3d/format-i3s/i3s-pending-tiles-register.js.map +1 -0
  87. package/dist/tileset-3d/format-i3s/i3s-source.d.ts +99 -0
  88. package/dist/tileset-3d/format-i3s/i3s-source.d.ts.map +1 -0
  89. package/dist/tileset-3d/format-i3s/i3s-source.js +299 -0
  90. package/dist/tileset-3d/format-i3s/i3s-source.js.map +1 -0
  91. package/dist/tileset-3d/format-i3s/i3s-tile-manager.d.ts.map +1 -0
  92. package/dist/{tileset → tileset-3d}/format-i3s/i3s-tile-manager.js +2 -2
  93. package/dist/tileset-3d/format-i3s/i3s-tile-manager.js.map +1 -0
  94. package/dist/{tileset → tileset-3d}/format-i3s/i3s-tileset-traverser.d.ts +2 -2
  95. package/dist/tileset-3d/format-i3s/i3s-tileset-traverser.d.ts.map +1 -0
  96. package/dist/{tileset → tileset-3d}/format-i3s/i3s-tileset-traverser.js +14 -23
  97. package/dist/tileset-3d/format-i3s/i3s-tileset-traverser.js.map +1 -0
  98. package/dist/{tileset → tileset-3d}/helpers/3d-tiles-options.d.ts +1 -1
  99. package/dist/tileset-3d/helpers/3d-tiles-options.d.ts.map +1 -0
  100. package/dist/tileset-3d/helpers/3d-tiles-options.js.map +1 -0
  101. package/dist/tileset-3d/helpers/bounding-volume.d.ts.map +1 -0
  102. package/dist/tileset-3d/helpers/bounding-volume.js.map +1 -0
  103. package/dist/{tileset → tileset-3d}/helpers/frame-state.d.ts +1 -1
  104. package/dist/tileset-3d/helpers/frame-state.d.ts.map +1 -0
  105. package/dist/tileset-3d/helpers/frame-state.js.map +1 -0
  106. package/dist/{tileset → tileset-3d}/helpers/i3s-lod.d.ts +1 -1
  107. package/dist/tileset-3d/helpers/i3s-lod.d.ts.map +1 -0
  108. package/dist/{tileset → tileset-3d}/helpers/i3s-lod.js +1 -1
  109. package/dist/tileset-3d/helpers/i3s-lod.js.map +1 -0
  110. package/dist/tileset-3d/helpers/tiles-3d-lod.d.ts +20 -0
  111. package/dist/tileset-3d/helpers/tiles-3d-lod.d.ts.map +1 -0
  112. package/dist/{tileset → tileset-3d}/helpers/tiles-3d-lod.js +43 -4
  113. package/dist/tileset-3d/helpers/tiles-3d-lod.js.map +1 -0
  114. package/dist/{tileset → tileset-3d}/helpers/transform-utils.d.ts +1 -1
  115. package/dist/tileset-3d/helpers/transform-utils.d.ts.map +1 -0
  116. package/dist/tileset-3d/helpers/transform-utils.js.map +1 -0
  117. package/dist/tileset-3d/helpers/zoom.d.ts.map +1 -0
  118. package/dist/tileset-3d/helpers/zoom.js.map +1 -0
  119. package/dist/types.d.ts +7 -0
  120. package/dist/types.d.ts.map +1 -1
  121. package/package.json +7 -6
  122. package/src/image-set.ts +328 -0
  123. package/src/index.ts +80 -9
  124. package/src/point-cloud/point-cloud-tile.ts +76 -0
  125. package/src/point-cloud/point-cloud-tileset.ts +709 -0
  126. package/src/point-cloud/types.ts +78 -0
  127. package/src/raster-set.ts +374 -0
  128. package/src/tileset-2d/adapter.ts +47 -0
  129. package/src/tileset-2d/index.ts +33 -0
  130. package/src/tileset-2d/tile-2d-header.ts +224 -0
  131. package/src/tileset-2d/tileset-2d.ts +716 -0
  132. package/src/tileset-2d/types.ts +39 -0
  133. package/src/tileset-2d.ts +5 -0
  134. package/src/tileset-3d/common/indexed-archive-tileset-source.ts +205 -0
  135. package/src/{tileset → tileset-3d/common}/tile-3d.ts +64 -73
  136. package/src/tileset-3d/common/tileset-3d.ts +736 -0
  137. package/src/{tileset → tileset-3d/common}/tileset-cache.ts +1 -1
  138. package/src/tileset-3d/common/tileset-source.ts +234 -0
  139. package/src/{tileset → tileset-3d/common}/tileset-traverser.ts +3 -3
  140. package/src/tileset-3d/format-3d-tiles/tiles-3d-source.ts +379 -0
  141. package/src/{tileset → tileset-3d}/format-3d-tiles/tileset-3d-traverser.ts +1 -1
  142. package/src/tileset-3d/format-i3s/i3s-source.ts +366 -0
  143. package/src/{tileset → tileset-3d}/format-i3s/i3s-tile-manager.ts +2 -2
  144. package/src/{tileset → tileset-3d}/format-i3s/i3s-tileset-traverser.ts +15 -24
  145. package/src/{tileset → tileset-3d}/helpers/3d-tiles-options.ts +1 -1
  146. package/src/{tileset → tileset-3d}/helpers/frame-state.ts +1 -1
  147. package/src/{tileset → tileset-3d}/helpers/i3s-lod.ts +2 -2
  148. package/src/{tileset → tileset-3d}/helpers/tiles-3d-lod.ts +46 -4
  149. package/src/{tileset → tileset-3d}/helpers/transform-utils.ts +1 -1
  150. package/src/types.ts +7 -0
  151. package/dist/tileset/format-3d-tiles/tileset-3d-traverser.d.ts.map +0 -1
  152. package/dist/tileset/format-3d-tiles/tileset-3d-traverser.js.map +0 -1
  153. package/dist/tileset/format-i3s/i3s-pending-tiles-register.d.ts.map +0 -1
  154. package/dist/tileset/format-i3s/i3s-pending-tiles-register.js.map +0 -1
  155. package/dist/tileset/format-i3s/i3s-tile-manager.d.ts.map +0 -1
  156. package/dist/tileset/format-i3s/i3s-tile-manager.js.map +0 -1
  157. package/dist/tileset/format-i3s/i3s-tileset-traverser.d.ts.map +0 -1
  158. package/dist/tileset/format-i3s/i3s-tileset-traverser.js.map +0 -1
  159. package/dist/tileset/helpers/3d-tiles-options.d.ts.map +0 -1
  160. package/dist/tileset/helpers/3d-tiles-options.js.map +0 -1
  161. package/dist/tileset/helpers/bounding-volume.d.ts.map +0 -1
  162. package/dist/tileset/helpers/bounding-volume.js.map +0 -1
  163. package/dist/tileset/helpers/frame-state.d.ts.map +0 -1
  164. package/dist/tileset/helpers/frame-state.js.map +0 -1
  165. package/dist/tileset/helpers/i3s-lod.d.ts.map +0 -1
  166. package/dist/tileset/helpers/i3s-lod.js.map +0 -1
  167. package/dist/tileset/helpers/tiles-3d-lod.d.ts +0 -8
  168. package/dist/tileset/helpers/tiles-3d-lod.d.ts.map +0 -1
  169. package/dist/tileset/helpers/tiles-3d-lod.js.map +0 -1
  170. package/dist/tileset/helpers/transform-utils.d.ts.map +0 -1
  171. package/dist/tileset/helpers/transform-utils.js.map +0 -1
  172. package/dist/tileset/helpers/zoom.d.ts.map +0 -1
  173. package/dist/tileset/helpers/zoom.js.map +0 -1
  174. package/dist/tileset/tile-3d.d.ts.map +0 -1
  175. package/dist/tileset/tile-3d.js.map +0 -1
  176. package/dist/tileset/tileset-3d.d.ts +0 -284
  177. package/dist/tileset/tileset-3d.d.ts.map +0 -1
  178. package/dist/tileset/tileset-3d.js +0 -814
  179. package/dist/tileset/tileset-3d.js.map +0 -1
  180. package/dist/tileset/tileset-cache.d.ts.map +0 -1
  181. package/dist/tileset/tileset-cache.js.map +0 -1
  182. package/dist/tileset/tileset-traverser.d.ts.map +0 -1
  183. package/dist/tileset/tileset-traverser.js.map +0 -1
  184. package/src/tileset/tileset-3d.ts +0 -1037
  185. /package/dist/{tileset → tileset-3d/common}/tileset-cache.d.ts +0 -0
  186. /package/dist/{tileset → tileset-3d}/format-i3s/i3s-pending-tiles-register.d.ts +0 -0
  187. /package/dist/{tileset → tileset-3d}/format-i3s/i3s-pending-tiles-register.js +0 -0
  188. /package/dist/{tileset → tileset-3d}/format-i3s/i3s-tile-manager.d.ts +0 -0
  189. /package/dist/{tileset → tileset-3d}/helpers/3d-tiles-options.js +0 -0
  190. /package/dist/{tileset → tileset-3d}/helpers/bounding-volume.d.ts +0 -0
  191. /package/dist/{tileset → tileset-3d}/helpers/bounding-volume.js +0 -0
  192. /package/dist/{tileset → tileset-3d}/helpers/frame-state.js +0 -0
  193. /package/dist/{tileset → tileset-3d}/helpers/transform-utils.js +0 -0
  194. /package/dist/{tileset → tileset-3d}/helpers/zoom.d.ts +0 -0
  195. /package/dist/{tileset → tileset-3d}/helpers/zoom.js +0 -0
  196. /package/src/{tileset → tileset-3d}/format-i3s/i3s-pending-tiles-register.ts +0 -0
  197. /package/src/{tileset → tileset-3d}/helpers/bounding-volume.ts +0 -0
  198. /package/src/{tileset → tileset-3d}/helpers/zoom.ts +0 -0
@@ -0,0 +1,94 @@
1
+ import type { GetImageParameters, ImageSource, ImageSourceMetadata, ImageType } from '@loaders.gl/loader-utils';
2
+ /** Accepted image request currently retained by {@link ImageSet}. */
3
+ export type ImageSetRequest<DataT = ImageType> = {
4
+ /** Unique request id assigned by the manager. */
5
+ requestId: number;
6
+ /** Image request parameters that produced the accepted image. */
7
+ parameters: GetImageParameters;
8
+ /** Image retained as the current output. */
9
+ image: DataT;
10
+ };
11
+ /** Configuration shared by all {@link ImageSet} instances. */
12
+ export type ImageSetBaseProps<DataT = ImageType> = {
13
+ /** Callback used to load source metadata. */
14
+ getMetadata: () => Promise<ImageSourceMetadata>;
15
+ /** Callback used to load an image for a viewport-derived request. */
16
+ getImage: (parameters: GetImageParameters) => Promise<DataT>;
17
+ /** Debounce interval applied before issuing image requests. */
18
+ debounceTime?: number;
19
+ };
20
+ /** Options for creating an {@link ImageSet}. */
21
+ export type ImageSetProps<DataT = ImageType> = Partial<ImageSetBaseProps<DataT>> & {
22
+ /** Optional loaders.gl image source backing this manager. */
23
+ imageSource?: ImageSource | null;
24
+ };
25
+ /** Subscription callbacks emitted by {@link ImageSet}. */
26
+ export type ImageSetListener<DataT = ImageType> = {
27
+ /** Fired when metadata/image loading starts or stops. */
28
+ onLoadingStateChange?: (isLoading: boolean) => void;
29
+ /** Fired when source metadata resolves successfully. */
30
+ onMetadataLoad?: (metadata: ImageSourceMetadata) => void;
31
+ /** Fired when metadata loading fails. */
32
+ onMetadataLoadError?: (error: Error) => void;
33
+ /** Fired when a new image request is issued. */
34
+ onImageLoadStart?: (requestId: number, parameters: GetImageParameters) => void;
35
+ /** Fired when an image request resolves and becomes current. */
36
+ onImageLoad?: (request: ImageSetRequest<DataT>) => void;
37
+ /** Fired when an image request fails. */
38
+ onImageLoadError?: (requestId: number, error: Error, parameters: GetImageParameters) => void;
39
+ /** Fired when metadata or the current image changes. */
40
+ onUpdate?: () => void;
41
+ };
42
+ /** Shared image request manager used by source-backed image layers. */
43
+ export declare class ImageSet<DataT = ImageType> {
44
+ /** Cached metadata returned by the backing source, if any. */
45
+ metadata: ImageSourceMetadata | null;
46
+ private _opts;
47
+ private _listeners;
48
+ private _currentRequest;
49
+ private _lastAcceptedRequestId;
50
+ private _nextRequestId;
51
+ private _loadCounter;
52
+ private _timeoutId;
53
+ private _abortController;
54
+ private _finalized;
55
+ /** Creates an image manager from a source or direct callbacks. */
56
+ constructor(opts: ImageSetProps<DataT>);
57
+ /** Convenience factory for wrapping a loaders.gl {@link ImageSource}. */
58
+ static fromImageSource<DataT = ImageType>(imageSource: ImageSource, opts?: Omit<ImageSetProps<DataT>, 'imageSource' | 'getImage' | 'getMetadata'>): ImageSet<DataT>;
59
+ /** Whether the manager has no requests in flight and a current image. */
60
+ get isLoaded(): boolean;
61
+ /** Current accepted image, if any. */
62
+ get image(): DataT | null;
63
+ /** Current accepted request and image payload, if any. */
64
+ get currentRequest(): ImageSetRequest<DataT> | null;
65
+ /** Backing image source when constructed from one. */
66
+ get imageSource(): ImageSource | null;
67
+ /** Subscribes to metadata and image lifecycle events. */
68
+ subscribe(listener: ImageSetListener<DataT>): () => void;
69
+ /** Updates source callbacks or debounce settings, resetting state when the source changes. */
70
+ setOptions(opts: ImageSetProps<DataT>): void;
71
+ /** Loads metadata from the current image source or callbacks. */
72
+ loadMetadata(): Promise<ImageSourceMetadata>;
73
+ /** Debounces and issues a new image request for the supplied parameters. */
74
+ requestImage(parameters: GetImageParameters, debounceTime?: number): number;
75
+ /** Clears timers and listeners held by the manager. */
76
+ finalize(): void;
77
+ /** Loads an image immediately and accepts it only if it is the newest completed request. */
78
+ private _loadImage;
79
+ /** Resolves current options from either a source or direct callbacks. */
80
+ private _normalizeOptions;
81
+ /** Notifies listeners that current metadata or image output changed. */
82
+ private _emitUpdate;
83
+ /** Increments the active load count and emits loading changes. */
84
+ private _startLoading;
85
+ /** Decrements the active load count and emits loading changes. */
86
+ private _finishLoading;
87
+ /** Notifies listeners when the overall loading state changes. */
88
+ private _emitLoadingStateChange;
89
+ /** Clears any pending debounced image request. */
90
+ private _cancelScheduledImage;
91
+ /** Aborts the current in-flight image request, if any. */
92
+ private _abortActiveRequest;
93
+ }
94
+ //# sourceMappingURL=image-set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-set.d.ts","sourceRoot":"","sources":["../src/image-set.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,243 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ const DEFAULT_IMAGESET_PROPS = {
5
+ getMetadata: async () => ({ name: '', keywords: [], layers: [] }),
6
+ getImage: async () => null,
7
+ debounceTime: 0
8
+ };
9
+ /** Shared image request manager used by source-backed image layers. */
10
+ export class ImageSet {
11
+ /** Cached metadata returned by the backing source, if any. */
12
+ metadata = null;
13
+ _opts;
14
+ _listeners = new Set();
15
+ _currentRequest = null;
16
+ _lastAcceptedRequestId = -1;
17
+ _nextRequestId = 0;
18
+ _loadCounter = 0;
19
+ _timeoutId = null;
20
+ _abortController = null;
21
+ _finalized = false;
22
+ /** Creates an image manager from a source or direct callbacks. */
23
+ constructor(opts) {
24
+ this._opts = this._normalizeOptions(opts);
25
+ if (!this._opts.imageSource && (!opts.getImage || !opts.getMetadata)) {
26
+ throw new Error('ImageSet requires either `imageSource` or both `getImage` and `getMetadata`.');
27
+ }
28
+ }
29
+ /** Convenience factory for wrapping a loaders.gl {@link ImageSource}. */
30
+ static fromImageSource(imageSource, opts = {}) {
31
+ return new ImageSet({ ...opts, imageSource });
32
+ }
33
+ /** Whether the manager has no requests in flight and a current image. */
34
+ get isLoaded() {
35
+ return this._loadCounter === 0 && Boolean(this._currentRequest);
36
+ }
37
+ /** Current accepted image, if any. */
38
+ get image() {
39
+ return this._currentRequest?.image || null;
40
+ }
41
+ /** Current accepted request and image payload, if any. */
42
+ get currentRequest() {
43
+ return this._currentRequest;
44
+ }
45
+ /** Backing image source when constructed from one. */
46
+ get imageSource() {
47
+ return this._opts.imageSource;
48
+ }
49
+ /** Subscribes to metadata and image lifecycle events. */
50
+ subscribe(listener) {
51
+ this._listeners.add(listener);
52
+ return () => this._listeners.delete(listener);
53
+ }
54
+ /** Updates source callbacks or debounce settings, resetting state when the source changes. */
55
+ setOptions(opts) {
56
+ const previousImageSource = this._opts.imageSource;
57
+ const nextOptions = this._normalizeOptions({ ...this._opts, ...opts });
58
+ const sourceChanged = previousImageSource !== nextOptions.imageSource ||
59
+ this._opts.getImage !== nextOptions.getImage ||
60
+ this._opts.getMetadata !== nextOptions.getMetadata;
61
+ this._opts = nextOptions;
62
+ if (sourceChanged) {
63
+ this._cancelScheduledImage();
64
+ this.metadata = null;
65
+ this._currentRequest = null;
66
+ this._lastAcceptedRequestId = -1;
67
+ this._nextRequestId = 0;
68
+ this._emitUpdate();
69
+ }
70
+ }
71
+ /** Loads metadata from the current image source or callbacks. */
72
+ async loadMetadata() {
73
+ this._startLoading();
74
+ try {
75
+ const metadata = await this._opts.getMetadata();
76
+ if (this._finalized) {
77
+ return metadata;
78
+ }
79
+ this.metadata = metadata;
80
+ for (const listener of this._listeners) {
81
+ listener.onMetadataLoad?.(metadata);
82
+ }
83
+ this._emitUpdate();
84
+ return metadata;
85
+ }
86
+ catch (error) {
87
+ const normalizedError = normalizeImageSetError(error, 'Image metadata request failed');
88
+ if (!this._finalized) {
89
+ for (const listener of this._listeners) {
90
+ listener.onMetadataLoadError?.(normalizedError);
91
+ }
92
+ }
93
+ throw normalizedError;
94
+ }
95
+ finally {
96
+ this._finishLoading();
97
+ }
98
+ }
99
+ /** Debounces and issues a new image request for the supplied parameters. */
100
+ requestImage(parameters, debounceTime = this._opts.debounceTime) {
101
+ const requestId = this._nextRequestId++;
102
+ this._cancelScheduledImage();
103
+ this._abortActiveRequest();
104
+ if (debounceTime > 0) {
105
+ this._timeoutId = setTimeout(() => {
106
+ this._timeoutId = null;
107
+ void this._loadImage(requestId, parameters);
108
+ }, debounceTime);
109
+ }
110
+ else {
111
+ void this._loadImage(requestId, parameters);
112
+ }
113
+ return requestId;
114
+ }
115
+ /** Clears timers and listeners held by the manager. */
116
+ finalize() {
117
+ this._finalized = true;
118
+ this._cancelScheduledImage();
119
+ this._abortActiveRequest();
120
+ this._listeners.clear();
121
+ }
122
+ /** Loads an image immediately and accepts it only if it is the newest completed request. */
123
+ async _loadImage(requestId, parameters) {
124
+ if (this._finalized) {
125
+ return;
126
+ }
127
+ this._startLoading();
128
+ for (const listener of this._listeners) {
129
+ listener.onImageLoadStart?.(requestId, parameters);
130
+ }
131
+ try {
132
+ const abortController = new AbortController();
133
+ this._abortController = abortController;
134
+ const image = await this._opts.getImage({ ...parameters, signal: abortController.signal });
135
+ if (this._finalized || requestId <= this._lastAcceptedRequestId) {
136
+ return;
137
+ }
138
+ this._lastAcceptedRequestId = requestId;
139
+ this._currentRequest = { requestId, parameters, image };
140
+ for (const listener of this._listeners) {
141
+ listener.onImageLoad?.(this._currentRequest);
142
+ }
143
+ this._emitUpdate();
144
+ }
145
+ catch (error) {
146
+ if (isAbortError(error)) {
147
+ return;
148
+ }
149
+ const normalizedError = normalizeImageSetError(error, 'Image request failed');
150
+ if (!this._finalized) {
151
+ for (const listener of this._listeners) {
152
+ listener.onImageLoadError?.(requestId, normalizedError, parameters);
153
+ }
154
+ }
155
+ }
156
+ finally {
157
+ if (this._abortController?.signal === parameters.signal) {
158
+ this._abortController = null;
159
+ }
160
+ this._finishLoading();
161
+ }
162
+ }
163
+ /** Resolves current options from either a source or direct callbacks. */
164
+ _normalizeOptions(opts) {
165
+ const imageSource = opts.imageSource || null;
166
+ return {
167
+ ...DEFAULT_IMAGESET_PROPS,
168
+ ...opts,
169
+ imageSource,
170
+ getMetadata: opts.getMetadata ||
171
+ (() => {
172
+ if (imageSource) {
173
+ return imageSource.getMetadata();
174
+ }
175
+ return DEFAULT_IMAGESET_PROPS.getMetadata();
176
+ }),
177
+ getImage: opts.getImage ||
178
+ ((parameters) => {
179
+ if (imageSource) {
180
+ return imageSource.getImage(parameters);
181
+ }
182
+ return DEFAULT_IMAGESET_PROPS.getImage(parameters);
183
+ }),
184
+ debounceTime: opts.debounceTime ?? DEFAULT_IMAGESET_PROPS.debounceTime
185
+ };
186
+ }
187
+ /** Notifies listeners that current metadata or image output changed. */
188
+ _emitUpdate() {
189
+ for (const listener of this._listeners) {
190
+ listener.onUpdate?.();
191
+ }
192
+ }
193
+ /** Increments the active load count and emits loading changes. */
194
+ _startLoading() {
195
+ const wasLoading = this._loadCounter > 0;
196
+ this._loadCounter++;
197
+ if (!wasLoading) {
198
+ this._emitLoadingStateChange(true);
199
+ this._emitUpdate();
200
+ }
201
+ }
202
+ /** Decrements the active load count and emits loading changes. */
203
+ _finishLoading() {
204
+ const wasLoading = this._loadCounter > 0;
205
+ this._loadCounter = Math.max(0, this._loadCounter - 1);
206
+ if (wasLoading && this._loadCounter === 0) {
207
+ this._emitLoadingStateChange(false);
208
+ this._emitUpdate();
209
+ }
210
+ }
211
+ /** Notifies listeners when the overall loading state changes. */
212
+ _emitLoadingStateChange(isLoading) {
213
+ for (const listener of this._listeners) {
214
+ listener.onLoadingStateChange?.(isLoading);
215
+ }
216
+ }
217
+ /** Clears any pending debounced image request. */
218
+ _cancelScheduledImage() {
219
+ if (this._timeoutId !== null) {
220
+ clearTimeout(this._timeoutId);
221
+ this._timeoutId = null;
222
+ }
223
+ }
224
+ /** Aborts the current in-flight image request, if any. */
225
+ _abortActiveRequest() {
226
+ this._abortController?.abort();
227
+ this._abortController = null;
228
+ }
229
+ }
230
+ function isAbortError(error) {
231
+ return error instanceof Error && error.name === 'AbortError';
232
+ }
233
+ /** Normalizes arbitrary thrown values to `Error` instances for bookkeeping. */
234
+ function normalizeImageSetError(error, message) {
235
+ if (error instanceof Error) {
236
+ return error;
237
+ }
238
+ if (typeof error === 'string') {
239
+ return new Error(error);
240
+ }
241
+ return new Error(message);
242
+ }
243
+ //# sourceMappingURL=image-set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-set.js","sourceRoot":"","sources":["../src/image-set.ts"],"names":[],"mappings":"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"}