soonspacejs 3.0.0-alpha.6 → 3.0.0-alpha.9

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "soonspacejs",
3
- "version": "3.0.0-alpha.6",
3
+ "version": "3.0.0-alpha.9",
4
4
  "homepage": "https://www.xwbuilders.com/soonspacejs/",
5
5
  "description": "SoonSpace.js 3.0 alpha",
6
6
  "module": "./dist/index.esm.js",
@@ -0,0 +1,15 @@
1
+ /** Raw HTTP model bytes only. Runtime leases / GPU graphs are never persisted. */
2
+ export declare class ModelBufferCache {
3
+ private readonly store;
4
+ private readonly enabled;
5
+ constructor(store?: LocalForage, enabled?: () => boolean);
6
+ load(url: string, init: {
7
+ headers: Headers;
8
+ credentials: RequestCredentials;
9
+ signal?: AbortSignal;
10
+ redirect?: RequestRedirect;
11
+ }): Promise<ArrayBuffer>;
12
+ private key;
13
+ private mutate;
14
+ clear(): Promise<void>;
15
+ }
@@ -1 +1,4 @@
1
- export declare const FileRequestHeaders: {};
1
+ /** Default headers for SDK-owned HTTP(S) resource requests. */
2
+ export declare const RequestHeaders: Record<string, string>;
3
+ /** Backwards-compatible alias. Both names refer to the same mutable object. */
4
+ export declare const FileRequestHeaders: Record<string, string>;
@@ -43,6 +43,8 @@ export declare class EntityCollection {
43
43
  attach(entity: Entity, object: Object3D): void;
44
44
  detach(entity: Entity, object: Object3D): void;
45
45
  pick(raycaster: Raycaster): EntityHit[];
46
+ /** On-demand source surfaces for drawing/projection. These meshes never enter the scene. */
47
+ pickSurfaces(raycaster: Raycaster): EntityHit[];
46
48
  /** Fresh world bounds from committed transforms, including hidden content. */
47
49
  getBounds(entity: Entity, options?: {
48
50
  includeDescendants?: boolean;
@@ -1,5 +1,6 @@
1
1
  import { BufferGeometry, Material, Matrix4, Texture } from 'three';
2
2
  import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
3
+ import { ModelBufferCache } from '../Cache/ModelBufferCache';
3
4
  export interface ModelPart {
4
5
  /** Omitted for triangle meshes. Basic line segments share the Entity lifecycle. */
5
6
  kind?: 'mesh' | 'line-segments';
@@ -63,8 +64,9 @@ export declare class ModelResources {
63
64
  private pending;
64
65
  private urls;
65
66
  private gltfLoader;
67
+ private bufferCache;
66
68
  /** Borrow a host-configured loader; its decoder workers remain host-owned. */
67
- setGLTFLoader(loader: GLTFLoader): void;
69
+ setGLTFLoader(loader: GLTFLoader, bufferCache?: ModelBufferCache): void;
68
70
  readonly materials: {
69
71
  register: (material: Material, options: {
70
72
  ownership: "transfer";
@@ -0,0 +1,44 @@
1
+ import { Object3D, Texture } from 'three';
2
+ import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
3
+ interface TextureRenderer {
4
+ initTexture(texture: Texture): void;
5
+ domElement?: EventTarget;
6
+ getContext?: () => {
7
+ isContextLost(): boolean;
8
+ };
9
+ }
10
+ export declare const texturePreloaderFor: (loader: GLTFLoader) => TexturePreloader | undefined;
11
+ export declare const bindTexturePreloader: (loader: GLTFLoader, queue: TexturePreloader) => void;
12
+ /** Renderer-owned, frame-budgeted preparation for newly decoded GLTF roots. */
13
+ export declare class TexturePreloader {
14
+ private readonly renderer;
15
+ private readonly budgetMs;
16
+ private entries;
17
+ private jobs;
18
+ private owners;
19
+ private frame;
20
+ private fallback;
21
+ private frameGeneration;
22
+ private contextLost;
23
+ private disposed;
24
+ readonly stats: {
25
+ uploads: number;
26
+ reused: number;
27
+ cancelled: number;
28
+ failed: number;
29
+ frames: number;
30
+ totalMs: number;
31
+ maxUploadMs: number;
32
+ maxFrameMs: number;
33
+ };
34
+ constructor(renderer: TextureRenderer, budgetMs?: number);
35
+ private onContextLost;
36
+ private onContextRestored;
37
+ private cancelFrame;
38
+ prepare(root: Object3D, signal?: AbortSignal, managerSignal?: AbortSignal): Promise<void>;
39
+ private schedule;
40
+ private pump;
41
+ private cancel;
42
+ dispose(): void;
43
+ }
44
+ export {};
@@ -0,0 +1,24 @@
1
+ import { CubeTextureLoader, FileLoader, ImageLoader, LoadingManager, TextureLoader } from 'three';
2
+ import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
3
+ import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js';
4
+ import { KTX2Loader } from 'three/examples/jsm/loaders/KTX2Loader.js';
5
+ /** Only SDK-owned instances are adapted; resolve before snapshotting the actual request. */
6
+ export declare function configureRequestLoader<T extends {
7
+ load: any;
8
+ path: string;
9
+ requestHeader: any;
10
+ manager: LoadingManager;
11
+ }>(loader: T): T;
12
+ /** @internal Add parent-local headers only to copies of SDK-adapted handlers. */
13
+ export declare function withRequestHeaders<T extends {
14
+ requestHeader: any;
15
+ }>(loader: T, parentHeaders?: HeadersInit): T;
16
+ export declare function createFileLoader(manager?: LoadingManager): FileLoader;
17
+ export declare function createImageLoader(manager?: LoadingManager): ImageLoader;
18
+ /** @internal Preserve the historical shared imageLoader FileLoader/Blob transport. */
19
+ export declare function createFileImageLoader(manager?: LoadingManager): ImageLoader;
20
+ export declare function createTextureLoader(manager?: LoadingManager): TextureLoader;
21
+ export declare function createCubeTextureLoader(manager?: LoadingManager): CubeTextureLoader;
22
+ export declare function configureGLTFLoader(loader: GLTFLoader): GLTFLoader;
23
+ export declare function configureDRACOLoader(loader: DRACOLoader): DRACOLoader;
24
+ export declare function configureKTX2Loader(loader: KTX2Loader): KTX2Loader;
@@ -1,12 +1,15 @@
1
1
  import { GLTF, GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
2
+ import { ModelBufferCache } from '../Cache/ModelBufferCache';
2
3
  interface RequestScope {
3
4
  rootURL: string;
4
5
  headers: HeadersInit;
5
6
  signal?: AbortSignal;
7
+ bufferCache?: ModelBufferCache;
6
8
  }
7
9
  /** Each standard GLTFLoader parse constructs its parser synchronously, before any await. */
8
10
  export declare function parseScopedGLTF(loader: GLTFLoader, data: ArrayBuffer, path: string, scope: RequestScope): Promise<{
9
11
  gltf: GLTF;
10
12
  dependencyError?: unknown;
13
+ prepareTextures: () => Promise<void>;
11
14
  }>;
12
15
  export {};
@@ -9,6 +9,7 @@ import { Group, GroupInfo, Model, ModelInfo } from '../Library';
9
9
  import { CloneModelInfo } from '../Interface';
10
10
  import { ObjectsCache } from '../Cache';
11
11
  import { default as DefaultManage } from './DefaultManage';
12
+ import { ModelBufferCache } from '../Cache/ModelBufferCache';
12
13
  declare class ModelManage extends DefaultManage {
13
14
  readonly viewport: Viewport;
14
15
  readonly cache: ObjectsCache;
@@ -24,6 +25,8 @@ declare class ModelManage extends DefaultManage {
24
25
  */
25
26
  store: typeof localforage;
26
27
  cacheStore: typeof localforage;
28
+ readonly bufferCache: ModelBufferCache;
29
+ private texturePreloader?;
27
30
  loadingManager: LoadingManager;
28
31
  gltfLoader: GLTFLoader;
29
32
  fbxLoader: FBXLoader;
@@ -1,7 +1,8 @@
1
- import { ImageLoader, TextureLoader } from 'three';
2
1
  import { HDRLoader } from 'three/examples/jsm/loaders/HDRLoader.js';
2
+ export * from './request';
3
+ export { configureRequestLoader, createFileLoader, createImageLoader, createTextureLoader, createCubeTextureLoader, configureGLTFLoader, } from '../Loader/request-loaders';
3
4
  export type FileResponseType = 'json' | 'arraybuffer' | 'blob' | 'document' | 'text';
4
5
  export declare const fetchFile: <T = any>(url: string, responseType: FileResponseType) => Promise<T>;
5
- export declare const imageLoader: ImageLoader;
6
- export declare const textureLoader: TextureLoader;
6
+ export declare const imageLoader: import('three').ImageLoader;
7
+ export declare const textureLoader: import('three').TextureLoader;
7
8
  export declare const rgbeLoader: HDRLoader;
@@ -0,0 +1,4 @@
1
+ /** Snapshot defaults and explicit headers. Explicit names win case-insensitively. */
2
+ export declare function getRequestHeaders(input: string | URL | Request, headers?: HeadersInit): Record<string, string>;
3
+ /** Keep the caller's Request/RequestInit semantics and snapshot at dispatch time. */
4
+ export declare function fetchResource(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;
@@ -127,7 +127,7 @@ declare class Viewport {
127
127
  top: number;
128
128
  };
129
129
  getPositionByOffset(offset: OffsetPoint, z?: number, scalar?: number): Vector3;
130
- getIntersects(event: MouseEvent | TouchEvent | OffsetPoint, objects?: Object3D<import('three').Object3DEventMap>[], options?: IntersectsOptions): Intersection<Object3D<import('three').Object3DEventMap>>[];
130
+ getIntersects(event: MouseEvent | TouchEvent | OffsetPoint, objects?: Object3D | Object3D[], options?: IntersectsOptions): Intersection<Object3D<import('three').Object3DEventMap>>[];
131
131
  rayClash(startPoint?: Vector3, dir?: Vector3, objects?: Mesh<import('three').BufferGeometry<import('three').NormalBufferAttributes, import('three').BufferGeometryEventMap>, Material<import('three').MaterialEventMap> | Material<import('three').MaterialEventMap>[], import('three').Object3DEventMap>[]): Intersection<Object3D<import('three').Object3DEventMap>>[];
132
132
  clearSignals(): void;
133
133
  /**
package/types/index.d.ts CHANGED
@@ -14,6 +14,7 @@ import { Camera } from 'three';
14
14
  import { CanvasTexture } from 'three';
15
15
  import { ColorRepresentation } from 'three';
16
16
  import { CubeTexture } from 'three';
17
+ import { CubeTextureLoader } from 'three';
17
18
  import { Curve } from 'three';
18
19
  import type { CurvePath } from 'three';
19
20
  import { DataTexture } from 'three';
@@ -29,6 +30,7 @@ import type { EulerOrder } from 'three';
29
30
  import { Event as Event_2 } from 'three';
30
31
  import { EventDispatcher } from 'three';
31
32
  import { EventListener as EventListener_2 } from 'three';
33
+ import { FileLoader } from 'three';
32
34
  import { GLTFExporterOptions } from 'three/examples/jsm/exporters/GLTFExporter.js';
33
35
  import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
34
36
  import { GridHelper } from 'three';
@@ -1274,6 +1276,16 @@ export declare type ClonePoiInfo = Omit<PoiInfo, 'url' | 'type'>;
1274
1276
  */
1275
1277
  declare function computeTargetByRotation(position: IVector3, rotation: Rotation, scalar?: number): Vector3;
1276
1278
 
1279
+ declare function configureGLTFLoader(loader: GLTFLoader): GLTFLoader;
1280
+
1281
+ /** Only SDK-owned instances are adapted; resolve before snapshotting the actual request. */
1282
+ declare function configureRequestLoader<T extends {
1283
+ load: any;
1284
+ path: string;
1285
+ requestHeader: any;
1286
+ manager: LoadingManager;
1287
+ }>(loader: T): T;
1288
+
1277
1289
  /**
1278
1290
  * 以等分链的方式配置几何体的顶点权重
1279
1291
  * @param options - 选项
@@ -1586,6 +1598,8 @@ export declare interface CreateChainSkinnedMeshForMeshOptions_Base {
1586
1598
  skeleton: Skeleton;
1587
1599
  }
1588
1600
 
1601
+ declare function createCubeTextureLoader(manager?: LoadingManager): CubeTextureLoader;
1602
+
1589
1603
  export declare function createCurveAnimationClip(options: CreateCurveAnimationClipByCurveOptions): CreateCurveAnimationClipReturn;
1590
1604
 
1591
1605
  export declare function createCurveAnimationClip(options: CreateCurveAnimationClipByPolylineOptions): CreateCurveAnimationClipReturn;
@@ -1694,6 +1708,8 @@ export declare interface CreateCurveAnimationClipReturn {
1694
1708
  */
1695
1709
  export declare function createEqualChainBones(boneOpts: EqualChainBoneOptions): Bone[];
1696
1710
 
1711
+ declare function createFileLoader(manager?: LoadingManager): FileLoader;
1712
+
1697
1713
  /**
1698
1714
  * 创建 查找位置附近的 box 空间范围内的物体
1699
1715
  * @param boxSpace - 描述查找空间的信息对象
@@ -1727,6 +1743,8 @@ export declare function createFindObjectsNearPath(points: Vector3[], radius: num
1727
1743
  */
1728
1744
  export declare function createGuiAnimationController(action: AnimationAction): GuiAnimationController;
1729
1745
 
1746
+ declare function createImageLoader(manager?: LoadingManager): ImageLoader;
1747
+
1730
1748
  /**
1731
1749
  * createKeyframeTracksOfCurveAnimationByPolyline 的选项
1732
1750
  */
@@ -1831,6 +1849,8 @@ export declare function createPlaneMatrix(points: Vector3[]): Matrix3;
1831
1849
 
1832
1850
  export declare function createTexture(image: string | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement, cache?: boolean, textureCache?: Map<string, Texture>): Texture<unknown, TextureEventMap>;
1833
1851
 
1852
+ declare function createTextureLoader(manager?: LoadingManager): TextureLoader;
1853
+
1834
1854
  /**
1835
1855
  * 创建 uv 变换矩阵
1836
1856
  * @remarks
@@ -2188,6 +2208,8 @@ export declare class EntityCollection {
2188
2208
  attach(entity: Entity, object: Object3D): void;
2189
2209
  detach(entity: Entity, object: Object3D): void;
2190
2210
  pick(raycaster: Raycaster): EntityHit[];
2211
+ /** On-demand source surfaces for drawing/projection. These meshes never enter the scene. */
2212
+ pickSurfaces(raycaster: Raycaster): EntityHit[];
2191
2213
  /** Fresh world bounds from committed transforms, including hidden content. */
2192
2214
  getBounds(entity: Entity, options?: {
2193
2215
  includeDescendants?: boolean;
@@ -2315,7 +2337,11 @@ declare class FBXLoader extends Loader<any, string> {
2315
2337
 
2316
2338
  declare const fetchFile: <T = any>(url: string, responseType: FileResponseType) => Promise<T>;
2317
2339
 
2318
- export declare const FileRequestHeaders: {};
2340
+ /** Keep the caller's Request/RequestInit semantics and snapshot at dispatch time. */
2341
+ declare function fetchResource(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;
2342
+
2343
+ /** Backwards-compatible alias. Both names refer to the same mutable object. */
2344
+ export declare const FileRequestHeaders: Record<string, string>;
2319
2345
 
2320
2346
  declare type FileResponseType = 'json' | 'arraybuffer' | 'blob' | 'document' | 'text';
2321
2347
 
@@ -2666,6 +2692,9 @@ export declare function getPolygonGeometryInfo(points: Vector3[]): {
2666
2692
  position: Vector3;
2667
2693
  };
2668
2694
 
2695
+ /** Snapshot defaults and explicit headers. Explicit names win case-insensitively. */
2696
+ declare function getRequestHeaders(input: string | URL | Request, headers?: HeadersInit): Record<string, string>;
2697
+
2669
2698
  /**
2670
2699
  * 获取根骨骼
2671
2700
  * @remarks
@@ -3487,6 +3516,22 @@ export declare interface ModelAnimationFindFunc {
3487
3516
  (animation: AnimationClip, index: number, animations: AnimationClip[]): boolean;
3488
3517
  }
3489
3518
 
3519
+ /** Raw HTTP model bytes only. Runtime leases / GPU graphs are never persisted. */
3520
+ declare class ModelBufferCache {
3521
+ private readonly store;
3522
+ private readonly enabled;
3523
+ constructor(store?: LocalForage, enabled?: () => boolean);
3524
+ load(url: string, init: {
3525
+ headers: Headers;
3526
+ credentials: RequestCredentials;
3527
+ signal?: AbortSignal;
3528
+ redirect?: RequestRedirect;
3529
+ }): Promise<ArrayBuffer>;
3530
+ private key;
3531
+ private mutate;
3532
+ clear(): Promise<void>;
3533
+ }
3534
+
3490
3535
  export declare interface ModelEventParams {
3491
3536
  target: Model;
3492
3537
  currentTarget: Mesh;
@@ -3544,6 +3589,8 @@ declare class ModelManage extends DefaultManage {
3544
3589
  */
3545
3590
  store: typeof default_2;
3546
3591
  cacheStore: typeof default_2;
3592
+ readonly bufferCache: ModelBufferCache;
3593
+ private texturePreloader?;
3547
3594
  loadingManager: LoadingManager;
3548
3595
  gltfLoader: GLTFLoader;
3549
3596
  fbxLoader: FBXLoader;
@@ -3653,8 +3700,9 @@ export declare class ModelResources {
3653
3700
  private pending;
3654
3701
  private urls;
3655
3702
  private gltfLoader;
3703
+ private bufferCache;
3656
3704
  /** Borrow a host-configured loader; its decoder workers remain host-owned. */
3657
- setGLTFLoader(loader: GLTFLoader): void;
3705
+ setGLTFLoader(loader: GLTFLoader, bufferCache?: ModelBufferCache): void;
3658
3706
  readonly materials: {
3659
3707
  register: (material: Material, options: {
3660
3708
  ownership: "transfer";
@@ -4212,6 +4260,9 @@ declare class RendererManager {
4212
4260
  */
4213
4261
  export declare function renderLoop(frameFun: (time: DOMHighResTimeStamp) => void): () => void;
4214
4262
 
4263
+ /** Default headers for SDK-owned HTTP(S) resource requests. */
4264
+ export declare const RequestHeaders: Record<string, string>;
4265
+
4215
4266
  export declare class ResourceLease<T> {
4216
4267
  readonly registry: ModelResources;
4217
4268
  private record;
@@ -4471,11 +4522,19 @@ declare namespace shared {
4471
4522
  cloneDeep,
4472
4523
  cloneMaterials,
4473
4524
  disposeMaterials,
4525
+ configureRequestLoader,
4526
+ createFileLoader,
4527
+ createImageLoader,
4528
+ createTextureLoader,
4529
+ createCubeTextureLoader,
4530
+ configureGLTFLoader,
4474
4531
  FileResponseType,
4475
4532
  fetchFile,
4476
4533
  imageLoader,
4477
4534
  textureLoader,
4478
4535
  rgbeLoader,
4536
+ getRequestHeaders,
4537
+ fetchResource,
4479
4538
  isObjectBehindCamera,
4480
4539
  isObjectOccludeVisible,
4481
4540
  poiNodeOccludeHandler,
@@ -6721,7 +6780,7 @@ declare class Viewport {
6721
6780
  top: number;
6722
6781
  };
6723
6782
  getPositionByOffset(offset: OffsetPoint, z?: number, scalar?: number): Vector3;
6724
- getIntersects(event: MouseEvent | TouchEvent | OffsetPoint, objects?: Object3D<Object3DEventMap>[], options?: IntersectsOptions): Intersection<Object3D<Object3DEventMap>>[];
6783
+ getIntersects(event: MouseEvent | TouchEvent | OffsetPoint, objects?: Object3D | Object3D[], options?: IntersectsOptions): Intersection<Object3D<Object3DEventMap>>[];
6725
6784
  rayClash(startPoint?: Vector3, dir?: Vector3, objects?: Mesh<BufferGeometry<NormalBufferAttributes, BufferGeometryEventMap>, Material<MaterialEventMap> | Material<MaterialEventMap>[], Object3DEventMap>[]): Intersection<Object3D<Object3DEventMap>>[];
6726
6785
  clearSignals(): void;
6727
6786
  /**