UNPKG

paraview-glance

Version:

Web application for Visualizing Scientific and Medical datasets

65 lines (50 loc) 1.86 kB
"use strict"; const path = require('path'); const mime = require('mime-types'); const fs = require('fs'); const mimeToIO = require('./MimeToPolyDataIO.js'); const getFileExtension = require('./getFileExtension.js'); const extensionToIO = require('./extensionToPolyDataIO.js'); const IOTypes = require('./IOTypes.js'); const loadEmscriptenModule = require('./loadEmscriptenModuleNode.js'); const runPipelineEmscripten = require('./runPipelineEmscripten.js'); const readPolyDataLocalFile = filePath => { return new Promise(function (resolve, reject) { const polyDataIOsPath = path.resolve(__dirname, 'PolyDataIOs'); const absoluteFilePath = path.resolve(filePath); const filePathBasename = path.basename(filePath); try { const mimeType = mime.lookup(absoluteFilePath); const extension = getFileExtension(absoluteFilePath); let io = null; if (mimeToIO.has(mimeType)) { io = mimeToIO.get(mimeType); } else if (extensionToIO.has(extension)) { io = extensionToIO.get(extension); } if (io === null) { reject(Error('Could not find IO for: ' + absoluteFilePath)); } const modulePath = path.join(polyDataIOsPath, io); const Module = loadEmscriptenModule(modulePath); const fileContents = new Uint8Array(fs.readFileSync(absoluteFilePath)); const args = [filePathBasename, filePathBasename + '.output.json']; const desiredOutputs = [{ path: args[1], type: IOTypes.vtkPolyData }]; const inputs = [{ path: args[0], type: IOTypes.Binary, data: fileContents }]; const { outputs } = runPipelineEmscripten(Module, args, desiredOutputs, inputs); resolve(outputs[0].data); } catch (err) { reject(err); } }); }; module.exports = readPolyDataLocalFile;