{"ast":null,"code":"import JSZip from 'jszip';\nimport pako from 'pako';\nimport macro from 'vtk.js/Sources/macro';\nimport Endian from 'vtk.js/Sources/Common/Core/Endian';\nimport { DataTypeByteSize } from 'vtk.js/Sources/Common/Core/DataArray/Constants';\nconst {\n  vtkErrorMacro,\n  vtkDebugMacro\n} = macro;\n\nfunction toMimeType(url) {\n  const ext = url.split('.').pop().toLowerCase();\n\n  if (ext === 'jpg') {\n    return 'jpeg';\n  }\n\n  return ext;\n}\n\nfunction handleUint8Array(array, compression, done) {\n  return uint8array => {\n    array.buffer = new ArrayBuffer(uint8array.length); // copy uint8array to buffer\n\n    const view = new Uint8Array(array.buffer);\n    view.set(uint8array);\n\n    if (compression) {\n      if (array.dataType === 'string' || array.dataType === 'JSON') {\n        array.buffer = pako.inflate(new Uint8Array(array.buffer), {\n          to: 'string'\n        });\n      } else {\n        array.buffer = pako.inflate(new Uint8Array(array.buffer)).buffer;\n      }\n    }\n\n    if (array.ref.encode === 'JSON') {\n      array.values = JSON.parse(array.buffer);\n    } else {\n      if (Endian.ENDIANNESS !== array.ref.encode && Endian.ENDIANNESS) {\n        // Need to swap bytes\n        vtkDebugMacro(`Swap bytes of ${array.name}`);\n        Endian.swapBytes(array.buffer, DataTypeByteSize[array.dataType]);\n      }\n\n      array.values = new window[array.dataType](array.buffer);\n    }\n\n    if (array.values.length !== array.size) {\n      vtkErrorMacro(`Error in FetchArray: ${array.name} does not have the proper array size. Got ${array.values.length}, instead of ${array.size}`);\n    }\n\n    done();\n  };\n}\n\nfunction handleString(array, compression, done) {\n  return string => {\n    if (compression) {\n      array.values = JSON.parse(pako.inflate(string, {\n        to: 'string'\n      }));\n    } else {\n      array.values = JSON.parse(string);\n    }\n\n    done();\n  };\n}\n\nconst handlers = {\n  uint8array: handleUint8Array,\n  string: handleString\n};\n\nfunction removeLeadingSlash(str) {\n  return str[0] === '/' ? str.substr(1) : str;\n}\n\nfunction normalizePath(str) {\n  return new URL(str, 'http://any').pathname;\n}\n\nfunction cleanUpPath(str) {\n  return removeLeadingSlash(normalizePath(str));\n}\n\nfunction create(createOptions) {\n  let ready = false;\n  let requestCount = 0;\n  const zip = new JSZip();\n  let zipRoot = zip;\n  zip.loadAsync(createOptions.zipContent).then(() => {\n    ready = true; // Find root index.json\n\n    const metaFiles = [];\n    zip.forEach((relativePath, zipEntry) => {\n      if (relativePath.indexOf('index.json') !== -1) {\n        metaFiles.push(relativePath);\n      }\n    });\n    metaFiles.sort((a, b) => a.length - b.length);\n    const fullRootPath = metaFiles[0].split('/');\n\n    while (fullRootPath.length > 1) {\n      const dirName = fullRootPath.shift();\n      zipRoot = zipRoot.folder(dirName);\n    }\n\n    if (createOptions.callback) {\n      createOptions.callback(zip);\n    }\n  });\n  return {\n    fetchArray(instance = {}, baseURL, array, options = {}) {\n      return new Promise((resolve, reject) => {\n        if (!ready) {\n          vtkErrorMacro('ERROR!!! zip not ready...');\n        }\n\n        const url = cleanUpPath([baseURL, array.ref.basepath, options.compression ? `${array.ref.id}.gz` : array.ref.id].join('/'));\n\n        if (++requestCount === 1 && instance.invokeBusy) {\n          instance.invokeBusy(true);\n        }\n\n        function doneCleanUp() {\n          // Done with the ref and work\n          delete array.ref;\n\n          if (--requestCount === 0 && instance.invokeBusy) {\n            instance.invokeBusy(false);\n          }\n\n          if (instance.modified) {\n            instance.modified();\n          }\n\n          resolve(array);\n        }\n\n        const asyncType = array.dataType === 'string' && !options.compression ? 'string' : 'uint8array';\n        const asyncCallback = handlers[asyncType](array, options.compression, doneCleanUp);\n        zipRoot.file(url).async(asyncType).then(asyncCallback);\n      });\n    },\n\n    fetchJSON(instance = {}, url, options = {}) {\n      const path = cleanUpPath(url);\n\n      if (!ready) {\n        vtkErrorMacro('ERROR!!! zip not ready...');\n      }\n\n      if (options.compression) {\n        if (options.compression === 'gz') {\n          return zipRoot.file(path).async('uint8array').then(uint8array => {\n            const str = pako.inflate(uint8array, {\n              to: 'string'\n            });\n            return Promise.resolve(JSON.parse(str));\n          });\n        }\n\n        return Promise.reject(new Error('Invalid compression'));\n      }\n\n      return zipRoot.file(path).async('string').then(str => Promise.resolve(JSON.parse(str)));\n    },\n\n    fetchText(instance = {}, url, options = {}) {\n      const path = cleanUpPath(url);\n\n      if (!ready) {\n        vtkErrorMacro('ERROR!!! zip not ready...');\n      }\n\n      if (options.compression) {\n        if (options.compression === 'gz') {\n          return zipRoot.file(path).async('uint8array').then(uint8array => {\n            const str = pako.inflate(uint8array, {\n              to: 'string'\n            });\n            return Promise.resolve(str);\n          });\n        }\n\n        return Promise.reject(new Error('Invalid compression'));\n      }\n\n      return zipRoot.file(path).async('string').then(str => Promise.resolve(str));\n    },\n\n    fetchImage(instance = {}, url, options = {}) {\n      const path = cleanUpPath(url);\n\n      if (!ready) {\n        vtkErrorMacro('ERROR!!! zip not ready...');\n      }\n\n      return new Promise((resolve, reject) => {\n        const img = new Image();\n\n        img.onload = () => resolve(img);\n\n        img.onerror = reject;\n        zipRoot.file(path).async('base64').then(str => {\n          img.src = `data:image/${toMimeType(path)};base64,${str}`;\n        });\n      });\n    },\n\n    fetchBinary(instance = {}, url, options = {}) {\n      const path = cleanUpPath(url);\n\n      if (!ready) {\n        vtkErrorMacro('ERROR!!! zip not ready...');\n      }\n\n      if (options.compression) {\n        if (options.compression === 'gz') {\n          return zipRoot.file(path).then(data => {\n            const array = pako.inflate(data).buffer;\n            return Promise.resolve(array);\n          });\n        }\n\n        return Promise.reject(new Error('Invalid compression'));\n      }\n\n      return zipRoot.file(path).async('arraybuffer').then(data => Promise.resolve(data));\n    }\n\n  };\n}\n\nexport default {\n  create\n};","map":{"version":3,"sources":["D:/Development/Work/CENOS/cenos-ui/node_modules/vtk.js/Sources/IO/Core/DataAccessHelper/JSZipDataAccessHelper.js"],"names":["vtkDebugMacro","ext","url","uint8array","array","view","to","pako","JSON","Endian","name","DataTypeByteSize","window","vtkErrorMacro","length","size","done","string","handlers","handleString","str","removeLeadingSlash","normalizePath","ready","requestCount","zip","zipRoot","createOptions","metaFiles","relativePath","a","b","fullRootPath","dirName","fetchArray","instance","options","cleanUpPath","id","resolve","asyncType","asyncCallback","fetchJSON","path","Promise","fetchText","fetchImage","img","toMimeType","fetchBinary","data","create"],"mappings":"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","sourcesContent":["import JSZip from 'jszip';\nimport pako from 'pako';\n\nimport macro from 'vtk.js/Sources/macro';\nimport Endian from 'vtk.js/Sources/Common/Core/Endian';\nimport { DataTypeByteSize } from 'vtk.js/Sources/Common/Core/DataArray/Constants';\n\nconst { vtkErrorMacro, vtkDebugMacro } = macro;\n\nfunction toMimeType(url) {\n  const ext = url.split('.').pop().toLowerCase();\n  if (ext === 'jpg') {\n    return 'jpeg';\n  }\n  return ext;\n}\n\nfunction handleUint8Array(array, compression, done) {\n  return (uint8array) => {\n    array.buffer = new ArrayBuffer(uint8array.length);\n\n    // copy uint8array to buffer\n    const view = new Uint8Array(array.buffer);\n    view.set(uint8array);\n\n    if (compression) {\n      if (array.dataType === 'string' || array.dataType === 'JSON') {\n        array.buffer = pako.inflate(new Uint8Array(array.buffer), {\n          to: 'string',\n        });\n      } else {\n        array.buffer = pako.inflate(new Uint8Array(array.buffer)).buffer;\n      }\n    }\n\n    if (array.ref.encode === 'JSON') {\n      array.values = JSON.parse(array.buffer);\n    } else {\n      if (Endian.ENDIANNESS !== array.ref.encode && Endian.ENDIANNESS) {\n        // Need to swap bytes\n        vtkDebugMacro(`Swap bytes of ${array.name}`);\n        Endian.swapBytes(array.buffer, DataTypeByteSize[array.dataType]);\n      }\n\n      array.values = new window[array.dataType](array.buffer);\n    }\n\n    if (array.values.length !== array.size) {\n      vtkErrorMacro(\n        `Error in FetchArray: ${array.name} does not have the proper array size. Got ${array.values.length}, instead of ${array.size}`\n      );\n    }\n\n    done();\n  };\n}\n\nfunction handleString(array, compression, done) {\n  return (string) => {\n    if (compression) {\n      array.values = JSON.parse(pako.inflate(string, { to: 'string' }));\n    } else {\n      array.values = JSON.parse(string);\n    }\n    done();\n  };\n}\n\nconst handlers = {\n  uint8array: handleUint8Array,\n  string: handleString,\n};\n\nfunction removeLeadingSlash(str) {\n  return str[0] === '/' ? str.substr(1) : str;\n}\n\nfunction normalizePath(str) {\n  return new URL(str, 'http://any').pathname;\n}\n\nfunction cleanUpPath(str) {\n  return removeLeadingSlash(normalizePath(str));\n}\n\nfunction create(createOptions) {\n  let ready = false;\n  let requestCount = 0;\n  const zip = new JSZip();\n  let zipRoot = zip;\n  zip.loadAsync(createOptions.zipContent).then(() => {\n    ready = true;\n\n    // Find root index.json\n    const metaFiles = [];\n    zip.forEach((relativePath, zipEntry) => {\n      if (relativePath.indexOf('index.json') !== -1) {\n        metaFiles.push(relativePath);\n      }\n    });\n    metaFiles.sort((a, b) => a.length - b.length);\n    const fullRootPath = metaFiles[0].split('/');\n    while (fullRootPath.length > 1) {\n      const dirName = fullRootPath.shift();\n      zipRoot = zipRoot.folder(dirName);\n    }\n\n    if (createOptions.callback) {\n      createOptions.callback(zip);\n    }\n  });\n  return {\n    fetchArray(instance = {}, baseURL, array, options = {}) {\n      return new Promise((resolve, reject) => {\n        if (!ready) {\n          vtkErrorMacro('ERROR!!! zip not ready...');\n        }\n        const url = cleanUpPath(\n          [\n            baseURL,\n            array.ref.basepath,\n            options.compression ? `${array.ref.id}.gz` : array.ref.id,\n          ].join('/')\n        );\n\n        if (++requestCount === 1 && instance.invokeBusy) {\n          instance.invokeBusy(true);\n        }\n\n        function doneCleanUp() {\n          // Done with the ref and work\n          delete array.ref;\n          if (--requestCount === 0 && instance.invokeBusy) {\n            instance.invokeBusy(false);\n          }\n          if (instance.modified) {\n            instance.modified();\n          }\n          resolve(array);\n        }\n\n        const asyncType =\n          array.dataType === 'string' && !options.compression\n            ? 'string'\n            : 'uint8array';\n        const asyncCallback = handlers[asyncType](\n          array,\n          options.compression,\n          doneCleanUp\n        );\n        zipRoot.file(url).async(asyncType).then(asyncCallback);\n      });\n    },\n\n    fetchJSON(instance = {}, url, options = {}) {\n      const path = cleanUpPath(url);\n      if (!ready) {\n        vtkErrorMacro('ERROR!!! zip not ready...');\n      }\n\n      if (options.compression) {\n        if (options.compression === 'gz') {\n          return zipRoot\n            .file(path)\n            .async('uint8array')\n            .then((uint8array) => {\n              const str = pako.inflate(uint8array, { to: 'string' });\n              return Promise.resolve(JSON.parse(str));\n            });\n        }\n        return Promise.reject(new Error('Invalid compression'));\n      }\n      return zipRoot\n        .file(path)\n        .async('string')\n        .then((str) => Promise.resolve(JSON.parse(str)));\n    },\n\n    fetchText(instance = {}, url, options = {}) {\n      const path = cleanUpPath(url);\n      if (!ready) {\n        vtkErrorMacro('ERROR!!! zip not ready...');\n      }\n\n      if (options.compression) {\n        if (options.compression === 'gz') {\n          return zipRoot\n            .file(path)\n            .async('uint8array')\n            .then((uint8array) => {\n              const str = pako.inflate(uint8array, { to: 'string' });\n              return Promise.resolve(str);\n            });\n        }\n        return Promise.reject(new Error('Invalid compression'));\n      }\n\n      return zipRoot\n        .file(path)\n        .async('string')\n        .then((str) => Promise.resolve(str));\n    },\n\n    fetchImage(instance = {}, url, options = {}) {\n      const path = cleanUpPath(url);\n      if (!ready) {\n        vtkErrorMacro('ERROR!!! zip not ready...');\n      }\n\n      return new Promise((resolve, reject) => {\n        const img = new Image();\n        img.onload = () => resolve(img);\n        img.onerror = reject;\n\n        zipRoot\n          .file(path)\n          .async('base64')\n          .then((str) => {\n            img.src = `data:image/${toMimeType(path)};base64,${str}`;\n          });\n      });\n    },\n\n    fetchBinary(instance = {}, url, options = {}) {\n      const path = cleanUpPath(url);\n      if (!ready) {\n        vtkErrorMacro('ERROR!!! zip not ready...');\n      }\n\n      if (options.compression) {\n        if (options.compression === 'gz') {\n          return zipRoot.file(path).then((data) => {\n            const array = pako.inflate(data).buffer;\n            return Promise.resolve(array);\n          });\n        }\n        return Promise.reject(new Error('Invalid compression'));\n      }\n\n      return zipRoot\n        .file(path)\n        .async('arraybuffer')\n        .then((data) => Promise.resolve(data));\n    },\n  };\n}\n\nexport default {\n  create,\n};\n"]},"metadata":{},"sourceType":"module"}