{"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":["JSZip","pako","macro","Endian","DataTypeByteSize","vtkErrorMacro","vtkDebugMacro","toMimeType","url","ext","split","pop","toLowerCase","handleUint8Array","array","compression","done","uint8array","buffer","ArrayBuffer","length","view","Uint8Array","set","dataType","inflate","to","ref","encode","values","JSON","parse","ENDIANNESS","name","swapBytes","window","size","handleString","string","handlers","removeLeadingSlash","str","substr","normalizePath","URL","pathname","cleanUpPath","create","createOptions","ready","requestCount","zip","zipRoot","loadAsync","zipContent","then","metaFiles","forEach","relativePath","zipEntry","indexOf","push","sort","a","b","fullRootPath","dirName","shift","folder","callback","fetchArray","instance","baseURL","options","Promise","resolve","reject","basepath","id","join","invokeBusy","doneCleanUp","modified","asyncType","asyncCallback","file","async","fetchJSON","path","Error","fetchText","fetchImage","img","Image","onload","onerror","src","fetchBinary","data"],"mappings":"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","sourcesContent":["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};"]},"metadata":{},"sourceType":"module"}