{"version":3,"file":"utils.jsx","sourceRoot":"","sources":["utils.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,KAAK,QAAQ,MAAM,WAAW,CAAC;AAEtC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,GAAW,EAAU,EAAE,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;AAE9E,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAU,EAAE;IAChD,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAChD,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AACxD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAW,EAAE,IAAY,EAAE,MAAc,EAAU,EAAE,CAClF,GAAG,GAAG,eAAe,IAAI,MAAM,MAAM,EAAE,CAAC;AAE1C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAU,EAAE,EAAE;IAC/C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,wBAAwB;QACnD,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;QAEpC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,yBAAyB;QAEzC,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE;YACzB,MAAM,CAAC,CAAC,CAAC,CAAC;QACZ,CAAC,CAAC;QAEF,8CAA8C;QAC9C,SAAS,YAAY,CAAC,WAAmB;YACvC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,CAAC,CAAC;YAC/D,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;QACnE,CAAC;QAED,UAAU,CAAC,MAAM,GAAG,CAAC,CAAM,EAAE,EAAE;YAC7B,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,sCAAsC;YACrE,MAAM,IAAI,SAAS,CAAC,CAAC,uBAAuB;YAE5C,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE;gBACtB,YAAY,CAAC,MAAM,CAAC,CAAC;aACtB;iBAAM;gBACL,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAChC;QACH,CAAC,CAAC;QAEF,YAAY,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["/* eslint no-useless-escape:0 */\nimport * as SparkMD5 from 'spark-md5';\n\nexport const qiniuUrl = (key: string, url: string): string => `${url}/${key}`;\n\nexport const fileSize = (bytes: number): string => {\n  const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n  if (bytes === 0) return 'N/A';\n  const i = Math.floor(Math.log(bytes) / Math.log(1024));\n  return `${(bytes / 1024 ** i).toFixed(1)}${sizes[i]}`;\n};\n\nexport const qiniuImageView = (url: string, mode: number, height: number): string =>\n  `${url}?imageView2/${mode}/h/${height}`;\n\nexport const computeChecksumMd5 = (file: File) => {\n  return new Promise((resolve, reject) => {\n    const chunkSize = 2097152; // Read in chunks of 2MB\n    const spark = new SparkMD5.ArrayBuffer();\n    const fileReader = new FileReader();\n\n    let cursor = 0; // current cursor in file\n\n    fileReader.onerror = (e) => {\n      reject(e);\n    };\n\n    // read chunk starting at `cursor` into memory\n    function processChunk(chunk_start: number): void {\n      const chunk_end = Math.min(file.size, chunk_start + chunkSize);\n      fileReader.readAsArrayBuffer(file.slice(chunk_start, chunk_end));\n    }\n\n    fileReader.onload = (e: any) => {\n      spark.append(e.target.result); // Accumulate chunk to md5 computation\n      cursor += chunkSize; // Move past this chunk\n\n      if (cursor < file.size) {\n        processChunk(cursor);\n      } else {\n        resolve(btoa(spark.end(true)));\n      }\n    };\n\n    processChunk(0);\n  });\n};\n"]}