@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.
Files changed (163) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/cjs/client/collection-fetcher.js +4 -44
  3. package/dist/cjs/client/file-fetcher/error.js +3 -19
  4. package/dist/cjs/client/file-fetcher/index.js +152 -167
  5. package/dist/cjs/client/media-client.js +3 -27
  6. package/dist/cjs/client/media-store/error.js +1 -17
  7. package/dist/cjs/client/media-store/index.js +13 -103
  8. package/dist/cjs/client/media-store/resolveAuth.js +2 -23
  9. package/dist/cjs/client/mobile-upload.js +9 -22
  10. package/dist/cjs/client/stargate-client.js +0 -12
  11. package/dist/cjs/constants.js +0 -3
  12. package/dist/cjs/file-streams-cache.js +0 -11
  13. package/dist/cjs/globalMediaEventEmitter.js +0 -3
  14. package/dist/cjs/identifier.js +0 -8
  15. package/dist/cjs/index.js +0 -38
  16. package/dist/cjs/models/artifacts.js +0 -4
  17. package/dist/cjs/models/auth-headers.js +0 -2
  18. package/dist/cjs/models/auth-query-parameters.js +0 -2
  19. package/dist/cjs/models/errors/helpers.js +0 -2
  20. package/dist/cjs/models/errors/index.js +4 -20
  21. package/dist/cjs/models/file-state.js +10 -36
  22. package/dist/cjs/models/media.js +2 -8
  23. package/dist/cjs/upload-controller.js +0 -6
  24. package/dist/cjs/uploader/calculateChunkSize.js +1 -10
  25. package/dist/cjs/uploader/error.js +3 -19
  26. package/dist/cjs/uploader/index.js +3 -43
  27. package/dist/cjs/utils/checkWebpSupport.js +3 -7
  28. package/dist/cjs/utils/convertBase64ToBlob.js +0 -5
  29. package/dist/cjs/utils/createFileDataLoader.js +4 -28
  30. package/dist/cjs/utils/createMediaSubject.js +0 -4
  31. package/dist/cjs/utils/detectEmptyFile.js +8 -15
  32. package/dist/cjs/utils/getDimensionsFromBlob.js +0 -14
  33. package/dist/cjs/utils/getImageDimensionsFromBlob.js +0 -4
  34. package/dist/cjs/utils/getMediaTypeFromUploadableFile.js +0 -3
  35. package/dist/cjs/utils/getVideoDimensionsFromBlob.js +2 -8
  36. package/dist/cjs/utils/hashing/hasherCreator.js +0 -20
  37. package/dist/cjs/utils/hashing/simpleHasher.js +0 -12
  38. package/dist/cjs/utils/hashing/workerHasher.js +3 -24
  39. package/dist/cjs/utils/imageResizeModeToFileImageMode.js +0 -2
  40. package/dist/cjs/utils/isImageRemote.js +0 -5
  41. package/dist/cjs/utils/mediaSubscribable/fromObservable.js +2 -4
  42. package/dist/cjs/utils/mediaSubscribable/index.js +0 -2
  43. package/dist/cjs/utils/mediaSubscribable/toPromise.js +1 -3
  44. package/dist/cjs/utils/mobileUpload/error.js +3 -19
  45. package/dist/cjs/utils/mobileUpload/helpers.js +2 -26
  46. package/dist/cjs/utils/mobileUpload/index.js +0 -4
  47. package/dist/cjs/utils/mobileUpload/servicesCache.js +0 -2
  48. package/dist/cjs/utils/mobileUpload/stateMachine/index.js +0 -22
  49. package/dist/cjs/utils/mobileUpload/stateMachine/states/processing.js +0 -2
  50. package/dist/cjs/utils/mobileUpload/stateMachine/states/uploading.js +0 -7
  51. package/dist/cjs/utils/overrideMediaTypeIfUnknown.js +0 -4
  52. package/dist/cjs/utils/polling/errors.js +1 -17
  53. package/dist/cjs/utils/polling/index.js +1 -30
  54. package/dist/cjs/utils/request/errors.js +8 -24
  55. package/dist/cjs/utils/request/helpers.js +19 -103
  56. package/dist/cjs/utils/request/index.js +15 -26
  57. package/dist/cjs/utils/safeUnsubscribe.js +0 -2
  58. package/dist/cjs/utils/setTimeoutPromise.js +0 -4
  59. package/dist/cjs/utils/shouldFetchRemoteFileStates.js +0 -21
  60. package/dist/cjs/utils/url.js +4 -27
  61. package/dist/cjs/utils/with-media-client-hoc.js +12 -28
  62. package/dist/cjs/version.json +1 -1
  63. package/dist/es2019/client/collection-fetcher.js +6 -18
  64. package/dist/es2019/client/file-fetcher/error.js +0 -2
  65. package/dist/es2019/client/file-fetcher/index.js +138 -70
  66. package/dist/es2019/client/media-client.js +4 -14
  67. package/dist/es2019/client/media-store/error.js +0 -2
  68. package/dist/es2019/client/media-store/index.js +37 -52
  69. package/dist/es2019/client/media-store/resolveAuth.js +1 -5
  70. package/dist/es2019/client/mobile-upload.js +0 -8
  71. package/dist/es2019/client/stargate-client.js +0 -3
  72. package/dist/es2019/constants.js +0 -1
  73. package/dist/es2019/file-streams-cache.js +0 -11
  74. package/dist/es2019/globalMediaEventEmitter.js +0 -4
  75. package/dist/es2019/index.js +4 -11
  76. package/dist/es2019/models/artifacts.js +0 -2
  77. package/dist/es2019/models/errors/index.js +5 -4
  78. package/dist/es2019/models/file-state.js +6 -7
  79. package/dist/es2019/models/media.js +2 -3
  80. package/dist/es2019/upload-controller.js +0 -3
  81. package/dist/es2019/uploader/calculateChunkSize.js +1 -4
  82. package/dist/es2019/uploader/error.js +0 -2
  83. package/dist/es2019/uploader/index.js +0 -13
  84. package/dist/es2019/utils/checkWebpSupport.js +3 -4
  85. package/dist/es2019/utils/convertBase64ToBlob.js +0 -2
  86. package/dist/es2019/utils/createFileDataLoader.js +6 -9
  87. package/dist/es2019/utils/createMediaSubject.js +0 -2
  88. package/dist/es2019/utils/detectEmptyFile.js +1 -5
  89. package/dist/es2019/utils/getDimensionsFromBlob.js +0 -3
  90. package/dist/es2019/utils/getImageDimensionsFromBlob.js +0 -2
  91. package/dist/es2019/utils/getVideoDimensionsFromBlob.js +2 -1
  92. package/dist/es2019/utils/hashing/hasherCreator.js +0 -2
  93. package/dist/es2019/utils/hashing/simpleHasher.js +0 -3
  94. package/dist/es2019/utils/hashing/workerHasher.js +1 -16
  95. package/dist/es2019/utils/isImageRemote.js +0 -2
  96. package/dist/es2019/utils/mediaSubscribable/fromObservable.js +2 -1
  97. package/dist/es2019/utils/mediaSubscribable/toPromise.js +1 -1
  98. package/dist/es2019/utils/mobileUpload/error.js +0 -2
  99. package/dist/es2019/utils/mobileUpload/helpers.js +2 -7
  100. package/dist/es2019/utils/mobileUpload/stateMachine/index.js +0 -2
  101. package/dist/es2019/utils/mobileUpload/stateMachine/states/uploading.js +2 -1
  102. package/dist/es2019/utils/overrideMediaTypeIfUnknown.js +0 -1
  103. package/dist/es2019/utils/polling/errors.js +0 -2
  104. package/dist/es2019/utils/polling/index.js +3 -20
  105. package/dist/es2019/utils/request/errors.js +0 -2
  106. package/dist/es2019/utils/request/helpers.js +24 -35
  107. package/dist/es2019/utils/request/index.js +2 -2
  108. package/dist/es2019/utils/shouldFetchRemoteFileStates.js +1 -5
  109. package/dist/es2019/utils/url.js +6 -14
  110. package/dist/es2019/utils/with-media-client-hoc.js +10 -7
  111. package/dist/es2019/version.json +1 -1
  112. package/dist/esm/client/collection-fetcher.js +4 -34
  113. package/dist/esm/client/file-fetcher/error.js +3 -12
  114. package/dist/esm/client/file-fetcher/index.js +154 -137
  115. package/dist/esm/client/media-client.js +4 -17
  116. package/dist/esm/client/media-store/error.js +1 -10
  117. package/dist/esm/client/media-store/index.js +13 -89
  118. package/dist/esm/client/media-store/resolveAuth.js +2 -13
  119. package/dist/esm/client/mobile-upload.js +9 -15
  120. package/dist/esm/client/stargate-client.js +0 -7
  121. package/dist/esm/constants.js +0 -1
  122. package/dist/esm/file-streams-cache.js +0 -6
  123. package/dist/esm/globalMediaEventEmitter.js +0 -1
  124. package/dist/esm/index.js +4 -11
  125. package/dist/esm/models/artifacts.js +0 -2
  126. package/dist/esm/models/errors/index.js +5 -12
  127. package/dist/esm/models/file-state.js +10 -17
  128. package/dist/esm/models/media.js +2 -3
  129. package/dist/esm/upload-controller.js +0 -2
  130. package/dist/esm/uploader/calculateChunkSize.js +1 -4
  131. package/dist/esm/uploader/error.js +3 -12
  132. package/dist/esm/uploader/index.js +3 -32
  133. package/dist/esm/utils/checkWebpSupport.js +3 -4
  134. package/dist/esm/utils/convertBase64ToBlob.js +0 -3
  135. package/dist/esm/utils/createFileDataLoader.js +4 -18
  136. package/dist/esm/utils/createMediaSubject.js +0 -2
  137. package/dist/esm/utils/detectEmptyFile.js +8 -12
  138. package/dist/esm/utils/getDimensionsFromBlob.js +0 -7
  139. package/dist/esm/utils/getImageDimensionsFromBlob.js +0 -2
  140. package/dist/esm/utils/getVideoDimensionsFromBlob.js +2 -3
  141. package/dist/esm/utils/hashing/hasherCreator.js +0 -9
  142. package/dist/esm/utils/hashing/simpleHasher.js +0 -4
  143. package/dist/esm/utils/hashing/workerHasher.js +3 -18
  144. package/dist/esm/utils/isImageRemote.js +0 -3
  145. package/dist/esm/utils/mediaSubscribable/fromObservable.js +2 -1
  146. package/dist/esm/utils/mediaSubscribable/toPromise.js +1 -1
  147. package/dist/esm/utils/mobileUpload/error.js +3 -12
  148. package/dist/esm/utils/mobileUpload/helpers.js +2 -11
  149. package/dist/esm/utils/mobileUpload/stateMachine/index.js +0 -6
  150. package/dist/esm/utils/mobileUpload/stateMachine/states/uploading.js +0 -3
  151. package/dist/esm/utils/overrideMediaTypeIfUnknown.js +0 -1
  152. package/dist/esm/utils/polling/errors.js +1 -10
  153. package/dist/esm/utils/polling/index.js +1 -27
  154. package/dist/esm/utils/request/errors.js +8 -17
  155. package/dist/esm/utils/request/helpers.js +22 -76
  156. package/dist/esm/utils/request/index.js +15 -20
  157. package/dist/esm/utils/shouldFetchRemoteFileStates.js +1 -15
  158. package/dist/esm/utils/url.js +4 -18
  159. package/dist/esm/utils/with-media-client-hoc.js +12 -17
  160. package/dist/esm/version.json +1 -1
  161. package/dist/types/client/file-fetcher/index.d.ts +6 -2
  162. package/package.json +8 -6
  163. 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
- collection = fileItem.collection;
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
- collectionName = dataloaderKey.collectionName;
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] || []; // de-duplicate ids in collection
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
- mediaType = fileDetails.mediaType,
21
- mimeType = fileDetails.mimeType,
22
- name = fileDetails.name,
23
- processingStatus = fileDetails.processingStatus,
24
- representations = fileDetails.representations,
25
- size = fileDetails.size,
26
- createdAt = fileDetails.createdAt;
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; // loadedmetadata, loadeddata, play, playing
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
- resolve = _this$jobs$id.resolve,
47
- reject = _this$jobs$id.reject;
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 = // This is needed to handle "subscribe" function overload.
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
- id = this.id,
34
- _this$metadata = this.metadata;
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
- occurrenceKey = _this$metadata.occurrenceKey;
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(); // ensure subject errors if polling exceeds max iterations or uncaught exception in executor
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 = {
@@ -5,6 +5,5 @@ export var overrideMediaTypeIfUnknown = function overrideMediaTypeIfUnknown(file
5
5
  mediaType: mediaType
6
6
  };
7
7
  }
8
-
9
8
  return {};
10
9
  };