{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { Dcm2niix } from '@niivue/dcm2niix'\n\n// Each input item either is a File or has this shape:\nexport interface DicomInput {\n  name: string\n  data: ArrayBuffer\n}\n\n// Each output item will have a name and data (ArrayBuffer).\nexport interface ConvertedFile {\n  name: string\n  data: ArrayBuffer\n}\n\n/**\n * Loads DICOM files (or a single DICOM file) and converts them to\n * NIfTI using dcm2niix in the browser.\n *\n * @param data - An array of File objects or an array of DicomInput objects.\n * @returns A promise that resolves to an array of { name, data }\n *          where each data field is an ArrayBuffer containing the NIfTI file.\n */\nexport async function dicomLoader(data: Array<File | DicomInput>): Promise<ConvertedFile[]> {\n  const dcm2niix = new Dcm2niix()\n  await dcm2niix.init()\n\n  let returnedFiles: File[] = []\n\n  if (Array.isArray(data) && data.length === 1 && (data[0] as DicomInput).data instanceof ArrayBuffer) {\n    const fileObj = data[0] as DicomInput\n    const file = new File([fileObj.data], fileObj.name, { type: 'application/octet-stream' })\n    returnedFiles = await dcm2niix.input([file]).run()\n  } else if (Array.isArray(data) && data.length > 0) {\n    const first = data[0]\n    if ((first as DicomInput).data instanceof ArrayBuffer) {\n      const files: File[] = []\n      for (let i = 0; i < data.length; i++) {\n        const dicom = data[i] as DicomInput\n        const file = new File([dicom.data], dicom.name, { type: 'application/octet-stream' })\n        files.push(file)\n      }\n      returnedFiles = await dcm2niix.input(files).run()\n    } else {\n      returnedFiles = await dcm2niix.input(data as File[]).run()\n    }\n  }\n\n  const niiFiles = returnedFiles.filter((file) => file.name.endsWith('.nii') || file.name.endsWith('.nii.gz'))\n\n  const arrayBuffers: ConvertedFile[] = []\n  for (const file of niiFiles) {\n    const niiArrayBuffer = await file.arrayBuffer()\n    arrayBuffers.push({ name: file.name, data: niiArrayBuffer })\n  }\n\n  return arrayBuffers\n}\n"],"mappings":";AAAA,SAAS,gBAAgB;AAsBzB,eAAsB,YAAY,MAA0D;AAC1F,QAAM,WAAW,IAAI,SAAS;AAC9B,QAAM,SAAS,KAAK;AAEpB,MAAI,gBAAwB,CAAC;AAE7B,MAAI,MAAM,QAAQ,IAAI,KAAK,KAAK,WAAW,KAAM,KAAK,CAAC,EAAiB,gBAAgB,aAAa;AACnG,UAAM,UAAU,KAAK,CAAC;AACtB,UAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,IAAI,GAAG,QAAQ,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxF,oBAAgB,MAAM,SAAS,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI;AAAA,EACnD,WAAW,MAAM,QAAQ,IAAI,KAAK,KAAK,SAAS,GAAG;AACjD,UAAM,QAAQ,KAAK,CAAC;AACpB,QAAK,MAAqB,gBAAgB,aAAa;AACrD,YAAM,QAAgB,CAAC;AACvB,eAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,cAAM,QAAQ,KAAK,CAAC;AACpB,cAAM,OAAO,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,MAAM,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACpF,cAAM,KAAK,IAAI;AAAA,MACjB;AACA,sBAAgB,MAAM,SAAS,MAAM,KAAK,EAAE,IAAI;AAAA,IAClD,OAAO;AACL,sBAAgB,MAAM,SAAS,MAAM,IAAc,EAAE,IAAI;AAAA,IAC3D;AAAA,EACF;AAEA,QAAM,WAAW,cAAc,OAAO,CAAC,SAAS,KAAK,KAAK,SAAS,MAAM,KAAK,KAAK,KAAK,SAAS,SAAS,CAAC;AAE3G,QAAM,eAAgC,CAAC;AACvC,aAAW,QAAQ,UAAU;AAC3B,UAAM,iBAAiB,MAAM,KAAK,YAAY;AAC9C,iBAAa,KAAK,EAAE,MAAM,KAAK,MAAM,MAAM,eAAe,CAAC;AAAA,EAC7D;AAEA,SAAO;AACT;","names":[]}