@ubercode/dcmtk 1.0.0-rc.1 → 1.0.0-rc.2
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/{DicomInstance-DGWB2mfD.d.ts → DicomInstance-BFFzieOp.d.ts} +8 -2
- package/dist/{DicomInstance-BGXtON9T.d.cts → DicomInstance-C0ntZyxC.d.cts} +8 -2
- package/dist/dicom.cjs +556 -21
- package/dist/dicom.cjs.map +1 -1
- package/dist/dicom.d.cts +2 -2
- package/dist/dicom.d.ts +2 -2
- package/dist/dicom.js +556 -22
- package/dist/dicom.js.map +1 -1
- package/dist/{index-D1msvaAt.d.cts → index-CCHr7MUH.d.cts} +1 -1
- package/dist/{index-C6dWOhHS.d.ts → index-DxjEslJ4.d.ts} +1 -1
- package/dist/index.cjs +574 -26
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +573 -28
- package/dist/index.js.map +1 -1
- package/dist/servers.cjs +29979 -21
- package/dist/servers.cjs.map +1 -1
- package/dist/servers.d.cts +2 -2
- package/dist/servers.d.ts +2 -2
- package/dist/servers.js +29979 -22
- package/dist/servers.js.map +1 -1
- package/dist/tools.cjs +29979 -14
- package/dist/tools.cjs.map +1 -1
- package/dist/tools.d.cts +79 -2
- package/dist/tools.d.ts +79 -2
- package/dist/tools.js +29978 -16
- package/dist/tools.js.map +1 -1
- package/package.json +3 -1
package/dist/index.js
CHANGED
|
@@ -6,10 +6,12 @@ import { spawn, execSync } from 'child_process';
|
|
|
6
6
|
import kill from 'tree-kill';
|
|
7
7
|
import { EventEmitter } from 'events';
|
|
8
8
|
import { stderr, tryCatch } from 'stderr-lib';
|
|
9
|
-
import { mkdir, stat, rm, copyFile, unlink, rename, mkdtemp, readdir } from 'fs/promises';
|
|
9
|
+
import { mkdir, stat, rm, readFile, copyFile, unlink, rename, mkdtemp, readdir } from 'fs/promises';
|
|
10
10
|
import * as os from 'os';
|
|
11
11
|
import { tmpdir } from 'os';
|
|
12
12
|
import { XMLParser } from 'fast-xml-parser';
|
|
13
|
+
import { inflateRawSync } from 'zlib';
|
|
14
|
+
import dicomParser from 'dicom-parser';
|
|
13
15
|
import * as net from 'net';
|
|
14
16
|
import { setTimeout as setTimeout$1 } from 'timers/promises';
|
|
15
17
|
import { randomUUID } from 'crypto';
|
|
@@ -298,7 +300,7 @@ async function execCommand(binary, args, options) {
|
|
|
298
300
|
}
|
|
299
301
|
function wireSpawnListeners(binary, child, timeoutMs, resolve) {
|
|
300
302
|
let stdout = "";
|
|
301
|
-
let
|
|
303
|
+
let stderr9 = "";
|
|
302
304
|
let settled = false;
|
|
303
305
|
const name = binary.split("/").pop() ?? binary;
|
|
304
306
|
const settle = (result) => {
|
|
@@ -313,14 +315,14 @@ function wireSpawnListeners(binary, child, timeoutMs, resolve) {
|
|
|
313
315
|
}, timeoutMs);
|
|
314
316
|
child.stdout?.on("data", (chunk) => {
|
|
315
317
|
stdout += String(chunk);
|
|
316
|
-
if (stdout.length +
|
|
318
|
+
if (stdout.length + stderr9.length > MAX_OUTPUT_BYTES) {
|
|
317
319
|
if (child.pid !== void 0 && child.pid !== null) killTree(child.pid);
|
|
318
320
|
settle(err(new Error(`${name} output exceeded ${MAX_OUTPUT_BYTES} bytes`)));
|
|
319
321
|
}
|
|
320
322
|
});
|
|
321
323
|
child.stderr?.on("data", (chunk) => {
|
|
322
|
-
|
|
323
|
-
if (stdout.length +
|
|
324
|
+
stderr9 += String(chunk);
|
|
325
|
+
if (stdout.length + stderr9.length > MAX_OUTPUT_BYTES) {
|
|
324
326
|
if (child.pid !== void 0 && child.pid !== null) killTree(child.pid);
|
|
325
327
|
settle(err(new Error(`${name} output exceeded ${MAX_OUTPUT_BYTES} bytes`)));
|
|
326
328
|
}
|
|
@@ -330,7 +332,7 @@ function wireSpawnListeners(binary, child, timeoutMs, resolve) {
|
|
|
330
332
|
settle(err(new Error(`${name} error: ${error.message}`)));
|
|
331
333
|
});
|
|
332
334
|
child.on("close", (code) => {
|
|
333
|
-
settle(ok({ stdout, stderr:
|
|
335
|
+
settle(ok({ stdout, stderr: stderr9, exitCode: code ?? 1 }));
|
|
334
336
|
});
|
|
335
337
|
}
|
|
336
338
|
async function spawnCommand(binary, args, options) {
|
|
@@ -709,9 +711,9 @@ var ToolExecutionError = class extends Error {
|
|
|
709
711
|
this.exitCode = details.exitCode;
|
|
710
712
|
}
|
|
711
713
|
};
|
|
712
|
-
function createToolError(toolName, args, exitCode,
|
|
714
|
+
function createToolError(toolName, args, exitCode, stderr9, stdout = "") {
|
|
713
715
|
const argsStr = truncate(args.join(" "), MAX_ARGS_LENGTH);
|
|
714
|
-
const stderrStr = truncate(
|
|
716
|
+
const stderrStr = truncate(stderr9.trim(), MAX_STDERR_LENGTH);
|
|
715
717
|
const parts = [`${toolName} failed (exit code ${String(exitCode)})`];
|
|
716
718
|
if (argsStr.length > 0) {
|
|
717
719
|
parts.push(`args: ${argsStr}`);
|
|
@@ -719,7 +721,7 @@ function createToolError(toolName, args, exitCode, stderr8, stdout = "") {
|
|
|
719
721
|
if (stderrStr.length > 0) {
|
|
720
722
|
parts.push(`stderr: ${stderrStr}`);
|
|
721
723
|
}
|
|
722
|
-
return new ToolExecutionError(parts.join(" | "), { stdout, stderr:
|
|
724
|
+
return new ToolExecutionError(parts.join(" | "), { stdout, stderr: stderr9, exitCode });
|
|
723
725
|
}
|
|
724
726
|
function createValidationError(toolName, zodError) {
|
|
725
727
|
const parts = [];
|
|
@@ -31339,8 +31341,8 @@ function unwrapValue(v) {
|
|
|
31339
31341
|
const obj = v;
|
|
31340
31342
|
if ("#text" in obj) return obj["#text"];
|
|
31341
31343
|
const keys = Object.keys(obj);
|
|
31342
|
-
if (keys.
|
|
31343
|
-
return
|
|
31344
|
+
if (keys.every((k) => k.startsWith("@_"))) {
|
|
31345
|
+
return "";
|
|
31344
31346
|
}
|
|
31345
31347
|
return v;
|
|
31346
31348
|
}
|
|
@@ -31546,16 +31548,553 @@ async function dcm2json(inputPath, options) {
|
|
|
31546
31548
|
const timeoutMs = options?.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
31547
31549
|
const signal = options?.signal;
|
|
31548
31550
|
const startTime = Date.now();
|
|
31549
|
-
const remaining = () => Math.max(
|
|
31551
|
+
const remaining = () => Math.max(0, timeoutMs - (Date.now() - startTime));
|
|
31550
31552
|
const verbosity = options?.verbosity;
|
|
31551
31553
|
if (options?.directOnly === true) {
|
|
31552
|
-
return tryDirectPath(inputPath,
|
|
31554
|
+
return tryDirectPath(inputPath, timeoutMs, signal, verbosity);
|
|
31553
31555
|
}
|
|
31554
|
-
const xmlResult = await tryXmlPath(inputPath,
|
|
31556
|
+
const xmlResult = await tryXmlPath(inputPath, timeoutMs, signal, buildXmlOpts(options));
|
|
31555
31557
|
if (xmlResult.ok) {
|
|
31556
31558
|
return xmlResult;
|
|
31557
31559
|
}
|
|
31558
|
-
return
|
|
31560
|
+
return fallbackToDirect(inputPath, xmlResult.error, { budget: remaining(), timeoutMs, signal, verbosity });
|
|
31561
|
+
}
|
|
31562
|
+
async function fallbackToDirect(inputPath, xmlError, context) {
|
|
31563
|
+
if (context.budget === 0) {
|
|
31564
|
+
return err(
|
|
31565
|
+
new Error(
|
|
31566
|
+
`dcm2json: XML path failed and timeout budget (${String(context.timeoutMs)}ms) is exhausted (skipping direct fallback) | xml: ${xmlError.message}`
|
|
31567
|
+
)
|
|
31568
|
+
);
|
|
31569
|
+
}
|
|
31570
|
+
const directResult = await tryDirectPath(inputPath, context.budget, context.signal, context.verbosity);
|
|
31571
|
+
if (directResult.ok) {
|
|
31572
|
+
return directResult;
|
|
31573
|
+
}
|
|
31574
|
+
return err(new Error(`dcm2json: both paths failed | xml: ${xmlError.message} | direct: ${directResult.error.message}`));
|
|
31575
|
+
}
|
|
31576
|
+
|
|
31577
|
+
// src/tools/_charset.ts
|
|
31578
|
+
var LATIN1 = { kind: "latin1" };
|
|
31579
|
+
function label(name) {
|
|
31580
|
+
return { kind: "label", label: name };
|
|
31581
|
+
}
|
|
31582
|
+
var CHARSET_DECODERS = {
|
|
31583
|
+
"ISO_IR 6": LATIN1,
|
|
31584
|
+
"ISO_IR 100": LATIN1,
|
|
31585
|
+
"ISO_IR 101": label("iso-8859-2"),
|
|
31586
|
+
"ISO_IR 109": label("iso-8859-3"),
|
|
31587
|
+
"ISO_IR 110": label("iso-8859-4"),
|
|
31588
|
+
"ISO_IR 144": label("iso-8859-5"),
|
|
31589
|
+
"ISO_IR 127": label("iso-8859-6"),
|
|
31590
|
+
"ISO_IR 126": label("iso-8859-7"),
|
|
31591
|
+
"ISO_IR 138": label("iso-8859-8"),
|
|
31592
|
+
"ISO_IR 148": label("iso-8859-9"),
|
|
31593
|
+
"ISO_IR 203": label("iso-8859-15"),
|
|
31594
|
+
"ISO_IR 13": label("shift_jis"),
|
|
31595
|
+
"ISO_IR 166": label("windows-874"),
|
|
31596
|
+
"ISO_IR 192": label("utf-8"),
|
|
31597
|
+
GB18030: label("gb18030"),
|
|
31598
|
+
GBK: label("gbk")
|
|
31599
|
+
};
|
|
31600
|
+
var ISO2022_INITIAL = {
|
|
31601
|
+
"ISO 2022 IR 6": LATIN1,
|
|
31602
|
+
"ISO 2022 IR 13": label("shift_jis"),
|
|
31603
|
+
"ISO 2022 IR 87": LATIN1,
|
|
31604
|
+
"ISO 2022 IR 159": LATIN1,
|
|
31605
|
+
"ISO 2022 IR 149": label("euc-kr"),
|
|
31606
|
+
"ISO 2022 IR 58": label("gbk"),
|
|
31607
|
+
"ISO 2022 IR 100": LATIN1,
|
|
31608
|
+
"ISO 2022 IR 101": label("iso-8859-2"),
|
|
31609
|
+
"ISO 2022 IR 109": label("iso-8859-3"),
|
|
31610
|
+
"ISO 2022 IR 110": label("iso-8859-4"),
|
|
31611
|
+
"ISO 2022 IR 144": label("iso-8859-5"),
|
|
31612
|
+
"ISO 2022 IR 127": label("iso-8859-6"),
|
|
31613
|
+
"ISO 2022 IR 126": label("iso-8859-7"),
|
|
31614
|
+
"ISO 2022 IR 138": label("iso-8859-8"),
|
|
31615
|
+
"ISO 2022 IR 148": label("iso-8859-9"),
|
|
31616
|
+
"ISO 2022 IR 166": label("windows-874"),
|
|
31617
|
+
"ISO 2022 IR 203": label("iso-8859-15")
|
|
31618
|
+
};
|
|
31619
|
+
var ESCAPE_DECODERS = {
|
|
31620
|
+
"(B": LATIN1,
|
|
31621
|
+
// G0 = ASCII
|
|
31622
|
+
"(J": LATIN1,
|
|
31623
|
+
// G0 = JIS X 0201 romaji
|
|
31624
|
+
")I": { kind: "katakana" },
|
|
31625
|
+
// G1 = JIS X 0201 katakana
|
|
31626
|
+
"$@": { kind: "iso2022jp", escape: [27, 36, 64] },
|
|
31627
|
+
// G0 = JIS X 0208-1978
|
|
31628
|
+
$B: { kind: "iso2022jp", escape: [27, 36, 66] },
|
|
31629
|
+
// G0 = JIS X 0208
|
|
31630
|
+
"$(D": { kind: "iso2022jp", escape: [27, 36, 40, 68] },
|
|
31631
|
+
// G0 = JIS X 0212
|
|
31632
|
+
"$)C": label("euc-kr"),
|
|
31633
|
+
// G1 = KS X 1001
|
|
31634
|
+
"$)A": label("gbk"),
|
|
31635
|
+
// G1 = GB 2312
|
|
31636
|
+
"-A": LATIN1,
|
|
31637
|
+
// G1 = ISO-8859-1
|
|
31638
|
+
"-B": label("iso-8859-2"),
|
|
31639
|
+
"-C": label("iso-8859-3"),
|
|
31640
|
+
"-D": label("iso-8859-4"),
|
|
31641
|
+
"-F": label("iso-8859-7"),
|
|
31642
|
+
"-G": label("iso-8859-6"),
|
|
31643
|
+
"-H": label("iso-8859-8"),
|
|
31644
|
+
"-L": label("iso-8859-5"),
|
|
31645
|
+
"-M": label("iso-8859-9"),
|
|
31646
|
+
"-T": label("windows-874"),
|
|
31647
|
+
"-b": label("iso-8859-15")
|
|
31648
|
+
};
|
|
31649
|
+
var CHARSET_ALIASES = {
|
|
31650
|
+
ascii: "ISO_IR 6",
|
|
31651
|
+
"latin-1": "ISO_IR 100",
|
|
31652
|
+
latin1: "ISO_IR 100",
|
|
31653
|
+
"iso-8859-1": "ISO_IR 100",
|
|
31654
|
+
"latin-2": "ISO_IR 101",
|
|
31655
|
+
"latin-3": "ISO_IR 109",
|
|
31656
|
+
"latin-4": "ISO_IR 110",
|
|
31657
|
+
"latin-5": "ISO_IR 148",
|
|
31658
|
+
"latin-9": "ISO_IR 203",
|
|
31659
|
+
cyrillic: "ISO_IR 144",
|
|
31660
|
+
arabic: "ISO_IR 127",
|
|
31661
|
+
greek: "ISO_IR 126",
|
|
31662
|
+
hebrew: "ISO_IR 138",
|
|
31663
|
+
thai: "ISO_IR 166",
|
|
31664
|
+
"shift-jis": "ISO_IR 13",
|
|
31665
|
+
shift_jis: "ISO_IR 13",
|
|
31666
|
+
"utf-8": "ISO_IR 192",
|
|
31667
|
+
utf8: "ISO_IR 192",
|
|
31668
|
+
gb18030: "GB18030",
|
|
31669
|
+
gbk: "GBK"
|
|
31670
|
+
};
|
|
31671
|
+
var decoderCache = /* @__PURE__ */ new Map();
|
|
31672
|
+
function getTextDecoder(labelName) {
|
|
31673
|
+
if (decoderCache.has(labelName)) {
|
|
31674
|
+
return decoderCache.get(labelName);
|
|
31675
|
+
}
|
|
31676
|
+
let decoder;
|
|
31677
|
+
try {
|
|
31678
|
+
decoder = new TextDecoder(labelName);
|
|
31679
|
+
} catch {
|
|
31680
|
+
decoder = void 0;
|
|
31681
|
+
}
|
|
31682
|
+
decoderCache.set(labelName, decoder);
|
|
31683
|
+
return decoder;
|
|
31684
|
+
}
|
|
31685
|
+
function decodeLatin1(bytes) {
|
|
31686
|
+
return Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength).toString("latin1");
|
|
31687
|
+
}
|
|
31688
|
+
function decodeSegment(bytes, decoder) {
|
|
31689
|
+
if (bytes.length === 0) return "";
|
|
31690
|
+
switch (decoder.kind) {
|
|
31691
|
+
case "latin1":
|
|
31692
|
+
return decodeLatin1(bytes);
|
|
31693
|
+
case "label": {
|
|
31694
|
+
const td = getTextDecoder(decoder.label);
|
|
31695
|
+
if (td === void 0) return decodeLatin1(bytes);
|
|
31696
|
+
return td.decode(bytes);
|
|
31697
|
+
}
|
|
31698
|
+
case "iso2022jp": {
|
|
31699
|
+
const td = getTextDecoder("iso-2022-jp");
|
|
31700
|
+
if (td === void 0) return decodeLatin1(bytes);
|
|
31701
|
+
const wrapped = new Uint8Array(decoder.escape.length + bytes.length);
|
|
31702
|
+
wrapped.set(decoder.escape, 0);
|
|
31703
|
+
wrapped.set(bytes, decoder.escape.length);
|
|
31704
|
+
return td.decode(wrapped);
|
|
31705
|
+
}
|
|
31706
|
+
case "katakana": {
|
|
31707
|
+
const td = getTextDecoder("shift_jis");
|
|
31708
|
+
if (td === void 0) return decodeLatin1(bytes);
|
|
31709
|
+
return td.decode(bytes);
|
|
31710
|
+
}
|
|
31711
|
+
}
|
|
31712
|
+
}
|
|
31713
|
+
function readEscape(bytes, start) {
|
|
31714
|
+
let i = start + 1;
|
|
31715
|
+
while (i < bytes.length && bytes[i] >= 32 && bytes[i] <= 47) {
|
|
31716
|
+
i++;
|
|
31717
|
+
}
|
|
31718
|
+
if (i < bytes.length && bytes[i] >= 48 && bytes[i] <= 126) {
|
|
31719
|
+
i++;
|
|
31720
|
+
}
|
|
31721
|
+
const seq = bytes.subarray(start + 1, i);
|
|
31722
|
+
return { key: decodeLatin1(seq), length: i - start };
|
|
31723
|
+
}
|
|
31724
|
+
function decodeIso2022(bytes, initial) {
|
|
31725
|
+
let out = "";
|
|
31726
|
+
let current = initial;
|
|
31727
|
+
let segStart = 0;
|
|
31728
|
+
let i = 0;
|
|
31729
|
+
while (i < bytes.length) {
|
|
31730
|
+
if (bytes[i] !== 27) {
|
|
31731
|
+
i++;
|
|
31732
|
+
continue;
|
|
31733
|
+
}
|
|
31734
|
+
out += decodeSegment(bytes.subarray(segStart, i), current);
|
|
31735
|
+
const esc = readEscape(bytes, i);
|
|
31736
|
+
current = ESCAPE_DECODERS[esc.key] ?? current;
|
|
31737
|
+
i += esc.length;
|
|
31738
|
+
segStart = i;
|
|
31739
|
+
}
|
|
31740
|
+
out += decodeSegment(bytes.subarray(segStart), current);
|
|
31741
|
+
return out;
|
|
31742
|
+
}
|
|
31743
|
+
var DEFAULT_CONTEXT = { terms: ["ISO_IR 6"], iso2022: false, initial: LATIN1 };
|
|
31744
|
+
function normalizeCharsetName(input) {
|
|
31745
|
+
const trimmed = input.trim();
|
|
31746
|
+
if (CHARSET_DECODERS[trimmed] !== void 0 || ISO2022_INITIAL[trimmed] !== void 0) {
|
|
31747
|
+
return trimmed;
|
|
31748
|
+
}
|
|
31749
|
+
return CHARSET_ALIASES[trimmed.toLowerCase()];
|
|
31750
|
+
}
|
|
31751
|
+
function buildContext(terms) {
|
|
31752
|
+
const iso2022 = terms.length > 1 || terms.some((t) => t.startsWith("ISO 2022"));
|
|
31753
|
+
const first = terms[0] ?? "ISO_IR 6";
|
|
31754
|
+
const initial = iso2022 ? ISO2022_INITIAL[first] : CHARSET_DECODERS[first];
|
|
31755
|
+
if (initial === void 0) return void 0;
|
|
31756
|
+
return { terms, iso2022, initial };
|
|
31757
|
+
}
|
|
31758
|
+
function parseSpecificCharacterSet(raw) {
|
|
31759
|
+
const values = raw.split("\\").map((v) => v.trim());
|
|
31760
|
+
return values.map((v, idx) => v === "" && idx === 0 ? "ISO 2022 IR 6" : v).filter((v) => v !== "");
|
|
31761
|
+
}
|
|
31762
|
+
function contextFromTerms(terms, fallback, source) {
|
|
31763
|
+
const context = buildContext(terms);
|
|
31764
|
+
if (context !== void 0) {
|
|
31765
|
+
return ok(context);
|
|
31766
|
+
}
|
|
31767
|
+
if (fallback !== void 0) {
|
|
31768
|
+
const fallbackTerm = normalizeCharsetName(fallback);
|
|
31769
|
+
const fallbackContext = fallbackTerm !== void 0 ? buildContext([fallbackTerm]) : void 0;
|
|
31770
|
+
if (fallbackContext !== void 0) {
|
|
31771
|
+
return ok(fallbackContext);
|
|
31772
|
+
}
|
|
31773
|
+
return err(new Error(`Unsupported charset fallback '${fallback}' (while handling unsupported ${source})`));
|
|
31774
|
+
}
|
|
31775
|
+
return err(new Error(`Unsupported character set: ${source} \u2014 provide charsetFallback (e.g. 'latin-1') to decode best-effort`));
|
|
31776
|
+
}
|
|
31777
|
+
function resolveCharsetContext(specificCharacterSet, charsetAssume, charsetFallback) {
|
|
31778
|
+
if (specificCharacterSet === void 0 || specificCharacterSet.trim() === "") {
|
|
31779
|
+
if (charsetAssume === void 0) {
|
|
31780
|
+
return ok(DEFAULT_CONTEXT);
|
|
31781
|
+
}
|
|
31782
|
+
const term = normalizeCharsetName(charsetAssume);
|
|
31783
|
+
if (term === void 0) {
|
|
31784
|
+
return contextFromTerms([charsetAssume], charsetFallback, `charsetAssume '${charsetAssume}'`);
|
|
31785
|
+
}
|
|
31786
|
+
return contextFromTerms([term], charsetFallback, `charsetAssume '${charsetAssume}'`);
|
|
31787
|
+
}
|
|
31788
|
+
const terms = parseSpecificCharacterSet(specificCharacterSet);
|
|
31789
|
+
return contextFromTerms(terms, charsetFallback, `'${specificCharacterSet}' (0008,0005)`);
|
|
31790
|
+
}
|
|
31791
|
+
function decodeDicomText(bytes, context) {
|
|
31792
|
+
if (context.iso2022) {
|
|
31793
|
+
return decodeIso2022(bytes, context.initial);
|
|
31794
|
+
}
|
|
31795
|
+
return decodeSegment(bytes, context.initial);
|
|
31796
|
+
}
|
|
31797
|
+
|
|
31798
|
+
// src/tools/_p10ToJson.ts
|
|
31799
|
+
var BINARY_VRS = /* @__PURE__ */ new Set(["OB", "OW", "OD", "OF", "OL", "OV", "UN"]);
|
|
31800
|
+
var CHARSET_VRS = /* @__PURE__ */ new Set(["SH", "LO", "ST", "LT", "UC", "UT", "PN"]);
|
|
31801
|
+
var NO_SPLIT_VRS = /* @__PURE__ */ new Set(["ST", "LT", "UT", "UR"]);
|
|
31802
|
+
var NUMERIC_VR_SIZE = { US: 2, SS: 2, UL: 4, SL: 4, FL: 4, FD: 8, SV: 8, UV: 8 };
|
|
31803
|
+
var MAX_DATASETS = 1e5;
|
|
31804
|
+
function toJsonTag(tag2) {
|
|
31805
|
+
return tag2.slice(1).toUpperCase();
|
|
31806
|
+
}
|
|
31807
|
+
function isEncodingArtifact(tag2) {
|
|
31808
|
+
return tag2.endsWith("0000") && tag2.length === 9 || tag2.startsWith("xfffe");
|
|
31809
|
+
}
|
|
31810
|
+
function resolveVr(element) {
|
|
31811
|
+
const vr = element.vr;
|
|
31812
|
+
if (vr !== void 0 && KNOWN_VR_CODES.has(vr)) {
|
|
31813
|
+
return vr;
|
|
31814
|
+
}
|
|
31815
|
+
return "UN";
|
|
31816
|
+
}
|
|
31817
|
+
function valueBytes(element, byteArray) {
|
|
31818
|
+
return byteArray.subarray(element.dataOffset, element.dataOffset + element.length);
|
|
31819
|
+
}
|
|
31820
|
+
function trimPadding(value) {
|
|
31821
|
+
let end = value.length;
|
|
31822
|
+
while (end > 0) {
|
|
31823
|
+
const ch = value.charCodeAt(end - 1);
|
|
31824
|
+
if (ch !== 32 && ch !== 0) break;
|
|
31825
|
+
end--;
|
|
31826
|
+
}
|
|
31827
|
+
return value.slice(0, end);
|
|
31828
|
+
}
|
|
31829
|
+
function readNumericAt(view, offset, vr, littleEndian) {
|
|
31830
|
+
switch (vr) {
|
|
31831
|
+
case "US":
|
|
31832
|
+
return view.getUint16(offset, littleEndian);
|
|
31833
|
+
case "SS":
|
|
31834
|
+
return view.getInt16(offset, littleEndian);
|
|
31835
|
+
case "UL":
|
|
31836
|
+
return view.getUint32(offset, littleEndian);
|
|
31837
|
+
case "SL":
|
|
31838
|
+
return view.getInt32(offset, littleEndian);
|
|
31839
|
+
case "FL":
|
|
31840
|
+
return view.getFloat32(offset, littleEndian);
|
|
31841
|
+
case "FD":
|
|
31842
|
+
return view.getFloat64(offset, littleEndian);
|
|
31843
|
+
case "SV":
|
|
31844
|
+
return Number(view.getBigInt64(offset, littleEndian));
|
|
31845
|
+
/* v8 ignore next 2 -- 'UV' is the only remaining caller-provided VR */
|
|
31846
|
+
default:
|
|
31847
|
+
return Number(view.getBigUint64(offset, littleEndian));
|
|
31848
|
+
}
|
|
31849
|
+
}
|
|
31850
|
+
function convertNumeric(element, byteArray, vr, littleEndian) {
|
|
31851
|
+
const size = NUMERIC_VR_SIZE[vr];
|
|
31852
|
+
const count = Math.floor(element.length / size);
|
|
31853
|
+
if (count === 0) {
|
|
31854
|
+
return { vr };
|
|
31855
|
+
}
|
|
31856
|
+
const view = new DataView(byteArray.buffer, byteArray.byteOffset + element.dataOffset, element.length);
|
|
31857
|
+
const values = [];
|
|
31858
|
+
for (let i = 0; i < count; i++) {
|
|
31859
|
+
values.push(readNumericAt(view, i * size, vr, littleEndian));
|
|
31860
|
+
}
|
|
31861
|
+
return { vr, Value: values };
|
|
31862
|
+
}
|
|
31863
|
+
function convertAttributeTag(element, byteArray, littleEndian) {
|
|
31864
|
+
const count = Math.floor(element.length / 4);
|
|
31865
|
+
if (count === 0) {
|
|
31866
|
+
return { vr: "AT" };
|
|
31867
|
+
}
|
|
31868
|
+
const view = new DataView(byteArray.buffer, byteArray.byteOffset + element.dataOffset, element.length);
|
|
31869
|
+
const values = [];
|
|
31870
|
+
for (let i = 0; i < count; i++) {
|
|
31871
|
+
const group = view.getUint16(i * 4, littleEndian);
|
|
31872
|
+
const elem = view.getUint16(i * 4 + 2, littleEndian);
|
|
31873
|
+
values.push(group.toString(16).padStart(4, "0").toUpperCase() + elem.toString(16).padStart(4, "0").toUpperCase());
|
|
31874
|
+
}
|
|
31875
|
+
return { vr: "AT", Value: values };
|
|
31876
|
+
}
|
|
31877
|
+
function personNameToJson(value) {
|
|
31878
|
+
const groups = trimPadding(value).split("=");
|
|
31879
|
+
const result = {};
|
|
31880
|
+
const names = ["Alphabetic", "Ideographic", "Phonetic"];
|
|
31881
|
+
for (let i = 0; i < names.length; i++) {
|
|
31882
|
+
const group = (groups[i] ?? "").replace(/\^+$/u, "");
|
|
31883
|
+
const name = names[i];
|
|
31884
|
+
if (group !== "" && name !== void 0) {
|
|
31885
|
+
result[name] = group;
|
|
31886
|
+
}
|
|
31887
|
+
}
|
|
31888
|
+
return result;
|
|
31889
|
+
}
|
|
31890
|
+
function convertPersonName2(element, byteArray, charset) {
|
|
31891
|
+
const decoded = decodeDicomText(valueBytes(element, byteArray), charset);
|
|
31892
|
+
const values = decoded.split("\\").map(personNameToJson);
|
|
31893
|
+
return { vr: "PN", Value: values };
|
|
31894
|
+
}
|
|
31895
|
+
function convertString(element, byteArray, vr, charset) {
|
|
31896
|
+
const bytes = valueBytes(element, byteArray);
|
|
31897
|
+
const decoded = CHARSET_VRS.has(vr) ? decodeDicomText(bytes, charset) : Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength).toString("latin1");
|
|
31898
|
+
const rawValues = NO_SPLIT_VRS.has(vr) ? [decoded] : decoded.split("\\");
|
|
31899
|
+
const values = rawValues.map((v) => {
|
|
31900
|
+
const trimmed = trimPadding(v);
|
|
31901
|
+
return vr === "DS" || vr === "IS" ? coerceNumeric(trimmed.trim()) : trimmed;
|
|
31902
|
+
});
|
|
31903
|
+
if (values.length === 1 && values[0] === "") {
|
|
31904
|
+
return { vr };
|
|
31905
|
+
}
|
|
31906
|
+
return { vr, Value: values };
|
|
31907
|
+
}
|
|
31908
|
+
function convertLeaf(element, byteArray, vr, settings) {
|
|
31909
|
+
if (element.fragments !== void 0) {
|
|
31910
|
+
return { vr: "OB" };
|
|
31911
|
+
}
|
|
31912
|
+
if (BINARY_VRS.has(vr)) {
|
|
31913
|
+
return { vr };
|
|
31914
|
+
}
|
|
31915
|
+
if (element.length === 0) {
|
|
31916
|
+
return { vr };
|
|
31917
|
+
}
|
|
31918
|
+
if (NUMERIC_VR_SIZE[vr] !== void 0) {
|
|
31919
|
+
return convertNumeric(element, byteArray, vr, settings.littleEndian);
|
|
31920
|
+
}
|
|
31921
|
+
if (vr === "AT") {
|
|
31922
|
+
return convertAttributeTag(element, byteArray, settings.littleEndian);
|
|
31923
|
+
}
|
|
31924
|
+
if (vr === "PN") {
|
|
31925
|
+
return convertPersonName2(element, byteArray, settings.charset);
|
|
31926
|
+
}
|
|
31927
|
+
return convertString(element, byteArray, vr, settings.charset);
|
|
31928
|
+
}
|
|
31929
|
+
function datasetCharset(src, parent, options) {
|
|
31930
|
+
const raw = src.string("x00080005");
|
|
31931
|
+
if (raw === void 0) {
|
|
31932
|
+
return ok(parent);
|
|
31933
|
+
}
|
|
31934
|
+
return resolveCharsetContext(raw, void 0, options?.charsetFallback);
|
|
31935
|
+
}
|
|
31936
|
+
function convertSequence2(element, stack, charset) {
|
|
31937
|
+
const items = element.items ?? [];
|
|
31938
|
+
const values = [];
|
|
31939
|
+
for (const item of items) {
|
|
31940
|
+
const model = {};
|
|
31941
|
+
values.push(model);
|
|
31942
|
+
if (item.dataSet !== void 0) {
|
|
31943
|
+
stack.push({ src: item.dataSet, out: model, parentCharset: charset });
|
|
31944
|
+
}
|
|
31945
|
+
}
|
|
31946
|
+
if (values.length === 0) {
|
|
31947
|
+
return { vr: "SQ" };
|
|
31948
|
+
}
|
|
31949
|
+
return { vr: "SQ", Value: values };
|
|
31950
|
+
}
|
|
31951
|
+
function isSequence(element, vr) {
|
|
31952
|
+
if (element.fragments !== void 0) {
|
|
31953
|
+
return false;
|
|
31954
|
+
}
|
|
31955
|
+
return vr === "SQ" || element.vr === void 0 && element.items !== void 0;
|
|
31956
|
+
}
|
|
31957
|
+
function convertDataset(unit, stack, littleEndian, options) {
|
|
31958
|
+
const charsetResult = datasetCharset(unit.src, unit.parentCharset, options);
|
|
31959
|
+
if (!charsetResult.ok) {
|
|
31960
|
+
return err(charsetResult.error);
|
|
31961
|
+
}
|
|
31962
|
+
const charset = charsetResult.value;
|
|
31963
|
+
const keys = Object.keys(unit.src.elements).sort();
|
|
31964
|
+
for (const key of keys) {
|
|
31965
|
+
const element = unit.src.elements[key];
|
|
31966
|
+
if (element === void 0) continue;
|
|
31967
|
+
if (isEncodingArtifact(element.tag)) continue;
|
|
31968
|
+
const tag2 = toJsonTag(element.tag);
|
|
31969
|
+
const vr = resolveVr(element);
|
|
31970
|
+
if (isSequence(element, vr)) {
|
|
31971
|
+
unit.out[tag2] = convertSequence2(element, stack, charset);
|
|
31972
|
+
} else {
|
|
31973
|
+
unit.out[tag2] = convertLeaf(element, unit.src.byteArray, vr, { charset, littleEndian });
|
|
31974
|
+
}
|
|
31975
|
+
}
|
|
31976
|
+
return ok(void 0);
|
|
31977
|
+
}
|
|
31978
|
+
function inflateDeflated(byteArray, position) {
|
|
31979
|
+
const inflated = inflateRawSync(byteArray.subarray(position));
|
|
31980
|
+
const combined = new Uint8Array(position + inflated.byteLength);
|
|
31981
|
+
combined.set(byteArray.subarray(0, position), 0);
|
|
31982
|
+
combined.set(inflated, position);
|
|
31983
|
+
return combined;
|
|
31984
|
+
}
|
|
31985
|
+
function implicitVrLookup(tag2) {
|
|
31986
|
+
return lookupTag(tag2.slice(1))?.vr;
|
|
31987
|
+
}
|
|
31988
|
+
function parseDicomBuffer(buffer, options) {
|
|
31989
|
+
let dataSet;
|
|
31990
|
+
try {
|
|
31991
|
+
dataSet = dicomParser.parseDicom(buffer, { vrCallback: implicitVrLookup, inflater: inflateDeflated });
|
|
31992
|
+
} catch (error) {
|
|
31993
|
+
return err(new Error(`Failed to parse DICOM data: ${stderr(error).message}`));
|
|
31994
|
+
}
|
|
31995
|
+
const littleEndian = dataSet.string("x00020010") !== "1.2.840.10008.1.2.2";
|
|
31996
|
+
const rootCharset = resolveCharsetContext(void 0, options?.charsetAssume, options?.charsetFallback);
|
|
31997
|
+
if (!rootCharset.ok) {
|
|
31998
|
+
return err(rootCharset.error);
|
|
31999
|
+
}
|
|
32000
|
+
const data = {};
|
|
32001
|
+
const stack = [{ src: dataSet, out: data, parentCharset: rootCharset.value }];
|
|
32002
|
+
let processed = 0;
|
|
32003
|
+
while (stack.length > 0) {
|
|
32004
|
+
processed++;
|
|
32005
|
+
if (processed > MAX_DATASETS) {
|
|
32006
|
+
return err(new Error(`Failed to parse DICOM data: more than ${String(MAX_DATASETS)} nested datasets`));
|
|
32007
|
+
}
|
|
32008
|
+
const unit = stack.pop();
|
|
32009
|
+
if (unit === void 0) break;
|
|
32010
|
+
const converted = convertDataset(unit, stack, littleEndian, options);
|
|
32011
|
+
if (!converted.ok) {
|
|
32012
|
+
return err(converted.error);
|
|
32013
|
+
}
|
|
32014
|
+
}
|
|
32015
|
+
return ok({ data, warnings: dataSet.warnings });
|
|
32016
|
+
}
|
|
32017
|
+
|
|
32018
|
+
// src/tools/dicom2json.ts
|
|
32019
|
+
var Dicom2jsonOptionsSchema = z.object({
|
|
32020
|
+
timeoutMs: z.number().int().positive().optional(),
|
|
32021
|
+
signal: z.instanceof(AbortSignal).optional(),
|
|
32022
|
+
charsetAssume: z.string().min(1).optional(),
|
|
32023
|
+
charsetFallback: z.string().min(1).optional(),
|
|
32024
|
+
dcmtkFallback: z.boolean().optional()
|
|
32025
|
+
}).strict().optional();
|
|
32026
|
+
var Dicom2jsonBufferOptionsSchema = z.object({
|
|
32027
|
+
charsetAssume: z.string().min(1).optional(),
|
|
32028
|
+
charsetFallback: z.string().min(1).optional()
|
|
32029
|
+
}).strict().optional();
|
|
32030
|
+
async function readFileBounded(inputPath, timeoutMs, signal) {
|
|
32031
|
+
const timeoutSignal = AbortSignal.timeout(timeoutMs);
|
|
32032
|
+
const combined = signal !== void 0 ? AbortSignal.any([signal, timeoutSignal]) : timeoutSignal;
|
|
32033
|
+
try {
|
|
32034
|
+
return ok(await readFile(inputPath, { signal: combined }));
|
|
32035
|
+
} catch (error) {
|
|
32036
|
+
if (timeoutSignal.aborted) {
|
|
32037
|
+
return err(new Error(`dicom2json: reading '${inputPath}' timed out after ${String(timeoutMs)}ms`));
|
|
32038
|
+
}
|
|
32039
|
+
if (signal?.aborted === true) {
|
|
32040
|
+
return err(new Error(`dicom2json: aborted while reading '${inputPath}'`));
|
|
32041
|
+
}
|
|
32042
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
32043
|
+
return err(new Error(`dicom2json: failed to read '${inputPath}': ${message}`));
|
|
32044
|
+
}
|
|
32045
|
+
}
|
|
32046
|
+
async function runDcmtkFallback(inputPath, jsError, remainingMs, options) {
|
|
32047
|
+
if (remainingMs <= 0) {
|
|
32048
|
+
return err(new Error(`dicom2json: JS parse failed and timeout budget exhausted (skipping DCMTK fallback) | js: ${jsError.message}`));
|
|
32049
|
+
}
|
|
32050
|
+
const fallback = await dcm2json(inputPath, {
|
|
32051
|
+
timeoutMs: remainingMs,
|
|
32052
|
+
signal: options?.signal,
|
|
32053
|
+
charsetAssume: options?.charsetAssume,
|
|
32054
|
+
charsetFallback: options?.charsetFallback
|
|
32055
|
+
});
|
|
32056
|
+
if (!fallback.ok) {
|
|
32057
|
+
return err(new Error(`dicom2json: both engines failed | js: ${jsError.message} | dcmtk: ${fallback.error.message}`));
|
|
32058
|
+
}
|
|
32059
|
+
return ok({ data: fallback.value.data, warnings: [], source: fallback.value.source });
|
|
32060
|
+
}
|
|
32061
|
+
async function dicom2json(inputPath, options) {
|
|
32062
|
+
const validation = Dicom2jsonOptionsSchema.safeParse(options);
|
|
32063
|
+
if (!validation.success) {
|
|
32064
|
+
return err(createValidationError("dicom2json", validation.error));
|
|
32065
|
+
}
|
|
32066
|
+
const timeoutMs = options?.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
32067
|
+
const startTime = Date.now();
|
|
32068
|
+
const parsed = await parseFromFile(inputPath, timeoutMs, options);
|
|
32069
|
+
if (parsed.ok) {
|
|
32070
|
+
return parsed;
|
|
32071
|
+
}
|
|
32072
|
+
if (options?.dcmtkFallback === true) {
|
|
32073
|
+
return runDcmtkFallback(inputPath, parsed.error, timeoutMs - (Date.now() - startTime), options);
|
|
32074
|
+
}
|
|
32075
|
+
return err(parsed.error);
|
|
32076
|
+
}
|
|
32077
|
+
async function parseFromFile(inputPath, timeoutMs, options) {
|
|
32078
|
+
const fileResult = await readFileBounded(inputPath, timeoutMs, options?.signal);
|
|
32079
|
+
if (!fileResult.ok) {
|
|
32080
|
+
return err(fileResult.error);
|
|
32081
|
+
}
|
|
32082
|
+
const parsed = parseDicomBuffer(fileResult.value, { charsetAssume: options?.charsetAssume, charsetFallback: options?.charsetFallback });
|
|
32083
|
+
if (!parsed.ok) {
|
|
32084
|
+
return err(parsed.error);
|
|
32085
|
+
}
|
|
32086
|
+
return ok({ data: parsed.value.data, warnings: parsed.value.warnings, source: "js" });
|
|
32087
|
+
}
|
|
32088
|
+
function dicom2jsonFromBuffer(buffer, options) {
|
|
32089
|
+
const validation = Dicom2jsonBufferOptionsSchema.safeParse(options);
|
|
32090
|
+
if (!validation.success) {
|
|
32091
|
+
return err(createValidationError("dicom2jsonFromBuffer", validation.error));
|
|
32092
|
+
}
|
|
32093
|
+
const parsed = parseDicomBuffer(buffer, options);
|
|
32094
|
+
if (!parsed.ok) {
|
|
32095
|
+
return err(parsed.error);
|
|
32096
|
+
}
|
|
32097
|
+
return ok({ data: parsed.value.data, warnings: parsed.value.warnings, source: "js" });
|
|
31559
32098
|
}
|
|
31560
32099
|
var DcmdumpFormat = {
|
|
31561
32100
|
/** Print standard DCMTK format. */
|
|
@@ -34368,6 +34907,17 @@ async function unlinkFile(path2) {
|
|
|
34368
34907
|
}
|
|
34369
34908
|
|
|
34370
34909
|
// src/dicom/DicomInstance.ts
|
|
34910
|
+
async function readDicomJson(path2, options) {
|
|
34911
|
+
const shared = {
|
|
34912
|
+
timeoutMs: options?.timeoutMs ?? DEFAULT_TIMEOUT_MS,
|
|
34913
|
+
signal: options?.signal,
|
|
34914
|
+
charsetAssume: options?.charsetAssume,
|
|
34915
|
+
charsetFallback: options?.charsetFallback
|
|
34916
|
+
};
|
|
34917
|
+
const result = options?.engine === "dcmtk" ? await dcm2json(path2, shared) : await dicom2json(path2, { ...shared, dcmtkFallback: true });
|
|
34918
|
+
if (!result.ok) return err(result.error);
|
|
34919
|
+
return ok(result.value.data);
|
|
34920
|
+
}
|
|
34371
34921
|
var DicomInstance = class _DicomInstance {
|
|
34372
34922
|
constructor(dataset, changes, filePath, metadata) {
|
|
34373
34923
|
__publicField(this, "dicomDataset");
|
|
@@ -34392,14 +34942,9 @@ var DicomInstance = class _DicomInstance {
|
|
|
34392
34942
|
static async open(path2, options) {
|
|
34393
34943
|
const filePathResult = createDicomFilePath(path2);
|
|
34394
34944
|
if (!filePathResult.ok) return err(filePathResult.error);
|
|
34395
|
-
const jsonResult = await
|
|
34396
|
-
timeoutMs: options?.timeoutMs ?? DEFAULT_TIMEOUT_MS,
|
|
34397
|
-
signal: options?.signal,
|
|
34398
|
-
charsetAssume: options?.charsetAssume,
|
|
34399
|
-
charsetFallback: options?.charsetFallback
|
|
34400
|
-
});
|
|
34945
|
+
const jsonResult = await readDicomJson(path2, options);
|
|
34401
34946
|
if (!jsonResult.ok) return err(jsonResult.error);
|
|
34402
|
-
const datasetResult = DicomDataset.fromJson(jsonResult.value
|
|
34947
|
+
const datasetResult = DicomDataset.fromJson(jsonResult.value);
|
|
34403
34948
|
if (!datasetResult.ok) return err(datasetResult.error);
|
|
34404
34949
|
return ok(new _DicomInstance(datasetResult.value, ChangeSet.empty(), filePathResult.value, /* @__PURE__ */ new Map()));
|
|
34405
34950
|
}
|
|
@@ -37927,8 +38472,8 @@ function createStorescuExecutor(options) {
|
|
|
37927
38472
|
if (!result.ok) {
|
|
37928
38473
|
const e = result.error;
|
|
37929
38474
|
const stdout = e instanceof ToolExecutionError ? e.stdout : "";
|
|
37930
|
-
const
|
|
37931
|
-
return { stdout, stderr:
|
|
38475
|
+
const stderr9 = e instanceof ToolExecutionError ? e.stderr : "";
|
|
38476
|
+
return { stdout, stderr: stderr9, error: e };
|
|
37932
38477
|
}
|
|
37933
38478
|
return { stdout: result.value.stdout, stderr: result.value.stderr };
|
|
37934
38479
|
};
|
|
@@ -38185,8 +38730,8 @@ function createDcmsendExecutor(options) {
|
|
|
38185
38730
|
if (!result.ok) {
|
|
38186
38731
|
const e = result.error;
|
|
38187
38732
|
const stdout = e instanceof ToolExecutionError ? e.stdout : "";
|
|
38188
|
-
const
|
|
38189
|
-
return { stdout, stderr:
|
|
38733
|
+
const stderr9 = e instanceof ToolExecutionError ? e.stderr : "";
|
|
38734
|
+
return { stdout, stderr: stderr9, error: e };
|
|
38190
38735
|
}
|
|
38191
38736
|
return { stdout: result.value.stdout, stderr: result.value.stderr };
|
|
38192
38737
|
};
|
|
@@ -38526,7 +39071,7 @@ async function cleanupTempDir(directory) {
|
|
|
38526
39071
|
}
|
|
38527
39072
|
}
|
|
38528
39073
|
async function parseSingleFile(filePath, timeoutMs, signal) {
|
|
38529
|
-
const jsonResult = await
|
|
39074
|
+
const jsonResult = await dicom2json(filePath, { timeoutMs, signal, dcmtkFallback: true });
|
|
38530
39075
|
if (!jsonResult.ok) {
|
|
38531
39076
|
return err(jsonResult.error);
|
|
38532
39077
|
}
|
|
@@ -39176,6 +39721,6 @@ var DicomHammer = class _DicomHammer extends EventEmitter {
|
|
|
39176
39721
|
}
|
|
39177
39722
|
};
|
|
39178
39723
|
|
|
39179
|
-
export { AETitleSchema, AssociationTracker, ChangeSet, ColorConversion, DCMPRSCP_FATAL_EVENTS, DCMPRSCP_PATTERNS, DCMPSRCV_FATAL_EVENTS, DCMPSRCV_PATTERNS, DCMQRSCP_FATAL_EVENTS, DCMQRSCP_PATTERNS, DCMRECV_FATAL_EVENTS, DCMRECV_PATTERNS, DEFAULT_BLOCK_TIMEOUT_MS, DEFAULT_DICOM_PORT, DEFAULT_DRAIN_TIMEOUT_MS, DEFAULT_PARSE_CONCURRENCY, DEFAULT_START_TIMEOUT_MS, DEFAULT_TIMEOUT_MS, Dcm2pnmOutputFormat, Dcm2xmlCharset, DcmQRSCP, DcmdumpFormat, Dcmj2pnmOutputFormat, DcmprsCP, DcmprscpEvent, Dcmpsrcv, DcmpsrcvEvent, DcmqrscpEvent, Dcmrecv, DcmrecvEvent, DcmtkProcess, DicomDataset, DicomHammer, DicomInstance, DicomReceiver, DicomSend, DicomSender, DicomTagPathSchema, DicomTagSchema, FilenameMode, GetQueryModel, HammerPhase, Img2dcmInputFormat, JplsColorConversion, LineParser, LutType, MAX_BLOCK_LINES, MAX_CHANGESET_OPERATIONS, MAX_EVENT_PATTERNS, MAX_TRAVERSAL_DEPTH, MoveQueryModel, PDU_SIZE, PacsClient, PortSchema, PreferredTransferSyntax, ProcessState, ProposedTransferSyntax, QueryLevel, QueryModel, REQUIRED_BINARIES, RetrieveMode, SOP_CLASSES, STORESCP_FATAL_EVENTS, STORESCP_PATTERNS, SenderHealth, SenderMode, StorageMode, StoreSCP, StoreSCPPreset, StorescpEvent, SubdirectoryMode, ToolExecutionError, TransferSyntax, UIDSchema, UNIX_SEARCH_PATHS, VR, VR_CATEGORY, VR_CATEGORY_NAME, VR_META, WINDOWS_SEARCH_PATHS, WLMSCPFS_FATAL_EVENTS, WLMSCPFS_PATTERNS, Wlmscpfs, WlmscpfsEvent, assertUnreachable, batch, cda2dcm, clearDcmtkPathCache, createAETitle, createDicomFilePath, createDicomTag, createDicomTagPath, createPort, createSOPClassUID, createTransferSyntaxUID, dcm2cda, dcm2json, dcm2pdf, dcm2pnm, dcm2xml, dcmcjpeg, dcmcjpls, dcmconv, dcmcrle, dcmdecap, dcmdjpeg, dcmdjpls, dcmdrle, dcmdspfn, dcmdump, dcmencap, dcmftest, dcmgpdir, dcmj2pnm, dcmmkcrv, dcmmkdir, dcmmklut, dcmodify, dcmp2pgm, dcmprscu, dcmpschk, dcmpsmk, dcmpsprt, dcmqridx, dcmquant, dcmscale, dcmsend, dcod2lum, dconvlum, drtdump, dsr2xml, dsrdump, dump2dcm, echoscu, err, execCommand, findDcmtkPath, findscu, getVRCategory, getscu, img2dcm, isBinaryVR, isNumericVR, isStringVR, json2dcm, lookupTag, lookupTagByKeyword, lookupTagByName, mapResult, movescu, ok, parseAETitle, parseDicomTag, parseDicomTagPath, parsePort, parseSOPClassUID, parseTransferSyntaxUID, pdf2dcm, retry, segmentsToModifyPath, segmentsToString, sopClassNameFromUID, spawnCommand, stl2dcm, storescu, tag, tagPathToSegments, termscu, walkTags, xml2dcm, xml2dsr, xmlToJson };
|
|
39724
|
+
export { AETitleSchema, AssociationTracker, ChangeSet, ColorConversion, DCMPRSCP_FATAL_EVENTS, DCMPRSCP_PATTERNS, DCMPSRCV_FATAL_EVENTS, DCMPSRCV_PATTERNS, DCMQRSCP_FATAL_EVENTS, DCMQRSCP_PATTERNS, DCMRECV_FATAL_EVENTS, DCMRECV_PATTERNS, DEFAULT_BLOCK_TIMEOUT_MS, DEFAULT_DICOM_PORT, DEFAULT_DRAIN_TIMEOUT_MS, DEFAULT_PARSE_CONCURRENCY, DEFAULT_START_TIMEOUT_MS, DEFAULT_TIMEOUT_MS, Dcm2pnmOutputFormat, Dcm2xmlCharset, DcmQRSCP, DcmdumpFormat, Dcmj2pnmOutputFormat, DcmprsCP, DcmprscpEvent, Dcmpsrcv, DcmpsrcvEvent, DcmqrscpEvent, Dcmrecv, DcmrecvEvent, DcmtkProcess, DicomDataset, DicomHammer, DicomInstance, DicomReceiver, DicomSend, DicomSender, DicomTagPathSchema, DicomTagSchema, FilenameMode, GetQueryModel, HammerPhase, Img2dcmInputFormat, JplsColorConversion, LineParser, LutType, MAX_BLOCK_LINES, MAX_CHANGESET_OPERATIONS, MAX_EVENT_PATTERNS, MAX_TRAVERSAL_DEPTH, MoveQueryModel, PDU_SIZE, PacsClient, PortSchema, PreferredTransferSyntax, ProcessState, ProposedTransferSyntax, QueryLevel, QueryModel, REQUIRED_BINARIES, RetrieveMode, SOP_CLASSES, STORESCP_FATAL_EVENTS, STORESCP_PATTERNS, SenderHealth, SenderMode, StorageMode, StoreSCP, StoreSCPPreset, StorescpEvent, SubdirectoryMode, ToolExecutionError, TransferSyntax, UIDSchema, UNIX_SEARCH_PATHS, VR, VR_CATEGORY, VR_CATEGORY_NAME, VR_META, WINDOWS_SEARCH_PATHS, WLMSCPFS_FATAL_EVENTS, WLMSCPFS_PATTERNS, Wlmscpfs, WlmscpfsEvent, assertUnreachable, batch, cda2dcm, clearDcmtkPathCache, createAETitle, createDicomFilePath, createDicomTag, createDicomTagPath, createPort, createSOPClassUID, createTransferSyntaxUID, dcm2cda, dcm2json, dcm2pdf, dcm2pnm, dcm2xml, dcmcjpeg, dcmcjpls, dcmconv, dcmcrle, dcmdecap, dcmdjpeg, dcmdjpls, dcmdrle, dcmdspfn, dcmdump, dcmencap, dcmftest, dcmgpdir, dcmj2pnm, dcmmkcrv, dcmmkdir, dcmmklut, dcmodify, dcmp2pgm, dcmprscu, dcmpschk, dcmpsmk, dcmpsprt, dcmqridx, dcmquant, dcmscale, dcmsend, dcod2lum, dconvlum, dicom2json, dicom2jsonFromBuffer, drtdump, dsr2xml, dsrdump, dump2dcm, echoscu, err, execCommand, findDcmtkPath, findscu, getVRCategory, getscu, img2dcm, isBinaryVR, isNumericVR, isStringVR, json2dcm, lookupTag, lookupTagByKeyword, lookupTagByName, mapResult, movescu, ok, parseAETitle, parseDicomTag, parseDicomTagPath, parsePort, parseSOPClassUID, parseTransferSyntaxUID, pdf2dcm, retry, segmentsToModifyPath, segmentsToString, sopClassNameFromUID, spawnCommand, stl2dcm, storescu, tag, tagPathToSegments, termscu, walkTags, xml2dcm, xml2dsr, xmlToJson };
|
|
39180
39725
|
//# sourceMappingURL=index.js.map
|
|
39181
39726
|
//# sourceMappingURL=index.js.map
|