cod-dicomweb-server 1.3.11 → 1.3.12
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/cjs/main.js +1680 -1680
- package/dist/esm/classes/CodDicomWebServer.d.ts +1 -1
- package/dist/esm/classes/CodDicomWebServer.js +15 -11
- package/dist/esm/classes/customClasses.d.ts +1 -0
- package/dist/esm/dataRetrieval/register.d.ts +1 -1
- package/dist/esm/dataRetrieval/register.js +1 -2
- package/dist/esm/dataRetrieval/scripts/fileStreaming.d.ts +1 -4
- package/dist/esm/dataRetrieval/scripts/fileStreaming.js +5 -27
- package/dist/esm/fileManager.d.ts +3 -7
- package/dist/esm/fileManager.js +29 -17
- package/dist/esm/types/codDicomWebServerOptions.d.ts +1 -1
- package/dist/esm/types/fileManagerFile.d.ts +6 -0
- package/dist/esm/types/index.d.ts +1 -1
- package/dist/esm/types/index.js +1 -1
- package/dist/umd/563.js +1 -1
- package/dist/umd/563.js.map +1 -1
- package/dist/umd/846.js +2 -2
- package/dist/umd/846.js.map +1 -1
- package/dist/umd/main.js +3 -3
- package/dist/umd/main.js.map +1 -1
- package/package.json +1 -1
- package/dist/esm/types/fileManagerOptions.d.ts +0 -4
- /package/dist/esm/types/{fileManagerOptions.js → fileManagerFile.js} +0 -0
|
@@ -11,7 +11,7 @@ import { download, getDirectoryHandle } from '../fileAccessSystemUtils';
|
|
|
11
11
|
class CodDicomWebServer {
|
|
12
12
|
filePromises = {};
|
|
13
13
|
options = {
|
|
14
|
-
|
|
14
|
+
maxCacheSize: 4 * 1024 * 1024 * 1024,
|
|
15
15
|
domain: constants.url.DOMAIN,
|
|
16
16
|
enableLocalCache: false
|
|
17
17
|
};
|
|
@@ -19,19 +19,19 @@ class CodDicomWebServer {
|
|
|
19
19
|
metadataManager;
|
|
20
20
|
seriesUidFileUrls = {};
|
|
21
21
|
constructor(args = {}) {
|
|
22
|
-
const {
|
|
23
|
-
this.options.
|
|
22
|
+
const { maxCacheSize, domain, disableWorker, enableLocalCache } = args;
|
|
23
|
+
this.options.maxCacheSize = maxCacheSize || this.options.maxCacheSize;
|
|
24
24
|
this.options.domain = domain || this.options.domain;
|
|
25
25
|
this.options.enableLocalCache = !!enableLocalCache;
|
|
26
26
|
const fileStreamingScriptName = constants.dataRetrieval.FILE_STREAMING_WORKER_NAME;
|
|
27
27
|
const filePartialScriptName = constants.dataRetrieval.FILE_PARTIAL_WORKER_NAME;
|
|
28
|
-
this.fileManager = new FileManager(
|
|
28
|
+
this.fileManager = new FileManager();
|
|
29
29
|
this.metadataManager = new MetadataManager();
|
|
30
30
|
if (disableWorker) {
|
|
31
31
|
const dataRetrievalManager = getDataRetrievalManager();
|
|
32
32
|
dataRetrievalManager.setDataRetrieverMode(Enums.DataRetrieveMode.REQUEST);
|
|
33
33
|
}
|
|
34
|
-
register({ fileStreamingScriptName, filePartialScriptName }
|
|
34
|
+
register({ fileStreamingScriptName, filePartialScriptName });
|
|
35
35
|
}
|
|
36
36
|
setOptions = (newOptions) => {
|
|
37
37
|
Object.keys(newOptions).forEach((key) => {
|
|
@@ -163,15 +163,11 @@ class CodDicomWebServer {
|
|
|
163
163
|
});
|
|
164
164
|
}
|
|
165
165
|
const directoryHandle = this.options.enableLocalCache && (await getDirectoryHandle());
|
|
166
|
-
const { maxWorkerFetchSize } = this.getOptions();
|
|
167
166
|
const dataRetrievalManager = getDataRetrievalManager();
|
|
168
|
-
const { FILE_STREAMING_WORKER_NAME, FILE_PARTIAL_WORKER_NAME
|
|
167
|
+
const { FILE_STREAMING_WORKER_NAME, FILE_PARTIAL_WORKER_NAME } = constants.dataRetrieval;
|
|
169
168
|
let tarPromise;
|
|
170
169
|
if (!this.filePromises[fileUrl]) {
|
|
171
170
|
tarPromise = new Promise((resolveFile, rejectFile) => {
|
|
172
|
-
if (this.fileManager.getTotalSize() + THRESHOLD > maxWorkerFetchSize) {
|
|
173
|
-
throw new CustomError(`CodDicomWebServer.ts: Maximum size(${maxWorkerFetchSize}) for fetching files reached`);
|
|
174
|
-
}
|
|
175
171
|
const FetchTypeEnum = constants.Enums.FetchType;
|
|
176
172
|
if (fetchType === FetchTypeEnum.API_OPTIMIZED) {
|
|
177
173
|
const handleFirstChunk = (evt) => {
|
|
@@ -251,7 +247,7 @@ class CodDicomWebServer {
|
|
|
251
247
|
rejectRequest(evt.message);
|
|
252
248
|
throw evt.error;
|
|
253
249
|
}
|
|
254
|
-
const { url, position, chunk, isAppending } = evt.data;
|
|
250
|
+
const { url, position, chunk, totalLength, isAppending } = evt.data;
|
|
255
251
|
if (isAppending) {
|
|
256
252
|
if (chunk) {
|
|
257
253
|
this.fileManager.append(url, chunk, position);
|
|
@@ -260,6 +256,14 @@ class CodDicomWebServer {
|
|
|
260
256
|
this.fileManager.setPosition(url, position);
|
|
261
257
|
}
|
|
262
258
|
}
|
|
259
|
+
else {
|
|
260
|
+
// The full empty file including with first chunk have been stored to fileManager
|
|
261
|
+
// by the worker listener in the file promise.
|
|
262
|
+
// So, we check whether the cache exceeded the limit here.
|
|
263
|
+
if (this.fileManager.getTotalSize() > this.options.maxCacheSize) {
|
|
264
|
+
this.fileManager.decacheNecessaryBytes(url, totalLength);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
263
267
|
if (!requestResolved && url === fileUrl && offsets && position > offsets.endByte) {
|
|
264
268
|
try {
|
|
265
269
|
const file = this.fileManager.get(url, offsets);
|
|
@@ -2,7 +2,7 @@ import { Enums } from '../constants';
|
|
|
2
2
|
import { getDataRetrievalManager } from './dataRetrievalManager';
|
|
3
3
|
import filePartial from './scripts/filePartial';
|
|
4
4
|
import fileStreaming from './scripts/fileStreaming';
|
|
5
|
-
export function register(workerNames
|
|
5
|
+
export function register(workerNames) {
|
|
6
6
|
const { fileStreamingScriptName, filePartialScriptName } = workerNames;
|
|
7
7
|
const dataRetrievalManager = getDataRetrievalManager();
|
|
8
8
|
if (dataRetrievalManager.getDataRetrieverMode() === Enums.DataRetrieveMode.REQUEST) {
|
|
@@ -21,5 +21,4 @@ export function register(workerNames, maxFetchSize) {
|
|
|
21
21
|
});
|
|
22
22
|
dataRetrievalManager.register(filePartialScriptName, partialWorkerFn);
|
|
23
23
|
}
|
|
24
|
-
dataRetrievalManager.executeTask(fileStreamingScriptName, 'setMaxFetchSize', maxFetchSize);
|
|
25
24
|
}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
declare const fileStreaming: {
|
|
2
|
-
maxFetchSize: number;
|
|
3
|
-
fetchedSize: number;
|
|
4
|
-
setMaxFetchSize(size: number): void;
|
|
5
|
-
decreaseFetchedSize(size: number): void;
|
|
6
2
|
stream(args: {
|
|
7
3
|
url: string;
|
|
8
4
|
headers?: Record<string, string>;
|
|
@@ -14,6 +10,7 @@ declare const fileStreaming: {
|
|
|
14
10
|
isAppending?: boolean;
|
|
15
11
|
fileArraybuffer?: Uint8Array;
|
|
16
12
|
chunk?: Uint8Array;
|
|
13
|
+
totalLength: number;
|
|
17
14
|
}) => void): Promise<Uint8Array | void>;
|
|
18
15
|
};
|
|
19
16
|
export default fileStreaming;
|
|
@@ -1,18 +1,6 @@
|
|
|
1
1
|
import { CustomError } from '../../classes/customClasses';
|
|
2
2
|
import { createStreamingFileName, readFile, writeFile } from '../../fileAccessSystemUtils';
|
|
3
3
|
const fileStreaming = {
|
|
4
|
-
maxFetchSize: 4 * 1024 * 1024 * 1024,
|
|
5
|
-
fetchedSize: 0,
|
|
6
|
-
setMaxFetchSize(size) {
|
|
7
|
-
if (size > 0) {
|
|
8
|
-
this.maxFetchSize = size;
|
|
9
|
-
}
|
|
10
|
-
},
|
|
11
|
-
decreaseFetchedSize(size) {
|
|
12
|
-
if (size > 0 && size <= this.fetchedSize) {
|
|
13
|
-
this.fetchedSize -= size;
|
|
14
|
-
}
|
|
15
|
-
},
|
|
16
4
|
async stream(args, callBack) {
|
|
17
5
|
const { url, headers, useSharedArrayBuffer, directoryHandle } = args;
|
|
18
6
|
const controller = new AbortController();
|
|
@@ -23,7 +11,8 @@ const fileStreaming = {
|
|
|
23
11
|
if (directoryHandle) {
|
|
24
12
|
const file = (await readFile(directoryHandle, fileName, { isJson: false }));
|
|
25
13
|
if (file) {
|
|
26
|
-
|
|
14
|
+
const totalLength = file.byteLength;
|
|
15
|
+
callBack({ url, position: totalLength, fileArraybuffer: new Uint8Array(file), totalLength });
|
|
27
16
|
return;
|
|
28
17
|
}
|
|
29
18
|
}
|
|
@@ -48,11 +37,6 @@ const fileStreaming = {
|
|
|
48
37
|
}
|
|
49
38
|
if (!completed) {
|
|
50
39
|
let position = firstChunk.value.length;
|
|
51
|
-
if (this.fetchedSize + position > this.maxFetchSize) {
|
|
52
|
-
controller.abort();
|
|
53
|
-
throw new CustomError(`Maximum size(${this.maxFetchSize}) for fetching files reached`);
|
|
54
|
-
}
|
|
55
|
-
this.fetchedSize += position;
|
|
56
40
|
if (useSharedArrayBuffer) {
|
|
57
41
|
sharedArraybuffer = new SharedArrayBuffer(totalLength);
|
|
58
42
|
fileArraybuffer = new Uint8Array(sharedArraybuffer);
|
|
@@ -61,7 +45,7 @@ const fileStreaming = {
|
|
|
61
45
|
fileArraybuffer = new Uint8Array(totalLength);
|
|
62
46
|
}
|
|
63
47
|
fileArraybuffer.set(firstChunk.value);
|
|
64
|
-
callBack({ url, position, fileArraybuffer });
|
|
48
|
+
callBack({ url, position, fileArraybuffer, totalLength });
|
|
65
49
|
while (!completed) {
|
|
66
50
|
result = await reader.read();
|
|
67
51
|
if (result.done) {
|
|
@@ -69,20 +53,14 @@ const fileStreaming = {
|
|
|
69
53
|
continue;
|
|
70
54
|
}
|
|
71
55
|
const chunk = result.value;
|
|
72
|
-
if (this.fetchedSize + chunk.length > this.maxFetchSize) {
|
|
73
|
-
sharedArraybuffer = null;
|
|
74
|
-
fileArraybuffer = null;
|
|
75
|
-
controller.abort();
|
|
76
|
-
throw new CustomError(`Maximum size(${this.maxFetchSize}) for fetching files reached`);
|
|
77
|
-
}
|
|
78
|
-
this.fetchedSize += chunk.length;
|
|
79
56
|
fileArraybuffer.set(chunk, position);
|
|
80
57
|
position += chunk.length;
|
|
81
58
|
callBack({
|
|
82
59
|
isAppending: true,
|
|
83
60
|
url,
|
|
84
61
|
position: position,
|
|
85
|
-
chunk: !useSharedArrayBuffer ? chunk : undefined
|
|
62
|
+
chunk: !useSharedArrayBuffer ? chunk : undefined,
|
|
63
|
+
totalLength
|
|
86
64
|
});
|
|
87
65
|
}
|
|
88
66
|
if (directoryHandle) {
|
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { FileManagerFile } from './types';
|
|
2
2
|
declare class FileManager {
|
|
3
3
|
private files;
|
|
4
|
-
|
|
5
|
-
constructor({ fileStreamingScriptName }: FileManagerOptions);
|
|
6
|
-
set(url: string, file: {
|
|
7
|
-
data: Uint8Array;
|
|
8
|
-
position: number;
|
|
9
|
-
}): void;
|
|
4
|
+
set(url: string, file: Omit<FileManagerFile, 'lastModified'>): void;
|
|
10
5
|
get(url: string, offsets?: {
|
|
11
6
|
startByte: number;
|
|
12
7
|
endByte: number;
|
|
@@ -17,5 +12,6 @@ declare class FileManager {
|
|
|
17
12
|
getTotalSize(): number;
|
|
18
13
|
remove(url: string): void;
|
|
19
14
|
purge(): void;
|
|
15
|
+
decacheNecessaryBytes(url: string, bytesNeeded: number): number;
|
|
20
16
|
}
|
|
21
17
|
export default FileManager;
|
package/dist/esm/fileManager.js
CHANGED
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
import { getDataRetrievalManager } from './dataRetrieval/dataRetrievalManager';
|
|
2
1
|
class FileManager {
|
|
3
2
|
files = {};
|
|
4
|
-
fileStreamingScriptName;
|
|
5
|
-
constructor({ fileStreamingScriptName }) {
|
|
6
|
-
this.fileStreamingScriptName = fileStreamingScriptName;
|
|
7
|
-
}
|
|
8
3
|
set(url, file) {
|
|
9
|
-
this.files[url] = file;
|
|
4
|
+
this.files[url] = { ...file, lastModified: Date.now() };
|
|
10
5
|
}
|
|
11
6
|
get(url, offsets) {
|
|
12
7
|
if (!this.files[url] || (offsets && this.files[url].position <= offsets.endByte)) {
|
|
@@ -17,6 +12,7 @@ class FileManager {
|
|
|
17
12
|
setPosition(url, position) {
|
|
18
13
|
if (this.files[url]) {
|
|
19
14
|
this.files[url].position = position;
|
|
15
|
+
this.files[url].lastModified = Date.now();
|
|
20
16
|
}
|
|
21
17
|
}
|
|
22
18
|
getPosition(url) {
|
|
@@ -29,24 +25,40 @@ class FileManager {
|
|
|
29
25
|
}
|
|
30
26
|
}
|
|
31
27
|
getTotalSize() {
|
|
32
|
-
return Object.
|
|
33
|
-
return
|
|
28
|
+
return Object.values(this.files).reduce((total, { data }) => {
|
|
29
|
+
return total + data.byteLength;
|
|
34
30
|
}, 0);
|
|
35
31
|
}
|
|
36
32
|
remove(url) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
33
|
+
try {
|
|
34
|
+
delete this.files[url];
|
|
35
|
+
console.log(`Removed ${url} from CodDicomwebServer cache`);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
console.warn(`Error removing ${url} from CodDicomwebServer cache:`, error);
|
|
41
39
|
}
|
|
42
|
-
const retrievalManager = getDataRetrievalManager();
|
|
43
|
-
retrievalManager.executeTask(this.fileStreamingScriptName, 'decreaseFetchedSize', removedSize);
|
|
44
40
|
}
|
|
45
41
|
purge() {
|
|
42
|
+
const fileURLs = Object.keys(this.files);
|
|
43
|
+
const totalSize = this.getTotalSize();
|
|
44
|
+
fileURLs.forEach((url) => this.remove(url));
|
|
45
|
+
console.log(`Purged ${totalSize - this.getTotalSize()} bytes from CodDicomwebServer cache`);
|
|
46
|
+
}
|
|
47
|
+
decacheNecessaryBytes(url, bytesNeeded) {
|
|
46
48
|
const totalSize = this.getTotalSize();
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
49
|
+
const filesToDelete = [];
|
|
50
|
+
let collectiveSize = 0;
|
|
51
|
+
Object.entries(this.files)
|
|
52
|
+
.sort(([, a], [, b]) => a.lastModified - b.lastModified)
|
|
53
|
+
.forEach(([key, file]) => {
|
|
54
|
+
if (collectiveSize < bytesNeeded && key !== url) {
|
|
55
|
+
filesToDelete.push(key);
|
|
56
|
+
collectiveSize += file.data.byteLength;
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
filesToDelete.forEach((key) => this.remove(key));
|
|
60
|
+
console.log(`Decached ${totalSize - this.getTotalSize()} bytes`);
|
|
61
|
+
return collectiveSize;
|
|
50
62
|
}
|
|
51
63
|
}
|
|
52
64
|
export default FileManager;
|
package/dist/esm/types/index.js
CHANGED
package/dist/umd/563.js
CHANGED
package/dist/umd/563.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"563.js","mappings":"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","sources":["webpack://cod-dicomweb-server/webpack/universalModuleDefinition","webpack://cod-dicomweb-server/./node_modules/comlink/dist/esm/comlink.mjs","webpack://cod-dicomweb-server/./src/classes/customClasses.ts","webpack://cod-dicomweb-server/./src/constants/dataRetrieval.ts","webpack://cod-dicomweb-server/./src/fileAccessSystemUtils.ts","webpack://cod-dicomweb-server/./src/dataRetrieval/scripts/filePartial.ts","webpack://cod-dicomweb-server/./src/dataRetrieval/workers/filePartialWorker.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn ","/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nconst proxyMarker = Symbol(\"Comlink.proxy\");\nconst createEndpoint = Symbol(\"Comlink.endpoint\");\nconst releaseProxy = Symbol(\"Comlink.releaseProxy\");\nconst finalizer = Symbol(\"Comlink.finalizer\");\nconst throwMarker = Symbol(\"Comlink.thrown\");\nconst isObject = (val) => (typeof val === \"object\" && val !== null) || typeof val === \"function\";\n/**\n * Internal transfer handle to handle objects marked to proxy.\n */\nconst proxyTransferHandler = {\n canHandle: (val) => isObject(val) && val[proxyMarker],\n serialize(obj) {\n const { port1, port2 } = new MessageChannel();\n expose(obj, port1);\n return [port2, [port2]];\n },\n deserialize(port) {\n port.start();\n return wrap(port);\n },\n};\n/**\n * Internal transfer handler to handle thrown exceptions.\n */\nconst throwTransferHandler = {\n canHandle: (value) => isObject(value) && throwMarker in value,\n serialize({ value }) {\n let serialized;\n if (value instanceof Error) {\n serialized = {\n isError: true,\n value: {\n message: value.message,\n name: value.name,\n stack: value.stack,\n },\n };\n }\n else {\n serialized = { isError: false, value };\n }\n return [serialized, []];\n },\n deserialize(serialized) {\n if (serialized.isError) {\n throw Object.assign(new Error(serialized.value.message), serialized.value);\n }\n throw serialized.value;\n },\n};\n/**\n * Allows customizing the serialization of certain values.\n */\nconst transferHandlers = new Map([\n [\"proxy\", proxyTransferHandler],\n [\"throw\", throwTransferHandler],\n]);\nfunction isAllowedOrigin(allowedOrigins, origin) {\n for (const allowedOrigin of allowedOrigins) {\n if (origin === allowedOrigin || allowedOrigin === \"*\") {\n return true;\n }\n if (allowedOrigin instanceof RegExp && allowedOrigin.test(origin)) {\n return true;\n }\n }\n return false;\n}\nfunction expose(obj, ep = globalThis, allowedOrigins = [\"*\"]) {\n ep.addEventListener(\"message\", function callback(ev) {\n if (!ev || !ev.data) {\n return;\n }\n if (!isAllowedOrigin(allowedOrigins, ev.origin)) {\n console.warn(`Invalid origin '${ev.origin}' for comlink proxy`);\n return;\n }\n const { id, type, path } = Object.assign({ path: [] }, ev.data);\n const argumentList = (ev.data.argumentList || []).map(fromWireValue);\n let returnValue;\n try {\n const parent = path.slice(0, -1).reduce((obj, prop) => obj[prop], obj);\n const rawValue = path.reduce((obj, prop) => obj[prop], obj);\n switch (type) {\n case \"GET\" /* MessageType.GET */:\n {\n returnValue = rawValue;\n }\n break;\n case \"SET\" /* MessageType.SET */:\n {\n parent[path.slice(-1)[0]] = fromWireValue(ev.data.value);\n returnValue = true;\n }\n break;\n case \"APPLY\" /* MessageType.APPLY */:\n {\n returnValue = rawValue.apply(parent, argumentList);\n }\n break;\n case \"CONSTRUCT\" /* MessageType.CONSTRUCT */:\n {\n const value = new rawValue(...argumentList);\n returnValue = proxy(value);\n }\n break;\n case \"ENDPOINT\" /* MessageType.ENDPOINT */:\n {\n const { port1, port2 } = new MessageChannel();\n expose(obj, port2);\n returnValue = transfer(port1, [port1]);\n }\n break;\n case \"RELEASE\" /* MessageType.RELEASE */:\n {\n returnValue = undefined;\n }\n break;\n default:\n return;\n }\n }\n catch (value) {\n returnValue = { value, [throwMarker]: 0 };\n }\n Promise.resolve(returnValue)\n .catch((value) => {\n return { value, [throwMarker]: 0 };\n })\n .then((returnValue) => {\n const [wireValue, transferables] = toWireValue(returnValue);\n ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables);\n if (type === \"RELEASE\" /* MessageType.RELEASE */) {\n // detach and deactive after sending release response above.\n ep.removeEventListener(\"message\", callback);\n closeEndPoint(ep);\n if (finalizer in obj && typeof obj[finalizer] === \"function\") {\n obj[finalizer]();\n }\n }\n })\n .catch((error) => {\n // Send Serialization Error To Caller\n const [wireValue, transferables] = toWireValue({\n value: new TypeError(\"Unserializable return value\"),\n [throwMarker]: 0,\n });\n ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables);\n });\n });\n if (ep.start) {\n ep.start();\n }\n}\nfunction isMessagePort(endpoint) {\n return endpoint.constructor.name === \"MessagePort\";\n}\nfunction closeEndPoint(endpoint) {\n if (isMessagePort(endpoint))\n endpoint.close();\n}\nfunction wrap(ep, target) {\n const pendingListeners = new Map();\n ep.addEventListener(\"message\", function handleMessage(ev) {\n const { data } = ev;\n if (!data || !data.id) {\n return;\n }\n const resolver = pendingListeners.get(data.id);\n if (!resolver) {\n return;\n }\n try {\n resolver(data);\n }\n finally {\n pendingListeners.delete(data.id);\n }\n });\n return createProxy(ep, pendingListeners, [], target);\n}\nfunction throwIfProxyReleased(isReleased) {\n if (isReleased) {\n throw new Error(\"Proxy has been released and is not useable\");\n }\n}\nfunction releaseEndpoint(ep) {\n return requestResponseMessage(ep, new Map(), {\n type: \"RELEASE\" /* MessageType.RELEASE */,\n }).then(() => {\n closeEndPoint(ep);\n });\n}\nconst proxyCounter = new WeakMap();\nconst proxyFinalizers = \"FinalizationRegistry\" in globalThis &&\n new FinalizationRegistry((ep) => {\n const newCount = (proxyCounter.get(ep) || 0) - 1;\n proxyCounter.set(ep, newCount);\n if (newCount === 0) {\n releaseEndpoint(ep);\n }\n });\nfunction registerProxy(proxy, ep) {\n const newCount = (proxyCounter.get(ep) || 0) + 1;\n proxyCounter.set(ep, newCount);\n if (proxyFinalizers) {\n proxyFinalizers.register(proxy, ep, proxy);\n }\n}\nfunction unregisterProxy(proxy) {\n if (proxyFinalizers) {\n proxyFinalizers.unregister(proxy);\n }\n}\nfunction createProxy(ep, pendingListeners, path = [], target = function () { }) {\n let isProxyReleased = false;\n const proxy = new Proxy(target, {\n get(_target, prop) {\n throwIfProxyReleased(isProxyReleased);\n if (prop === releaseProxy) {\n return () => {\n unregisterProxy(proxy);\n releaseEndpoint(ep);\n pendingListeners.clear();\n isProxyReleased = true;\n };\n }\n if (prop === \"then\") {\n if (path.length === 0) {\n return { then: () => proxy };\n }\n const r = requestResponseMessage(ep, pendingListeners, {\n type: \"GET\" /* MessageType.GET */,\n path: path.map((p) => p.toString()),\n }).then(fromWireValue);\n return r.then.bind(r);\n }\n return createProxy(ep, pendingListeners, [...path, prop]);\n },\n set(_target, prop, rawValue) {\n throwIfProxyReleased(isProxyReleased);\n // FIXME: ES6 Proxy Handler `set` methods are supposed to return a\n // boolean. To show good will, we return true asynchronously ¯\\_(ツ)_/¯\n const [value, transferables] = toWireValue(rawValue);\n return requestResponseMessage(ep, pendingListeners, {\n type: \"SET\" /* MessageType.SET */,\n path: [...path, prop].map((p) => p.toString()),\n value,\n }, transferables).then(fromWireValue);\n },\n apply(_target, _thisArg, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const last = path[path.length - 1];\n if (last === createEndpoint) {\n return requestResponseMessage(ep, pendingListeners, {\n type: \"ENDPOINT\" /* MessageType.ENDPOINT */,\n }).then(fromWireValue);\n }\n // We just pretend that `bind()` didn’t happen.\n if (last === \"bind\") {\n return createProxy(ep, pendingListeners, path.slice(0, -1));\n }\n const [argumentList, transferables] = processArguments(rawArgumentList);\n return requestResponseMessage(ep, pendingListeners, {\n type: \"APPLY\" /* MessageType.APPLY */,\n path: path.map((p) => p.toString()),\n argumentList,\n }, transferables).then(fromWireValue);\n },\n construct(_target, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const [argumentList, transferables] = processArguments(rawArgumentList);\n return requestResponseMessage(ep, pendingListeners, {\n type: \"CONSTRUCT\" /* MessageType.CONSTRUCT */,\n path: path.map((p) => p.toString()),\n argumentList,\n }, transferables).then(fromWireValue);\n },\n });\n registerProxy(proxy, ep);\n return proxy;\n}\nfunction myFlat(arr) {\n return Array.prototype.concat.apply([], arr);\n}\nfunction processArguments(argumentList) {\n const processed = argumentList.map(toWireValue);\n return [processed.map((v) => v[0]), myFlat(processed.map((v) => v[1]))];\n}\nconst transferCache = new WeakMap();\nfunction transfer(obj, transfers) {\n transferCache.set(obj, transfers);\n return obj;\n}\nfunction proxy(obj) {\n return Object.assign(obj, { [proxyMarker]: true });\n}\nfunction windowEndpoint(w, context = globalThis, targetOrigin = \"*\") {\n return {\n postMessage: (msg, transferables) => w.postMessage(msg, targetOrigin, transferables),\n addEventListener: context.addEventListener.bind(context),\n removeEventListener: context.removeEventListener.bind(context),\n };\n}\nfunction toWireValue(value) {\n for (const [name, handler] of transferHandlers) {\n if (handler.canHandle(value)) {\n const [serializedValue, transferables] = handler.serialize(value);\n return [\n {\n type: \"HANDLER\" /* WireValueType.HANDLER */,\n name,\n value: serializedValue,\n },\n transferables,\n ];\n }\n }\n return [\n {\n type: \"RAW\" /* WireValueType.RAW */,\n value,\n },\n transferCache.get(value) || [],\n ];\n}\nfunction fromWireValue(value) {\n switch (value.type) {\n case \"HANDLER\" /* WireValueType.HANDLER */:\n return transferHandlers.get(value.name).deserialize(value.value);\n case \"RAW\" /* WireValueType.RAW */:\n return value.value;\n }\n}\nfunction requestResponseMessage(ep, pendingListeners, msg, transfers) {\n return new Promise((resolve) => {\n const id = generateUUID();\n pendingListeners.set(id, resolve);\n if (ep.start) {\n ep.start();\n }\n ep.postMessage(Object.assign({ id }, msg), transfers);\n });\n}\nfunction generateUUID() {\n return new Array(4)\n .fill(0)\n .map(() => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16))\n .join(\"-\");\n}\n\nexport { createEndpoint, expose, finalizer, proxy, proxyMarker, releaseProxy, transfer, transferHandlers, windowEndpoint, wrap };\n//# sourceMappingURL=comlink.mjs.map\n","export class CustomError extends Error {}\n\nexport class CustomErrorEvent extends Event {\n error: CustomError;\n message: string;\n\n constructor(message: string, error: CustomError) {\n super(message);\n this.message = message;\n this.error = error;\n }\n}\n\nexport class CustomMessageEvent extends MessageEvent<{\n url: string;\n position: number;\n chunk?: Uint8Array;\n isAppending?: boolean;\n fileArraybuffer?: Uint8Array;\n offsets?: { startByte: number; endByte: number };\n}> {}\n","export const FILE_PARTIAL_WORKER_NAME = 'filePartial';\nexport const FILE_STREAMING_WORKER_NAME = 'fileStreaming';\n\nexport const THRESHOLD = 10000;\n\nexport const IDB_DIR_HANDLE_KEY = 'indexed_db_directory_handle_key';\n\nexport const FILE_SYSTEM_ROUTES = {\n Partial: 'partial'\n};\n","import { get } from 'idb-keyval';\nimport { FILE_SYSTEM_ROUTES, IDB_DIR_HANDLE_KEY } from './constants/dataRetrieval';\nimport { JsonMetadata } from './types';\n\nlet directoryHandle: FileSystemDirectoryHandle;\n\nexport async function getDirectoryHandle(): Promise<FileSystemDirectoryHandle> {\n try {\n if (!directoryHandle) {\n directoryHandle = (await get(IDB_DIR_HANDLE_KEY)) as FileSystemDirectoryHandle;\n }\n\n if (!directoryHandle) {\n directoryHandle = await navigator.storage.getDirectory();\n }\n\n return directoryHandle;\n } catch (error) {\n console.warn(`Error getting directoryhandle: ${error.message}`);\n }\n}\n\nasync function readJsonFile(directoryHandle: FileSystemDirectoryHandle, name: string): Promise<JsonMetadata> {\n return await directoryHandle\n .getFileHandle(name)\n .then((fileHandle) =>\n fileHandle\n .getFile()\n .then((file) => file.text())\n .then((metadataString) => JSON.parse(metadataString))\n )\n .catch((): null => null);\n}\n\nasync function readArrayBufferFile(directoryHandle: FileSystemDirectoryHandle, name: string): Promise<ArrayBuffer> {\n return await directoryHandle\n .getFileHandle(name)\n .then((fileHandle) => fileHandle.getFile().then((file) => file.arrayBuffer()))\n .catch((): null => null);\n}\n\nexport async function readFile(\n directoryHandle: FileSystemDirectoryHandle,\n name: string,\n options: { isJson?: boolean; offsets?: { startByte: number; endByte: number } } = {}\n): Promise<ArrayBuffer | JsonMetadata> {\n if (!name) {\n return;\n }\n\n const pathParts = name.split('/');\n let currentDir = directoryHandle;\n\n try {\n for (let i = 0; i < pathParts.length - 1; i++) {\n currentDir = await currentDir.getDirectoryHandle(pathParts[i], { create: true });\n }\n\n const fileName = pathParts.at(-1);\n\n if (options.isJson) {\n return readJsonFile(currentDir, fileName);\n } else {\n return readArrayBufferFile(currentDir, fileName).catch(async () => {\n console.warn(`Error reading the file ${name} from partial folder, trying from full file`);\n\n if (options.offsets && pathParts.includes(FILE_SYSTEM_ROUTES.Partial)) {\n try {\n pathParts.splice(\n pathParts.findIndex((part) => part === FILE_SYSTEM_ROUTES.Partial),\n 1\n );\n currentDir = directoryHandle;\n for (let i = 0; i < pathParts.length - 1; i++) {\n currentDir = await currentDir.getDirectoryHandle(pathParts[i], { create: true });\n }\n\n const convertedFileName = pathParts.at(-1).split('_')[0] + '.tar';\n const fileArraybuffer = await readArrayBufferFile(currentDir, convertedFileName);\n return fileArraybuffer.slice(options.offsets.startByte, options.offsets.endByte);\n } catch (error) {\n console.warn(`Error reading the file ${name}: ${error.message}`);\n }\n }\n });\n }\n } catch (error) {\n console.warn(`Error reading the file ${name}: ${error.message}`);\n }\n}\n\nexport async function writeFile(\n directoryHandle: FileSystemDirectoryHandle,\n name: string,\n file: ArrayBuffer | JsonMetadata,\n isJson = false\n): Promise<void> {\n try {\n const pathParts = name.split('/');\n let currentDir = directoryHandle;\n\n for (let i = 0; i < pathParts.length - 1; i++) {\n currentDir = await currentDir.getDirectoryHandle(pathParts[i], { create: true });\n }\n\n const fileName = pathParts.at(-1);\n const fileHandle = await currentDir.getFileHandle(fileName, { create: true });\n // @ts-ignore\n const fileWritable = await fileHandle.createWritable();\n if (isJson) {\n await fileWritable.write(JSON.stringify(file));\n } else {\n await fileWritable.write(file as ArrayBuffer);\n }\n await fileWritable.close();\n } catch (error) {\n console.warn(`Error writing the file ${name}: ${error.message}`);\n }\n}\n\nexport function download(fileName: string, file: ArrayBuffer): boolean {\n try {\n const blob = new Blob([file], { type: 'application/x-tar' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = fileName;\n a.click();\n URL.revokeObjectURL(url);\n\n return true;\n } catch (error) {\n console.warn(`Error downloading file - ${fileName}: ` + error.message);\n return false;\n }\n}\n\nexport async function clearPartialFiles(): Promise<void> {\n const removePartialFolder = async (dirHandle: FileSystemDirectoryHandle): Promise<void> => {\n // @ts-ignore\n for await (const [name, handle] of dirHandle.entries()) {\n if (handle.kind === 'directory') {\n if (name.toLowerCase() === FILE_SYSTEM_ROUTES.Partial) {\n await dirHandle.removeEntry(name, { recursive: true }).catch((e) => console.warn(`Failed to remove ${name}:`, e));\n } else {\n // Recurse into other directories\n await removePartialFolder(handle);\n }\n }\n }\n };\n\n try {\n await removePartialFolder(directoryHandle);\n } catch (error) {\n console.warn(`Error clearing partial files: ${error.message}`);\n }\n}\n\nexport function parseCachePath(url: string): string {\n const urlObj = new URL(url);\n const bucketPath = urlObj.pathname.match(/\\/(.*?)\\/studies/)[1];\n const [studyInstanceUID, _, seriesInstanceUID] = urlObj.pathname.match(/studies\\/(.*?)(\\.tar|\\/metadata.json)/)[1].split('/');\n return `${bucketPath}/${studyInstanceUID}/${seriesInstanceUID}`;\n}\n\nexport function createStreamingFileName(url: string): string {\n return `${parseCachePath(url)}/${url.split('series/')[1]}`;\n}\n\nexport function createPartialFileName(url: string, offsets?: { startByte: number; endByte: number }): string {\n const seriesInstanceUID = url.match(/series\\/(.*?).tar/)[1];\n const offsetPart = `${offsets ? `_${offsets?.startByte}_${offsets?.endByte}` : ''}`;\n return `${parseCachePath(url)}/${FILE_SYSTEM_ROUTES.Partial}/${seriesInstanceUID}${offsetPart}.dcm`;\n}\n\nexport function createMetadataFileName(url: string): string {\n return `${parseCachePath(url)}/metadata.json`;\n}\n","import { CustomError } from '../../classes/customClasses';\nimport { readFile, writeFile, createPartialFileName } from '../../fileAccessSystemUtils';\n\nconst filePartial = {\n async partial(\n args: {\n url: string;\n offsets?: { startByte: number; endByte: number };\n headers?: Record<string, string>;\n directoryHandle?: FileSystemDirectoryHandle;\n },\n callBack: (data: { url: string; fileArraybuffer: Uint8Array; offsets: { startByte: number; endByte: number } }) => void\n ): Promise<void | Error> {\n const { url, offsets, headers, directoryHandle } = args;\n if (offsets?.startByte && offsets?.endByte) {\n headers['Range'] = `bytes=${offsets.startByte}-${offsets.endByte - 1}`;\n }\n\n const storageName = createPartialFileName(url, offsets);\n\n if (directoryHandle) {\n const file = (await readFile(directoryHandle, storageName, { offsets, isJson: false })) as ArrayBuffer;\n if (file) {\n callBack({ url, fileArraybuffer: new Uint8Array(file), offsets });\n return;\n }\n }\n\n await fetch(url, { headers })\n .then((response) => response.arrayBuffer())\n .then((data) => {\n callBack({ url, fileArraybuffer: new Uint8Array(data), offsets });\n\n if (directoryHandle) {\n writeFile(directoryHandle, storageName, data);\n }\n })\n .catch((error) => {\n throw new CustomError('filePartial.ts: Error when fetching file: ' + error?.message);\n });\n }\n};\n\nexport default filePartial;\n","import { expose } from 'comlink';\nimport filePartial from '../scripts/filePartial';\n\nconst filePartialWorker = {\n ...filePartial,\n partial: (args: any) => filePartial.partial(args, postMessage)\n};\n\nexpose(filePartialWorker);\n"],"names":["root","factory","exports","module","define","amd","a","i","self","proxyMarker","Symbol","createEndpoint","releaseProxy","finalizer","throwMarker","isObject","val","proxyTransferHandler","canHandle","serialize","obj","port1","port2","MessageChannel","expose","deserialize","port","start","ep","target","pendingListeners","Map","addEventListener","ev","data","id","resolver","get","delete","createProxy","wrap","transferHandlers","value","serialized","Error","isError","message","name","stack","Object","assign","globalThis","allowedOrigins","callback","origin","allowedOrigin","RegExp","test","isAllowedOrigin","console","warn","type","path","argumentList","map","fromWireValue","returnValue","parent","slice","reduce","prop","rawValue","apply","proxy","transfers","transferCache","set","transfer","undefined","Promise","resolve","catch","then","wireValue","transferables","toWireValue","postMessage","removeEventListener","closeEndPoint","error","TypeError","endpoint","constructor","isMessagePort","close","throwIfProxyReleased","isReleased","releaseEndpoint","requestResponseMessage","proxyCounter","WeakMap","proxyFinalizers","FinalizationRegistry","newCount","isProxyReleased","Proxy","_target","unregister","unregisterProxy","clear","length","r","p","toString","bind","_thisArg","rawArgumentList","last","processArguments","construct","register","registerProxy","processed","v","arr","Array","prototype","concat","handler","serializedValue","msg","fill","Math","floor","random","Number","MAX_SAFE_INTEGER","join","CustomError","_Error","_classCallCheck","_callSuper","arguments","_inherits","_createClass","_wrapNativeSuper","FILE_SYSTEM_ROUTES","_regeneratorRuntime","e","t","n","hasOwnProperty","o","defineProperty","iterator","c","asyncIterator","u","toStringTag","enumerable","configurable","writable","Generator","create","Context","makeInvokeMethod","tryCatch","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","d","getPrototypeOf","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","_typeof","__await","callInvokeWithMethodAndArg","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","displayName","isGeneratorFunction","mark","setPrototypeOf","__proto__","awrap","async","keys","reverse","pop","prev","charAt","stop","rval","handle","complete","finish","delegateYield","_slicedToArray","isArray","_arrayWithHoles","_iterableToArrayLimit","_arrayLikeToArray","from","_unsupportedIterableToArray","_nonIterableRest","asyncGeneratorStep","_asyncToGenerator","_next","_throw","readJsonFile","_x","_x2","_readJsonFile","_callee2","directoryHandle","_context2","getFileHandle","fileHandle","getFile","file","text","metadataString","JSON","parse","readArrayBufferFile","_x3","_x4","_readArrayBufferFile","_callee3","_context3","arrayBuffer","readFile","_x5","_x6","_readFile","_callee5","options","pathParts","currentDir","fileName","_args5","_context5","split","getDirectoryHandle","at","isJson","_callee4","_i","convertedFileName","fileArraybuffer","_context4","offsets","includes","splice","findIndex","part","startByte","endByte","t0","writeFile","_x7","_x8","_x9","_writeFile","_callee6","fileWritable","_args6","_context6","createWritable","write","stringify","parseCachePath","url","urlObj","URL","bucketPath","pathname","match","_urlObj$pathname$matc2","studyInstanceUID","seriesInstanceUID","createPartialFileName","offsetPart","filePartial","partial","args","callBack","_callee","headers","storageName","_context","Uint8Array","fetch","response","_objectSpread"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"563.js","mappings":"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","sources":["webpack://cod-dicomweb-server/webpack/universalModuleDefinition","webpack://cod-dicomweb-server/./node_modules/comlink/dist/esm/comlink.mjs","webpack://cod-dicomweb-server/./src/classes/customClasses.ts","webpack://cod-dicomweb-server/./src/constants/dataRetrieval.ts","webpack://cod-dicomweb-server/./src/fileAccessSystemUtils.ts","webpack://cod-dicomweb-server/./src/dataRetrieval/scripts/filePartial.ts","webpack://cod-dicomweb-server/./src/dataRetrieval/workers/filePartialWorker.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn ","/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nconst proxyMarker = Symbol(\"Comlink.proxy\");\nconst createEndpoint = Symbol(\"Comlink.endpoint\");\nconst releaseProxy = Symbol(\"Comlink.releaseProxy\");\nconst finalizer = Symbol(\"Comlink.finalizer\");\nconst throwMarker = Symbol(\"Comlink.thrown\");\nconst isObject = (val) => (typeof val === \"object\" && val !== null) || typeof val === \"function\";\n/**\n * Internal transfer handle to handle objects marked to proxy.\n */\nconst proxyTransferHandler = {\n canHandle: (val) => isObject(val) && val[proxyMarker],\n serialize(obj) {\n const { port1, port2 } = new MessageChannel();\n expose(obj, port1);\n return [port2, [port2]];\n },\n deserialize(port) {\n port.start();\n return wrap(port);\n },\n};\n/**\n * Internal transfer handler to handle thrown exceptions.\n */\nconst throwTransferHandler = {\n canHandle: (value) => isObject(value) && throwMarker in value,\n serialize({ value }) {\n let serialized;\n if (value instanceof Error) {\n serialized = {\n isError: true,\n value: {\n message: value.message,\n name: value.name,\n stack: value.stack,\n },\n };\n }\n else {\n serialized = { isError: false, value };\n }\n return [serialized, []];\n },\n deserialize(serialized) {\n if (serialized.isError) {\n throw Object.assign(new Error(serialized.value.message), serialized.value);\n }\n throw serialized.value;\n },\n};\n/**\n * Allows customizing the serialization of certain values.\n */\nconst transferHandlers = new Map([\n [\"proxy\", proxyTransferHandler],\n [\"throw\", throwTransferHandler],\n]);\nfunction isAllowedOrigin(allowedOrigins, origin) {\n for (const allowedOrigin of allowedOrigins) {\n if (origin === allowedOrigin || allowedOrigin === \"*\") {\n return true;\n }\n if (allowedOrigin instanceof RegExp && allowedOrigin.test(origin)) {\n return true;\n }\n }\n return false;\n}\nfunction expose(obj, ep = globalThis, allowedOrigins = [\"*\"]) {\n ep.addEventListener(\"message\", function callback(ev) {\n if (!ev || !ev.data) {\n return;\n }\n if (!isAllowedOrigin(allowedOrigins, ev.origin)) {\n console.warn(`Invalid origin '${ev.origin}' for comlink proxy`);\n return;\n }\n const { id, type, path } = Object.assign({ path: [] }, ev.data);\n const argumentList = (ev.data.argumentList || []).map(fromWireValue);\n let returnValue;\n try {\n const parent = path.slice(0, -1).reduce((obj, prop) => obj[prop], obj);\n const rawValue = path.reduce((obj, prop) => obj[prop], obj);\n switch (type) {\n case \"GET\" /* MessageType.GET */:\n {\n returnValue = rawValue;\n }\n break;\n case \"SET\" /* MessageType.SET */:\n {\n parent[path.slice(-1)[0]] = fromWireValue(ev.data.value);\n returnValue = true;\n }\n break;\n case \"APPLY\" /* MessageType.APPLY */:\n {\n returnValue = rawValue.apply(parent, argumentList);\n }\n break;\n case \"CONSTRUCT\" /* MessageType.CONSTRUCT */:\n {\n const value = new rawValue(...argumentList);\n returnValue = proxy(value);\n }\n break;\n case \"ENDPOINT\" /* MessageType.ENDPOINT */:\n {\n const { port1, port2 } = new MessageChannel();\n expose(obj, port2);\n returnValue = transfer(port1, [port1]);\n }\n break;\n case \"RELEASE\" /* MessageType.RELEASE */:\n {\n returnValue = undefined;\n }\n break;\n default:\n return;\n }\n }\n catch (value) {\n returnValue = { value, [throwMarker]: 0 };\n }\n Promise.resolve(returnValue)\n .catch((value) => {\n return { value, [throwMarker]: 0 };\n })\n .then((returnValue) => {\n const [wireValue, transferables] = toWireValue(returnValue);\n ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables);\n if (type === \"RELEASE\" /* MessageType.RELEASE */) {\n // detach and deactive after sending release response above.\n ep.removeEventListener(\"message\", callback);\n closeEndPoint(ep);\n if (finalizer in obj && typeof obj[finalizer] === \"function\") {\n obj[finalizer]();\n }\n }\n })\n .catch((error) => {\n // Send Serialization Error To Caller\n const [wireValue, transferables] = toWireValue({\n value: new TypeError(\"Unserializable return value\"),\n [throwMarker]: 0,\n });\n ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables);\n });\n });\n if (ep.start) {\n ep.start();\n }\n}\nfunction isMessagePort(endpoint) {\n return endpoint.constructor.name === \"MessagePort\";\n}\nfunction closeEndPoint(endpoint) {\n if (isMessagePort(endpoint))\n endpoint.close();\n}\nfunction wrap(ep, target) {\n const pendingListeners = new Map();\n ep.addEventListener(\"message\", function handleMessage(ev) {\n const { data } = ev;\n if (!data || !data.id) {\n return;\n }\n const resolver = pendingListeners.get(data.id);\n if (!resolver) {\n return;\n }\n try {\n resolver(data);\n }\n finally {\n pendingListeners.delete(data.id);\n }\n });\n return createProxy(ep, pendingListeners, [], target);\n}\nfunction throwIfProxyReleased(isReleased) {\n if (isReleased) {\n throw new Error(\"Proxy has been released and is not useable\");\n }\n}\nfunction releaseEndpoint(ep) {\n return requestResponseMessage(ep, new Map(), {\n type: \"RELEASE\" /* MessageType.RELEASE */,\n }).then(() => {\n closeEndPoint(ep);\n });\n}\nconst proxyCounter = new WeakMap();\nconst proxyFinalizers = \"FinalizationRegistry\" in globalThis &&\n new FinalizationRegistry((ep) => {\n const newCount = (proxyCounter.get(ep) || 0) - 1;\n proxyCounter.set(ep, newCount);\n if (newCount === 0) {\n releaseEndpoint(ep);\n }\n });\nfunction registerProxy(proxy, ep) {\n const newCount = (proxyCounter.get(ep) || 0) + 1;\n proxyCounter.set(ep, newCount);\n if (proxyFinalizers) {\n proxyFinalizers.register(proxy, ep, proxy);\n }\n}\nfunction unregisterProxy(proxy) {\n if (proxyFinalizers) {\n proxyFinalizers.unregister(proxy);\n }\n}\nfunction createProxy(ep, pendingListeners, path = [], target = function () { }) {\n let isProxyReleased = false;\n const proxy = new Proxy(target, {\n get(_target, prop) {\n throwIfProxyReleased(isProxyReleased);\n if (prop === releaseProxy) {\n return () => {\n unregisterProxy(proxy);\n releaseEndpoint(ep);\n pendingListeners.clear();\n isProxyReleased = true;\n };\n }\n if (prop === \"then\") {\n if (path.length === 0) {\n return { then: () => proxy };\n }\n const r = requestResponseMessage(ep, pendingListeners, {\n type: \"GET\" /* MessageType.GET */,\n path: path.map((p) => p.toString()),\n }).then(fromWireValue);\n return r.then.bind(r);\n }\n return createProxy(ep, pendingListeners, [...path, prop]);\n },\n set(_target, prop, rawValue) {\n throwIfProxyReleased(isProxyReleased);\n // FIXME: ES6 Proxy Handler `set` methods are supposed to return a\n // boolean. To show good will, we return true asynchronously ¯\\_(ツ)_/¯\n const [value, transferables] = toWireValue(rawValue);\n return requestResponseMessage(ep, pendingListeners, {\n type: \"SET\" /* MessageType.SET */,\n path: [...path, prop].map((p) => p.toString()),\n value,\n }, transferables).then(fromWireValue);\n },\n apply(_target, _thisArg, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const last = path[path.length - 1];\n if (last === createEndpoint) {\n return requestResponseMessage(ep, pendingListeners, {\n type: \"ENDPOINT\" /* MessageType.ENDPOINT */,\n }).then(fromWireValue);\n }\n // We just pretend that `bind()` didn’t happen.\n if (last === \"bind\") {\n return createProxy(ep, pendingListeners, path.slice(0, -1));\n }\n const [argumentList, transferables] = processArguments(rawArgumentList);\n return requestResponseMessage(ep, pendingListeners, {\n type: \"APPLY\" /* MessageType.APPLY */,\n path: path.map((p) => p.toString()),\n argumentList,\n }, transferables).then(fromWireValue);\n },\n construct(_target, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const [argumentList, transferables] = processArguments(rawArgumentList);\n return requestResponseMessage(ep, pendingListeners, {\n type: \"CONSTRUCT\" /* MessageType.CONSTRUCT */,\n path: path.map((p) => p.toString()),\n argumentList,\n }, transferables).then(fromWireValue);\n },\n });\n registerProxy(proxy, ep);\n return proxy;\n}\nfunction myFlat(arr) {\n return Array.prototype.concat.apply([], arr);\n}\nfunction processArguments(argumentList) {\n const processed = argumentList.map(toWireValue);\n return [processed.map((v) => v[0]), myFlat(processed.map((v) => v[1]))];\n}\nconst transferCache = new WeakMap();\nfunction transfer(obj, transfers) {\n transferCache.set(obj, transfers);\n return obj;\n}\nfunction proxy(obj) {\n return Object.assign(obj, { [proxyMarker]: true });\n}\nfunction windowEndpoint(w, context = globalThis, targetOrigin = \"*\") {\n return {\n postMessage: (msg, transferables) => w.postMessage(msg, targetOrigin, transferables),\n addEventListener: context.addEventListener.bind(context),\n removeEventListener: context.removeEventListener.bind(context),\n };\n}\nfunction toWireValue(value) {\n for (const [name, handler] of transferHandlers) {\n if (handler.canHandle(value)) {\n const [serializedValue, transferables] = handler.serialize(value);\n return [\n {\n type: \"HANDLER\" /* WireValueType.HANDLER */,\n name,\n value: serializedValue,\n },\n transferables,\n ];\n }\n }\n return [\n {\n type: \"RAW\" /* WireValueType.RAW */,\n value,\n },\n transferCache.get(value) || [],\n ];\n}\nfunction fromWireValue(value) {\n switch (value.type) {\n case \"HANDLER\" /* WireValueType.HANDLER */:\n return transferHandlers.get(value.name).deserialize(value.value);\n case \"RAW\" /* WireValueType.RAW */:\n return value.value;\n }\n}\nfunction requestResponseMessage(ep, pendingListeners, msg, transfers) {\n return new Promise((resolve) => {\n const id = generateUUID();\n pendingListeners.set(id, resolve);\n if (ep.start) {\n ep.start();\n }\n ep.postMessage(Object.assign({ id }, msg), transfers);\n });\n}\nfunction generateUUID() {\n return new Array(4)\n .fill(0)\n .map(() => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16))\n .join(\"-\");\n}\n\nexport { createEndpoint, expose, finalizer, proxy, proxyMarker, releaseProxy, transfer, transferHandlers, windowEndpoint, wrap };\n//# sourceMappingURL=comlink.mjs.map\n","export class CustomError extends Error {}\n\nexport class CustomErrorEvent extends Event {\n error: CustomError;\n message: string;\n\n constructor(message: string, error: CustomError) {\n super(message);\n this.message = message;\n this.error = error;\n }\n}\n\nexport class CustomMessageEvent extends MessageEvent<{\n url: string;\n position: number;\n chunk?: Uint8Array;\n isAppending?: boolean;\n fileArraybuffer?: Uint8Array;\n totalLength: number;\n offsets?: { startByte: number; endByte: number };\n}> {}\n","export const FILE_PARTIAL_WORKER_NAME = 'filePartial';\nexport const FILE_STREAMING_WORKER_NAME = 'fileStreaming';\n\nexport const THRESHOLD = 10000;\n\nexport const IDB_DIR_HANDLE_KEY = 'indexed_db_directory_handle_key';\n\nexport const FILE_SYSTEM_ROUTES = {\n Partial: 'partial'\n};\n","import { get } from 'idb-keyval';\nimport { FILE_SYSTEM_ROUTES, IDB_DIR_HANDLE_KEY } from './constants/dataRetrieval';\nimport { JsonMetadata } from './types';\n\nlet directoryHandle: FileSystemDirectoryHandle;\n\nexport async function getDirectoryHandle(): Promise<FileSystemDirectoryHandle> {\n try {\n if (!directoryHandle) {\n directoryHandle = (await get(IDB_DIR_HANDLE_KEY)) as FileSystemDirectoryHandle;\n }\n\n if (!directoryHandle) {\n directoryHandle = await navigator.storage.getDirectory();\n }\n\n return directoryHandle;\n } catch (error) {\n console.warn(`Error getting directoryhandle: ${error.message}`);\n }\n}\n\nasync function readJsonFile(directoryHandle: FileSystemDirectoryHandle, name: string): Promise<JsonMetadata> {\n return await directoryHandle\n .getFileHandle(name)\n .then((fileHandle) =>\n fileHandle\n .getFile()\n .then((file) => file.text())\n .then((metadataString) => JSON.parse(metadataString))\n )\n .catch((): null => null);\n}\n\nasync function readArrayBufferFile(directoryHandle: FileSystemDirectoryHandle, name: string): Promise<ArrayBuffer> {\n return await directoryHandle\n .getFileHandle(name)\n .then((fileHandle) => fileHandle.getFile().then((file) => file.arrayBuffer()))\n .catch((): null => null);\n}\n\nexport async function readFile(\n directoryHandle: FileSystemDirectoryHandle,\n name: string,\n options: { isJson?: boolean; offsets?: { startByte: number; endByte: number } } = {}\n): Promise<ArrayBuffer | JsonMetadata> {\n if (!name) {\n return;\n }\n\n const pathParts = name.split('/');\n let currentDir = directoryHandle;\n\n try {\n for (let i = 0; i < pathParts.length - 1; i++) {\n currentDir = await currentDir.getDirectoryHandle(pathParts[i], { create: true });\n }\n\n const fileName = pathParts.at(-1);\n\n if (options.isJson) {\n return readJsonFile(currentDir, fileName);\n } else {\n return readArrayBufferFile(currentDir, fileName).catch(async () => {\n console.warn(`Error reading the file ${name} from partial folder, trying from full file`);\n\n if (options.offsets && pathParts.includes(FILE_SYSTEM_ROUTES.Partial)) {\n try {\n pathParts.splice(\n pathParts.findIndex((part) => part === FILE_SYSTEM_ROUTES.Partial),\n 1\n );\n currentDir = directoryHandle;\n for (let i = 0; i < pathParts.length - 1; i++) {\n currentDir = await currentDir.getDirectoryHandle(pathParts[i], { create: true });\n }\n\n const convertedFileName = pathParts.at(-1).split('_')[0] + '.tar';\n const fileArraybuffer = await readArrayBufferFile(currentDir, convertedFileName);\n return fileArraybuffer.slice(options.offsets.startByte, options.offsets.endByte);\n } catch (error) {\n console.warn(`Error reading the file ${name}: ${error.message}`);\n }\n }\n });\n }\n } catch (error) {\n console.warn(`Error reading the file ${name}: ${error.message}`);\n }\n}\n\nexport async function writeFile(\n directoryHandle: FileSystemDirectoryHandle,\n name: string,\n file: ArrayBuffer | JsonMetadata,\n isJson = false\n): Promise<void> {\n try {\n const pathParts = name.split('/');\n let currentDir = directoryHandle;\n\n for (let i = 0; i < pathParts.length - 1; i++) {\n currentDir = await currentDir.getDirectoryHandle(pathParts[i], { create: true });\n }\n\n const fileName = pathParts.at(-1);\n const fileHandle = await currentDir.getFileHandle(fileName, { create: true });\n // @ts-ignore\n const fileWritable = await fileHandle.createWritable();\n if (isJson) {\n await fileWritable.write(JSON.stringify(file));\n } else {\n await fileWritable.write(file as ArrayBuffer);\n }\n await fileWritable.close();\n } catch (error) {\n console.warn(`Error writing the file ${name}: ${error.message}`);\n }\n}\n\nexport function download(fileName: string, file: ArrayBuffer): boolean {\n try {\n const blob = new Blob([file], { type: 'application/x-tar' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = fileName;\n a.click();\n URL.revokeObjectURL(url);\n\n return true;\n } catch (error) {\n console.warn(`Error downloading file - ${fileName}: ` + error.message);\n return false;\n }\n}\n\nexport async function clearPartialFiles(): Promise<void> {\n const removePartialFolder = async (dirHandle: FileSystemDirectoryHandle): Promise<void> => {\n // @ts-ignore\n for await (const [name, handle] of dirHandle.entries()) {\n if (handle.kind === 'directory') {\n if (name.toLowerCase() === FILE_SYSTEM_ROUTES.Partial) {\n await dirHandle.removeEntry(name, { recursive: true }).catch((e) => console.warn(`Failed to remove ${name}:`, e));\n } else {\n // Recurse into other directories\n await removePartialFolder(handle);\n }\n }\n }\n };\n\n try {\n await removePartialFolder(directoryHandle);\n } catch (error) {\n console.warn(`Error clearing partial files: ${error.message}`);\n }\n}\n\nexport function parseCachePath(url: string): string {\n const urlObj = new URL(url);\n const bucketPath = urlObj.pathname.match(/\\/(.*?)\\/studies/)[1];\n const [studyInstanceUID, _, seriesInstanceUID] = urlObj.pathname.match(/studies\\/(.*?)(\\.tar|\\/metadata.json)/)[1].split('/');\n return `${bucketPath}/${studyInstanceUID}/${seriesInstanceUID}`;\n}\n\nexport function createStreamingFileName(url: string): string {\n return `${parseCachePath(url)}/${url.split('series/')[1]}`;\n}\n\nexport function createPartialFileName(url: string, offsets?: { startByte: number; endByte: number }): string {\n const seriesInstanceUID = url.match(/series\\/(.*?).tar/)[1];\n const offsetPart = `${offsets ? `_${offsets?.startByte}_${offsets?.endByte}` : ''}`;\n return `${parseCachePath(url)}/${FILE_SYSTEM_ROUTES.Partial}/${seriesInstanceUID}${offsetPart}.dcm`;\n}\n\nexport function createMetadataFileName(url: string): string {\n return `${parseCachePath(url)}/metadata.json`;\n}\n","import { CustomError } from '../../classes/customClasses';\nimport { readFile, writeFile, createPartialFileName } from '../../fileAccessSystemUtils';\n\nconst filePartial = {\n async partial(\n args: {\n url: string;\n offsets?: { startByte: number; endByte: number };\n headers?: Record<string, string>;\n directoryHandle?: FileSystemDirectoryHandle;\n },\n callBack: (data: { url: string; fileArraybuffer: Uint8Array; offsets: { startByte: number; endByte: number } }) => void\n ): Promise<void | Error> {\n const { url, offsets, headers, directoryHandle } = args;\n if (offsets?.startByte && offsets?.endByte) {\n headers['Range'] = `bytes=${offsets.startByte}-${offsets.endByte - 1}`;\n }\n\n const storageName = createPartialFileName(url, offsets);\n\n if (directoryHandle) {\n const file = (await readFile(directoryHandle, storageName, { offsets, isJson: false })) as ArrayBuffer;\n if (file) {\n callBack({ url, fileArraybuffer: new Uint8Array(file), offsets });\n return;\n }\n }\n\n await fetch(url, { headers })\n .then((response) => response.arrayBuffer())\n .then((data) => {\n callBack({ url, fileArraybuffer: new Uint8Array(data), offsets });\n\n if (directoryHandle) {\n writeFile(directoryHandle, storageName, data);\n }\n })\n .catch((error) => {\n throw new CustomError('filePartial.ts: Error when fetching file: ' + error?.message);\n });\n }\n};\n\nexport default filePartial;\n","import { expose } from 'comlink';\nimport filePartial from '../scripts/filePartial';\n\nconst filePartialWorker = {\n ...filePartial,\n partial: (args: any) => filePartial.partial(args, postMessage)\n};\n\nexpose(filePartialWorker);\n"],"names":["root","factory","exports","module","define","amd","a","i","self","proxyMarker","Symbol","createEndpoint","releaseProxy","finalizer","throwMarker","isObject","val","proxyTransferHandler","canHandle","serialize","obj","port1","port2","MessageChannel","expose","deserialize","port","start","ep","target","pendingListeners","Map","addEventListener","ev","data","id","resolver","get","delete","createProxy","wrap","transferHandlers","value","serialized","Error","isError","message","name","stack","Object","assign","globalThis","allowedOrigins","callback","origin","allowedOrigin","RegExp","test","isAllowedOrigin","console","warn","type","path","argumentList","map","fromWireValue","returnValue","parent","slice","reduce","prop","rawValue","apply","proxy","transfers","transferCache","set","transfer","undefined","Promise","resolve","catch","then","wireValue","transferables","toWireValue","postMessage","removeEventListener","closeEndPoint","error","TypeError","endpoint","constructor","isMessagePort","close","throwIfProxyReleased","isReleased","releaseEndpoint","requestResponseMessage","proxyCounter","WeakMap","proxyFinalizers","FinalizationRegistry","newCount","isProxyReleased","Proxy","_target","unregister","unregisterProxy","clear","length","r","p","toString","bind","_thisArg","rawArgumentList","last","processArguments","construct","register","registerProxy","processed","v","arr","Array","prototype","concat","handler","serializedValue","msg","fill","Math","floor","random","Number","MAX_SAFE_INTEGER","join","CustomError","_Error","_classCallCheck","_callSuper","arguments","_inherits","_createClass","_wrapNativeSuper","FILE_SYSTEM_ROUTES","_regeneratorRuntime","e","t","n","hasOwnProperty","o","defineProperty","iterator","c","asyncIterator","u","toStringTag","enumerable","configurable","writable","Generator","create","Context","makeInvokeMethod","tryCatch","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","d","getPrototypeOf","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","_typeof","__await","callInvokeWithMethodAndArg","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","displayName","isGeneratorFunction","mark","setPrototypeOf","__proto__","awrap","async","keys","reverse","pop","prev","charAt","stop","rval","handle","complete","finish","delegateYield","_slicedToArray","isArray","_arrayWithHoles","_iterableToArrayLimit","_arrayLikeToArray","from","_unsupportedIterableToArray","_nonIterableRest","asyncGeneratorStep","_asyncToGenerator","_next","_throw","readJsonFile","_x","_x2","_readJsonFile","_callee2","directoryHandle","_context2","getFileHandle","fileHandle","getFile","file","text","metadataString","JSON","parse","readArrayBufferFile","_x3","_x4","_readArrayBufferFile","_callee3","_context3","arrayBuffer","readFile","_x5","_x6","_readFile","_callee5","options","pathParts","currentDir","fileName","_args5","_context5","split","getDirectoryHandle","at","isJson","_callee4","_i","convertedFileName","fileArraybuffer","_context4","offsets","includes","splice","findIndex","part","startByte","endByte","t0","writeFile","_x7","_x8","_x9","_writeFile","_callee6","fileWritable","_args6","_context6","createWritable","write","stringify","parseCachePath","url","urlObj","URL","bucketPath","pathname","match","_urlObj$pathname$matc2","studyInstanceUID","seriesInstanceUID","createPartialFileName","offsetPart","filePartial","partial","args","callBack","_callee","headers","storageName","_context","Uint8Array","fetch","response","_objectSpread"],"sourceRoot":""}
|