devshare
Version:
Library to communicate with devshare development sharing platform.
1,264 lines (1,037 loc) • 1.07 MB
JavaScript
/*! devshare.js v0.4.0-alpha | (c) Prescott Prue */
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory(require("firepad"));
else if(typeof define === 'function' && define.amd)
define(["firepad"], factory);
else if(typeof exports === 'object')
exports["Devshare"] = factory(require("firepad"));
else
root["Devshare"] = factory(root["Firepad"]);
})(this, function(__WEBPACK_EXTERNAL_MODULE_150__) {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId])
/******/ return installedModules[moduleId].exports;
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ exports: {},
/******/ id: moduleId,
/******/ loaded: false
/******/ };
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ // Flag the module as loaded
/******/ module.loaded = true;
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "/dist/";
/******/ // Load entry module and return exports
/******/ return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.templates = exports.template = exports.init = exports.getCurrentUser = exports.signup = exports.logout = exports.login = exports.authWithProvider = exports.auth = exports.users = exports.user = exports.projects = exports.project = undefined;
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 _projects2 = __webpack_require__(1);
var _projects3 = _interopRequireDefault(_projects2);
var _project2 = __webpack_require__(31);
var _project3 = _interopRequireDefault(_project2);
var _users2 = __webpack_require__(276);
var _users3 = _interopRequireDefault(_users2);
var _user2 = __webpack_require__(275);
var _user3 = _interopRequireDefault(_user2);
var _auth2 = __webpack_require__(3);
var _auth3 = _interopRequireDefault(_auth2);
var _templates = __webpack_require__(269);
var _templates2 = _interopRequireDefault(_templates);
var _template = __webpack_require__(268);
var _template2 = _interopRequireDefault(_template);
var _firebaser = __webpack_require__(140);
var _firebase = __webpack_require__(25);
var _firebase2 = _interopRequireDefault(_firebase);
var _config = __webpack_require__(2);
var _config2 = _interopRequireDefault(_config);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var devshare = {
projects: _projects3.default,
project: _project3.default,
users: _users3.default,
user: _user3.default,
templates: _templates2.default,
template: _template2.default,
init: _firebaser.init,
firebase: _firebase2.default,
constants: _config2.default
};
exports.default = _extends({}, devshare, _auth3.default);
var project = exports.project = _project3.default;
var projects = exports.projects = _projects3.default;
var user = exports.user = _user3.default;
var users = exports.users = _users3.default;
var auth = exports.auth = _auth3.default;
var authWithProvider = _auth3.default.authWithProvider,
login = _auth3.default.login,
logout = _auth3.default.logout,
signup = _auth3.default.signup,
getCurrentUser = _auth3.default.getCurrentUser;
exports.authWithProvider = authWithProvider;
exports.login = login;
exports.logout = logout;
exports.signup = signup;
exports.getCurrentUser = getCurrentUser;
exports.init = _firebaser.init;
exports.template = _template2.default;
exports.templates = _templates2.default;
/***/ }),
/* 1 */
/***/ (function(module, exports, __webpack_require__) {
'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 = __webpack_require__(2);
var _auth = __webpack_require__(3);
var _template = __webpack_require__(268);
var _template2 = _interopRequireDefault(_template);
var _firebaser = __webpack_require__(140);
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'];
/***/ }),
/* 2 */
/***/ (function(module, exports) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = {
paths: {
files: 'files',
users: 'users',
uids: 'uids',
projects: 'projects',
projectNames: 'projectNames',
usernames: 'usernames',
requests: 'requests',
templateFiles: 'templateFiles',
templates: 'templates'
},
github: {
apiUrl: 'https://api.github.com'
},
firebase: {
prod: {
apiKey: 'AIzaSyBQw-StxUsUhoQwZqaawegUFO7YOyG_HDA',
authDomain: 'devshare-1.firebaseapp.com',
databaseURL: 'https://devshare-1.firebaseio.com',
storageBucket: 'devshare-1.appspot.com'
},
stg: {
apiKey: 'AIzaSyBuwR21cO0lMzMr_T-Dl_jG1dsORXZ1fwY',
authDomain: 'devshare-stg.firebaseapp.com',
databaseURL: 'https://devshare-stg.firebaseio.com',
storageBucket: 'devshare-stg.appspot.com'
},
int: {
apiKey: 'AIzaSyDiVbMbj7nPXTBXxZlr_HiZ2AOY7yXWkYY',
authDomain: 'devshare-int.firebaseapp.com',
databaseURL: 'https://devshare-int.firebaseio.com',
storageBucket: 'devshare-int.appspot.com'
},
dev: {
apiKey: 'AIzaSyDiVbMbj7nPXTBXxZlr_HiZ2AOY7yXWkYY',
authDomain: 'devshare-int.firebaseapp.com',
databaseURL: 'https://devshare-int.firebaseio.com',
storageBucket: 'devshare-int.appspot.com'
}
},
highlightColors: ['#FF0000', '#FF00F1', '#F1C40F', '#D35400', '#FF08', '#2980B9', '#9B59B6'],
zipSuffix: '-devShare-export'
};
module.exports = exports['default'];
/***/ }),
/* 3 */
/***/ (function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.updateEmail = exports.updateUser = exports.getCurrentUser = exports.signup = exports.logout = exports.login = exports.createUserProfile = undefined;
var _capitalize2 = __webpack_require__(4);
var _capitalize3 = _interopRequireDefault(_capitalize2);
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 _firebase = __webpack_require__(25);
var _firebase2 = _interopRequireDefault(_firebase);
var _project = __webpack_require__(31);
var _project2 = _interopRequireDefault(_project);
var _firebaser = __webpack_require__(140);
var _cruder = __webpack_require__(143);
var _config = __webpack_require__(2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
/**
* @description Get correct login method and params order based on provided credentials
* @param {Object} credentials - Login credentials
* @param {String} credentials.email - Email to login with (only needed for email login)
* @param {String} credentials.password - Password to login with (only needed for email login)
* @param {String} credentials.provider - Provider name such as google, twitter
* @param {String} credentials.type - Popup or redirect (only needed for 3rd party provider login)
* @param {String} credentials.token - Custom or provider token
*/
var getLoginMethodAndParams = function getLoginMethodAndParams(_ref) {
var email = _ref.email,
password = _ref.password,
provider = _ref.provider,
type = _ref.type,
token = _ref.token;
if (provider) {
if (token) {
return {
method: 'signInWithCredential',
params: [provider, token]
};
}
var authProvider = new _firebase2.default.auth[(0, _capitalize3.default)(provider) + 'AuthProvider']();
authProvider.addScope('email');
if (provider.toLowerCase() === 'github') {
authProvider.addScope('user');
authProvider.addScope('repo');
}
if (type === 'popup') {
return {
method: 'signInWithPopup',
params: [authProvider]
};
}
return {
method: 'signInWithRedirect',
params: [authProvider]
};
}
if (token) {
return {
method: 'signInWithCustomToken',
params: [token]
};
}
return {
method: 'signInWithEmailAndPassword',
params: [email, password]
};
};
/**
* @description Create new user account
* @param {Object} userInfo - Object containing signup data
* @param {String} userInfo.username - Username of new user
* @param {String} userInfo.displayName - Display name of new user
* @param {String} userInfo.email - Email of new user
* @param {String} userInfo.avatarUrl - Url of avatar image
* @param {String} userInfo.uid - User's uid
* @param {Array} userInfo.providerData - Data from external provider accounts
*/
var profileFromUserData = function profileFromUserData(_ref2) {
var email = _ref2.email,
username = _ref2.username,
avatarUrl = _ref2.avatarUrl,
providerData = _ref2.providerData,
uid = _ref2.uid;
var data = providerData && providerData[0];
if (!username) username = data.email.split('@')[0].replace(/[^\w\s]/gi, '');
if (data.photoURL) {
avatarUrl = data.photoURL;
}
var profile = { email: email, username: username };
if (providerData) {
profile.providerData = {};
var _data = providerData[0];
profile.providerData[_data.providerId.split('.')[0]] = _data;
}
if (avatarUrl) profile.avatarUrl = avatarUrl;
profile.uid = uid;
return profile;
};
/**
* @description Create new user account
* @param {Object} userInfo - Object containing signup data
* @param {String} userInfo.username - Username of new user
* @param {String} userInfo.displayName - Display name of new user
* @param {String} userInfo.email - Email of new user
*/
var createUserProfile = exports.createUserProfile = function createUserProfile(newUser) {
// TODO: Verify that username does not already exist
var profile = profileFromUserData(newUser);
return (0, _firebaser.get)([_config.paths.users, newUser.uid])().then(function (loadedProfile) {
return (
// Only write profile if it does not already exist
loadedProfile || Promise.all([(0, _firebaser.set)([_config.paths.users, newUser.uid])(profile), (0, _firebaser.set)([_config.paths.usernames, newUser.uid])(profile.username), (0, _firebaser.set)([_config.paths.uids, profile.username])(newUser.uid)]).then(function () {
return profile;
})
);
});
};
/**
* @description Login/Authenticate as a user
* @param {String|Object} username - Username or email of user to login as.
* Or object containing username, password, and project (optional)
* @param {String} password - Password of user to login as
* @param {String} project - Name of project to clone to account after login (optional)
*/
var login = exports.login = function login(credentials, projectName) {
var _firebase$auth;
if (!credentials.email && !credentials.username && !credentials.provider) {
return Promise.reject({ message: 'Username/Email or Provider is required to login ' });
}
var _getLoginMethodAndPar = getLoginMethodAndParams(credentials),
method = _getLoginMethodAndPar.method,
params = _getLoginMethodAndPar.params;
// TODO: Username login
// if (method === 'signInWithEmailAndPassword' && !credentials.email) {
// devshare.firebase.database().ref().child(devshare._.config.usernames)
// }
return (_firebase$auth = _firebase2.default.auth())[method].apply(_firebase$auth, _toConsumableArray(params)).then(function (userData) {
// Get username from Github API if provider is github
if (userData.credential && userData.credential.provider === 'github.com') {
return (0, _cruder.getWithHeaders)(_config.github.apiUrl + '/user')({ Authorization: 'token ' + userData.credential.accessToken }).then(function (_ref3) {
var login = _ref3.login;
userData.user.username = login;
return userData;
});
}
return userData;
}).then(function (userData) {
return (
// For email auth return uid (createUser is used for creating a profile)
userData.email ? userData : createUserProfile(userData.user)
);
}).then(function (user) {
return (
// If project name is included, clone project
!projectName ? user : (0, _project2.default)('anon', projectName).clone(user.username, projectName).then(function (cloneRes) {
return user;
}).catch(function (error) {
return _extends(user, { error: error });
})
);
});
};
/**
* @description Logout of currently logged in user
*/
var logout = exports.logout = function logout() {
return _firebase2.default.auth().signOut();
};
/**
* @description Signup and login as a new user
* @param {Object} userInfo - Object containing signup data
* @param {String} userInfo.username - Username of new user
* @param {String} userInfo.email - Email of new user
* @param {String} userInfo.displayName - Display name of new user
* @param {String} userInfo.password - Password of new user
* @param {String} userInfo.project - Name of project to clone to account after signup (optional)
*/
var signup = exports.signup = function signup(_ref4, projectName) {
var username = _ref4.username,
email = _ref4.email,
password = _ref4.password,
project = _ref4.project,
name = _ref4.name,
provider = _ref4.provider;
if (!email || !username || !password) {
return Promise.reject('email, username and password are required');
}
// Handle spaces in username
if (username.match(/[/\s]/g)) {
return Promise.reject('Username may not contain spaces');
}
// Handle symbols in username
if (username.match(/[.$#[\]/]/g)) {
return Promise.reject('Username may contain symbols except for ., $, #, [, ], /');
}
// Handle clone project name as part of first param
if (project) projectName = project;
// Set name to username if not provided
if (!name) name = username;
// Handle external provider signup
if (provider) {
return login({ provider: provider }, projectName);
}
return _firebase2.default.auth().createUserWithEmailAndPassword(email, password).then(function (_ref5) {
var providerData = _ref5.providerData,
uid = _ref5.uid;
return createUserProfile({ username: username, email: email, name: name, providerData: providerData, uid: uid }).then(function (newUser) {
return !projectName ? newUser : project('anon', projectName).clone(username, projectName).then(function (cloneRes) {
return newUser;
});
});
});
};
var getCurrentUser = exports.getCurrentUser = function getCurrentUser() {
return _firebase2.default.auth().currentUser;
};
/**
* @description Update user profile in firebase auuth and users path
* @param {Object} userInfo - Object containing signup data
* @param {String} userInfo.username - Username of new user
* @param {String} userInfo.email - Email of new user
* @param {String} userInfo.displayName - Display name of new user
*/
var updateUser = exports.updateUser = function updateUser(newUserData) {
var currentUser = getCurrentUser();
return currentUser.updateProfile(newUserData).then(function () {
return (0, _firebaser.update)([_config.paths.users, currentUser.uid])(newUserData);
}).then(function () {
return currentUser;
});
};
/**
* @description Update user email
* @param {String} email - New email for current user
*/
var updateEmail = exports.updateEmail = function updateEmail(newEmail) {
var currentUser = getCurrentUser();
return currentUser.updateEmail(newEmail).then(function () {
return (0, _firebaser.update)([_config.paths.users, currentUser.uid])({ email: newEmail });
}).then(function () {
return currentUser;
});
};
exports.default = {
getCurrentUser: getCurrentUser,
updateUser: updateUser,
updateEmail: updateEmail,
login: login,
logout: logout,
signup: signup
};
/***/ }),
/* 4 */
/***/ (function(module, exports, __webpack_require__) {
var toString = __webpack_require__(5),
upperFirst = __webpack_require__(17);
/**
* Converts the first character of `string` to upper case and the remaining
* to lower case.
*
* @static
* @memberOf _
* @since 3.0.0
* @category String
* @param {string} [string=''] The string to capitalize.
* @returns {string} Returns the capitalized string.
* @example
*
* _.capitalize('FRED');
* // => 'Fred'
*/
function capitalize(string) {
return upperFirst(toString(string).toLowerCase());
}
module.exports = capitalize;
/***/ }),
/* 5 */
/***/ (function(module, exports, __webpack_require__) {
var baseToString = __webpack_require__(6);
/**
* Converts `value` to a string. An empty string is returned for `null`
* and `undefined` values. The sign of `-0` is preserved.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to convert.
* @returns {string} Returns the converted string.
* @example
*
* _.toString(null);
* // => ''
*
* _.toString(-0);
* // => '-0'
*
* _.toString([1, 2, 3]);
* // => '1,2,3'
*/
function toString(value) {
return value == null ? '' : baseToString(value);
}
module.exports = toString;
/***/ }),
/* 6 */
/***/ (function(module, exports, __webpack_require__) {
var Symbol = __webpack_require__(7),
arrayMap = __webpack_require__(10),
isArray = __webpack_require__(11),
isSymbol = __webpack_require__(12);
/** Used as references for various `Number` constants. */
var INFINITY = 1 / 0;
/** Used to convert symbols to primitives and strings. */
var symbolProto = Symbol ? Symbol.prototype : undefined,
symbolToString = symbolProto ? symbolProto.toString : undefined;
/**
* The base implementation of `_.toString` which doesn't convert nullish
* values to empty strings.
*
* @private
* @param {*} value The value to process.
* @returns {string} Returns the string.
*/
function baseToString(value) {
// Exit early for strings to avoid a performance hit in some environments.
if (typeof value == 'string') {
return value;
}
if (isArray(value)) {
// Recursively convert values (susceptible to call stack limits).
return arrayMap(value, baseToString) + '';
}
if (isSymbol(value)) {
return symbolToString ? symbolToString.call(value) : '';
}
var result = (value + '');
return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
}
module.exports = baseToString;
/***/ }),
/* 7 */
/***/ (function(module, exports, __webpack_require__) {
var root = __webpack_require__(8);
/** Built-in value references. */
var Symbol = root.Symbol;
module.exports = Symbol;
/***/ }),
/* 8 */
/***/ (function(module, exports, __webpack_require__) {
var freeGlobal = __webpack_require__(9);
/** Detect free variable `self`. */
var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
/** Used as a reference to the global object. */
var root = freeGlobal || freeSelf || Function('return this')();
module.exports = root;
/***/ }),
/* 9 */
/***/ (function(module, exports) {
/* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */
var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
module.exports = freeGlobal;
/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
/***/ }),
/* 10 */
/***/ (function(module, exports) {
/**
* A specialized version of `_.map` for arrays without support for iteratee
* shorthands.
*
* @private
* @param {Array} [array] The array to iterate over.
* @param {Function} iteratee The function invoked per iteration.
* @returns {Array} Returns the new mapped array.
*/
function arrayMap(array, iteratee) {
var index = -1,
length = array == null ? 0 : array.length,
result = Array(length);
while (++index < length) {
result[index] = iteratee(array[index], index, array);
}
return result;
}
module.exports = arrayMap;
/***/ }),
/* 11 */
/***/ (function(module, exports) {
/**
* Checks if `value` is classified as an `Array` object.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is an array, else `false`.
* @example
*
* _.isArray([1, 2, 3]);
* // => true
*
* _.isArray(document.body.children);
* // => false
*
* _.isArray('abc');
* // => false
*
* _.isArray(_.noop);
* // => false
*/
var isArray = Array.isArray;
module.exports = isArray;
/***/ }),
/* 12 */
/***/ (function(module, exports, __webpack_require__) {
var baseGetTag = __webpack_require__(13),
isObjectLike = __webpack_require__(16);
/** `Object#toString` result references. */
var symbolTag = '[object Symbol]';
/**
* Checks if `value` is classified as a `Symbol` primitive or object.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
* @example
*
* _.isSymbol(Symbol.iterator);
* // => true
*
* _.isSymbol('abc');
* // => false
*/
function isSymbol(value) {
return typeof value == 'symbol' ||
(isObjectLike(value) && baseGetTag(value) == symbolTag);
}
module.exports = isSymbol;
/***/ }),
/* 13 */
/***/ (function(module, exports, __webpack_require__) {
var Symbol = __webpack_require__(7),
getRawTag = __webpack_require__(14),
objectToString = __webpack_require__(15);
/** `Object#toString` result references. */
var nullTag = '[object Null]',
undefinedTag = '[object Undefined]';
/** Built-in value references. */
var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
/**
* The base implementation of `getTag` without fallbacks for buggy environments.
*
* @private
* @param {*} value The value to query.
* @returns {string} Returns the `toStringTag`.
*/
function baseGetTag(value) {
if (value == null) {
return value === undefined ? undefinedTag : nullTag;
}
return (symToStringTag && symToStringTag in Object(value))
? getRawTag(value)
: objectToString(value);
}
module.exports = baseGetTag;
/***/ }),
/* 14 */
/***/ (function(module, exports, __webpack_require__) {
var Symbol = __webpack_require__(7);
/** Used for built-in method references. */
var objectProto = Object.prototype;
/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;
/**
* Used to resolve the
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
* of values.
*/
var nativeObjectToString = objectProto.toString;
/** Built-in value references. */
var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
/**
* A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
*
* @private
* @param {*} value The value to query.
* @returns {string} Returns the raw `toStringTag`.
*/
function getRawTag(value) {
var isOwn = hasOwnProperty.call(value, symToStringTag),
tag = value[symToStringTag];
try {
value[symToStringTag] = undefined;
var unmasked = true;
} catch (e) {}
var result = nativeObjectToString.call(value);
if (unmasked) {
if (isOwn) {
value[symToStringTag] = tag;
} else {
delete value[symToStringTag];
}
}
return result;
}
module.exports = getRawTag;
/***/ }),
/* 15 */
/***/ (function(module, exports) {
/** Used for built-in method references. */
var objectProto = Object.prototype;
/**
* Used to resolve the
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
* of values.
*/
var nativeObjectToString = objectProto.toString;
/**
* Converts `value` to a string using `Object.prototype.toString`.
*
* @private
* @param {*} value The value to convert.
* @returns {string} Returns the converted string.
*/
function objectToString(value) {
return nativeObjectToString.call(value);
}
module.exports = objectToString;
/***/ }),
/* 16 */
/***/ (function(module, exports) {
/**
* Checks if `value` is object-like. A value is object-like if it's not `null`
* and has a `typeof` result of "object".
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is object-like, else `false`.
* @example
*
* _.isObjectLike({});
* // => true
*
* _.isObjectLike([1, 2, 3]);
* // => true
*
* _.isObjectLike(_.noop);
* // => false
*
* _.isObjectLike(null);
* // => false
*/
function isObjectLike(value) {
return value != null && typeof value == 'object';
}
module.exports = isObjectLike;
/***/ }),
/* 17 */
/***/ (function(module, exports, __webpack_require__) {
var createCaseFirst = __webpack_require__(18);
/**
* Converts the first character of `string` to upper case.
*
* @static
* @memberOf _
* @since 4.0.0
* @category String
* @param {string} [string=''] The string to convert.
* @returns {string} Returns the converted string.
* @example
*
* _.upperFirst('fred');
* // => 'Fred'
*
* _.upperFirst('FRED');
* // => 'FRED'
*/
var upperFirst = createCaseFirst('toUpperCase');
module.exports = upperFirst;
/***/ }),
/* 18 */
/***/ (function(module, exports, __webpack_require__) {
var castSlice = __webpack_require__(19),
hasUnicode = __webpack_require__(21),
stringToArray = __webpack_require__(22),
toString = __webpack_require__(5);
/**
* Creates a function like `_.lowerFirst`.
*
* @private
* @param {string} methodName The name of the `String` case method to use.
* @returns {Function} Returns the new case function.
*/
function createCaseFirst(methodName) {
return function(string) {
string = toString(string);
var strSymbols = hasUnicode(string)
? stringToArray(string)
: undefined;
var chr = strSymbols
? strSymbols[0]
: string.charAt(0);
var trailing = strSymbols
? castSlice(strSymbols, 1).join('')
: string.slice(1);
return chr[methodName]() + trailing;
};
}
module.exports = createCaseFirst;
/***/ }),
/* 19 */
/***/ (function(module, exports, __webpack_require__) {
var baseSlice = __webpack_require__(20);
/**
* Casts `array` to a slice if it's needed.
*
* @private
* @param {Array} array The array to inspect.
* @param {number} start The start position.
* @param {number} [end=array.length] The end position.
* @returns {Array} Returns the cast slice.
*/
function castSlice(array, start, end) {
var length = array.length;
end = end === undefined ? length : end;
return (!start && end >= length) ? array : baseSlice(array, start, end);
}
module.exports = castSlice;
/***/ }),
/* 20 */
/***/ (function(module, exports) {
/**
* The base implementation of `_.slice` without an iteratee call guard.
*
* @private
* @param {Array} array The array to slice.
* @param {number} [start=0] The start position.
* @param {number} [end=array.length] The end position.
* @returns {Array} Returns the slice of `array`.
*/
function baseSlice(array, start, end) {
var index = -1,
length = array.length;
if (start < 0) {
start = -start > length ? 0 : (length + start);
}
end = end > length ? length : end;
if (end < 0) {
end += length;
}
length = start > end ? 0 : ((end - start) >>> 0);
start >>>= 0;
var result = Array(length);
while (++index < length) {
result[index] = array[index + start];
}
return result;
}
module.exports = baseSlice;
/***/ }),
/* 21 */
/***/ (function(module, exports) {
/** Used to compose unicode character classes. */
var rsAstralRange = '\\ud800-\\udfff',
rsComboMarksRange = '\\u0300-\\u036f',
reComboHalfMarksRange = '\\ufe20-\\ufe2f',
rsComboSymbolsRange = '\\u20d0-\\u20ff',
rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
rsVarRange = '\\ufe0e\\ufe0f';
/** Used to compose unicode capture groups. */
var rsZWJ = '\\u200d';
/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');
/**
* Checks if `string` contains Unicode symbols.
*
* @private
* @param {string} string The string to inspect.
* @returns {boolean} Returns `true` if a symbol is found, else `false`.
*/
function hasUnicode(string) {
return reHasUnicode.test(string);
}
module.exports = hasUnicode;
/***/ }),
/* 22 */
/***/ (function(module, exports, __webpack_require__) {
var asciiToArray = __webpack_require__(23),
hasUnicode = __webpack_require__(21),
unicodeToArray = __webpack_require__(24);
/**
* Converts `string` to an array.
*
* @private
* @param {string} string The string to convert.
* @returns {Array} Returns the converted array.
*/
function stringToArray(string) {
return hasUnicode(string)
? unicodeToArray(string)
: asciiToArray(string);
}
module.exports = stringToArray;
/***/ }),
/* 23 */
/***/ (function(module, exports) {
/**
* Converts an ASCII `string` to an array.
*
* @private
* @param {string} string The string to convert.
* @returns {Array} Returns the converted array.
*/
function asciiToArray(string) {
return string.split('');
}
module.exports = asciiToArray;
/***/ }),
/* 24 */
/***/ (function(module, exports) {
/** Used to compose unicode character classes. */
var rsAstralRange = '\\ud800-\\udfff',
rsComboMarksRange = '\\u0300-\\u036f',
reComboHalfMarksRange = '\\ufe20-\\ufe2f',
rsComboSymbolsRange = '\\u20d0-\\u20ff',
rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
rsVarRange = '\\ufe0e\\ufe0f';
/** Used to compose unicode capture groups. */
var rsAstral = '[' + rsAstralRange + ']',
rsCombo = '[' + rsComboRange + ']',
rsFitz = '\\ud83c[\\udffb-\\udfff]',
rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
rsNonAstral = '[^' + rsAstralRange + ']',
rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
rsZWJ = '\\u200d';
/** Used to compose unicode regexes. */
var reOptMod = rsModifier + '?',
rsOptVar = '[' + rsVarRange + ']?',
rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
rsSeq = rsOptVar + reOptMod + rsOptJoin,
rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');
/**
* Converts a Unicode `string` to an array.
*
* @private
* @param {string} string The string to convert.
* @returns {Array} Returns the converted array.
*/
function unicodeToArray(string) {
return string.match(reUnicode) || [];
}
module.exports = unicodeToArray;
/***/ }),
/* 25 */
/***/ (function(module, exports, __webpack_require__) {
/**
* Firebase libraries for browser - npm package.
*
* Usage:
*
* firebase = require('firebase');
*/
var firebase = __webpack_require__(26);
__webpack_require__(27);
__webpack_require__(28);
__webpack_require__(29);
__webpack_require__(30);
module.exports = firebase;
/***/ }),
/* 26 */
/***/ (function(module, exports) {
/* WEBPACK VAR INJECTION */(function(global) {var firebase = (function(){
/*! @license Firebase v3.7.0
Build: 3.7.0-rc.2
Terms: https://firebase.google.com/terms/ */
var firebase = null; (function() { var aa="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(c.get||c.set)throw new TypeError("ES3 does not support getters and setters.");a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)},k="undefined"!=typeof window&&window===this?this:"undefined"!=typeof global&&null!=global?global:this,l=function(){l=function(){};k.Symbol||(k.Symbol=ba)},ca=0,ba=function(a){return"jscomp_symbol_"+(a||"")+ca++},n=function(){l();var a=k.Symbol.iterator;a||(a=k.Symbol.iterator=
k.Symbol("iterator"));"function"!=typeof Array.prototype[a]&&aa(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return m(this)}});n=function(){}},m=function(a){var b=0;return da(function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}})},da=function(a){n();a={next:a};a[k.Symbol.iterator]=function(){return this};return a},q=this,r=function(){},t=function(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);
if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null";else if("function"==b&&"undefined"==typeof a.call)return"object";return b},v=function(a){return"function"==t(a)},ea=function(a,
b,c){return a.call.apply(a.bind,arguments)},fa=function(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}},w=function(a,b,c){w=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?ea:fa;return w.apply(null,arguments)},x=function(a,b){var c=Array.prototype.slice.call(arguments,
1);return function(){var b=c.slice();b.push.apply(b,arguments);return a.apply(this,b)}},y=function(a,b){function c(){}c.prototype=b.prototype;a.ha=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.base=function(a,c,h){for(var e=Array(arguments.length-2),d=2;d<arguments.length;d++)e[d-2]=arguments[d];return b.prototype[c].apply(a,e)}};var A;A="undefined"!==typeof window?window:"undefined"!==typeof self?self:global;
var __extends=function(a,b){function c(){this.constructor=a}for(var d in b)b.hasOwnProperty(d)&&(a[d]=b[d]);a.prototype=null===b?Object.create(b):(c.prototype=b.prototype,new c)},__assign=Object.assign||function(a){for(var b,c=1,d=arguments.length;c<d;c++){b=arguments[c];for(var e in b)Object.prototype.hasOwnProperty.call(b,e)&&(a[e]=b[e])}return a},__rest=function(a,b){var c={},d;for(d in a)Object.prototype.hasOwnProperty.call(a,d)&&0>b.indexOf(d)&&(c[d]=a[d]);if(null!=a&&"function"===typeof Object.getOwnPropertySymbols){var e=
0;for(d=Object.getOwnPropertySymbols(a);e<d.length;e++)0>b.indexOf(d[e])&&(c[d[e]]=a[d[e]])}return c},__decorate=function(a,b,c,d){var e=arguments.length,h=3>e?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d,g;g=A.Reflect;if("object"===typeof g&&"function"===typeof g.decorate)h=g.decorate(a,b,c,d);else for(var f=a.length-1;0<=f;f--)if(g=a[f])h=(3>e?g(h):3<e?g(b,c,h):g(b,c))||h;return 3<e&&h&&Object.defineProperty(b,c,h),h},__metadata=function(a,b){var c=A.Reflect;if("object"===typeof c&&"function"===
typeof c.metadata)return c.metadata(a,b)},__param=function(a,b){return function(c,d){b(c,d,a)}},__awaiter=function(a,b,c,d){return new (c||(c=Promise))(function(e,h){function g(a){try{p(d.next(a))}catch(u){h(u)}}function f(a){try{p(d["throw"](a))}catch(u){h(u)}}function p(a){a.done?e(a.value):(new c(function(b){b(a.value)})).then(g,f)}p((d=d.apply(a,b)).next())})},__generator=function(a,b){function c(a){return function(b){return d([a,b])}}function d(c){if(h)throw new TypeError("Generator is already executing.");
for(;e;)try{if(h=1,g&&(f=g[c[0]&2?"return":c[0]?"throw":"next"])&&!(f=f.call(g,c[1])).done)return f;if(g=0,f)c=[0,f.value];switch(c[0]){case 0:case 1:f=c;break;case 4:return e.label++,{value:c[1],done:!1};case 5:e.label++;g=c[1];c=[0];continue;case 7:c=e.G.pop();e.I.pop();continue;default:if(!(f=e.I,f=0<f.length&&f[f.length-1])&&(6===c[0]||2===c[0])){e=0;continue}if(3===c[0]&&(!f||c[1]>f[0]&&c[1]<f[3]))e.label=c[1];else if(6===c[0]&&e.label<f[1])e.label=f[1],f=c;else if(f&&e.label<f[2])e.label=f[2],
e.G.push(c);else{f[2]&&e.G.pop();e.I.pop();continue}}c=b.call(a,e)}catch(z){c=[6,z],g=0}finally{h=f=0}if(c[0]&5)throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}var e={label:0,ga:function(){if(f[0]&1)throw f[1];return f[1]},I:[],G:[]},h,g,f;return{next:c(0),"throw":c(1),"return":c(2)}};
"undefined"!==typeof A.S&&A.S||(A.__extends=__extends,A.__assign=__assign,A.__rest=__rest,A.__extends=__extends,A.__decorate=__decorate,A.__metadata=__metadata,A.__param=__param,A.__awaiter=__awaiter,A.__generator=__generator);var B=function(a){if(Error.captureStackTrace)Error.captureStackTrace(this,B);else{var b=Error().stack;b&&(this.stack=b)}a&&(this.message=String(a))};y(B,Error);B.prototype.name="CustomError";var ga=function(a,b){for(var c=a.split("%s"),d="",e=Array.prototype.slice.call(arguments,1);e.length&&1<c.length;)d+=c.shift()+e.shift();return d+c.join("%s")};var C=function(a,b){b.unshift(a);B.call(this,ga.apply(null,b));b.shift()};y(C,B);C.prototype.name="AssertionError";var ha=function(a,b,c,d){var e="Assertion failed";if(c)var e=e+(": "+c),h=d;else a&&(e+=": "+a,h=b);throw new C(""+e,h||[]);},D=function(a,b,c){a||ha("",null,b,Array.prototype.slice.call(arguments,2))},E=function(a,b,c){v(a)||ha("Expected function but got %s: %s.",[t(a),a],b,Array.prototype.slice.call(arguments,2))};var F=function(a,b,c){this.Y=c;this.T=a;this.Z=b;this.s=0;this.o=null};F.prototype.get=function(){var a;0<this.s?(this.s--,a=this.o,this.o=a.next,a.next=null):a=this.T();return a};F.prototype.put=function(a){this.Z(a);this.s<this.Y&&(this.s++,a.next=this.o,this.o=a)};var G;a:{var ia=q.navigator;if(ia){var ja=ia.userAgent;if(ja){G=ja;break a}}G=""};var ka=function(a){q.setTimeout(function(){throw a;},0)},H,la=function(){var a=q.MessageChannel;"undefined"===typeof a&&"undefined"!==typeof window&&window.postMessage&&window.addEventListener&&-1==G.indexOf("Presto")&&(a=function(){var a=document.createElement("IFRAME");a.style.display="none";a.src="";document.documentElement.appendChild(a);var b=a.contentWindow,a=b.document;a.open();a.write("");a.close();var c="callImmediate"+Math.random(),d="file:"==b.location.protocol?"*":b.location.protocol+
"//"+b.location.host,a=w(function(a){if(("*"==d||a.origin==d)&&a.data==c)this.port1.onmessage()},this);b.addEventListener("message",a,!1);this.port1={};this.port2={postMessage:function(){b.postMessage(c,d)}}});if("undefined"!==typeof a&&-1==G.indexOf("Trident")&&-1==G.indexOf("MSIE")){var b=new a,c={},d=c;b.port1.onmessage=function(){if(void 0!==c.next){c=c.next;var a=c.J;c.J=null;a()}};return function(a){d.next={J:a};d=d.next;b.port2.postMessage(0)}}return"undefined"!==typeof document&&"onreadystatechange"in
document.createElement("SCRIPT")?function(a){var b=document.createElement("SCRIPT");b.onreadystatechange=function(){b.onreadystatechange=null;b.parentNode.removeChild(b);b=null;a();a=null};document.documentElement.appendChild(b)}:function(a){q.setTimeout(a,0)}};var I=function(){this.v=this.g=null},ma=new F(function(){return new J},function(a){a.reset()},100);I.prototype.add=function(a,b){var c=ma.get();c.set(a,b);this.v?this.v.next=c:(D(!this.g),this.g=c);this.v=c};I.prototype.remove=function(){var a=null;this.g&&(a=this.g,this.g=this.g.next,this.g||(this.v=null),a.next=null);return a};var J=function(){this.next=this.scope=this.B=null};J.prototype.set=function(a,b){this.B=a;this.scope=b;this.next=null};
J.prototype.reset=function(){this.next=this.scope=this.B=null};var M=function(a,b){K||na();L||(K(),L=!0);oa.add(a,b)},K,na=function(){if(-1!=String(q.Promise).indexOf("[native code]")){var a=q.Promise.resolve(void 0);K=function(){a.then(pa)}}else K=function(){var a=pa;!v(q.setImmediate)||q.Window&&q.Window.prototype&&-1==G.indexOf("Edge")&&q.Window.prototype.setImmediate==q.setImmediate?(H||(H=la()),H(a)):q.setImmediate(a)}},L=!1,oa=new I,pa=function(){for(var a;a=oa.remove();){try{a.B.call(a.scope)}catch(b){ka(b)}ma.put(a)}L=!1};var O=function(a,b){this.b=0;this.R=void 0;this.j=this.h=this.u=null;this.m=this.A=!1;if(a!=r)try{var c=this;a.call(b,function(a){N(c,2,a)},function(a){try{if(a instanceof Error)throw a;throw Error("Promise rejected.");}catch(e){}N(c,3,a)})}catch(d){N(this,3,d)}},qa=function(){this.next=this.context=this.i=this.f=this.child=null;this.w=!1};qa.prototype.reset=function(){this.context=this.i=this.f=this.child=null;this.w=!1};
var ra=new F(function(){return new qa},function(a){a.reset()},100),sa=function(a,b,c){var d=ra.get();d.f=a;d.i=b;d.context=c;return d},ua=function(a,b,c){ta(a,b,c,null)||M(x(b,a))};O.prototype.then=function(a,b,c){null!=a&&E(a,"opt_onFulfilled should be a function.");null!=b&&E(b,"opt_onRejected should be a function. Did you pass opt_context as the second argument instead of the third?");return va(this,v(a)?a:null,v(b)?b:null,c)};O.prototype.then=O.prototype.then;O.prototype.$goog_Thenable=!0;
O.prototype.ba=function(a,b){return va(this,null,a,b)};var xa=function(a,b){a.h||2!=a.b&&3!=a.b||wa(a);D(null!=b.f);a.j?a.j.next=b:a.h=b;a.j=b},va=function(a,b,c,d){var e=sa(null,null,null);e.child=new O(function(a,g){e.f=b?function(c){try{var e=b.call(d,c);a(e)}catch(z){g(z)}}:a;e.i=c?function(b){try{var e=c.call(d,b);a(e)}catch(z){g(z)}}:g});e.child.u=a;xa(a,e);return e.child};O.prototype.da=function(a){D(1==this.b);this.b=0;N(this,2,a)};
O.prototype.ea=function(a){D(1==this.b);this.b=0;N(this,3,a)};
var N=function(a,b,c){0==a.b&&(a===c&&(b=3,c=new TypeError("Promise cannot resolve to itself")),a.b=1,ta(c,a.da,a.ea,a)||(a.R=c,a.b=b,a.u=null,wa(a),3!=b||ya(a,c)))},ta=function(a,b,c,d){if(a instanceof O)return null!=b&&E(b,"opt_onFulfilled should be a function."),null!=c&&E(c,"opt_onRejected should be a function. Did you pass opt_context as the second argument instead of the third?"),xa(a,sa(b||r,c||null,d)),!0;var e;if(a)try{e=!!a.$goog_Thenable}catch(g){e=!1}else e=!1;if(e)return a.then(b,c,d),
!0;e=typeof a;if("object"==e&&null!=a||"function"==e)try{var h=a.then;if(v(h))return za(a,h,b,c,d),!0}catch(g){return c.call(d,g),!0}return!1},za=function(a,b,c,d,e){var h=!1,g=function(a){h||(h=!0,c.call(e,a))},f=function(a){h||(h=!0,d.call(e,a))};try{b.call(a,g,f)}catch(p){f(p)}},wa=function(a){a.A||(a.A=!0,M(a.V,a))},Aa=function(a){var b=null;a.h&&(b=a.h,a.h=b.next,b.next=null);a.h||(a.j=null);null!=b&&D(null!=b.f);return b};
O.prototype.V=function(){for(var a;a=Aa(this);){var b=this.b,c=this.R;if(3==b&&a.i&&!a.w){var d;for(d=this;d&&d.m;d=d.u)d.m=!1}if(a.child)a.child.u=null,Ba(a,b,c);else try{a.w?a.f.call(a.context):Ba(a,b,c)}catch(e){Ca.call(null,e)}ra.put(a)}this.A=!1};var Ba=function(a,b,c){2==b?a.f.call(a.context,c):a.i&&a.i.call(a.context,c)},ya=function(a,b){a.m=!0;M(function(){a.m&&Ca.call(null,b)})},Ca=ka;function P(a,b){if(!(b instanceof Object))return b;switch(b.constructor){case Date:return new Date(b.getTime());case Object:void 0===a&&(a={});break;case Array:a=[];break;default:return b}for(var c in b)b.hasOwnProperty(c)&&(a[c]=P(a[c],b[c]));return a};O.all=function(a){return new O(function(b,c){var d=a.length,e=[];if(d)for(var h=function(a,c){d--;e[a]=c;0==d&&b(e)},g=function(a){c(a)},f=0,p;f<a.length;f++)p=a[f],ua(p,x(h,f),g);else b(e)})};O.resolve=function(a){if(a instanceof O)return a;var b=new O(r);N(b,2,a);return b};O.reject=function(a){return new O(function(b,c){c(a)})};O.prototype["catch"]=O.prototype.ba;var Q=O;"undefined"!==typeof Promise&&(Q=Promise);var Da=Q;function Ea(a,b){a=new R(a,b);return a.subscribe.bind(a)}var R=function(a,b){var c=this;this.a=[];this.P=0;this.task=Da.resolve();this.l=!1;this.F=b;this.task.then(function(){a(c)}).catch(function(a){c.error(a)})};R.prototype.next=function(a){S(this,function(b){b.next(a)})};R.prototype.error=function(a){S(this,function(b){b.error(a)});this.close(a)};R.prototype.complete=function(){S(this,function(a){a.complete()});this.close()};
R.prototype.subscribe=function(a,b,c){var d=this,e;if(void 0===a&&void 0===b&&void 0===c)throw Error("Missing Observer.");e=Fa(a)?a:{next:a,error:b,complete:c};void 0===e.next&&(e.next=T);void 0===e.error&&(e.error=T);void 0===e.complete&&(e.complete=T);a=this.fa.bind(this,this.a.length);this.l&&this.task.then(function(){try{d.K?e.error(d.K):e.complete()}catch(h){}});this.a.push(e);return a};
R.prototype.fa=function(a){void 0!==this.a&&void 0!==this.a[a]&&(delete this.a[a],--this.P,0===this.P&&void 0!==this.F&&this.F(this))};var S=function(a,b){if(!a.l)for(var c=0;c<a.a.length;c++)Ga(a,c,b)},Ga=function(a,b,c){a.task.then(function(){if(v