UNPKG

fluxforge

Version:

基于 Web Worker 的文件分片库,提供并发处理、可暂停/取消任务控制、自动重试与 MD5 校验。

1 lines 54.4 kB
{"version":3,"file":"index.umd.cjs","sources":["../node_modules/.pnpm/spark-md5@3.0.2/node_modules/spark-md5/spark-md5.js","../src/types.ts","../src/task-executor.ts","../src/index.ts"],"sourcesContent":["(function (factory) {\n    if (typeof exports === 'object') {\n        // Node/CommonJS\n        module.exports = factory();\n    } else if (typeof define === 'function' && define.amd) {\n        // AMD\n        define(factory);\n    } else {\n        // Browser globals (with support for web workers)\n        var glob;\n\n        try {\n            glob = window;\n        } catch (e) {\n            glob = self;\n        }\n\n        glob.SparkMD5 = factory();\n    }\n}(function (undefined) {\n\n    'use strict';\n\n    /*\n     * Fastest md5 implementation around (JKM md5).\n     * Credits: Joseph Myers\n     *\n     * @see http://www.myersdaily.org/joseph/javascript/md5-text.html\n     * @see http://jsperf.com/md5-shootout/7\n     */\n\n    /* this function is much faster,\n      so if possible we use it. Some IEs\n      are the only ones I know of that\n      need the idiotic second function,\n      generated by an if clause.  */\n    var add32 = function (a, b) {\n        return (a + b) & 0xFFFFFFFF;\n    },\n        hex_chr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];\n\n\n    function cmn(q, a, b, x, s, t) {\n        a = add32(add32(a, q), add32(x, t));\n        return add32((a << s) | (a >>> (32 - s)), b);\n    }\n\n    function md5cycle(x, k) {\n        var a = x[0],\n            b = x[1],\n            c = x[2],\n            d = x[3];\n\n        a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n        a  = (a << 7 | a >>> 25) + b | 0;\n        d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n        d  = (d << 12 | d >>> 20) + a | 0;\n        c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n        c  = (c << 17 | c >>> 15) + d | 0;\n        b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n        b  = (b << 22 | b >>> 10) + c | 0;\n        a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n        a  = (a << 7 | a >>> 25) + b | 0;\n        d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n        d  = (d << 12 | d >>> 20) + a | 0;\n        c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n        c  = (c << 17 | c >>> 15) + d | 0;\n        b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n        b  = (b << 22 | b >>> 10) + c | 0;\n        a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n        a  = (a << 7 | a >>> 25) + b | 0;\n        d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n        d  = (d << 12 | d >>> 20) + a | 0;\n        c += (d & a | ~d & b) + k[10] - 42063 | 0;\n        c  = (c << 17 | c >>> 15) + d | 0;\n        b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n        b  = (b << 22 | b >>> 10) + c | 0;\n        a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n        a  = (a << 7 | a >>> 25) + b | 0;\n        d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n        d  = (d << 12 | d >>> 20) + a | 0;\n        c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n        c  = (c << 17 | c >>> 15) + d | 0;\n        b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n        b  = (b << 22 | b >>> 10) + c | 0;\n\n        a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n        a  = (a << 5 | a >>> 27) + b | 0;\n        d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n        d  = (d << 9 | d >>> 23) + a | 0;\n        c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n        c  = (c << 14 | c >>> 18) + d | 0;\n        b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n        b  = (b << 20 | b >>> 12) + c | 0;\n        a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n        a  = (a << 5 | a >>> 27) + b | 0;\n        d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n        d  = (d << 9 | d >>> 23) + a | 0;\n        c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n        c  = (c << 14 | c >>> 18) + d | 0;\n        b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n        b  = (b << 20 | b >>> 12) + c | 0;\n        a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n        a  = (a << 5 | a >>> 27) + b | 0;\n        d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n        d  = (d << 9 | d >>> 23) + a | 0;\n        c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n        c  = (c << 14 | c >>> 18) + d | 0;\n        b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n        b  = (b << 20 | b >>> 12) + c | 0;\n        a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n        a  = (a << 5 | a >>> 27) + b | 0;\n        d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n        d  = (d << 9 | d >>> 23) + a | 0;\n        c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n        c  = (c << 14 | c >>> 18) + d | 0;\n        b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n        b  = (b << 20 | b >>> 12) + c | 0;\n\n        a += (b ^ c ^ d) + k[5] - 378558 | 0;\n        a  = (a << 4 | a >>> 28) + b | 0;\n        d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n        d  = (d << 11 | d >>> 21) + a | 0;\n        c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n        c  = (c << 16 | c >>> 16) + d | 0;\n        b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n        b  = (b << 23 | b >>> 9) + c | 0;\n        a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n        a  = (a << 4 | a >>> 28) + b | 0;\n        d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n        d  = (d << 11 | d >>> 21) + a | 0;\n        c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n        c  = (c << 16 | c >>> 16) + d | 0;\n        b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n        b  = (b << 23 | b >>> 9) + c | 0;\n        a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n        a  = (a << 4 | a >>> 28) + b | 0;\n        d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n        d  = (d << 11 | d >>> 21) + a | 0;\n        c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n        c  = (c << 16 | c >>> 16) + d | 0;\n        b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n        b  = (b << 23 | b >>> 9) + c | 0;\n        a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n        a  = (a << 4 | a >>> 28) + b | 0;\n        d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n        d  = (d << 11 | d >>> 21) + a | 0;\n        c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n        c  = (c << 16 | c >>> 16) + d | 0;\n        b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n        b  = (b << 23 | b >>> 9) + c | 0;\n\n        a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n        a  = (a << 6 | a >>> 26) + b | 0;\n        d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n        d  = (d << 10 | d >>> 22) + a | 0;\n        c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n        c  = (c << 15 | c >>> 17) + d | 0;\n        b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n        b  = (b << 21 |b >>> 11) + c | 0;\n        a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n        a  = (a << 6 | a >>> 26) + b | 0;\n        d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n        d  = (d << 10 | d >>> 22) + a | 0;\n        c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n        c  = (c << 15 | c >>> 17) + d | 0;\n        b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n        b  = (b << 21 |b >>> 11) + c | 0;\n        a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n        a  = (a << 6 | a >>> 26) + b | 0;\n        d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n        d  = (d << 10 | d >>> 22) + a | 0;\n        c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n        c  = (c << 15 | c >>> 17) + d | 0;\n        b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n        b  = (b << 21 |b >>> 11) + c | 0;\n        a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n        a  = (a << 6 | a >>> 26) + b | 0;\n        d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n        d  = (d << 10 | d >>> 22) + a | 0;\n        c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n        c  = (c << 15 | c >>> 17) + d | 0;\n        b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n        b  = (b << 21 | b >>> 11) + c | 0;\n\n        x[0] = a + x[0] | 0;\n        x[1] = b + x[1] | 0;\n        x[2] = c + x[2] | 0;\n        x[3] = d + x[3] | 0;\n    }\n\n    function md5blk(s) {\n        var md5blks = [],\n            i; /* Andy King said do it this way. */\n\n        for (i = 0; i < 64; i += 4) {\n            md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n        }\n        return md5blks;\n    }\n\n    function md5blk_array(a) {\n        var md5blks = [],\n            i; /* Andy King said do it this way. */\n\n        for (i = 0; i < 64; i += 4) {\n            md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n        }\n        return md5blks;\n    }\n\n    function md51(s) {\n        var n = s.length,\n            state = [1732584193, -271733879, -1732584194, 271733878],\n            i,\n            length,\n            tail,\n            tmp,\n            lo,\n            hi;\n\n        for (i = 64; i <= n; i += 64) {\n            md5cycle(state, md5blk(s.substring(i - 64, i)));\n        }\n        s = s.substring(i - 64);\n        length = s.length;\n        tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n        for (i = 0; i < length; i += 1) {\n            tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3);\n        }\n        tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n        if (i > 55) {\n            md5cycle(state, tail);\n            for (i = 0; i < 16; i += 1) {\n                tail[i] = 0;\n            }\n        }\n\n        // Beware that the final length might not fit in 32 bits so we take care of that\n        tmp = n * 8;\n        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n        lo = parseInt(tmp[2], 16);\n        hi = parseInt(tmp[1], 16) || 0;\n\n        tail[14] = lo;\n        tail[15] = hi;\n\n        md5cycle(state, tail);\n        return state;\n    }\n\n    function md51_array(a) {\n        var n = a.length,\n            state = [1732584193, -271733879, -1732584194, 271733878],\n            i,\n            length,\n            tail,\n            tmp,\n            lo,\n            hi;\n\n        for (i = 64; i <= n; i += 64) {\n            md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n        }\n\n        // Not sure if it is a bug, however IE10 will always produce a sub array of length 1\n        // containing the last element of the parent array if the sub array specified starts\n        // beyond the length of the parent array - weird.\n        // https://connect.microsoft.com/IE/feedback/details/771452/typed-array-subarray-issue\n        a = (i - 64) < n ? a.subarray(i - 64) : new Uint8Array(0);\n\n        length = a.length;\n        tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n        for (i = 0; i < length; i += 1) {\n            tail[i >> 2] |= a[i] << ((i % 4) << 3);\n        }\n\n        tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n        if (i > 55) {\n            md5cycle(state, tail);\n            for (i = 0; i < 16; i += 1) {\n                tail[i] = 0;\n            }\n        }\n\n        // Beware that the final length might not fit in 32 bits so we take care of that\n        tmp = n * 8;\n        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n        lo = parseInt(tmp[2], 16);\n        hi = parseInt(tmp[1], 16) || 0;\n\n        tail[14] = lo;\n        tail[15] = hi;\n\n        md5cycle(state, tail);\n\n        return state;\n    }\n\n    function rhex(n) {\n        var s = '',\n            j;\n        for (j = 0; j < 4; j += 1) {\n            s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F];\n        }\n        return s;\n    }\n\n    function hex(x) {\n        var i;\n        for (i = 0; i < x.length; i += 1) {\n            x[i] = rhex(x[i]);\n        }\n        return x.join('');\n    }\n\n    // In some cases the fast add32 function cannot be used..\n    if (hex(md51('hello')) !== '5d41402abc4b2a76b9719d911017c592') {\n        add32 = function (x, y) {\n            var lsw = (x & 0xFFFF) + (y & 0xFFFF),\n                msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n            return (msw << 16) | (lsw & 0xFFFF);\n        };\n    }\n\n    // ---------------------------------------------------\n\n    /**\n     * ArrayBuffer slice polyfill.\n     *\n     * @see https://github.com/ttaubert/node-arraybuffer-slice\n     */\n\n    if (typeof ArrayBuffer !== 'undefined' && !ArrayBuffer.prototype.slice) {\n        (function () {\n            function clamp(val, length) {\n                val = (val | 0) || 0;\n\n                if (val < 0) {\n                    return Math.max(val + length, 0);\n                }\n\n                return Math.min(val, length);\n            }\n\n            ArrayBuffer.prototype.slice = function (from, to) {\n                var length = this.byteLength,\n                    begin = clamp(from, length),\n                    end = length,\n                    num,\n                    target,\n                    targetArray,\n                    sourceArray;\n\n                if (to !== undefined) {\n                    end = clamp(to, length);\n                }\n\n                if (begin > end) {\n                    return new ArrayBuffer(0);\n                }\n\n                num = end - begin;\n                target = new ArrayBuffer(num);\n                targetArray = new Uint8Array(target);\n\n                sourceArray = new Uint8Array(this, begin, num);\n                targetArray.set(sourceArray);\n\n                return target;\n            };\n        })();\n    }\n\n    // ---------------------------------------------------\n\n    /**\n     * Helpers.\n     */\n\n    function toUtf8(str) {\n        if (/[\\u0080-\\uFFFF]/.test(str)) {\n            str = unescape(encodeURIComponent(str));\n        }\n\n        return str;\n    }\n\n    function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n        var length = str.length,\n           buff = new ArrayBuffer(length),\n           arr = new Uint8Array(buff),\n           i;\n\n        for (i = 0; i < length; i += 1) {\n            arr[i] = str.charCodeAt(i);\n        }\n\n        return returnUInt8Array ? arr : buff;\n    }\n\n    function arrayBuffer2Utf8Str(buff) {\n        return String.fromCharCode.apply(null, new Uint8Array(buff));\n    }\n\n    function concatenateArrayBuffers(first, second, returnUInt8Array) {\n        var result = new Uint8Array(first.byteLength + second.byteLength);\n\n        result.set(new Uint8Array(first));\n        result.set(new Uint8Array(second), first.byteLength);\n\n        return returnUInt8Array ? result : result.buffer;\n    }\n\n    function hexToBinaryString(hex) {\n        var bytes = [],\n            length = hex.length,\n            x;\n\n        for (x = 0; x < length - 1; x += 2) {\n            bytes.push(parseInt(hex.substr(x, 2), 16));\n        }\n\n        return String.fromCharCode.apply(String, bytes);\n    }\n\n    // ---------------------------------------------------\n\n    /**\n     * SparkMD5 OOP implementation.\n     *\n     * Use this class to perform an incremental md5, otherwise use the\n     * static methods instead.\n     */\n\n    function SparkMD5() {\n        // call reset to init the instance\n        this.reset();\n    }\n\n    /**\n     * Appends a string.\n     * A conversion will be applied if an utf8 string is detected.\n     *\n     * @param {String} str The string to be appended\n     *\n     * @return {SparkMD5} The instance itself\n     */\n    SparkMD5.prototype.append = function (str) {\n        // Converts the string to utf8 bytes if necessary\n        // Then append as binary\n        this.appendBinary(toUtf8(str));\n\n        return this;\n    };\n\n    /**\n     * Appends a binary string.\n     *\n     * @param {String} contents The binary string to be appended\n     *\n     * @return {SparkMD5} The instance itself\n     */\n    SparkMD5.prototype.appendBinary = function (contents) {\n        this._buff += contents;\n        this._length += contents.length;\n\n        var length = this._buff.length,\n            i;\n\n        for (i = 64; i <= length; i += 64) {\n            md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n        }\n\n        this._buff = this._buff.substring(i - 64);\n\n        return this;\n    };\n\n    /**\n     * Finishes the incremental computation, reseting the internal state and\n     * returning the result.\n     *\n     * @param {Boolean} raw True to get the raw string, false to get the hex string\n     *\n     * @return {String} The result\n     */\n    SparkMD5.prototype.end = function (raw) {\n        var buff = this._buff,\n            length = buff.length,\n            i,\n            tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n            ret;\n\n        for (i = 0; i < length; i += 1) {\n            tail[i >> 2] |= buff.charCodeAt(i) << ((i % 4) << 3);\n        }\n\n        this._finish(tail, length);\n        ret = hex(this._hash);\n\n        if (raw) {\n            ret = hexToBinaryString(ret);\n        }\n\n        this.reset();\n\n        return ret;\n    };\n\n    /**\n     * Resets the internal state of the computation.\n     *\n     * @return {SparkMD5} The instance itself\n     */\n    SparkMD5.prototype.reset = function () {\n        this._buff = '';\n        this._length = 0;\n        this._hash = [1732584193, -271733879, -1732584194, 271733878];\n\n        return this;\n    };\n\n    /**\n     * Gets the internal state of the computation.\n     *\n     * @return {Object} The state\n     */\n    SparkMD5.prototype.getState = function () {\n        return {\n            buff: this._buff,\n            length: this._length,\n            hash: this._hash.slice()\n        };\n    };\n\n    /**\n     * Gets the internal state of the computation.\n     *\n     * @param {Object} state The state\n     *\n     * @return {SparkMD5} The instance itself\n     */\n    SparkMD5.prototype.setState = function (state) {\n        this._buff = state.buff;\n        this._length = state.length;\n        this._hash = state.hash;\n\n        return this;\n    };\n\n    /**\n     * Releases memory used by the incremental buffer and other additional\n     * resources. If you plan to use the instance again, use reset instead.\n     */\n    SparkMD5.prototype.destroy = function () {\n        delete this._hash;\n        delete this._buff;\n        delete this._length;\n    };\n\n    /**\n     * Finish the final calculation based on the tail.\n     *\n     * @param {Array}  tail   The tail (will be modified)\n     * @param {Number} length The length of the remaining buffer\n     */\n    SparkMD5.prototype._finish = function (tail, length) {\n        var i = length,\n            tmp,\n            lo,\n            hi;\n\n        tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n        if (i > 55) {\n            md5cycle(this._hash, tail);\n            for (i = 0; i < 16; i += 1) {\n                tail[i] = 0;\n            }\n        }\n\n        // Do the final computation based on the tail and length\n        // Beware that the final length may not fit in 32 bits so we take care of that\n        tmp = this._length * 8;\n        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n        lo = parseInt(tmp[2], 16);\n        hi = parseInt(tmp[1], 16) || 0;\n\n        tail[14] = lo;\n        tail[15] = hi;\n        md5cycle(this._hash, tail);\n    };\n\n    /**\n     * Performs the md5 hash on a string.\n     * A conversion will be applied if utf8 string is detected.\n     *\n     * @param {String}  str The string\n     * @param {Boolean} [raw] True to get the raw string, false to get the hex string\n     *\n     * @return {String} The result\n     */\n    SparkMD5.hash = function (str, raw) {\n        // Converts the string to utf8 bytes if necessary\n        // Then compute it using the binary function\n        return SparkMD5.hashBinary(toUtf8(str), raw);\n    };\n\n    /**\n     * Performs the md5 hash on a binary string.\n     *\n     * @param {String}  content The binary string\n     * @param {Boolean} [raw]     True to get the raw string, false to get the hex string\n     *\n     * @return {String} The result\n     */\n    SparkMD5.hashBinary = function (content, raw) {\n        var hash = md51(content),\n            ret = hex(hash);\n\n        return raw ? hexToBinaryString(ret) : ret;\n    };\n\n    // ---------------------------------------------------\n\n    /**\n     * SparkMD5 OOP implementation for array buffers.\n     *\n     * Use this class to perform an incremental md5 ONLY for array buffers.\n     */\n    SparkMD5.ArrayBuffer = function () {\n        // call reset to init the instance\n        this.reset();\n    };\n\n    /**\n     * Appends an array buffer.\n     *\n     * @param {ArrayBuffer} arr The array to be appended\n     *\n     * @return {SparkMD5.ArrayBuffer} The instance itself\n     */\n    SparkMD5.ArrayBuffer.prototype.append = function (arr) {\n        var buff = concatenateArrayBuffers(this._buff.buffer, arr, true),\n            length = buff.length,\n            i;\n\n        this._length += arr.byteLength;\n\n        for (i = 64; i <= length; i += 64) {\n            md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n        }\n\n        this._buff = (i - 64) < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n\n        return this;\n    };\n\n    /**\n     * Finishes the incremental computation, reseting the internal state and\n     * returning the result.\n     *\n     * @param {Boolean} raw True to get the raw string, false to get the hex string\n     *\n     * @return {String} The result\n     */\n    SparkMD5.ArrayBuffer.prototype.end = function (raw) {\n        var buff = this._buff,\n            length = buff.length,\n            tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n            i,\n            ret;\n\n        for (i = 0; i < length; i += 1) {\n            tail[i >> 2] |= buff[i] << ((i % 4) << 3);\n        }\n\n        this._finish(tail, length);\n        ret = hex(this._hash);\n\n        if (raw) {\n            ret = hexToBinaryString(ret);\n        }\n\n        this.reset();\n\n        return ret;\n    };\n\n    /**\n     * Resets the internal state of the computation.\n     *\n     * @return {SparkMD5.ArrayBuffer} The instance itself\n     */\n    SparkMD5.ArrayBuffer.prototype.reset = function () {\n        this._buff = new Uint8Array(0);\n        this._length = 0;\n        this._hash = [1732584193, -271733879, -1732584194, 271733878];\n\n        return this;\n    };\n\n    /**\n     * Gets the internal state of the computation.\n     *\n     * @return {Object} The state\n     */\n    SparkMD5.ArrayBuffer.prototype.getState = function () {\n        var state = SparkMD5.prototype.getState.call(this);\n\n        // Convert buffer to a string\n        state.buff = arrayBuffer2Utf8Str(state.buff);\n\n        return state;\n    };\n\n    /**\n     * Gets the internal state of the computation.\n     *\n     * @param {Object} state The state\n     *\n     * @return {SparkMD5.ArrayBuffer} The instance itself\n     */\n    SparkMD5.ArrayBuffer.prototype.setState = function (state) {\n        // Convert string to buffer\n        state.buff = utf8Str2ArrayBuffer(state.buff, true);\n\n        return SparkMD5.prototype.setState.call(this, state);\n    };\n\n    SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n\n    SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n\n    /**\n     * Performs the md5 hash on an array buffer.\n     *\n     * @param {ArrayBuffer} arr The array buffer\n     * @param {Boolean}     [raw] True to get the raw string, false to get the hex one\n     *\n     * @return {String} The result\n     */\n    SparkMD5.ArrayBuffer.hash = function (arr, raw) {\n        var hash = md51_array(new Uint8Array(arr)),\n            ret = hex(hash);\n\n        return raw ? hexToBinaryString(ret) : ret;\n    };\n\n    return SparkMD5;\n}));\n","export interface Chunk {\n  blob: Blob\n  hash: string\n  index: number\n  start: number\n  end: number\n}\n\nexport interface ChunkOptions {\n  chunkSize?: number\n  workerCount?: number\n}\n\nexport interface ProcessOptions {\n  concurrency?: number\n  maxRetries?: number\n  retryBaseDelayMs?: number\n  retryMaxDelayMs?: number\n  onProgress?: (completed: number, total: number) => void\n}\n\nexport type ChunkProcessor = (chunk: Chunk, signal: AbortSignal) => void | Promise<void>\n\nexport interface ProcessController {\n  pause: () => void\n  resume: () => void\n  cancel: () => void\n  readonly promise: Promise<void>\n}\n\nexport class CancellationError extends Error {\n  constructor(message = 'Task cancelled') {\n    super(message)\n    this.name = 'CancellationError'\n  }\n}\n\nexport class RetryExhaustedError extends Error {\n  readonly cause: unknown\n  readonly attempts: number\n\n  constructor(attempts: number, cause: unknown) {\n    const reason = cause instanceof Error ? cause.message : String(cause)\n    super(`Retry exhausted after ${attempts} attempts: ${reason}`)\n    this.name = 'RetryExhaustedError'\n    this.cause = cause\n    this.attempts = attempts\n  }\n}\n\nexport interface WorkerRequest {\n  start: number\n  end: number\n  chunkSize: number\n  file: File\n}\n\nexport type WorkerResponse\n  = | { type: 'chunk', index: number, start: number, end: number, hash: string }\n    | { type: 'error', index: number, message: string }\n","import { CancellationError, RetryExhaustedError } from './types'\n\nexport class TaskController {\n  private paused = false\n  private cancelled = false\n  private pauseResolvers = new Set<() => void>()\n  private delayHandles = new Set<{ cancel: () => void }>()\n  private abortController = new AbortController()\n\n  get signal(): AbortSignal {\n    return this.abortController.signal\n  }\n\n  get isCancelled(): boolean {\n    return this.cancelled\n  }\n\n  throwIfCancelled(): void {\n    if (this.cancelled)\n      throw new CancellationError()\n  }\n\n  async waitWhilePaused(): Promise<void> {\n    while (this.paused && !this.cancelled) {\n      await new Promise<void>((resolve) => {\n        this.pauseResolvers.add(resolve)\n      })\n    }\n    this.throwIfCancelled()\n  }\n\n  async delay(ms: number): Promise<void> {\n    if (ms <= 0)\n      return\n    await new Promise<void>((resolve) => {\n      let timer: ReturnType<typeof setTimeout>\n      const handle = {\n        cancel: () => {\n          clearTimeout(timer)\n          this.delayHandles.delete(handle)\n          resolve()\n        },\n      }\n      timer = setTimeout(() => {\n        this.delayHandles.delete(handle)\n        resolve()\n      }, ms)\n      this.delayHandles.add(handle)\n    })\n  }\n\n  pause(): void {\n    if (this.cancelled || this.paused)\n      return\n    this.paused = true\n  }\n\n  resume(): void {\n    if (!this.paused)\n      return\n    this.paused = false\n    const resolvers = [...this.pauseResolvers]\n    this.pauseResolvers.clear()\n    resolvers.forEach(resolve => resolve())\n  }\n\n  cancel(): void {\n    if (this.cancelled)\n      return\n    this.cancelled = true\n    this.paused = false\n    this.abortController.abort()\n    this.flushDelays()\n    const resolvers = [...this.pauseResolvers]\n    this.pauseResolvers.clear()\n    resolvers.forEach(resolve => resolve())\n  }\n\n  cleanup(): void {\n    this.flushDelays()\n    this.pauseResolvers.clear()\n  }\n\n  private flushDelays(): void {\n    const handles = [...this.delayHandles]\n    this.delayHandles.clear()\n    handles.forEach(h => h.cancel())\n  }\n}\n\nexport interface RetryOptions {\n  maxRetries: number\n  baseDelayMs: number\n  maxDelayMs: number\n}\n\nexport async function executeWithRetry<T>(\n  fn: () => Promise<T>,\n  controller: TaskController,\n  options: RetryOptions,\n): Promise<T> {\n  const { maxRetries, baseDelayMs, maxDelayMs } = options\n  let attempt = 0\n  let lastError: unknown\n\n  while (true) {\n    controller.throwIfCancelled()\n    await controller.waitWhilePaused()\n\n    try {\n      return await fn()\n    }\n    catch (error) {\n      if (error instanceof CancellationError)\n        throw error\n      if (controller.isCancelled)\n        throw new CancellationError()\n\n      lastError = error\n      if (attempt >= maxRetries)\n        throw new RetryExhaustedError(attempt + 1, lastError)\n\n      const backoff = Math.min(baseDelayMs * 2 ** attempt, maxDelayMs)\n      attempt++\n      await controller.delay(backoff)\n    }\n  }\n}\n","import type {\n  Chunk,\n  ChunkOptions,\n  ChunkProcessor,\n  ProcessController,\n  ProcessOptions,\n  WorkerRequest,\n  WorkerResponse,\n} from './types'\nimport SparkMD5 from 'spark-md5'\nimport { executeWithRetry, TaskController } from './task-executor'\nimport Worker from './worker?worker&inline'\n\nexport type {\n  Chunk,\n  ChunkOptions,\n  ChunkProcessor,\n  ProcessController,\n  ProcessOptions,\n}\nexport { CancellationError, RetryExhaustedError } from './types'\n\nconst DEFAULT_CHUNK_SIZE = 1024 * 1024\nconst DEFAULT_CONCURRENCY = 6\nconst DEFAULT_MAX_RETRIES = 3\nconst DEFAULT_RETRY_BASE_DELAY = 500\nconst DEFAULT_RETRY_MAX_DELAY = 5000\n\ninterface ChunkResolver {\n  resolve: (chunk: Chunk) => void\n  reject: (error: unknown) => void\n}\n\nfunction spawnWorker(\n  file: File,\n  request: WorkerRequest,\n  resolvers: Map<number, ChunkResolver>,\n): Worker {\n  const worker = new Worker()\n\n  worker.onmessage = ({ data }: MessageEvent<WorkerResponse>) => {\n    const resolver = resolvers.get(data.index)\n    if (!resolver)\n      return\n    resolvers.delete(data.index)\n\n    if (data.type === 'error') {\n      resolver.reject(new Error(`Failed to hash chunk #${data.index}: ${data.message}`))\n      return\n    }\n\n    resolver.resolve({\n      index: data.index,\n      start: data.start,\n      end: data.end,\n      hash: data.hash,\n      blob: file.slice(data.start, data.end),\n    })\n  }\n\n  worker.onerror = (event) => {\n    for (let i = request.start; i < request.end; i++) {\n      const resolver = resolvers.get(i)\n      if (resolver) {\n        resolvers.delete(i)\n        resolver.reject(new Error(`Worker error: ${event.message || 'unknown'}`))\n      }\n    }\n  }\n\n  worker.postMessage(request)\n  return worker\n}\n\nexport function chunkFile(file: File, options: ChunkOptions = {}): Promise<Chunk>[] {\n  if (!file || typeof file.size !== 'number' || typeof file.slice !== 'function')\n    throw new TypeError('chunkFile expects a File or Blob')\n  if (file.size === 0)\n    return []\n\n  const chunkSize = options.chunkSize ?? Math.min(DEFAULT_CHUNK_SIZE, file.size)\n  if (!Number.isFinite(chunkSize) || chunkSize <= 0)\n    throw new RangeError('chunkSize must be a positive number')\n\n  const totalChunks = Math.ceil(file.size / chunkSize)\n  const hardware = (typeof navigator !== 'undefined' && navigator.hardwareConcurrency) || 4\n  const workerCount = Math.max(1, Math.min(options.workerCount ?? hardware, totalChunks))\n\n  const resolvers = new Map<number, ChunkResolver>()\n  const promises = Array.from({ length: totalChunks }, (_, i) =>\n    new Promise<Chunk>((resolve, reject) => {\n      resolvers.set(i, { resolve, reject })\n    }))\n\n  const chunksPerWorker = Math.ceil(totalChunks / workerCount)\n  const workers: Worker[] = []\n  for (let i = 0; i < workerCount; i++) {\n    const start = i * chunksPerWorker\n    if (start >= totalChunks)\n      break\n    const end = Math.min(start + chunksPerWorker, totalChunks)\n    workers.push(spawnWorker(file, { file, chunkSize, start, end }, resolvers))\n  }\n\n  Promise.allSettled(promises).finally(() => {\n    workers.forEach(w => w.terminate())\n    resolvers.clear()\n  })\n\n  return promises\n}\n\nexport function processChunks(\n  chunkPromises: Promise<Chunk>[],\n  processor: ChunkProcessor,\n  options: ProcessOptions = {},\n): ProcessController {\n  const {\n    concurrency = DEFAULT_CONCURRENCY,\n    maxRetries = DEFAULT_MAX_RETRIES,\n    retryBaseDelayMs = DEFAULT_RETRY_BASE_DELAY,\n    retryMaxDelayMs = DEFAULT_RETRY_MAX_DELAY,\n    onProgress,\n  } = options\n\n  if (concurrency < 1)\n    throw new RangeError('concurrency must be >= 1')\n  if (maxRetries < 0)\n    throw new RangeError('maxRetries must be >= 0')\n\n  const controller = new TaskController()\n  const total = chunkPromises.length\n  const executing = new Set<Promise<void>>()\n  let completed = 0\n\n  const runOne = async (chunkPromise: Promise<Chunk>): Promise<void> => {\n    const chunk = await chunkPromise\n    await executeWithRetry(\n      () => Promise.resolve(processor(chunk, controller.signal)),\n      controller,\n      { maxRetries, baseDelayMs: retryBaseDelayMs, maxDelayMs: retryMaxDelayMs },\n    )\n    completed++\n    onProgress?.(completed, total)\n  }\n\n  const mainPromise = (async () => {\n    try {\n      for (const chunkPromise of chunkPromises) {\n        controller.throwIfCancelled()\n        await controller.waitWhilePaused()\n\n        const task = runOne(chunkPromise).finally(() => executing.delete(task))\n        executing.add(task)\n\n        if (executing.size >= concurrency)\n          await Promise.race([...executing].map(p => p.catch(() => undefined)))\n      }\n      await Promise.all(executing)\n    }\n    finally {\n      await Promise.allSettled(executing)\n      controller.cleanup()\n    }\n  })()\n\n  return {\n    pause: () => controller.pause(),\n    resume: () => controller.resume(),\n    cancel: () => controller.cancel(),\n    promise: mainPromise,\n  }\n}\n\nexport async function collectChunks(chunkPromises: Promise<Chunk>[]): Promise<Chunk[]> {\n  return Promise.all(chunkPromises)\n}\n\nexport async function calculateFileHash(chunkPromises: Promise<Chunk>[]): Promise<string> {\n  const hasher = new SparkMD5.ArrayBuffer()\n  for (const chunkPromise of chunkPromises) {\n    const chunk = await chunkPromise\n    const buffer = await chunk.blob.arrayBuffer()\n    hasher.append(buffer)\n  }\n  return hasher.end()\n}\n"],"names":["factory","module","undefined","hex_chr","md5cycle","x","k","a","b","c","d","md5blk","s","md5blks","i","md5blk_array","md51","n","state","length","tail","tmp","lo","hi","md51_array","rhex","j","hex","clamp","val","from","to","begin","end","num","target","targetArray","sourceArray","toUtf8","str","utf8Str2ArrayBuffer","returnUInt8Array","buff","arr","arrayBuffer2Utf8Str","concatenateArrayBuffers","first","second","result","hexToBinaryString","bytes","SparkMD5","contents","raw","ret","content","hash","CancellationError","message","RetryExhaustedError","attempts","cause","reason","__publicField","TaskController","resolve","ms","timer","handle","resolvers","handles","executeWithRetry","fn","controller","options","maxRetries","baseDelayMs","maxDelayMs","attempt","lastError","error","backoff","DEFAULT_CHUNK_SIZE","DEFAULT_CONCURRENCY","DEFAULT_MAX_RETRIES","DEFAULT_RETRY_BASE_DELAY","DEFAULT_RETRY_MAX_DELAY","spawnWorker","file","request","worker","Worker","data","resolver","event","chunkFile","chunkSize","_a","totalChunks","hardware","workerCount","_b","promises","_","reject","chunksPerWorker","workers","start","w","processChunks","chunkPromises","processor","concurrency","retryBaseDelayMs","retryMaxDelayMs","onProgress","total","executing","completed","runOne","chunkPromise","chunk","mainPromise","task","p","collectChunks","calculateFileHash","hasher","buffer"],"mappings":"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","x_google_ignoreList":[0]}