@inweb/viewer-visualize 26.7.0 → 26.7.2

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.
@@ -2425,35 +2425,121 @@ components.registerComponent("ZoomWheelComponent", (viewer => new ZoomWheelCompo
2425
2425
 
2426
2426
  components.registerComponent("GestureManagerComponent", (viewer => new GestureManagerComponent(viewer)));
2427
2427
 
2428
- class VSFBufferLoader extends Loader {
2428
+ class FileLoader {
2429
+ constructor() {
2430
+ this.requestHeader = {};
2431
+ this.withCredentials = false;
2432
+ this.abortSignal = undefined;
2433
+ }
2434
+ setRequestHeader(requestHeader) {
2435
+ this.requestHeader = requestHeader;
2436
+ }
2437
+ setWithCredentials(withCredentials) {
2438
+ this.withCredentials = withCredentials;
2439
+ }
2440
+ setAbortSignal(abortSignal) {
2441
+ this.abortSignal = abortSignal;
2442
+ }
2443
+ load(file, onProgress) {
2444
+ if (typeof file === "string") {
2445
+ const request = new Request(file, {
2446
+ headers: new Headers(this.requestHeader),
2447
+ credentials: this.withCredentials ? "include" : "same-origin",
2448
+ signal: this.abortSignal
2449
+ });
2450
+ return fetch(request).then((response => {
2451
+ if (!response.ok) throw new Error(`Failed to fetch "${response.url}", status ${response.status}`);
2452
+ const contentLength = response.headers.get("X-File-Size") || response.headers.get("Content-Length");
2453
+ const total = parseInt(contentLength || "", 10) || 0;
2454
+ const lengthComputable = total > 0;
2455
+ const stream = new ReadableStream({
2456
+ async start(controller) {
2457
+ const reader = response.body.getReader();
2458
+ let loaded = 0;
2459
+ try {
2460
+ while (true) {
2461
+ const {done: done, value: value} = await reader.read();
2462
+ if (done) break;
2463
+ if (onProgress) {
2464
+ loaded += value.byteLength;
2465
+ onProgress(new ProgressEvent("progress", {
2466
+ lengthComputable: lengthComputable,
2467
+ loaded: loaded,
2468
+ total: total
2469
+ }));
2470
+ }
2471
+ controller.enqueue(value);
2472
+ }
2473
+ controller.close();
2474
+ } catch (e) {
2475
+ controller.error(e);
2476
+ }
2477
+ }
2478
+ });
2479
+ return new Response(stream);
2480
+ })).then((response => response.arrayBuffer()));
2481
+ }
2482
+ if (file instanceof globalThis.File) {
2483
+ return new Promise(((resolve, reject) => {
2484
+ const reader = new FileReader;
2485
+ reader.onload = () => resolve(reader.result);
2486
+ reader.onerror = () => reject(reader.error);
2487
+ reader.onprogress = onProgress;
2488
+ reader.readAsArrayBuffer(new Blob([ file ]));
2489
+ }));
2490
+ }
2491
+ if (onProgress) {
2492
+ const total = file.byteLength;
2493
+ const lengthComputable = total > 0;
2494
+ const loaded = total;
2495
+ onProgress(new ProgressEvent("progress", {
2496
+ lengthComputable: lengthComputable,
2497
+ loaded: loaded,
2498
+ total: total
2499
+ }));
2500
+ }
2501
+ return Promise.resolve(file);
2502
+ }
2503
+ }
2504
+
2505
+ class VSFFileLoader extends Loader {
2429
2506
  constructor(viewer) {
2430
2507
  super();
2431
2508
  this.viewer = viewer;
2432
2509
  }
2433
2510
  isSupport(file, format) {
2434
- return file instanceof ArrayBuffer && /vsf$/i.test(format);
2511
+ return (typeof file === "string" || file instanceof globalThis.File || file instanceof ArrayBuffer) && /vsf$/i.test(format);
2435
2512
  }
2436
- load(buffer, format) {
2437
- if (!this.viewer.visualizeJs) return Promise.resolve(this);
2513
+ async load(file, format, params) {
2514
+ if (!this.viewer.visualizeJs) return this;
2515
+ const progress = event => {
2516
+ const {lengthComputable: lengthComputable, loaded: loaded, total: total} = event;
2517
+ const progress = lengthComputable ? loaded / total : 1;
2518
+ this.viewer.emitEvent({
2519
+ type: "geometryprogress",
2520
+ data: progress,
2521
+ file: file
2522
+ });
2523
+ };
2524
+ const loader = new FileLoader;
2525
+ loader.setRequestHeader(params.requestHeader);
2526
+ loader.setWithCredentials(params.withCredentials);
2527
+ loader.setAbortSignal(this.abortController.signal);
2528
+ const buffer = await loader.load(file, progress);
2529
+ const data = new Uint8Array(buffer);
2438
2530
  const visLib = this.viewer.visLib();
2439
2531
  const visViewer = visLib.getViewer();
2440
- const data = new Uint8Array(buffer);
2441
2532
  visViewer.parseFile(data);
2442
2533
  this.viewer.syncOpenCloudVisualStyle(false);
2443
2534
  this.viewer.syncOptions();
2444
2535
  this.viewer.syncOverlay();
2445
2536
  this.viewer.resize();
2446
- this.viewer.emitEvent({
2447
- type: "geometryprogress",
2448
- data: 1,
2449
- file: buffer
2450
- });
2451
2537
  this.viewer.emitEvent({
2452
2538
  type: "databasechunk",
2453
2539
  data: data,
2454
- file: buffer
2540
+ file: file
2455
2541
  });
2456
- return Promise.resolve(this);
2542
+ return this;
2457
2543
  }
2458
2544
  }
2459
2545
 
@@ -2513,35 +2599,44 @@ class VSFCloudLoader extends Loader {
2513
2599
  }
2514
2600
  }
2515
2601
 
2516
- class VSFXBufferLoader extends Loader {
2602
+ class VSFXFileLoader extends Loader {
2517
2603
  constructor(viewer) {
2518
2604
  super();
2519
2605
  this.viewer = viewer;
2520
2606
  }
2521
2607
  isSupport(file, format) {
2522
- return file instanceof ArrayBuffer && /vsfx$/i.test(format);
2608
+ return (typeof file === "string" || file instanceof globalThis.File || file instanceof ArrayBuffer) && /vsfx$/i.test(format);
2523
2609
  }
2524
- load(buffer, format) {
2525
- if (!this.viewer.visualizeJs) return Promise.resolve(this);
2610
+ async load(file, format, params) {
2611
+ if (!this.viewer.visualizeJs) return this;
2612
+ const progress = event => {
2613
+ const {lengthComputable: lengthComputable, loaded: loaded, total: total} = event;
2614
+ const progress = lengthComputable ? loaded / total : 1;
2615
+ this.viewer.emitEvent({
2616
+ type: "geometryprogress",
2617
+ data: progress,
2618
+ file: file
2619
+ });
2620
+ };
2621
+ const loader = new FileLoader;
2622
+ loader.setRequestHeader(params.requestHeader);
2623
+ loader.setWithCredentials(params.withCredentials);
2624
+ loader.setAbortSignal(this.abortController.signal);
2625
+ const buffer = await loader.load(file, progress);
2626
+ const data = new Uint8Array(buffer);
2526
2627
  const visLib = this.viewer.visLib();
2527
2628
  const visViewer = visLib.getViewer();
2528
- const data = new Uint8Array(buffer);
2529
2629
  visViewer.parseVsfx(data);
2530
2630
  this.viewer.syncOpenCloudVisualStyle(false);
2531
2631
  this.viewer.syncOptions();
2532
2632
  this.viewer.syncOverlay();
2533
2633
  this.viewer.resize();
2534
- this.viewer.emitEvent({
2535
- type: "geometryprogress",
2536
- data: 1,
2537
- file: buffer
2538
- });
2539
2634
  this.viewer.emitEvent({
2540
2635
  type: "databasechunk",
2541
2636
  data: data,
2542
- file: buffer
2637
+ file: file
2543
2638
  });
2544
- return Promise.resolve(this);
2639
+ return this;
2545
2640
  }
2546
2641
  }
2547
2642
 
@@ -2875,11 +2970,11 @@ class VSFXCloudPartialLoader extends Loader {
2875
2970
 
2876
2971
  const loaders = loadersRegistry("visualizejs");
2877
2972
 
2878
- loaders.registerLoader("vsf-buffer", (viewer => new VSFBufferLoader(viewer)));
2973
+ loaders.registerLoader("vsf-file", (viewer => new VSFFileLoader(viewer)));
2879
2974
 
2880
2975
  loaders.registerLoader("vsf-cloud", (viewer => new VSFCloudLoader(viewer)));
2881
2976
 
2882
- loaders.registerLoader("vsfx-buffer", (viewer => new VSFXBufferLoader(viewer)));
2977
+ loaders.registerLoader("vsfx-file", (viewer => new VSFXFileLoader(viewer)));
2883
2978
 
2884
2979
  loaders.registerLoader("vsfx-cloud", (viewer => new VSFXCloudLoader(viewer)));
2885
2980
 
@@ -3835,6 +3930,7 @@ class Viewer extends EventEmitter2 {
3835
3930
  return this;
3836
3931
  }
3837
3932
  openVsfFile(buffer) {
3933
+ console.warn("Viewer.openVsfFile() has been deprecated since 26.4 and will be removed in a future release, use Viewer.open() instead.");
3838
3934
  if (!this.visualizeJs) return this;
3839
3935
  this.cancel();
3840
3936
  this.clear();
@@ -3880,6 +3976,7 @@ class Viewer extends EventEmitter2 {
3880
3976
  return this;
3881
3977
  }
3882
3978
  openVsfxFile(buffer) {
3979
+ console.warn("Viewer.openVsfxFile() has been deprecated since 26.4 and will be removed in a future release, use Viewer.open() instead.");
3883
3980
  if (!this.visualizeJs) return this;
3884
3981
  this.cancel();
3885
3982
  this.clear();
@@ -4097,5 +4194,5 @@ class Viewer extends EventEmitter2 {
4097
4194
  }
4098
4195
  }
4099
4196
 
4100
- export { OdBaseDragger, Viewer, commands, components, draggers, loaders };
4197
+ export { FileLoader, OdBaseDragger, Viewer, commands, components, draggers, loaders };
4101
4198
  //# sourceMappingURL=viewer-visualize.module.js.map