UNPKG

devshare

Version:

Library to communicate with devshare development sharing platform.

89 lines (71 loc) 3.74 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _config = require('../config'); var _auth = require('../auth'); var _template = require('../template'); var _template2 = _interopRequireDefault(_template); var _firebaser = require('../utils/firebaser'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } exports.default = function (username) { var addProject = function addProject(project) { if (!project.name) return Promise.reject('Name is required.'); if (project.name.match(/[/\s]/g)) { return Promise.reject('Name may not contain spaces.'); } if (project.name.match(/[.$#[\]/]/g)) { return Promise.reject('Name may contain letters and symbols except for ., $, #, [, ], /.'); } var currentUser = (0, _auth.getCurrentUser)(); if (!currentUser || !currentUser.uid) { console.error('You must be logged in to create a project'); return Promise.reject('You must be logged in to create a project'); } // TODO: Handle project owner being username or uid // TODO: Handle project owner being object // TODO: Handle project owner not being provided // if (!project.owner) { // get([paths.projects, currentUser.uid, 'username'])().then(username => ) // } // Check for existance of project name return (0, _firebaser.get)([_config.paths.projects, username || project.owner, project.name])().then(function (loadedProject) { return ( // Push new project to projects list if it does not already exist loadedProject && loadedProject.name === project.name ? Promise.reject('Error adding project: User already has a project named ' + project.name) : (0, _firebaser.setWithMeta)([_config.paths.projects, username || project.owner, project.name])(project).then(function (newProject) { return ( // get list of projects within user (0, _firebaser.get)([_config.paths.users, currentUser.uid, _config.paths.projects])().then(function (projectsList) { return projectsList === null ? (0, _firebaser.set)([_config.paths.users, currentUser.uid, _config.paths.projects])([project.name]).then(function () { return project; }) : (0, _firebaser.set)([_config.paths.users, currentUser.uid, _config.paths.projects, projectsList.length])(project.name).then(function () { return project; }); }) ); }) ); }); }; var methods = { search: function search(query) { return username ? (0, _firebaser.search)([_config.paths.projects, username])('name', query) : (0, _firebaser.search)(_config.paths.projects)('name', query); }, get: function get() { return (0, _firebaser.get)([_config.paths.usernames, username])().then(function (uid) { return (0, _firebaser.get)([_config.paths.projects, uid])(); }); }, add: addProject, addFromTemplate: function addFromTemplate(templateName, project) { return (0, _firebaser.get)([_config.paths.usernames, (0, _auth.getCurrentUser)().uid])().then(function (username) { return addProject(_extends({}, project, { owner: username })).then(function (newProject) { return (0, _template2.default)(templateName).copyToProject(username, newProject.name); }); }); } }; return _extends({}, methods); }; module.exports = exports['default'];