UNPKG

js-abstract-synchronizer

Version:
73 lines (55 loc) 2.75 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _NotFoundError = require('js-abstract-synchronizer/errors/NotFoundError'); var _NotFoundError2 = _interopRequireDefault(_NotFoundError); var _arangodbErrorCodes = require('arangodb-error-codes'); var _arangodbErrorCodes2 = _interopRequireDefault(_arangodbErrorCodes); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var privates = Symbol('privates'); var handleDuplicateName = function handleDuplicateName(error) { return error.errorNum === _arangodbErrorCodes2.default.ERROR_ARANGO_DUPLICATE_NAME ? Promise.resolve() : Promise.reject(error); }; var ArangoSerializer = function () { function ArangoSerializer(_ref) { var db = _ref.db; _classCallCheck(this, ArangoSerializer); this[privates] = { collection: db.collection('all'), db: db }; } _createClass(ArangoSerializer, [{ key: 'configure', value: function configure(dbName) { var _this = this; var db = this[privates].db; db.useDatabase('_system'); return db.createDatabase(dbName).catch(handleDuplicateName).then(function () { return db.useDatabase(dbName); }).then(function () { return _this[privates].collection.create(); }).catch(handleDuplicateName); } }, { key: 'save', value: function save(object) { var _this2 = this; return this[privates].collection.replaceByExample({ id: object.id }, object).then(function (result) { return result.replaced === 0 ? _this2[privates].collection.save(object) : null; }); } }, { key: 'reload', value: function reload(id) { return this[privates].collection.firstExample({ id: id }).catch(function (error) { return Promise.reject(error.errorNum === _arangodbErrorCodes2.default.ERROR_HTTP_NOT_FOUND ? new _NotFoundError2.default() : error); }); } }]); return ArangoSerializer; }(); exports.default = ArangoSerializer;