UNPKG

@aws-amplify/storage

Version:

Storage category of aws-amplify

1 lines 4.23 kB
{"version":3,"file":"crc32.mjs","sources":["../../../../src/foundation/utils/crc32.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport crc32 from 'crc-32';\nconst CHUNK_SIZE = 1024 * 1024; // 1MB chunks\n/**\n * Convert a hex string to base64 using the injected `toBase64` from the\n * foundation context.\n */\nconst hexToBase64 = (hex, toBase64) => {\n const bytes = new Uint8Array((hex.match(/\\w{2}/g) ?? []).map(h => parseInt(h, 16)));\n return toBase64(bytes);\n};\n/**\n * Calculate the CRC32 checksum for given content and return base64 encoded\n * checksum. Environment-specific dependencies (`readFile`, `toBase64`) are\n * injected via the {@link FoundationContext} so the foundation layer stays\n * free of any environment-discriminating logic.\n */\nexport const calculateContentCRC32 = async (ctx, content, seed = 0) => {\n let internalSeed = seed;\n if (content instanceof ArrayBuffer || ArrayBuffer.isView(content)) {\n let uint8Array;\n if (content instanceof ArrayBuffer) {\n uint8Array = new Uint8Array(content);\n }\n else {\n uint8Array = new Uint8Array(content.buffer, content.byteOffset, content.byteLength);\n }\n let offset = 0;\n while (offset < uint8Array.length) {\n const end = Math.min(offset + CHUNK_SIZE, uint8Array.length);\n const chunk = uint8Array.slice(offset, end);\n internalSeed = crc32.buf(chunk, internalSeed) >>> 0;\n offset = end;\n }\n }\n else {\n let blob;\n if (content instanceof Blob) {\n blob = content;\n }\n else {\n blob = new Blob([content]);\n }\n let offset = 0;\n while (offset < blob.size) {\n const end = Math.min(offset + CHUNK_SIZE, blob.size);\n const chunk = blob.slice(offset, end);\n const arrayBuffer = await ctx.readFile(chunk);\n const uint8Array = new Uint8Array(arrayBuffer);\n internalSeed = crc32.buf(uint8Array, internalSeed) >>> 0;\n offset = end;\n }\n }\n const hex = internalSeed.toString(16).padStart(8, '0');\n return hexToBase64(hex, ctx.toBase64);\n};\n"],"names":[],"mappings":";;AAAA;AACA;AAEA,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC;AAC/B;AACA;AACA;AACA;AACA,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,QAAQ,KAAK;AACvC,IAAI,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACvF,IAAI,OAAO,QAAQ,CAAC,KAAK,CAAC;AAC1B,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,qBAAqB,GAAG,OAAO,GAAG,EAAE,OAAO,EAAE,IAAI,GAAG,CAAC,KAAK;AACvE,IAAI,IAAI,YAAY,GAAG,IAAI;AAC3B,IAAI,IAAI,OAAO,YAAY,WAAW,IAAI,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;AACvE,QAAQ,IAAI,UAAU;AACtB,QAAQ,IAAI,OAAO,YAAY,WAAW,EAAE;AAC5C,YAAY,UAAU,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC;AAChD,QAAQ;AACR,aAAa;AACb,YAAY,UAAU,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC;AAC/F,QAAQ;AACR,QAAQ,IAAI,MAAM,GAAG,CAAC;AACtB,QAAQ,OAAO,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE;AAC3C,YAAY,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC;AACxE,YAAY,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC;AACvD,YAAY,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC;AAC/D,YAAY,MAAM,GAAG,GAAG;AACxB,QAAQ;AACR,IAAI;AACJ,SAAS;AACT,QAAQ,IAAI,IAAI;AAChB,QAAQ,IAAI,OAAO,YAAY,IAAI,EAAE;AACrC,YAAY,IAAI,GAAG,OAAO;AAC1B,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;AACtC,QAAQ;AACR,QAAQ,IAAI,MAAM,GAAG,CAAC;AACtB,QAAQ,OAAO,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE;AACnC,YAAY,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC;AAChE,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC;AACjD,YAAY,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;AACzD,YAAY,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC;AAC1D,YAAY,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,KAAK,CAAC;AACpE,YAAY,MAAM,GAAG,GAAG;AACxB,QAAQ;AACR,IAAI;AACJ,IAAI,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAC1D,IAAI,OAAO,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC;AACzC;;;;"}