123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 |
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
- var _CoreManager = _interopRequireDefault(require("./CoreManager"));
- var _ParseObject = _interopRequireDefault(require("./ParseObject"));
- var _ParseQuery = _interopRequireDefault(require("./ParseQuery"));
- var _Storage = _interopRequireDefault(require("./Storage"));
- var QUEUE_KEY = 'Parse/Eventually/Queue';
- var queueCache = [];
- var dirtyCache = true;
- var polling = undefined;
- var EventuallyQueue = {
- save: function (object) {
- var serverOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- return this.enqueue('save', object, serverOptions);
- },
- destroy: function (object) {
- var serverOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- return this.enqueue('destroy', object, serverOptions);
- },
- generateQueueId: function (action, object) {
- object._getId();
- var className = object.className,
- id = object.id,
- _localId = object._localId;
- var uniqueId = object.get('hash') || _localId;
- return [action, className, id, uniqueId].join('_');
- },
- enqueue: function () {
- var _enqueue = (0, _asyncToGenerator2.default)(function* (action, object, serverOptions) {
- var queueData = yield this.getQueue();
- var queueId = this.generateQueueId(action, object);
- var index = this.queueItemExists(queueData, queueId);
- if (index > -1) {
- for (var prop in queueData[index].object) {
- if (typeof object.get(prop) === 'undefined') {
- object.set(prop, queueData[index].object[prop]);
- }
- }
- } else {
- index = queueData.length;
- }
- queueData[index] = {
- queueId: queueId,
- action: action,
- object: object.toJSON(),
- serverOptions: serverOptions,
- id: object.id,
- className: object.className,
- hash: object.get('hash'),
- createdAt: new Date()
- };
- return this.setQueue(queueData);
- });
- function enqueue() {
- return _enqueue.apply(this, arguments);
- }
- return enqueue;
- }(),
- store: function (data) {
- return _Storage.default.setItemAsync(QUEUE_KEY, JSON.stringify(data));
- },
- load: function () {
- return _Storage.default.getItemAsync(QUEUE_KEY);
- },
- getQueue: function () {
- var _getQueue = (0, _asyncToGenerator2.default)(function* () {
- if (dirtyCache) {
- queueCache = JSON.parse((yield this.load()) || '[]');
- dirtyCache = false;
- }
- return queueCache;
- });
- function getQueue() {
- return _getQueue.apply(this, arguments);
- }
- return getQueue;
- }(),
- setQueue: function (queue) {
- queueCache = queue;
- return this.store(queueCache);
- },
- remove: function () {
- var _remove = (0, _asyncToGenerator2.default)(function* (queueId) {
- var queueData = yield this.getQueue();
- var index = this.queueItemExists(queueData, queueId);
- if (index > -1) {
- queueData.splice(index, 1);
- yield this.setQueue(queueData);
- }
- });
- function remove() {
- return _remove.apply(this, arguments);
- }
- return remove;
- }(),
- clear: function () {
- queueCache = [];
- return this.store([]);
- },
- queueItemExists: function (queue, queueId) {
- return queue.findIndex(function (data) {
- return data.queueId === queueId;
- });
- },
- length: function () {
- var _length = (0, _asyncToGenerator2.default)(function* () {
- var queueData = yield this.getQueue();
- return queueData.length;
- });
- function length() {
- return _length.apply(this, arguments);
- }
- return length;
- }(),
- sendQueue: function () {
- var _sendQueue = (0, _asyncToGenerator2.default)(function* () {
- var queue = yield this.getQueue();
- var queueData = (0, _toConsumableArray2.default)(queue);
- if (queueData.length === 0) {
- return false;
- }
- for (var i = 0; i < queueData.length; i += 1) {
- var queueObject = queueData[i];
- var id = queueObject.id,
- hash = queueObject.hash,
- className = queueObject.className;
- var ObjectType = _ParseObject.default.extend(className);
- if (id) {
- yield this.process.byId(ObjectType, queueObject);
- } else if (hash) {
- yield this.process.byHash(ObjectType, queueObject);
- } else {
- yield this.process.create(ObjectType, queueObject);
- }
- }
- return true;
- });
- function sendQueue() {
- return _sendQueue.apply(this, arguments);
- }
- return sendQueue;
- }(),
- sendQueueCallback: function () {
- var _sendQueueCallback = (0, _asyncToGenerator2.default)(function* (object, queueObject) {
- if (!object) {
- return this.remove(queueObject.queueId);
- }
- switch (queueObject.action) {
- case 'save':
- if (typeof object.updatedAt !== 'undefined' && object.updatedAt > new Date(queueObject.object.createdAt)) {
- return this.remove(queueObject.queueId);
- }
- try {
- yield object.save(queueObject.object, queueObject.serverOptions);
- yield this.remove(queueObject.queueId);
- } catch (e) {
- if (e.message !== 'XMLHttpRequest failed: "Unable to connect to the Parse API"') {
- yield this.remove(queueObject.queueId);
- }
- }
- break;
- case 'destroy':
- try {
- yield object.destroy(queueObject.serverOptions);
- yield this.remove(queueObject.queueId);
- } catch (e) {
- if (e.message !== 'XMLHttpRequest failed: "Unable to connect to the Parse API"') {
- yield this.remove(queueObject.queueId);
- }
- }
- break;
- }
- });
- function sendQueueCallback() {
- return _sendQueueCallback.apply(this, arguments);
- }
- return sendQueueCallback;
- }(),
- poll: function () {
- var _this = this;
- var ms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 2000;
- if (polling) {
- return;
- }
- polling = setInterval(function () {
- var RESTController = _CoreManager.default.getRESTController();
- RESTController.request('GET', 'health').then(function (_ref) {
- var status = _ref.status;
- if (status === 'ok') {
- _this.stopPoll();
- return _this.sendQueue();
- }
- }).catch(function (e) {
- return e;
- });
- }, ms);
- },
- stopPoll: function () {
- clearInterval(polling);
- polling = undefined;
- },
- isPolling: function () {
- return !!polling;
- },
- _setPolling: function (flag) {
- polling = flag;
- },
- process: {
- create: function (ObjectType, queueObject) {
- var object = new ObjectType();
- return EventuallyQueue.sendQueueCallback(object, queueObject);
- },
- byId: function () {
- var _byId = (0, _asyncToGenerator2.default)(function* (ObjectType, queueObject) {
- var sessionToken = queueObject.serverOptions.sessionToken;
- var query = new _ParseQuery.default(ObjectType);
- query.equalTo('objectId', queueObject.id);
- var results = yield query.find({
- sessionToken: sessionToken
- });
- return EventuallyQueue.sendQueueCallback(results[0], queueObject);
- });
- function byId() {
- return _byId.apply(this, arguments);
- }
- return byId;
- }(),
- byHash: function () {
- var _byHash = (0, _asyncToGenerator2.default)(function* (ObjectType, queueObject) {
- var sessionToken = queueObject.serverOptions.sessionToken;
- var query = new _ParseQuery.default(ObjectType);
- query.equalTo('hash', queueObject.hash);
- var results = yield query.find({
- sessionToken: sessionToken
- });
- if (results.length > 0) {
- return EventuallyQueue.sendQueueCallback(results[0], queueObject);
- }
- return EventuallyQueue.process.create(ObjectType, queueObject);
- });
- function byHash() {
- return _byHash.apply(this, arguments);
- }
- return byHash;
- }()
- }
- };
- module.exports = EventuallyQueue;
|