UNPKG

1.95 kBJavaScriptView Raw
1import { Buffer } from 'buffer';
2import { Md5 } from '@smithy/md5-js';
3import '@aws-amplify/core/internals/aws-client-utils';
4import './client/runtime/s3TransferHandler/fetch.mjs';
5import 'fast-xml-parser';
6import './client/runtime/s3TransferHandler/xhr.mjs';
7import { toBase64 } from './client/runtime/base64/index.native.mjs';
8import '@aws-amplify/core/internals/utils';
9
10// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
11// SPDX-License-Identifier: Apache-2.0
12// The FileReader in React Native 0.71 did not support `readAsArrayBuffer`. This native implementation accomodates this
13// by attempting to use `readAsArrayBuffer` and changing the file reading strategy if it throws an error.
14// TODO: This file should be removable when we drop support for React Native 0.71
15const calculateContentMd5 = async (content) => {
16 const hasher = new Md5();
17 const buffer = content instanceof Blob ? await readFile(content) : content;
18 hasher.update(buffer);
19 const digest = await hasher.digest();
20 return toBase64(digest);
21};
22const readFile = (file) => new Promise((resolve, reject) => {
23 const reader = new FileReader();
24 reader.onload = () => {
25 resolve(reader.result);
26 };
27 reader.onabort = () => {
28 reject(new Error('Read aborted'));
29 };
30 reader.onerror = () => {
31 reject(reader.error);
32 };
33 try {
34 reader.readAsArrayBuffer(file);
35 }
36 catch (e) {
37 reader.onload = () => {
38 // reference: https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL
39 // response from readAsDataURL is always prepended with "data:*/*;base64,"
40 const [, base64Data] = reader.result.split(',');
41 const arrayBuffer = Buffer.from(base64Data, 'base64');
42 resolve(arrayBuffer);
43 };
44 reader.readAsDataURL(file);
45 }
46});
47
48export { calculateContentMd5 };
49//# sourceMappingURL=md5.native.mjs.map