@ubercode/dcmtk 0.11.0 → 0.12.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.
@@ -1,4 +1,4 @@
1
- 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, 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';
1
+ 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, 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 ReceiverAssociationFinalizedData, al as ReceiverAssociationReceivedData, am as ReceiverCStoreRequestData, an as ReceiverCannotStartListenerData, ao as ReceiverConfigErrorData, ap as ReceiverDatabaseReadyData, aq as ReceiverEchoRequestData, ar as ReceiverErrorData, as as ReceiverFileData, at as ReceiverFileReceivedData, au as ReceiverFileStoredData, av as ReceiverInstanceData, aw as ReceiverInstanceErrorData, ax as ReceiverListeningData, ay as RefusingAssociationData, az as STORESCP_FATAL_EVENTS, aA as STORESCP_PATTERNS, aB as StorageMode, aC as StorageModeValue, aD as StoreSCP, aE as StoreSCPEventMap, aF as StoreSCPOptions, aG as StoreSCPPreset, aH as StoreSCPPresetName, aI as StoredFileData, aJ as StorescpEvent, aK as StorescpEventValue, aL as StoringFileData, aM as SubdirectoryCreatedData, aN as SubdirectoryMode, aO as SubdirectoryModeValue, aP as TrackedFile, aQ as WLMSCPFS_FATAL_EVENTS, aR as WLMSCPFS_PATTERNS, aS as WlmAssociationAcknowledgedData, aT as WlmAssociationReceivedData, aU as WlmCFindRequestData, aV as WlmCannotStartListenerData, aW as WlmListeningData, aX as Wlmscpfs, aY as WlmscpfsEvent, aZ as WlmscpfsEventMap, a_ as WlmscpfsEventValue, a$ as WlmscpfsOptions } from './index-DV8HaHEX.cjs';
2
2
  import './types-Cgumy1N4.cjs';
3
3
  import 'node:events';
4
4
  import 'node:net';
package/dist/servers.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- 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, 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';
1
+ 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, 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 ReceiverAssociationFinalizedData, al as ReceiverAssociationReceivedData, am as ReceiverCStoreRequestData, an as ReceiverCannotStartListenerData, ao as ReceiverConfigErrorData, ap as ReceiverDatabaseReadyData, aq as ReceiverEchoRequestData, ar as ReceiverErrorData, as as ReceiverFileData, at as ReceiverFileReceivedData, au as ReceiverFileStoredData, av as ReceiverInstanceData, aw as ReceiverInstanceErrorData, ax as ReceiverListeningData, ay as RefusingAssociationData, az as STORESCP_FATAL_EVENTS, aA as STORESCP_PATTERNS, aB as StorageMode, aC as StorageModeValue, aD as StoreSCP, aE as StoreSCPEventMap, aF as StoreSCPOptions, aG as StoreSCPPreset, aH as StoreSCPPresetName, aI as StoredFileData, aJ as StorescpEvent, aK as StorescpEventValue, aL as StoringFileData, aM as SubdirectoryCreatedData, aN as SubdirectoryMode, aO as SubdirectoryModeValue, aP as TrackedFile, aQ as WLMSCPFS_FATAL_EVENTS, aR as WLMSCPFS_PATTERNS, aS as WlmAssociationAcknowledgedData, aT as WlmAssociationReceivedData, aU as WlmCFindRequestData, aV as WlmCannotStartListenerData, aW as WlmListeningData, aX as Wlmscpfs, aY as WlmscpfsEvent, aZ as WlmscpfsEventMap, a_ as WlmscpfsEventValue, a$ as WlmscpfsOptions } from './index-B5FQoIqM.js';
2
2
  import './types-Cgumy1N4.js';
3
3
  import 'node:events';
4
4
  import 'node:net';
package/dist/servers.js CHANGED
@@ -2830,6 +2830,9 @@ var Worker = class {
2830
2830
  __publicField(this, "_state", "idle");
2831
2831
  __publicField(this, "_context");
2832
2832
  __publicField(this, "_pending", /* @__PURE__ */ new Set());
2833
+ __publicField(this, "_instancePending", /* @__PURE__ */ new Set());
2834
+ __publicField(this, "_instancesReceived", 0);
2835
+ __publicField(this, "_instanceErrors", 0);
2833
2836
  __publicField(this, "_files", []);
2834
2837
  __publicField(this, "_fileSizes", []);
2835
2838
  __publicField(this, "_outputLines", []);
@@ -2867,6 +2870,9 @@ var Worker = class {
2867
2870
  this._fileSizes.length = 0;
2868
2871
  this._outputLines.length = 0;
2869
2872
  this._pending.clear();
2873
+ this._instancePending.clear();
2874
+ this._instancesReceived = 0;
2875
+ this._instanceErrors = 0;
2870
2876
  }
2871
2877
  /** Returns the worker to idle and clears all association state. */
2872
2878
  endAssociation() {
@@ -2876,6 +2882,9 @@ var Worker = class {
2876
2882
  this._fileSizes.length = 0;
2877
2883
  this._outputLines.length = 0;
2878
2884
  this._pending.clear();
2885
+ this._instancePending.clear();
2886
+ this._instancesReceived = 0;
2887
+ this._instanceErrors = 0;
2879
2888
  this._remoteSocket = void 0;
2880
2889
  this._workerSocket = void 0;
2881
2890
  }
@@ -2886,6 +2895,35 @@ var Worker = class {
2886
2895
  this._pending.delete(promise);
2887
2896
  });
2888
2897
  }
2898
+ /** Tracks an in-flight instance parsing promise; auto-removes on completion. */
2899
+ trackInstance(promise) {
2900
+ this._instancePending.add(promise);
2901
+ void promise.finally(() => {
2902
+ this._instancePending.delete(promise);
2903
+ });
2904
+ }
2905
+ /** Records a successful instance parse. */
2906
+ recordInstanceSuccess() {
2907
+ this._instancesReceived++;
2908
+ }
2909
+ /** Records a failed instance parse. */
2910
+ recordInstanceError() {
2911
+ this._instanceErrors++;
2912
+ }
2913
+ /** Awaits all in-flight instance parsing promises. */
2914
+ async drainInstancePending() {
2915
+ if (this._instancePending.size > 0) {
2916
+ await Promise.all(this._instancePending);
2917
+ }
2918
+ }
2919
+ /** Number of successfully parsed instances in this association. */
2920
+ get instancesReceived() {
2921
+ return this._instancesReceived;
2922
+ }
2923
+ /** Number of failed instance parses in this association. */
2924
+ get instanceErrors() {
2925
+ return this._instanceErrors;
2926
+ }
2889
2927
  /** Records a successfully received file path and its size. */
2890
2928
  recordFile(filePath, size) {
2891
2929
  this._files.push(filePath);
@@ -3057,7 +3095,16 @@ var DicomReceiver = class _DicomReceiver extends EventEmitter {
3057
3095
  return this.on("INSTANCE_RECEIVED", listener);
3058
3096
  }
3059
3097
  /**
3060
- * Registers a listener for completed associations.
3098
+ * Registers a listener for DicomInstance.open failures.
3099
+ *
3100
+ * @param listener - Callback receiving instance error data
3101
+ * @returns this for chaining
3102
+ */
3103
+ onInstanceError(listener) {
3104
+ return this.on("INSTANCE_ERROR", listener);
3105
+ }
3106
+ /**
3107
+ * Registers a listener for completed associations (file moves done).
3061
3108
  *
3062
3109
  * @param listener - Callback receiving association data
3063
3110
  * @returns this for chaining
@@ -3065,6 +3112,15 @@ var DicomReceiver = class _DicomReceiver extends EventEmitter {
3065
3112
  onAssociationComplete(listener) {
3066
3113
  return this.on("ASSOCIATION_COMPLETE", listener);
3067
3114
  }
3115
+ /**
3116
+ * Registers a listener for fully finalized associations (all parsing done).
3117
+ *
3118
+ * @param listener - Callback receiving finalized data with instance counts
3119
+ * @returns this for chaining
3120
+ */
3121
+ onAssociationFinalized(listener) {
3122
+ return this.on("ASSOCIATION_FINALIZED", listener);
3123
+ }
3068
3124
  /**
3069
3125
  * Registers a listener for new associations (bubbled from workers).
3070
3126
  *
@@ -3394,34 +3450,33 @@ var DicomReceiver = class _DicomReceiver extends EventEmitter {
3394
3450
  calledAE: data.calledAE,
3395
3451
  source: data.source
3396
3452
  });
3397
- this.emitInstanceReceived(finalPath, fileSize, data, ctx);
3453
+ const instanceCtx = {
3454
+ filePath: finalPath,
3455
+ fileSize,
3456
+ associationId: ctx.associationId,
3457
+ associationDir: ctx.associationDir,
3458
+ callingAE: data.callingAE,
3459
+ calledAE: data.calledAE,
3460
+ source: data.source
3461
+ };
3462
+ worker.trackInstance(this.parseAndEmitInstance(worker, instanceCtx));
3398
3463
  }
3399
- /** Parses a DICOM file and emits INSTANCE_RECEIVED or error. */
3400
- emitInstanceReceived(filePath, fileSize, data, ctx) {
3401
- void DicomInstance.open(filePath).then((openResult) => {
3464
+ /** Parses a DICOM file and emits INSTANCE_RECEIVED or INSTANCE_ERROR. */
3465
+ async parseAndEmitInstance(worker, ctx) {
3466
+ try {
3467
+ const openResult = await DicomInstance.open(ctx.filePath);
3402
3468
  if (!openResult.ok) {
3403
- this.emit("error", {
3404
- error: openResult.error,
3405
- filePath,
3406
- associationId: ctx.associationId,
3407
- associationDir: ctx.associationDir,
3408
- callingAE: data.callingAE,
3409
- calledAE: data.calledAE,
3410
- source: data.source
3411
- });
3469
+ worker.recordInstanceError();
3470
+ this.emit("INSTANCE_ERROR", { error: openResult.error, thrown: false, ...ctx });
3412
3471
  return;
3413
3472
  }
3414
- this.emit("INSTANCE_RECEIVED", {
3415
- filePath,
3416
- fileSize,
3417
- associationId: ctx.associationId,
3418
- associationDir: ctx.associationDir,
3419
- callingAE: data.callingAE,
3420
- calledAE: data.calledAE,
3421
- source: data.source,
3422
- instance: openResult.value
3423
- });
3424
- });
3473
+ worker.recordInstanceSuccess();
3474
+ this.emit("INSTANCE_RECEIVED", { ...ctx, instance: openResult.value });
3475
+ } catch (thrown) {
3476
+ const error = thrown instanceof Error ? thrown : new Error(String(thrown));
3477
+ worker.recordInstanceError();
3478
+ this.emit("INSTANCE_ERROR", { error, thrown: true, ...ctx });
3479
+ }
3425
3480
  }
3426
3481
  /** Returns worker to idle pool on association complete, emits summary. */
3427
3482
  wireAssociationComplete(worker) {
@@ -3429,10 +3484,12 @@ var DicomReceiver = class _DicomReceiver extends EventEmitter {
3429
3484
  void this.finalizeAssociation(worker, data);
3430
3485
  });
3431
3486
  }
3432
- /** Awaits ALL pending file operations, emits ASSOCIATION_COMPLETE, resets worker state. */
3487
+ /** Awaits file ops, emits ASSOCIATION_COMPLETE, awaits parsing, emits ASSOCIATION_FINALIZED. */
3433
3488
  async finalizeAssociation(worker, data) {
3434
3489
  await worker.drainPendingFiles();
3435
3490
  this.emitAssociationComplete(worker, data);
3491
+ await worker.drainInstancePending();
3492
+ this.emitAssociationFinalized(worker, data);
3436
3493
  worker.endAssociation();
3437
3494
  void this.scaleDown();
3438
3495
  }
@@ -3464,6 +3521,20 @@ var DicomReceiver = class _DicomReceiver extends EventEmitter {
3464
3521
  output
3465
3522
  });
3466
3523
  }
3524
+ /** Emits ASSOCIATION_FINALIZED after all instance parsing is done. */
3525
+ emitAssociationFinalized(worker, data) {
3526
+ const ctx = worker.context;
3527
+ this.emit("ASSOCIATION_FINALIZED", {
3528
+ associationId: ctx?.associationId ?? data.associationId,
3529
+ associationDir: ctx?.associationDir ?? "",
3530
+ callingAE: data.callingAE,
3531
+ calledAE: data.calledAE,
3532
+ source: data.source,
3533
+ files: [...worker.files],
3534
+ instancesReceived: worker.instancesReceived,
3535
+ instanceErrors: worker.instanceErrors
3536
+ });
3537
+ }
3467
3538
  /** Bubbles ASSOCIATION_RECEIVED from dcmrecv worker. */
3468
3539
  wireAssociationReceived(worker) {
3469
3540
  worker.dcmrecv.onEvent("ASSOCIATION_RECEIVED", (data) => {