viral-viewer-2 5.9.4 → 5.9.5
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/dist/components/data-manager/viral-data-manager.d.ts +9 -0
- package/dist/components/data-manager/viral-data-manager.js +29 -0
- package/dist/components/data-manager/viral-data-manager.js.map +1 -0
- package/dist/components/worker/fetch-data.worker.d.ts +12 -0
- package/dist/components/worker/fetch-data.worker.js +32 -0
- package/dist/components/worker/fetch-data.worker.js.map +1 -0
- package/dist/components/worker-script/fetch-data-worker.script.d.ts +1 -0
- package/dist/components/worker-script/fetch-data-worker.script.js +56 -0
- package/dist/components/worker-script/fetch-data-worker.script.js.map +1 -0
- package/dist/viral-viewer-api.d.ts +2 -0
- package/dist/viral-viewer-api.js +2 -0
- package/dist/viral-viewer-api.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Dictionary, ViralViewerApi } from "../..";
|
|
2
|
+
export declare class ViralDataManager {
|
|
3
|
+
viralViewerApi: ViralViewerApi;
|
|
4
|
+
elementData: Dictionary<number, any>;
|
|
5
|
+
private fetchDataWorker;
|
|
6
|
+
constructor(viralViewerApi: ViralViewerApi);
|
|
7
|
+
normalFetch(url: string, byteRangeStart?: number, byteRangeEnd?: number): Promise<Response>;
|
|
8
|
+
workerFetch(url: string, callbackOnSuccess?: (response: Response) => void, byteRangeStart?: number, byteRangeEnd?: number): void;
|
|
9
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ViralDataManager = void 0;
|
|
4
|
+
const __1 = require("../..");
|
|
5
|
+
const fetch_data_worker_1 = require("../worker/fetch-data.worker");
|
|
6
|
+
class ViralDataManager {
|
|
7
|
+
constructor(viralViewerApi) {
|
|
8
|
+
this.viralViewerApi = viralViewerApi;
|
|
9
|
+
this.elementData = new __1.Dictionary();
|
|
10
|
+
this.fetchDataWorker = new fetch_data_worker_1.FetchDataWorker();
|
|
11
|
+
}
|
|
12
|
+
normalFetch(url, byteRangeStart, byteRangeEnd) {
|
|
13
|
+
if (byteRangeStart && byteRangeStart > 0 && byteRangeEnd && byteRangeEnd > 0) {
|
|
14
|
+
return fetch(url, {
|
|
15
|
+
headers: {
|
|
16
|
+
Range: `bytes=${byteRangeStart}-${byteRangeEnd}`,
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
return fetch(url);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
workerFetch(url, callbackOnSuccess = (response) => { }, byteRangeStart, byteRangeEnd) {
|
|
25
|
+
this.fetchDataWorker.fetch(url, (response) => { callbackOnSuccess(response); }, byteRangeStart, byteRangeEnd);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.ViralDataManager = ViralDataManager;
|
|
29
|
+
//# sourceMappingURL=viral-data-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viral-data-manager.js","sourceRoot":"","sources":["../../../src/components/data-manager/viral-data-manager.ts"],"names":[],"mappings":";;;AAAA,6BAAmD;AACnD,mEAA8D;AAE9D,MAAa,gBAAgB;IAG3B,YAAmB,cAA8B;QAA9B,mBAAc,GAAd,cAAc,CAAgB;QAF1C,gBAAW,GAA4B,IAAI,cAAU,EAAE,CAAC;QACvD,oBAAe,GAAmB,IAAI,mCAAe,EAAE,CAAC;IACZ,CAAC;IAE9C,WAAW,CAAC,GAAU,EAAC,cAAsB,EAAC,YAAoB;QACvE,IAAG,cAAc,IAAI,cAAc,GAAC,CAAC,IAAI,YAAY,IAAI,YAAY,GAAC,CAAC,EACvE;YACE,OAAO,KAAK,CAAC,GAAG,EAAE;gBAChB,OAAO,EAAE;oBACP,KAAK,EAAE,SAAS,cAAc,IAAI,YAAY,EAAE;iBACjD;aACF,CAAC,CAAC;SACJ;aAED;YACE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;SACnB;IACH,CAAC;IAEM,WAAW,CAAC,GAAU,EAAC,oBAAoB,CAAC,QAAiB,EAAC,EAAE,GAAC,CAAC,EAAC,cAAsB,EAAC,YAAoB;QAClH,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,EAAC,CAAC,QAAiB,EAAC,EAAE,GAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAA,CAAA,CAAC,EAAC,cAAc,EAAC,YAAY,CAAC,CAAA;IACjH,CAAC;CAEF;AAxBD,4CAwBC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { WorkerThreadPool } from "./base/worker-pool";
|
|
2
|
+
export declare class FetchDataWorker {
|
|
3
|
+
workerPool: WorkerThreadPool;
|
|
4
|
+
constructor();
|
|
5
|
+
fetch(url: string, callbackOnSuccess?: (response: Response) => void, byteRangeStart?: number, byteRangeEnd?: number): void;
|
|
6
|
+
}
|
|
7
|
+
export declare class FetchRequest {
|
|
8
|
+
url: string;
|
|
9
|
+
byteRangeStart?: number;
|
|
10
|
+
byteRangeEnd?: number;
|
|
11
|
+
constructor(url: string, byteRangeStart?: number, byteRangeEnd?: number);
|
|
12
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FetchRequest = exports.FetchDataWorker = void 0;
|
|
4
|
+
const worker_pool_1 = require("./base/worker-pool");
|
|
5
|
+
const fetch_data_worker_script_1 = require("../worker-script/fetch-data-worker.script");
|
|
6
|
+
class FetchDataWorker {
|
|
7
|
+
constructor() {
|
|
8
|
+
// Create a new Blob containing the worker code
|
|
9
|
+
const blob = new Blob([`(${fetch_data_worker_script_1.workerCode})()`]);
|
|
10
|
+
const workerPath = URL.createObjectURL(blob);
|
|
11
|
+
// Create a new Worker from the Blob
|
|
12
|
+
this.workerPool = new worker_pool_1.WorkerThreadPool(2, workerPath);
|
|
13
|
+
}
|
|
14
|
+
fetch(url, callbackOnSuccess = (response) => { }, byteRangeStart, byteRangeEnd) {
|
|
15
|
+
let request = new FetchRequest(url, byteRangeStart, byteRangeEnd);
|
|
16
|
+
this.workerPool.Enqueue(request, (result) => {
|
|
17
|
+
if (result instanceof Response)
|
|
18
|
+
callbackOnSuccess(result);
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.FetchDataWorker = FetchDataWorker;
|
|
23
|
+
class FetchRequest {
|
|
24
|
+
constructor(url, byteRangeStart, byteRangeEnd) {
|
|
25
|
+
this.url = '';
|
|
26
|
+
this.url = url;
|
|
27
|
+
this.byteRangeStart = byteRangeStart;
|
|
28
|
+
this.byteRangeEnd = byteRangeEnd;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.FetchRequest = FetchRequest;
|
|
32
|
+
//# sourceMappingURL=fetch-data.worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-data.worker.js","sourceRoot":"","sources":["../../../src/components/worker/fetch-data.worker.ts"],"names":[],"mappings":";;;AAAA,oDAAsD;AACtD,wFAAuE;AAEvE,MAAa,eAAe;IAExB;QACE,+CAA+C;QAC/C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,qCAAU,KAAK,CAAC,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC7C,oCAAoC;QACpC,IAAI,CAAC,UAAU,GAAG,IAAI,8BAAgB,CACpC,CAAC,EACD,UAAU,CACX,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,GAAU,EAAC,oBAAoB,CAAC,QAAiB,EAAC,EAAE,GAAC,CAAC,EAAC,cAAsB,EAAC,YAAoB;QAE3G,IAAI,OAAO,GAAG,IAAI,YAAY,CAAC,GAAG,EAAC,cAAc,EAAC,YAAY,CAAC,CAAA;QAC/D,IAAI,CAAC,UAAU,CAAC,OAAO,CAA+B,OAAO,EAAC,CAAC,MAAsB,EAAC,EAAE;YACpF,IAAG,MAAM,YAAY,QAAQ;gBAC7B,iBAAiB,CAAC,MAAM,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;IAEN,CAAC;CACJ;AAtBD,0CAsBC;AAED,MAAa,YAAY;IAKrB,YAAY,GAAU,EAAC,cAAsB,EAAC,YAAoB;QAHlE,QAAG,GAAQ,EAAE,CAAC;QAKV,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACrC,CAAC;CACJ;AAXD,oCAWC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const workerCode: any;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.workerCode = void 0;
|
|
4
|
+
function workerFunction() {
|
|
5
|
+
self.addEventListener("message", (event) => {
|
|
6
|
+
// Retrieve the URL from the main thread
|
|
7
|
+
const request = event.data;
|
|
8
|
+
const url = request.url;
|
|
9
|
+
const byteRangeStart = event.data.byteRangeStart;
|
|
10
|
+
const byteRangeEnd = event.data.byteRangeEnd;
|
|
11
|
+
// Fetch data from the URL
|
|
12
|
+
if (byteRangeStart &&
|
|
13
|
+
byteRangeStart > 0 &&
|
|
14
|
+
byteRangeEnd &&
|
|
15
|
+
byteRangeEnd > 0) {
|
|
16
|
+
fetch(url, {
|
|
17
|
+
headers: {
|
|
18
|
+
Range: `bytes=${byteRangeStart}-${byteRangeEnd}`,
|
|
19
|
+
},
|
|
20
|
+
})
|
|
21
|
+
.then((response) => {
|
|
22
|
+
if (!response.ok) {
|
|
23
|
+
throw new Error(`Network response was not ok, status: ${response.status}`);
|
|
24
|
+
}
|
|
25
|
+
return response;
|
|
26
|
+
})
|
|
27
|
+
.then((data) => {
|
|
28
|
+
// Send the fetched data back to the main thread
|
|
29
|
+
self.postMessage(data);
|
|
30
|
+
})
|
|
31
|
+
.catch((error) => {
|
|
32
|
+
// Handle errors and send them back to the main thread
|
|
33
|
+
self.postMessage({ error: error.message });
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
fetch(url)
|
|
38
|
+
.then((response) => {
|
|
39
|
+
if (!response.ok) {
|
|
40
|
+
throw new Error(`Network response was not ok, status: ${response.status}`);
|
|
41
|
+
}
|
|
42
|
+
return response;
|
|
43
|
+
})
|
|
44
|
+
.then((data) => {
|
|
45
|
+
// Send the fetched data back to the main thread
|
|
46
|
+
self.postMessage(data);
|
|
47
|
+
})
|
|
48
|
+
.catch((error) => {
|
|
49
|
+
// Handle errors and send them back to the main thread
|
|
50
|
+
self.postMessage({ error: error.message });
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}, false);
|
|
54
|
+
}
|
|
55
|
+
exports.workerCode = workerFunction;
|
|
56
|
+
//# sourceMappingURL=fetch-data-worker.script.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-data-worker.script.js","sourceRoot":"","sources":["../../../src/components/worker-script/fetch-data-worker.script.ts"],"names":[],"mappings":";;;AAAA,SAAS,cAAc;IACrB,IAAI,CAAC,gBAAgB,CACnB,SAAS,EACT,CAAC,KAAK,EAAE,EAAE;QACR,wCAAwC;QACxC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;QAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACxB,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;QACjD,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;QAC7C,0BAA0B;QAC1B,IACE,cAAc;YACd,cAAc,GAAG,CAAC;YAClB,YAAY;YACZ,YAAY,GAAG,CAAC,EAChB;YACA,KAAK,CAAC,GAAG,EAAE;gBACT,OAAO,EAAE;oBACP,KAAK,EAAE,SAAS,cAAc,IAAI,YAAY,EAAE;iBACjD;aACF,CAAC;iBACC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACjB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;oBAChB,MAAM,IAAI,KAAK,CACb,wCAAwC,QAAQ,CAAC,MAAM,EAAE,CAC1D,CAAC;iBACH;gBACD,OAAO,QAAQ,CAAC;YAClB,CAAC,CAAC;iBACD,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;gBACb,gDAAgD;gBAChD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACf,sDAAsD;gBACtD,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;SACN;aAAM;YACL,KAAK,CAAC,GAAG,CAAC;iBACP,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACjB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;oBAChB,MAAM,IAAI,KAAK,CACb,wCAAwC,QAAQ,CAAC,MAAM,EAAE,CAC1D,CAAC;iBACH;gBACD,OAAO,QAAQ,CAAC;YAClB,CAAC,CAAC;iBACD,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;gBACb,gDAAgD;gBAChD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACf,sDAAsD;gBACtD,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;SACN;IACH,CAAC,EACD,KAAK,CACN,CAAC;AACJ,CAAC;AAEY,QAAA,UAAU,GAAQ,cAAc,CAAC"}
|
|
@@ -20,6 +20,7 @@ import { ViralMaterialManager } from "./components/material/viral-material-manag
|
|
|
20
20
|
import { EventDispatcher } from "./components/event-handler/base/event-dispatcher";
|
|
21
21
|
import { ViralLifecycleEventHandler } from "./components/event-handler/viral-lifecycle-event-handler";
|
|
22
22
|
import { ViralVisibilityManager } from "./components/visibility-manager/viral-visibility-manager";
|
|
23
|
+
import { ViralDataManager } from "./components/data-manager/viral-data-manager";
|
|
23
24
|
export declare class ViralViewerApi {
|
|
24
25
|
lifeCycleEvent: EventDispatcher;
|
|
25
26
|
options: ViewerOptions;
|
|
@@ -41,6 +42,7 @@ export declare class ViralViewerApi {
|
|
|
41
42
|
viralLoader: ViralLoader;
|
|
42
43
|
viralCompressProcessor: ViralCompressProcessor;
|
|
43
44
|
viralBVH: ViralBVH;
|
|
45
|
+
viralDataManager: ViralDataManager;
|
|
44
46
|
worker4: ViralViewerWorker4;
|
|
45
47
|
localStorageService: LocalStorageService;
|
|
46
48
|
viralStats: ViralStats | null;
|
package/dist/viral-viewer-api.js
CHANGED
|
@@ -23,6 +23,7 @@ const event_dispatcher_1 = require("./components/event-handler/base/event-dispat
|
|
|
23
23
|
const viral_lifecycle_event_handler_1 = require("./components/event-handler/viral-lifecycle-event-handler");
|
|
24
24
|
const fonts_1 = require("./gui/fonts/fonts");
|
|
25
25
|
const viral_visibility_manager_1 = require("./components/visibility-manager/viral-visibility-manager");
|
|
26
|
+
const viral_data_manager_1 = require("./components/data-manager/viral-data-manager");
|
|
26
27
|
class ViralViewerApi {
|
|
27
28
|
constructor(options = {
|
|
28
29
|
isDev: false,
|
|
@@ -55,6 +56,7 @@ class ViralViewerApi {
|
|
|
55
56
|
this.viralCentralizedEventHandler = new viral_centralized_event_handler_1.ViralCentralizedEventHandler(this);
|
|
56
57
|
this.viralLoader = new viral_loader_1.ViralLoader(this);
|
|
57
58
|
this.viralBVH = new viral_bvh_1.ViralBVH();
|
|
59
|
+
this.viralDataManager = new viral_data_manager_1.ViralDataManager(this);
|
|
58
60
|
// this.worker3 = new ViralViewerWorker3(this);
|
|
59
61
|
this.worker4 = new viral_viewer_4_worker_1.ViralViewerWorker4(this);
|
|
60
62
|
if (this.options.isDev) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viral-viewer-api.js","sourceRoot":"","sources":["../src/viral-viewer-api.ts"],"names":[],"mappings":";;;AACA,6FAAwF;AACxF,mEAA+D;AAC/D,gEAA4D;AAC5D,gEAA4D;AAC5D,yEAAqE;AACrE,8FAAyF;AACzF,4EAAwE;AACxE,gEAA4D;AAC5D,sEAAkE;AAClE,4EAAuE;AACvE,yEAAqE;AAErE,qFAAgF;AAChF,gHAA0G;AAC1G,mEAA+D;AAC/D,gEAA4D;AAC5D,0DAAsD;AACtD,qFAA+E;AAC/E,yFAAoF;AACpF,uFAAmF;AACnF,4GAAsG;AACtG,6CAA4D;AAE5D,uGAAkG;
|
|
1
|
+
{"version":3,"file":"viral-viewer-api.js","sourceRoot":"","sources":["../src/viral-viewer-api.ts"],"names":[],"mappings":"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"}
|