@abasb75/dicom-parser 0.0.0-test23 → 0.0.1-a

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/Loader.js DELETED
@@ -1,105 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- var __generator = (this && this.__generator) || function (thisArg, body) {
11
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
12
- return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
- function verb(n) { return function (v) { return step([n, v]); }; }
14
- function step(op) {
15
- if (f) throw new TypeError("Generator is already executing.");
16
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
- if (y = 0, t) op = [op[0] & 2, t.value];
19
- switch (op[0]) {
20
- case 0: case 1: t = op; break;
21
- case 4: _.label++; return { value: op[1], done: false };
22
- case 5: _.label++; y = op[1]; op = [0]; continue;
23
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
- default:
25
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
- if (t[2]) _.ops.pop();
30
- _.trys.pop(); continue;
31
- }
32
- op = body.call(thisArg, _);
33
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
- }
36
- };
37
- var Loader = /** @class */ (function () {
38
- function Loader(dicomSrc) {
39
- Object.defineProperty(this, "dicomSrc", {
40
- enumerable: true,
41
- configurable: true,
42
- writable: true,
43
- value: void 0
44
- });
45
- Object.defineProperty(this, "xhr", {
46
- enumerable: true,
47
- configurable: true,
48
- writable: true,
49
- value: void 0
50
- });
51
- this.dicomSrc = dicomSrc;
52
- this.xhr = new XMLHttpRequest();
53
- }
54
- Object.defineProperty(Loader.prototype, "load", {
55
- enumerable: false,
56
- configurable: true,
57
- writable: true,
58
- value: function (dicomSrc) {
59
- return __awaiter(this, void 0, void 0, function () {
60
- var dicom_1;
61
- var _this = this;
62
- return __generator(this, function (_a) {
63
- if (typeof dicomSrc === "string") {
64
- dicom_1 = dicomSrc || this.dicomSrc;
65
- if (!dicom_1)
66
- return [2 /*return*/];
67
- return [2 /*return*/, new Promise(function (resolve, reject) {
68
- _this.xhr.onload = function () {
69
- resolve(_this.xhr.response);
70
- };
71
- _this.xhr.onerror = function () {
72
- reject(_this.xhr);
73
- };
74
- _this.xhr.responseType = 'arraybuffer';
75
- _this.xhr.open('GET', dicom_1, true);
76
- _this.xhr.send();
77
- })];
78
- }
79
- else if (dicomSrc instanceof File) {
80
- return [2 /*return*/, new Promise(function (resolve, reject) {
81
- dicomSrc.arrayBuffer().then(function (arrayBuffer) {
82
- resolve(arrayBuffer);
83
- }).catch(function (reason) { return reject(reason); });
84
- })];
85
- }
86
- return [2 /*return*/, new Promise(function (resolve, reject) {
87
- if (false)
88
- resolve(new ArrayBuffer(1));
89
- reject("dicom source is not valid");
90
- })];
91
- });
92
- });
93
- }
94
- });
95
- Object.defineProperty(Loader.prototype, "cancel", {
96
- enumerable: false,
97
- configurable: true,
98
- writable: true,
99
- value: function () {
100
- this.xhr.abort();
101
- }
102
- });
103
- return Loader;
104
- }());
105
- export default Loader;
package/Parser.d.ts DELETED
@@ -1,33 +0,0 @@
1
- import Dataset from "./Dataset";
2
- import { Tags } from "./types";
3
- declare class Parser {
4
- private start;
5
- private end;
6
- private arrayBuffer;
7
- private offset;
8
- private startOfset;
9
- private dataView;
10
- private tags;
11
- private dataSet;
12
- private EXEPTED;
13
- private VRS;
14
- private IMPLICT_TRANSFER_SYNTAXES;
15
- private BIG_ENDIAN_TRANSFER_SYNTAXES;
16
- private DEFLATED_TRANSFER_SYNTAXES;
17
- private littleEndian;
18
- private implicit;
19
- private transferSyntaxUID;
20
- private inflated;
21
- constructor(arrayBuffer: ArrayBuffer);
22
- parse(): Dataset;
23
- getDataset(): Dataset | undefined;
24
- getElements(sqLen?: number): Tags;
25
- getValue(len: number): ArrayBuffer;
26
- getNextGroupAndElement(): {
27
- group: number;
28
- element: number;
29
- };
30
- getNextVR(groupInt: number, elementInt: number): string;
31
- concatArrayBuffers: (buffer1: ArrayBuffer, buffer2: ArrayBuffer) => ArrayBufferLike;
32
- }
33
- export default Parser;
package/Parser.js DELETED
@@ -1,317 +0,0 @@
1
- import Dataset from "./Dataset";
2
- import Tag from "./Tag";
3
- import Value from "./Value";
4
- import * as pako from "pako";
5
- var Parser = /** @class */ (function () {
6
- function Parser(arrayBuffer) {
7
- Object.defineProperty(this, "start", {
8
- enumerable: true,
9
- configurable: true,
10
- writable: true,
11
- value: void 0
12
- });
13
- Object.defineProperty(this, "end", {
14
- enumerable: true,
15
- configurable: true,
16
- writable: true,
17
- value: void 0
18
- });
19
- Object.defineProperty(this, "arrayBuffer", {
20
- enumerable: true,
21
- configurable: true,
22
- writable: true,
23
- value: void 0
24
- });
25
- Object.defineProperty(this, "offset", {
26
- enumerable: true,
27
- configurable: true,
28
- writable: true,
29
- value: void 0
30
- });
31
- Object.defineProperty(this, "startOfset", {
32
- enumerable: true,
33
- configurable: true,
34
- writable: true,
35
- value: 132
36
- });
37
- Object.defineProperty(this, "dataView", {
38
- enumerable: true,
39
- configurable: true,
40
- writable: true,
41
- value: void 0
42
- });
43
- Object.defineProperty(this, "tags", {
44
- enumerable: true,
45
- configurable: true,
46
- writable: true,
47
- value: {}
48
- });
49
- Object.defineProperty(this, "dataSet", {
50
- enumerable: true,
51
- configurable: true,
52
- writable: true,
53
- value: void 0
54
- });
55
- Object.defineProperty(this, "EXEPTED", {
56
- enumerable: true,
57
- configurable: true,
58
- writable: true,
59
- value: ["OB", "OW", "SQ", "UN", "UT", "OF", "UC", "OD"]
60
- });
61
- Object.defineProperty(this, "VRS", {
62
- enumerable: true,
63
- configurable: true,
64
- writable: true,
65
- value: ["AE", "AS", "AT", "CS", "DA", "DS", "DT", "FL", "FD", "IS", "LO", "LT", "OB", "OD", "OF", "OW", "PN", "SH", "SL", "SS", "ST", "TM", "UI", "UL", "UN", "US", "UT", "UC"]
66
- });
67
- Object.defineProperty(this, "IMPLICT_TRANSFER_SYNTAXES", {
68
- enumerable: true,
69
- configurable: true,
70
- writable: true,
71
- value: ["1.2.840.10008.1.2"]
72
- });
73
- Object.defineProperty(this, "BIG_ENDIAN_TRANSFER_SYNTAXES", {
74
- enumerable: true,
75
- configurable: true,
76
- writable: true,
77
- value: ["1.2.840.10008.1.2.2"]
78
- });
79
- Object.defineProperty(this, "DEFLATED_TRANSFER_SYNTAXES", {
80
- enumerable: true,
81
- configurable: true,
82
- writable: true,
83
- value: ["1.2.840.10008.1.2.1.99"]
84
- });
85
- Object.defineProperty(this, "littleEndian", {
86
- enumerable: true,
87
- configurable: true,
88
- writable: true,
89
- value: true
90
- });
91
- Object.defineProperty(this, "implicit", {
92
- enumerable: true,
93
- configurable: true,
94
- writable: true,
95
- value: false
96
- });
97
- Object.defineProperty(this, "transferSyntaxUID", {
98
- enumerable: true,
99
- configurable: true,
100
- writable: true,
101
- value: ""
102
- });
103
- // private UNDEFIENED_LEN:number = 0xffffffff;
104
- Object.defineProperty(this, "inflated", {
105
- enumerable: true,
106
- configurable: true,
107
- writable: true,
108
- value: false
109
- });
110
- Object.defineProperty(this, "concatArrayBuffers", {
111
- enumerable: true,
112
- configurable: true,
113
- writable: true,
114
- value: function (buffer1, buffer2) {
115
- var tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength);
116
- tmp.set(new Uint8Array(buffer1), 0);
117
- tmp.set(new Uint8Array(buffer2), buffer1.byteLength);
118
- return tmp.buffer;
119
- }
120
- });
121
- this.start = Date.now();
122
- this.offset = 0;
123
- this.arrayBuffer = arrayBuffer;
124
- this.dataView = new DataView(arrayBuffer);
125
- if (this.arrayBuffer.byteLength < 132) {
126
- return;
127
- }
128
- var prefix = Value.getString(new Uint8Array(arrayBuffer, 128, 4));
129
- if (prefix === 'DICM') {
130
- this.offset = 132;
131
- }
132
- else {
133
- this.offset = 0;
134
- while (Value.getString(this.dataView.buffer.slice(this.offset, this.offset + 1)) === "") {
135
- this.offset++;
136
- }
137
- this.startOfset = this.offset;
138
- }
139
- this.parse();
140
- }
141
- Object.defineProperty(Parser.prototype, "parse", {
142
- enumerable: false,
143
- configurable: true,
144
- writable: true,
145
- value: function () {
146
- this.tags = this.getElements();
147
- this.end = Date.now();
148
- this.dataSet = new Dataset(this.tags, this.dataView, this.littleEndian, this.start, this.end);
149
- this.dataSet.transferSyntaxUID = this.transferSyntaxUID;
150
- return this.dataSet;
151
- }
152
- });
153
- Object.defineProperty(Parser.prototype, "getDataset", {
154
- enumerable: false,
155
- configurable: true,
156
- writable: true,
157
- value: function () {
158
- return this.dataSet;
159
- }
160
- });
161
- Object.defineProperty(Parser.prototype, "getElements", {
162
- enumerable: false,
163
- configurable: true,
164
- writable: true,
165
- value: function (sqLen) {
166
- var tags = {};
167
- var targetOfset = (sqLen !== undefined)
168
- ? (this.offset + sqLen) : this.arrayBuffer.byteLength;
169
- while (this.offset < targetOfset) {
170
- var _a = this.getNextGroupAndElement(), group = _a.group, element = _a.element;
171
- if (!group && !element) {
172
- break;
173
- }
174
- if (sqLen && group === 0xFFFE && (element === 0xE00D || element === 0xE0DD)) {
175
- this.offset += 4;
176
- return tags;
177
- }
178
- if (group === 0xFFFE && (element === 0xE0DD || element === 0xE00D || element === 0xE000)) {
179
- this.offset += 4;
180
- continue;
181
- }
182
- if (!this.implicit && group !== 0x0002 && this.IMPLICT_TRANSFER_SYNTAXES.includes(this.transferSyntaxUID)) {
183
- this.implicit = true;
184
- }
185
- if (this.littleEndian && group !== 0x0002
186
- && this.BIG_ENDIAN_TRANSFER_SYNTAXES.includes(this.transferSyntaxUID)) {
187
- this.littleEndian = false;
188
- }
189
- if (!this.inflated && group !== 0x0002 && this.DEFLATED_TRANSFER_SYNTAXES.includes(this.transferSyntaxUID)) {
190
- this.offset -= 4;
191
- var meta = this.dataView.buffer.slice(0, this.offset);
192
- var body = this.dataView.buffer.slice(this.offset);
193
- var infaltedBody = pako.inflateRaw(body);
194
- this.arrayBuffer = this.concatArrayBuffers(meta, infaltedBody);
195
- this.dataView = new DataView(this.arrayBuffer);
196
- this.inflated = true;
197
- return this.getElements();
198
- }
199
- var vr = this.getNextVR(group, element);
200
- var len = 0;
201
- if (this.implicit) {
202
- len = this.dataView.getUint32(this.offset, this.littleEndian);
203
- this.offset += 4;
204
- }
205
- else if (this.EXEPTED.includes(vr)) {
206
- this.offset += 2; // skip 2 byte reserved
207
- len = this.dataView.getUint32(this.offset, this.littleEndian);
208
- this.offset += 4;
209
- }
210
- else if (this.VRS.includes(vr)) {
211
- len = this.dataView.getUint16(this.offset, this.littleEndian);
212
- this.offset += 2;
213
- }
214
- else if ((!vr || !vr.match(/^[A-Z]{2}$/)) && group === 0x0002 && element === 0x0000) {
215
- this.offset = this.startOfset;
216
- this.tags = {};
217
- this.implicit = true;
218
- continue;
219
- }
220
- else {
221
- this.offset -= 6;
222
- this.implicit = true;
223
- continue;
224
- }
225
- if (group === 0x0002 && element === 0x0010) {
226
- this.transferSyntaxUID = (Value.getString(new Uint8Array(this.arrayBuffer, this.offset, len))).replace('\0', '');
227
- }
228
- // find dataset thats may be as big endian dicom.
229
- // if(
230
- // this.littleEndian
231
- // && Object.keys(tags)?.length===0
232
- // && len > this.dataView.byteLength
233
- // ){
234
- // console.log({group,element,len,vr});
235
- // this.littleEndian =false;
236
- // this.offset = this.startOfset;
237
- // return this.getElements();
238
- // }else{
239
- // console.log({group,element,len,vr});
240
- // return tags;
241
- // }
242
- var tag = new Tag(group, element, vr, len, this.offset);
243
- if (len === 0xFFFFFFFF && group === 0x7FE0 && element === 0x0010) {
244
- var _b = this.getNextGroupAndElement(), group_1 = _b.group, element_1 = _b.element;
245
- while (true) {
246
- if (group_1 === 0xFFFE && element_1 === 0xE000) {
247
- var len_1 = this.dataView.getUint32(this.offset, this.littleEndian);
248
- this.offset += 4;
249
- var t = this.getNextGroupAndElement();
250
- group_1 = t.group;
251
- element_1 = t.element;
252
- this.offset += len_1;
253
- }
254
- else {
255
- break;
256
- }
257
- }
258
- this.offset -= 4;
259
- }
260
- if (vr === "SQ") {
261
- tag.value = this.getElements(len);
262
- }
263
- else {
264
- this.offset += len;
265
- }
266
- var key = tag.generateKey();
267
- tags[key] = tag;
268
- }
269
- return tags;
270
- }
271
- });
272
- Object.defineProperty(Parser.prototype, "getValue", {
273
- enumerable: false,
274
- configurable: true,
275
- writable: true,
276
- value: function (len) {
277
- var value = this.arrayBuffer.slice(this.offset, len);
278
- this.offset += len;
279
- return value;
280
- }
281
- });
282
- Object.defineProperty(Parser.prototype, "getNextGroupAndElement", {
283
- enumerable: false,
284
- configurable: true,
285
- writable: true,
286
- value: function () {
287
- try {
288
- var group = this.dataView.getUint16(this.offset, this.littleEndian);
289
- this.offset += 2;
290
- var element = this.dataView.getUint16(this.offset, this.littleEndian);
291
- this.offset += 2;
292
- return { group: group, element: element };
293
- }
294
- catch (_a) {
295
- return { group: 0, element: 0 };
296
- }
297
- }
298
- });
299
- Object.defineProperty(Parser.prototype, "getNextVR", {
300
- enumerable: false,
301
- configurable: true,
302
- writable: true,
303
- value: function (groupInt, elementInt) {
304
- if (this.offset >= this.dataView.byteLength) {
305
- return "";
306
- }
307
- if (this.implicit) {
308
- return Tag.getTagVRFromDictionary(groupInt, elementInt) || "AA";
309
- }
310
- var vr = Value.getString(new Uint8Array(this.arrayBuffer, this.offset, 2));
311
- this.offset += 2;
312
- return vr;
313
- }
314
- });
315
- return Parser;
316
- }());
317
- export default Parser;
package/Tag.d.ts DELETED
@@ -1,17 +0,0 @@
1
- declare class Tag {
2
- name: string;
3
- vr: string;
4
- group: number;
5
- element: number;
6
- value: unknown;
7
- valueLength: number;
8
- offset: number;
9
- constructor(group: number, element: number, vr: string, valueLength: number, offset: number, value?: ArrayBuffer, name?: string | null);
10
- generateKey(): string;
11
- static getTagNameFromDictionary(groupInt: number, elementInt: number): string;
12
- static getTagVRFromDictionary(group: number | string, element: number | string): string;
13
- static intTo4digitString(int: number): string;
14
- static int8digitString(int: number): string;
15
- getValue(): void;
16
- }
17
- export default Tag;
package/Tag.js DELETED
@@ -1,128 +0,0 @@
1
- import TagsDictionaryEnums from "./enums/TagsDictionary";
2
- var Tag = /** @class */ (function () {
3
- function Tag(group, element, vr, valueLength, offset, value, name) {
4
- Object.defineProperty(this, "name", {
5
- enumerable: true,
6
- configurable: true,
7
- writable: true,
8
- value: void 0
9
- });
10
- Object.defineProperty(this, "vr", {
11
- enumerable: true,
12
- configurable: true,
13
- writable: true,
14
- value: void 0
15
- });
16
- Object.defineProperty(this, "group", {
17
- enumerable: true,
18
- configurable: true,
19
- writable: true,
20
- value: void 0
21
- });
22
- Object.defineProperty(this, "element", {
23
- enumerable: true,
24
- configurable: true,
25
- writable: true,
26
- value: void 0
27
- });
28
- Object.defineProperty(this, "value", {
29
- enumerable: true,
30
- configurable: true,
31
- writable: true,
32
- value: void 0
33
- });
34
- Object.defineProperty(this, "valueLength", {
35
- enumerable: true,
36
- configurable: true,
37
- writable: true,
38
- value: void 0
39
- });
40
- Object.defineProperty(this, "offset", {
41
- enumerable: true,
42
- configurable: true,
43
- writable: true,
44
- value: void 0
45
- });
46
- this.group = group;
47
- this.element = element;
48
- this.vr = vr;
49
- this.name = name || Tag.getTagNameFromDictionary(this.group, this.element) || '';
50
- this.value = value || undefined;
51
- this.valueLength = valueLength;
52
- this.offset = offset;
53
- if (this.name === '') {
54
- }
55
- }
56
- Object.defineProperty(Tag.prototype, "generateKey", {
57
- enumerable: false,
58
- configurable: true,
59
- writable: true,
60
- value: function () {
61
- var group = Tag.intTo4digitString(this.group);
62
- var element = Tag.intTo4digitString(this.element);
63
- return "0x".concat(group).concat(element);
64
- }
65
- });
66
- Object.defineProperty(Tag, "getTagNameFromDictionary", {
67
- enumerable: false,
68
- configurable: true,
69
- writable: true,
70
- value: function (groupInt, elementInt) {
71
- var group = Tag.intTo4digitString(groupInt);
72
- var element = Tag.intTo4digitString(elementInt);
73
- var groupItems = TagsDictionaryEnums[group];
74
- if (!groupItems)
75
- return "";
76
- var elementItem = groupItems[element];
77
- if (!elementItem)
78
- return "";
79
- return elementItem[1];
80
- }
81
- });
82
- Object.defineProperty(Tag, "getTagVRFromDictionary", {
83
- enumerable: false,
84
- configurable: true,
85
- writable: true,
86
- value: function (group, element) {
87
- var _group, _element;
88
- if (typeof group === "number") {
89
- _group = Tag.intTo4digitString(group);
90
- }
91
- if (typeof element === "number") {
92
- _element = Tag.intTo4digitString(element);
93
- }
94
- var groupItems = TagsDictionaryEnums[_group || group];
95
- if (!groupItems)
96
- return "";
97
- var elementItem = groupItems[_element || element];
98
- if (!elementItem)
99
- return "";
100
- return elementItem[0];
101
- }
102
- });
103
- Object.defineProperty(Tag, "intTo4digitString", {
104
- enumerable: false,
105
- configurable: true,
106
- writable: true,
107
- value: function (int) {
108
- return ('0000' + int.toString(16).toUpperCase()).slice(-4);
109
- }
110
- });
111
- Object.defineProperty(Tag, "int8digitString", {
112
- enumerable: false,
113
- configurable: true,
114
- writable: true,
115
- value: function (int) {
116
- return ('00000000' + int.toString(16).toUpperCase()).slice(-8);
117
- }
118
- });
119
- Object.defineProperty(Tag.prototype, "getValue", {
120
- enumerable: false,
121
- configurable: true,
122
- writable: true,
123
- value: function () {
124
- }
125
- });
126
- return Tag;
127
- }());
128
- export default Tag;
package/Value.d.ts DELETED
@@ -1,15 +0,0 @@
1
- declare class Value {
2
- static byVr(dataView: DataView, offset: number, len: number, vr: string, littleEndian: boolean): string | number | DataView | (string | number)[] | undefined;
3
- static CS(dataView: DataView, offset: number, len: number): string | string[];
4
- static IS(dataView: DataView, offset: number, len: number): string | number;
5
- static DA(dataView: DataView, offset: number, len: number): string;
6
- static DS(dataView: DataView, offset: number, len: number): string | number | (string | number)[];
7
- static TM(dataView: DataView, offset: number, len: number): string;
8
- static US(dataView: DataView, offset: number, len: number, littleEndian?: boolean): number | number[] | undefined;
9
- static SS(dataView: DataView, offset: number, len: number, littleEndian?: boolean): number | number[] | undefined;
10
- static SL(dataView: DataView, offset: number, len: number, littleEndian?: boolean): number | number[] | undefined;
11
- static UL(dataView: DataView, offset: number, len: number, littleEndian?: boolean): number | number[] | undefined;
12
- static OW(dataView: DataView, offset: number, len: number): DataView;
13
- static getString(bytes: Uint8Array | Int8Array | ArrayBuffer): string;
14
- }
15
- export default Value;