@cognite/reveal 4.28.7-dev.20260108 → 4.29.0-dev.20260109

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.
@@ -2,6 +2,7 @@
2
2
  * Copyright 2021 Cognite AS
3
3
  */
4
4
  export { CdfModelDataProvider } from './src/model-data-providers/CdfModelDataProvider';
5
+ export { CachedModelDataProvider } from './src/model-data-providers/CachedModelDataProvider';
5
6
  export { CdfModelIdentifier } from './src/model-identifiers/CdfModelIdentifier';
6
7
  export { CdfModelMetadataProvider } from './src/metadata-providers/CdfModelMetadataProvider';
7
8
  export { Cdf360ImageAnnotationProvider } from './src/image-360-data-providers/Cdf360ImageAnnotationProvider';
@@ -0,0 +1,31 @@
1
+ /*!
2
+ * Copyright 2025 Cognite AS
3
+ */
4
+ import { ModelDataProvider } from '../ModelDataProvider';
5
+ import { DataFileCacheManager, CacheConfig } from '../../../utilities';
6
+ /**
7
+ * Wraps a ModelDataProvider with caching capabilities using the Cache API.
8
+ *
9
+ * This provider intercepts getBinaryFile and getJsonFile calls and caches
10
+ * the responses for faster subsequent access.
11
+ */
12
+ export declare class CachedModelDataProvider implements ModelDataProvider {
13
+ private readonly baseProvider;
14
+ private readonly cacheManager;
15
+ constructor(baseProvider: ModelDataProvider, cacheConfig?: CacheConfig, cacheStorage?: CacheStorage);
16
+ getBinaryFile(baseUrl: string, fileName: string, abortSignal?: AbortSignal): Promise<ArrayBuffer>;
17
+ getJsonFile(baseUrl: string, fileName: string): Promise<unknown>;
18
+ private fetchWithCache;
19
+ /**
20
+ * Get the underlying cache manager for direct cache operations
21
+ */
22
+ getCacheManager(): DataFileCacheManager;
23
+ /**
24
+ * Check if a file is cached
25
+ */
26
+ isCached(baseUrl: string, fileName: string): Promise<boolean>;
27
+ /**
28
+ * Clear all cached data
29
+ */
30
+ clearCache(): Promise<void>;
31
+ }
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { PointCloudManager } from './PointCloudManager';
5
5
  import * as THREE from 'three';
6
- import { DMDataSourceType, ModelDataProvider, ModelMetadataProvider, PointCloudStylableObjectProvider } from '../../data-providers';
6
+ import { DMDataSourceType, ModelMetadataProvider, PointCloudStylableObjectProvider, CachedModelDataProvider } from '../../data-providers';
7
7
  import { IPointClassificationsProvider } from './classificationsProviders/IPointClassificationsProvider';
8
8
  import { PointCloudMaterialManager } from '../../rendering';
9
- export declare function createPointCloudManager(modelMetadataProvider: ModelMetadataProvider, modelDataProvider: ModelDataProvider, pointCloudStylableObjectProvider: PointCloudStylableObjectProvider, classificationsProvider: IPointClassificationsProvider, pointCloudDMProvider: PointCloudStylableObjectProvider<DMDataSourceType>, pointCloudMaterialManager: PointCloudMaterialManager, scene: THREE.Scene, renderer: THREE.WebGLRenderer): PointCloudManager;
9
+ export declare function createPointCloudManager(modelMetadataProvider: ModelMetadataProvider, pointCloudStylableObjectProvider: PointCloudStylableObjectProvider, classificationsProvider: IPointClassificationsProvider, pointCloudDMProvider: PointCloudStylableObjectProvider<DMDataSourceType>, pointCloudMaterialManager: PointCloudMaterialManager, cachedProvider: CachedModelDataProvider, scene: THREE.Scene, renderer: THREE.WebGLRenderer): PointCloudManager;
@@ -35,6 +35,9 @@ export { WebGLRendererStateHelper } from './src/WebGLRendererStateHelper';
35
35
  export { TypedArray, TypedArrayConstructor } from './src/types';
36
36
  export { MemoryRequestCache } from './src/cache/MemoryRequestCache';
37
37
  export { MostFrequentlyUsedCache } from './src/cache/MostFrequentlyUsedCache';
38
+ export { DataFileCacheManager } from './src/cache/DataFileCacheManager';
39
+ export type { CacheConfig } from './src/cache/types';
40
+ export { BINARY_FILES_CACHE_NAME } from './src/cache/constants';
38
41
  export { disposeAttributeArrayOnUpload } from './src/disposeAttributeArrayOnUpload';
39
42
  export { incrementOrInsertIndex, decrementOrDeleteIndex } from './src/counterMap';
40
43
  export { calculateVolumeOfMesh } from './src/calculateVolumeOfMesh';
@@ -0,0 +1,49 @@
1
+ import { CacheConfig } from './types';
2
+ /**
3
+ * Data File Cache Manager using the Browser Cache API for storing various data files
4
+ * Supports caching of binary files (point clouds, CAD models), images (360 images), and JSON data
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * // Default: Cache forever, browser manages eviction
9
+ * const cache = new DataFileCacheManager({
10
+ * cacheName: 'reveal-3d-resources-v1'
11
+ * });
12
+ *
13
+ * // Optional: Add time-based expiration
14
+ * const cache = new DataFileCacheManager({
15
+ * cacheName: 'reveal-3d-resources-v1',
16
+ * maxAge: 7 * 24 * 60 * 60 * 1000 // Expire after 7 days
17
+ * });
18
+ *
19
+ * // Store a response
20
+ * await cache.storeResponse(url, response);
21
+ *
22
+ * // Retrieve cached response, returns undefined if expired or not found
23
+ * const cachedResponse = await cache.getCachedResponse(url);
24
+ * ```
25
+ */
26
+ export declare class DataFileCacheManager {
27
+ private readonly DEFAULT_CONFIG;
28
+ private readonly _config;
29
+ private readonly _caches;
30
+ get cacheConfig(): CacheConfig;
31
+ constructor(config?: Partial<CacheConfig>, cacheStorage?: CacheStorage);
32
+ /**
33
+ * Check if a URL is cached and not expired
34
+ */
35
+ has(url: string): Promise<boolean>;
36
+ /**
37
+ * Clear all cached entries
38
+ */
39
+ clear(): Promise<void>;
40
+ /**
41
+ * Get a cached response if it exists and is not expired
42
+ */
43
+ getCachedResponse(url: string): Promise<Response | undefined>;
44
+ /**
45
+ * Store data in cache
46
+ * Browser will automatically evict old entries when quota is reached
47
+ */
48
+ storeResponse(url: string, data: ArrayBuffer, contentType?: string): Promise<void>;
49
+ }
@@ -0,0 +1,6 @@
1
+ /*!
2
+ * Copyright 2025 Cognite AS
3
+ */
4
+ export declare const BINARY_FILES_CACHE_NAME = "reveal-3d-resources-v1";
5
+ export declare const BINARY_FILES_CACHE_HEADER_DATE = "X-Cache-Date";
6
+ export declare const BINARY_FILES_CACHE_HEADER_SIZE = "X-Cache-Size";
@@ -0,0 +1,14 @@
1
+ /*!
2
+ * Copyright 2025 Cognite AS
3
+ */
4
+ /**
5
+ * Configuration for cache behavior
6
+ */
7
+ export type CacheConfig = {
8
+ /** Name of the cache */
9
+ cacheName: string;
10
+ /** Maximum age in milliseconds before entries expire (Default is Infinity = never expire) */
11
+ maxAge: number;
12
+ /** Maximum cache size in bytes (Default is Infinity = browser manages quota) */
13
+ maxCacheSize: number;
14
+ };
@@ -0,0 +1,6 @@
1
+ /*!
2
+ * Copyright 2025 Cognite AS
3
+ */
4
+ export declare function safeParseInt(value: string | null | undefined): number | undefined;
5
+ export declare function getCacheDate(response: Response): number | undefined;
6
+ export declare function getCacheSize(response: Response): number | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cognite/reveal",
3
- "version": "4.28.7-dev.20260108",
3
+ "version": "4.29.0-dev.20260109",
4
4
  "description": "WebGL based 3D viewer for CAD and point clouds processed in Cognite Data Fusion.",
5
5
  "homepage": "https://github.com/cognitedata/reveal/tree/master/viewer",
6
6
  "repository": {