ParseFileController.default.js 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. "use strict";
  2. var _Object$keys = require("@babel/runtime-corejs3/core-js-stable/object/keys");
  3. var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols");
  4. var _filterInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/filter");
  5. var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
  6. var _forEachInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/for-each");
  7. var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors");
  8. var _Object$defineProperties = require("@babel/runtime-corejs3/core-js-stable/object/define-properties");
  9. var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
  10. var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
  11. var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs3/regenerator"));
  12. var _promise = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/promise"));
  13. var _indexOf = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/index-of"));
  14. var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
  15. var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
  16. var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
  17. var _CoreManager = _interopRequireDefault(require("./CoreManager"));
  18. var _ParseFileEncode = require("./ParseFileEncode");
  19. function ownKeys(object, enumerableOnly) {
  20. var keys = _Object$keys(object);
  21. if (_Object$getOwnPropertySymbols) {
  22. var symbols = _Object$getOwnPropertySymbols(object);
  23. enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) {
  24. return _Object$getOwnPropertyDescriptor(object, sym).enumerable;
  25. })), keys.push.apply(keys, symbols);
  26. }
  27. return keys;
  28. }
  29. function _objectSpread(target) {
  30. for (var i = 1; i < arguments.length; i++) {
  31. var _context2, _context3;
  32. var source = null != arguments[i] ? arguments[i] : {};
  33. i % 2 ? _forEachInstanceProperty(_context2 = ownKeys(Object(source), !0)).call(_context2, function (key) {
  34. (0, _defineProperty2.default)(target, key, source[key]);
  35. }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context3 = ownKeys(Object(source))).call(_context3, function (key) {
  36. _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key));
  37. });
  38. }
  39. return target;
  40. }
  41. var XHR = null;
  42. if (typeof XMLHttpRequest !== 'undefined') {
  43. XHR = XMLHttpRequest;
  44. }
  45. var DefaultController = {
  46. saveFile: function () {
  47. var _saveFile = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(name
  48. /*: string*/
  49. , source
  50. /*: FileSource*/
  51. , options
  52. /*:: ?: FullOptions*/
  53. ) {
  54. var base64Data, _base64Data$split, _base64Data$split2, first, second, data, newSource;
  55. return _regenerator.default.wrap(function (_context) {
  56. while (1) {
  57. switch (_context.prev = _context.next) {
  58. case 0:
  59. if (!(source.format !== 'file')) {
  60. _context.next = 2;
  61. break;
  62. }
  63. throw new Error('saveFile can only be used with File-type sources.');
  64. case 2:
  65. _context.next = 4;
  66. return new _promise.default(function (res, rej) {
  67. // eslint-disable-next-line no-undef
  68. var reader = new FileReader();
  69. reader.onload = function () {
  70. return res(reader.result);
  71. };
  72. reader.onerror = function (error) {
  73. return rej(error);
  74. };
  75. reader.readAsDataURL(source.file);
  76. });
  77. case 4:
  78. base64Data = _context.sent; // we only want the data after the comma
  79. // For example: "data:application/pdf;base64,JVBERi0xLjQKJ..." we would only want "JVBERi0xLjQKJ..."
  80. _base64Data$split = base64Data.split(','), _base64Data$split2 = (0, _slicedToArray2.default)(_base64Data$split, 2), first = _base64Data$split2[0], second = _base64Data$split2[1]; // in the event there is no 'data:application/pdf;base64,' at the beginning of the base64 string
  81. // use the entire string instead
  82. data = second ? second : first;
  83. newSource = {
  84. format: 'base64',
  85. base64: data,
  86. type: source.type || (source.file ? source.file.type : null)
  87. };
  88. _context.next = 10;
  89. return DefaultController.saveBase64(name, newSource, options);
  90. case 10:
  91. return _context.abrupt("return", _context.sent);
  92. case 11:
  93. case "end":
  94. return _context.stop();
  95. }
  96. }
  97. }, _callee);
  98. }));
  99. return function () {
  100. return _saveFile.apply(this, arguments);
  101. };
  102. }(),
  103. saveBase64: function (name
  104. /*: string*/
  105. , source
  106. /*: FileSource*/
  107. , options
  108. /*:: ?: FullOptions*/
  109. ) {
  110. if (source.format !== 'base64') {
  111. throw new Error('saveBase64 can only be used with Base64-type sources.');
  112. }
  113. var data
  114. /*: { base64: any, _ContentType?: any, fileData: Object }*/
  115. = {
  116. base64: source.base64,
  117. fileData: {
  118. ipfs: options.ipfs,
  119. metadata: _objectSpread({}, options.metadata),
  120. tags: _objectSpread({}, options.tags)
  121. }
  122. };
  123. delete options.metadata;
  124. delete options.tags;
  125. if (source.type) {
  126. data._ContentType = source.type;
  127. }
  128. var path = "files/".concat(name);
  129. return _CoreManager.default.getRESTController().request('POST', path, data, options);
  130. },
  131. download: function (uri, options) {
  132. if (XHR) {
  133. return this.downloadAjax(uri, options);
  134. }
  135. return _promise.default.reject('Cannot make a request: No definition of XMLHttpRequest was found.');
  136. },
  137. downloadAjax: function (uri, options) {
  138. return new _promise.default(function (resolve, reject) {
  139. var xhr = new XHR();
  140. xhr.open('GET', uri, true);
  141. xhr.responseType = 'arraybuffer';
  142. xhr.onerror = function (e) {
  143. reject(e);
  144. };
  145. xhr.onreadystatechange = function () {
  146. if (xhr.readyState !== xhr.DONE) {
  147. return;
  148. }
  149. if (!this.response) {
  150. return resolve({});
  151. }
  152. var bytes = new Uint8Array(this.response);
  153. resolve({
  154. base64: (0, _ParseFileEncode.encodeBase64)(bytes),
  155. contentType: xhr.getResponseHeader('content-type')
  156. });
  157. };
  158. options.requestTask(xhr);
  159. xhr.send();
  160. });
  161. },
  162. deleteFile: function (name
  163. /*: string*/
  164. , options
  165. /*:: ?: FullOptions*/
  166. ) {
  167. var headers = {
  168. 'X-Parse-Application-ID': _CoreManager.default.get('APPLICATION_ID')
  169. };
  170. if (options.useMasterKey) {
  171. headers['X-Parse-Master-Key'] = _CoreManager.default.get('MASTER_KEY');
  172. }
  173. var url = _CoreManager.default.get('SERVER_URL');
  174. if (url[url.length - 1] !== '/') {
  175. url += '/';
  176. }
  177. url += "files/".concat(name);
  178. return _CoreManager.default.getRESTController().ajax('DELETE', url, '', headers).catch(function (response) {
  179. // TODO: return JSON object in server
  180. if (!response || response === 'SyntaxError: Unexpected end of JSON input') {
  181. return _promise.default.resolve();
  182. }
  183. return _CoreManager.default.getRESTController().handleError(response);
  184. });
  185. },
  186. _setXHR: function (xhr
  187. /*: any*/
  188. ) {
  189. XHR = xhr;
  190. },
  191. _getXHR: function () {
  192. return XHR;
  193. }
  194. };
  195. module.exports = DefaultController;