@atlaskit/media-client 20.0.0 → 20.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/dist/cjs/client/collection-fetcher.js +4 -44
- package/dist/cjs/client/file-fetcher/error.js +3 -19
- package/dist/cjs/client/file-fetcher/index.js +152 -167
- package/dist/cjs/client/media-client.js +3 -27
- package/dist/cjs/client/media-store/error.js +1 -17
- package/dist/cjs/client/media-store/index.js +13 -103
- package/dist/cjs/client/media-store/resolveAuth.js +2 -23
- package/dist/cjs/client/mobile-upload.js +9 -22
- package/dist/cjs/client/stargate-client.js +0 -12
- package/dist/cjs/constants.js +0 -3
- package/dist/cjs/file-streams-cache.js +0 -11
- package/dist/cjs/globalMediaEventEmitter.js +0 -3
- package/dist/cjs/identifier.js +0 -8
- package/dist/cjs/index.js +0 -38
- package/dist/cjs/models/artifacts.js +0 -4
- package/dist/cjs/models/auth-headers.js +0 -2
- package/dist/cjs/models/auth-query-parameters.js +0 -2
- package/dist/cjs/models/errors/helpers.js +0 -2
- package/dist/cjs/models/errors/index.js +4 -20
- package/dist/cjs/models/file-state.js +10 -36
- package/dist/cjs/models/media.js +2 -8
- package/dist/cjs/upload-controller.js +0 -6
- package/dist/cjs/uploader/calculateChunkSize.js +1 -10
- package/dist/cjs/uploader/error.js +3 -19
- package/dist/cjs/uploader/index.js +3 -43
- package/dist/cjs/utils/checkWebpSupport.js +3 -7
- package/dist/cjs/utils/convertBase64ToBlob.js +0 -5
- package/dist/cjs/utils/createFileDataLoader.js +4 -28
- package/dist/cjs/utils/createMediaSubject.js +0 -4
- package/dist/cjs/utils/detectEmptyFile.js +8 -15
- package/dist/cjs/utils/getDimensionsFromBlob.js +0 -14
- package/dist/cjs/utils/getImageDimensionsFromBlob.js +0 -4
- package/dist/cjs/utils/getMediaTypeFromUploadableFile.js +0 -3
- package/dist/cjs/utils/getVideoDimensionsFromBlob.js +2 -8
- package/dist/cjs/utils/hashing/hasherCreator.js +0 -20
- package/dist/cjs/utils/hashing/simpleHasher.js +0 -12
- package/dist/cjs/utils/hashing/workerHasher.js +3 -24
- package/dist/cjs/utils/imageResizeModeToFileImageMode.js +0 -2
- package/dist/cjs/utils/isImageRemote.js +0 -5
- package/dist/cjs/utils/mediaSubscribable/fromObservable.js +2 -4
- package/dist/cjs/utils/mediaSubscribable/index.js +0 -2
- package/dist/cjs/utils/mediaSubscribable/toPromise.js +1 -3
- package/dist/cjs/utils/mobileUpload/error.js +3 -19
- package/dist/cjs/utils/mobileUpload/helpers.js +2 -26
- package/dist/cjs/utils/mobileUpload/index.js +0 -4
- package/dist/cjs/utils/mobileUpload/servicesCache.js +0 -2
- package/dist/cjs/utils/mobileUpload/stateMachine/index.js +0 -22
- package/dist/cjs/utils/mobileUpload/stateMachine/states/processing.js +0 -2
- package/dist/cjs/utils/mobileUpload/stateMachine/states/uploading.js +0 -7
- package/dist/cjs/utils/overrideMediaTypeIfUnknown.js +0 -4
- package/dist/cjs/utils/polling/errors.js +1 -17
- package/dist/cjs/utils/polling/index.js +1 -30
- package/dist/cjs/utils/request/errors.js +8 -24
- package/dist/cjs/utils/request/helpers.js +19 -103
- package/dist/cjs/utils/request/index.js +15 -26
- package/dist/cjs/utils/safeUnsubscribe.js +0 -2
- package/dist/cjs/utils/setTimeoutPromise.js +0 -4
- package/dist/cjs/utils/shouldFetchRemoteFileStates.js +0 -21
- package/dist/cjs/utils/url.js +4 -27
- package/dist/cjs/utils/with-media-client-hoc.js +12 -28
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/client/collection-fetcher.js +6 -18
- package/dist/es2019/client/file-fetcher/error.js +0 -2
- package/dist/es2019/client/file-fetcher/index.js +138 -70
- package/dist/es2019/client/media-client.js +4 -14
- package/dist/es2019/client/media-store/error.js +0 -2
- package/dist/es2019/client/media-store/index.js +37 -52
- package/dist/es2019/client/media-store/resolveAuth.js +1 -5
- package/dist/es2019/client/mobile-upload.js +0 -8
- package/dist/es2019/client/stargate-client.js +0 -3
- package/dist/es2019/constants.js +0 -1
- package/dist/es2019/file-streams-cache.js +0 -11
- package/dist/es2019/globalMediaEventEmitter.js +0 -4
- package/dist/es2019/index.js +4 -11
- package/dist/es2019/models/artifacts.js +0 -2
- package/dist/es2019/models/errors/index.js +5 -4
- package/dist/es2019/models/file-state.js +6 -7
- package/dist/es2019/models/media.js +2 -3
- package/dist/es2019/upload-controller.js +0 -3
- package/dist/es2019/uploader/calculateChunkSize.js +1 -4
- package/dist/es2019/uploader/error.js +0 -2
- package/dist/es2019/uploader/index.js +0 -13
- package/dist/es2019/utils/checkWebpSupport.js +3 -4
- package/dist/es2019/utils/convertBase64ToBlob.js +0 -2
- package/dist/es2019/utils/createFileDataLoader.js +6 -9
- package/dist/es2019/utils/createMediaSubject.js +0 -2
- package/dist/es2019/utils/detectEmptyFile.js +1 -5
- package/dist/es2019/utils/getDimensionsFromBlob.js +0 -3
- package/dist/es2019/utils/getImageDimensionsFromBlob.js +0 -2
- package/dist/es2019/utils/getVideoDimensionsFromBlob.js +2 -1
- package/dist/es2019/utils/hashing/hasherCreator.js +0 -2
- package/dist/es2019/utils/hashing/simpleHasher.js +0 -3
- package/dist/es2019/utils/hashing/workerHasher.js +1 -16
- package/dist/es2019/utils/isImageRemote.js +0 -2
- package/dist/es2019/utils/mediaSubscribable/fromObservable.js +2 -1
- package/dist/es2019/utils/mediaSubscribable/toPromise.js +1 -1
- package/dist/es2019/utils/mobileUpload/error.js +0 -2
- package/dist/es2019/utils/mobileUpload/helpers.js +2 -7
- package/dist/es2019/utils/mobileUpload/stateMachine/index.js +0 -2
- package/dist/es2019/utils/mobileUpload/stateMachine/states/uploading.js +2 -1
- package/dist/es2019/utils/overrideMediaTypeIfUnknown.js +0 -1
- package/dist/es2019/utils/polling/errors.js +0 -2
- package/dist/es2019/utils/polling/index.js +3 -20
- package/dist/es2019/utils/request/errors.js +0 -2
- package/dist/es2019/utils/request/helpers.js +24 -35
- package/dist/es2019/utils/request/index.js +2 -2
- package/dist/es2019/utils/shouldFetchRemoteFileStates.js +1 -5
- package/dist/es2019/utils/url.js +6 -14
- package/dist/es2019/utils/with-media-client-hoc.js +10 -7
- package/dist/es2019/version.json +1 -1
- package/dist/esm/client/collection-fetcher.js +4 -34
- package/dist/esm/client/file-fetcher/error.js +3 -12
- package/dist/esm/client/file-fetcher/index.js +154 -137
- package/dist/esm/client/media-client.js +4 -17
- package/dist/esm/client/media-store/error.js +1 -10
- package/dist/esm/client/media-store/index.js +13 -89
- package/dist/esm/client/media-store/resolveAuth.js +2 -13
- package/dist/esm/client/mobile-upload.js +9 -15
- package/dist/esm/client/stargate-client.js +0 -7
- package/dist/esm/constants.js +0 -1
- package/dist/esm/file-streams-cache.js +0 -6
- package/dist/esm/globalMediaEventEmitter.js +0 -1
- package/dist/esm/index.js +4 -11
- package/dist/esm/models/artifacts.js +0 -2
- package/dist/esm/models/errors/index.js +5 -12
- package/dist/esm/models/file-state.js +10 -17
- package/dist/esm/models/media.js +2 -3
- package/dist/esm/upload-controller.js +0 -2
- package/dist/esm/uploader/calculateChunkSize.js +1 -4
- package/dist/esm/uploader/error.js +3 -12
- package/dist/esm/uploader/index.js +3 -32
- package/dist/esm/utils/checkWebpSupport.js +3 -4
- package/dist/esm/utils/convertBase64ToBlob.js +0 -3
- package/dist/esm/utils/createFileDataLoader.js +4 -18
- package/dist/esm/utils/createMediaSubject.js +0 -2
- package/dist/esm/utils/detectEmptyFile.js +8 -12
- package/dist/esm/utils/getDimensionsFromBlob.js +0 -7
- package/dist/esm/utils/getImageDimensionsFromBlob.js +0 -2
- package/dist/esm/utils/getVideoDimensionsFromBlob.js +2 -3
- package/dist/esm/utils/hashing/hasherCreator.js +0 -9
- package/dist/esm/utils/hashing/simpleHasher.js +0 -4
- package/dist/esm/utils/hashing/workerHasher.js +3 -18
- package/dist/esm/utils/isImageRemote.js +0 -3
- package/dist/esm/utils/mediaSubscribable/fromObservable.js +2 -1
- package/dist/esm/utils/mediaSubscribable/toPromise.js +1 -1
- package/dist/esm/utils/mobileUpload/error.js +3 -12
- package/dist/esm/utils/mobileUpload/helpers.js +2 -11
- package/dist/esm/utils/mobileUpload/stateMachine/index.js +0 -6
- package/dist/esm/utils/mobileUpload/stateMachine/states/uploading.js +0 -3
- package/dist/esm/utils/overrideMediaTypeIfUnknown.js +0 -1
- package/dist/esm/utils/polling/errors.js +1 -10
- package/dist/esm/utils/polling/index.js +1 -27
- package/dist/esm/utils/request/errors.js +8 -17
- package/dist/esm/utils/request/helpers.js +22 -76
- package/dist/esm/utils/request/index.js +15 -20
- package/dist/esm/utils/shouldFetchRemoteFileStates.js +1 -15
- package/dist/esm/utils/url.js +4 -18
- package/dist/esm/utils/with-media-client-hoc.js +12 -17
- package/dist/esm/version.json +1 -1
- package/dist/types/client/file-fetcher/index.d.ts +6 -2
- package/package.json +8 -6
- package/report.api.md +4 -1
|
@@ -3,7 +3,6 @@ export var convertBase64ToBlob = function convertBase64ToBlob(base64) {
|
|
|
3
3
|
var base64Data = base64.split(',')[1];
|
|
4
4
|
var byteCharacters = atob(base64Data);
|
|
5
5
|
var byteArrays = [];
|
|
6
|
-
|
|
7
6
|
var _loop = function _loop(offset) {
|
|
8
7
|
var slice = byteCharacters.slice(offset, offset + sliceSize);
|
|
9
8
|
var byteNumbers = slice.split('').map(function (_, i) {
|
|
@@ -12,11 +11,9 @@ export var convertBase64ToBlob = function convertBase64ToBlob(base64) {
|
|
|
12
11
|
var byteArray = new Uint8Array(byteNumbers);
|
|
13
12
|
byteArrays.push(byteArray);
|
|
14
13
|
};
|
|
15
|
-
|
|
16
14
|
for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
|
|
17
15
|
_loop(offset);
|
|
18
16
|
}
|
|
19
|
-
|
|
20
17
|
return new Blob(byteArrays, {
|
|
21
18
|
type: 'image/jpeg'
|
|
22
19
|
});
|
|
@@ -2,30 +2,24 @@ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
|
2
2
|
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
3
3
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
4
4
|
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
5
|
-
|
|
6
5
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
7
|
-
|
|
8
6
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
9
|
-
|
|
10
7
|
// import setimmediate to temporary fix dataloader 2.0.0 bug
|
|
11
8
|
// @see https://github.com/graphql/dataloader/issues/249
|
|
12
9
|
import 'setimmediate';
|
|
13
10
|
import Dataloader from 'dataloader';
|
|
14
11
|
import { getRandomHex } from '@atlaskit/media-common';
|
|
15
12
|
export var MAX_BATCH_SIZE = 100;
|
|
16
|
-
|
|
17
13
|
var isBatchLoadingErrorResult = function isBatchLoadingErrorResult(result) {
|
|
18
14
|
return result.error instanceof Error;
|
|
19
15
|
};
|
|
20
|
-
|
|
21
16
|
var makeCacheKey = function makeCacheKey(id, collection) {
|
|
22
17
|
return collection ? "".concat(id, "-").concat(collection) : id;
|
|
23
18
|
};
|
|
24
|
-
|
|
25
19
|
export var getItemsFromKeys = function getItemsFromKeys(dataloaderKeys, fileItems) {
|
|
26
20
|
var itemsByKey = fileItems.reduce(function (prev, fileItem) {
|
|
27
21
|
var id = fileItem.id,
|
|
28
|
-
|
|
22
|
+
collection = fileItem.collection;
|
|
29
23
|
var key = makeCacheKey(id, collection);
|
|
30
24
|
prev[key] = isBatchLoadingErrorResult(fileItem) ? fileItem.error : _objectSpread(_objectSpread({}, fileItem.details), {}, {
|
|
31
25
|
metadataTraceContext: fileItem.metadataTraceContext
|
|
@@ -34,12 +28,11 @@ export var getItemsFromKeys = function getItemsFromKeys(dataloaderKeys, fileItem
|
|
|
34
28
|
}, {});
|
|
35
29
|
return dataloaderKeys.map(function (dataloaderKey) {
|
|
36
30
|
var id = dataloaderKey.id,
|
|
37
|
-
|
|
31
|
+
collectionName = dataloaderKey.collectionName;
|
|
38
32
|
var key = makeCacheKey(id, collectionName);
|
|
39
33
|
return itemsByKey[key] || null;
|
|
40
34
|
});
|
|
41
35
|
};
|
|
42
|
-
|
|
43
36
|
/**
|
|
44
37
|
* Returns a function that, given Array<DataloaderKey>, resolves to an array of same length containing either DataloaderResult or Error.
|
|
45
38
|
* Such contract is formalised by Dataloader 1.0, @see https://github.com/graphql/dataloader
|
|
@@ -60,12 +53,12 @@ export function createBatchLoadingFunc(mediaStore) {
|
|
|
60
53
|
nonCollectionName = '__media-single-file-collection__';
|
|
61
54
|
fileIdsByCollection = keys.reduce(function (acc, key) {
|
|
62
55
|
var collectionName = key.collectionName || nonCollectionName;
|
|
63
|
-
var fileIds = acc[collectionName] || [];
|
|
56
|
+
var fileIds = acc[collectionName] || [];
|
|
64
57
|
|
|
58
|
+
// de-duplicate ids in collection
|
|
65
59
|
if (fileIds.indexOf(key.id) === -1) {
|
|
66
60
|
fileIds.push(key.id);
|
|
67
61
|
}
|
|
68
|
-
|
|
69
62
|
acc[collectionName] = fileIds;
|
|
70
63
|
return acc;
|
|
71
64
|
}, {});
|
|
@@ -87,7 +80,6 @@ export function createBatchLoadingFunc(mediaStore) {
|
|
|
87
80
|
_context.prev = 3;
|
|
88
81
|
_context.next = 6;
|
|
89
82
|
return mediaStore.getItems(fileIds, collectionName, metadataTraceContext);
|
|
90
|
-
|
|
91
83
|
case 6:
|
|
92
84
|
response = _context.sent;
|
|
93
85
|
itemsWithMetadataTraceContext = response.data.items.map(function (item) {
|
|
@@ -98,7 +90,6 @@ export function createBatchLoadingFunc(mediaStore) {
|
|
|
98
90
|
items.push.apply(items, _toConsumableArray(itemsWithMetadataTraceContext));
|
|
99
91
|
_context.next = 14;
|
|
100
92
|
break;
|
|
101
|
-
|
|
102
93
|
case 11:
|
|
103
94
|
_context.prev = 11;
|
|
104
95
|
_context.t0 = _context["catch"](3);
|
|
@@ -109,7 +100,6 @@ export function createBatchLoadingFunc(mediaStore) {
|
|
|
109
100
|
error: _context.t0
|
|
110
101
|
});
|
|
111
102
|
});
|
|
112
|
-
|
|
113
103
|
case 14:
|
|
114
104
|
case "end":
|
|
115
105
|
return _context.stop();
|
|
@@ -117,15 +107,12 @@ export function createBatchLoadingFunc(mediaStore) {
|
|
|
117
107
|
}
|
|
118
108
|
}, _callee, null, [[3, 11]]);
|
|
119
109
|
}));
|
|
120
|
-
|
|
121
110
|
return function (_x2) {
|
|
122
111
|
return _ref2.apply(this, arguments);
|
|
123
112
|
};
|
|
124
113
|
}()));
|
|
125
|
-
|
|
126
114
|
case 5:
|
|
127
115
|
return _context2.abrupt("return", getItemsFromKeys(keys, items));
|
|
128
|
-
|
|
129
116
|
case 6:
|
|
130
117
|
case "end":
|
|
131
118
|
return _context2.stop();
|
|
@@ -133,7 +120,6 @@ export function createBatchLoadingFunc(mediaStore) {
|
|
|
133
120
|
}
|
|
134
121
|
}, _callee2);
|
|
135
122
|
}));
|
|
136
|
-
|
|
137
123
|
return function (_x) {
|
|
138
124
|
return _ref.apply(this, arguments);
|
|
139
125
|
};
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { ReplaySubject } from 'rxjs/ReplaySubject';
|
|
2
2
|
export function createMediaSubject(initialState) {
|
|
3
3
|
var subject = new ReplaySubject(1);
|
|
4
|
-
|
|
5
4
|
if (initialState instanceof Error) {
|
|
6
5
|
subject.error(initialState);
|
|
7
6
|
} else if (initialState) {
|
|
8
7
|
subject.next(initialState);
|
|
9
8
|
}
|
|
10
|
-
|
|
11
9
|
return subject;
|
|
12
10
|
}
|
|
@@ -11,27 +11,23 @@
|
|
|
11
11
|
*
|
|
12
12
|
* Being encapsulated in this function, we can always improve the detection transparently.
|
|
13
13
|
*/
|
|
14
|
-
export var EMPTY_FILE_HOURS_ELAPSED_TOLERANCE_MS = 12 * 1000 * 60 * 60;
|
|
15
|
-
/* 12 hours */
|
|
14
|
+
export var EMPTY_FILE_HOURS_ELAPSED_TOLERANCE_MS = 12 * 1000 * 60 * 60; /* 12 hours */
|
|
16
15
|
|
|
17
16
|
export function isEmptyFile(fileDetails) {
|
|
18
17
|
var now = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Date.now();
|
|
19
18
|
var artifacts = fileDetails.artifacts,
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
19
|
+
mediaType = fileDetails.mediaType,
|
|
20
|
+
mimeType = fileDetails.mimeType,
|
|
21
|
+
name = fileDetails.name,
|
|
22
|
+
processingStatus = fileDetails.processingStatus,
|
|
23
|
+
representations = fileDetails.representations,
|
|
24
|
+
size = fileDetails.size,
|
|
25
|
+
createdAt = fileDetails.createdAt;
|
|
28
26
|
if (!artifacts && !mediaType && !mimeType && !name && !processingStatus && !representations && !size && typeof createdAt === 'number') {
|
|
29
27
|
var msSinceFileCreation = now - createdAt;
|
|
30
|
-
|
|
31
28
|
if (msSinceFileCreation > EMPTY_FILE_HOURS_ELAPSED_TOLERANCE_MS) {
|
|
32
29
|
return true;
|
|
33
30
|
}
|
|
34
31
|
}
|
|
35
|
-
|
|
36
32
|
return false;
|
|
37
33
|
}
|
|
@@ -12,27 +12,21 @@ export var getDimensionsFromBlob = /*#__PURE__*/function () {
|
|
|
12
12
|
_context.t0 = mediaType;
|
|
13
13
|
_context.next = _context.t0 === 'image' ? 3 : _context.t0 === 'video' ? 11 : 12;
|
|
14
14
|
break;
|
|
15
|
-
|
|
16
15
|
case 3:
|
|
17
16
|
url = URL.createObjectURL(blob);
|
|
18
17
|
_context.prev = 4;
|
|
19
18
|
_context.next = 7;
|
|
20
19
|
return getImageDimensionsFromBlob(url);
|
|
21
|
-
|
|
22
20
|
case 7:
|
|
23
21
|
return _context.abrupt("return", _context.sent);
|
|
24
|
-
|
|
25
22
|
case 8:
|
|
26
23
|
_context.prev = 8;
|
|
27
24
|
URL.revokeObjectURL(url);
|
|
28
25
|
return _context.finish(8);
|
|
29
|
-
|
|
30
26
|
case 11:
|
|
31
27
|
return _context.abrupt("return", getVideoDimensionsFromBlob(blob));
|
|
32
|
-
|
|
33
28
|
case 12:
|
|
34
29
|
throw new Error("Can't extract dimensions from ".concat(mediaType));
|
|
35
|
-
|
|
36
30
|
case 13:
|
|
37
31
|
case "end":
|
|
38
32
|
return _context.stop();
|
|
@@ -40,7 +34,6 @@ export var getDimensionsFromBlob = /*#__PURE__*/function () {
|
|
|
40
34
|
}
|
|
41
35
|
}, _callee, null, [[4,, 8, 11]]);
|
|
42
36
|
}));
|
|
43
|
-
|
|
44
37
|
return function getDimensionsFromBlob(_x, _x2) {
|
|
45
38
|
return _ref.apply(this, arguments);
|
|
46
39
|
};
|
|
@@ -2,14 +2,12 @@ export var getImageDimensionsFromBlob = function getImageDimensionsFromBlob(url)
|
|
|
2
2
|
return new Promise(function (resolve, reject) {
|
|
3
3
|
var img = new Image();
|
|
4
4
|
img.src = url;
|
|
5
|
-
|
|
6
5
|
img.onload = function () {
|
|
7
6
|
return resolve({
|
|
8
7
|
width: img.width,
|
|
9
8
|
height: img.height
|
|
10
9
|
});
|
|
11
10
|
};
|
|
12
|
-
|
|
13
11
|
img.onerror = reject;
|
|
14
12
|
});
|
|
15
13
|
};
|
|
@@ -11,8 +11,9 @@ export var getVideoDimensionsFromBlob = /*#__PURE__*/function () {
|
|
|
11
11
|
var video = document.createElement('video');
|
|
12
12
|
video.preload = 'metadata';
|
|
13
13
|
video.src = url;
|
|
14
|
-
video.muted = true;
|
|
14
|
+
video.muted = true;
|
|
15
15
|
|
|
16
|
+
// loadedmetadata, loadeddata, play, playing
|
|
16
17
|
video.addEventListener('loadedmetadata', function timeupdateHandler() {
|
|
17
18
|
video.removeEventListener('loadedmetadata', timeupdateHandler);
|
|
18
19
|
resolve({
|
|
@@ -26,7 +27,6 @@ export var getVideoDimensionsFromBlob = /*#__PURE__*/function () {
|
|
|
26
27
|
URL.revokeObjectURL(url);
|
|
27
28
|
});
|
|
28
29
|
}));
|
|
29
|
-
|
|
30
30
|
case 1:
|
|
31
31
|
case "end":
|
|
32
32
|
return _context.stop();
|
|
@@ -34,7 +34,6 @@ export var getVideoDimensionsFromBlob = /*#__PURE__*/function () {
|
|
|
34
34
|
}
|
|
35
35
|
}, _callee);
|
|
36
36
|
}));
|
|
37
|
-
|
|
38
37
|
return function getVideoDimensionsFromBlob(_x) {
|
|
39
38
|
return _ref.apply(this, arguments);
|
|
40
39
|
};
|
|
@@ -7,43 +7,35 @@ export var destroyHasher = function destroyHasher() {
|
|
|
7
7
|
export var createHasher = /*#__PURE__*/function () {
|
|
8
8
|
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
9
9
|
var numWorkers, _yield$import, WorkerHasher, _yield$import2, SimpleHasher;
|
|
10
|
-
|
|
11
10
|
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
12
11
|
while (1) {
|
|
13
12
|
switch (_context.prev = _context.next) {
|
|
14
13
|
case 0:
|
|
15
14
|
numWorkers = 3;
|
|
16
|
-
|
|
17
15
|
if (hasher) {
|
|
18
16
|
_context.next = 17;
|
|
19
17
|
break;
|
|
20
18
|
}
|
|
21
|
-
|
|
22
19
|
_context.prev = 2;
|
|
23
20
|
_context.next = 5;
|
|
24
21
|
return import('./workerHasher');
|
|
25
|
-
|
|
26
22
|
case 5:
|
|
27
23
|
_yield$import = _context.sent;
|
|
28
24
|
WorkerHasher = _yield$import.WorkerHasher;
|
|
29
25
|
hasher = new WorkerHasher(numWorkers);
|
|
30
26
|
_context.next = 17;
|
|
31
27
|
break;
|
|
32
|
-
|
|
33
28
|
case 10:
|
|
34
29
|
_context.prev = 10;
|
|
35
30
|
_context.t0 = _context["catch"](2);
|
|
36
31
|
_context.next = 14;
|
|
37
32
|
return import('./simpleHasher');
|
|
38
|
-
|
|
39
33
|
case 14:
|
|
40
34
|
_yield$import2 = _context.sent;
|
|
41
35
|
SimpleHasher = _yield$import2.SimpleHasher;
|
|
42
36
|
hasher = new SimpleHasher();
|
|
43
|
-
|
|
44
37
|
case 17:
|
|
45
38
|
return _context.abrupt("return", hasher);
|
|
46
|
-
|
|
47
39
|
case 18:
|
|
48
40
|
case "end":
|
|
49
41
|
return _context.stop();
|
|
@@ -51,7 +43,6 @@ export var createHasher = /*#__PURE__*/function () {
|
|
|
51
43
|
}
|
|
52
44
|
}, _callee, null, [[2, 10]]);
|
|
53
45
|
}));
|
|
54
|
-
|
|
55
46
|
return function createHasher() {
|
|
56
47
|
return _ref.apply(this, arguments);
|
|
57
48
|
};
|
|
@@ -5,22 +5,18 @@ export var SimpleHasher = /*#__PURE__*/function () {
|
|
|
5
5
|
function SimpleHasher() {
|
|
6
6
|
_classCallCheck(this, SimpleHasher);
|
|
7
7
|
}
|
|
8
|
-
|
|
9
8
|
_createClass(SimpleHasher, [{
|
|
10
9
|
key: "hash",
|
|
11
10
|
value: function hash(blob) {
|
|
12
11
|
return new Promise(function (resolve, reject) {
|
|
13
12
|
var reader = new FileReader();
|
|
14
13
|
reader.readAsArrayBuffer(blob);
|
|
15
|
-
|
|
16
14
|
reader.onload = function () {
|
|
17
15
|
resolve(Rusha.createHash().update(reader.result).digest('hex'));
|
|
18
16
|
};
|
|
19
|
-
|
|
20
17
|
reader.onerror = reject;
|
|
21
18
|
});
|
|
22
19
|
}
|
|
23
20
|
}]);
|
|
24
|
-
|
|
25
21
|
return SimpleHasher;
|
|
26
22
|
}();
|
|
@@ -6,16 +6,12 @@ import Rusha from 'rusha';
|
|
|
6
6
|
export var WorkerHasher = /*#__PURE__*/function () {
|
|
7
7
|
function WorkerHasher(numOfWorkers) {
|
|
8
8
|
_classCallCheck(this, WorkerHasher);
|
|
9
|
-
|
|
10
9
|
_defineProperty(this, "workers", []);
|
|
11
|
-
|
|
12
10
|
_defineProperty(this, "jobs", {});
|
|
13
|
-
|
|
14
11
|
for (var i = 0; i < numOfWorkers; ++i) {
|
|
15
12
|
this.workers.push(this.createWorker());
|
|
16
13
|
}
|
|
17
14
|
}
|
|
18
|
-
|
|
19
15
|
_createClass(WorkerHasher, [{
|
|
20
16
|
key: "hash",
|
|
21
17
|
value: function hash(chunk) {
|
|
@@ -25,7 +21,6 @@ export var WorkerHasher = /*#__PURE__*/function () {
|
|
|
25
21
|
key: "createWorker",
|
|
26
22
|
value: function createWorker() {
|
|
27
23
|
var _this = this;
|
|
28
|
-
|
|
29
24
|
var worker = Rusha.createWorker();
|
|
30
25
|
var hasherWorker = {
|
|
31
26
|
worker: worker,
|
|
@@ -40,14 +35,12 @@ export var WorkerHasher = /*#__PURE__*/function () {
|
|
|
40
35
|
key: "handleWorkerMessage",
|
|
41
36
|
value: function handleWorkerMessage(event, hasherWorker) {
|
|
42
37
|
var id = event.data.id;
|
|
43
|
-
|
|
44
38
|
if (this.jobs[id]) {
|
|
45
39
|
var _this$jobs$id = this.jobs[id],
|
|
46
|
-
|
|
47
|
-
|
|
40
|
+
resolve = _this$jobs$id.resolve,
|
|
41
|
+
reject = _this$jobs$id.reject;
|
|
48
42
|
delete this.jobs[id];
|
|
49
43
|
hasherWorker.activeJobs--;
|
|
50
|
-
|
|
51
44
|
if (event.data.error) {
|
|
52
45
|
// TODO previously we were just calling it again.
|
|
53
46
|
// this.calculateHashInWorker(chunk);
|
|
@@ -61,16 +54,13 @@ export var WorkerHasher = /*#__PURE__*/function () {
|
|
|
61
54
|
key: "calculateHashInWorker",
|
|
62
55
|
value: function calculateHashInWorker(blob) {
|
|
63
56
|
var _this2 = this;
|
|
64
|
-
|
|
65
57
|
var jobId = uuidV4();
|
|
66
58
|
return new Promise(function (resolve, reject) {
|
|
67
59
|
_this2.jobs[jobId] = {
|
|
68
60
|
resolve: resolve,
|
|
69
61
|
reject: reject
|
|
70
62
|
};
|
|
71
|
-
|
|
72
63
|
var worker = _this2.getMostRelaxedWorker();
|
|
73
|
-
|
|
74
64
|
_this2.dispatch(jobId, worker, blob);
|
|
75
65
|
});
|
|
76
66
|
}
|
|
@@ -79,27 +69,24 @@ export var WorkerHasher = /*#__PURE__*/function () {
|
|
|
79
69
|
value: function dispatch(jobId, hasherWorker, chunkBlob) {
|
|
80
70
|
hasherWorker.activeJobs++;
|
|
81
71
|
var worker = hasherWorker.worker;
|
|
72
|
+
|
|
82
73
|
/*
|
|
83
74
|
* postMessage() with chunk blob in Safari results in the error
|
|
84
75
|
* "Failed to load resource: The operation could not be completed. (WebKitBlobResource error 1.)"
|
|
85
76
|
*
|
|
86
77
|
* To prevent it, we read the data from the blob using FileReader and pass it via postMessage to the worker.
|
|
87
78
|
*/
|
|
88
|
-
|
|
89
79
|
if (navigator.userAgent.indexOf('Safari') > -1 && navigator.userAgent.indexOf('Chrome') === -1) {
|
|
90
80
|
var rd = new FileReader();
|
|
91
|
-
|
|
92
81
|
rd.onload = function () {
|
|
93
82
|
worker.postMessage({
|
|
94
83
|
id: jobId,
|
|
95
84
|
data: rd.result
|
|
96
85
|
});
|
|
97
86
|
};
|
|
98
|
-
|
|
99
87
|
rd.readAsBinaryString(chunkBlob);
|
|
100
88
|
return;
|
|
101
89
|
}
|
|
102
|
-
|
|
103
90
|
worker.postMessage({
|
|
104
91
|
id: jobId,
|
|
105
92
|
data: chunkBlob
|
|
@@ -112,11 +99,9 @@ export var WorkerHasher = /*#__PURE__*/function () {
|
|
|
112
99
|
if (next.activeJobs < current.activeJobs) {
|
|
113
100
|
return next;
|
|
114
101
|
}
|
|
115
|
-
|
|
116
102
|
return current;
|
|
117
103
|
}, this.workers[0]);
|
|
118
104
|
}
|
|
119
105
|
}]);
|
|
120
|
-
|
|
121
106
|
return WorkerHasher;
|
|
122
107
|
}();
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
// Returns true if you need to set crossorigin property of an img element.
|
|
2
2
|
export var isImageRemote = function isImageRemote(imageUrl) {
|
|
3
3
|
var windowOrigin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window.location.origin;
|
|
4
|
-
|
|
5
4
|
if (URL && URL.prototype) {
|
|
6
5
|
var url = new URL(imageUrl);
|
|
7
|
-
|
|
8
6
|
if (!url.host) {
|
|
9
7
|
// This is a local resource. Safari will fail to load it if we set crossorigin
|
|
10
8
|
return false;
|
|
11
9
|
}
|
|
12
|
-
|
|
13
10
|
return url.origin !== windowOrigin;
|
|
14
11
|
} else {
|
|
15
12
|
// IE doesn't have support to 'new URL'.
|
|
@@ -2,7 +2,8 @@ import { createMediaSubject } from '../createMediaSubject';
|
|
|
2
2
|
export function fromObservable(observable) {
|
|
3
3
|
return {
|
|
4
4
|
subscribe: function subscribe(observer) {
|
|
5
|
-
var subscription =
|
|
5
|
+
var subscription =
|
|
6
|
+
// This is needed to handle "subscribe" function overload.
|
|
6
7
|
// It allows accepting a single "next" callback function as an argument.
|
|
7
8
|
observer instanceof Function ? observable.subscribe(observer) : observable.subscribe(observer);
|
|
8
9
|
return {
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Subscription } from 'rxjs/Subscription';
|
|
2
|
-
|
|
3
2
|
/**
|
|
4
3
|
* This is a helper to transform the first value emitted by an MediaSubscribable into a Promise.
|
|
5
4
|
*
|
|
6
5
|
* @param mediaSubscribable a given MediaSubscribable<MediaSubscribableItem>
|
|
7
6
|
* @param subscription a default Subscription (this parameter exists for testing purpose)
|
|
8
7
|
*/
|
|
8
|
+
|
|
9
9
|
export var toPromise = function toPromise(mediaSubscribable) {
|
|
10
10
|
var subscription = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Subscription();
|
|
11
11
|
return new Promise(function (resolve, reject) {
|
|
@@ -3,38 +3,30 @@ import _createClass from "@babel/runtime/helpers/createClass";
|
|
|
3
3
|
import _inherits from "@babel/runtime/helpers/inherits";
|
|
4
4
|
import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
|
|
5
5
|
import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
|
|
6
|
-
|
|
7
6
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
8
|
-
|
|
9
7
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
10
|
-
|
|
11
8
|
import { BaseMediaClientError } from '../../models/errors';
|
|
12
9
|
export var MobileUploadError = /*#__PURE__*/function (_BaseMediaClientError) {
|
|
13
10
|
_inherits(MobileUploadError, _BaseMediaClientError);
|
|
14
|
-
|
|
15
11
|
var _super = _createSuper(MobileUploadError);
|
|
16
|
-
|
|
17
12
|
function MobileUploadError(reason, id, metadata) {
|
|
18
13
|
var _this;
|
|
19
|
-
|
|
20
14
|
_classCallCheck(this, MobileUploadError);
|
|
21
|
-
|
|
22
15
|
_this = _super.call(this, reason);
|
|
23
16
|
_this.reason = reason;
|
|
24
17
|
_this.id = id;
|
|
25
18
|
_this.metadata = metadata;
|
|
26
19
|
return _this;
|
|
27
20
|
}
|
|
28
|
-
|
|
29
21
|
_createClass(MobileUploadError, [{
|
|
30
22
|
key: "attributes",
|
|
31
23
|
get: function get() {
|
|
32
24
|
var reason = this.reason,
|
|
33
|
-
|
|
34
|
-
|
|
25
|
+
id = this.id,
|
|
26
|
+
_this$metadata = this.metadata;
|
|
35
27
|
_this$metadata = _this$metadata === void 0 ? {} : _this$metadata;
|
|
36
28
|
var collectionName = _this$metadata.collectionName,
|
|
37
|
-
|
|
29
|
+
occurrenceKey = _this$metadata.occurrenceKey;
|
|
38
30
|
return {
|
|
39
31
|
reason: reason,
|
|
40
32
|
id: id,
|
|
@@ -43,7 +35,6 @@ export var MobileUploadError = /*#__PURE__*/function (_BaseMediaClientError) {
|
|
|
43
35
|
};
|
|
44
36
|
}
|
|
45
37
|
}]);
|
|
46
|
-
|
|
47
38
|
return MobileUploadError;
|
|
48
39
|
}(BaseMediaClientError);
|
|
49
40
|
export function isMobileUploadError(err) {
|
|
@@ -17,12 +17,12 @@ export var createMobileFileStateSubject = function createMobileFileStateSubject(
|
|
|
17
17
|
};
|
|
18
18
|
export var createMobileDownloadFileStream = function createMobileDownloadFileStream(dataloader, id, collectionName, occurrenceKey) {
|
|
19
19
|
var subject = createMediaSubject();
|
|
20
|
-
var poll = new PollingFunction();
|
|
20
|
+
var poll = new PollingFunction();
|
|
21
21
|
|
|
22
|
+
// ensure subject errors if polling exceeds max iterations or uncaught exception in executor
|
|
22
23
|
poll.onError = function (error) {
|
|
23
24
|
return subject.error(error);
|
|
24
25
|
};
|
|
25
|
-
|
|
26
26
|
poll.execute( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
27
27
|
var response, fileState;
|
|
28
28
|
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
@@ -34,47 +34,38 @@ export var createMobileDownloadFileStream = function createMobileDownloadFileStr
|
|
|
34
34
|
id: id,
|
|
35
35
|
collectionName: collectionName
|
|
36
36
|
});
|
|
37
|
-
|
|
38
37
|
case 2:
|
|
39
38
|
response = _context.sent;
|
|
40
|
-
|
|
41
39
|
if (response) {
|
|
42
40
|
_context.next = 5;
|
|
43
41
|
break;
|
|
44
42
|
}
|
|
45
|
-
|
|
46
43
|
throw new MobileUploadError('emptyItems', id, {
|
|
47
44
|
collectionName: collectionName,
|
|
48
45
|
occurrenceKey: occurrenceKey
|
|
49
46
|
});
|
|
50
|
-
|
|
51
47
|
case 5:
|
|
52
48
|
if (!isEmptyFile(response)) {
|
|
53
49
|
_context.next = 7;
|
|
54
50
|
break;
|
|
55
51
|
}
|
|
56
|
-
|
|
57
52
|
throw new MobileUploadError('zeroVersionFile', id, {
|
|
58
53
|
collectionName: collectionName,
|
|
59
54
|
occurrenceKey: occurrenceKey
|
|
60
55
|
});
|
|
61
|
-
|
|
62
56
|
case 7:
|
|
63
57
|
fileState = mapMediaItemToFileState(id, response);
|
|
64
58
|
subject.next(fileState);
|
|
65
59
|
_context.t0 = fileState.status;
|
|
66
60
|
_context.next = _context.t0 === 'processing' ? 12 : _context.t0 === 'processed' ? 14 : 16;
|
|
67
61
|
break;
|
|
68
|
-
|
|
69
62
|
case 12:
|
|
70
63
|
// the only case for continuing polling, otherwise this function is run once only
|
|
71
64
|
poll.next();
|
|
72
65
|
return _context.abrupt("break", 16);
|
|
73
|
-
|
|
74
66
|
case 14:
|
|
75
67
|
subject.complete();
|
|
76
68
|
return _context.abrupt("break", 16);
|
|
77
|
-
|
|
78
69
|
case 16:
|
|
79
70
|
case "end":
|
|
80
71
|
return _context.stop();
|
|
@@ -36,18 +36,14 @@ export var createMobileUploadStateMachine = function createMobileUploadStateMach
|
|
|
36
36
|
switch (_context.prev = _context.next) {
|
|
37
37
|
case 0:
|
|
38
38
|
currentFileState = ctx.currentFileState;
|
|
39
|
-
|
|
40
39
|
if (!isProcessingFileState(currentFileState)) {
|
|
41
40
|
_context.next = 4;
|
|
42
41
|
break;
|
|
43
42
|
}
|
|
44
|
-
|
|
45
43
|
mediaType = currentFileState.mediaType, mimeType = currentFileState.mimeType, preview = currentFileState.preview;
|
|
46
44
|
return _context.abrupt("return", _shouldFetchRemoteFileStates(mediaType, mimeType, preview));
|
|
47
|
-
|
|
48
45
|
case 4:
|
|
49
46
|
return _context.abrupt("return", false);
|
|
50
|
-
|
|
51
47
|
case 5:
|
|
52
48
|
case "end":
|
|
53
49
|
return _context.stop();
|
|
@@ -55,11 +51,9 @@ export var createMobileUploadStateMachine = function createMobileUploadStateMach
|
|
|
55
51
|
}
|
|
56
52
|
}, _callee);
|
|
57
53
|
}));
|
|
58
|
-
|
|
59
54
|
function shouldFetchRemoteFileStates(_x) {
|
|
60
55
|
return _shouldFetchRemoteFileStates2.apply(this, arguments);
|
|
61
56
|
}
|
|
62
|
-
|
|
63
57
|
return shouldFetchRemoteFileStates;
|
|
64
58
|
}(),
|
|
65
59
|
fetchRemoteFileStates: function fetchRemoteFileStates(ctx) {
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
-
|
|
3
2
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
4
|
-
|
|
5
3
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
6
|
-
|
|
7
4
|
import { assign } from 'xstate';
|
|
8
5
|
import { isUploadingFileState } from '../../../../models/file-state';
|
|
9
6
|
export var machineUploadingState = {
|