@cosyte/dicom 0.1.4 → 0.1.5

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/index.mjs CHANGED
@@ -9,7 +9,7 @@ var __export = (target, all) => {
9
9
  };
10
10
 
11
11
  // src/version.ts
12
- var VERSION = "0.1.4";
12
+ var VERSION = "0.1.5";
13
13
 
14
14
  // src/dictionary/index.ts
15
15
  var dictionary_exports = {};
@@ -14941,6 +14941,7 @@ function toDate(value, options) {
14941
14941
  return Number.isNaN(instant.getTime()) ? void 0 : instant;
14942
14942
  }
14943
14943
  var UNDEFINED_LENGTH4 = 4294967295;
14944
+ var MAX_SHORT_FORM_LENGTH = 65534;
14944
14945
  var NULL_PAD_VRS = /* @__PURE__ */ new Set(["UI", "OB", "OW", "OF", "OD", "OL", "OV", "UN"]);
14945
14946
  function padValue(value, vr) {
14946
14947
  if (value.length % 2 === 0) return Buffer.from(value);
@@ -14959,6 +14960,19 @@ function uint32(n, littleEndian) {
14959
14960
  else buf.writeUInt32BE(n, 0);
14960
14961
  return buf;
14961
14962
  }
14963
+ function littleEndianValue(value, vr, littleEndian) {
14964
+ const stride = BE_VR_STRIDE[vr];
14965
+ if (littleEndian || stride === 0) return value;
14966
+ const swapped = Buffer.from(value);
14967
+ const whole = swapped.subarray(0, swapped.length - swapped.length % stride);
14968
+ if (stride === 2) whole.swap16();
14969
+ else if (stride === 4) whole.swap32();
14970
+ else whole.swap64();
14971
+ return swapped;
14972
+ }
14973
+ function isPrivateCreator(group, element) {
14974
+ return group % 2 === 1 && element >= 16 && element <= 255;
14975
+ }
14962
14976
  function isFullSpanElement(el, encoding) {
14963
14977
  if (el.length === UNDEFINED_LENGTH4) return true;
14964
14978
  return el.vr === "SQ" && encoding !== "implicit";
@@ -14990,6 +15004,17 @@ function encodeDatasetElement(el, encoding, rawBytes = el.rawBytes) {
14990
15004
  value
14991
15005
  ]);
14992
15006
  }
15007
+ if (value.length > MAX_SHORT_FORM_LENGTH && !isPrivateCreator(group, element)) {
15008
+ return Buffer.concat([
15009
+ uint16(group, littleEndian),
15010
+ uint16(element, littleEndian),
15011
+ Buffer.from("UN", "ascii"),
15012
+ Buffer.from([0, 0]),
15013
+ // reserved (PS3.5 §7.1.2)
15014
+ uint32(value.length, littleEndian),
15015
+ littleEndianValue(value, el.vr, littleEndian)
15016
+ ]);
15017
+ }
14993
15018
  return Buffer.concat([
14994
15019
  uint16(group, littleEndian),
14995
15020
  uint16(element, littleEndian),