@cornerstonejs/dicom-image-loader 5.4.8 → 5.4.10

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 +1 @@
1
- export declare const version = "5.4.8";
1
+ export declare const version = "5.4.10";
@@ -1 +1 @@
1
- export const version = '5.4.8';
1
+ export const version = '5.4.10';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cornerstonejs/dicom-image-loader",
3
- "version": "5.4.8",
3
+ "version": "5.4.10",
4
4
  "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file",
5
5
  "keywords": [
6
6
  "DICOM",
@@ -122,12 +122,12 @@
122
122
  "uuid": "9.0.1"
123
123
  },
124
124
  "devDependencies": {
125
- "@cornerstonejs/core": "5.4.8",
126
- "@cornerstonejs/metadata": "5.4.8"
125
+ "@cornerstonejs/core": "5.4.10",
126
+ "@cornerstonejs/metadata": "5.4.10"
127
127
  },
128
128
  "peerDependencies": {
129
- "@cornerstonejs/core": "5.4.8",
130
- "@cornerstonejs/metadata": "5.4.8",
129
+ "@cornerstonejs/core": "5.4.10",
130
+ "@cornerstonejs/metadata": "5.4.10",
131
131
  "dicom-parser": "1.8.21"
132
132
  },
133
133
  "config": {
@@ -135,5 +135,5 @@
135
135
  "path": "./node_modules/cz-conventional-changelog"
136
136
  }
137
137
  },
138
- "gitHead": "eb6c2375f8ea669ae982edd0b24be4663a90c0dc"
138
+ "gitHead": "523becb5856f2b6bb5f58c08eb2b5c66bd0b17e1"
139
139
  }
@@ -1 +0,0 @@
1
- export {};
@@ -1,191 +0,0 @@
1
- import { getECGModule } from '../imageLoader/wadors/metaData/ECGHelpers.js';
2
- describe('ECGHelpers', () => {
3
- describe('getECGModule', () => {
4
- it('should return null when no WaveformSequence is found', () => {
5
- const metadata = {};
6
- const result = getECGModule(metadata);
7
- expect(result).toBeNull();
8
- });
9
- it('should parse ECG module from DICOM metadata with InlineBinary data', async () => {
10
- const numberOfChannels = 2;
11
- const numberOfSamples = 10;
12
- const buffer = new ArrayBuffer(numberOfChannels * numberOfSamples * 2);
13
- const view = new Int16Array(buffer);
14
- for (let i = 0; i < numberOfSamples; i++) {
15
- view[i * numberOfChannels + 0] = i * 100;
16
- view[i * numberOfChannels + 1] = -i * 100;
17
- }
18
- const base64Data = btoa(String.fromCharCode(...new Uint8Array(buffer)));
19
- const metadata = {
20
- '54000100': {
21
- Value: [
22
- {
23
- '003A0005': { Value: [numberOfChannels] },
24
- '003A0010': { Value: [numberOfSamples] },
25
- '003A001A': { Value: [500] },
26
- '54001004': { Value: [16] },
27
- '54001006': { Value: ['SS'] },
28
- '003A0020': { Value: ['ECG'] },
29
- '003A0200': {
30
- Value: [
31
- {
32
- '003A0208': {
33
- Value: [
34
- {
35
- '00080104': { Value: ['Lead I'] },
36
- },
37
- ],
38
- },
39
- },
40
- {
41
- '003A0208': {
42
- Value: [
43
- {
44
- '00080104': { Value: ['Lead II'] },
45
- },
46
- ],
47
- },
48
- },
49
- ],
50
- },
51
- '54001010': {
52
- InlineBinary: base64Data,
53
- },
54
- },
55
- ],
56
- },
57
- };
58
- const result = getECGModule(metadata);
59
- expect(result).not.toBeNull();
60
- expect(result?.numberOfWaveformChannels).toBe(numberOfChannels);
61
- expect(result?.numberOfWaveformSamples).toBe(numberOfSamples);
62
- expect(result?.samplingFrequency).toBe(500);
63
- expect(result?.waveformBitsAllocated).toBe(16);
64
- expect(result?.waveformSampleInterpretation).toBe('SS');
65
- expect(result?.multiplexGroupLabel).toBe('ECG');
66
- expect(result?.channelDefinitionSequence.length).toBe(2);
67
- expect(result?.channelDefinitionSequence[0].channelSourceSequence?.codeMeaning).toBe('Lead I');
68
- expect(result?.channelDefinitionSequence[1].channelSourceSequence?.codeMeaning).toBe('Lead II');
69
- });
70
- it('should have a retrieveBulkData function that decodes InlineBinary data', async () => {
71
- const numberOfChannels = 2;
72
- const numberOfSamples = 5;
73
- const buffer = new ArrayBuffer(numberOfChannels * numberOfSamples * 2);
74
- const view = new Int16Array(buffer);
75
- for (let i = 0; i < numberOfSamples; i++) {
76
- view[i * numberOfChannels + 0] = i * 100;
77
- view[i * numberOfChannels + 1] = -i * 100;
78
- }
79
- const base64Data = btoa(String.fromCharCode(...new Uint8Array(buffer)));
80
- const metadata = {
81
- '54000100': {
82
- Value: [
83
- {
84
- '003A0005': { Value: [numberOfChannels] },
85
- '003A0010': { Value: [numberOfSamples] },
86
- '003A001A': { Value: [500] },
87
- '54001004': { Value: [16] },
88
- '54001006': { Value: ['SS'] },
89
- '003A0020': { Value: ['ECG'] },
90
- '003A0200': { Value: [] },
91
- '54001010': {
92
- InlineBinary: base64Data,
93
- },
94
- },
95
- ],
96
- },
97
- };
98
- const ecgModule = getECGModule(metadata);
99
- expect(ecgModule).not.toBeNull();
100
- expect(ecgModule?.waveformData.retrieveBulkData).toBeDefined();
101
- const channelArrays = await ecgModule.waveformData.retrieveBulkData();
102
- expect(channelArrays.length).toBe(numberOfChannels);
103
- expect(channelArrays[0].length).toBe(numberOfSamples);
104
- expect(channelArrays[1].length).toBe(numberOfSamples);
105
- expect(channelArrays[0][0]).toBe(0);
106
- expect(channelArrays[0][1]).toBe(100);
107
- expect(channelArrays[1][0]).toBe(0);
108
- expect(channelArrays[1][1]).toBe(-100);
109
- });
110
- it('should throw error when no data source is found', async () => {
111
- const metadata = {
112
- '54000100': {
113
- Value: [
114
- {
115
- '003A0005': { Value: [2] },
116
- '003A0010': { Value: [10] },
117
- '003A001A': { Value: [500] },
118
- '003A0200': { Value: [] },
119
- '54001010': {},
120
- },
121
- ],
122
- },
123
- };
124
- const ecgModule = getECGModule(metadata);
125
- expect(ecgModule).not.toBeNull();
126
- try {
127
- await ecgModule.waveformData.retrieveBulkData();
128
- throw new Error('Expected retrieveBulkData to throw');
129
- }
130
- catch (error) {
131
- expect(error.message).toContain('[ECGHelpers] No data source found in WaveformData');
132
- }
133
- });
134
- it('should handle metadata with default values', () => {
135
- const numberOfChannels = 1;
136
- const numberOfSamples = 20;
137
- const metadata = {
138
- '54000100': {
139
- Value: [
140
- {
141
- '003A0005': { Value: [numberOfChannels] },
142
- '003A0010': { Value: [numberOfSamples] },
143
- '003A001A': { Value: [250] },
144
- '003A0200': { Value: [] },
145
- '54001010': { Value: [] },
146
- },
147
- ],
148
- },
149
- };
150
- const result = getECGModule(metadata);
151
- expect(result).not.toBeNull();
152
- expect(result?.waveformBitsAllocated).toBe(16);
153
- expect(result?.waveformSampleInterpretation).toBe('SS');
154
- expect(result?.multiplexGroupLabel).toBe('ECG');
155
- });
156
- it('should parse channel definitions correctly', () => {
157
- const metadata = {
158
- '54000100': {
159
- Value: [
160
- {
161
- '003A0005': { Value: [3] },
162
- '003A0010': { Value: [100] },
163
- '003A001A': { Value: [500] },
164
- '003A0200': {
165
- Value: [
166
- {
167
- '003A0208': {
168
- Value: [{ '00080104': { Value: ['Channel A'] } }],
169
- },
170
- },
171
- {
172
- '003A0208': {
173
- Value: [{ '00080104': { Value: ['Channel B'] } }],
174
- },
175
- },
176
- {},
177
- ],
178
- },
179
- '54001010': { Value: [] },
180
- },
181
- ],
182
- },
183
- };
184
- const result = getECGModule(metadata);
185
- expect(result?.channelDefinitionSequence.length).toBe(3);
186
- expect(result?.channelDefinitionSequence[0].channelSourceSequence?.codeMeaning).toBe('Channel A');
187
- expect(result?.channelDefinitionSequence[1].channelSourceSequence?.codeMeaning).toBe('Channel B');
188
- expect(result?.channelDefinitionSequence[2].channelSourceSequence?.codeMeaning).toBe('Unknown');
189
- });
190
- });
191
- });