@niivue/dicom-loader
Version:
a module to load DICOM files into a format that can be used by niivue
1 lines • 3.15 kB
Source Map (JSON)
{"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":[]}