123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- "use strict";
- var _CoreManager = _interopRequireDefault(require("./CoreManager"));
- var _ParseFileEncode = require("./ParseFileEncode");
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : {
- default: obj
- };
- }
- 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;
- }
- 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;
- }
- function _defineProperty(obj, key, value) {
- if (key in obj) {
- Object.defineProperty(obj, key, {
- value: value,
- enumerable: true,
- configurable: true,
- writable: true
- });
- } else {
- obj[key] = value;
- }
- return obj;
- }
- let XHR = null;
- if (typeof XMLHttpRequest !== 'undefined') {
- XHR = XMLHttpRequest;
- }
- const DefaultController = {
- saveFile: async function (name
- /*: string*/
- , source
- /*: FileSource*/
- , options
- /*:: ?: FullOptions*/
- ) {
- if (source.format !== 'file') {
- throw new Error('saveFile can only be used with File-type sources.');
- }
- const base64Data = await new Promise((res, rej) => {
- // eslint-disable-next-line no-undef
- const reader = new FileReader();
- reader.onload = () => res(reader.result);
- reader.onerror = error => rej(error);
- reader.readAsDataURL(source.file);
- }); // we only want the data after the comma
- // For example: "data:application/pdf;base64,JVBERi0xLjQKJ..." we would only want "JVBERi0xLjQKJ..."
- const [first, second] = base64Data.split(','); // in the event there is no 'data:application/pdf;base64,' at the beginning of the base64 string
- // use the entire string instead
- const data = second ? second : first;
- const newSource = {
- format: 'base64',
- base64: data,
- type: source.type || (source.file ? source.file.type : null)
- };
- return await DefaultController.saveBase64(name, newSource, options);
- },
- saveBase64: function (name
- /*: string*/
- , source
- /*: FileSource*/
- , options
- /*:: ?: FullOptions*/
- ) {
- if (source.format !== 'base64') {
- throw new Error('saveBase64 can only be used with Base64-type sources.');
- }
- const data
- /*: { base64: any, _ContentType?: any, fileData: Object }*/
- = {
- base64: source.base64,
- fileData: {
- ipfs: options.ipfs,
- metadata: _objectSpread({}, options.metadata),
- tags: _objectSpread({}, options.tags)
- }
- };
- delete options.metadata;
- delete options.tags;
- if (source.type) {
- data._ContentType = source.type;
- }
- return _CoreManager.default.getRESTController().request('POST', `files/${name}`, data, options);
- },
- download: function (uri, options) {
- if (XHR) {
- return this.downloadAjax(uri, options);
- }
- return new Promise((resolve, reject) => {
- const client = uri.indexOf('https') === 0 ? require('https') : require('http');
- const req = client.get(uri, resp => {
- resp.setEncoding('base64');
- let base64 = '';
- resp.on('data', data => base64 += data);
- resp.on('end', () => {
- resolve({
- base64,
- contentType: resp.headers['content-type']
- });
- });
- });
- req.on('abort', () => {
- resolve({});
- });
- req.on('error', reject);
- options.requestTask(req);
- });
- },
- downloadAjax: function (uri, options) {
- return new Promise((resolve, reject) => {
- const xhr = new XHR();
- xhr.open('GET', uri, true);
- xhr.responseType = 'arraybuffer';
- xhr.onerror = function (e) {
- reject(e);
- };
- xhr.onreadystatechange = function () {
- if (xhr.readyState !== xhr.DONE) {
- return;
- }
- if (!this.response) {
- return resolve({});
- }
- const bytes = new Uint8Array(this.response);
- resolve({
- base64: (0, _ParseFileEncode.encodeBase64)(bytes),
- contentType: xhr.getResponseHeader('content-type')
- });
- };
- options.requestTask(xhr);
- xhr.send();
- });
- },
- deleteFile: function (name
- /*: string*/
- , options
- /*:: ?: FullOptions*/
- ) {
- const headers = {
- 'X-Parse-Application-ID': _CoreManager.default.get('APPLICATION_ID')
- };
- if (options.useMasterKey) {
- headers['X-Parse-Master-Key'] = _CoreManager.default.get('MASTER_KEY');
- }
- let url = _CoreManager.default.get('SERVER_URL');
- if (url[url.length - 1] !== '/') {
- url += '/';
- }
- url += `files/${name}`;
- return _CoreManager.default.getRESTController().ajax('DELETE', url, '', headers).catch(response => {
- // TODO: return JSON object in server
- if (!response || response === 'SyntaxError: Unexpected end of JSON input') {
- return Promise.resolve();
- }
- return _CoreManager.default.getRESTController().handleError(response);
- });
- },
- _setXHR(xhr
- /*: any*/
- ) {
- XHR = xhr;
- },
- _getXHR() {
- return XHR;
- }
- };
- module.exports = DefaultController;
|