@ubercode/dcmtk 0.10.0 → 0.11.0
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/dicom.cjs +8 -7
- package/dist/dicom.cjs.map +1 -1
- package/dist/dicom.js +8 -7
- package/dist/dicom.js.map +1 -1
- package/dist/{index-Hp4Ri9y5.d.ts → index--dDQfutR.d.ts} +47 -9
- package/dist/{index-CEqwLKgE.d.cts → index-CVDMaxd8.d.cts} +47 -9
- package/dist/index.cjs +67 -27
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +67 -27
- package/dist/index.js.map +1 -1
- package/dist/servers.cjs +67 -27
- package/dist/servers.cjs.map +1 -1
- package/dist/servers.d.cts +1 -1
- package/dist/servers.d.ts +1 -1
- package/dist/servers.js +67 -27
- package/dist/servers.js.map +1 -1
- package/dist/tools.cjs +8 -7
- package/dist/tools.cjs.map +1 -1
- package/dist/tools.js +8 -7
- package/dist/tools.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -3,7 +3,7 @@ export { L as LineSource, P as ProcessLine, a as ResultValue, b as assertUnreach
|
|
|
3
3
|
import { A as AETitle, D as DicomTag, a as DicomTagPath, P as Port, S as SOPClassUID, T as TransferSyntaxUID, b as DicomDataset } from './DicomInstance-CxLKC-oM.cjs';
|
|
4
4
|
export { B as Brand, C as ChangeSet, c as DicomFilePath, d as DicomInstance, e as DicomOpenOptions, W as WalkTagEntry, f as WalkTagsOptions, g as createAETitle, h as createDicomFilePath, i as createDicomTag, j as createDicomTagPath, k as createPort, l as createSOPClassUID, m as createTransferSyntaxUID, t as tag, w as walkTags } from './DicomInstance-CxLKC-oM.cjs';
|
|
5
5
|
import { z } from 'zod';
|
|
6
|
-
export { A as AssociationAcknowledgedData, a as AssociationCompleteData, b as AssociationContext, c as AssociationReceivedData, d as AssociationSummary, e as AssociationTracker, C as CStoreRequestData, f as CannotStartListenerData, g as ConfigErrorData, D as DCMPRSCP_FATAL_EVENTS, h as DCMPRSCP_PATTERNS, i as DCMPSRCV_FATAL_EVENTS, j as DCMPSRCV_PATTERNS, k as DCMQRSCP_FATAL_EVENTS, l as DCMQRSCP_PATTERNS, m as DCMRECV_FATAL_EVENTS, n as DCMRECV_PATTERNS, o as DatabaseReadyData, p as DcmQRSCP, q as DcmQRSCPEventMap, r as DcmQRSCPOptions, s as DcmprsCP, t as DcmprsCPEventMap, u as DcmprsCPOptions, v as DcmprscpEvent, w as DcmprscpEventValue, x as Dcmpsrcv, y as DcmpsrcvEvent, z as DcmpsrcvEventMap, B as DcmpsrcvEventValue, E as DcmpsrcvOptions, F as DcmqrscpEvent, G as DcmqrscpEventValue, H as Dcmrecv, I as DcmrecvEvent, J as DcmrecvEventMap, K as DcmrecvEventValue, L as DcmrecvOptions, M as DcmtkProcess, N as DcmtkProcessConfig, O as DcmtkProcessEventMap, P as DicomReceiver, Q as DicomReceiverEventMap, R as DicomReceiverOptions, S as EventPattern, T as FileDeletedData, U as FileReceivedData, V as FilenameMode, W as FilenameModeValue, X as LineParser, Y as LineParserEventMap, Z as MultiLineConfig, _ as PoolAssociationReceivedData, $ as PoolCStoreRequestData, a0 as PoolEchoRequestData, a1 as PoolRefusingAssociationData, a2 as PoolStatus, a3 as PreferredTransferSyntax, a4 as PreferredTransferSyntaxValue, a5 as PrintAssociationAcknowledgedData, a6 as PrintAssociationReceivedData, a7 as PrintCannotStartListenerData, a8 as ProcessState, a9 as ProcessStateValue, aa as QRAssociationAcknowledgedData, ab as QRAssociationReceivedData, ac as QRCFindRequestData, ad as QRCGetRequestData, ae as QRCMoveRequestData, af as QRCStoreRequestData, ag as QRCannotStartListenerData, ah as QRListeningData, ai as ReceiverAssociationAcknowledgedData, aj as ReceiverAssociationData, ak as ReceiverAssociationReceivedData, al as ReceiverCStoreRequestData, am as ReceiverCannotStartListenerData, an as ReceiverConfigErrorData, ao as ReceiverDatabaseReadyData, ap as ReceiverEchoRequestData, aq as ReceiverErrorData, ar as ReceiverFileData, as as
|
|
6
|
+
export { A as AssociationAcknowledgedData, a as AssociationCompleteData, b as AssociationContext, c as AssociationReceivedData, d as AssociationSummary, e as AssociationTracker, C as CStoreRequestData, f as CannotStartListenerData, g as ConfigErrorData, D as DCMPRSCP_FATAL_EVENTS, h as DCMPRSCP_PATTERNS, i as DCMPSRCV_FATAL_EVENTS, j as DCMPSRCV_PATTERNS, k as DCMQRSCP_FATAL_EVENTS, l as DCMQRSCP_PATTERNS, m as DCMRECV_FATAL_EVENTS, n as DCMRECV_PATTERNS, o as DatabaseReadyData, p as DcmQRSCP, q as DcmQRSCPEventMap, r as DcmQRSCPOptions, s as DcmprsCP, t as DcmprsCPEventMap, u as DcmprsCPOptions, v as DcmprscpEvent, w as DcmprscpEventValue, x as Dcmpsrcv, y as DcmpsrcvEvent, z as DcmpsrcvEventMap, B as DcmpsrcvEventValue, E as DcmpsrcvOptions, F as DcmqrscpEvent, G as DcmqrscpEventValue, H as Dcmrecv, I as DcmrecvEvent, J as DcmrecvEventMap, K as DcmrecvEventValue, L as DcmrecvOptions, M as DcmtkProcess, N as DcmtkProcessConfig, O as DcmtkProcessEventMap, P as DicomReceiver, Q as DicomReceiverEventMap, R as DicomReceiverOptions, S as EventPattern, T as FileDeletedData, U as FileReceivedData, V as FilenameMode, W as FilenameModeValue, X as LineParser, Y as LineParserEventMap, Z as MultiLineConfig, _ as PoolAssociationReceivedData, $ as PoolCStoreRequestData, a0 as PoolEchoRequestData, a1 as PoolRefusingAssociationData, a2 as PoolStatus, a3 as PreferredTransferSyntax, a4 as PreferredTransferSyntaxValue, a5 as PrintAssociationAcknowledgedData, a6 as PrintAssociationReceivedData, a7 as PrintCannotStartListenerData, a8 as ProcessState, a9 as ProcessStateValue, aa as QRAssociationAcknowledgedData, ab as QRAssociationReceivedData, ac as QRCFindRequestData, ad as QRCGetRequestData, ae as QRCMoveRequestData, af as QRCStoreRequestData, ag as QRCannotStartListenerData, ah as QRListeningData, ai as ReceiverAssociationAcknowledgedData, aj as ReceiverAssociationData, ak as ReceiverAssociationReceivedData, al as ReceiverCStoreRequestData, am as ReceiverCannotStartListenerData, an as ReceiverConfigErrorData, ao as ReceiverDatabaseReadyData, ap as ReceiverEchoRequestData, aq as ReceiverErrorData, ar as ReceiverFileData, as as ReceiverFileReceivedData, at as ReceiverFileStoredData, au as ReceiverInstanceData, av as ReceiverListeningData, aw as RefusingAssociationData, ax as STORESCP_FATAL_EVENTS, ay as STORESCP_PATTERNS, az as StorageMode, aA as StorageModeValue, aB as StoreSCP, aC as StoreSCPEventMap, aD as StoreSCPOptions, aE as StoreSCPPreset, aF as StoreSCPPresetName, aG as StoredFileData, aH as StorescpEvent, aI as StorescpEventValue, aJ as StoringFileData, aK as SubdirectoryCreatedData, aL as SubdirectoryMode, aM as SubdirectoryModeValue, aN as TrackedFile, aO as WLMSCPFS_FATAL_EVENTS, aP as WLMSCPFS_PATTERNS, aQ as WlmAssociationAcknowledgedData, aR as WlmAssociationReceivedData, aS as WlmCFindRequestData, aT as WlmCannotStartListenerData, aU as WlmListeningData, aV as Wlmscpfs, aW as WlmscpfsEvent, aX as WlmscpfsEventMap, aY as WlmscpfsEventValue, aZ as WlmscpfsOptions } from './index-CVDMaxd8.cjs';
|
|
7
7
|
import { T as TagModification } from './dcmodify-Cf-RPHF3.cjs';
|
|
8
8
|
export { b as DcmodifyOptions, c as DcmodifyResult, D as DicomJsonElement, a as DicomJsonModel, d as ToolBaseOptions, e as dcmodify, x as xmlToJson } from './dcmodify-Cf-RPHF3.cjs';
|
|
9
9
|
export { DictionaryEntry, SOPClassName, SOP_CLASSES, TagSegment, VR, VRCategoryName, VRMetadata, VRValue, VR_CATEGORY, VR_CATEGORY_NAME, VR_META, getVRCategory, isBinaryVR, isNumericVR, isStringVR, lookupTag, lookupTagByKeyword, lookupTagByName, segmentsToModifyPath, segmentsToString, sopClassNameFromUID, tagPathToSegments } from './dicom.cjs';
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export { L as LineSource, P as ProcessLine, a as ResultValue, b as assertUnreach
|
|
|
3
3
|
import { A as AETitle, D as DicomTag, a as DicomTagPath, P as Port, S as SOPClassUID, T as TransferSyntaxUID, b as DicomDataset } from './DicomInstance-BKUiir0G.js';
|
|
4
4
|
export { B as Brand, C as ChangeSet, c as DicomFilePath, d as DicomInstance, e as DicomOpenOptions, W as WalkTagEntry, f as WalkTagsOptions, g as createAETitle, h as createDicomFilePath, i as createDicomTag, j as createDicomTagPath, k as createPort, l as createSOPClassUID, m as createTransferSyntaxUID, t as tag, w as walkTags } from './DicomInstance-BKUiir0G.js';
|
|
5
5
|
import { z } from 'zod';
|
|
6
|
-
export { A as AssociationAcknowledgedData, a as AssociationCompleteData, b as AssociationContext, c as AssociationReceivedData, d as AssociationSummary, e as AssociationTracker, C as CStoreRequestData, f as CannotStartListenerData, g as ConfigErrorData, D as DCMPRSCP_FATAL_EVENTS, h as DCMPRSCP_PATTERNS, i as DCMPSRCV_FATAL_EVENTS, j as DCMPSRCV_PATTERNS, k as DCMQRSCP_FATAL_EVENTS, l as DCMQRSCP_PATTERNS, m as DCMRECV_FATAL_EVENTS, n as DCMRECV_PATTERNS, o as DatabaseReadyData, p as DcmQRSCP, q as DcmQRSCPEventMap, r as DcmQRSCPOptions, s as DcmprsCP, t as DcmprsCPEventMap, u as DcmprsCPOptions, v as DcmprscpEvent, w as DcmprscpEventValue, x as Dcmpsrcv, y as DcmpsrcvEvent, z as DcmpsrcvEventMap, B as DcmpsrcvEventValue, E as DcmpsrcvOptions, F as DcmqrscpEvent, G as DcmqrscpEventValue, H as Dcmrecv, I as DcmrecvEvent, J as DcmrecvEventMap, K as DcmrecvEventValue, L as DcmrecvOptions, M as DcmtkProcess, N as DcmtkProcessConfig, O as DcmtkProcessEventMap, P as DicomReceiver, Q as DicomReceiverEventMap, R as DicomReceiverOptions, S as EventPattern, T as FileDeletedData, U as FileReceivedData, V as FilenameMode, W as FilenameModeValue, X as LineParser, Y as LineParserEventMap, Z as MultiLineConfig, _ as PoolAssociationReceivedData, $ as PoolCStoreRequestData, a0 as PoolEchoRequestData, a1 as PoolRefusingAssociationData, a2 as PoolStatus, a3 as PreferredTransferSyntax, a4 as PreferredTransferSyntaxValue, a5 as PrintAssociationAcknowledgedData, a6 as PrintAssociationReceivedData, a7 as PrintCannotStartListenerData, a8 as ProcessState, a9 as ProcessStateValue, aa as QRAssociationAcknowledgedData, ab as QRAssociationReceivedData, ac as QRCFindRequestData, ad as QRCGetRequestData, ae as QRCMoveRequestData, af as QRCStoreRequestData, ag as QRCannotStartListenerData, ah as QRListeningData, ai as ReceiverAssociationAcknowledgedData, aj as ReceiverAssociationData, ak as ReceiverAssociationReceivedData, al as ReceiverCStoreRequestData, am as ReceiverCannotStartListenerData, an as ReceiverConfigErrorData, ao as ReceiverDatabaseReadyData, ap as ReceiverEchoRequestData, aq as ReceiverErrorData, ar as ReceiverFileData, as as
|
|
6
|
+
export { A as AssociationAcknowledgedData, a as AssociationCompleteData, b as AssociationContext, c as AssociationReceivedData, d as AssociationSummary, e as AssociationTracker, C as CStoreRequestData, f as CannotStartListenerData, g as ConfigErrorData, D as DCMPRSCP_FATAL_EVENTS, h as DCMPRSCP_PATTERNS, i as DCMPSRCV_FATAL_EVENTS, j as DCMPSRCV_PATTERNS, k as DCMQRSCP_FATAL_EVENTS, l as DCMQRSCP_PATTERNS, m as DCMRECV_FATAL_EVENTS, n as DCMRECV_PATTERNS, o as DatabaseReadyData, p as DcmQRSCP, q as DcmQRSCPEventMap, r as DcmQRSCPOptions, s as DcmprsCP, t as DcmprsCPEventMap, u as DcmprsCPOptions, v as DcmprscpEvent, w as DcmprscpEventValue, x as Dcmpsrcv, y as DcmpsrcvEvent, z as DcmpsrcvEventMap, B as DcmpsrcvEventValue, E as DcmpsrcvOptions, F as DcmqrscpEvent, G as DcmqrscpEventValue, H as Dcmrecv, I as DcmrecvEvent, J as DcmrecvEventMap, K as DcmrecvEventValue, L as DcmrecvOptions, M as DcmtkProcess, N as DcmtkProcessConfig, O as DcmtkProcessEventMap, P as DicomReceiver, Q as DicomReceiverEventMap, R as DicomReceiverOptions, S as EventPattern, T as FileDeletedData, U as FileReceivedData, V as FilenameMode, W as FilenameModeValue, X as LineParser, Y as LineParserEventMap, Z as MultiLineConfig, _ as PoolAssociationReceivedData, $ as PoolCStoreRequestData, a0 as PoolEchoRequestData, a1 as PoolRefusingAssociationData, a2 as PoolStatus, a3 as PreferredTransferSyntax, a4 as PreferredTransferSyntaxValue, a5 as PrintAssociationAcknowledgedData, a6 as PrintAssociationReceivedData, a7 as PrintCannotStartListenerData, a8 as ProcessState, a9 as ProcessStateValue, aa as QRAssociationAcknowledgedData, ab as QRAssociationReceivedData, ac as QRCFindRequestData, ad as QRCGetRequestData, ae as QRCMoveRequestData, af as QRCStoreRequestData, ag as QRCannotStartListenerData, ah as QRListeningData, ai as ReceiverAssociationAcknowledgedData, aj as ReceiverAssociationData, ak as ReceiverAssociationReceivedData, al as ReceiverCStoreRequestData, am as ReceiverCannotStartListenerData, an as ReceiverConfigErrorData, ao as ReceiverDatabaseReadyData, ap as ReceiverEchoRequestData, aq as ReceiverErrorData, ar as ReceiverFileData, as as ReceiverFileReceivedData, at as ReceiverFileStoredData, au as ReceiverInstanceData, av as ReceiverListeningData, aw as RefusingAssociationData, ax as STORESCP_FATAL_EVENTS, ay as STORESCP_PATTERNS, az as StorageMode, aA as StorageModeValue, aB as StoreSCP, aC as StoreSCPEventMap, aD as StoreSCPOptions, aE as StoreSCPPreset, aF as StoreSCPPresetName, aG as StoredFileData, aH as StorescpEvent, aI as StorescpEventValue, aJ as StoringFileData, aK as SubdirectoryCreatedData, aL as SubdirectoryMode, aM as SubdirectoryModeValue, aN as TrackedFile, aO as WLMSCPFS_FATAL_EVENTS, aP as WLMSCPFS_PATTERNS, aQ as WlmAssociationAcknowledgedData, aR as WlmAssociationReceivedData, aS as WlmCFindRequestData, aT as WlmCannotStartListenerData, aU as WlmListeningData, aV as Wlmscpfs, aW as WlmscpfsEvent, aX as WlmscpfsEventMap, aY as WlmscpfsEventValue, aZ as WlmscpfsOptions } from './index--dDQfutR.js';
|
|
7
7
|
import { T as TagModification } from './dcmodify-CHvwChFu.js';
|
|
8
8
|
export { b as DcmodifyOptions, c as DcmodifyResult, D as DicomJsonElement, a as DicomJsonModel, d as ToolBaseOptions, e as dcmodify, x as xmlToJson } from './dcmodify-CHvwChFu.js';
|
|
9
9
|
export { DictionaryEntry, SOPClassName, SOP_CLASSES, TagSegment, VR, VRCategoryName, VRMetadata, VRValue, VR_CATEGORY, VR_CATEGORY_NAME, VR_META, getVRCategory, isBinaryVR, isNumericVR, isStringVR, lookupTag, lookupTagByKeyword, lookupTagByName, segmentsToModifyPath, segmentsToString, sopClassNameFromUID, tagPathToSegments } from './dicom.js';
|
package/dist/index.js
CHANGED
|
@@ -293,13 +293,14 @@ async function execCommand(binary, args, options) {
|
|
|
293
293
|
windowsHide: true,
|
|
294
294
|
signal: options?.signal
|
|
295
295
|
});
|
|
296
|
-
wireSpawnListeners(child, timeoutMs, resolve);
|
|
296
|
+
wireSpawnListeners(binary, child, timeoutMs, resolve);
|
|
297
297
|
});
|
|
298
298
|
}
|
|
299
|
-
function wireSpawnListeners(child, timeoutMs, resolve) {
|
|
299
|
+
function wireSpawnListeners(binary, child, timeoutMs, resolve) {
|
|
300
300
|
let stdout = "";
|
|
301
301
|
let stderr8 = "";
|
|
302
302
|
let settled = false;
|
|
303
|
+
const name = binary.split("/").pop() ?? binary;
|
|
303
304
|
const settle = (result) => {
|
|
304
305
|
if (settled) return;
|
|
305
306
|
settled = true;
|
|
@@ -308,25 +309,25 @@ function wireSpawnListeners(child, timeoutMs, resolve) {
|
|
|
308
309
|
};
|
|
309
310
|
const timer = setTimeout(() => {
|
|
310
311
|
if (child.pid !== void 0 && child.pid !== null) killTree(child.pid);
|
|
311
|
-
settle(err(new Error(
|
|
312
|
+
settle(err(new Error(`${name} timed out after ${timeoutMs}ms (pid: ${String(child.pid ?? "unknown")})`)));
|
|
312
313
|
}, timeoutMs);
|
|
313
314
|
child.stdout?.on("data", (chunk) => {
|
|
314
315
|
stdout += String(chunk);
|
|
315
316
|
if (stdout.length + stderr8.length > MAX_OUTPUT_BYTES) {
|
|
316
317
|
if (child.pid !== void 0 && child.pid !== null) killTree(child.pid);
|
|
317
|
-
settle(err(new Error(
|
|
318
|
+
settle(err(new Error(`${name} output exceeded ${MAX_OUTPUT_BYTES} bytes`)));
|
|
318
319
|
}
|
|
319
320
|
});
|
|
320
321
|
child.stderr?.on("data", (chunk) => {
|
|
321
322
|
stderr8 += String(chunk);
|
|
322
323
|
if (stdout.length + stderr8.length > MAX_OUTPUT_BYTES) {
|
|
323
324
|
if (child.pid !== void 0 && child.pid !== null) killTree(child.pid);
|
|
324
|
-
settle(err(new Error(
|
|
325
|
+
settle(err(new Error(`${name} output exceeded ${MAX_OUTPUT_BYTES} bytes`)));
|
|
325
326
|
}
|
|
326
327
|
});
|
|
327
328
|
child.on("error", (error) => {
|
|
328
329
|
if (child.pid !== void 0 && child.pid !== null) killTree(child.pid);
|
|
329
|
-
settle(err(new Error(
|
|
330
|
+
settle(err(new Error(`${name} error: ${error.message}`)));
|
|
330
331
|
});
|
|
331
332
|
child.on("close", (code) => {
|
|
332
333
|
settle(ok({ stdout, stderr: stderr8, exitCode: code ?? 1 }));
|
|
@@ -341,7 +342,7 @@ async function spawnCommand(binary, args, options) {
|
|
|
341
342
|
windowsHide: true,
|
|
342
343
|
signal: options?.signal
|
|
343
344
|
});
|
|
344
|
-
wireSpawnListeners(child, timeoutMs, resolve);
|
|
345
|
+
wireSpawnListeners(binary, child, timeoutMs, resolve);
|
|
345
346
|
});
|
|
346
347
|
}
|
|
347
348
|
var ProcessState = {
|
|
@@ -36658,14 +36659,32 @@ var DicomReceiver = class _DicomReceiver extends EventEmitter {
|
|
|
36658
36659
|
return this.on(event, listener);
|
|
36659
36660
|
}
|
|
36660
36661
|
/**
|
|
36661
|
-
* Registers a listener for received
|
|
36662
|
+
* Registers a listener for files received by dcmrecv (before move/parse).
|
|
36662
36663
|
*
|
|
36663
|
-
* @param listener - Callback receiving file data
|
|
36664
|
+
* @param listener - Callback receiving raw file data
|
|
36664
36665
|
* @returns this for chaining
|
|
36665
36666
|
*/
|
|
36666
36667
|
onFileReceived(listener) {
|
|
36667
36668
|
return this.on("FILE_RECEIVED", listener);
|
|
36668
36669
|
}
|
|
36670
|
+
/**
|
|
36671
|
+
* Registers a listener for files stored in the association directory.
|
|
36672
|
+
*
|
|
36673
|
+
* @param listener - Callback receiving stored file data with size
|
|
36674
|
+
* @returns this for chaining
|
|
36675
|
+
*/
|
|
36676
|
+
onFileStored(listener) {
|
|
36677
|
+
return this.on("FILE_STORED", listener);
|
|
36678
|
+
}
|
|
36679
|
+
/**
|
|
36680
|
+
* Registers a listener for parsed DicomInstance availability.
|
|
36681
|
+
*
|
|
36682
|
+
* @param listener - Callback receiving instance data
|
|
36683
|
+
* @returns this for chaining
|
|
36684
|
+
*/
|
|
36685
|
+
onInstanceReceived(listener) {
|
|
36686
|
+
return this.on("INSTANCE_RECEIVED", listener);
|
|
36687
|
+
}
|
|
36669
36688
|
/**
|
|
36670
36689
|
* Registers a listener for completed associations.
|
|
36671
36690
|
*
|
|
@@ -36959,11 +36978,18 @@ var DicomReceiver = class _DicomReceiver extends EventEmitter {
|
|
|
36959
36978
|
});
|
|
36960
36979
|
return;
|
|
36961
36980
|
}
|
|
36981
|
+
this.emit("FILE_RECEIVED", {
|
|
36982
|
+
filePath: data.filePath,
|
|
36983
|
+
associationId: ctx.associationId,
|
|
36984
|
+
callingAE: data.callingAE,
|
|
36985
|
+
calledAE: data.calledAE,
|
|
36986
|
+
source: data.source
|
|
36987
|
+
});
|
|
36962
36988
|
const promise = this.handleFileReceived(worker, data, ctx);
|
|
36963
36989
|
worker.trackFile(promise);
|
|
36964
36990
|
});
|
|
36965
36991
|
}
|
|
36966
|
-
/** Moves
|
|
36992
|
+
/** Moves file to association dir, emits FILE_STORED, then parses instance. */
|
|
36967
36993
|
async handleFileReceived(worker, data, ctx) {
|
|
36968
36994
|
try {
|
|
36969
36995
|
await this.moveAndEmitFile(worker, data, ctx);
|
|
@@ -36980,7 +37006,7 @@ var DicomReceiver = class _DicomReceiver extends EventEmitter {
|
|
|
36980
37006
|
});
|
|
36981
37007
|
}
|
|
36982
37008
|
}
|
|
36983
|
-
/** Inner handler: move file, parse DICOM, emit
|
|
37009
|
+
/** Inner handler: move file, emit FILE_STORED, parse DICOM, emit INSTANCE_RECEIVED. */
|
|
36984
37010
|
async moveAndEmitFile(worker, data, ctx) {
|
|
36985
37011
|
const srcPath = data.filePath;
|
|
36986
37012
|
const destPath = path.join(ctx.associationDir, path.basename(srcPath));
|
|
@@ -36988,28 +37014,42 @@ var DicomReceiver = class _DicomReceiver extends EventEmitter {
|
|
|
36988
37014
|
const finalPath = moveResult.ok ? destPath : srcPath;
|
|
36989
37015
|
const fileSize = await statFileSafe(finalPath);
|
|
36990
37016
|
worker.recordFile(finalPath, fileSize);
|
|
36991
|
-
|
|
36992
|
-
if (!openResult.ok) {
|
|
36993
|
-
this.emit("error", {
|
|
36994
|
-
error: openResult.error,
|
|
36995
|
-
filePath: finalPath,
|
|
36996
|
-
associationId: ctx.associationId,
|
|
36997
|
-
associationDir: ctx.associationDir,
|
|
36998
|
-
callingAE: data.callingAE,
|
|
36999
|
-
calledAE: data.calledAE,
|
|
37000
|
-
source: data.source
|
|
37001
|
-
});
|
|
37002
|
-
return;
|
|
37003
|
-
}
|
|
37004
|
-
this.emit("FILE_RECEIVED", {
|
|
37017
|
+
this.emit("FILE_STORED", {
|
|
37005
37018
|
filePath: finalPath,
|
|
37006
37019
|
fileSize,
|
|
37007
37020
|
associationId: ctx.associationId,
|
|
37008
37021
|
associationDir: ctx.associationDir,
|
|
37009
37022
|
callingAE: data.callingAE,
|
|
37010
37023
|
calledAE: data.calledAE,
|
|
37011
|
-
source: data.source
|
|
37012
|
-
|
|
37024
|
+
source: data.source
|
|
37025
|
+
});
|
|
37026
|
+
this.emitInstanceReceived(finalPath, fileSize, data, ctx);
|
|
37027
|
+
}
|
|
37028
|
+
/** Parses a DICOM file and emits INSTANCE_RECEIVED or error. */
|
|
37029
|
+
emitInstanceReceived(filePath, fileSize, data, ctx) {
|
|
37030
|
+
void DicomInstance.open(filePath).then((openResult) => {
|
|
37031
|
+
if (!openResult.ok) {
|
|
37032
|
+
this.emit("error", {
|
|
37033
|
+
error: openResult.error,
|
|
37034
|
+
filePath,
|
|
37035
|
+
associationId: ctx.associationId,
|
|
37036
|
+
associationDir: ctx.associationDir,
|
|
37037
|
+
callingAE: data.callingAE,
|
|
37038
|
+
calledAE: data.calledAE,
|
|
37039
|
+
source: data.source
|
|
37040
|
+
});
|
|
37041
|
+
return;
|
|
37042
|
+
}
|
|
37043
|
+
this.emit("INSTANCE_RECEIVED", {
|
|
37044
|
+
filePath,
|
|
37045
|
+
fileSize,
|
|
37046
|
+
associationId: ctx.associationId,
|
|
37047
|
+
associationDir: ctx.associationDir,
|
|
37048
|
+
callingAE: data.callingAE,
|
|
37049
|
+
calledAE: data.calledAE,
|
|
37050
|
+
source: data.source,
|
|
37051
|
+
instance: openResult.value
|
|
37052
|
+
});
|
|
37013
37053
|
});
|
|
37014
37054
|
}
|
|
37015
37055
|
/** Returns worker to idle pool on association complete, emits summary. */
|