kyper-grout
Version:
Library to communicate with tessellate application building/managing service.
227 lines (184 loc) • 6.31 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _isUndefined = require('lodash/isUndefined');
var _isUndefined2 = _interopRequireDefault(_isUndefined);
var _omitBy = require('lodash/omitBy');
var _omitBy2 = _interopRequireDefault(_omitBy);
var _last = require('lodash/last');
var _last2 = _interopRequireDefault(_last);
var _isString = require('lodash/isString');
var _isString2 = _interopRequireDefault(_isString);
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 _Matter = require('./Matter');
var _Matter2 = _interopRequireDefault(_Matter);
var _firebase = require('firebase');
var _firebase2 = _interopRequireDefault(_firebase);
var _firebase3 = require('../utils/firebase');
var _firebase4 = _interopRequireDefault(_firebase3);
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 logger = _Matter2.default.utils.logger;
var FileSystemEntity = function () {
function FileSystemEntity(project, path) {
_classCallCheck(this, FileSystemEntity);
logger.debug({
description: 'FileSystemEntity constructor called.', project: project, path: path,
func: 'constructor', obj: 'FileSystemEntity'
});
if (!project || !(0, _isString2.default)(path)) {
logger.error({
description: 'FileSystemEntity that includes path and project is needed to create a FileSystemEntity action.',
func: 'constructor', obj: 'FileSystemEntity'
});
throw new Error('FileSystemEntity with path and project is needed to create file action.');
}
this.project = project;
this.path = path.indexOf('/') === 0 ? path.slice(1) : path;
this.name = (0, _last2.default)(path.split('/'));
logger.debug({
description: 'FileSystemEntity object constructed.', entity: this,
func: 'constructor', obj: 'FileSystemEntity'
});
}
/**
* @description FileSystemEntity's Firebase reference
* @return {Object} Firebase reference
*/
_createClass(FileSystemEntity, [{
key: 'get',
/**
* @description Get a file or folder's content and meta data from default location (Firebase)
*/
value: function get() {
var _this = this;
return new Promise(function (resolve, reject) {
_this.fbRef.once('value', function (fileSnap) {
if (!fileSnap.val()) {
reject('no firebase value found');
}
resolve(fileSnap.val());
});
});
}
/**
* @description Open a file from default location (Firebase) (Alias for get)
*/
}, {
key: 'open',
value: function open() {
return this.get();
}
/**
* @description Remove a file from default location (Firebase)
*/
}, {
key: 'remove',
value: function remove() {
return this.removeFromFb();
}
//TODO: move file
}, {
key: 'move',
value: function move() {
return null;
}
/**
* @description Add folder to project
* @return {Promise}
*/
}, {
key: 'save',
value: function save() {
return this.addToFb();
}
/**
* @description Add file to Firebase located at file's fbRef
*/
}, {
key: 'addToFb',
value: function addToFb() {
logger.debug({
description: 'addToFb called.', entity: this,
func: 'addToFb', obj: 'FileSystemEntity'
});
var fbRef = this.fbRef;
var path = this.path;
var name = this.name;
var entityType = this.entityType;
var fileType = this.fileType;
var content = this.content;
var fbData = { meta: { path: path, name: name, entityType: entityType, fileType: fileType } };
fbData.meta = (0, _omitBy2.default)(fbData.meta, _isUndefined2.default);
if (content) {
fbData.original = content;
}
return new Promise(function (resolve, reject) {
fbRef.update(fbData, function (error) {
if (!error) {
logger.info({
description: 'FileSystemEntity successfully added to Firebase.',
func: 'addToFb', obj: 'FileSystemEntity'
});
resolve(fbData);
} else {
logger.error({
description: 'Error creating file on Firebase.',
error: error, func: 'addToFb', obj: 'FileSystemEntity'
});
reject(error);
}
});
});
}
/**
* @description Remove file from Firebase
*/
}, {
key: 'removeFromFb',
value: function removeFromFb() {
var _this2 = this;
logger.debug({
description: 'Remove FileSystemEntity from Firebase called.',
func: 'removeFromFb', obj: 'FileSystemEntity'
});
return new Promise(function (resolve, reject) {
_this2.fbRef.remove(function (error) {
if (error) {
logger.error({
description: 'Error removing file from Firebase.', entity: _this2,
error: error, func: 'removeFromFb', obj: 'FileSystemEntity'
});
return reject(error);
}
logger.info({
description: 'FileSystemEntity successfully removed from Firebase.',
entity: _this2, func: 'removeFromFb', obj: 'FileSystemEntity'
});
resolve(_this2);
});
});
}
}, {
key: 'fbRef',
get: function get() {
if (!this.project || !this.project.name) {
logger.error({
description: 'App information needed to generate fbUrl for FileSystemEntity.',
entity: this, func: 'fbUrl', obj: 'FileSystemEntity'
});
throw new Error('App information needed to generate fbUrl for FileSystemEntity.');
}
var url = [this.project.fbUrl, _firebase4.default.pathToSafePath(this.path)].join('/');
logger.debug({
description: 'Fb ref generated.',
url: url, func: 'fbRef', obj: 'FileSystemEntity'
});
return new _firebase2.default(url);
}
}]);
return FileSystemEntity;
}();
exports.default = FileSystemEntity;
module.exports = exports['default'];