diff --git a/.gitignore b/.gitignore index 80129c6c864..584ea1bedfc 100644 --- a/.gitignore +++ b/.gitignore @@ -45,8 +45,21 @@ src/sunstone/public/css/app.min.css src/sunstone/public/dist/ src/sunstone/public/locale/languages/*.js src/sunstone/public/package-lock.json +src/sunstone/guac/node_modules +src/sunstone/guac/dist +src/sunstone/guac/package-lock.json .tx/config +src/fireedge/node_modules +src/fireedge/dist +src/fireedge/test +src/fireedge/.vscode/launch.json +src/fireedge/yarn-error.log +src/fireedge/.DS_Store +src/fireedge/cypress/screenshots +src/fireedge/yarn.lock +src/fireedge/package-lock.json + src/onedb/local/ src/onedb/shared/ @@ -57,4 +70,4 @@ share/esx-fw-vnc/.vagrant* share/context/* !share/context/download_context.sh -!share/context/SConstruct +!share/context/SConstruct \ No newline at end of file diff --git a/README.md b/README.md index 8bdb1e5a04e..7167ea03f43 100644 --- a/README.md +++ b/README.md @@ -1,187 +1,61 @@ -# OpenNebula +# [![OpenNebula Logo](https://opennebula.io/wp-content/uploads/2019/04/img-logo-blue.svg)](https://opennebula.io/) [![Build Status](https://travis-ci.org/OpenNebula/one.svg?branch=master)](https://travis-ci.org/OpenNebula/one) ## Description -OpenNebula is an open-source project delivering a simple but feature-rich and -flexible solution to build and manage enterprise clouds and virtualized data centers. +[OpenNebula](https://opennebula.io/) is an open source platform delivering a simple but feature-rich and flexible solution to build and manage enterprise clouds for virtualized services, containerized applications and serverless computing. -Complete documentation: https://docs.opennebula.io +[![OpenNebula Architecture](https://opennebula.io/wp-content/uploads/2020/08/KeyFeatures_small.png)](https://opennebula.io/discover/) -How to contribute: https://github.com/OpenNebula/one/wiki/How-to-Contribute-to-Development +### To Start Using OpenNebula -## Installation - -### Requirements - -This machine will act as the OpenNebula server and therefore needs to have -installed the following software: - -* **ruby** >= 1.8.7 -* **sqlite3** >= 3.5.2 -* **xmlrpc-c** >= 1.06 -* **openssl** >= 0.9 -* **ssh** -* **sqlite3-ruby** gem - -Additionally, to build OpenNebula from source you need: - -* Development versions of the **sqlite3**, **xmlrpc-c** and **openssl** - packages, if your distribution does not install them with the libraries. -* **scons** >= 0.97 -* **g++** >= 4 -* **flex** >= 2.5 (optional, only needed to rebuild the parsers) -* **bison** >= 2.3 (optional, only needed to rebuild the parsers) -* **libxml2-dev** -* **libvncserver-dev** (optional, only needed to build svncterm_server) - -### Ruby Libraries Requirements - -A set of gem requirements are needed to make several components work. We -include a handy script to install them and the requirements. It is located at -`share/install_gems/install_gems` and you should use it to install the -required gems. You have more information at: - - https://docs.opennebula.io/stable/integration/references/compile.html - -If you want to install them manually here are the list of required rubygems: - -* OpenNebula and clients (plus cloud interfaces) - * sqlite3 - * json - * sequel - * mysql - * net-ldap - * amazon-ec2 - * rack - * sinatra - * thin - * uuidtools - * curb - * nokogiri - -* Sunstone server - * json - * rack - * sinatra - * thin - * sequel - * nokogiri - -### Optional Packages - -These packages are not needed to run or build OpenNebula. They improve the -performance of the user-land libraries and tools of OpenNebula, nor the core -system. You will probably experiment a more responsive CLI. - -First install rubygems and ruby development libraries - -* **ruby-dev** -* **rubygems** -* **rake** -* **make** - -Then install the following packages: +* Explore OpenNebula’s **key features** [on our website](https://opennebula.io/discover/). +* Have a look at our [introductory datasheet](https://support.opennebula.pro/hc/en-us/articles/360036935791-OpenNebula-Key-Features-Datasheet). +* Browse our catalog of [screencasts and video tutorials](https://opennebula.io/screencasts/). +* Download our [technical white papers](https://support.opennebula.pro/hc/en-us/sections/200820599-OpenNebula-Product-White-Papers). +* See our [Documentation](https://docs.opennebula.io). +* Join our [Community Forum](https://forum.opennebula.io/). -* **ruby xmlparser**, some distributions include a binary package for this - (**libxml-parser-ruby1.8**). If it is not available in your distribution - install expat libraries with its development files and install xmlparser - using gem: +[![OpenNebula Intro](https://opennebula.io/wp-content/uploads/2020/08/Intro_Screencast_small.png)](https://opennebula.io/screencast-overview/) - $ sudo gem install xmlparser --no-document +### Contributing to OpenNebula - Note the extra parameters to gem install. Some versions of xmlparser have - problems building the documentation and we can use it without documentation - installed. +* Contribute to [Development](https://github.com/OpenNebula/one/wiki/How-to-Contribute-to-Development). +* Learn about how to expand our [Add-on Catalog](https://github.com/OpenNebula/one/wiki/How-to-participate-in-Add_on-Development). +* Help us [translate OpenNebula](https://www.transifex.com/opennebula/one/) to your language. +* Report a [security vulnerability](https://github.com/OpenNebula/one/wiki/Vulnerability-Management-Process). -* **ruby ox**, fast xml parsing library: - - $ sudo gem install ox --no-document - - -### Building - -Compilation is done using **scons** command: - - $ scons [OPTION=VALUE] - -The argument expression *[OPTIONAL]* is used to set non-default values for: - - OPTION VALUE - sqlite_db path-to-sqlite-install - sqlite no if you don't want to build sqlite support - mysql yes if you want to build mysql support - xmlrpc path-to-xmlrpc-install - parsers yes if you want to rebuild flex/bison files - new_xmlrpc yes if you have an xmlrpc-c version >= 1.31 - sunstone yes if you want to build sunstone minified files - systemd yes if you want to build systemd support - svncterm no if you want to skip building vnc support for LXD drivers - - -### Installation - -OpenNebula can be installed in two modes: system-wide, or in self-contained -directory. In either case, you do not need to run OpenNebula as root. These -options can be specified when running the install script: - - $ ./install.sh install_options - -where **install_options** can be one or more of: +## Installation - OPTION VALUE - -u user that will run OpenNebula, defaults to user executing - install.sh - -g group of the user that will run OpenNebula, defaults to user - executing install.sh - -k keep current configuration files, useful when upgrading - -d target installation directory. If defined, it will specified - the path for the self-contained install. If not defined, the - installation will be performed system wide - -c only install client utilities: OpenNebula cli, occi and ec2 - client files - -r remove Opennebula, only useful if -d was not specified, - otherwise rm -rf $ONE_LOCATION would do the job - -p do not install OpenNebula Sunstone non-minified files - -G install only OpenNebula Gate - -f install only OpenNebula Flow - -h prints installer help +You can find more information about OpenNebula’s architecture, installation, configuration and references to configuration files in [this documentation section](https://docs.opennebula.io/stable/deployment/index.html). +It is very useful to learn where [log files of the main OpenNebula components](http://docs.opennebula.io/stable/deployment/references/log_debug.html) are placed. Also check the references about the [main OpenNebula daemon configuration file](https://docs.opennebula.io/stable/deployment/references/oned_conf.html). -## Deployment +### Front-end Installation -You can find the documentation about OpenNebula architecture, installation, -configuration and references to configuration files in this documentation -chapter: +The Front-end is the central part of an OpenNebula installation. This is the machine where the server software is installed and where you connect to manage your cloud. It can be a physical node or a virtual instance. -https://docs.opennebula.io/stable/deployment/index.html +Please, visit the [official documentation](http://docs.opennebula.io/stable/deployment/opennebula_installation/overview.html) for more details and a step-by-step guide. Using the packages provided on our site is the recommended method, to ensure the installation of the latest version, and to avoid possible package divergences with different distributions. There are two alternatives here: you can add our **package repositories** to your system, or visit the [software menu](opennebula.io/use/) to **download the latest package** for your Linux distribution. -The reference about the main configuration file is located here: +If there are no packages for your distribution, please check the [build dependencies](http://docs.opennebula.io/stable/integration/references/build_deps.html#build-deps) for OpenNebula and head to the [Building from Source Code guide](http://docs.opennebula.io/stable/integration/references/compile.html#compile). -https://docs.opennebula.io/stable/deployment/references/oned_conf.html +### Node Installation +After the OpenNebula Front-end is correctly set up, the next step is preparing the hosts where the VMs are going to run. Please, refer to the [documentation](http://docs.opennebula.io/stable/deployment/node_installation/overview.html) site for more details. ## Contact -OpenNebula web page: https://opennebula.io - -Development and issue tracking: https://github.com/OpenNebula/one/issues - -Support: https://opennebula.io/support - +* OpenNebula web page: https://opennebula.io +* Development and issue tracking: https://github.com/OpenNebula/one/issues +* Enterprise Services: https://opennebula.io/enterprise/ ## License -Copyright 2002-2020, OpenNebula Project, OpenNebula Systems (formerly C12G Labs) +Copyright 2002-2020, OpenNebula Project, OpenNebula Systems (formerly C12G Labs). + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 -Licensed under the Apache License, Version 2.0 (the "License"); you may -not use this file except in compliance with the License. You may obtain -a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/SConstruct b/SConstruct index f8a0764a24a..cbbb3442e5c 100755 --- a/SConstruct +++ b/SConstruct @@ -82,7 +82,6 @@ main_env.Append(LIBPATH=[ cwd+'/src/cluster', cwd+'/src/datastore', cwd+'/src/group', - cwd+'/src/mad', cwd+'/src/nebula', cwd+'/src/pool', cwd+'/src/template', @@ -112,7 +111,7 @@ main_env.Append(LIBPATH=[ cwd+'/src/market', cwd+'/src/ipamm', cwd+'/src/data_model', - cwd+'/src/monitor/src/protocol' + cwd+'/src/protocol' ]) # Compile flags @@ -202,6 +201,9 @@ main_env.Append(enterprise=ARGUMENTS.get('enterprise', 'no')) # Sunstone minified files generation main_env.Append(sunstone=ARGUMENTS.get('sunstone', 'no')) +# FireEdge minified files generation +main_env.Append(fireedge=ARGUMENTS.get('fireedge', 'no')) + # TODO this should be aligned with one-ee-tools workflows # Onedb Marshal files generation main_env.Append(marshal=ARGUMENTS.get('marshal', 'no')) @@ -281,7 +283,6 @@ build_scripts = [ 'src/cluster/SConstruct', 'src/datastore/SConstruct', 'src/group/SConstruct', - 'src/mad/SConstruct', 'src/nebula/SConstruct', 'src/pool/SConstruct', 'src/vm/SConstruct', @@ -311,11 +312,13 @@ build_scripts = [ 'src/ipamm/SConstruct', 'src/sunstone/public/locale/languages/SConstruct', 'src/sunstone/public/SConstruct', + 'src/fireedge/SConstruct', 'share/rubygems/SConstruct', 'src/client/SConstruct', 'src/docker_machine/SConstruct', 'src/monitor/SConstruct', 'src/onedb/SConstruct', + 'src/protocol/SConstruct', svncterm_path, 'share/context/SConstruct' ] diff --git a/include/AclManager.h b/include/AclManager.h index c85f7c1e4bc..d4257056b0d 100644 --- a/include/AclManager.h +++ b/include/AclManager.h @@ -17,23 +17,18 @@ #ifndef ACL_MANAGER_H_ #define ACL_MANAGER_H_ -#include "AuthManager.h" +#include "Listener.h" #include "AuthRequest.h" #include "PoolObjectSQL.h" -#include "AclRule.h" -#include "NebulaLog.h" - -using namespace std; +class AclRule; class PoolObjectAuth; class SqlDB; -extern "C" void * acl_action_loop(void *arg); - /** * This class manages the ACL rules and the authorization engine */ -class AclManager : public Callbackable, public ActionListener +class AclManager : public Callbackable { public: /** @@ -56,6 +51,8 @@ class AclManager : public Callbackable, public ActionListener void finalize(); + void join_thread(); + /** * Reload the ACL rules from the DB. This function needs to be used when * a server becomes leader of the zone as the ACL cache maybe out-dated @@ -79,10 +76,10 @@ class AclManager : public Callbackable, public ActionListener * @param op The operation to be authorized * @return true if the authorization is granted by any rule */ - const bool authorize(int uid, - const set& user_groups, - const PoolObjectAuth& obj_perms, - AuthRequest::Operation op); + bool authorize(int uid, + const std::set& user_groups, + const PoolObjectAuth& obj_perms, + AuthRequest::Operation op) const; /** * Takes an authorization request for oneadmin @@ -92,8 +89,8 @@ class AclManager : public Callbackable, public ActionListener * @param op The operation to be authorized * @return true if the authorization is granted for oneadmin */ - const bool oneadmin_authorize(const PoolObjectAuth& obj_perms, - AuthRequest::Operation op); + bool oneadmin_authorize(const PoolObjectAuth& obj_perms, + AuthRequest::Operation op) const; /** * Adds a new rule to the ACL rule set @@ -113,7 +110,7 @@ class AclManager : public Callbackable, public ActionListener long long resource, long long rights, long long zone, - string& error_str); + std::string& error_str); /** * Deletes a rule from the ACL rule set * @@ -121,7 +118,7 @@ class AclManager : public Callbackable, public ActionListener * @param error_str Returns the error reason, if any * @return 0 on success */ - virtual int del_rule(int oid, string& error_str); + virtual int del_rule(int oid, std::string& error_str); /** * Deletes a new rule from the ACL rule set @@ -138,7 +135,7 @@ class AclManager : public Callbackable, public ActionListener long long resource, long long rights, long long zone, - string& error_str); + std::string& error_str); /** * Deletes rules that apply to this user id @@ -190,16 +187,16 @@ class AclManager : public Callbackable, public ActionListener * @param cids Set of object cluster IDs over which the user can operate */ void reverse_search(int uid, - const set& user_groups, + const std::set& user_groups, PoolObjectSQL::ObjectType obj_type, AuthRequest::Operation op, bool disable_all_acl, bool disable_cluster_acl, bool disable_group_acl, bool& all, - vector& oids, - vector& gids, - vector& cids); + std::vector& oids, + std::vector& gids, + std::vector& cids); /* ---------------------------------------------------------------------- */ /* DB management */ @@ -215,20 +212,7 @@ class AclManager : public Callbackable, public ActionListener * @param oss The output stream to dump the rule set contents * @return 0 on success */ - virtual int dump(ostringstream& oss); - - // ------------------------------------------------------------------------- - // Refresh loop thread - // ------------------------------------------------------------------------- - /** - * Gets the AclManager thread identification. The thread is only - * initialized if the refresh_cache flag is true. - * @return pthread_t for the manager thread (that in the action loop). - */ - pthread_t get_thread_id() const - { - return acl_thread; - }; + virtual int dump(std::ostringstream& oss); protected: /** @@ -237,9 +221,11 @@ class AclManager : public Callbackable, public ActionListener * from DB) */ AclManager(int _zone_id) - :zone_id(_zone_id), db(0), is_federation_slave(false) + : zone_id(_zone_id) + , db(0) + , is_federation_slave(false) + , timer_period(-1) { - pthread_mutex_init(&mutex, 0); }; // ------------------------------------------------------------------------- @@ -249,12 +235,12 @@ class AclManager : public Callbackable, public ActionListener * ACL rules. Each rule is indexed by its 'user' long long attibute, * several rules can apply to the same user */ - multimap acl_rules; + std::multimap acl_rules; /** * Rules indexed by oid. Stores the same rules as acl_rules */ - map acl_rules_oids; + std::map acl_rules_oids; private: @@ -276,16 +262,17 @@ class AclManager : public Callbackable, public ActionListener * @return true if any rule grants permission */ bool match_rules( - long long user_req, - long long resource_oid_req, - long long resource_gid_req, - const set& resource_cid_req, - long long resource_all_req, - long long rights_req, - long long resource_oid_mask, - long long resource_gid_mask, - long long resource_cid_mask, - const multimap& rules); + long long user_req, + long long resource_oid_req, + long long resource_gid_req, + const std::set& resource_cid_req, + long long resource_all_req, + long long rights_req, + long long resource_oid_mask, + long long resource_gid_mask, + long long resource_cid_mask, + const std::multimap& rules) const; + /** * Wrapper for match_rules. It will check if any rules in the temporary * multimap or in the internal one grants permission. @@ -304,16 +291,16 @@ class AclManager : public Callbackable, public ActionListener * @return true if any rule grants permission */ bool match_rules_wrapper( - long long user_req, - long long resource_oid_req, - long long resource_gid_req, - const set& resource_cid_req, - long long resource_all_req, - long long rights_req, - long long individual_obj_type, - long long group_obj_type, - long long cluster_obj_type, - const multimap &tmp_rules); + long long user_req, + long long resource_oid_req, + long long resource_gid_req, + const std::set& resource_cid_req, + long long resource_all_req, + long long rights_req, + long long individual_obj_type, + long long group_obj_type, + long long cluster_obj_type, + const std::multimap &tmp_rules) const; /** * Deletes all rules that match the user mask * @@ -348,23 +335,7 @@ class AclManager : public Callbackable, public ActionListener // Mutex synchronization // ------------------------------------------------------------------------- - pthread_mutex_t mutex; - - /** - * Function to lock the manager - */ - void lock() - { - pthread_mutex_lock(&mutex); - }; - - /** - * Function to unlock the manager - */ - void unlock() - { - pthread_mutex_unlock(&mutex); - }; + mutable std::mutex acl_mutex; // ------------------------------------------------------------------------- // DataBase implementation variables @@ -374,15 +345,6 @@ class AclManager : public Callbackable, public ActionListener */ SqlDB * db; - /** - * Tablename for the ACL rules - */ - static const char * table; - - static const char * db_names; - - static const char * db_bootstrap; - /** * Callback function to unmarshall the ACL rules * @param num the number of columns read from the DB @@ -440,33 +402,18 @@ class AclManager : public Callbackable, public ActionListener time_t timer_period; /** - * Thread id for the ACL Manager + * Timer action async execution */ - pthread_t acl_thread; - - /** - * Action engine for the Manager - */ - ActionManager am; - - /** - * Function to execute the Manager action loop method within a new pthread - * (requires C linkage) - */ - friend void * acl_action_loop(void *arg); + std::unique_ptr timer_thread; // ------------------------------------------------------------------------- // Action Listener interface // ------------------------------------------------------------------------- - void timer_action(const ActionRequest& ar) + void timer_action() { select(); }; - void finalize_action(const ActionRequest& ar) - { - NebulaLog::log("ACL",Log::INFO,"Stopping ACL Manager..."); - }; }; #endif /*ACL_MANAGER_H*/ diff --git a/include/AclRule.h b/include/AclRule.h index 8f2ddde329d..0c5a3c3406a 100644 --- a/include/AclRule.h +++ b/include/AclRule.h @@ -17,14 +17,12 @@ #ifndef ACL_RULE_H_ #define ACL_RULE_H_ -#include #include #include #include "PoolObjectSQL.h" #include "AuthRequest.h" -using namespace std; /** * An ACL Rule is composed of three 64 bit numbers: user, resource and rights. @@ -97,7 +95,7 @@ class AclRule * * @return a human readable string for this rule */ - const string& to_str() const + const std::string& to_str() const { return str; }; @@ -108,7 +106,7 @@ class AclRule * @param error_str Returns the error message, if any * @return true if the rule is wrong */ - bool malformed(string& error_str) const; + bool malformed(std::string& error_str) const; /** * Function to print the object into a string in XML format @@ -116,7 +114,7 @@ class AclRule * @param xml the resulting XML string * @return a reference to the generated string */ - string& to_xml(string& xml) const; + std::string& to_xml(std::string& xml) const; /** * Rebuilds the rule from an xml formatted string @@ -247,7 +245,7 @@ class AclRule /** * Human readable representation of the rule */ - string str; + std::string str; /** * Builds the human representation of the ACL diff --git a/include/ActionManager.h b/include/ActionManager.h deleted file mode 100644 index 97a9d63e908..00000000000 --- a/include/ActionManager.h +++ /dev/null @@ -1,250 +0,0 @@ -/* -------------------------------------------------------------------------- */ -/* Copyright 2002-2020, OpenNebula Project, OpenNebula Systems */ -/* */ -/* Licensed under the Apache License, Version 2.0 (the "License"); you may */ -/* not use this file except in compliance with the License. You may obtain */ -/* a copy of the License at */ -/* */ -/* http://www.apache.org/licenses/LICENSE-2.0 */ -/* */ -/* Unless required by applicable law or agreed to in writing, software */ -/* distributed under the License is distributed on an "AS IS" BASIS, */ -/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */ -/* See the License for the specific language governing permissions and */ -/* limitations under the License. */ -/* -------------------------------------------------------------------------- */ - -#ifndef ACTION_MANAGER_H_ -#define ACTION_MANAGER_H_ - -#include -#include -#include -#include - -/** - * Represents a generic request, pending actions are stored in a queue. - * Each element stores the base action type, additional data is added by each - * ActionListener implementation. - */ -class ActionRequest -{ -public: - /** - * Base Action types - */ - enum Type - { - FINALIZE, - TIMER, - USER - }; - - Type type() const - { - return _type; - } - - ActionRequest(Type __type): _type(__type){}; - - virtual ~ActionRequest(){}; - - virtual ActionRequest * clone() const - { - return new ActionRequest(_type); - } - -protected: - Type _type; -}; - -/** - * ActionListener class. Interface to be implemented by any class that need to - * handle actions. - */ -class ActionListener -{ -protected: - ActionListener(){}; - - virtual ~ActionListener(){}; - - /** - * the user_action() function is executed upon action arrival. - * This function should check the action type, and perform the - * corresponding action. - * @param ar the ActionRequest - */ - virtual void user_action(const ActionRequest& ar){}; - - /** - * Periodic timer action, executed each time the time_out expires. Listener - * needs to re-implement the default timer action if needed. - * @param ar the ActionRequest - */ - virtual void timer_action(const ActionRequest& ar){}; - - /** - * Action executed when the Manager finlizes. Listener needs to re-implement - * the default action if needed. - * @param ar the ActionRequest - */ - virtual void finalize_action(const ActionRequest& ar){}; - -private: - friend class ActionManager; - - /** - * Invoke the action handler - */ - void _do_action(const ActionRequest& ar) - { - switch(ar.type()) - { - case ActionRequest::FINALIZE: - finalize_action(ar); - break; - - case ActionRequest::TIMER: - timer_action(ar); - break; - - case ActionRequest::USER: - user_action(ar); - break; - } - } -}; - - -/** - * ActionManager. Provides action support for a class implementing - * the ActionListener interface. - */ -class ActionManager -{ -public: - - ActionManager(); - - virtual ~ActionManager(); - - /** - * Function to trigger an action to this manager. - * @param action the action name - * @param args arguments for the action - */ - void trigger(const ActionRequest& ar); - - /** - * Trigger the FINALIZE event - */ - void finalize() - { - ActionRequest frequest(ActionRequest::FINALIZE); - - trigger(frequest); - } - - /** - * The calling thread will be suspended until an action is triggered. - * @param timeout for the periodic action. - * @param timer_args arguments for the timer action - */ - void loop(struct timespec& _timeout, const ActionRequest& trequest); - - void loop(time_t timeout, const ActionRequest& trequest) - { - struct timespec _timeout; - - _timeout.tv_sec = timeout; - _timeout.tv_nsec = 0; - - loop(_timeout, trequest); - } - - /** - * The calling thread will be suspended until an action is triggered. - * @param timeout for the periodic action, the timer action will recieve - * an "empty" ActionRequest. - */ - void loop(time_t timeout) - { - ActionRequest trequest(ActionRequest::TIMER); - - struct timespec _timeout; - - _timeout.tv_sec = timeout; - _timeout.tv_nsec = 0; - - loop(_timeout, trequest); - } - - void loop(struct timespec& _timeout) - { - ActionRequest trequest(ActionRequest::TIMER); - - loop(_timeout, trequest); - } - - /** - * The calling thread will be suspended until an action is triggered. No - * periodic action is defined. - */ - void loop() - { - ActionRequest trequest(ActionRequest::TIMER); - struct timespec _timeout; - - _timeout.tv_sec = 0; - _timeout.tv_nsec = 0; - - loop(_timeout, trequest); - } - - /** - * Register the calling object in this action manager. - * @param listener a pointer to the action listner - */ - void addListener(ActionListener * listener) - { - this->listener = listener; - }; - -private: - /** - * Queue of pending actions, processed in a FIFO manner - */ - std::queue actions; - - /** - * Action synchronization is implemented using the pthread library, - * with condition variable and its associated mutex - */ - pthread_mutex_t mutex; - pthread_cond_t cond; - - /** - * The listener notified by this manager - */ - ActionListener * listener; - - /** - * Function to lock the Manager mutex - */ - void lock() - { - pthread_mutex_lock(&mutex); - }; - - /** - * Function to unlock the Manager mutex - */ - void unlock() - { - pthread_mutex_unlock(&mutex); - }; - -}; - -#endif /*ACTION_MANAGER_H_*/ diff --git a/include/AddressRange.h b/include/AddressRange.h index d1862ebb179..78883b3d083 100644 --- a/include/AddressRange.h +++ b/include/AddressRange.h @@ -24,8 +24,6 @@ #include "PoolObjectSQL.h" #include "AddressRangePool.h" -using namespace std; - class VectorAttribute; /** @@ -70,14 +68,14 @@ class AddressRange * @param ob the type * @return the string */ - static string type_to_str(AddressType ob); + static std::string type_to_str(AddressType ob); /** * Return the string representation of an AddressType * @param ob the type * @return the string */ - static AddressType str_to_type(string& str_type); + static AddressType str_to_type(std::string& str_type); /** * Return true if the address range includes IPv4 addresses @@ -148,7 +146,7 @@ class AddressRange * implementation may contact an external IPAM to complete or validate * the AR allocation request. */ - virtual int from_vattr(VectorAttribute * attr, string& error_msg) = 0; + virtual int from_vattr(VectorAttribute * attr, std::string& error_msg) = 0; /** * Builds an Address Range from a vector attribute stored in the DB @@ -167,13 +165,13 @@ class AddressRange * @param vrs list of VRouter the user can access VNET usage info from. * A vector containing just -1 means all VRouters. */ - void to_xml(ostringstream &oss, const vector& vms, - const vector& vnets, const vector& vrs) const; + void to_xml(std::ostringstream &oss, const std::vector& vms, + const std::vector& vnets, const std::vector& vrs) const; /** * Same as above but without the LEASES section */ - void to_xml(ostringstream &oss) const; + void to_xml(std::ostringstream &oss) const; // ************************************************************************* @@ -190,7 +188,7 @@ class AddressRange * @return 0 if success */ int allocate_addr(PoolObjectSQL::ObjectType ot, int obid, - VectorAttribute * nic, const vector &inherit); + VectorAttribute * nic, const std::vector &inherit); /** * Returns the specific address by mac/ip if is not allocated. The NIC attr @@ -202,25 +200,25 @@ class AddressRange * @param inherit attributes to be added to the NIC attribute * @return 0 if success */ - int allocate_by_mac(const string& mac, PoolObjectSQL::ObjectType ot, - int obid, VectorAttribute * nic, const vector &inherit); + int allocate_by_mac(const std::string& mac, PoolObjectSQL::ObjectType ot, + int obid, VectorAttribute * nic, const std::vector &inherit); - int allocate_by_ip(const string& ip, PoolObjectSQL::ObjectType ot, - int obid, VectorAttribute * nic, const vector &inherit); + int allocate_by_ip(const std::string& ip, PoolObjectSQL::ObjectType ot, + int obid, VectorAttribute * nic, const std::vector &inherit); - int allocate_by_ip6(const string& ip6, PoolObjectSQL::ObjectType ot, - int obid, VectorAttribute * nic, const vector &inherit); + int allocate_by_ip6(const std::string& ip6, PoolObjectSQL::ObjectType ot, + int obid, VectorAttribute * nic, const std::vector &inherit); /** * Sets the given ip/mac on hold, the address is associated to a VM of * id -1. * @param ip/mac the ip to hold */ - int hold_by_mac(const string& mac); + int hold_by_mac(const std::string& mac); - int hold_by_ip(const string& ip); + int hold_by_ip(const std::string& ip); - int hold_by_ip6(const string& ip); + int hold_by_ip6(const std::string& ip); /** * Frees a previous allocated address, referenced by its MAC/IP address @@ -229,11 +227,11 @@ class AddressRange * @param mac/ip the MAC/IP address in string form * @return 0 if the address was freed */ - int free_addr(PoolObjectSQL::ObjectType ot, int obid, const string& mac); + int free_addr(PoolObjectSQL::ObjectType ot, int obid, const std::string& mac); - int free_addr_by_ip(PoolObjectSQL::ObjectType ot, int id, const string& ip); + int free_addr_by_ip(PoolObjectSQL::ObjectType ot, int id, const std::string& ip); - int free_addr_by_ip6(PoolObjectSQL::ObjectType ot, int id,const string& ip); + int free_addr_by_ip6(PoolObjectSQL::ObjectType ot, int id,const std::string& ip); /** * Frees all previous allocated address to the given object @@ -253,7 +251,7 @@ class AddressRange * @return the number of addresses freed */ int free_addr_by_range(PoolObjectSQL::ObjectType ot, int obid, - const string& mac, unsigned int rsize); + const std::string& mac, unsigned int rsize); /** * Adds the relevant AR definition attributes to the Security Group rule @@ -283,13 +281,13 @@ class AddressRange * @param ip/mac the firs ip in the Reservation * @return 0 on success */ - int reserve_addr_by_mac(int vid, unsigned int rsize, const string& mac, + int reserve_addr_by_mac(int vid, unsigned int rsize, const std::string& mac, AddressRange *rar); - int reserve_addr_by_ip(int vid, unsigned int rsize, const string& ip, + int reserve_addr_by_ip(int vid, unsigned int rsize, const std::string& ip, AddressRange *rar); - int reserve_addr_by_ip6(int vid, unsigned int rsize, const string& ip, + int reserve_addr_by_ip6(int vid, unsigned int rsize, const std::string& ip, AddressRange *rar); // ************************************************************************* @@ -333,7 +331,7 @@ class AddressRange * @param name of the attribute * @return the value of the attribute if found, empty otherwise */ - string get_attribute(const string& name) const + std::string get_attribute(const std::string& name) const { return attr->vector_value(name); } @@ -344,7 +342,7 @@ class AddressRange * @param value of the attribute * @return 0 on success */ - int get_attribute(const string& name, int& value) const + int get_attribute(const std::string& name, int& value) const { return attr->vector_value(name, value); } @@ -361,18 +359,18 @@ class AddressRange int update_attributes( VectorAttribute * vup, bool keep_restricted, - string& error_msg); + std::string& error_msg); /** * Helper function to initialize restricte attributes of an AddressRange */ - static void set_restricted_attributes(vector& ras); + static void set_restricted_attributes(std::vector& ras); /** * Get the security groups for this AR. * @return a reference to the security group set */ - const set& get_security_groups() const + const std::set& get_security_groups() const { return security_groups; } @@ -380,13 +378,11 @@ class AddressRange /** * Copy security groups into set */ - void get_security_groups(set& sgs) + void get_security_groups(std::set& sgs) const { - std::set::const_iterator it; - - for (it = security_groups.begin(); it != security_groups.end(); ++it) + for (auto sg : security_groups) { - sgs.insert(*it); + sgs.insert(sg); } } @@ -405,13 +401,14 @@ class AddressRange * rm_ar from AddressRangePool needs to access the internal representation * of the AR to remove it from the ARPool template. */ - friend int AddressRangePool::rm_ar(unsigned int ar_id, bool force, string& error_msg); + friend int AddressRangePool::rm_ar(unsigned int ar_id, bool force, + std::string& error_msg); /* * rm_ars from AddressRangePool needs to access the internal representation * of the AR to remove it from the ARPool template. */ - friend int AddressRangePool::rm_ars(string& error_msg); + friend int AddressRangePool::rm_ars(std::string& error_msg); protected: /** @@ -426,7 +423,7 @@ class AddressRange /** * Builds the AddressRange from its vector attribute representation */ - int from_attr(VectorAttribute * attr, string& error_msg); + int from_attr(VectorAttribute * attr, std::string& error_msg); /** * Builds an address request representation in XML form: @@ -443,7 +440,7 @@ class AddressRange * @param oss string stream to write the request to */ void addr_to_xml(unsigned int index, unsigned int size, - ostringstream& oss) const; + std::ostringstream& oss) const; /** * Check if the given MAC is valid for this address range by verifying: @@ -456,7 +453,8 @@ class AddressRange * * @return true if the MAC is valid */ - bool is_valid_mac(unsigned int& index, const string& mac_s, bool check_free); + bool is_valid_mac(unsigned int& index, const std::string& mac_s, + bool check_free); /** * Check if the given IP is valid for this address range by verifying: @@ -470,7 +468,8 @@ class AddressRange * * @return true if the IP is valid */ - bool is_valid_ip(unsigned int& index, const string& ip_s, bool check_free); + bool is_valid_ip(unsigned int& index, const std::string& ip_s, + bool check_free) const; /** * Check if the given IP is valid for this address range by verifying: @@ -484,7 +483,8 @@ class AddressRange * * @return true if the IP is valid */ - bool is_valid_ip6(unsigned int& index, const string& ip_s, bool check_free); + bool is_valid_ip6(unsigned int& index, const std::string& ip_s, + bool check_free); /* ---------------------------------------------------------------------- */ /* Implementation specific address management interface */ @@ -497,7 +497,8 @@ class AddressRange * * @return 0 if success */ - virtual int allocate_addr(unsigned int ix, unsigned int sz, string& mg) = 0; + virtual int allocate_addr(unsigned int ix, unsigned int sz, + std::string& mg) = 0; /** * Gets a range of free addresses * @param index the first address in the range @@ -506,7 +507,8 @@ class AddressRange * * @return 0 if success */ - virtual int get_addr(unsigned int& index, unsigned int sz, string& msg) = 0; + virtual int get_addr(unsigned int& index, unsigned int sz, + std::string& msg) = 0; /** * Sets the given address (by index) as free @@ -515,7 +517,7 @@ class AddressRange * * @return 0 if success */ - virtual int free_addr(unsigned int index, string& msg) = 0; + virtual int free_addr(unsigned int index, std::string& msg) = 0; /* ---------------------------------------------------------------------- */ /* Allocated addresses */ @@ -531,7 +533,7 @@ class AddressRange * * Address = First Address + index */ - map allocated; + std::map allocated; private: /* ---------------------------------------------------------------------- */ @@ -542,27 +544,27 @@ class AddressRange * @param mac in string form 00:02:01:02:03:04 * @return 0 on success */ - int mac_to_i(string mac, unsigned int i_mac[]) const; + int mac_to_i(std::string mac, unsigned int i_mac[]) const; /** * MAC to string * @param mac in array form */ - string mac_to_s(const unsigned int mac[]) const; + std::string mac_to_s(const unsigned int mac[]) const; /** * IP version 4 to binary (32 bits) * @param ip in string form 192.168.0.2 * @return 0 on success */ - int ip_to_i(const string& _ip, unsigned int& i_ip) const; + int ip_to_i(const std::string& _ip, unsigned int& i_ip) const; /** * IP version 6 to binary (32 bits) * @param ip string form 2a00:1bc0:b001:A::3 * @return 0 on success */ - int ip6_to_i(const string& _ip, unsigned int i_ip[]) const; + int ip6_to_i(const std::string& _ip, unsigned int i_ip[]) const; /** * IP version 4 to dot notation @@ -570,14 +572,14 @@ class AddressRange * @param i_ip Numeric (32 bits) IP * @return dot notation */ - string ip_to_s(unsigned int i_ip) const; + std::string ip_to_s(unsigned int i_ip) const; /** * IPv6 64bits prefix conversion * @param prefix in string form 2a00:1bc0:b001:A:: * @return 0 on success */ - int prefix6_to_i(const string& prefix, unsigned int ip[]) const; + int prefix6_to_i(const std::string& prefix, unsigned int ip[]) const; /** * IPv6 to string @@ -587,9 +589,9 @@ class AddressRange * @return 0 on success */ int ip6_to_s(const unsigned int prefix[], const unsigned int mac[], - string& ip6_s) const; + std::string& ip6_s) const; - int ip6_to_s(const unsigned int ip6_i[], string& ip6_s) const; + int ip6_to_s(const unsigned int ip6_i[], std::string& ip6_s) const; /* ---------------------------------------------------------------------- */ /* NIC setup functions */ @@ -629,7 +631,8 @@ class AddressRange * @param addr_index internal index for the lease * @param nic attribute of a VMTemplate */ - void set_vnet(VectorAttribute *nic, const vector &inherit) const; + void set_vnet(VectorAttribute *nic, + const std::vector &inherit) const; /* ---------------------------------------------------------------------- */ /* Address index map helper functions */ @@ -647,7 +650,7 @@ class AddressRange * generated by allocated_to_attr() * @return 0 on success */ - int attr_to_allocated(const string& allocated_s); + int attr_to_allocated(const std::string& allocated_s); /** * Adds a new allocated address to the map. Updates the ALLOCATED attribute @@ -666,10 +669,10 @@ class AddressRange * @return 0 if success */ void allocate_by_index(unsigned int index, - PoolObjectSQL::ObjectType ot, - int obid, - VectorAttribute* nic, - const vector& inherit); + PoolObjectSQL::ObjectType ot, + int obid, + VectorAttribute* nic, + const std::vector& inherit); /** * Frees an address from the map. Updates the ALLOCATED attribute @@ -696,7 +699,7 @@ class AddressRange * @param error_msg if any * @return 0 on success */ - int init_ipv4(string& error_msg); + int init_ipv4(std::string& error_msg); /** * Function to parse the IPv6 attributes ("GLOBAL_PREFIX" and "ULA_PREFIX") @@ -704,7 +707,7 @@ class AddressRange * @param error_msg if any * @return 0 on success */ - int init_ipv6(string& error_msg); + int init_ipv6(std::string& error_msg); /** * Function to parse the IPv6 attributes no slaac ("IP6") for IP6_STATIC @@ -712,19 +715,19 @@ class AddressRange * @param error_msg if any * @return 0 on success */ - int init_ipv6_static(string& error_msg); + int init_ipv6_static(std::string& error_msg); /** * Function to parse the MAC attributes ("MAC") for all AR types * @param error_msg if any * @return 0 on success */ - int init_mac(string& error_msg); + int init_mac(std::string& error_msg); /** * Checks for restricted attributes, returns the first one found */ - bool check(string& rs_attr) const; + bool check(std::string& rs_attr) const; /** * Deletes all restricted attributes @@ -762,27 +765,27 @@ class AddressRange /** * First MAC in the range */ - unsigned int mac[2]; + unsigned int mac[2] = {0}; /** * Binary representation of the IPv6 address global unicast prefix */ - unsigned int global6[2]; + unsigned int global6[2] = {0}; /** * Binary representation of the IPv6 address site unicast prefix */ - unsigned int ula6[2]; + unsigned int ula6[2] = {0}; /** * Binary representation of the first IPv6 address in the AR. No SLAAC ARs */ - unsigned int ip6[4]; + unsigned int ip6[4] = {0}; /** * Security Group IDs for this Address Range */ - set security_groups; + std::set security_groups; /** * The Address Range attributes as a Template VectorAttribute. This is @@ -801,7 +804,7 @@ class AddressRange /** * The restricted attributes from oned.conf */ - static set restricted_attributes; + static std::set restricted_attributes; /** * Attributes to be process for Security Group rules diff --git a/include/AddressRangeIPAM.h b/include/AddressRangeIPAM.h index 9b61038b67a..a52ee28ad5f 100644 --- a/include/AddressRangeIPAM.h +++ b/include/AddressRangeIPAM.h @@ -20,7 +20,6 @@ #include #include "AddressRange.h" -#include "AddressRangePool.h" class VectorAttribute; @@ -50,7 +49,8 @@ class AddressRangeIPAM : public AddressRange * * @return 0 if success */ - int allocate_addr(unsigned int index, unsigned int rsize, string& error_msg); + int allocate_addr(unsigned int index, unsigned int rsize, + std::string& error_msg); /** * Gets a range of free addresses @@ -60,7 +60,8 @@ class AddressRangeIPAM : public AddressRange * * @return 0 if success */ - int get_addr(unsigned int& index, unsigned int rsize, string& error_msg); + int get_addr(unsigned int& index, unsigned int rsize, + std::string& error_msg); /** * Sets the given address (by index) as free @@ -69,7 +70,7 @@ class AddressRangeIPAM : public AddressRange * * @return 0 if success */ - int free_addr(unsigned int index, string& msg); + int free_addr(unsigned int index, std::string& msg); }; #endif diff --git a/include/AddressRangeInternal.h b/include/AddressRangeInternal.h index ddda4f76818..e851a862209 100644 --- a/include/AddressRangeInternal.h +++ b/include/AddressRangeInternal.h @@ -20,7 +20,6 @@ #include #include "AddressRange.h" -#include "AddressRangePool.h" class VectorAttribute; @@ -53,7 +52,8 @@ class AddressRangeInternal : public AddressRange * * @return 0 if success */ - int allocate_addr(unsigned int index, unsigned int rsize, string& error_msg) + int allocate_addr(unsigned int index, unsigned int rsize, + std::string& error_msg) { return 0; } @@ -66,7 +66,8 @@ class AddressRangeInternal : public AddressRange * * @return 0 if success */ - int get_addr(unsigned int& index, unsigned int rsize, string& error_msg) + int get_addr(unsigned int& index, unsigned int rsize, + std::string& error_msg) { if ( rsize == 1 ) { @@ -83,7 +84,7 @@ class AddressRangeInternal : public AddressRange * * @return 0 if success */ - int free_addr(unsigned int index, string& msg) + int free_addr(unsigned int index, std::string& msg) { return 0; }; @@ -109,7 +110,7 @@ class AddressRangeInternal : public AddressRange * @param msg with error description if any * @return 0 on success -1 otherwise */ - int get_range_addr(unsigned int& index, unsigned int sz, std::string& msg); + int get_range_addr(unsigned int& index, unsigned int sz, std::string& msg) const; }; #endif diff --git a/include/AddressRangePool.h b/include/AddressRangePool.h index f335ed831e5..94cf2f323ed 100644 --- a/include/AddressRangePool.h +++ b/include/AddressRangePool.h @@ -22,15 +22,12 @@ #include #include -#include - #include "VirtualNetworkTemplate.h" #include "PoolObjectSQL.h" class VectorAttribute; class AddressRange; -using namespace std; class AddressRangePool { @@ -50,7 +47,7 @@ class AddressRangePool * @param error_msg describing the error * @return 0 on success */ - int from_vattr(VectorAttribute * ar, string& error_msg); + int from_vattr(VectorAttribute * ar, std::string& error_msg); /** * Builds the address range set from its XML representation. This function @@ -71,14 +68,14 @@ class AddressRangePool * @param force force remove, even if active leases exists * @return 0 on success, -1 if not exists or has used addresses */ - int rm_ar(unsigned int ar_id, bool force, string& error_msg); + int rm_ar(unsigned int ar_id, bool force, std::string& error_msg); /** * Removes all address ranges from the pool if it does not contain any used * leases * @return 0 on success, -1 if not exists or has used addresses */ - int rm_ars(string& error_msg); + int rm_ars(std::string& error_msg); /** * Updates the given address ranges @@ -90,8 +87,8 @@ class AddressRangePool * the reason. * @return 0 on success */ - int update_ar(vector ars, bool keep_restricted, - string& error_msg); + int update_ar(std::vector ars, bool keep_restricted, + std::string& error_msg); /** * Allocates a new *empty* address range. It is not added to the pool as it * needs to be initialized. Only the AR_ID is set. @@ -99,7 +96,7 @@ class AddressRangePool * IPAM... * @return the new address range. */ - AddressRange * allocate_ar(const string& ipam_mad); + AddressRange * allocate_ar(const std::string& ipam_mad); /** * Adds a new address range to the pool. It should be allocated by the @@ -122,7 +119,7 @@ class AddressRangePool * @return 0 if success */ int allocate_addr(PoolObjectSQL::ObjectType ot, int obid, - VectorAttribute * nic, const vector &inherit); + VectorAttribute * nic, const std::vector &inherit); /** * Allocates an address in a suitable address range from the pool by mac/ip @@ -133,14 +130,17 @@ class AddressRangePool * @param inherit attributes to be added to the NIC * @return 0 if success */ - int allocate_by_mac(const string &mac, PoolObjectSQL::ObjectType ot, int obid, - VectorAttribute * nic, const vector &inherit); + int allocate_by_mac(const std::string &mac, PoolObjectSQL::ObjectType ot, + int obid, VectorAttribute * nic, + const std::vector &inherit); - int allocate_by_ip(const string &ip, PoolObjectSQL::ObjectType ot, int obid, - VectorAttribute * nic, const vector &inherit); + int allocate_by_ip(const std::string &ip, PoolObjectSQL::ObjectType ot, + int obid, VectorAttribute * nic, + const std::vector &inherit); - int allocate_by_ip6(const string &ip, PoolObjectSQL::ObjectType ot, int obid, - VectorAttribute * nic, const vector &inherit); + int allocate_by_ip6(const std::string &ip, PoolObjectSQL::ObjectType ot, + int obid, VectorAttribute * nic, + const std::vector &inherit); /** * Holds an address from the specified address range. @@ -148,22 +148,22 @@ class AddressRangePool * @param mac/ip the mac/ip to hold * @return 0 on success */ - int hold_by_mac(unsigned int arid, const string& mac); + int hold_by_mac(unsigned int arid, const std::string& mac); - int hold_by_ip(unsigned int arid, const string& ip); + int hold_by_ip(unsigned int arid, const std::string& ip); - int hold_by_ip6(unsigned int arid, const string& ip); + int hold_by_ip6(unsigned int arid, const std::string& ip); /** * Holds an address from the first address range containing the MAC * @param mac/ip the mac/ip to hold * @return 0 on success */ - int hold_by_mac(const string& mac); + int hold_by_mac(const std::string& mac); - int hold_by_ip(const string& ip); + int hold_by_ip(const std::string& ip); - int hold_by_ip6(const string& ip); + int hold_by_ip6(const std::string& ip); /** * Frees the given address by MAC/IP on the given address range @@ -173,13 +173,13 @@ class AddressRangePool * @param mac/ip the specific MAC/IP address requested */ void free_addr(unsigned int arid, PoolObjectSQL::ObjectType ot, int obid, - const string& mac); + const std::string& mac); void free_addr_by_ip(unsigned int arid, PoolObjectSQL::ObjectType ot, - int obid, const string& ip); + int obid, const std::string& ip); void free_addr_by_ip6(unsigned int arid, PoolObjectSQL::ObjectType ot, - int obid, const string& ip); + int obid, const std::string& ip); /** * Frees the given address by MAC/IP from all address ranges containing @@ -188,11 +188,14 @@ class AddressRangePool * @param obid the id of the object requesting the address * @param mac/ip the specific MAC/IP address requested */ - void free_addr(PoolObjectSQL::ObjectType ot, int obid, const string& mac); + void free_addr(PoolObjectSQL::ObjectType ot, int obid, + const std::string& mac); - void free_addr_by_ip(PoolObjectSQL::ObjectType ot, int id, const string& ip); + void free_addr_by_ip(PoolObjectSQL::ObjectType ot, int id, + const std::string& ip); - void free_addr_by_ip6(PoolObjectSQL::ObjectType ot, int id,const string& ip); + void free_addr_by_ip6(PoolObjectSQL::ObjectType ot, int id, + const std::string& ip); /** * Frees all the addressed owned by the given object @@ -211,7 +214,7 @@ class AddressRangePool * @param rsize size of the address range */ int free_addr_by_range(unsigned int arid, PoolObjectSQL::ObjectType ot, - int obid, const string& mac, unsigned int rsize); + int obid, const std::string& mac, unsigned int rsize); /** * From a Security Group rule that uses this vnet, creates a new rule @@ -222,8 +225,8 @@ class AddressRangePool * be deleted by the caller */ void process_security_rule( - VectorAttribute * rule, - vector &new_rules); + VectorAttribute * rule, + std::vector &new_rules); // ************************************************************************* // Address reservation @@ -260,13 +263,13 @@ class AddressRangePool * @return 0 on success */ int reserve_addr_by_mac(int vid, unsigned int rsize, unsigned int ar_id, - const string& mac, AddressRange *rar); + const std::string& mac, AddressRange *rar); int reserve_addr_by_ip(int vid, unsigned int rsize, unsigned int ar_id, - const string& ip, AddressRange *rar); + const std::string& ip, AddressRange *rar); int reserve_addr_by_ip6(int vid, unsigned int rsize, unsigned int ar_id, - const string& ip, AddressRange *rar); + const std::string& ip, AddressRange *rar); // ************************************************************************* @@ -299,7 +302,7 @@ class AddressRangePool * @param value of the attribute * @param ar_id to get the attribute from */ - void get_attribute(const string& name, string& value, int ar_id) const; + void get_attribute(const std::string& name, std::string& value, int ar_id) const; /** * Gets an attribute from the Address Range, int version @@ -308,19 +311,19 @@ class AddressRangePool * @param ar_id to get the attribute from * @return 0 on success */ - int get_attribute(const string& name, int& value, int ar_id) const; + int get_attribute(const std::string& name, int& value, int ar_id) const; /** * Gets a reference to a the security group set of an AR * @return a reference to the security group set or empty set if error */ - const set& get_security_groups(int ar_id) const; + const std::set& get_security_groups(int ar_id) const; /** * Gets a the security group set of all ARs * @param sgs set with all the SG ids */ - void get_all_security_groups(set& sgs); + void get_all_security_groups(std::set& sgs) const; /** * Generate a XML representation of the Address Range Pool @@ -334,8 +337,11 @@ class AddressRangePool * A vector containing just -1 means all VRouters. * @return the string with the XML */ - string& to_xml(string& sstream, bool extended, const vector& vms, - const vector& vnets, const vector& vrs) const; + std::string& to_xml(std::string& sstream, + bool extended, + const std::vector& vms, + const std::vector& vnets, + const std::vector& vrs) const; /** * Encrypt all secret attributes @@ -368,7 +374,7 @@ class AddressRangePool /** * Map to access each range */ - map ar_pool; + std::map ar_pool; /** * Used addresses @@ -383,7 +389,7 @@ class AddressRangePool * @param ar_id for the AddressRange * @return the new address range. */ - AddressRange * allocate_ar(const string& ipam_mad, unsigned int ar_id); + AddressRange * allocate_ar(const std::string& ipam_mad, unsigned int ar_id); }; #endif diff --git a/include/Attribute.h b/include/Attribute.h index eebef005aba..47438322d0a 100644 --- a/include/Attribute.h +++ b/include/Attribute.h @@ -24,8 +24,6 @@ #include "NebulaUtil.h" -using namespace std; - /** * Attribute base class for name-value pairs. This class provides a generic * interface to implement @@ -34,7 +32,7 @@ class Attribute { public: - Attribute(const string& aname):attribute_name(aname) + Attribute(const std::string& aname):attribute_name(aname) { transform ( attribute_name.begin(), @@ -66,7 +64,7 @@ class Attribute * Gets the name of the attribute. * @return the attribute name */ - const string& name() const + const std::string& name() const { return attribute_name; }; @@ -76,7 +74,7 @@ class Attribute * by the calling function. * @return a string (allocated in the heap) holding the attribute value. */ - virtual string * marshall(const char * _sep = 0) const = 0; + virtual std::string * marshall(const char * _sep = 0) const = 0; /** * Write the attribute using a simple XML format. The string MUST be freed @@ -92,7 +90,7 @@ class Attribute /** * Builds a new attribute from a string. */ - virtual void unmarshall(const string& sattr, const char * _sep = 0) = 0; + virtual void unmarshall(const std::string& sattr, const char * _sep = 0) = 0; /** * Returns the attribute type @@ -107,19 +105,19 @@ class Attribute /** * Encrypt all secret attributes */ - virtual void encrypt(const string& one_key, const set& eas) {}; + virtual void encrypt(const std::string& one_key, const std::set& eas) {}; /** * Decrypt all secret attributes */ - virtual void decrypt(const string& one_key, const set& eas) {}; + virtual void decrypt(const std::string& one_key, const std::set& eas) {}; protected: /** * The attribute name. */ - string attribute_name; + std::string attribute_name; }; /* -------------------------------------------------------------------------- */ @@ -134,9 +132,9 @@ class SingleAttribute : public Attribute { public: - SingleAttribute(const string& name):Attribute(name){}; + SingleAttribute(const std::string& name):Attribute(name){}; - SingleAttribute(const string& name, const string& value): + SingleAttribute(const std::string& name, const std::string& value): Attribute(name),attribute_value(value){}; SingleAttribute(const SingleAttribute& sa):Attribute(sa.attribute_name) @@ -149,7 +147,7 @@ class SingleAttribute : public Attribute /** * Returns the attribute value, a string. */ - const string& value() const + const std::string& value() const { return attribute_value; }; @@ -159,9 +157,9 @@ class SingleAttribute : public Attribute * by the calling function. * @return a string (allocated in the heap) holding the attribute value. */ - string * marshall(const char * _sep = 0) const override + std::string * marshall(const char * _sep = 0) const override { - string * rs = new string; + auto rs = new std::string; *rs = attribute_value; @@ -203,7 +201,7 @@ class SingleAttribute : public Attribute /** * Builds a new attribute from a string. */ - void unmarshall(const string& sattr, const char * _sep = 0) override + void unmarshall(const std::string& sattr, const char * _sep = 0) override { attribute_value = sattr; }; @@ -211,7 +209,7 @@ class SingleAttribute : public Attribute /** * Replaces the attribute value from a string. */ - void replace(const string& sattr) + void replace(const std::string& sattr) { attribute_value = sattr; }; @@ -235,16 +233,18 @@ class SingleAttribute : public Attribute /** * Encrypt all secret attributes */ - virtual void encrypt(const string& one_key, const set& eas) override; + void encrypt(const std::string& one_key, + const std::set& eas) override; /** * Decrypt all secret attributes */ - virtual void decrypt(const string& one_key, const set& eas) override; + void decrypt(const std::string& one_key, + const std::set& eas) override; private: - string attribute_value; + std::string attribute_value; }; /* -------------------------------------------------------------------------- */ @@ -259,9 +259,10 @@ class VectorAttribute : public Attribute { public: - VectorAttribute(const string& name):Attribute(name){}; + VectorAttribute(const std::string& name):Attribute(name){}; - VectorAttribute(const string& name,const map& value): + VectorAttribute(const std::string& name, + const std::map& value): Attribute(name),attribute_value(value){}; VectorAttribute(const VectorAttribute& va):Attribute(va.attribute_name) @@ -279,7 +280,7 @@ class VectorAttribute : public Attribute /** * Returns the attribute value, a string. */ - const map& value() const + const std::map& value() const { return attribute_value; }; @@ -290,7 +291,7 @@ class VectorAttribute : public Attribute * * @return the value of the attribute if found, empty otherwise */ - string vector_value(const string& name) const; + std::string vector_value(const std::string& name) const; /** * Returns the value of the given element of the VectorAttribute @@ -301,11 +302,9 @@ class VectorAttribute : public Attribute * @return 0 on success, -1 otherwise */ template - int vector_value(const string& name, T& value) const + int vector_value(const std::string& name, T& value) const { - map::const_iterator it; - - it = attribute_value.find(name); + auto it = attribute_value.find(name); if ( it == attribute_value.end() ) { @@ -317,7 +316,7 @@ class VectorAttribute : public Attribute return -1; } - istringstream iss(it->second); + std::istringstream iss(it->second); iss >> value; if (iss.fail() || !iss.eof()) @@ -337,7 +336,9 @@ class VectorAttribute : public Attribute * @param default_value used if element is invalid */ template - void vector_value(const string& name, T& value, const T& default_value) const + void vector_value(const std::string& name, + T& value, + const T& default_value) const { if (vector_value(name, value) != 0) { @@ -345,9 +346,9 @@ class VectorAttribute : public Attribute } } - int vector_value(const string& name, string& value) const; + int vector_value(const std::string& name, std::string& value) const; - int vector_value(const string& name, bool& value) const; + int vector_value(const std::string& name, bool& value) const; /** * Returns the value of the given element of the VectorAttribute @@ -359,11 +360,9 @@ class VectorAttribute : public Attribute * @return the value in string form on success, "" otherwise */ template - string vector_value_str(const string& name, T& value) const + std::string vector_value_str(const std::string& name, T& value) const { - map::const_iterator it; - - it = attribute_value.find(name); + auto it = attribute_value.find(name); if ( it == attribute_value.end() ) { @@ -375,7 +374,7 @@ class VectorAttribute : public Attribute return ""; } - istringstream iss(it->second); + std::istringstream iss(it->second); iss >> value; if (iss.fail() || !iss.eof()) @@ -392,7 +391,7 @@ class VectorAttribute : public Attribute * "VAL_NAME_1=VAL_VALUE_1,...,VAL_NAME_N=VAL_VALUE_N". * @return a string (allocated in the heap) holding the attribute value. */ - string * marshall(const char * _sep = 0) const override; + std::string * marshall(const char * _sep = 0) const override; /** * Write the attribute using a simple XML format: @@ -416,12 +415,12 @@ class VectorAttribute : public Attribute * Builds a new attribute from a string of the form: * "VAL_NAME_1=VAL_VALUE_1,...,VAL_NAME_N=VAL_VALUE_N". */ - void unmarshall(const string& sattr, const char * _sep = 0) override; + void unmarshall(const std::string& sattr, const char * _sep = 0) override; /** * Replace the value of the given attribute with the provided map */ - void replace(const map& attr); + void replace(const std::map& attr); /** * The attributes from vattr will be copied to this vector @@ -435,16 +434,16 @@ class VectorAttribute : public Attribute * Replace the value of the given vector attribute */ template - void replace(const string& name, T value) + void replace(const std::string& name, T value) { - ostringstream oss; + std::ostringstream oss; oss << value; replace(name, oss.str()); } - void replace(const string& name, bool value) + void replace(const std::string& name, bool value) { if (value == true) { @@ -456,13 +455,13 @@ class VectorAttribute : public Attribute } } - void replace(const string& name, const string& value); + void replace(const std::string& name, const std::string& value); /** * Removes given the vector attribute * @param name of the vector attribute */ - void remove(const string& name); + void remove(const std::string& name); /** * Returns the attribute type @@ -499,12 +498,14 @@ class VectorAttribute : public Attribute /** * Encrypt all secret attributes */ - virtual void encrypt(const string& one_key, const set& eas) override; + void encrypt(const std::string& one_key, + const std::set& eas) override; /** * Decrypt all secret attributes */ - virtual void decrypt(const string& one_key, const set& eas) override; + void decrypt(const std::string& one_key, + const std::set& eas) override; private: @@ -512,7 +513,7 @@ class VectorAttribute : public Attribute static const int magic_sep_size; - map attribute_value; + std::map attribute_value; }; #endif /*ATTRIBUTE_H_*/ diff --git a/include/AuthManager.h b/include/AuthManager.h index 9021d335efa..dd084e77733 100644 --- a/include/AuthManager.h +++ b/include/AuthManager.h @@ -19,87 +19,28 @@ #include -#include "MadManager.h" #include "NebulaLog.h" -#include "ActionManager.h" -#include "AuthManagerDriver.h" -#include "PoolObjectSQL.h" - -using namespace std; +#include "Listener.h" +#include "ProtocolMessages.h" +#include "DriverManager.h" //Forward definitions class AuthRequest; -class PoolObjectAuth; -/* -------------------------------------------------------------------------- */ -/* -------------------------------------------------------------------------- */ -class AMAction : public ActionRequest -{ -public: - enum Actions - { - AUTHENTICATE, - AUTHORIZE - }; - - AMAction(Actions a, AuthRequest *r):ActionRequest(ActionRequest::USER), - _action(a), _request(r){}; - - AMAction(const AMAction& o):ActionRequest(o._type), _action(o._action), - _request(o._request){}; - - Actions action() const - { - return _action; - } - - AuthRequest * request() const - { - return _request; - } - - ActionRequest * clone() const - { - return new AMAction(*this); - } - -private: - Actions _action; - - AuthRequest * _request; -}; - -/* -------------------------------------------------------------------------- */ -/* -------------------------------------------------------------------------- */ - -extern "C" void * authm_action_loop(void *arg); - -class AuthManager : public MadManager, public ActionListener +class AuthManager : + public DriverManager>, + public Listener { public: AuthManager( - time_t timer, - vector& _mads): - MadManager(_mads), timer_period(timer) - { - am.addListener(this); - }; - - ~AuthManager(){}; - - /** - * Triggers specific actions to the Auth Manager. This function - * wraps the ActionManager trigger function. - * @param action the Auth Manager action - * @param request an auth request - */ - void trigger(AMAction::Actions action, AuthRequest* request) + time_t timer, + const std::string& mads_location): + DriverManager(mads_location), + Listener("Authorization Manager"), + timer_thread(timer, [this](){timer_action();}) { - AMAction auth_ar(action, request); - - am.trigger(auth_ar); } /** @@ -110,30 +51,11 @@ class AuthManager : public MadManager, public ActionListener */ int start(); - /** - * - */ - void finalize() - { - am.finalize(); - }; - /** * Loads Virtual Machine Manager Mads defined in configuration file - * @param uid of the user executing the driver. When uid is 0 the nebula - * identity will be used. Otherwise the Mad will be loaded through the - * sudo application. + * @param _mads configuration of drivers */ - int load_mads(int uid); - - /** - * Gets the thread identification. - * @return pthread_t for the manager thread (that in the action loop). - */ - pthread_t get_thread_id() const - { - return authm_thread; - }; + int load_drivers(const std::vector& _mads); /** * Returns true if there is an authorization driver enabled @@ -143,33 +65,38 @@ class AuthManager : public MadManager, public ActionListener bool is_authz_enabled() { return authz_enabled; - }; + } -private: /** - * Thread id for the Transfer Manager + * This function authenticates a user */ - pthread_t authm_thread; + void trigger_authenticate(AuthRequest& ar); /** - * Action engine for the Manager + * This function authorizes a user request */ - ActionManager am; + void trigger_authorize(AuthRequest& ar); +private: /** - * Timer for the Manager (periocally triggers timer action) + * Timer action async execution */ - time_t timer_period; + Timer timer_thread; /** * Generic name for the Auth driver */ - static const char * auth_driver_name; + static const char * auth_driver_name; /** * True if there is an authorization driver enabled */ - bool authz_enabled; + bool authz_enabled; + + /** + * + */ + static const int drivers_timeout = 10; /** * Returns a pointer to a Auth Manager driver. @@ -178,13 +105,10 @@ class AuthManager : public MadManager, public ActionListener * @return the Auth driver with attribute name equal to value * or 0 in not found */ - const AuthManagerDriver * get( - const string& name, - const string& value) + const Driver * get(const std::string& name) const { - return static_cast - (MadManager::get(0,name,value)); - }; + return DriverManager::get_driver(name); + } /** * Returns a pointer to a Auth Manager driver. The driver is @@ -193,46 +117,43 @@ class AuthManager : public MadManager, public ActionListener * @return the TM driver owned by uid with attribute name equal to value * or 0 in not found */ - const AuthManagerDriver * get() + const Driver * get() const { - string name("NAME"); + return DriverManager::get_driver(auth_driver_name); + } - return static_cast - (MadManager::get(0,name,auth_driver_name)); - }; + // ------------------------------------------------------------------------- + // Protocol implementation, procesing messages from driver + // ------------------------------------------------------------------------- + /** + * + */ + static void _undefined(std::unique_ptr msg); /** - * This function authenticates a user + * */ - void authenticate_action(AuthRequest * ar); + void _authorize(std::unique_ptr msg); /** - * This function authorizes a user request + * */ - void authorize_action(AuthRequest * ar); + void _authenticate(std::unique_ptr msg); /** - * Function to execute the Manager action loop method within a new pthread - * (requires C linkage) + * */ - friend void * authm_action_loop(void *arg); + static void _log(std::unique_ptr msg); // ------------------------------------------------------------------------- // Action Listener interface // ------------------------------------------------------------------------- - void timer_action(const ActionRequest& ar) + void timer_action() { check_time_outs_action(); - }; - - void finalize_action(const ActionRequest& ar) - { - NebulaLog::log("AuM",Log::INFO,"Stopping Authorization Manager..."); - - MadManager::stop(); - }; + } - void user_action(const ActionRequest& ar); + void finalize_action() override; }; #endif /*AUTH_MANAGER_H*/ diff --git a/include/AuthManagerDriver.h b/include/AuthManagerDriver.h deleted file mode 100644 index 08ac656148d..00000000000 --- a/include/AuthManagerDriver.h +++ /dev/null @@ -1,101 +0,0 @@ -/* -------------------------------------------------------------------------- */ -/* Copyright 2002-2020, OpenNebula Project, OpenNebula Systems */ -/* */ -/* Licensed under the Apache License, Version 2.0 (the "License"); you may */ -/* not use this file except in compliance with the License. You may obtain */ -/* a copy of the License at */ -/* */ -/* http://www.apache.org/licenses/LICENSE-2.0 */ -/* */ -/* Unless required by applicable law or agreed to in writing, software */ -/* distributed under the License is distributed on an "AS IS" BASIS, */ -/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */ -/* See the License for the specific language governing permissions and */ -/* limitations under the License. */ -/* -------------------------------------------------------------------------- */ - -#ifndef AUTH_MANAGER_DRIVER_H_ -#define AUTH_MANAGER_DRIVER_H_ - -#include -#include -#include - -#include "Mad.h" - -using namespace std; - -//Forward definition of the AuthManager Class -class AuthManager; - -/** - * AuthManagerDriver provides a base class to implement TM - * Drivers. This class implements the protocol and recover functions - * from the Mad interface. - */ -class AuthManagerDriver : public Mad -{ -public: - - AuthManagerDriver( - int userid, - const map& attrs, - bool sudo, - AuthManager * _authm): - Mad(userid,attrs,sudo), authm(_authm){}; - - virtual ~AuthManagerDriver(){}; - - /** - * Implements the VM Manager driver protocol. - * @param message the string read from the driver - */ - void protocol(const string& message) const; - - /** - * Re-starts the driver - */ - void recover(); - -private: - friend class AuthManager; - - /** - * The AuthManager to notify results. - */ - AuthManager * authm; - - /** - * Sends an authorization request to the MAD: - * "AUTHORIZE OPERATION_ID USER_ID REQUEST1 REQUEST2..." - * @param oid an id to identify the request. - * @param uid the user id. - * @param requests space separated list of requests in the form OP:OB:ID - * @param acl is the authorization result using the ACL engine for - * this request - */ - void authorize(int oid, int uid, const string& requests, bool acl) const; - - /** - * Sends an authorization request to the MAD: - * "AUTHENTICATE REQUEST_ID USER_ID USER_NAME PASSWORD XMLRPC_TOKEN" - * @param oid an id to identify the request. - * @param uid the user id. - * @param auth_driver - * @param username - * @param password - * @param session token from the xml-rpc parameter - */ - void authenticate(int oid, - int uid, - const string& auth_driver, - const string& username, - const string& password, - const string& session) const; -}; - -/* -------------------------------------------------------------------------- */ -/* -------------------------------------------------------------------------- */ - -#endif /*AUTH_MANAGER_DRIVER_H_*/ - diff --git a/include/AuthRequest.h b/include/AuthRequest.h index 237cf9dc017..24dbb66d8fa 100644 --- a/include/AuthRequest.h +++ b/include/AuthRequest.h @@ -17,17 +17,14 @@ #ifndef AUTH_REQUEST_H_ #define AUTH_REQUEST_H_ -#include #include -#include "ActionManager.h" #include "PoolObjectAuth.h" -#include "AuthManager.h" #include "NebulaUtil.h" #include "SyncRequest.h" -using namespace std; +class AuthManager; /** * The AuthRequest class is used to pass an Authorization or Authentication @@ -37,7 +34,11 @@ using namespace std; class AuthRequest : public SyncRequest { public: - AuthRequest(int _uid, set _gids): uid(_uid),gids(_gids),self_authorize(true){}; + AuthRequest(int _uid, const std::set& _gids) + : uid(_uid) + , gids(_gids) + , self_authorize(true) + {} ~AuthRequest(){}; @@ -57,7 +58,7 @@ class AuthRequest : public SyncRequest NONE = 0x0LL }; - static string operation_to_str(Operation op) + static std::string operation_to_str(Operation op) { switch (op) { @@ -75,7 +76,7 @@ class AuthRequest : public SyncRequest return ""; }; - static Operation str_to_operation(string str) + static Operation str_to_operation(std::string str) { if (str == "USE") return USE; else if (str == "MANAGE") return MANAGE; @@ -88,10 +89,10 @@ class AuthRequest : public SyncRequest * Sets the challenge to authenticate an user * @param challenge a driver specific authentication challenge */ - void add_authenticate(const string &_driver, - const string &_username, - const string &_password, - const string &_session) + void add_authenticate(const std::string &_driver, + const std::string &_username, + const std::string &_password, + const std::string &_session) { username = _username; password = _password; @@ -110,7 +111,8 @@ class AuthRequest : public SyncRequest * @param type of the object to be created * @param txml template of the new object */ - void add_create_auth(int uid, int gid, PoolObjectSQL::ObjectType type, const string& txml) + void add_create_auth(int uid, int gid, PoolObjectSQL::ObjectType type, + const std::string& txml) { PoolObjectAuth perms; //oid & gid set to -1 @@ -140,14 +142,14 @@ class AuthRequest : public SyncRequest * @return a space separated list of auth requests, or an empty string if * no auth requests were added */ - string get_auths() + std::string get_auths() const { - ostringstream oss; + std::ostringstream oss; unsigned int i; if ( auths.empty() ) { - return string(); + return std::string(); } for (i=0; i gids; + std::set gids; /** * Username to authenticate the user */ - string username; + std::string username; /** * User password to authenticate the user */ - string password; + std::string password; /** * Authentication token as sent in the XML-RPC call (user:session) */ - string session; + std::string session; /** * Authentication driver to be used with this request */ - string driver; + std::string driver; /** * A list of authorization requests */ - vector auths; + std::vector auths; /** * Plain authorization for the request @@ -230,7 +232,7 @@ class AuthRequest : public SyncRequest */ void add_auth(Operation op, const PoolObjectAuth& ob_perms, - string ob_template); + const std::string& ob_template); }; #endif diff --git a/include/BitMap.h b/include/BitMap.h index 13b236749e8..533cd55355f 100644 --- a/include/BitMap.h +++ b/include/BitMap.h @@ -21,6 +21,7 @@ #include "Attribute.h" #include "Callbackable.h" +#include "SSLUtil.h" class SqlDB; @@ -92,18 +93,16 @@ class BitMap : public Callbackable */ int select(int _id, SqlDB * db) { - std::string * uzbs; + std::string uzbs; id = _id; - if ( select(db, &uzbs) != 0 ) + if ( select(db, uzbs) != 0 ) { return -1; } - bs = new std::bitset(*uzbs); - - delete uzbs; + bs = new std::bitset(uzbs); return 0; } @@ -134,7 +133,7 @@ class BitMap : public Callbackable * @param bit the bit number reserved * @return -1 in case of error */ - int get(unsigned int hint, unsigned int& bit) + int get(unsigned int hint, unsigned int& bit) const { if ( hint != 0 ) { @@ -205,7 +204,7 @@ class BitMap : public Callbackable /** * Return the start_bit of the bitmap */ - unsigned int get_start_bit() + unsigned int get_start_bit() const { return start_bit; } @@ -248,7 +247,7 @@ class BitMap : public Callbackable * be freed by caller. * @return 0 on success */ - int select(SqlDB * db, std::string ** uzbs) + int select(SqlDB * db, std::string &uzbs) { int rc; @@ -256,8 +255,6 @@ class BitMap : public Callbackable std::string zbs; - *uzbs = 0; - set_callback(static_cast(&BitMap::select_cb), static_cast(&zbs)); @@ -276,17 +273,9 @@ class BitMap : public Callbackable return -1; } - *uzbs = one_util::zlib_decompress(zbs, true); - - if ( *uzbs == 0 ) - { - rc = -1; - } - - return rc; + return ssl_util::zlib_decompress64(zbs, uzbs); } - /** * Insert a Bitmap in the DB, the bitmap is stored in a compressed (zlib) * string form. @@ -297,15 +286,14 @@ class BitMap : public Callbackable { std::ostringstream oss; - std::string * zipped = one_util::zlib_compress(bs->to_string(), true); + std::string zipped; - if (zipped == 0) + if (ssl_util::zlib_compress64(bs->to_string(), zipped) != 0) { return -1; } - char * ezipped64 = db->escape_str(*zipped); - + char * ezipped64 = db->escape_str(zipped); if (replace) { @@ -321,8 +309,6 @@ class BitMap : public Callbackable int rc = db->exec_wr(oss); - delete zipped; - db->free_str(ezipped64); return rc; diff --git a/include/CachePool.h b/include/CachePool.h index dd0b2f0b1ba..f791023daba 100644 --- a/include/CachePool.h +++ b/include/CachePool.h @@ -17,15 +17,9 @@ #ifndef CACHE_POOL_H_ #define CACHE_POOL_H_ -#include -#include #include +#include -#include - -#include - -using namespace std; /** * The Cache Pool class. This class is used to store volatile pool data. @@ -40,11 +34,9 @@ template class CachePool ~CachePool() { - typename std::map::iterator it; - pthread_mutex_lock(&resource_lock); - for (it=resources.begin(); it != resources.end() ; ++it) + for (auto it = resources.begin(); it != resources.end() ; ++it) { delete it->second; } @@ -60,7 +52,7 @@ template class CachePool pthread_mutex_lock(&resource_lock); - typename std::map::iterator it = resources.find(oid); + auto it = resources.find(oid); if ( it == resources.end() ) { @@ -83,7 +75,7 @@ template class CachePool { pthread_mutex_lock(&resource_lock); - typename std::map::iterator it = resources.find(oid); + auto it = resources.find(oid); if ( it != resources.end() ) { diff --git a/include/Callbackable.h b/include/Callbackable.h index 171fc97d89c..d49f1043012 100644 --- a/include/Callbackable.h +++ b/include/Callbackable.h @@ -24,8 +24,6 @@ #include -using namespace std; - /** * This class represents a SQL callback */ @@ -105,7 +103,7 @@ class Callbackable /** * get affected rows variable */ - int get_affected_rows() + int get_affected_rows() const { return affected_rows; } @@ -233,7 +231,7 @@ class set_cb : public Callbackable private: - set * ids; + std::set * ids; }; /* -------------------------------------------------------------------------- */ @@ -243,7 +241,7 @@ template class vector_cb : public Callbackable { public: - void set_callback(vector * _oids) + void set_callback(std::vector * _oids) { oids = _oids; @@ -271,7 +269,7 @@ class vector_cb : public Callbackable private: - vector * oids; + std::vector * oids; }; /* -------------------------------------------------------------------------- */ @@ -322,7 +320,7 @@ class stream_cb : public Callbackable public: stream_cb(int _total): total_values(_total){}; - void set_callback(ostringstream * _oss) + void set_callback(std::ostringstream * _oss) { oss = _oss; @@ -352,7 +350,7 @@ class stream_cb : public Callbackable int total_values; - ostringstream * oss; + std::ostringstream * oss; }; /* -------------------------------------------------------------------------- */ diff --git a/include/Client.h b/include/Client.h index 23ecea1ba71..c200cdb72c3 100644 --- a/include/Client.h +++ b/include/Client.h @@ -23,8 +23,6 @@ #include -using namespace std; - // ============================================================================= // Doc: // http://xmlrpc-c.sourceforge.net/doc/#clientexamplepp @@ -118,11 +116,11 @@ class Client * @param message_size for XML elements in the client library (in bytes) * @throws Exception if the authorization options are invalid */ - Client(const string& secret, const string& endpoint, size_t message_size, + Client(const std::string& secret, const std::string& endpoint, size_t message_size, unsigned int tout); - string one_auth; - string one_endpoint; + std::string one_auth; + std::string one_endpoint; unsigned int timeout; diff --git a/include/Cluster.h b/include/Cluster.h index 004db415618..c0528ed05aa 100644 --- a/include/Cluster.h +++ b/include/Cluster.h @@ -18,12 +18,10 @@ #define CLUSTER_H_ #include "PoolObjectSQL.h" -#include "ObjectCollection.h" -#include "DatastorePool.h" #include "ClusterTemplate.h" #include "BitMap.h" +#include "ObjectCollection.h" -using namespace std; /** * The Cluster class. @@ -35,42 +33,34 @@ class Cluster : public PoolObjectSQL // Object Collections (Public) // ************************************************************************* - /** - * Returns a copy of the datastore IDs set - */ - set get_datastores() - { - return datastores.clone(); - }; - /** * Returns a system DS for the cluster when none is set at the API level * @return the ID of the System */ - static int get_default_system_ds(const set& ds_collection); + static int get_default_system_ds(const std::set& ds_collection); /** * Returns a copy of the host IDs set */ - set get_host_ids() + const std::set& get_host_ids() const { - return hosts.clone(); + return hosts.get_collection(); } /** * Returns a copy of the datastore IDs set */ - set get_datastore_ids() + const std::set& get_datastore_ids() const { - return datastores.clone(); + return datastores.get_collection(); } /** * Returns a copy of the vnet IDs set */ - set get_vnet_ids() + const std::set& get_vnet_ids() const { - return vnets.clone(); + return vnets.get_collection(); } /** @@ -79,7 +69,7 @@ class Cluster : public PoolObjectSQL * @param cpu reserved cpu (percentage, or absolute) * @param mem reserved mem (in KB) */ - void get_reserved_capacity(string& cpu, string& mem) const + void get_reserved_capacity(std::string& cpu, std::string& mem) const { get_template_attribute("RESERVED_CPU", cpu); @@ -94,7 +84,7 @@ class Cluster : public PoolObjectSQL * @param xml the resulting XML string * @return a reference to the generated string */ - string& to_xml(string& xml) const override; + std::string& to_xml(std::string& xml) const override; /** * Rebuilds the object from an xml formatted string @@ -102,7 +92,7 @@ class Cluster : public PoolObjectSQL * * @return 0 on success, -1 otherwise */ - int from_xml(const string &xml_str) override; + int from_xml(const std::string &xml_str) override; private: @@ -123,7 +113,7 @@ class Cluster : public PoolObjectSQL * @param port reserved * @return 0 on success */ - int get_vnc_port(int vmid, unsigned int& port) + int get_vnc_port(int vmid, unsigned int& port) const { unsigned int base_port = vnc_bitmap.get_start_bit(); unsigned int hint_port = base_port + (vmid % (65535 - base_port)); @@ -144,7 +134,7 @@ class Cluster : public PoolObjectSQL // ************************************************************************* // Constructor // ************************************************************************* - Cluster(int id, const string& name, ClusterTemplate* cl_template, + Cluster(int id, const std::string& name, ClusterTemplate* cl_template, const VectorAttribute& vnc_conf); virtual ~Cluster() = default; @@ -161,19 +151,7 @@ class Cluster : public PoolObjectSQL // ************************************************************************* // DataBase implementation (Private) // ************************************************************************* - static const char * db_names; - static const char * db_bootstrap; - static const char * table; - - static const char * datastore_table; - static const char * datastore_db_names; - static const char * datastore_db_bootstrap; - static const char * network_table; - static const char * network_db_names; - static const char * network_db_bootstrap; - - static const char * bitmap_table; /** * Execute an INSERT or REPLACE Sql query. * @param db The SQL DB @@ -181,35 +159,20 @@ class Cluster : public PoolObjectSQL * @param error_str Returns the error reason, if any * @return 0 one success */ - int insert_replace(SqlDB *db, bool replace, string& error_str); + int insert_replace(SqlDB *db, bool replace, std::string& error_str); /** * Bootstraps the database table(s) associated to the Cluster * @return 0 on success */ - static int bootstrap(SqlDB * db) - { - int rc; - ostringstream oss; - - oss.str(Cluster::db_bootstrap); - rc = db->exec_local_wr(oss); - - oss.str(Cluster::datastore_db_bootstrap); - rc += db->exec_local_wr(oss); - - oss.str(Cluster::network_db_bootstrap); - rc += db->exec_local_wr(oss); - - return rc; - }; + static int bootstrap(SqlDB * db); /** * Writes the Cluster in the database. * @param db pointer to the db * @return 0 on success */ - int insert(SqlDB *db, string& error_str) override + int insert(SqlDB *db, std::string& error_str) override { int rc; @@ -230,7 +193,7 @@ class Cluster : public PoolObjectSQL */ int update(SqlDB *db) override { - string error_str; + std::string error_str; return insert_replace(db, true, error_str); } @@ -267,7 +230,7 @@ class Cluster : public PoolObjectSQL * @param db pointer to the db * @return 0 on success */ - int select(SqlDB *db, const string& _name, int _uid) override + int select(SqlDB *db, const std::string& _name, int _uid) override { int rc = PoolObjectSQL::select(db, _name, _uid); @@ -286,7 +249,7 @@ class Cluster : public PoolObjectSQL * @param error_msg Error message, if any. * @return 0 if cluster can be dropped, -1 otherwise */ - int check_drop(string& error_msg); + int check_drop(std::string& error_msg); /** * Factory method for cluster templates @@ -300,9 +263,10 @@ class Cluster : public PoolObjectSQL * Add a resource to the corresponding set. * @return 0 on success */ - int add_resource(PoolObjectSQL::ObjectType type, int resource_id, string& error_msg) + int add_resource(PoolObjectSQL::ObjectType type, int resource_id, + std::string& error_msg) { - ostringstream oss; + std::ostringstream oss; int rc; @@ -336,7 +300,8 @@ class Cluster : public PoolObjectSQL * Remove a resource from the corresponding set. * @return 0 on success */ - int del_resource(PoolObjectSQL::ObjectType type, int resource_id, string& error_msg) + int del_resource(PoolObjectSQL::ObjectType type, int resource_id, + std::string& error_msg) { int rc; diff --git a/include/ClusterPool.h b/include/ClusterPool.h index 9a84b2095c4..5b6e34873f9 100644 --- a/include/ClusterPool.h +++ b/include/ClusterPool.h @@ -19,8 +19,7 @@ #include "Cluster.h" #include "PoolSQL.h" - -using namespace std; +#include "OneDB.h" class ClusterPool : public PoolSQL @@ -28,7 +27,7 @@ class ClusterPool : public PoolSQL public: ClusterPool(SqlDB * db, const VectorAttribute * vnc_conf, - vector& encrypted_attrs); + std::vector& encrypted_attrs); ~ClusterPool(){}; @@ -39,7 +38,7 @@ class ClusterPool : public PoolSQL /** * Name for the "none" cluster */ - static const string NONE_CLUSTER_NAME; + static const std::string NONE_CLUSTER_NAME; /** * Identifier for the "none" cluster @@ -49,7 +48,7 @@ class ClusterPool : public PoolSQL /** * Name for the default cluster */ - static const string DEFAULT_CLUSTER_NAME; + static const std::string DEFAULT_CLUSTER_NAME; /** * Identifier for the default cluster @@ -140,7 +139,7 @@ class ClusterPool : public PoolSQL * * @return the oid assigned to the object, -1 in case of failure */ - int allocate(string name, int * oid, string& error_str); + int allocate(std::string name, int * oid, std::string& error_str); /** * Function to get a cluster from the pool, if the object is not in memory @@ -177,7 +176,7 @@ class ClusterPool : public PoolSQL * -2 object is a system cluster (ID < 100) * -3 Cluster's User IDs set is not empty */ - int drop(PoolObjectSQL * objsql, string& error_msg); + int drop(PoolObjectSQL * objsql, std::string& error_msg); /** * Bootstraps the database table(s) associated to the Cluster pool @@ -185,12 +184,12 @@ class ClusterPool : public PoolSQL */ static int bootstrap(SqlDB * _db) { - ostringstream oss_bitmap; + std::ostringstream oss_bitmap; int rc; rc = Cluster::bootstrap(_db); rc += _db->exec_local_wr( - BitMap<0>::bootstrap(Cluster::bitmap_table, oss_bitmap)); + BitMap<0>::bootstrap(one_db::cluster_bitmap_table, oss_bitmap)); return rc; }; @@ -209,7 +208,8 @@ class ClusterPool : public PoolSQL int dump(std::string& oss, const std::string& where, int sid, int eid, bool desc) { - return PoolSQL::dump(oss, "CLUSTER_POOL", "body", Cluster::table, where, + return PoolSQL::dump(oss, "CLUSTER_POOL", "body", + one_db::cluster_table, where, sid, eid, desc); }; @@ -220,8 +220,8 @@ class ClusterPool : public PoolSQL * @param auth_object to generate the filter for * @param cids vector of cluster ids */ - static void cluster_acl_filter(ostringstream& filter, - PoolObjectSQL::ObjectType auth_object, const vector& cids); + static void cluster_acl_filter(std::ostringstream& filter, + PoolObjectSQL::ObjectType auth_object, const std::vector& cids); /** * Returns the Datastore Clusters performing a DB query @@ -229,7 +229,7 @@ class ClusterPool : public PoolSQL * @param cluster_ids Will contain the Cluster IDs * @return 0 on success */ - int query_datastore_clusters(int oid, set &cluster_ids); + int query_datastore_clusters(int oid, std::set &cluster_ids); /** * Returns the VNet Clusters performing a DB query @@ -237,7 +237,7 @@ class ClusterPool : public PoolSQL * @param cluster_ids Will contain the Cluster IDs * @return 0 on success */ - int query_vnet_clusters(int oid, set &cluster_ids); + int query_vnet_clusters(int oid, std::set &cluster_ids); /** * Adds a resource to the specifyed cluster and update the clusters body. @@ -248,7 +248,7 @@ class ClusterPool : public PoolSQL * @return 0 on success */ int add_to_cluster(PoolObjectSQL::ObjectType type, Cluster* cluster, - int resource_id, string& error_msg); + int resource_id, std::string& error_msg); /** * Removes a resource from the specifyed cluster and update the clusters body. @@ -259,7 +259,7 @@ class ClusterPool : public PoolSQL * @return 0 on success */ int del_from_cluster(PoolObjectSQL::ObjectType type, Cluster* cluster, - int resource_id, string& error_msg); + int resource_id, std::string& error_msg); /** * Updates the cluster vnc bitmap. diff --git a/include/ClusterTemplate.h b/include/ClusterTemplate.h index 6762fd8daa3..53a7590e7aa 100644 --- a/include/ClusterTemplate.h +++ b/include/ClusterTemplate.h @@ -19,7 +19,6 @@ #include "Template.h" -using namespace std; /** * Cluster Template class @@ -47,7 +46,7 @@ class ClusterTemplate : public Template Template::decrypt(one_key, encrypted); } - static void parse_encrypted(vector& ea) + static void parse_encrypted(std::vector& ea) { Template::parse_encrypted(ea, encrypted); } diff --git a/include/Clusterable.h b/include/Clusterable.h index 543079346d7..f059222a1c4 100644 --- a/include/Clusterable.h +++ b/include/Clusterable.h @@ -38,9 +38,9 @@ class Clusterable * * @return The cluster IDs set */ - std::set get_cluster_ids() const + const std::set& get_cluster_ids() const { - return cluster_ids.clone(); + return cluster_ids.get_collection(); }; /** diff --git a/include/Datastore.h b/include/Datastore.h index 5c9fd8daed6..ebae7ab31fa 100644 --- a/include/Datastore.h +++ b/include/Datastore.h @@ -46,7 +46,7 @@ class Datastore : public PoolObjectSQL, public Clusterable * @param ob the type * @return the string */ - static string type_to_str(DatastoreType ob) + static std::string type_to_str(DatastoreType ob) { switch (ob) { @@ -62,7 +62,7 @@ class Datastore : public PoolObjectSQL, public Clusterable * @param str_type string representing the DatastoreTypr * @return the DatastoreType (defaults to IMAGE_DS) */ - static DatastoreType str_to_type(string& str_type); + static DatastoreType str_to_type(std::string& str_type); /** * Datastore State @@ -78,7 +78,7 @@ class Datastore : public PoolObjectSQL, public Clusterable * @param state The state * @return the string representation */ - static string state_to_str(DatastoreState state) + static std::string state_to_str(DatastoreState state) { switch (state) { @@ -93,7 +93,7 @@ class Datastore : public PoolObjectSQL, public Clusterable * @param xml the resulting XML string * @return a reference to the generated string */ - string& to_xml(string& xml) const override; + std::string& to_xml(std::string& xml) const override; /** * Rebuilds the object from an xml formatted string @@ -101,7 +101,7 @@ class Datastore : public PoolObjectSQL, public Clusterable * * @return 0 on success, -1 otherwise */ - int from_xml(const string &xml_str) override; + int from_xml(const std::string &xml_str) override; /** * Adds this image's ID to the set. @@ -126,9 +126,9 @@ class Datastore : public PoolObjectSQL, public Clusterable /** * Returns a copy of the Image IDs set */ - set get_image_ids() + const std::set& get_image_ids() const { - return images.clone(); + return images.get_collection(); } /** @@ -143,7 +143,7 @@ class Datastore : public PoolObjectSQL, public Clusterable * Retrieves TM mad name * @return string tm mad name */ - const string& get_tm_mad() const + const std::string& get_tm_mad() const { return tm_mad; }; @@ -152,7 +152,7 @@ class Datastore : public PoolObjectSQL, public Clusterable * Retrieves DS mad name * @return string ds mad name */ - const string& get_ds_mad() const + const std::string& get_ds_mad() const { return ds_mad; }; @@ -161,7 +161,7 @@ class Datastore : public PoolObjectSQL, public Clusterable * Retrieves the base path * @return base path string */ - const string& get_base_path() const + const std::string& get_base_path() const { return base_path; }; @@ -193,8 +193,8 @@ class Datastore : public PoolObjectSQL, public Clusterable * into the disk */ void disk_attribute( - VirtualMachineDisk * disk, - const vector& inherit_attrs); + VirtualMachineDisk * disk, + const std::vector& inherit_attrs); /** * Set monitor information for the Datastore @@ -215,7 +215,7 @@ class Datastore : public PoolObjectSQL, public Clusterable * @return true if the datastore is configured to enforce capacity * checkings */ - bool get_avail_mb(long long &avail); + bool get_avail_mb(long long &avail) const; /** * Returns true if the DS contains the SHARED = YES attribute @@ -237,7 +237,7 @@ class Datastore : public PoolObjectSQL, public Clusterable * Returns true if the DS_MAD_CONF has PERSISTENT_ONLY = "YES" flag * @return true if persistent only */ - bool is_persistent_only(); + bool is_persistent_only() const; /** * Enable or disable the DS. Only for System DS. @@ -246,14 +246,14 @@ class Datastore : public PoolObjectSQL, public Clusterable * * @return 0 on success */ - int enable(bool enable, string& error_str); + int enable(bool enable, std::string& error_str); /** * Return a set with compatible system ds for an image ds */ - void get_compatible_system_ds(set &compatible_sys_ds) + void get_compatible_system_ds(std::set &compatible_sys_ds) const { - string compatible_sys_ds_str; + std::string compatible_sys_ds_str; get_template_attribute("COMPATIBLE_SYS_DS", compatible_sys_ds_str); @@ -264,7 +264,10 @@ class Datastore : public PoolObjectSQL, public Clusterable * Verify the proper definition of the TM_MAD by checking the attributes * related to the TM defined in TM_MAD_CONF */ - int get_tm_mad_targets(const string &tm_mad, string& ln_target, string& clone_target, string& disk_type); + int get_tm_mad_targets(const std::string &tm_mad, + std::string& ln_target, + std::string& clone_target, + std::string& disk_type) const; private: @@ -281,17 +284,17 @@ class Datastore : public PoolObjectSQL, public Clusterable /** * Name of the datastore driver used to register new images */ - string ds_mad; + std::string ds_mad; /** * Name of the TM driver used to transfer file to and from the hosts */ - string tm_mad; + std::string tm_mad; /** * Base path for the storage */ - string base_path; + std::string base_path; /** * The datastore type @@ -335,11 +338,11 @@ class Datastore : public PoolObjectSQL, public Clusterable Datastore( int uid, int gid, - const string& uname, - const string& gname, + const std::string& uname, + const std::string& gname, int umask, DatastoreTemplate* ds_template, - const set &cluster_ids); + const std::set &cluster_ids); virtual ~Datastore() = default; @@ -353,18 +356,12 @@ class Datastore : public PoolObjectSQL, public Clusterable * @return -1 if an inconsistent assigment is found * */ - int set_ds_disk_type(string& s_dt, string& error); + int set_ds_disk_type(std::string& s_dt, std::string& error); // ************************************************************************* // DataBase implementation (Private) // ************************************************************************* - static const char * db_names; - - static const char * db_bootstrap; - - static const char * table; - /** * Execute an INSERT or REPLACE Sql query. * @param db The SQL DB @@ -372,25 +369,20 @@ class Datastore : public PoolObjectSQL, public Clusterable * @param error_str Returns the error reason, if any * @return 0 one success */ - int insert_replace(SqlDB *db, bool replace, string& error_str); + int insert_replace(SqlDB *db, bool replace, std::string& error_str); /** * Bootstraps the database table(s) associated to the Datastore * @return 0 on success */ - static int bootstrap(SqlDB * db) - { - ostringstream oss(Datastore::db_bootstrap); - - return db->exec_local_wr(oss); - }; + static int bootstrap(SqlDB * db); /** * Writes the Datastore in the database. * @param db pointer to the db * @return 0 on success */ - int insert(SqlDB *db, string& error_str) override; + int insert(SqlDB *db, std::string& error_str) override; /** * Writes/updates the Datastore's data fields in the database. @@ -399,7 +391,7 @@ class Datastore : public PoolObjectSQL, public Clusterable */ int update(SqlDB *db) override { - string error_str; + std::string error_str; return insert_replace(db, true, error_str); } @@ -416,13 +408,13 @@ class Datastore : public PoolObjectSQL, public Clusterable * related to the DS defined in DS_MAD_CONF specified in the Datastore * template */ - int set_ds_mad(string &ds_mad, string &error_str); + int set_ds_mad(std::string &ds_mad, std::string &error_str); /** * Verify the proper definition of the TM_MAD by checking the attributes * related to the TM defined in TM_MAD_CONF */ - int set_tm_mad(string &tm_mad, string &error_str); + int set_tm_mad(std::string &tm_mad, std::string &error_str); /** * Child classes can process the new template set with replace_template or @@ -431,7 +423,7 @@ class Datastore : public PoolObjectSQL, public Clusterable * @return 0 on success * - encrypt secret attributes. */ - int post_update_template(string& error) override; + int post_update_template(std::string& error) override; }; #endif /*DATASTORE_H_*/ diff --git a/include/DatastorePool.h b/include/DatastorePool.h index b29885cd5cc..f3f775659c4 100644 --- a/include/DatastorePool.h +++ b/include/DatastorePool.h @@ -19,16 +19,15 @@ #include "Datastore.h" #include "PoolSQL.h" - -using namespace std; +#include "OneDB.h" class DatastorePool : public PoolSQL { public: DatastorePool(SqlDB * db, - const vector& _inherit_attrs, - vector& encrypted_attrs); + const std::vector& _inherit_attrs, + std::vector& encrypted_attrs); ~DatastorePool(){}; @@ -39,7 +38,7 @@ class DatastorePool : public PoolSQL /** * Name for the system datastore */ - static const string SYSTEM_DS_NAME; + static const std::string SYSTEM_DS_NAME; /** * Identifier for the system datastore @@ -49,7 +48,7 @@ class DatastorePool : public PoolSQL /** * Name for the default datastore */ - static const string DEFAULT_DS_NAME; + static const std::string DEFAULT_DS_NAME; /** * Identifier for the default datastore @@ -59,7 +58,7 @@ class DatastorePool : public PoolSQL /** * Name for the file datastore */ - static const string FILE_DS_NAME; + static const std::string FILE_DS_NAME; /** * Identifier for the file datastore @@ -86,15 +85,15 @@ class DatastorePool : public PoolSQL * @return the oid assigned to the object, -1 in case of failure */ int allocate( - int uid, - int gid, - const string& uname, - const string& gname, - int umask, - DatastoreTemplate * ds_template, - int * oid, - const set &cluster_ids, - string& error_str); + int uid, + int gid, + const std::string& uname, + const std::string& gname, + int umask, + DatastoreTemplate * ds_template, + int * oid, + const std::set& cluster_ids, + std::string& error_str); /** * Function to get a Datastore from the pool, if the object is not in memory @@ -127,7 +126,7 @@ class DatastorePool : public PoolSQL * @return 0 on success, -1 DB error * -3 Datastore's Image IDs set is not empty */ - int drop(PoolObjectSQL * objsql, string& error_msg); + int drop(PoolObjectSQL * objsql, std::string& error_msg); /** * Bootstraps the database table(s) associated to the Datastore pool @@ -152,7 +151,7 @@ class DatastorePool : public PoolSQL int dump(std::string& oss, const std::string& where, int sid, int eid, bool desc) { - return PoolSQL::dump(oss, "DATASTORE_POOL", "body", Datastore::table, + return PoolSQL::dump(oss, "DATASTORE_POOL", "body", one_db::ds_table, where, sid, eid, desc); }; @@ -162,9 +161,9 @@ class DatastorePool : public PoolSQL * * @return 0 on success */ - int list(vector& oids) + int list(std::vector& oids) { - return PoolSQL::list(oids, Datastore::table); + return PoolSQL::list(oids, one_db::ds_table); } /** @@ -180,7 +179,7 @@ class DatastorePool : public PoolSQL /** * Datastore attributes to be inherited into the VM disk */ - vector inherit_attrs; + std::vector inherit_attrs; /** * Factory method to produce objects @@ -188,7 +187,7 @@ class DatastorePool : public PoolSQL */ PoolObjectSQL * create() { - set empty; + std::set empty; return new Datastore(-1,-1,"","", 0, 0, empty); }; diff --git a/include/DatastoreTemplate.h b/include/DatastoreTemplate.h index 7e983b5b822..6d1631ea07b 100644 --- a/include/DatastoreTemplate.h +++ b/include/DatastoreTemplate.h @@ -19,7 +19,6 @@ #include "Template.h" -using namespace std; /** * Datastore Template class @@ -47,7 +46,7 @@ class DatastoreTemplate : public Template Template::decrypt(one_key, encrypted); } - static void parse_encrypted(vector& ea) + static void parse_encrypted(std::vector& ea) { Template::parse_encrypted(ea, encrypted); } diff --git a/include/DefaultQuotas.h b/include/DefaultQuotas.h index 807763a5b0c..57708c85374 100644 --- a/include/DefaultQuotas.h +++ b/include/DefaultQuotas.h @@ -39,7 +39,7 @@ class DefaultQuotas : public Quotas * @param xml the string to store the XML * @return the same xml string to use it in << compounds */ - string& to_xml(string& xml) const; + std::string& to_xml(std::string& xml) const; /** * Writes the quotas in the database. @@ -73,7 +73,7 @@ class DefaultQuotas : public Quotas * @param xml The xml-formatted string * @return 0 on success */ - int from_xml(const string& xml); + int from_xml(const std::string& xml); }; #endif /*DEFAULT_QUOTAS_H_*/ diff --git a/include/DispatchManager.h b/include/DispatchManager.h index 914dd39f5e8..e6c67797bb1 100644 --- a/include/DispatchManager.h +++ b/include/DispatchManager.h @@ -17,78 +17,33 @@ #ifndef DISPATCH_MANAGER_H_ #define DISPATCH_MANAGER_H_ -#include "ActionManager.h" -#include "HostPool.h" -#include "VirtualMachinePool.h" -#include "VirtualRouterPool.h" -#include "ClusterPool.h" -#include "UserPool.h" - -using namespace std; - -extern "C" void * dm_action_loop(void *arg); +#include "Listener.h" //Forward definitions class TransferManager; class LifeCycleManager; class VirtualMachineManager; class ImageManager; +class ClusterPool; +class HostPool; +class VirtualMachinePool; +class VirtualRouterPool; +class UserPool; +class VirtualMachine; +class VirtualMachineTemplate; struct RequestAttributes; -/* -------------------------------------------------------------------------- */ -/* -------------------------------------------------------------------------- */ -class DMAction : public ActionRequest +class DispatchManager : public Listener { public: - enum Actions - { - SUSPEND_SUCCESS, /**< Send by LCM when a VM is suspended*/ - STOP_SUCCESS, /**< Send by LCM when a VM is stopped*/ - UNDEPLOY_SUCCESS, /**< Send by LCM when a VM is undeployed and saved*/ - POWEROFF_SUCCESS, /**< Send by LCM when a VM is powered off */ - DONE, /**< Send by LCM when a VM is shut down*/ - RESUBMIT /**< Send by LCM when a VM is ready for resubmission*/ - }; - - DMAction(Actions a, int v):ActionRequest(ActionRequest::USER), - _action(a), _vm_id(v){} - - DMAction(const DMAction& o):ActionRequest(o._type), _action(o._action), - _vm_id(o._vm_id){} - - Actions action() const - { - return _action; - } - int vm_id() const + DispatchManager() + : Listener("Dispatch Manager") { - return _vm_id; } - ActionRequest * clone() const - { - return new DMAction(*this); - } - -private: - Actions _action; - - int _vm_id; -}; - -class DispatchManager : public ActionListener -{ -public: - - DispatchManager(): - hpool(0), vmpool(0), clpool(0), vrouterpool(0), tm(0), vmm(0), lcm(0), imagem(0) - { - am.addListener(this); - }; - ~DispatchManager() = default; /** @@ -97,25 +52,6 @@ class DispatchManager : public ActionListener */ void init_managers(); - /** - * Triggers specific actions to the Dispatch Manager. This function - * wraps the ActionManager trigger function. - * @param action the DM action - * @param vid VM unique id. This is the argument of the passed to the - * invoked action. - */ - void trigger(DMAction::Actions action, int vid) - { - DMAction dm_ar(action, vid); - - am.trigger(dm_ar); - } - - void finalize() - { - am.finalize(); - } - /** * This functions creates a new thread for the Dispatch Manager. This * thread will wait in an action loop till it receives ACTION_FINALIZE. @@ -123,15 +59,6 @@ class DispatchManager : public ActionListener */ int start(); - /** - * Gets the thread identification. - * @return pthread_t for the manager thread (that in the action loop). - */ - pthread_t get_thread_id() const - { - return dm_thread; - }; - //-------------------------------------------------------------------------- // DM Actions, the RM and the Scheduler will invoke this methods //-------------------------------------------------------------------------- @@ -192,7 +119,7 @@ class DispatchManager : public ActionListener * in a wrong a state */ int terminate(int vid, bool hard, const RequestAttributes& request, - string& error_str); + std::string& error_str); /** * Shuts down a VM, but it is saved in the system DS instead of destroyed. @@ -203,7 +130,7 @@ class DispatchManager : public ActionListener * in a wrong a state */ int undeploy(int vid, bool hard, const RequestAttributes& ra, - string& error_str); + std::string& error_str); /** * Powers off a VM. @@ -214,7 +141,7 @@ class DispatchManager : public ActionListener * in a wrong a state */ int poweroff(int vid, bool hard, const RequestAttributes& ra, - string& error_str); + std::string& error_str); /** * Holds a VM. @@ -223,7 +150,7 @@ class DispatchManager : public ActionListener * @return 0 on success, -1 if the VM does not exits or -2 if the VM is * in a wrong a state */ - int hold(int vid, const RequestAttributes& ra, string& error_str); + int hold(int vid, const RequestAttributes& ra, std::string& error_str); /** * Releases a VM. @@ -232,7 +159,7 @@ class DispatchManager : public ActionListener * @return 0 on success, -1 if the VM does not exits or -2 if the VM is * in a wrong a state */ - int release(int vid, const RequestAttributes& ra, string& error_str); + int release(int vid, const RequestAttributes& ra, std::string& error_str); /** * Stops a VM. @@ -241,7 +168,7 @@ class DispatchManager : public ActionListener * @return 0 on success, -1 if the VM does not exits or -2 if the VM is * in a wrong a state */ - int stop(int vid, const RequestAttributes& ra, string& error_str); + int stop(int vid, const RequestAttributes& ra, std::string& error_str); /** * Suspends a VM. @@ -250,7 +177,7 @@ class DispatchManager : public ActionListener * @return 0 on success, -1 if the VM does not exits or -2 if the VM is * in a wrong a state */ - int suspend(int vid, const RequestAttributes& ra, string& error_str); + int suspend(int vid, const RequestAttributes& ra, std::string& error_str); /** * Resumes a VM. @@ -259,7 +186,7 @@ class DispatchManager : public ActionListener * @return 0 on success, -1 if the VM does not exits or -2 if the VM is * in a wrong a state */ - int resume(int vid, const RequestAttributes& ra, string& error_str); + int resume(int vid, const RequestAttributes& ra, std::string& error_str); /** * Ends a VM life cycle inside ONE. @@ -268,25 +195,12 @@ class DispatchManager : public ActionListener * @return 0 on success, the VM mutex is unlocked */ int delete_vm(VirtualMachine * vm, const RequestAttributes& ra, - string& error_str); + std::string& error_str); /** * VM ID interface */ - int delete_vm(int vid, const RequestAttributes& ra, string& error_str) - { - VirtualMachine * vm; - - vm = vmpool->get(vid); - - if ( vm == 0 ) - { - error_str = "Virtual machine does not exist"; - return -1; - } - - return delete_vm(vm, ra, error_str); - } + int delete_vm(int vid, const RequestAttributes& ra, std::string& error_str); /** * Moves a VM to PENDING state preserving any resource (i.e. leases) and id @@ -295,7 +209,7 @@ class DispatchManager : public ActionListener * @return 0 on success */ int delete_recreate(VirtualMachine * vm, const RequestAttributes& ra, - string& error_str); + std::string& error_str); /** * Ends a VM life cycle inside ONE but let the VM running at the Hipervisor. @@ -304,7 +218,7 @@ class DispatchManager : public ActionListener * @return 0 on success, the VM mutex is unlocked */ int delete_vm_db(VirtualMachine * vm, const RequestAttributes& ra, - string& error_str); + std::string& error_str); /** * Recover the last operation on the VM @@ -314,7 +228,7 @@ class DispatchManager : public ActionListener * @return 0 on success */ int recover(VirtualMachine * vm, bool success, const RequestAttributes& ra, - string& error_str); + std::string& error_str); /** * Retry the last operation on the VM @@ -323,7 +237,7 @@ class DispatchManager : public ActionListener * @return 0 on success */ int retry(VirtualMachine * vm, const RequestAttributes& ra, - string& error_str); + std::string& error_str); /** * Reboots a VM preserving any resource and RUNNING state @@ -334,7 +248,7 @@ class DispatchManager : public ActionListener * in a wrong a state */ int reboot(int vid, bool hard, const RequestAttributes& ra, - string& error_str); + std::string& error_str); /** * Set the re-scheduling flag for the VM (must be in RUNNING state) @@ -346,7 +260,7 @@ class DispatchManager : public ActionListener * in a wrong a state */ int resched(int vid, bool do_resched, const RequestAttributes& ra, - string& error_str); + std::string& error_str); /** * Starts the attach disk action. @@ -358,7 +272,7 @@ class DispatchManager : public ActionListener * @return 0 on success, -1 otherwise */ int attach(int vid, VirtualMachineTemplate * tmpl, - const RequestAttributes& ra, string& error_str); + const RequestAttributes& ra, std::string& error_str); /** * Starts the detach disk action. @@ -370,7 +284,7 @@ class DispatchManager : public ActionListener * @return 0 on success, -1 otherwise */ int detach(int id, int disk_id, const RequestAttributes& ra, - string& error_str); + std::string& error_str); /** * Starts the attach NIC action. @@ -382,7 +296,7 @@ class DispatchManager : public ActionListener * @return 0 on success, -1 otherwise */ int attach_nic(int vid, VirtualMachineTemplate * tmpl, - const RequestAttributes& ra, string& error_str); + const RequestAttributes& ra, std::string& error_str); /** * Starts the detach NIC action. @@ -394,7 +308,7 @@ class DispatchManager : public ActionListener * @return 0 on success, -1 otherwise */ int detach_nic(int id, int nic_id, const RequestAttributes& ra, - string& error_str); + std::string& error_str); /** * Starts the snapshot create action @@ -407,8 +321,8 @@ class DispatchManager : public ActionListener * * @return 0 on success, -1 otherwise */ - int snapshot_create(int vid, string& name, int& snap_id, - const RequestAttributes& ra, string& error_str); + int snapshot_create(int vid, std::string& name, int& snap_id, + const RequestAttributes& ra, std::string& error_str); /** * Starts the snapshot revert action @@ -421,7 +335,7 @@ class DispatchManager : public ActionListener * @return 0 on success, -1 otherwise */ int snapshot_revert(int vid, int snap_id, const RequestAttributes& ra, - string& error_str); + std::string& error_str); /** * Starts the snapshot delete action @@ -434,7 +348,7 @@ class DispatchManager : public ActionListener * @return 0 on success, -1 otherwise */ int snapshot_delete(int vid, int snap_id, const RequestAttributes& ra, - string& error_str); + std::string& error_str); /** * Starts the disk snapshot create action @@ -448,8 +362,8 @@ class DispatchManager : public ActionListener * * @return 0 on success, -1 otherwise */ - int disk_snapshot_create(int vid, int did, const string& name, int& snap_id, - const RequestAttributes& ra, string& error_str); + int disk_snapshot_create(int vid, int did, const std::string& name, + int& snap_id, const RequestAttributes& ra, std::string& error_str); /** * Reverts the disk state to a previous snapshot @@ -463,7 +377,7 @@ class DispatchManager : public ActionListener * @return 0 on success, -1 otherwise */ int disk_snapshot_revert(int vid, int did, int snap_id, - const RequestAttributes& ra, string& error_str); + const RequestAttributes& ra, std::string& error_str); /** * Deletes a disk snapshot @@ -477,7 +391,7 @@ class DispatchManager : public ActionListener * @return 0 on success, -1 otherwise */ int disk_snapshot_delete(int vid, int did, int snap_id, - const RequestAttributes& ra, string& error_str); + const RequestAttributes& ra, std::string& error_str); /** * Starts the disk resize create action @@ -491,7 +405,7 @@ class DispatchManager : public ActionListener * @return 0 on success, -1 otherwise */ int disk_resize(int vid, int did, long long new_size, - const RequestAttributes& ra, string& error_str); + const RequestAttributes& ra, std::string& error_str); /** * Update virtual machine context @@ -502,109 +416,75 @@ class DispatchManager : public ActionListener * * @return 0 on success, -1 otherwise */ - int live_updateconf(int vid, const RequestAttributes& ra, string& error_str); + int live_updateconf(int vid, const RequestAttributes& ra, + std::string& error_str); -private: - /** - * Thread id for the Dispatch Manager - */ - pthread_t dm_thread; + //-------------------------------------------------------------------------- + // DM Actions associated with a VM state transition + //-------------------------------------------------------------------------- + + void trigger_suspend_success(int vid); + void trigger_stop_success(int vid); + + void trigger_undeploy_success(int vid); + + void trigger_poweroff_success(int vid); + + void trigger_done(int vid); + + void trigger_resubmit(int vid); + +private: /** * Pointer to the Host Pool, to access hosts */ - HostPool * hpool; + HostPool * hpool = nullptr; /** * Pointer to the Virtual Machine Pool, to access VMs */ - VirtualMachinePool * vmpool; + VirtualMachinePool * vmpool = nullptr; /** * Pointer to the User Pool, to access user */ - UserPool * upool; + UserPool * upool = nullptr; /** * Pointer to the Cluster Pool */ - ClusterPool * clpool; + ClusterPool * clpool = nullptr; /** * Pointer to the Virtual Router Pool */ - VirtualRouterPool * vrouterpool; + VirtualRouterPool * vrouterpool = nullptr; /** * Pointer to TransferManager */ - TransferManager * tm; + TransferManager * tm = nullptr; /** * Pointer to VirtualMachineManager */ - VirtualMachineManager * vmm; + VirtualMachineManager * vmm = nullptr; /** * Pointer to LifeCycleManager */ - LifeCycleManager * lcm; + LifeCycleManager * lcm = nullptr; /** * Pointer to ImageManager */ - ImageManager * imagem; - - /** - * Action engine for the Manager - */ - ActionManager am; + ImageManager * imagem = nullptr; /** * Frees the resources associated to a VM: disks, ip addresses and Quotas */ void free_vm_resources(VirtualMachine * vm, bool check_images); - - //-------------------------------------------------------------------------- - // DM Actions associated with a VM state transition - //-------------------------------------------------------------------------- - - void suspend_success_action(int vid); - - void stop_success_action(int vid); - - void undeploy_success_action(int vid); - - void poweroff_success_action(int vid); - - void done_action(int vid); - - void resubmit_action(int vid); - - /** - * Function to execute the Manager action loop method within a new pthread - * (requires C linkage) - */ - friend void * dm_action_loop(void *arg); - - // ------------------------------------------------------------------------- - // Action Listener interface - // ------------------------------------------------------------------------- - void finalize_action(const ActionRequest& ar) - { - NebulaLog::log("DiM",Log::INFO,"Stopping Dispatch Manager..."); - }; - - void user_action(const ActionRequest& ar); - - /** - * Fill a template only with the necessary attributes to update the quotas - * @param vm with the attributes - * @param template that will be filled - * @param only_running true to not add CPU, MEMORY and VMS counters - */ - void get_quota_template(VirtualMachine * vm, - VirtualMachineTemplate& quota_tmpl, bool only_running); }; #endif /*DISPATCH_MANAGER_H*/ diff --git a/include/Document.h b/include/Document.h index d331f7c1ace..cb60339177f 100644 --- a/include/Document.h +++ b/include/Document.h @@ -35,7 +35,7 @@ class Document : public PoolObjectSQL * @param xml the resulting XML string * @return a reference to the generated string */ - string& to_xml(string& xml) const override; + std::string& to_xml(std::string& xml) const override; // ------------------------------------------------------------------------ // Template Contents @@ -64,7 +64,7 @@ class Document : public PoolObjectSQL * * @return the document type */ - int get_document_type() + int get_document_type() const { return type; }; @@ -97,18 +97,13 @@ class Document : public PoolObjectSQL * @param error_str Returns the error reason, if any * @return 0 one success */ - int insert_replace(SqlDB *db, bool replace, string& error_str); + int insert_replace(SqlDB *db, bool replace, std::string& error_str); /** * Bootstraps the database table(s) associated to the Document * @return 0 on success */ - static int bootstrap(SqlDB * db) - { - ostringstream oss(Document::db_bootstrap); - - return db->exec_local_wr(oss); - }; + static int bootstrap(SqlDB * db); /** * Rebuilds the object from an xml formatted string @@ -116,7 +111,7 @@ class Document : public PoolObjectSQL * * @return 0 on success, -1 otherwise */ - int from_xml(const string &xml_str) override; + int from_xml(const std::string &xml_str) override; protected: @@ -126,8 +121,8 @@ class Document : public PoolObjectSQL Document( int id, int uid, int gid, - const string& uname, - const string& gname, + const std::string& uname, + const std::string& gname, int umask, int type, Template * _template_contents); @@ -138,19 +133,13 @@ class Document : public PoolObjectSQL // DataBase implementation // ************************************************************************* - static const char * db_names; - - static const char * db_bootstrap; - - static const char * table; - /** * Writes the Document in the database. * @param db pointer to the db * @param error_str Returns the error reason, if any * @return 0 on success */ - int insert(SqlDB *db, string& error_str) override; + int insert(SqlDB *db, std::string& error_str) override; /** * Writes/updates the Document data fields in the database. @@ -159,7 +148,7 @@ class Document : public PoolObjectSQL */ int update(SqlDB *db) override { - string err; + std::string err; return insert_replace(db, true, err); }; }; diff --git a/include/DocumentPool.h b/include/DocumentPool.h index de437190005..ffbecff0212 100644 --- a/include/DocumentPool.h +++ b/include/DocumentPool.h @@ -19,6 +19,7 @@ #include "PoolSQL.h" #include "Document.h" +#include "OneDB.h" /** * The Document Pool class. @@ -27,7 +28,7 @@ class DocumentPool : public PoolSQL { public: - DocumentPool(SqlDB * db) : PoolSQL(db, Document::table){}; + DocumentPool(SqlDB * db) : PoolSQL(db, one_db::doc_table) {}; ~DocumentPool(){}; @@ -48,13 +49,13 @@ class DocumentPool : public PoolSQL */ int allocate(int uid, int gid, - const string& uname, - const string& gname, + const std::string& uname, + const std::string& gname, int umask, int type, Template * template_contents, int * oid, - string& error_str) + std::string& error_str) { *oid = PoolSQL::allocate( new Document(-1, uid, gid, uname, gname, umask, type, template_contents), @@ -103,8 +104,8 @@ class DocumentPool : public PoolSQL int dump(std::string& oss, const std::string& where, int sid, int eid, bool desc) { - return PoolSQL::dump(oss, "DOCUMENT_POOL", "body", Document::table, where, - sid, eid, desc); + return PoolSQL::dump(oss, "DOCUMENT_POOL", "body", one_db::doc_table, + where, sid, eid, desc); }; /** diff --git a/src/monitor/include/Driver.h b/include/Driver.h similarity index 91% rename from src/monitor/include/Driver.h rename to include/Driver.h index 9d07222336e..fc3254fb23b 100644 --- a/src/monitor/include/Driver.h +++ b/include/Driver.h @@ -32,10 +32,12 @@ * This class wraps the execution of a driver and setups a pipe as communication * channel */ -template +template class Driver { public: + using message_t = MSG; + /** * A call to the start() method is needed to start the driver * @param c the command to execute the driver @@ -88,15 +90,15 @@ class Driver */ void write(const std::string& str) const { - ::write(to_drv, str.c_str(), str.size()); + (void) ::write(to_drv, str.c_str(), str.size()); }; /** * Send a message to the driver */ - void write(const Message& msg) const + void write(const MSG& msg) const { - msg.write_to(to_drv, false); + msg.write_to(to_drv); }; /** @@ -105,11 +107,21 @@ class Driver * @param t message type * @param a callback function */ - void register_action(E t, std::function>)> a) + void register_action(typename MSG::msg_enum t, + std::function)> a) { streamer.register_action(t, a); }; +protected: + Driver() = default; + + void cmd_(const std::string& c) { cmd = c; } + + void arg_(const std::string& a) { arg = a; } + + void concurency_(int c) { concurrency = c; } + private: /** * Communication pipe file descriptor (daemon <- driver) @@ -138,7 +150,7 @@ class Driver /** * Class to read lines from the stream */ - StreamManager streamer; + StreamManager streamer; std::thread stream_thr; @@ -174,8 +186,9 @@ class Driver /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -template -void Driver::stop_driver(int secs) +template +void Driver + ::stop_driver(int secs) { if ( pid == -1 ) { @@ -213,8 +226,9 @@ void Driver::stop_driver(int secs) /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -template -int Driver::start_driver(std::string& error) +template +int Driver + ::start_driver(std::string& error) { // Open communication pipes int to_drv_pipe[2]; @@ -319,8 +333,9 @@ int Driver::start_driver(std::string& error) /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -template -void Driver::start_listener() +template +void Driver + ::start_listener() { streamer.fd(from_drv); diff --git a/include/DriverManager.h b/include/DriverManager.h new file mode 100644 index 00000000000..52eba1b1f4d --- /dev/null +++ b/include/DriverManager.h @@ -0,0 +1,380 @@ +/* -------------------------------------------------------------------------- */ +/* Copyright 2002-2020, OpenNebula Project, OpenNebula Systems */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); you may */ +/* not use this file except in compliance with the License. You may obtain */ +/* a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */ +/* See the License for the specific language governing permissions and */ +/* limitations under the License. */ +/* -------------------------------------------------------------------------- */ + +#ifndef DRIVER_MANAGER_H_ +#define DRIVER_MANAGER_H_ + +#include "Driver.h" +#include "Attribute.h" +#include "NebulaLog.h" +#include "SyncRequest.h" +#include + +template +class DriverManager +{ +public: + explicit DriverManager(const std::string& mad_location) + : mad_location(mad_location) + { + } + + virtual ~DriverManager() = default; + + int load_driver(const VectorAttribute* mad_config); + + int load_drivers(const std::vector& mads_config); + + D * get_driver(const std::string& name) const; + + /** + * Register an action for a given message type. The action is registered + * for all installed drivers. Must be called after load_drivers method. + */ + void register_action(typename D::message_t::msg_enum t, + std::function)> a); + + /** + * Start all drivers + */ + int start(std::string& error); + + /** + * Stop all drivers + * @param secs to wait for each driver before killing it + */ + void stop(int secs); + +protected: + int add(const std::string& name, std::unique_ptr driver); + + /* SyncReqeust methods implementation */ + + /** + * This function can be periodically executed to check time_outs on + * request. It will fail requests with an expired timeout and will notify + * the clients. + */ + void check_time_outs_action(); + + /** + * Add a new request to the Request map + * @param ar pointer to the request + * @return the id for the request + */ + void add_request(SyncRequest *ar); + + /** + * Gets request from the Request map + * @param id for the request + * @return pointer to the Request + */ + SyncRequest * get_request(int id); + + /** + * Notify the result of an auth request + */ + void notify_request(int id, bool result, const std::string& message); + + static Log::MessageType log_type(char type); + +private: + std::map> drivers; + + std::string mad_location; + + /** + * List of pending requests + */ + std::map sync_requests; + + std::mutex _mutex; +}; + +/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ + +template +int DriverManager::load_driver(const VectorAttribute* mad_config) +{ + auto name = mad_config->vector_value("NAME"); + auto exec = mad_config->vector_value("EXECUTABLE"); + auto args = mad_config->vector_value("ARGUMENTS"); + int threads; + + mad_config->vector_value("THREADS", threads, 0); + + NebulaLog::info("DrM", "Loading driver: " + name); + + if (exec.empty()) + { + NebulaLog::error("DrM", "\tEmpty executable for driver: " + name); + return -1; + } + + if (exec[0] != '/') //Look in ONE_LOCATION/lib/mads or in "/usr/lib/one/mads" + { + exec = mad_location + exec; + } + + if (access(exec.c_str(), F_OK) != 0) + { + NebulaLog::error("DrM", "File not exists: " + exec); + return -1; + } + + auto rc = drivers.insert(std::make_pair(name, + std::unique_ptr(new D(exec, args, threads)))); + + if (rc.second) + { + NebulaLog::info("DrM", "\tDriver loaded: " + name); + } + else + { + NebulaLog::error("DrM", "\tDriver already exists: " + name); + return -1; + } + + return 0; +} + +/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ + +template +int DriverManager::load_drivers(const std::vector& mads_config) +{ + NebulaLog::info("DrM", "Loading drivers."); + + int rc = 0; + + for (const auto& vattr : mads_config) + { + rc += load_driver(vattr); + } + + return rc; +} + +/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ + +template +D * DriverManager::get_driver(const std::string& name) const +{ + auto driver = drivers.find(name); + + if (driver == drivers.end()) + { + return nullptr; + } + + return driver->second.get(); +} + +/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ + +template +void DriverManager::register_action(typename D::message_t::msg_enum t, + std::function)> a) +{ + for (auto& driver : drivers) + { + driver.second->register_action(t, a); + } +} + +/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ + +template +int DriverManager::start(std::string& error) +{ + for (auto& driver : drivers) + { + auto rc = driver.second->start(error); + if (rc != 0) + { + NebulaLog::error("DrM", "Unable to start driver '" + driver.first + + "': " + error); + return rc; + } + } + return 0; +} + +/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ + +template +void DriverManager::stop(int secs) +{ + std::vector threads; + + for (auto& driver : drivers) + { + int _secs = secs; + threads.push_back(std::thread([_secs, &driver] () { + driver.second->stop(_secs); + })); + } + + for (auto& thr : threads) + { + thr.join(); + } +} + +/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ +template +int DriverManager::add(const std::string& name, std::unique_ptr driver) +{ + auto rc = drivers.insert(std::make_pair(name, std::move(driver))); + + if (!rc.second) + { + // Driver already exists + return -1; + } + + return 0; +} + +/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ + +template +void DriverManager::check_time_outs_action() +{ + time_t the_time = time(0); + + std::lock_guard lock(_mutex); + + auto it = sync_requests.begin(); + + while (it != sync_requests.end()) + { + if ((it->second->time_out != 0) && (the_time > it->second->time_out)) + { + SyncRequest * ar = it->second; + sync_requests.erase(it++); + + ar->result = false; + ar->timeout = true; + ar->message = "Request timeout"; + + ar->notify(); + } + else + { + ++it; + } + } +} + +/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ + +template +void DriverManager::add_request(SyncRequest *ar) +{ + static int request_id = 0; + + std::lock_guard lock(_mutex); + + ar->id = request_id++; + + sync_requests.insert(sync_requests.end(),std::make_pair(ar->id,ar)); +} + +/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ + +template +SyncRequest * DriverManager::get_request(int id) +{ + SyncRequest * ar = nullptr; + + std::lock_guard lock(_mutex); + + auto it = sync_requests.find(id); + + if (it != sync_requests.end()) + { + ar = it->second; + + sync_requests.erase(it); + } + + return ar; +} + +/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ + +template +void DriverManager::notify_request(int id, bool result, const std::string& message) +{ + SyncRequest * ar = get_request(id); + + if (ar == 0) + { + return; + } + + ar->result = result; + + if (message != "-") + { + if (!ar->message.empty()) + { + ar->message.append("; "); + } + + ar->message.append(message); + } + + ar->notify(); +} + +/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ + +template +Log::MessageType DriverManager::log_type(char type) +{ + auto log_type = Log::INFO; + + switch (type) + { + case 'E': + log_type = Log::ERROR; + break; + case 'W': + log_type = Log::WARNING; + break; + case 'D': + log_type = Log::DEBUG; + break; + } + + return log_type; +} + +#endif // DRIVER_MANAGER_H_ diff --git a/src/monitor/include/EnumString.h b/include/EnumString.h similarity index 96% rename from src/monitor/include/EnumString.h rename to include/EnumString.h index 43c48a08aa6..8cc3a393429 100644 --- a/src/monitor/include/EnumString.h +++ b/include/EnumString.h @@ -1,5 +1,5 @@ /* -------------------------------------------------------------------------- */ -/* Copyright 2002-2020, OpenNebula Project, OpenNebula Systems */ +/* Copyright 2002-2019, OpenNebula Project, OpenNebula Systems */ /* */ /* Licensed under the Apache License, Version 2.0 (the "License"); you may */ /* not use this file except in compliance with the License. You may obtain */ @@ -21,6 +21,7 @@ #include #include #include +#include /** * Converts string to enum and back @@ -42,8 +43,10 @@ class EString if (check_sanity && (int)T::ENUM_MAX != enum_map.size()) { std::ostringstream oss; + oss << " EString: Not all strings defined for enum " << typeid(T).name(); + throw std::runtime_error(oss.str()); } } diff --git a/include/ExtendedAttribute.h b/include/ExtendedAttribute.h index d4cc9a3d6d4..590fe420cac 100644 --- a/include/ExtendedAttribute.h +++ b/include/ExtendedAttribute.h @@ -48,7 +48,7 @@ class ExtendedAttribute: public Attribute return va->vector_value(name, value); } - string vector_value(const std::string& name) const + std::string vector_value(const std::string& name) const { return va->vector_value(name); } @@ -87,7 +87,7 @@ class ExtendedAttribute: public Attribute /* ---------------------------------------------------------------------- */ /* Attribute Interface */ /* ---------------------------------------------------------------------- */ - string * marshall(const char * _sep = 0) const + std::string * marshall(const char * _sep = 0) const { return va->marshall(_sep); }; @@ -234,7 +234,7 @@ class ExtendedAttributeSet */ void add_attribute(ExtendedAttribute * a, int id) { - a_set.insert(make_pair(id, a)); + a_set.insert(std::make_pair(id, a)); } /** diff --git a/include/FedReplicaManager.h b/include/FedReplicaManager.h index cca84920edb..6ddb78228b0 100644 --- a/include/FedReplicaManager.h +++ b/include/FedReplicaManager.h @@ -20,16 +20,15 @@ #include #include #include +#include #include "ReplicaManager.h" -#include "ActionManager.h" - -extern "C" void * frm_loop(void *arg); class LogDB; class LogDBRecord; -class FedReplicaManager : public ReplicaManager, ActionListener + +class FedReplicaManager : public ReplicaManager { public: @@ -83,19 +82,6 @@ class FedReplicaManager : public ReplicaManager, ActionListener int xmlrpc_replicate_log(int zone_id, bool& success, uint64_t& last, std::string& err); - /** - * Finalizes the Federation Replica Manager - */ - void finalize() - { - am.finalize(); - } - - /** - * Starts the Federation Replica Manager - */ - int start(); - /** * Start the replication threads, and updates the server list of the zone */ @@ -130,31 +116,16 @@ class FedReplicaManager : public ReplicaManager, ActionListener */ void delete_zone(int zone_id); - /** - * @return the id of fed. replica thread - */ - pthread_t get_thread_id() const - { - return frm_thread; - }; - private: - friend void * frm_loop(void *arg); - /** * Creates federation replica thread objects */ ReplicaThread * thread_factory(int follower_id); - /** - * Thread id of the main event loop - */ - pthread_t frm_thread; - /** * Controls access to the zone list and server data */ - pthread_mutex_t mutex; + std::mutex fed_mutex; // ------------------------------------------------------------------------- // Synchronization variables @@ -185,16 +156,6 @@ class FedReplicaManager : public ReplicaManager, ActionListener LogDB * logdb; - // ------------------------------------------------------------------------- - // Action Listener interface - // ------------------------------------------------------------------------- - ActionManager am; - - /** - * Termination function - */ - void finalize_action(const ActionRequest& ar); - /** * Get the nerxt record to replicate in a zone * @param zone_id of the zone diff --git a/include/Group.h b/include/Group.h index ecd98080197..f46c2615012 100644 --- a/include/Group.h +++ b/include/Group.h @@ -21,10 +21,8 @@ #include "GroupTemplate.h" #include "ObjectCollection.h" #include "QuotasSQL.h" -#include "Template.h" #include "VMActions.h" -using namespace std; /** * The Group class. @@ -38,7 +36,7 @@ class Group : public PoolObjectSQL * @param xml the resulting XML string * @return a reference to the generated string */ - string& to_xml(string& xml) const override; + std::string& to_xml(std::string& xml) const override; /** * Function to print the Group object into a string in @@ -46,7 +44,7 @@ class Group : public PoolObjectSQL * @param xml the resulting XML string * @return a reference to the generated string */ - string& to_xml_extended(string& xml) const; + std::string& to_xml_extended(std::string& xml) const; /** * Rebuilds the object from an xml formatted string @@ -54,7 +52,7 @@ class Group : public PoolObjectSQL * * @return 0 on success, -1 otherwise */ - int from_xml(const string &xml_str) override; + int from_xml(const std::string &xml_str) override; /** * Adds this user's ID to the set. @@ -75,7 +73,7 @@ class Group : public PoolObjectSQL { if (admins.contains(id)) { - string error; + std::string error; del_admin(id, error); } @@ -91,7 +89,7 @@ class Group : public PoolObjectSQL * * @return 0 on success */ - int add_admin(int user_id, string& error_msg); + int add_admin(int user_id, std::string& error_msg); /** * Deletes a User from the admin set. ACL Rules are updated only for this user. @@ -101,7 +99,7 @@ class Group : public PoolObjectSQL * * @return 0 on success */ - int del_admin(int user_id, string& error_msg); + int del_admin(int user_id, std::string& error_msg); /** * Retrun true if User is an admin member of the group @@ -146,8 +144,10 @@ class Group : public PoolObjectSQL * GROUP_ADMIN_VIEWS = "cloud,groupadmin", * VIEWS = "cloud" ] */ - void sunstone_views(const string& user_default, const string& user_views, - const string& admin_default, const string& admin_views); + void sunstone_views(const std::string& user_default, + const std::string& user_views, + const std::string& admin_default, + const std::string& admin_views); /** * @return the operation level (admin, manage or use) associated to the @@ -163,7 +163,7 @@ class Group : public PoolObjectSQL * @param error string describing the error if any * @return 0 on success */ - int post_update_template(string& error) override; + int post_update_template(std::string& error) override; private: @@ -177,17 +177,7 @@ class Group : public PoolObjectSQL // Constructor // ************************************************************************* - Group(int id, const string& name): - PoolObjectSQL(id,GROUP,name,-1,-1,"","",table), - quota(), - users("USERS"), - admins("ADMINS") - { - // Allow users in this group to see it - group_u = 1; - - obj_template = new GroupTemplate; - } + Group(int id, const std::string& name); virtual ~Group() = default; @@ -217,12 +207,6 @@ class Group : public PoolObjectSQL // DataBase implementation (Private) // ************************************************************************* - static const char * db_names; - - static const char * db_bootstrap; - - static const char * table; - /** * Execute an INSERT or REPLACE Sql query. * @param db The SQL DB @@ -230,18 +214,13 @@ class Group : public PoolObjectSQL * @param error_str Returns the error reason, if any * @return 0 one success */ - int insert_replace(SqlDB *db, bool replace, string& error_str); + int insert_replace(SqlDB *db, bool replace, std::string& error_str); /** * Bootstraps the database table(s) associated to the Group * @return 0 on success */ - static int bootstrap(SqlDB * db) - { - ostringstream oss_group(Group::db_bootstrap); - - return db->exec_local_wr(oss_group); - } + static int bootstrap(SqlDB * db); /** * Reads the Group (identified with its OID) from the database. @@ -258,7 +237,7 @@ class Group : public PoolObjectSQL * * @return 0 on success */ - int select(SqlDB * db, const string& name, int uid) override; + int select(SqlDB * db, const std::string& name, int uid) override; /** * Reads the Group quotas from the database. @@ -279,7 +258,7 @@ class Group : public PoolObjectSQL * @param db pointer to the db * @return 0 on success */ - int insert(SqlDB *db, string& error_str) override; + int insert(SqlDB *db, std::string& error_str) override; /** * Writes/updates the Group's data fields in the database. This method does @@ -289,7 +268,7 @@ class Group : public PoolObjectSQL */ int update(SqlDB *db) override { - string error_str; + std::string error_str; return insert_replace(db, true, error_str); } @@ -300,7 +279,7 @@ class Group : public PoolObjectSQL * @param extended If true, default quotas are included * @return a reference to the generated string */ - string& to_xml_extended(string& xml, bool extended) const; + std::string& to_xml_extended(std::string& xml, bool extended) const; }; #endif /*GROUP_H_*/ diff --git a/include/GroupPool.h b/include/GroupPool.h index f2811896222..74b237bcca9 100644 --- a/include/GroupPool.h +++ b/include/GroupPool.h @@ -20,15 +20,13 @@ #include "Group.h" #include "PoolSQL.h" -using namespace std; - class GroupPool : public PoolSQL { public: GroupPool(SqlDB * db, bool is_federation_slave, - vector& restricted_attrs); + std::vector& restricted_attrs); ~GroupPool() = default; @@ -39,7 +37,7 @@ class GroupPool : public PoolSQL /** * Default name for the oneadmin group */ - static const string ONEADMIN_NAME; + static const std::string ONEADMIN_NAME; /** * Identifier for the oneadmin group @@ -49,7 +47,7 @@ class GroupPool : public PoolSQL /** * Default name for the users group */ - static const string USERS_NAME; + static const std::string USERS_NAME; /** * Identifier for the user group @@ -69,9 +67,9 @@ class GroupPool : public PoolSQL * * @return the oid assigned to the object, -1 in case of failure */ - int allocate(string name, + int allocate(std::string name, int * oid, - string& error_str); + std::string& error_str); /** * Function to get a group from the pool, if the object is not in memory @@ -102,9 +100,9 @@ class GroupPool : public PoolSQL * @param id of the group * @return name of the group */ - const string get_name(int gid) + const std::string get_name(int gid) { - static string error_str = ""; + static std::string error_str = ""; Group * group = get_ro(gid); @@ -113,7 +111,7 @@ class GroupPool : public PoolSQL return error_str; } - const string gname = group->get_name(); + const std::string gname = group->get_name(); group->unlock(); @@ -144,7 +142,7 @@ class GroupPool : public PoolSQL * -2 object is a system group (ID < 100) * -3 Group's User IDs set is not empty */ - int drop(PoolObjectSQL * objsql, string& error_msg); + int drop(PoolObjectSQL * objsql, std::string& error_msg); /** * Bootstraps the database table(s) associated to the Group pool @@ -166,7 +164,8 @@ class GroupPool : public PoolSQL * * @return 0 on success */ - int dump(string& oss, const string& where, int sid, int eid, bool desc); + int dump(std::string& oss, const std::string& where, + int sid, int eid, bool desc); private: diff --git a/include/GroupTemplate.h b/include/GroupTemplate.h index 158cce467ec..58968507888 100644 --- a/include/GroupTemplate.h +++ b/include/GroupTemplate.h @@ -32,17 +32,17 @@ class GroupTemplate : public Template // ------------------------------------------------------------------------- // Restricted attributes interface implementation // ------------------------------------------------------------------------- - bool check_restricted(string& rs_attr, const Template* base) override + bool check_restricted(std::string& rs_attr, const Template* base) override { return Template::check_restricted(rs_attr, base, restricted); } - bool check_restricted(string& rs_attr) override + bool check_restricted(std::string& rs_attr) override { return Template::check_restricted(rs_attr, restricted); } - static void parse_restricted(vector& ra) + static void parse_restricted(std::vector& ra) { Template::parse_restricted(ra, restricted); } diff --git a/include/History.h b/include/History.h index e224399b530..d9c9dfeb8cb 100644 --- a/include/History.h +++ b/include/History.h @@ -21,7 +21,6 @@ #include "ObjectXML.h" #include "VMActions.h" -using namespace std; /** * The History class, it represents an execution record of a Virtual Machine. @@ -36,19 +35,19 @@ class History:public ObjectSQL, public ObjectXML int oid, int seq, int hid, - const string& hostname, + const std::string& hostname, int cid, - const string& vmm, - const string& tmm, + const std::string& vmm, + const std::string& tmm, int ds_id, - const string& vm_info); + const std::string& vm_info); ~History(){}; /** * Function to write the History Record in an output stream */ - friend ostream& operator<<(ostream& os, const History& history); + friend std::ostream& operator<<(std::ostream& os, const History& history); /** * Function to print the History object into a string in @@ -56,7 +55,7 @@ class History:public ObjectSQL, public ObjectXML * @param xml the resulting XML string * @return a reference to the generated string */ - string& to_xml(string& xml) const; + std::string& to_xml(std::string& xml) const; /** * Function to print the History object into a string in @@ -64,78 +63,69 @@ class History:public ObjectSQL, public ObjectXML * @param xml the resulting XML string * @return a reference to the generated string */ - string& to_xml_short(string& xml) const; + std::string& to_xml_short(std::string& xml) const; private: friend class VirtualMachine; friend class VirtualMachinePool; - // ---------------------------------------- - // DataBase implementation variables - // ---------------------------------------- - static const char * table; - - static const char * db_names; - - static const char * db_bootstrap; - void non_persistent_data(); // ---------------------------------------- // History fields // ---------------------------------------- - int oid; - int seq; + int oid; + int seq; - int uid; - int gid; - int req_id; + int uid; + int gid; + int req_id; - int hid; - string hostname; - int cid; + int hid; + std::string hostname; + int cid; - string vmm_mad_name; - string tm_mad_name; + std::string vmm_mad_name; + std::string tm_mad_name; - int ds_id; + int ds_id; - time_t stime; - time_t etime; + time_t stime; + time_t etime; - time_t prolog_stime; - time_t prolog_etime; + time_t prolog_stime; + time_t prolog_etime; - time_t running_stime; - time_t running_etime; + time_t running_stime; + time_t running_etime; - time_t epilog_stime; - time_t epilog_etime; + time_t epilog_stime; + time_t epilog_etime; VMActions::Action action; - string vm_info; + std::string vm_info; // ------------------------------------------------------------------------- // Non-persistent history fields // ------------------------------------------------------------------------- // Local paths - string transfer_file; - string deployment_file; - string context_file; - string token_file; + std::string transfer_file; + std::string deployment_file; + std::string context_file; + std::string token_file; // Remote paths - string checkpoint_file; - string rdeployment_file; - string system_dir; + std::string checkpoint_file; + std::string rdeployment_file; + std::string system_dir; /** * Writes the history record in the DB * @param db pointer to the database. * @return 0 on success. */ - int insert(SqlDB * db, string& error_str) + int insert(SqlDB * db, std::string& error_str) { error_str.clear(); @@ -189,7 +179,7 @@ class History:public ObjectSQL, public ObjectXML * @param xml the resulting XML string * @return a reference to the generated string */ - string& to_db_xml(string& xml) const; + std::string& to_db_xml(std::string& xml) const; /** * Function to print the History object into a string in @@ -198,11 +188,11 @@ class History:public ObjectSQL, public ObjectXML * @param database If it is true, the TEMPLATE element will be included * @return a reference to the generated string */ - string& to_xml(string& xml, bool database) const; + std::string& to_xml(std::string& xml, bool database) const; - string& to_json(string& json) const; + std::string& to_json(std::string& json) const; - string& to_token(string& text) const; + std::string& to_token(std::string& text) const; /** * Rebuilds the object from an xml node @@ -223,7 +213,7 @@ class History:public ObjectSQL, public ObjectXML * * @return 0 on success, -1 otherwise */ - int from_xml(const string &xml_str) + int from_xml(const std::string &xml_str) { ObjectXML::update_from_str(xml_str); diff --git a/include/Hook.h b/include/Hook.h index b2f68e1f39f..fb844348312 100644 --- a/include/Hook.h +++ b/include/Hook.h @@ -39,7 +39,7 @@ class Hook : public PoolObjectSQL UNDEFINED = 0x04 }; - static string hook_type_to_str(HookType ht) + static std::string hook_type_to_str(HookType ht) { switch(ht) { @@ -93,18 +93,7 @@ class Hook : public PoolObjectSQL // Constructor/Destructor // ************************************************************************* - Hook(Template * tmpl): PoolObjectSQL(-1, HOOK, "", -1, -1, "", "", table), - type(HookType::UNDEFINED), cmd(""), remote(false), _hook(0) - { - if (tmpl != 0) - { - obj_template = tmpl; - } - else - { - obj_template = new Template(); - } - }; + Hook(Template * tmpl); ~Hook(); @@ -148,7 +137,7 @@ class Hook : public PoolObjectSQL /** * The command to be executed */ - string cmd; + std::string cmd; /** * True if the command is to be executed remotely @@ -164,12 +153,6 @@ class Hook : public PoolObjectSQL // Database implementation // ************************************************************************* - static const char * db_names; - - static const char * db_bootstrap; - - static const char * table; - /** * Construct the XML representation of the hook * @param xml the resulting XML string @@ -183,12 +166,7 @@ class Hook : public PoolObjectSQL * Bootstraps the database table(s) associated to the Host * @return 0 on success */ - static int bootstrap(SqlDB * db) - { - std::ostringstream oss_hook(Hook::db_bootstrap); - - return db->exec_local_wr(oss_hook); - }; + static int bootstrap(SqlDB * db); /** * Writes/updates the Hosts data fields in the database. @@ -197,7 +175,7 @@ class Hook : public PoolObjectSQL */ int update(SqlDB *db) override { - string error_str; + std::string error_str; return insert_replace(db, true, error_str); }; @@ -206,7 +184,7 @@ class Hook : public PoolObjectSQL * @param db pointer to the db * @return 0 on success */ - int insert(SqlDB *db, string& error_str) override; + int insert(SqlDB *db, std::string& error_str) override; /** * Execute an INSERT or REPLACE Sql query. @@ -215,7 +193,7 @@ class Hook : public PoolObjectSQL * @param error_str Returns the error reason, if any * @return 0 one success */ - int insert_replace(SqlDB *db, bool replace, string& error_str); + int insert_replace(SqlDB *db, bool replace, std::string& error_str); /** * Drops object from the database diff --git a/include/HookAPI.h b/include/HookAPI.h index 3e773bc3366..aa668ce588e 100644 --- a/include/HookAPI.h +++ b/include/HookAPI.h @@ -32,7 +32,7 @@ class HookAPI : public HookImplementation /** * Function to build a XML message for an API hook */ - static std::string * format_message(std::string method, ParamList& paramList, + static std::string format_message(std::string method, ParamList& paramList, const RequestAttributes& att); /** diff --git a/include/HookLog.h b/include/HookLog.h index c4b55214b6b..906ae24e484 100644 --- a/include/HookLog.h +++ b/include/HookLog.h @@ -19,16 +19,10 @@ #include -#include "ActionManager.h" #include "Attribute.h" class SqlDB; -/** - * Thread loop (timer action to purge the log) - */ -extern "C" void * hlog_action_loop(void *arg); - /** * This class represents the execution log of Hooks. It writes/reads execution * records in the DB. @@ -106,11 +100,6 @@ class HookLog // ---------------------------------------- // DataBase implementation variables // ---------------------------------------- - static const char * table; - - static const char * db_names; - - static const char * db_bootstrap; /** * Pointer to the database. diff --git a/include/HookManager.h b/include/HookManager.h index 852739ed1bd..c656f65d55e 100644 --- a/include/HookManager.h +++ b/include/HookManager.h @@ -17,65 +17,27 @@ #ifndef HOOK_MANAGER_H_ #define HOOK_MANAGER_H_ -#include "MadManager.h" -#include "ActionManager.h" -#include "HookManagerDriver.h" +#include "ProtocolMessages.h" +#include "DriverManager.h" +#include "Listener.h" #include /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -class HMAction : public ActionRequest +class HookManager : + public DriverManager>, + public Listener { public: - enum Actions - { - SEND_EVENT, /**< Send event to hook manager driver*/ - RETRY /**< Send RETRY action to hook manager driver*/ - }; - - HMAction(Actions a, const std::string& m):ActionRequest(ActionRequest::USER), - _action(a), _message(m){}; - - HMAction(const HMAction& o):ActionRequest(o._type), _action(o._action), - _message(o._message){}; - - Actions action() const - { - return _action; - } - - const std::string& message() const - { - return _message; - } - ActionRequest * clone() const + HookManager(const std::string& mad_location) + : DriverManager(mad_location) + , Listener("Hook Manager") { - return new HMAction(*this); } -private: - Actions _action; - - std::string _message; -}; - -/* -------------------------------------------------------------------------- */ -/* -------------------------------------------------------------------------- */ - -extern "C" void * hm_action_loop(void *arg); - -class HookManager : public MadManager, public ActionListener -{ -public: - - HookManager(std::vector& _mads):MadManager(_mads) - { - am.addListener(this); - }; - virtual ~HookManager() = default; /** @@ -86,42 +48,11 @@ class HookManager : public MadManager, public ActionListener */ int start(); - /** - * Gets the HookManager thread identification. - * @return pthread_t for the manager thread (that in the action loop). - */ - pthread_t get_thread_id() const - { - return hm_thread; - }; - /** * Loads Hook Manager Mads defined in configuration file - * @param uid of the user executing the driver. When uid is 0 the nebula - * identity will be used. Otherwise the Mad will be loaded through the - * sudo application. + * @param _mads configuration of drivers */ - int load_mads(int uid=0); - - /** - * Triggers specific actions to the Hook Manager. - * @param action the HM action - * @param message to send to the driver - */ - void trigger(HMAction::Actions action, const std::string& message) - { - HMAction hm_ar(action, message); - - am.trigger(hm_ar); - } - - /** - * Terminates the hook manager thread listener - */ - void finalize() - { - am.finalize(); - }; + int load_drivers(const std::vector& _mads); /** * Returns a pointer to a Information Manager MAD. The driver is @@ -130,62 +61,65 @@ class HookManager : public MadManager, public ActionListener * @return the Hook driver owned by uid 0, with attribute "NAME" equal to * name or 0 in not found */ - const HookManagerDriver * get() + const Driver * get() const { - std::string name("NAME"); + return DriverManager::get_driver(hook_driver_name); + } - return static_cast - (MadManager::get(0, name,hook_driver_name)); - }; + static std::string format_message(const std::string& args, + const std::string& remote_host, + int hook_id); - static std::string * format_message(const string& args, const string&remote_host, - int hook_id); + /** + * Generic name for the Hook driver + */ + static const char * hook_driver_name; -private: /** - * Function to execute the Manager action loop method within a new pthread - * (requires C linkage) + * Send event message to the driver + * @param message to pass to the driver */ - friend void * hm_action_loop(void *arg); + void trigger_send_event(const std::string& message); /** - * Generic name for the Hook driver + * Send retry message to the driver + * @param message to pass to the driver */ - static const char * hook_driver_name; + void trigger_retry(const std::string& message); +private: + // ------------------------------------------------------------------------- + // Protocol implementation, procesing messages from driver + // ------------------------------------------------------------------------- /** - * Thread id for the HookManager + * */ - pthread_t hm_thread; + static void _undefined(std::unique_ptr msg); /** - * Action engine for the Manager + * */ - ActionManager am; + void _execute(std::unique_ptr msg); /** - * Send event message to the driver - * @param message to pass to the driver + * */ - void send_event_action(const std::string& message); + void _retry(std::unique_ptr msg); /** - * Send retry message to the driver - * @param message to pass to the driver + * */ - void retry_action(const std::string& message); + static void _log(std::unique_ptr msg); // ------------------------------------------------------------------------- // Action Listener interface // ------------------------------------------------------------------------- - void finalize_action(const ActionRequest& ar) - { - NebulaLog::log("HKM",Log::INFO,"Stopping Hook Manager..."); + static const int drivers_timeout = 10; - MadManager::stop(); + void finalize_action() override + { + DriverManager::stop(drivers_timeout); }; - - void user_action(const ActionRequest& ar); }; #endif /*HOOK_MANAGER_H*/ diff --git a/include/HookManagerDriver.h b/include/HookManagerDriver.h deleted file mode 100644 index 9646075d52e..00000000000 --- a/include/HookManagerDriver.h +++ /dev/null @@ -1,101 +0,0 @@ -/* -------------------------------------------------------------------------- */ -/* Copyright 2002-2020, OpenNebula Project, OpenNebula Systems */ -/* */ -/* Licensed under the Apache License, Version 2.0 (the "License"); you may */ -/* not use this file except in compliance with the License. You may obtain */ -/* a copy of the License at */ -/* */ -/* http://www.apache.org/licenses/LICENSE-2.0 */ -/* */ -/* Unless required by applicable law or agreed to in writing, software */ -/* distributed under the License is distributed on an "AS IS" BASIS, */ -/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */ -/* See the License for the specific language governing permissions and */ -/* limitations under the License. */ -/* -------------------------------------------------------------------------- */ - -#ifndef HOOK_MANAGER_DRIVER_H_ -#define HOOK_MANAGER_DRIVER_H_ - -#include -#include -#include - -#include "Mad.h" -#include "VirtualMachinePool.h" -#include "HookLog.h" - -using namespace std; - -/** - * HookManagerDriver provides a base class to implement Hook (Execution) - * Drivers. This class implements the protocol and recover functions - * from the Mad interface. This class may be used to further specialize - * the Execution driver. - */ -class HookManagerDriver : public Mad -{ -public: - - HookManagerDriver( - int userid, - const map& attrs, - bool sudo) - : Mad(userid,attrs,sudo) {}; - - virtual ~HookManagerDriver(){}; - - /** - * Implements the Hook driver protocol. - * @param message the string read from the driver - */ - void protocol(const string& message) const; - - /** - * TODO: What do we need here? just poll the Hosts to recover.. - */ - void recover(); - - /** `; } @@ -72,7 +73,7 @@ const includeMAPSJSbyHTML = (path = '') => { const includeJSbyHTML = (path = '') => { let scripts = ''; - fs.readdirSync(path).map(file => { + fs.readdirSync(path).forEach(file => { if (file.match(/\w*\.js+$\b/gi)) { scripts += ``; } @@ -82,7 +83,7 @@ const includeJSbyHTML = (path = '') => { const includeCSSbyHTML = (path = '') => { let scripts = ''; - fs.readdirSync(path).map(file => { + fs.readdirSync(path).forEach(file => { if (file.match(/\w*\.css+$\b/gi)) { scripts += ``; } @@ -105,7 +106,7 @@ const validateRouteFunction = (routeFunction, httpMethod = '') => { }; const checkRouteFunction = route => { - let rtn; + let rtn = false; const { private: functionPrivate, public: functionPublic } = functionRoutes; const functions = { ...functionPrivate, ...functionPublic }; if (route in functions) { @@ -125,11 +126,14 @@ module.exports = { includeJSbyHTML, includeCSSbyHTML, messageTerminal, + addPrintf, getRouteForOpennebulaCommand, getMethodForOpennebulaCommand, commandXML, checkRouteFunction, checkOpennebulaCommand, validateRouteFunction, - responseOpennebula + responseOpennebula, + getConfig, + httpResponse }; diff --git a/src/fireedge/src/utils/jwt-functions.js b/src/fireedge/src/utils/jwt.js similarity index 95% rename from src/fireedge/src/utils/jwt-functions.js rename to src/fireedge/src/utils/jwt.js index 00cd103140b..5001122b79a 100644 --- a/src/fireedge/src/utils/jwt-functions.js +++ b/src/fireedge/src/utils/jwt.js @@ -15,8 +15,8 @@ const jwt = require('jwt-simple'); const moment = require('moment'); -const { messageTerminal } = require('../utils/general-functions'); -const { getConfig } = require('./yml-connect'); +const { messageTerminal } = require('./general'); +const { getConfig } = require('./yml'); // user config const appConfig = getConfig(); diff --git a/src/fireedge/src/utils/opennebula-functions.js b/src/fireedge/src/utils/opennebula.js similarity index 88% rename from src/fireedge/src/utils/opennebula-functions.js rename to src/fireedge/src/utils/opennebula.js index 8c54fee25a1..a0e0dab1893 100644 --- a/src/fireedge/src/utils/opennebula-functions.js +++ b/src/fireedge/src/utils/opennebula.js @@ -19,16 +19,17 @@ const rpc = require('xmlrpc'); const xml2js = require('xml2js'); const { Map } = require('immutable'); const { sprintf } = require('sprintf-js'); -const httpCodes = require('../config/http-codes'); -const commandsParams = require('../config/commands-params'); +const speakeasy = require('speakeasy'); +const httpCodes = require('./constants/http-codes'); +const commandsParams = require('./constants/commands'); const { from, defaultNamespace, defaultMessageProblemOpennebula -} = require('../config/defaults'); +} = require('./constants/defaults'); // user config -const { getConfig } = require('./yml-connect'); +const { getConfig } = require('./yml'); const appConfig = getConfig(); const namespace = appConfig.namespace || defaultNamespace; @@ -104,7 +105,7 @@ const getMethodForOpennebulaCommand = () => { const rtn = []; if (commandsParams) { const commands = Object.keys(commandsParams); - commands.map(command => { + commands.forEach(command => { if (command && command.length) { const commandString = command.split('.'); if (!rtn.includes(commandString[1])) { @@ -135,11 +136,11 @@ const getAllowedQueryParams = () => { const allowedQuerys = Object.keys(commandsParams); if (from && from.query) { const { query } = from; - allowedQuerys.map(allowedQuery => { + allowedQuerys.forEach(allowedQuery => { const command = commandsParams[allowedQuery]; if (command && command.params) { const internalParams = Object.keys(command.params); - internalParams.map(internalParam => { + internalParams.forEach(internalParam => { if ( command.params[internalParam] && command.params[internalParam].from && @@ -156,14 +157,14 @@ const getAllowedQueryParams = () => { }; const getRouteForOpennebulaCommand = () => { - const rtn = []; + const rtn = {}; if (commandsParams) { const commands = Object.keys(commandsParams); - commands.map(command => { + commands.forEach(command => { if (command && command.length) { const commandString = command.split('.'); - if (!rtn.includes(commandString[0])) { - rtn.push(commandString[0]); + if (!(commandString[0] in rtn)) { + rtn[commandString[0]] = false; // false is a opennebula command } } }); @@ -175,7 +176,7 @@ const checkPositionInDataSource = dataSource => { let rtn = true; if (dataSource && from) { const fromKeys = Object.values(from); - fromKeys.map(key => { + fromKeys.forEach(key => { if (!(key && dataSource && key in dataSource)) { rtn = false; } @@ -204,7 +205,7 @@ const checkOpennebulaCommand = ( if (dataSource && checkPositionInDataSource(dataSource)) { const { params: paramsForCommand } = commandsParams[command]; const internalParams = []; - Object.keys(paramsForCommand).map(param => { + Object.keys(paramsForCommand).forEach(param => { const parameter = paramsForCommand[param]; if ( 'default' in parameter && @@ -241,7 +242,7 @@ const paramsDefaultByCommandOpennebula = (command = '', httpCode = '') => { const getDefaultValues = checkOpennebulaCommand(command, httpCode, false); if (getDefaultValues && getDefaultValues.params) { const defaultParams = Object.keys(getDefaultValues.params); - defaultParams.map(defaultParam => { + defaultParams.forEach(defaultParam => { if ( getDefaultValues.params && defaultParam && @@ -263,13 +264,30 @@ const generateNewTemplate = ( wrapper = 'SUNSTONE=[%1$s]' ) => { const positions = Object.entries({ ...current, ...addPositions }) - .filter(position => position && !removedPositions.includes(position)) + .filter(position => { + let element = position; + if (Array.isArray(position)) { + element = position[0]; + } + return element && !removedPositions.includes(element); + }) .map(([position, value]) => `${position}=${value}`) .join(', '); - return sprintf(wrapper, positions); }; +const check2Fa = (secret = '', token = '') => { + let rtn = false; + if (secret && token) { + rtn = speakeasy.totp.verify({ + secret, + encoding: 'base32', + token + }); + } + return rtn; +}; + module.exports = { opennebulaConnect, responseOpennebula, @@ -280,5 +298,6 @@ module.exports = { checkPositionInDataSource, checkOpennebulaCommand, paramsDefaultByCommandOpennebula, - generateNewTemplate + generateNewTemplate, + check2Fa }; diff --git a/src/fireedge/src/config/commands/system-commans.js b/src/fireedge/src/utils/server.js similarity index 72% rename from src/fireedge/src/config/commands/system-commans.js rename to src/fireedge/src/utils/server.js index a314053c111..3c73d8779a2 100644 --- a/src/fireedge/src/config/commands/system-commans.js +++ b/src/fireedge/src/utils/server.js @@ -12,16 +12,24 @@ /* See the License for the specific language governing permissions and */ /* limitations under the License. */ /* -------------------------------------------------------------------------- */ +const { Map } = require('immutable'); +const { internalServerError } = require('./constants/http-codes'); -module.exports = (_, { GET }) => ({ - 'system.version': { - // inspected - httpMethod: GET, - params: {} - }, - 'system.config': { - // inspected - httpMethod: GET, - params: {} +const httpResponse = (response, data, message) => { + let rtn = Map(internalServerError).toObject(); + rtn.data = data; + if (response) { + rtn = Map(response).toObject(); } -}); + if (data || data === 0) { + rtn.data = data; + } + if (message) { + rtn.message = message; + } + return rtn; +}; + +module.exports = { + httpResponse +}; diff --git a/src/fireedge/src/utils/ws-zeromq.js b/src/fireedge/src/utils/ws-zeromq.js index 6f1dd0a3fcd..2a22c2e01db 100644 --- a/src/fireedge/src/utils/ws-zeromq.js +++ b/src/fireedge/src/utils/ws-zeromq.js @@ -15,14 +15,13 @@ const atob = require('atob'); -const { server: Server } = require('websocket'); -const { socket } = require('zeromq'); +const { socket: socketZeroMQ } = require('zeromq'); const xml2js = require('xml2js'); -const { messageTerminal } = require('./general-functions'); -const { getConfig } = require('./yml-connect'); -const { validateAuth } = require('./jwt-functions'); -const { unauthorized } = require('../config/http-codes'); +const { messageTerminal } = require('./general'); +const { getConfig } = require('./yml'); +const { validateAuth } = require('./jwt'); +// const { unauthorized } = require('./constants/http-codes'); // user config const appConfig = getConfig(); @@ -32,92 +31,74 @@ const zeromqPort = appConfig.ZEROPORT || 2101; const zeromqHost = appConfig.ZEROHOST || '127.0.0.1'; const addWsServer = appServer => { - if ( - appServer && - appServer.constructor && - appServer.constructor.name && - appServer.constructor.name === 'Server' - ) { - // create the server - const wsServer = new Server({ - httpServer: appServer - }); + // connect to zeromq + const zeromqSock = socketZeroMQ('sub'); + const address = `${zeromqType}://${zeromqHost}:${zeromqPort}`; + try { + zeromqSock.connect(address); + zeromqSock.subscribe(''); - // connect to zeromq - const zeromqSock = socket('sub'); - const address = `${zeromqType}://${zeromqHost}:${zeromqPort}`; - - try { - zeromqSock.connect(address); - let clients = []; - - wsServer.on('request', request => { + appServer + .use((socketServer, next) => { if ( - request && - request.resourceURL && - request.resourceURL.query && - request.resourceURL.query.token && + socketServer.handshake.query && + socketServer.handshake.query.token && validateAuth({ - headers: { authorization: request.resourceURL.query.token } + headers: { authorization: socketServer.handshake.query.token } }) ) { - const clientConnection = request.accept(null, request.origin); - clients.push(clientConnection); - zeromqSock.subscribe(''); - zeromqSock.on('message', (...args) => { - const mssgs = []; - // broadcast - clients.map(client => { - Array.prototype.slice.call(args).forEach(arg => { - mssgs.push(arg.toString()); - }); - - if (mssgs[0] && mssgs[1]) { - xml2js.parseString( - atob(mssgs[1]), - { - explicitArray: false, - trim: true, - normalize: true, - includeWhiteChars: true, - strict: false - }, - (error, result) => { - if (error) { - const configErrorParser = { - color: 'red', - type: error, - message: 'Error parser: %s' - }; - messageTerminal(configErrorParser); - return; - } - client.send( - JSON.stringify({ command: mssgs[0], data: result }) - ); - } - ); - } - }); - }); + next(); } else { - const { id, message } = unauthorized; - request.reject(id, message); + next(new Error('Authentication error')); } - }); + }) + .on('connection', socketServer => { + zeromqSock.on('message', (...args) => { + const mssgs = []; + Array.prototype.slice.call(args).forEach(arg => { + mssgs.push(arg.toString()); + }); + if (mssgs[0] && mssgs[1]) { + xml2js.parseString( + atob(mssgs[1]), + { + explicitArray: false, + trim: true, + normalize: true, + includeWhiteChars: true, + strict: false + }, + (error, result) => { + if (error) { + const configErrorParser = { + color: 'red', + type: error, + message: 'Error parser: %s' + }; + messageTerminal(configErrorParser); + } else { + socketServer.emit('zeroMQ', { + command: mssgs[0], + data: result + }); + } + } + ); + } + }); - wsServer.on('close', request => { - // clear connection to broadcast - clients = clients.filter(client => client !== request); + /* socketServer.on('disconnect', () => { + console.log('Client disconnected'); + clearInterval(interval); + }); */ }); - } catch (error) { - const configErrorZeroMQ = { - color: 'red', - type: error, - message: '%s' - }; - messageTerminal(configErrorZeroMQ); - } + } catch (error) { + const configErrorZeroMQ = { + color: 'red', + type: error, + message: '%s' + }; + messageTerminal(configErrorZeroMQ); } }; diff --git a/src/fireedge/src/utils/yml-connect.js b/src/fireedge/src/utils/yml.js similarity index 96% rename from src/fireedge/src/utils/yml-connect.js rename to src/fireedge/src/utils/yml.js index e51a08708f2..a303cc3111a 100644 --- a/src/fireedge/src/utils/yml-connect.js +++ b/src/fireedge/src/utils/yml.js @@ -15,7 +15,7 @@ const fs = require('fs-extra'); const YAML = require('yaml'); -const { defaultConfigFile } = require('../config/defaults'); +const { defaultConfigFile } = require('./constants/defaults'); const getConfig = () => { let rtn = {}; diff --git a/src/fireedge/webpack.config.js b/src/fireedge/webpack.config.js index f5a6c32f663..b54f35b1de9 100644 --- a/src/fireedge/webpack.config.js +++ b/src/fireedge/webpack.config.js @@ -13,16 +13,14 @@ /* limitations under the License. */ /* -------------------------------------------------------------------------- */ +const webpack = require('webpack'); const nodeExternals = require('webpack-node-externals'); const path = require('path'); -const { getConfig } = require('./src/utils/yml-connect'); -const { defaultWebpackMode } = require('./src/config/defaults'); +const { + defaultWebpackMode, + defaultWebpackDevTool +} = require('./src/utils/constants/defaults'); -const appConfig = getConfig(); - -// settings -const mode = appConfig.MODE || defaultWebpackMode; -const devtool = mode === defaultWebpackMode ? 'inline-source-map' : ''; const js = { test: /\.js$/, exclude: /node_modules/, @@ -40,8 +38,28 @@ const js = { } }; +const fonts = { + test: /\.(ttf|woff|woff2|svg|eot)$/i, + include: [path.resolve(__dirname, 'src/public/assets/fonts/')], + use: { + loader: 'file-loader', + options: { + name: '[name].[ext]', + outputPath: 'fonts' + } + } +}; + +const alias = { + alias: { + server: path.resolve(__dirname, 'src/'), + client: path.resolve(__dirname, 'src/public/') + }, + extensions: ['.js'] +}; + const serverConfig = { - mode, + mode: defaultWebpackMode, target: 'node', node: { __dirname: false @@ -51,23 +69,24 @@ const serverConfig = { 'index.js': path.resolve(__dirname, 'src/index.js') }, module: { - rules: [js] + rules: [js, fonts] }, output: { path: path.resolve(__dirname, 'dist'), filename: '[name]' }, - devtool + resolve: alias, + devtool: defaultWebpackDevTool }; const clientConfig = { - mode, + mode: defaultWebpackMode, target: 'web', entry: { 'app.js': path.resolve(__dirname, 'src/public/front-app.js') }, module: { - rules: [js] + rules: [js, fonts] }, optimization: { splitChunks: { @@ -78,10 +97,25 @@ const clientConfig = { path: path.resolve(__dirname, 'dist/public'), filename: '[name]' }, - devtool + resolve: alias, + devtool: defaultWebpackDevTool }; -module.exports = env => { +module.exports = (env, argv) => { + if (argv && argv.mode !== defaultWebpackMode) { + [clientConfig.mode, serverConfig.mode] = Array(2).fill('production'); + [clientConfig.devtool, serverConfig.devtool] = Array(2).fill(''); + } else if (argv && argv.session && argv.session === 'false') { + const pluginProcessEnv = [ + new webpack.DefinePlugin({ + 'process.env': { + session: JSON.stringify(argv.session) + } + }) + ]; + clientConfig.plugins = pluginProcessEnv; + serverConfig.plugins = pluginProcessEnv; + } let build = []; if (env) { switch (env) { diff --git a/src/fireedge/yarn.lock b/src/fireedge/yarn.lock deleted file mode 100644 index 2974a7b3f85..00000000000 --- a/src/fireedge/yarn.lock +++ /dev/null @@ -1,8627 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/cli@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.8.4.tgz#505fb053721a98777b2b175323ea4f090b7d3c1c" - integrity sha512-XXLgAm6LBbaNxaGhMAznXXaxtCWfuv6PIDJ9Alsy9JYTOh+j2jJz+L/162kkfU1j/pTSxK1xGmlwI4pdIMkoag== - dependencies: - commander "^4.0.1" - convert-source-map "^1.1.0" - fs-readdir-recursive "^1.1.0" - glob "^7.0.0" - lodash "^4.17.13" - make-dir "^2.1.0" - slash "^2.0.0" - source-map "^0.5.0" - optionalDependencies: - chokidar "^2.1.8" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" - integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== - dependencies: - "@babel/highlight" "^7.0.0" - -"@babel/code-frame@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" - integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== - dependencies: - "@babel/highlight" "^7.8.3" - -"@babel/compat-data@^7.8.6": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.8.6.tgz#7eeaa0dfa17e50c7d9c0832515eee09b56f04e35" - integrity sha512-CurCIKPTkS25Mb8mz267vU95vy+TyUpnctEX2lV33xWNmHAfjruztgiPBbXZRh3xZZy1CYvGx6XfxyTVS+sk7Q== - dependencies: - browserslist "^4.8.5" - invariant "^2.2.4" - semver "^5.5.0" - -"@babel/core@^7.8.4": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.7.tgz#b69017d221ccdeb203145ae9da269d72cf102f3b" - integrity sha512-rBlqF3Yko9cynC5CCFy6+K/w2N+Sq/ff2BPy+Krp7rHlABIr5epbA7OxVeKoMHB39LZOp1UY5SuLjy6uWi35yA== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.7" - "@babel/helpers" "^7.8.4" - "@babel/parser" "^7.8.7" - "@babel/template" "^7.8.6" - "@babel/traverse" "^7.8.6" - "@babel/types" "^7.8.7" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.0" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.0.tgz#e2c21efbfd3293ad819a2359b448f002bfdfda56" - integrity sha512-Ms8Mo7YBdMMn1BYuNtKuP/z0TgEIhbcyB8HVR6PPNYp4P61lMsABiS4A3VG1qznjXVCf3r+fVHhm4efTYVsySA== - dependencies: - "@babel/types" "^7.6.0" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" - trim-right "^1.0.1" - -"@babel/generator@^7.8.6", "@babel/generator@^7.8.7": - version "7.8.8" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.8.tgz#cdcd58caab730834cee9eeadb729e833b625da3e" - integrity sha512-HKyUVu69cZoclptr8t8U5b6sx6zoWjh8jiUhnuj3MpZuKT2dJ8zPTuiy31luq32swhI0SpwItCIlU8XW7BZeJg== - dependencies: - "@babel/types" "^7.8.7" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" - -"@babel/helper-annotate-as-pure@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee" - integrity sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz#c84097a427a061ac56a1c30ebf54b7b22d241503" - integrity sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-builder-react-jsx@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.8.3.tgz#dee98d7d79cc1f003d80b76fe01c7f8945665ff6" - integrity sha512-JT8mfnpTkKNCboTqZsQTdGo3l3Ik3l7QIt9hh0O9DYiwVel37VoJpILKM4YFbP2euF32nkQSb+F9cUk9b7DDXQ== - dependencies: - "@babel/types" "^7.8.3" - esutils "^2.0.0" - -"@babel/helper-call-delegate@^7.8.7": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.8.7.tgz#28a279c2e6c622a6233da548127f980751324cab" - integrity sha512-doAA5LAKhsFCR0LAFIf+r2RSMmC+m8f/oQ+URnUET/rWeEzC0yTRmAGyWkD4sSu3xwbS7MYQ2u+xlt1V5R56KQ== - dependencies: - "@babel/helper-hoist-variables" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.7" - -"@babel/helper-compilation-targets@^7.8.7": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.7.tgz#dac1eea159c0e4bd46e309b5a1b04a66b53c1dde" - integrity sha512-4mWm8DCK2LugIS+p1yArqvG1Pf162upsIsjE7cNBjez+NjliQpVhj20obE520nao0o14DaTnFJv+Fw5a0JpoUw== - dependencies: - "@babel/compat-data" "^7.8.6" - browserslist "^4.9.1" - invariant "^2.2.4" - levenary "^1.1.1" - semver "^5.5.0" - -"@babel/helper-create-class-features-plugin@^7.8.3": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.6.tgz#243a5b46e2f8f0f674dc1387631eb6b28b851de0" - integrity sha512-klTBDdsr+VFFqaDHm5rR69OpEQtO2Qv8ECxHS1mNhJJvaHArR6a1xTf5K/eZW7eZpJbhCx3NW1Yt/sKsLXLblg== - dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-member-expression-to-functions" "^7.8.3" - "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.6" - "@babel/helper-split-export-declaration" "^7.8.3" - -"@babel/helper-create-regexp-features-plugin@^7.8.3", "@babel/helper-create-regexp-features-plugin@^7.8.8": - version "7.8.8" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz#5d84180b588f560b7864efaeea89243e58312087" - integrity sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-regex" "^7.8.3" - regexpu-core "^4.7.0" - -"@babel/helper-define-map@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz#a0655cad5451c3760b726eba875f1cd8faa02c15" - integrity sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g== - dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/types" "^7.8.3" - lodash "^4.17.13" - -"@babel/helper-explode-assignable-expression@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz#a728dc5b4e89e30fc2dfc7d04fa28a930653f982" - integrity sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw== - dependencies: - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-function-name@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" - integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== - dependencies: - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-function-name@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" - integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA== - dependencies: - "@babel/helper-get-function-arity" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-get-function-arity@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" - integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-get-function-arity@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" - integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-hoist-variables@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz#1dbe9b6b55d78c9b4183fc8cdc6e30ceb83b7134" - integrity sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-member-expression-to-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" - integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-module-imports@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" - integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-module-transforms@^7.8.3": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.8.6.tgz#6a13b5eecadc35692047073a64e42977b97654a4" - integrity sha512-RDnGJSR5EFBJjG3deY0NiL0K9TO8SXxS9n/MPsbPK/s9LbQymuLNtlzvDiNS7IpecuL45cMeLVkA+HfmlrnkRg== - dependencies: - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.6" - "@babel/helper-simple-access" "^7.8.3" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/template" "^7.8.6" - "@babel/types" "^7.8.6" - lodash "^4.17.13" - -"@babel/helper-optimise-call-expression@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" - integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" - integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== - -"@babel/helper-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965" - integrity sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ== - dependencies: - lodash "^4.17.13" - -"@babel/helper-remap-async-to-generator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz#273c600d8b9bf5006142c1e35887d555c12edd86" - integrity sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-wrap-function" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-replace-supers@^7.8.3", "@babel/helper-replace-supers@^7.8.6": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz#5ada744fd5ad73203bf1d67459a27dcba67effc8" - integrity sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.8.3" - "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/traverse" "^7.8.6" - "@babel/types" "^7.8.6" - -"@babel/helper-simple-access@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" - integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw== - dependencies: - "@babel/template" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-split-export-declaration@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" - integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== - dependencies: - "@babel/types" "^7.4.4" - -"@babel/helper-split-export-declaration@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" - integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-wrap-function@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz#9dbdb2bb55ef14aaa01fe8c99b629bd5352d8610" - integrity sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ== - dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helpers@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.8.4.tgz#754eb3ee727c165e0a240d6c207de7c455f36f73" - integrity sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w== - dependencies: - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.4" - "@babel/types" "^7.8.3" - -"@babel/highlight@^7.0.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" - integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^4.0.0" - -"@babel/highlight@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797" - integrity sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg== - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.0.0": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.5.tgz#02f077ac8817d3df4a832ef59de67565e71cca4b" - integrity sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g== - -"@babel/parser@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.0.tgz#3e05d0647432a8326cb28d0de03895ae5a57f39b" - integrity sha512-+o2q111WEx4srBs7L9eJmcwi655eD8sXniLqMB93TBK9GrNzGrxDWSjiqz2hLU0Ha8MTXFIP0yd9fNdP+m43ZQ== - -"@babel/parser@^7.8.6", "@babel/parser@^7.8.7": - version "7.8.8" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.8.tgz#4c3b7ce36db37e0629be1f0d50a571d2f86f6cd4" - integrity sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA== - -"@babel/plugin-proposal-async-generator-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz#bad329c670b382589721b27540c7d288601c6e6f" - integrity sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-remap-async-to-generator" "^7.8.3" - "@babel/plugin-syntax-async-generators" "^7.8.0" - -"@babel/plugin-proposal-class-properties@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz#5e06654af5cd04b608915aada9b2a6788004464e" - integrity sha512-EqFhbo7IosdgPgZggHaNObkmO1kNUe3slaKu54d5OWvy+p9QIKOzK1GAEpAIsZtWVtPXUHSMcT4smvDrCfY4AA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-proposal-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz#38c4fe555744826e97e2ae930b0fb4cc07e66054" - integrity sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - -"@babel/plugin-proposal-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz#da5216b238a98b58a1e05d6852104b10f9a70d6b" - integrity sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.0" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2" - integrity sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - -"@babel/plugin-proposal-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz#eb5ae366118ddca67bed583b53d7554cad9951bb" - integrity sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - -"@babel/plugin-proposal-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz#9dee96ab1650eed88646ae9734ca167ac4a9c5c9" - integrity sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - -"@babel/plugin-proposal-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz#ae10b3214cb25f7adb1f3bc87ba42ca10b7e2543" - integrity sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" - -"@babel/plugin-proposal-unicode-property-regex@^7.8.3": - version "7.8.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz#ee3a95e90cdc04fe8cd92ec3279fa017d68a0d1d" - integrity sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.8" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-async-generators@^7.8.0": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-dynamic-import@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-json-strings@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz#521b06c83c40480f1e58b4fd33b92eceb1d6ea94" - integrity sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-object-rest-spread@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz#3acdece695e6b13aaf57fc291d1a800950c71391" - integrity sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-arrow-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz#82776c2ed0cd9e1a49956daeb896024c9473b8b6" - integrity sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-async-to-generator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz#4308fad0d9409d71eafb9b1a6ee35f9d64b64086" - integrity sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ== - dependencies: - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-remap-async-to-generator" "^7.8.3" - -"@babel/plugin-transform-block-scoped-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz#437eec5b799b5852072084b3ae5ef66e8349e8a3" - integrity sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-block-scoping@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz#97d35dab66857a437c166358b91d09050c868f3a" - integrity sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - lodash "^4.17.13" - -"@babel/plugin-transform-classes@^7.8.6": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.6.tgz#77534447a477cbe5995ae4aee3e39fbc8090c46d" - integrity sha512-k9r8qRay/R6v5aWZkrEclEhKO6mc1CCQr2dLsVHBmOQiMpN6I2bpjX3vgnldUWeEI1GHVNByULVxZ4BdP4Hmdg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-define-map" "^7.8.3" - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.6" - "@babel/helper-split-export-declaration" "^7.8.3" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz#96d0d28b7f7ce4eb5b120bb2e0e943343c86f81b" - integrity sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-destructuring@^7.8.3": - version "7.8.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.8.tgz#fadb2bc8e90ccaf5658de6f8d4d22ff6272a2f4b" - integrity sha512-eRJu4Vs2rmttFCdhPUM3bV0Yo/xPSdPw6ML9KHs/bjB4bLA5HXlbvYXPOD5yASodGod+krjYx21xm1QmL8dCJQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-dotall-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz#c3c6ec5ee6125c6993c5cbca20dc8621a9ea7a6e" - integrity sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-duplicate-keys@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz#8d12df309aa537f272899c565ea1768e286e21f1" - integrity sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-exponentiation-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz#581a6d7f56970e06bf51560cd64f5e947b70d7b7" - integrity sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-for-of@^7.8.6": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.6.tgz#a051bd1b402c61af97a27ff51b468321c7c2a085" - integrity sha512-M0pw4/1/KI5WAxPsdcUL/w2LJ7o89YHN3yLkzNjg7Yl15GlVGgzHyCU+FMeAxevHGsLVmUqbirlUIKTafPmzdw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-function-name@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz#279373cb27322aaad67c2683e776dfc47196ed8b" - integrity sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ== - dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz#aef239823d91994ec7b68e55193525d76dbd5dc1" - integrity sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-member-expression-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz#963fed4b620ac7cbf6029c755424029fa3a40410" - integrity sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-modules-amd@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz#65606d44616b50225e76f5578f33c568a0b876a5" - integrity sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ== - dependencies: - "@babel/helper-module-transforms" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - babel-plugin-dynamic-import-node "^2.3.0" - -"@babel/plugin-transform-modules-commonjs@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz#df251706ec331bd058a34bdd72613915f82928a5" - integrity sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg== - dependencies: - "@babel/helper-module-transforms" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-simple-access" "^7.8.3" - babel-plugin-dynamic-import-node "^2.3.0" - -"@babel/plugin-transform-modules-systemjs@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz#d8bbf222c1dbe3661f440f2f00c16e9bb7d0d420" - integrity sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg== - dependencies: - "@babel/helper-hoist-variables" "^7.8.3" - "@babel/helper-module-transforms" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - babel-plugin-dynamic-import-node "^2.3.0" - -"@babel/plugin-transform-modules-umd@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz#592d578ce06c52f5b98b02f913d653ffe972661a" - integrity sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw== - dependencies: - "@babel/helper-module-transforms" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c" - integrity sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" - -"@babel/plugin-transform-new-target@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz#60cc2ae66d85c95ab540eb34babb6434d4c70c43" - integrity sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-object-super@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz#ebb6a1e7a86ffa96858bd6ac0102d65944261725" - integrity sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.3" - -"@babel/plugin-transform-parameters@^7.8.7": - version "7.8.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.8.tgz#0381de466c85d5404565243660c4496459525daf" - integrity sha512-hC4Ld/Ulpf1psQciWWwdnUspQoQco2bMzSrwU6TmzRlvoYQe4rQFy9vnCZDTlVeCQj0JPfL+1RX0V8hCJvkgBA== - dependencies: - "@babel/helper-call-delegate" "^7.8.7" - "@babel/helper-get-function-arity" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-property-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz#33194300d8539c1ed28c62ad5087ba3807b98263" - integrity sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-react-display-name@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.3.tgz#70ded987c91609f78353dd76d2fb2a0bb991e8e5" - integrity sha512-3Jy/PCw8Fe6uBKtEgz3M82ljt+lTg+xJaM4og+eyu83qLT87ZUSckn0wy7r31jflURWLO83TW6Ylf7lyXj3m5A== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-react-jsx-self@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.8.3.tgz#c4f178b2aa588ecfa8d077ea80d4194ee77ed702" - integrity sha512-01OT7s5oa0XTLf2I8XGsL8+KqV9lx3EZV+jxn/L2LQ97CGKila2YMroTkCEIE0HV/FF7CMSRsIAybopdN9NTdg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.8.3" - -"@babel/plugin-transform-react-jsx-source@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.8.3.tgz#951e75a8af47f9f120db731be095d2b2c34920e0" - integrity sha512-PLMgdMGuVDtRS/SzjNEQYUT8f4z1xb2BAT54vM1X5efkVuYBf5WyGUMbpmARcfq3NaglIwz08UVQK4HHHbC6ag== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.8.3" - -"@babel/plugin-transform-react-jsx@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.8.3.tgz#4220349c0390fdefa505365f68c103562ab2fc4a" - integrity sha512-r0h+mUiyL595ikykci+fbwm9YzmuOrUBi0b+FDIKmi3fPQyFokWVEMJnRWHJPPQEjyFJyna9WZC6Viv6UHSv1g== - dependencies: - "@babel/helper-builder-react-jsx" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.8.3" - -"@babel/plugin-transform-regenerator@^7.8.7": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz#5e46a0dca2bee1ad8285eb0527e6abc9c37672f8" - integrity sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA== - dependencies: - regenerator-transform "^0.14.2" - -"@babel/plugin-transform-reserved-words@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz#9a0635ac4e665d29b162837dd3cc50745dfdf1f5" - integrity sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-shorthand-properties@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz#28545216e023a832d4d3a1185ed492bcfeac08c8" - integrity sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz#9c8ffe8170fdfb88b114ecb920b82fb6e95fe5e8" - integrity sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-sticky-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz#be7a1290f81dae767475452199e1f76d6175b100" - integrity sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-regex" "^7.8.3" - -"@babel/plugin-transform-template-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz#7bfa4732b455ea6a43130adc0ba767ec0e402a80" - integrity sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-typeof-symbol@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz#ede4062315ce0aaf8a657a920858f1a2f35fc412" - integrity sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-unicode-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz#0cef36e3ba73e5c57273effb182f46b91a1ecaad" - integrity sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/preset-env@^7.8.4": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.8.7.tgz#1fc7d89c7f75d2d70c2b6768de6c2e049b3cb9db" - integrity sha512-BYftCVOdAYJk5ASsznKAUl53EMhfBbr8CJ1X+AJLfGPscQkwJFiaV/Wn9DPH/7fzm2v6iRYJKYHSqyynTGw0nw== - dependencies: - "@babel/compat-data" "^7.8.6" - "@babel/helper-compilation-targets" "^7.8.7" - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-proposal-async-generator-functions" "^7.8.3" - "@babel/plugin-proposal-dynamic-import" "^7.8.3" - "@babel/plugin-proposal-json-strings" "^7.8.3" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-proposal-object-rest-spread" "^7.8.3" - "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" - "@babel/plugin-proposal-optional-chaining" "^7.8.3" - "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" - "@babel/plugin-syntax-async-generators" "^7.8.0" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - "@babel/plugin-syntax-json-strings" "^7.8.0" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - "@babel/plugin-transform-arrow-functions" "^7.8.3" - "@babel/plugin-transform-async-to-generator" "^7.8.3" - "@babel/plugin-transform-block-scoped-functions" "^7.8.3" - "@babel/plugin-transform-block-scoping" "^7.8.3" - "@babel/plugin-transform-classes" "^7.8.6" - "@babel/plugin-transform-computed-properties" "^7.8.3" - "@babel/plugin-transform-destructuring" "^7.8.3" - "@babel/plugin-transform-dotall-regex" "^7.8.3" - "@babel/plugin-transform-duplicate-keys" "^7.8.3" - "@babel/plugin-transform-exponentiation-operator" "^7.8.3" - "@babel/plugin-transform-for-of" "^7.8.6" - "@babel/plugin-transform-function-name" "^7.8.3" - "@babel/plugin-transform-literals" "^7.8.3" - "@babel/plugin-transform-member-expression-literals" "^7.8.3" - "@babel/plugin-transform-modules-amd" "^7.8.3" - "@babel/plugin-transform-modules-commonjs" "^7.8.3" - "@babel/plugin-transform-modules-systemjs" "^7.8.3" - "@babel/plugin-transform-modules-umd" "^7.8.3" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" - "@babel/plugin-transform-new-target" "^7.8.3" - "@babel/plugin-transform-object-super" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.8.7" - "@babel/plugin-transform-property-literals" "^7.8.3" - "@babel/plugin-transform-regenerator" "^7.8.7" - "@babel/plugin-transform-reserved-words" "^7.8.3" - "@babel/plugin-transform-shorthand-properties" "^7.8.3" - "@babel/plugin-transform-spread" "^7.8.3" - "@babel/plugin-transform-sticky-regex" "^7.8.3" - "@babel/plugin-transform-template-literals" "^7.8.3" - "@babel/plugin-transform-typeof-symbol" "^7.8.4" - "@babel/plugin-transform-unicode-regex" "^7.8.3" - "@babel/types" "^7.8.7" - browserslist "^4.8.5" - core-js-compat "^3.6.2" - invariant "^2.2.2" - levenary "^1.1.1" - semver "^5.5.0" - -"@babel/preset-react@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.8.3.tgz#23dc63f1b5b0751283e04252e78cf1d6589273d2" - integrity sha512-9hx0CwZg92jGb7iHYQVgi0tOEHP/kM60CtWJQnmbATSPIQQ2xYzfoCI3EdqAhFBeeJwYMdWQuDUHMsuDbH9hyQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-transform-react-display-name" "^7.8.3" - "@babel/plugin-transform-react-jsx" "^7.8.3" - "@babel/plugin-transform-react-jsx-self" "^7.8.3" - "@babel/plugin-transform-react-jsx-source" "^7.8.3" - -"@babel/runtime-corejs2@^7.4.4": - version "7.9.2" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.9.2.tgz#f11d074ff99b9b4319b5ecf0501f12202bf2bf4d" - integrity sha512-ayjSOxuK2GaSDJFCtLgHnYjuMyIpViNujWrZo8GUpN60/n7juzJKK5yOo6RFVb0zdU9ACJFK+MsZrUnj3OmXMw== - dependencies: - core-js "^2.6.5" - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.1.2", "@babel/runtime@^7.5.5": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.0.tgz#4fc1d642a9fd0299754e8b5de62c631cf5568205" - integrity sha512-89eSBLJsxNxOERC0Op4vd+0Bqm6wRMqMbFtV3i0/fbaWw/mJ8Q3eBvgX0G4SyrOOLCtbu98HspF8o09MRT+KzQ== - dependencies: - regenerator-runtime "^0.13.2" - -"@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.6.2", "@babel/runtime@^7.8.4": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.7.tgz#8fefce9802db54881ba59f90bb28719b4996324d" - integrity sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.6.0": - version "7.9.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.2.tgz#d90df0583a3a252f09aaa619665367bae518db06" - integrity sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.6.3": - version "7.7.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.2.tgz#111a78002a5c25fc8e3361bedc9529c696b85a6a" - integrity sha512-JONRbXbTXc9WQE2mAZd1p0Z3DZ/6vaQIkgYMSTP3KjRCyd7rCZCcfhCyX+YjwcKxcZ82UrxbRD358bpExNgrjw== - dependencies: - regenerator-runtime "^0.13.2" - -"@babel/template@^7.1.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6" - integrity sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.6.0" - "@babel/types" "^7.6.0" - -"@babel/template@^7.8.3", "@babel/template@^7.8.6": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" - integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/parser" "^7.8.6" - "@babel/types" "^7.8.6" - -"@babel/traverse@^7.0.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.0.tgz#389391d510f79be7ce2ddd6717be66d3fed4b516" - integrity sha512-93t52SaOBgml/xY74lsmt7xOR4ufYvhb5c5qiM6lu4J/dWGMAfAh6eKw4PjLes6DI6nQgearoxnFJk60YchpvQ== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.6.0" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/parser" "^7.6.0" - "@babel/types" "^7.6.0" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" - -"@babel/traverse@^7.8.3", "@babel/traverse@^7.8.4", "@babel/traverse@^7.8.6": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.6.tgz#acfe0c64e1cd991b3e32eae813a6eb564954b5ff" - integrity sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.6" - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/parser" "^7.8.6" - "@babel/types" "^7.8.6" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" - -"@babel/types@^7.0.0", "@babel/types@^7.4.4", "@babel/types@^7.6.0": - version "7.6.1" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.1.tgz#53abf3308add3ac2a2884d539151c57c4b3ac648" - integrity sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g== - dependencies: - esutils "^2.0.2" - lodash "^4.17.13" - to-fast-properties "^2.0.0" - -"@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.8.7": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.7.tgz#1fc9729e1acbb2337d5b6977a63979b4819f5d1d" - integrity sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw== - dependencies: - esutils "^2.0.2" - lodash "^4.17.13" - to-fast-properties "^2.0.0" - -"@cypress/listr-verbose-renderer@0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@cypress/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#a77492f4b11dcc7c446a34b3e28721afd33c642a" - integrity sha1-p3SS9LEdzHxEajSz4ochr9M8ZCo= - dependencies: - chalk "^1.1.3" - cli-cursor "^1.0.2" - date-fns "^1.27.2" - figures "^1.7.0" - -"@cypress/xvfb@1.2.4": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a" - integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q== - dependencies: - debug "^3.1.0" - lodash.once "^4.1.1" - -"@date-io/core@1.x", "@date-io/core@^1.3.13": - version "1.3.13" - resolved "https://registry.yarnpkg.com/@date-io/core/-/core-1.3.13.tgz#90c71da493f20204b7a972929cc5c482d078b3fa" - integrity sha512-AlEKV7TxjeK+jxWVKcCFrfYAk8spX9aCyiToFIiLPtfQbsjmRGLIhb5VZgptQcJdHtLXo7+m0DuurwFgUToQuA== - -"@date-io/date-fns@^1.1.0": - version "1.3.13" - resolved "https://registry.yarnpkg.com/@date-io/date-fns/-/date-fns-1.3.13.tgz#7798844041640ab393f7e21a7769a65d672f4735" - integrity sha512-yXxGzcRUPcogiMj58wVgFjc9qUYrCnnU9eLcyNbsQCmae4jPuZCDoIBR21j8ZURsM7GRtU62VOw5yNd4dDHunA== - dependencies: - "@date-io/core" "^1.3.13" - -"@emotion/hash@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" - integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== - -"@material-ui/core@^4.9.8": - version "4.9.8" - resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.9.8.tgz#21c37a9aadf4ff8a2719b8cfcad0ae9e6ca53791" - integrity sha512-4cslpG6oLoPWUfwPkX+hvbak4hAGiOfgXOu/UIYeeMrtsTEebC0Mirjoby7zhS4ny86YI3rXEFW6EZDmlj5n5w== - dependencies: - "@babel/runtime" "^7.4.4" - "@material-ui/styles" "^4.9.6" - "@material-ui/system" "^4.9.6" - "@material-ui/types" "^5.0.0" - "@material-ui/utils" "^4.9.6" - "@types/react-transition-group" "^4.2.0" - clsx "^1.0.2" - hoist-non-react-statics "^3.3.2" - popper.js "^1.14.1" - prop-types "^15.7.2" - react-is "^16.8.0" - react-transition-group "^4.3.0" - -"@material-ui/icons@^4.9.1": - version "4.9.1" - resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-4.9.1.tgz#fdeadf8cb3d89208945b33dbc50c7c616d0bd665" - integrity sha512-GBitL3oBWO0hzBhvA9KxqcowRUsA0qzwKkURyC8nppnC3fw54KPKZ+d4V1Eeg/UnDRSzDaI9nGCdel/eh9AQMg== - dependencies: - "@babel/runtime" "^7.4.4" - -"@material-ui/pickers@^3.2.2": - version "3.2.10" - resolved "https://registry.yarnpkg.com/@material-ui/pickers/-/pickers-3.2.10.tgz#19df024895876eb0ec7cd239bbaea595f703f0ae" - integrity sha512-B8G6Obn5S3RCl7hwahkQj9sKUapwXWFjiaz/Bsw1fhYFdNMnDUolRiWQSoKPb1/oKe37Dtfszoywi1Ynbo3y8w== - dependencies: - "@babel/runtime" "^7.6.0" - "@date-io/core" "1.x" - "@types/styled-jsx" "^2.2.8" - clsx "^1.0.2" - react-transition-group "^4.0.0" - rifm "^0.7.0" - -"@material-ui/styles@^4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.9.6.tgz#924a30bf7c9b91af9c8f19c12c8573b8a4ecd085" - integrity sha512-ijgwStEkw1OZ6gCz18hkjycpr/3lKs1hYPi88O/AUn4vMuuGEGAIrqKVFq/lADmZUNF3DOFIk8LDkp7zmjPxtA== - dependencies: - "@babel/runtime" "^7.4.4" - "@emotion/hash" "^0.8.0" - "@material-ui/types" "^5.0.0" - "@material-ui/utils" "^4.9.6" - clsx "^1.0.2" - csstype "^2.5.2" - hoist-non-react-statics "^3.3.2" - jss "^10.0.3" - jss-plugin-camel-case "^10.0.3" - jss-plugin-default-unit "^10.0.3" - jss-plugin-global "^10.0.3" - jss-plugin-nested "^10.0.3" - jss-plugin-props-sort "^10.0.3" - jss-plugin-rule-value-function "^10.0.3" - jss-plugin-vendor-prefixer "^10.0.3" - prop-types "^15.7.2" - -"@material-ui/system@^4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.9.6.tgz#fd060540224da4d1740da8ca6e7af288e217717e" - integrity sha512-QtfoAePyqXoZ2HUVSwGb1Ro0kucMCvVjbI0CdYIR21t0Opgfm1Oer6ni9P5lfeXA39xSt0wCierw37j+YES48Q== - dependencies: - "@babel/runtime" "^7.4.4" - "@material-ui/utils" "^4.9.6" - prop-types "^15.7.2" - -"@material-ui/types@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-5.0.0.tgz#26d6259dc6b39f4c2e1e9aceff7a11e031941741" - integrity sha512-UeH2BuKkwDndtMSS0qgx1kCzSMw+ydtj0xx/XbFtxNSTlXydKwzs5gVW5ZKsFlAkwoOOQ9TIsyoCC8hq18tOwg== - -"@material-ui/utils@^4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.9.6.tgz#5f1f9f6e4df9c8b6a263293b68c94834248ff157" - integrity sha512-gqlBn0JPPTUZeAktn1rgMcy9Iczrr74ecx31tyZLVGdBGGzsxzM6PP6zeS7FuoLS6vG4hoZP7hWnOoHtkR0Kvw== - dependencies: - "@babel/runtime" "^7.4.4" - prop-types "^15.7.2" - react-is "^16.8.0" - -"@types/node@*": - version "12.7.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.4.tgz#64db61e0359eb5a8d99b55e05c729f130a678b04" - integrity sha512-W0+n1Y+gK/8G2P/piTkBBN38Qc5Q1ZSO6B5H3QmPCUewaiXOo2GCAWZ4ElZCcNhjJuBSUSLGFUJnmlCn5+nxOQ== - -"@types/prop-types@*": - version "15.7.3" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" - integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== - -"@types/react-transition-group@^4.2.0": - version "4.2.4" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.2.4.tgz#c7416225987ccdb719262766c1483da8f826838d" - integrity sha512-8DMUaDqh0S70TjkqU0DxOu80tFUiiaS9rxkWip/nb7gtvAsbqOXm02UCmR8zdcjWujgeYPiPNTVpVpKzUDotwA== - dependencies: - "@types/react" "*" - -"@types/react@*": - version "16.9.23" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.23.tgz#1a66c6d468ba11a8943ad958a8cb3e737568271c" - integrity sha512-SsGVT4E7L2wLN3tPYLiF20hmZTPGuzaayVunfgXzUn1x4uHVsKH6QDJQ/TdpHqwsTLd4CwrmQ2vOgxN7gE24gw== - dependencies: - "@types/prop-types" "*" - csstype "^2.2.0" - -"@types/styled-jsx@^2.2.8": - version "2.2.8" - resolved "https://registry.yarnpkg.com/@types/styled-jsx/-/styled-jsx-2.2.8.tgz#b50d13d8a3c34036282d65194554cf186bab7234" - integrity sha512-Yjye9VwMdYeXfS71ihueWRSxrruuXTwKCbzue4+5b2rjnQ//AtyM7myZ1BEhNhBQ/nL/RE7bdToUoLln2miKvg== - dependencies: - "@types/react" "*" - -"@webassemblyjs/ast@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" - integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ== - dependencies: - "@webassemblyjs/helper-module-context" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/wast-parser" "1.8.5" - -"@webassemblyjs/floating-point-hex-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" - integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ== - -"@webassemblyjs/helper-api-error@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" - integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA== - -"@webassemblyjs/helper-buffer@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" - integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q== - -"@webassemblyjs/helper-code-frame@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" - integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ== - dependencies: - "@webassemblyjs/wast-printer" "1.8.5" - -"@webassemblyjs/helper-fsm@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" - integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow== - -"@webassemblyjs/helper-module-context@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" - integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g== - dependencies: - "@webassemblyjs/ast" "1.8.5" - mamacro "^0.0.3" - -"@webassemblyjs/helper-wasm-bytecode@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" - integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ== - -"@webassemblyjs/helper-wasm-section@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" - integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" - -"@webassemblyjs/ieee754@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" - integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" - integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" - integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw== - -"@webassemblyjs/wasm-edit@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" - integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/helper-wasm-section" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" - "@webassemblyjs/wasm-opt" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" - "@webassemblyjs/wast-printer" "1.8.5" - -"@webassemblyjs/wasm-gen@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" - integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/ieee754" "1.8.5" - "@webassemblyjs/leb128" "1.8.5" - "@webassemblyjs/utf8" "1.8.5" - -"@webassemblyjs/wasm-opt@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" - integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" - -"@webassemblyjs/wasm-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" - integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-api-error" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/ieee754" "1.8.5" - "@webassemblyjs/leb128" "1.8.5" - "@webassemblyjs/utf8" "1.8.5" - -"@webassemblyjs/wast-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" - integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/floating-point-hex-parser" "1.8.5" - "@webassemblyjs/helper-api-error" "1.8.5" - "@webassemblyjs/helper-code-frame" "1.8.5" - "@webassemblyjs/helper-fsm" "1.8.5" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/wast-printer@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" - integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/wast-parser" "1.8.5" - "@xtuc/long" "4.2.2" - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -accepts@~1.3.5, accepts@~1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== - dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" - -acorn-jsx@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.2.tgz#84b68ea44b373c4f8686023a551f61a21b7c4a4f" - integrity sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw== - -acorn@^6.2.1: - version "6.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" - integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== - -acorn@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.0.0.tgz#26b8d1cd9a9b700350b71c0905546f64d1284e7a" - integrity sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ== - -airbnb-prop-types@^2.13.2: - version "2.15.0" - resolved "https://registry.yarnpkg.com/airbnb-prop-types/-/airbnb-prop-types-2.15.0.tgz#5287820043af1eb469f5b0af0d6f70da6c52aaef" - integrity sha512-jUh2/hfKsRjNFC4XONQrxo/n/3GG4Tn6Hl0WlFQN5PY9OMC9loSCoAYKnZsWaP8wEfd5xcrPloK0Zg6iS1xwVA== - dependencies: - array.prototype.find "^2.1.0" - function.prototype.name "^1.1.1" - has "^1.0.3" - is-regex "^1.0.4" - object-is "^1.0.1" - object.assign "^4.1.0" - object.entries "^1.1.0" - prop-types "^15.7.2" - prop-types-exact "^1.2.0" - react-is "^16.9.0" - -ajv-errors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" - integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== - -ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" - integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== - -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: - version "6.10.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" - integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== - dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= - -ansi-align@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" - integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= - dependencies: - string-width "^2.0.0" - -ansi-escapes@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" - integrity sha1-06ioOzGapneTZisT52HHkRQiMG4= - -ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -aproba@^1.0.3, aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -arch@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.1.tgz#8f5c2731aa35a30929221bb0640eed65175ec84e" - integrity sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg== - -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -aria-query@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.7.1.tgz#26cbb5aff64144b0a825be1846e0b16cfa00b11e" - integrity sha1-Jsu1r/ZBRLCoJb4YRuCxbPoAsR4= - dependencies: - ast-types-flow "0.0.7" - commander "^2.11.0" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-filter@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" - integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= - -array-includes@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" - integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= - dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -array.prototype.find@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.1.0.tgz#630f2eaf70a39e608ac3573e45cf8ccd0ede9ad7" - integrity sha512-Wn41+K1yuO5p7wRZDl7890c3xvv5UBrfVXTVIe28rSQb6LS0fZMDrQB6PAcxQFRFy6vJTLDc3A2+3CjQdzVKRg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.13.0" - -array.prototype.flat@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz#812db8f02cad24d3fab65dd67eabe3b8903494a4" - integrity sha512-rVqIs330nLJvfC7JqYvEWwqVr5QjYF1ib02i3YJtR/fICO6527Tjpc/e4Mvmxh3GIePPreRXMdaGyC99YphWEw== - dependencies: - define-properties "^1.1.2" - es-abstract "^1.10.0" - function-bind "^1.1.1" - -asn1.js@^4.0.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" - integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -assert@^1.1.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" - integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== - dependencies: - object-assign "^4.1.1" - util "0.10.3" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -ast-types-flow@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" - integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - -async-foreach@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" - integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI= - -async@2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" - integrity sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ== - dependencies: - lodash "^4.17.10" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -atob@^2.1.1, atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" - integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== - -axios@^0.19.0: - version "0.19.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.0.tgz#8e09bff3d9122e133f7b8101c8fbdd00ed3d2ab8" - integrity sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ== - dependencies: - follow-redirects "1.5.10" - is-buffer "^2.0.2" - -axobject-query@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0" - integrity sha1-YvWdvFnJ+SQnWco0mWDnov48NsA= - dependencies: - ast-types-flow "0.0.7" - -babel-eslint@^10.0.2: - version "10.0.3" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.3.tgz#81a2c669be0f205e19462fed2482d33e4687a88a" - integrity sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.0.0" - "@babel/traverse" "^7.0.0" - "@babel/types" "^7.0.0" - eslint-visitor-keys "^1.0.0" - resolve "^1.12.0" - -babel-loader@^8.0.6: - version "8.0.6" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb" - integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw== - dependencies: - find-cache-dir "^2.0.0" - loader-utils "^1.0.2" - mkdirp "^0.5.1" - pify "^4.0.1" - -babel-plugin-dynamic-import-node@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" - integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== - dependencies: - object.assign "^4.1.0" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -base32.js@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/base32.js/-/base32.js-0.0.1.tgz#d045736a57b1f6c139f0c7df42518a84e91bb2ba" - integrity sha1-0EVzalex9sE58MffQlGKhOkbsro= - -base64-js@^1.0.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -basic-auth@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" - integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== - dependencies: - safe-buffer "5.1.2" - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - -bcryptjs@^2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/bcryptjs/-/bcryptjs-2.4.3.tgz#9ab5627b93e60621ff7cdac5da9733027df1d0cb" - integrity sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms= - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - -bl@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" - integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA== - dependencies: - readable-stream "^2.3.5" - safe-buffer "^5.1.1" - -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= - dependencies: - inherits "~2.0.0" - -bluebird@3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" - integrity sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw= - -bluebird@^3.5.5: - version "3.5.5" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" - integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" - integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== - -body-parser@1.19.0, body-parser@^1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== - dependencies: - bytes "3.1.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "1.7.2" - iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" - -boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= - -bowser@2.5.4: - version "2.5.4" - resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.5.4.tgz#850fccfebde92165440279b5ab19be3c7f05cfe1" - integrity sha512-74GGwfc2nzYD19JCiA0RwCxdq7IY5jHeEaSrrgm/5kusEuK+7UK0qDG3gyzN47c4ViNyO4osaKtZE+aSV6nlpQ== - -boxen@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" - integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== - dependencies: - ansi-align "^2.0.0" - camelcase "^4.0.0" - chalk "^2.0.1" - cli-boxes "^1.0.0" - string-width "^2.0.0" - term-size "^1.2.0" - widest-line "^2.0.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -brorand@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= - dependencies: - bn.js "^4.1.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" - integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= - dependencies: - bn.js "^4.1.1" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.2" - elliptic "^6.0.0" - inherits "^2.0.1" - parse-asn1 "^5.0.0" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== - dependencies: - pako "~1.0.5" - -browserslist@^4.8.3, browserslist@^4.8.5, browserslist@^4.9.1: - version "4.9.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.9.1.tgz#01ffb9ca31a1aef7678128fc6a2253316aa7287c" - integrity sha512-Q0DnKq20End3raFulq6Vfp1ecB9fh8yUNV55s8sekaDDeqBaCtWlRHCUdaWyUeSSBJM7IbM6HcsyaeYqgeDhnw== - dependencies: - caniuse-lite "^1.0.30001030" - electron-to-chromium "^1.3.363" - node-releases "^1.1.50" - -buffer-alloc-unsafe@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" - integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== - -buffer-alloc@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" - integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== - dependencies: - buffer-alloc-unsafe "^1.1.0" - buffer-fill "^1.0.0" - -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= - -buffer-equal-constant-time@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" - integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= - -buffer-fill@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" - integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= - -buffer@^4.3.0: - version "4.9.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" - integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg= - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= - -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - -cacache@^12.0.2: - version "12.0.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" - integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -cachedir@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-1.3.0.tgz#5e01928bf2d95b5edd94b0942188246740e0dbc4" - integrity sha512-O1ji32oyON9laVPJL1IZ5bmwd2cB46VfpxkDequezH+15FDzzVddEyrGEeX4WusDSqKxdyFdDQDEG1yo1GoWkg== - dependencies: - os-homedir "^1.0.1" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= - -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= - -camelcase@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - -camelcase@^5.0.0, camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelize@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" - integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= - -caniuse-lite@^1.0.30001030: - version "1.0.30001035" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001035.tgz#2bb53b8aa4716b2ed08e088d4dc816a5fe089a1e" - integrity sha512-C1ZxgkuA4/bUEdMbU5WrGY4+UhMFFiXrgNAfxiMIqWgFTWfv/xsZCS2xEHT2LMq7xAZfuAnu6mcqyDl0ZR6wLQ== - -capture-stack-trace@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" - integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -"chainsaw@>=0.0.7 <0.1": - version "0.0.9" - resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.0.9.tgz#11a05102d1c4c785b6d0415d336d5a3a1612913e" - integrity sha1-EaBRAtHEx4W20EFdM21aOhYSkT4= - dependencies: - traverse ">=0.3.0 <0.4" - -chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -check-more-types@2.24.0: - version "2.24.0" - resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" - integrity sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA= - -cheerio@^1.0.0-rc.2: - version "1.0.0-rc.3" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6" - integrity sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA== - dependencies: - css-select "~1.2.0" - dom-serializer "~0.1.1" - entities "~1.1.1" - htmlparser2 "^3.9.1" - lodash "^4.15.0" - parse5 "^3.0.1" - -chokidar@^2.0.2, chokidar@^2.1.5, chokidar@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -chownr@^1.0.1, chownr@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" - integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== - -chrome-trace-event@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" - integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== - dependencies: - tslib "^1.9.0" - -ci-info@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" - integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -classnames@^2.2.6: - version "2.2.6" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" - integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== - -cli-boxes@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" - integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= - -cli-cursor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" - integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc= - dependencies: - restore-cursor "^1.0.1" - -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - -cli-spinners@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" - integrity sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw= - -cli-truncate@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" - integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ= - dependencies: - slice-ansi "0.0.4" - string-width "^1.0.1" - -cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= - -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - -clsx@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.0.tgz#62937c6adfea771247c34b54d320fb99624f5702" - integrity sha512-3avwM37fSK5oP6M5rQ9CNe99lwxhXDOeSWVPAOYF6OazUTgZCMb0yWlJpmdD74REy1gkEaFiub2ULv4fq9GUhA== - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -colors@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" - integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg== - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@2.15.1: - version "2.15.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" - integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag== - -commander@^2.11.0, commander@^2.19.0, commander@^2.20.0: - version "2.20.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" - integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== - -commander@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - -common-tags@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" - integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -compressible@~2.0.16: - version "2.0.17" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.17.tgz#6e8c108a16ad58384a977f3a482ca20bff2f38c1" - integrity sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw== - dependencies: - mime-db ">= 1.40.0 < 2" - -compression@^1.7.3: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -concat-stream@1.6.2, concat-stream@^1.5.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -concurrently@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-5.1.0.tgz#05523986ba7aaf4b58a49ddd658fab88fa783132" - integrity sha512-9ViZMu3OOCID3rBgU31mjBftro2chOop0G2u1olq1OuwRBVRw/GxHTg80TVJBUTJfoswMmEUeuOg1g1yu1X2dA== - dependencies: - chalk "^2.4.2" - date-fns "^2.0.1" - lodash "^4.17.15" - read-pkg "^4.0.1" - rxjs "^6.5.2" - spawn-command "^0.0.2-1" - supports-color "^6.1.0" - tree-kill "^1.2.2" - yargs "^13.3.0" - -configstore@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" - integrity sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw== - dependencies: - dot-prop "^4.1.0" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - unique-string "^1.0.0" - write-file-atomic "^2.0.0" - xdg-basedir "^3.0.0" - -console-browserify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" - integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA= - dependencies: - date-now "^0.1.4" - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= - -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= - -content-disposition@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== - dependencies: - safe-buffer "5.1.2" - -content-security-policy-builder@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/content-security-policy-builder/-/content-security-policy-builder-2.1.0.tgz#0a2364d769a3d7014eec79ff7699804deb8cfcbb" - integrity sha512-/MtLWhJVvJNkA9dVLAp6fg9LxD2gfI6R2Fi1hPmfjYXSahJJzcfvoeDOxSyp4NvxMuwWv3WMssE9o31DoULHrQ== - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -convert-source-map@^1.1.0, convert-source-map@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== - dependencies: - safe-buffer "~5.1.1" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= - -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" - integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== - -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -core-js-compat@^3.6.2: - version "3.6.4" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.4.tgz#938476569ebb6cda80d339bcf199fae4f16fff17" - integrity sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA== - dependencies: - browserslist "^4.8.3" - semver "7.0.0" - -core-js@^2.6.5: - version "2.6.11" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" - integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cors@^2.8.5: - version "2.8.5" - resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" - integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== - dependencies: - object-assign "^4" - vary "^1" - -create-ecdh@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" - integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== - dependencies: - bn.js "^4.1.0" - elliptic "^6.0.0" - -create-error-class@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" - integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= - dependencies: - capture-stack-trace "^1.0.0" - -create-hash@^1.1.0, create-hash@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" - integrity sha1-ElYDfsufDF9549bvE14wdwGEuYI= - dependencies: - lru-cache "^4.0.1" - which "^1.2.9" - -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -crypto-random-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= - -css-box-model@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-box-model/-/css-box-model-1.2.0.tgz#3a26377b4162b3200d2ede4b064ec5b6a75186d0" - integrity sha512-lri0br+jSNV0kkkiGEp9y9y3Njq2PmpqbeGWRFQJuZteZzY9iC9GZhQ8Y4WpPwM/2YocjHePxy14igJY7YKzkA== - dependencies: - tiny-invariant "^1.0.6" - -css-loader@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.2.0.tgz#bb570d89c194f763627fcf1f80059c6832d009b2" - integrity sha512-QTF3Ud5H7DaZotgdcJjGMvyDj5F3Pn1j/sC6VBEOVp94cbwqyIBdcs/quzj4MC1BKQSrTpQznegH/5giYbhnCQ== - dependencies: - camelcase "^5.3.1" - cssesc "^3.0.0" - icss-utils "^4.1.1" - loader-utils "^1.2.3" - normalize-path "^3.0.0" - postcss "^7.0.17" - postcss-modules-extract-imports "^2.0.0" - postcss-modules-local-by-default "^3.0.2" - postcss-modules-scope "^2.1.0" - postcss-modules-values "^3.0.0" - postcss-value-parser "^4.0.0" - schema-utils "^2.0.0" - -css-select@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - -css-vendor@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-2.0.7.tgz#4e6d53d953c187981576d6a542acc9fb57174bda" - integrity sha512-VS9Rjt79+p7M0WkPqcAza4Yq1ZHrsHrwf7hPL/bjQB+c1lwmAI+1FXxYTYt818D/50fFVflw0XKleiBN5RITkg== - dependencies: - "@babel/runtime" "^7.6.2" - is-in-browser "^1.0.2" - -css-what@2.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" - integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -csstype@^2.2.0, csstype@^2.5.2, csstype@^2.6.5, csstype@^2.6.7: - version "2.6.9" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.9.tgz#05141d0cd557a56b8891394c1911c40c8a98d098" - integrity sha512-xz39Sb4+OaTsULgUERcCk+TJj8ylkL4aSVDQiX/ksxbELSqwkgt4d4RD7fovIdgJGSuNYqwZEiVjYY5l0ask+Q== - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= - dependencies: - array-find-index "^1.0.1" - -cyclist@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= - -cypress@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-3.4.1.tgz#ca2e4e9864679da686c6a6189603efd409664c30" - integrity sha512-1HBS7t9XXzkt6QHbwfirWYty8vzxNMawGj1yI+Fu6C3/VZJ8UtUngMW6layqwYZzLTZV8tiDpdCNBypn78V4Dg== - dependencies: - "@cypress/listr-verbose-renderer" "0.4.1" - "@cypress/xvfb" "1.2.4" - arch "2.1.1" - bluebird "3.5.0" - cachedir "1.3.0" - chalk "2.4.2" - check-more-types "2.24.0" - commander "2.15.1" - common-tags "1.8.0" - debug "3.2.6" - execa "0.10.0" - executable "4.1.1" - extract-zip "1.6.7" - fs-extra "5.0.0" - getos "3.1.1" - is-ci "1.2.1" - is-installed-globally "0.1.0" - lazy-ass "1.6.0" - listr "0.12.0" - lodash "4.17.15" - log-symbols "2.2.0" - minimist "1.2.0" - moment "2.24.0" - ramda "0.24.1" - request "2.88.0" - request-progress "3.0.0" - supports-color "5.5.0" - tmp "0.1.0" - url "0.11.0" - yauzl "2.10.0" - -damerau-levenshtein@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz#780cf7144eb2e8dbd1c3bb83ae31100ccc31a414" - integrity sha512-CBCRqFnpu715iPmw1KrdOrzRqbdFwQTwAWyyyYS42+iAgHCuXZ+/TdMgQkUENPomxEz9z1BEzuQU2Xw0kUuAgA== - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -dasherize@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dasherize/-/dasherize-2.0.0.tgz#6d809c9cd0cf7bb8952d80fc84fa13d47ddb1308" - integrity sha1-bYCcnNDPe7iVLYD8hPoT1H3bEwg= - -date-fns@^1.27.2: - version "1.30.1" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" - integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== - -date-fns@^2.0.0-alpha.27: - version "2.11.1" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.11.1.tgz#197b8be1bbf5c5e6fe8bea817f0fe111820e7a12" - integrity sha512-3RdUoinZ43URd2MJcquzBbDQo+J87cSzB8NkXdZiN5ia1UNyep0oCyitfiL88+R7clGTeq/RniXAc16gWyAu1w== - -date-fns@^2.0.1: - version "2.9.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.9.0.tgz#d0b175a5c37ed5f17b97e2272bbc1fa5aec677d2" - integrity sha512-khbFLu/MlzLjEzy9Gh8oY1hNt/Dvxw3J6Rbc28cVoYWQaC1S3YI4xwkF9ZWcjDLscbZlY9hISMr66RFzZagLsA== - -date-now@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" - integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= - -debounce@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.0.tgz#44a540abc0ea9943018dc0eaa95cce87f65cd131" - integrity sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg== - -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@3.2.6, debug@^3.1.0, debug@^3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -debug@=3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@^4.0.1, debug@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - -decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= - dependencies: - mimic-response "^1.0.0" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -define-properties@^1.1.2, define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -des.js@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" - integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw= - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= - -detect-file@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" - integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= - -detect-libc@^1.0.2, detect-libc@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dijkstrajs@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.1.tgz#d3cd81221e3ea40742cfcde556d4e99e98ddc71b" - integrity sha1-082BIh4+pAdCz83lVtTpnpjdxxs= - -discontinuous-range@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" - integrity sha1-44Mx8IRLukm5qctxx3FYWqsbxlo= - -dns-prefetch-control@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/dns-prefetch-control/-/dns-prefetch-control-0.2.0.tgz#73988161841f3dcc81f47686d539a2c702c88624" - integrity sha512-hvSnros73+qyZXhHFjx2CMLwoj3Fe7eR9EJsFsqmcI1bB2OBWL/+0YzaEaKssCHnj/6crawNnUyw74Gm2EKe+Q== - -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-helpers@^5.0.1: - version "5.1.3" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.1.3.tgz#7233248eb3a2d1f74aafca31e52c5299cc8ce821" - integrity sha512-nZD1OtwfWGRBWlpANxacBEZrEuLa16o1nh7YopFWeoF68Zt8GGEmzHu6Xv4F3XaFIC+YXtTLrzgqKxFgLEe4jw== - dependencies: - "@babel/runtime" "^7.6.3" - csstype "^2.6.7" - -dom-serializer@0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.1.tgz#13650c850daffea35d8b626a4cfc4d3a17643fdb" - integrity sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - -dom-serializer@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" - integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== - dependencies: - domelementtype "^1.3.0" - entities "^1.1.1" - -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== - -domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domelementtype@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" - integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== - -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" - -domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^1.5.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - -dont-sniff-mimetype@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/dont-sniff-mimetype/-/dont-sniff-mimetype-1.1.0.tgz#c7d0427f8bcb095762751252af59d148b0a623b2" - integrity sha512-ZjI4zqTaxveH2/tTlzS1wFp+7ncxNZaIEWYg3lzZRHkKf5zPT/MnEG6WL0BhHMJUabkh8GeU5NL5j+rEUCb7Ug== - -dot-prop@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== - dependencies: - is-obj "^1.0.0" - -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ecdsa-sig-formatter@1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" - integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== - dependencies: - safe-buffer "^5.0.1" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -electron-to-chromium@^1.3.363: - version "1.3.376" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.376.tgz#7cb7b5205564a06c8f8ecfbe832cbd47a1224bb1" - integrity sha512-cv/PYVz5szeMz192ngilmezyPNFkUjuynuL2vNdiqIrio440nfTDdc0JJU0TS2KHLSVCs9gBbt4CFqM+HcBnjw== - -elegant-spinner@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" - integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= - -elliptic@^6.0.0: - version "6.5.1" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.1.tgz#c380f5f909bf1b9b4428d028cd18d3b0efd6b52b" - integrity sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg== - dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" - hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" - -emoji-regex@^6.1.0: - version "6.5.1" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" - integrity sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ== - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" - integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== - dependencies: - once "^1.4.0" - -enhanced-resolve@4.1.0, enhanced-resolve@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" - integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.4.0" - tapable "^1.0.0" - -entities@^1.1.1, entities@~1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - -entities@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" - integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== - -enzyme-adapter-react-16@^1.10.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.14.0.tgz#204722b769172bcf096cb250d33e6795c1f1858f" - integrity sha512-7PcOF7pb4hJUvjY7oAuPGpq3BmlCig3kxXGi2kFx0YzJHppqX1K8IIV9skT1IirxXlu8W7bneKi+oQ10QRnhcA== - dependencies: - enzyme-adapter-utils "^1.12.0" - has "^1.0.3" - object.assign "^4.1.0" - object.values "^1.1.0" - prop-types "^15.7.2" - react-is "^16.8.6" - react-test-renderer "^16.0.0-0" - semver "^5.7.0" - -enzyme-adapter-utils@^1.12.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.12.0.tgz#96e3730d76b872f593e54ce1c51fa3a451422d93" - integrity sha512-wkZvE0VxcFx/8ZsBw0iAbk3gR1d9hK447ebnSYBf95+r32ezBq+XDSAvRErkc4LZosgH8J7et7H7/7CtUuQfBA== - dependencies: - airbnb-prop-types "^2.13.2" - function.prototype.name "^1.1.0" - object.assign "^4.1.0" - object.fromentries "^2.0.0" - prop-types "^15.7.2" - semver "^5.6.0" - -enzyme@^3.9.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.10.0.tgz#7218e347c4a7746e133f8e964aada4a3523452f6" - integrity sha512-p2yy9Y7t/PFbPoTvrWde7JIYB2ZyGC+NgTNbVEGvZ5/EyoYSr9aG/2rSbVvyNvMHEhw9/dmGUJHWtfQIEiX9pg== - dependencies: - array.prototype.flat "^1.2.1" - cheerio "^1.0.0-rc.2" - function.prototype.name "^1.1.0" - has "^1.0.3" - html-element-map "^1.0.0" - is-boolean-object "^1.0.0" - is-callable "^1.1.4" - is-number-object "^1.0.3" - is-regex "^1.0.4" - is-string "^1.0.4" - is-subset "^0.1.1" - lodash.escape "^4.0.1" - lodash.isequal "^4.5.0" - object-inspect "^1.6.0" - object-is "^1.0.1" - object.assign "^4.1.0" - object.entries "^1.0.4" - object.values "^1.0.4" - raf "^3.4.0" - rst-selector-parser "^2.2.3" - string.prototype.trim "^1.1.2" - -errno@^0.1.3, errno@~0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== - dependencies: - prr "~1.0.1" - -error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.10.0, es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.13.0, es-abstract@^1.5.1, es-abstract@^1.7.0: - version "1.14.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.14.2.tgz#7ce108fad83068c8783c3cdf62e504e084d8c497" - integrity sha512-DgoQmbpFNOofkjJtKwr87Ma5EW4Dc8fWhD0R+ndq7Oc456ivUfGOOP6oAZTTKl5/CcNMP+EN+e3/iUzgE0veZg== - dependencies: - es-to-primitive "^1.2.0" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.0" - is-callable "^1.1.4" - is-regex "^1.0.4" - object-inspect "^1.6.0" - object-keys "^1.1.1" - string.prototype.trimleft "^2.0.0" - string.prototype.trimright "^2.0.0" - -es-to-primitive@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" - integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -eslint-config-airbnb-base@^11.3.0: - version "11.3.2" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.3.2.tgz#8703b11abe3c88ac7ec2b745b7fdf52e00ae680a" - integrity sha512-/fhjt/VqzBA2SRsx7ErDtv6Ayf+XLw9LIOqmpBuHFCVwyJo2EtzGWMB9fYRFBoWWQLxmNmCpenNiH0RxyeS41w== - dependencies: - eslint-restricted-globals "^0.1.1" - -eslint-config-airbnb@^15.1.0: - version "15.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-15.1.0.tgz#fd432965a906e30139001ba830f58f73aeddae8e" - integrity sha512-m0q9fiMBzDAIbirlGnpJNWToIhdhJmXXnMG+IFflYzzod9231ZhtmGKegKg8E9T8F1YuVaDSU1FnCm5b9iXVhQ== - dependencies: - eslint-config-airbnb-base "^11.3.0" - -eslint-config-prettier@^2.6.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.10.0.tgz#ec07bc1d01f87d09f61d3840d112dc8a9791e30b" - integrity sha512-Mhl90VLucfBuhmcWBgbUNtgBiK955iCDK1+aHAz7QfDQF6wuzWZ6JjihZ3ejJoGlJWIuko7xLqNm8BA5uenKhA== - dependencies: - get-stdin "^5.0.1" - -eslint-import-resolver-node@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" - integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== - dependencies: - debug "^2.6.9" - resolve "^1.5.0" - -eslint-module-utils@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz#7b4675875bf96b0dbf1b21977456e5bb1f5e018c" - integrity sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw== - dependencies: - debug "^2.6.8" - pkg-dir "^2.0.0" - -eslint-plugin-import@^2.7.0: - version "2.18.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz#02f1180b90b077b33d447a17a2326ceb400aceb6" - integrity sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ== - dependencies: - array-includes "^3.0.3" - contains-path "^0.1.0" - debug "^2.6.9" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.2" - eslint-module-utils "^2.4.0" - has "^1.0.3" - minimatch "^3.0.4" - object.values "^1.1.0" - read-pkg-up "^2.0.0" - resolve "^1.11.0" - -eslint-plugin-jsx-a11y@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.1.1.tgz#5c96bb5186ca14e94db1095ff59b3e2bd94069b1" - integrity sha512-5I9SpoP7gT4wBFOtXT8/tXNPYohHBVfyVfO17vkbC7r9kEIxYJF12D3pKqhk8+xnk12rfxKClS3WCFpVckFTPQ== - dependencies: - aria-query "^0.7.0" - array-includes "^3.0.3" - ast-types-flow "0.0.7" - axobject-query "^0.1.0" - damerau-levenshtein "^1.0.0" - emoji-regex "^6.1.0" - jsx-ast-utils "^1.4.0" - -eslint-plugin-prettier@^2.3.1: - version "2.7.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz#b4312dcf2c1d965379d7f9d5b5f8aaadc6a45904" - integrity sha512-CStQYJgALoQBw3FsBzH0VOVDRnJ/ZimUlpLm226U8qgqYJfPOY/CPK6wyRInMxh73HSKg5wyRwdS4BVYYHwokA== - dependencies: - fast-diff "^1.1.1" - jest-docblock "^21.0.0" - -eslint-plugin-react@^7.4.0: - version "7.14.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.14.3.tgz#911030dd7e98ba49e1b2208599571846a66bdf13" - integrity sha512-EzdyyBWC4Uz2hPYBiEJrKCUi2Fn+BJ9B/pJQcjw5X+x/H2Nm59S4MJIvL4O5NEE0+WbnQwEBxWY03oUk+Bc3FA== - dependencies: - array-includes "^3.0.3" - doctrine "^2.1.0" - has "^1.0.3" - jsx-ast-utils "^2.1.0" - object.entries "^1.1.0" - object.fromentries "^2.0.0" - object.values "^1.1.0" - prop-types "^15.7.2" - resolve "^1.10.1" - -eslint-restricted-globals@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" - integrity sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc= - -eslint-scope@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-scope@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" - integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-utils@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.2.tgz#166a5180ef6ab7eb462f162fd0e6f2463d7309ab" - integrity sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q== - dependencies: - eslint-visitor-keys "^1.0.0" - -eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" - integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== - -eslint@^6.1.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.3.0.tgz#1f1a902f67bfd4c354e7288b81e40654d927eb6a" - integrity sha512-ZvZTKaqDue+N8Y9g0kp6UPZtS4FSY3qARxBs7p4f0H0iof381XHduqVerFWtK8DPtKmemqbqCFENWSQgPR/Gow== - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.10.0" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" - doctrine "^3.0.0" - eslint-scope "^5.0.0" - eslint-utils "^1.4.2" - eslint-visitor-keys "^1.1.0" - espree "^6.1.1" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^11.7.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - inquirer "^6.4.1" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.14" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^6.1.2" - strip-ansi "^5.2.0" - strip-json-comments "^3.0.1" - table "^5.2.3" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -esm@^3.0.84: - version "3.2.25" - resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" - integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== - -espree@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.1.tgz#7f80e5f7257fc47db450022d723e356daeb1e5de" - integrity sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ== - dependencies: - acorn "^7.0.0" - acorn-jsx "^5.0.2" - eslint-visitor-keys "^1.1.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" - integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== - dependencies: - estraverse "^4.0.0" - -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== - dependencies: - estraverse "^4.1.0" - -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -esutils@^2.0.0, esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - -events@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" - integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -execa@0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" - integrity sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw== - dependencies: - cross-spawn "^6.0.0" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -executable@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" - integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== - dependencies: - pify "^2.2.0" - -exit-hook@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" - integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g= - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-template@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-1.1.1.tgz#981f188c0c3a87d2e28f559bc541426ff94f21dd" - integrity sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg== - -expand-tilde@^2.0.0, expand-tilde@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" - integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= - dependencies: - homedir-polyfill "^1.0.1" - -expect-ct@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/expect-ct/-/expect-ct-0.2.0.tgz#3a54741b6ed34cc7a93305c605f63cd268a54a62" - integrity sha512-6SK3MG/Bbhm8MsgyJAylg+ucIOU71/FzyFalcfu5nY19dH8y/z0tBJU0wrNBXD4B27EoQtqPF/9wqH0iYAd04g== - -express@^4.16.4: - version "4.17.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" - integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== - dependencies: - accepts "~1.3.7" - array-flatten "1.1.1" - body-parser "1.19.0" - content-disposition "0.5.3" - content-type "~1.0.4" - cookie "0.4.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "~1.1.2" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.5" - qs "6.7.0" - range-parser "~1.2.1" - safe-buffer "5.1.2" - send "0.17.1" - serve-static "1.14.1" - setprototypeof "1.1.1" - statuses "~1.5.0" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extract-zip@1.6.7: - version "1.6.7" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9" - integrity sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k= - dependencies: - concat-stream "1.6.2" - debug "2.6.9" - mkdirp "0.5.1" - yauzl "2.4.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -fast-deep-equal@2.0.1, fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= - -fast-diff@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - -fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= - -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fd-slicer@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" - integrity sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU= - dependencies: - pend "~1.2.0" - -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= - dependencies: - pend "~1.2.0" - -feature-policy@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/feature-policy/-/feature-policy-0.3.0.tgz#7430e8e54a40da01156ca30aaec1a381ce536069" - integrity sha512-ZtijOTFN7TzCujt1fnNhfWPFPSHeZkesff9AXZj+UEjYBynWNUIYpC87Ve4wHzyexQsImicLu7WsC2LHq7/xrQ== - -figgy-pudding@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" - integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== - -figures@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== - dependencies: - flat-cache "^2.0.1" - -filefy@0.1.10: - version "0.1.10" - resolved "https://registry.yarnpkg.com/filefy/-/filefy-0.1.10.tgz#174677c8e2fa5bc39a3af0ed6fb492f16b8fbf42" - integrity sha512-VgoRVOOY1WkTpWH+KBy8zcU1G7uQTVsXqhWEgzryB9A5hg2aqCyZ6aQ/5PSzlqM5+6cnVrX6oYV0XqD3HZSnmQ== - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -finalhandler@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - -find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -findup-sync@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" - integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== - dependencies: - detect-file "^1.0.0" - is-glob "^4.0.0" - micromatch "^3.0.4" - resolve-dir "^1.0.1" - -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - -flatted@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" - integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== - -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - -follow-redirects@1.5.10: - version "1.5.10" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" - integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== - dependencies: - debug "=3.1.0" - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - -frameguard@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/frameguard/-/frameguard-3.1.0.tgz#bd1442cca1d67dc346a6751559b6d04502103a22" - integrity sha512-TxgSKM+7LTA6sidjOiSZK9wxY0ffMPY3Wta//MqwmX0nZuEHc8QrkV8Fh3ZhMJeiH+Uyh/tcaarImRy8u77O7g== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= - -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" - integrity sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-minipass@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" - integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ== - dependencies: - minipass "^2.2.1" - -fs-readdir-recursive@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" - integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== - -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^1.2.7: - version "1.2.9" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" - integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== - dependencies: - nan "^2.12.1" - node-pre-gyp "^0.12.0" - -fstream@^1.0.0, fstream@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" - integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - -function-bind@^1.0.2, function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -function.prototype.name@^1.1.0, function.prototype.name@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.1.tgz#6d252350803085abc2ad423d4fe3be2f9cbda392" - integrity sha512-e1NzkiJuw6xqVH7YSdiW/qDHebcmMhPNe6w+4ZYYEg0VA+LaLzx37RimbPLuonHhYGFGPx1ME2nSi74JiaCr/Q== - dependencies: - define-properties "^1.1.3" - function-bind "^1.1.1" - functions-have-names "^1.1.1" - is-callable "^1.1.4" - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -functions-have-names@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.1.1.tgz#79d35927f07b8e7103d819fed475b64ccf7225ea" - integrity sha512-U0kNHUoxwPNPWOJaMG7Z00d4a/qZVrFtzWJRaK8V9goaVOCXBSQSJpt3MYGNtkScKEBKovxLjnNdC9MlXwo5Pw== - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -gaze@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" - integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== - dependencies: - globule "^1.0.0" - -gensync@^1.0.0-beta.1: - version "1.0.0-beta.1" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" - integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== - -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== - -get-caller-file@^2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= - -get-stdin@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" - integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g= - -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -getos@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/getos/-/getos-3.1.1.tgz#967a813cceafee0156b0483f7cffa5b3eff029c5" - integrity sha512-oUP1rnEhAr97rkitiszGP9EgDVYnmchgFzfqRzSkgtfv7ai6tEi7Ko8GgjNXts7VLWEqrTWyhsOKLe5C5b/Zkg== - dependencies: - async "2.6.1" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-parent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.0.0.tgz#1dc99f0f39b006d3e92c2c284068382f0c20e954" - integrity sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg== - dependencies: - is-glob "^4.0.1" - -glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.1: - version "7.1.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-dirs@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" - integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= - dependencies: - ini "^1.3.4" - -global-modules@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - -globals@^11.1.0, globals@^11.7.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globule@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d" - integrity sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ== - dependencies: - glob "~7.1.1" - lodash "~4.17.10" - minimatch "~3.0.2" - -got@^6.7.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" - integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= - dependencies: - create-error-class "^3.0.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-redirect "^1.0.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - lowercase-keys "^1.0.0" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - unzip-response "^2.0.1" - url-parse-lax "^1.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.2.2" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" - integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.0: - version "5.1.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" - integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== - dependencies: - ajv "^6.5.5" - har-schema "^2.0.0" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.0.0" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.1, has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -"hashish@>=0.0.2 <0.1": - version "0.0.4" - resolved "https://registry.yarnpkg.com/hashish/-/hashish-0.0.4.tgz#6d60bc6ffaf711b6afd60e426d077988014e6554" - integrity sha1-bWC8b/r3Ebav1g5CbQd5iAFOZVQ= - dependencies: - traverse ">=0.2.4" - -helmet-crossdomain@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/helmet-crossdomain/-/helmet-crossdomain-0.4.0.tgz#5f1fe5a836d0325f1da0a78eaa5fd8429078894e" - integrity sha512-AB4DTykRw3HCOxovD1nPR16hllrVImeFp5VBV9/twj66lJ2nU75DP8FPL0/Jp4jj79JhTfG+pFI2MD02kWJ+fA== - -helmet-csp@2.9.1: - version "2.9.1" - resolved "https://registry.yarnpkg.com/helmet-csp/-/helmet-csp-2.9.1.tgz#39939a84ca3657ee3cba96f296169ccab02f97d5" - integrity sha512-HgdXSJ6AVyXiy5ohVGpK6L7DhjI9KVdKVB1xRoixxYKsFXFwoVqtLKgDnfe3u8FGGKf9Ml9k//C9rnncIIAmyA== - dependencies: - bowser "2.5.4" - camelize "1.0.0" - content-security-policy-builder "2.1.0" - dasherize "2.0.0" - -helmet@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/helmet/-/helmet-3.21.0.tgz#e7c5e2ed3b8b7f42d2e387004a87198b295132cc" - integrity sha512-TS3GryQMPR7n/heNnGC0Cl3Ess30g8C6EtqZyylf+Y2/kF4lM8JinOR90rzIICsw4ymWTvji4OhDmqsqxkLrcg== - dependencies: - depd "2.0.0" - dns-prefetch-control "0.2.0" - dont-sniff-mimetype "1.1.0" - expect-ct "0.2.0" - feature-policy "0.3.0" - frameguard "3.1.0" - helmet-crossdomain "0.4.0" - helmet-csp "2.9.1" - hide-powered-by "1.1.0" - hpkp "2.0.0" - hsts "2.2.0" - ienoopen "1.1.0" - nocache "2.1.0" - referrer-policy "1.2.0" - x-xss-protection "1.3.0" - -hide-powered-by@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/hide-powered-by/-/hide-powered-by-1.1.0.tgz#be3ea9cab4bdb16f8744be873755ca663383fa7a" - integrity sha512-Io1zA2yOA1YJslkr+AJlWSf2yWFkKjvkcL9Ni1XSUqnGLr/qRQe2UI3Cn/J9MsJht7yEVCe0SscY1HgVMujbgg== - -history@^4.7.2: - version "4.9.0" - resolved "https://registry.yarnpkg.com/history/-/history-4.9.0.tgz#84587c2068039ead8af769e9d6a6860a14fa1bca" - integrity sha512-H2DkjCjXf0Op9OAr6nJ56fcRkTSNrUiv41vNJ6IswJjif6wlpZK0BTfFbi7qK9dXLSYZxkq5lBsj3vUjlYBYZA== - dependencies: - "@babel/runtime" "^7.1.2" - loose-envify "^1.2.0" - resolve-pathname "^2.2.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - value-equal "^0.4.0" - -hmac-drbg@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hoist-non-react-statics@^2.5.0: - version "2.5.5" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" - integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== - -hoist-non-react-statics@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b" - integrity sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA== - dependencies: - react-is "^16.7.0" - -hoist-non-react-statics@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" - integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== - dependencies: - react-is "^16.7.0" - -homedir-polyfill@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - dependencies: - parse-passwd "^1.0.0" - -hosted-git-info@^2.1.4: - version "2.8.4" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.4.tgz#44119abaf4bc64692a16ace34700fed9c03e2546" - integrity sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ== - -hpkp@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hpkp/-/hpkp-2.0.0.tgz#10e142264e76215a5d30c44ec43de64dee6d1672" - integrity sha1-EOFCJk52IVpdMMROxD3mTe5tFnI= - -hsts@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/hsts/-/hsts-2.2.0.tgz#09119d42f7a8587035d027dda4522366fe75d964" - integrity sha512-ToaTnQ2TbJkochoVcdXYm4HOCliNozlviNsg+X2XQLQvZNI/kCHR9rZxVYpJB3UPcHz80PgxRyWQ7PdU1r+VBQ== - dependencies: - depd "2.0.0" - -html-element-map@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/html-element-map/-/html-element-map-1.1.0.tgz#e5aab9a834caf883b421f8bd9eaedcaac887d63c" - integrity sha512-iqiG3dTZmy+uUaTmHarTL+3/A2VW9ox/9uasKEZC+R/wAtUrTcRlXPSaPqsnWPfIu8wqn09jQNwMRqzL54jSYA== - dependencies: - array-filter "^1.0.0" - -htmlparser2@^3.9.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" - integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== - dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.1" - -http-errors@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -http@^0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/http/-/http-0.0.0.tgz#86e6326d29c5d039de9fac584a45689f929f4f72" - integrity sha1-huYybSnF0Dnen6xYSkVon5KfT3I= - -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= - -hyphenate-style-name@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz#097bb7fa0b8f1a9cf0bd5c734cf95899981a9b48" - integrity sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ== - -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -icss-utils@^4.0.0, icss-utils@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" - integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== - dependencies: - postcss "^7.0.14" - -ieee754@^1.1.4: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== - -ienoopen@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ienoopen/-/ienoopen-1.1.0.tgz#411e5d530c982287dbdc3bb31e7a9c9e32630974" - integrity sha512-MFs36e/ca6ohEKtinTJ5VvAJ6oDRAYFdYXweUnGY9L9vcoqFOU4n2ZhmJ0C4z/cwGZ3YIQRSB3XZ1+ghZkY5NQ== - -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= - -ignore-by-default@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" - integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= - -ignore-walk@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.2.tgz#99d83a246c196ea5c93ef9315ad7b0819c35069b" - integrity sha512-EXyErtpHbn75ZTsOADsfx6J/FPo6/5cjev46PXrcTpd8z3BoRkXgYu9/JVqrI7tusjmwCZutGeRJeU0Wo1e4Cw== - dependencies: - minimatch "^3.0.4" - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -immutable@^4.0.0-rc.12: - version "4.0.0-rc.12" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0-rc.12.tgz#ca59a7e4c19ae8d9bf74a97bdf0f6e2f2a5d0217" - integrity sha512-0M2XxkZLx/mi3t8NVwIm1g8nHoEmM9p9UBl/G9k4+hm0kBgOVdMV/B3CY5dQ8qG8qc80NN4gDV4HQv6FTJ5q7A== - -import-fresh@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118" - integrity sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= - -import-local@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== - dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -in-publish@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" - integrity sha1-4g/146KvwmkDILbcVSaCqcf631E= - -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= - dependencies: - repeating "^2.0.0" - -indent-string@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= - -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= - -infer-owner@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - -inquirer@^6.4.1: - version "6.5.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" - integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== - dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" - -interpret@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" - integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== - -invariant@^2.2.2, invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= - -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" - integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== - -ipaddr.js@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" - integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA== - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - -is-boolean-object@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93" - integrity sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M= - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-buffer@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725" - integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw== - -is-callable@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== - -is-ci@1.2.1, is-ci@^1.0.10: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" - integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== - dependencies: - ci-info "^1.5.0" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0, is-glob@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-in-browser@^1.0.2, is-in-browser@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" - integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU= - -is-installed-globally@0.1.0, is-installed-globally@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" - integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= - dependencies: - global-dirs "^0.1.0" - is-path-inside "^1.0.0" - -is-npm@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" - integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= - -is-number-object@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz#f265ab89a9f445034ef6aff15a8f00b00f551799" - integrity sha1-8mWrian0RQNO9q/xWo8AsA9VF5k= - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - -is-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= - dependencies: - path-is-inside "^1.0.1" - -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= - -is-redirect@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" - integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= - -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= - dependencies: - has "^1.0.1" - -is-retry-allowed@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" - integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== - -is-stream@^1.0.0, is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -is-string@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz#cc3a9b69857d621e963725a24caeec873b826e64" - integrity sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ= - -is-subset@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" - integrity sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY= - -is-symbol@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" - integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== - dependencies: - has-symbols "^1.0.0" - -is-typedarray@^1.0.0, is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= - -is-windows@^1.0.1, is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isarray@^2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -jest-docblock@^21.0.0: - version "21.2.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" - integrity sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw== - -jloboescalona-eslint-config@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/jloboescalona-eslint-config/-/jloboescalona-eslint-config-1.1.0.tgz#d5200ee0263c626e869180429ace53cce111afc5" - integrity sha512-IRQPFxMsgERhiEkHGLdB/ULIYFfuqE2aPqhIiQ7/keOamjmSlGUQTjZNFO8RFyn6Ma0MQRIaSqn2rhcH+HPn3w== - dependencies: - eslint-config-airbnb "^15.1.0" - eslint-config-prettier "^2.6.0" - eslint-plugin-import "^2.7.0" - eslint-plugin-jsx-a11y "^5.1.1" - eslint-plugin-prettier "^2.3.1" - eslint-plugin-react "^7.4.0" - prettier "^1.7.4" - -js-base64@^2.1.8: - version "2.5.1" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121" - integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw== - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== - dependencies: - minimist "^1.2.0" - -json5@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6" - integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ== - dependencies: - minimist "^1.2.0" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - -jsonwebtoken@^8.5.1: - version "8.5.1" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" - integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== - dependencies: - jws "^3.2.2" - lodash.includes "^4.3.0" - lodash.isboolean "^3.0.3" - lodash.isinteger "^4.0.4" - lodash.isnumber "^3.0.3" - lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.once "^4.0.0" - ms "^2.1.1" - semver "^5.6.0" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -jss-plugin-camel-case@^10.0.3: - version "10.0.4" - resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.0.4.tgz#3dedecec1e5bba0bf6141c2c05e2ab11ea4b468d" - integrity sha512-+wnqxJsyfUnOn0LxVg3GgZBSjfBCrjxwx7LFxwVTUih0ceGaXKZoieheNOaTo5EM4w8bt1nbb8XonpQCj67C6A== - dependencies: - "@babel/runtime" "^7.3.1" - hyphenate-style-name "^1.0.3" - jss "10.0.4" - -jss-plugin-default-unit@^10.0.3: - version "10.0.4" - resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.0.4.tgz#df03885de20f20a1fc1c21bdb7c62e865ee400d9" - integrity sha512-T0mhL/Ogp/quvod/jAHEqKvptLDxq7Cj3a+7zRuqK8HxUYkftptN89wJElZC3rshhNKiogkEYhCWenpJdFvTBg== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.0.4" - -jss-plugin-global@^10.0.3: - version "10.0.4" - resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.0.4.tgz#412245b56133cc88bec654a70d82d5922619f4c5" - integrity sha512-N8n9/GHENZce+sqE4UYiZiJtI+t+erT/BypHOrNYAfIoNEj7OYsOEKfIo2P0GpLB3QyDAYf5eo9XNdZ8veEkUA== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.0.4" - -jss-plugin-nested@^10.0.3: - version "10.0.4" - resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.0.4.tgz#4d15ad13995fb6e4125618006473a096d2475d75" - integrity sha512-QM21BKVt8LDeoRfowvAMh/s+/89VYrreIIE6ch4pvw0oAXDWw1iorUPlqLZ7uCO3UL0uFtQhJq3QMLN6Lr1v0A== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.0.4" - tiny-warning "^1.0.2" - -jss-plugin-props-sort@^10.0.3: - version "10.0.4" - resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.0.4.tgz#43c880ff8dfcf858f809f663ece5e65a1d945b5a" - integrity sha512-WoETdOCjGskuin/OMt2uEdDPLZF3vfQuHXF+XUHGJrq0BAapoyGQDcv37SeReDlkRAbVXkEZPsIMvYrgHSHFiA== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.0.4" - -jss-plugin-rule-value-function@^10.0.3: - version "10.0.4" - resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.0.4.tgz#2f4cf4a86ad3eba875bb48cb9f4a7ed35cb354e7" - integrity sha512-0hrzOSWRF5ABJGaHrlnHbYZjU877Ofzfh2id3uLtBvemGQLHI+ldoL8/+6iPSRa7M8z8Ngfg2vfYhKjUA5gA0g== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.0.4" - -jss-plugin-vendor-prefixer@^10.0.3: - version "10.0.4" - resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.0.4.tgz#1626ef612a4541cff17cf96815e1740155214ed2" - integrity sha512-4JgEbcrdeMda1qvxTm1CnxFJAWVV++VLpP46HNTrfH7VhVlvUpihnUNs2gAlKuRT/XSBuiWeLAkrTqF4NVrPig== - dependencies: - "@babel/runtime" "^7.3.1" - css-vendor "^2.0.7" - jss "10.0.4" - -jss@10.0.4, jss@^10.0.3: - version "10.0.4" - resolved "https://registry.yarnpkg.com/jss/-/jss-10.0.4.tgz#46ebdde1c40c9a079d64f3334cb88ae28fd90bfd" - integrity sha512-GqHmeDK83qbqMAVjxyPfN1qJVTKZne533a9bdCrllZukUM8npG/k+JumEPI86IIB5ifaZAHG2HAsUziyxOiooQ== - dependencies: - "@babel/runtime" "^7.3.1" - csstype "^2.6.5" - is-in-browser "^1.1.3" - tiny-warning "^1.0.2" - -jsx-ast-utils@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" - integrity sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE= - -jsx-ast-utils@^2.1.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.1.tgz#4d4973ebf8b9d2837ee91a8208cc66f3a2776cfb" - integrity sha512-v3FxCcAf20DayI+uxnCuw795+oOIkVu6EnJ1+kSzhqqTZHNkTZ7B66ZgLp4oLJ/gbA64cI0B7WRoHZMSRdyVRQ== - dependencies: - array-includes "^3.0.3" - object.assign "^4.1.0" - -jwa@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" - integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== - dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jws@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" - integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== - dependencies: - jwa "^1.4.1" - safe-buffer "^5.0.1" - -jwt-simple@^0.5.6: - version "0.5.6" - resolved "https://registry.yarnpkg.com/jwt-simple/-/jwt-simple-0.5.6.tgz#3357adec55b26547114157be66748995b75b333a" - integrity sha512-40aUybvhH9t2h71ncA1/1SbtTNCVZHgsTsTgqPUxGWDmUDrXyDf2wMNQKEbdBjbf4AI+fQhbECNTV6lWxQKUzg== - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== - -latest-version@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" - integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= - dependencies: - package-json "^4.0.0" - -lazy-ass@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" - integrity sha1-eZllXoZGwX8In90YfRUNMyTVRRM= - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= - dependencies: - invert-kv "^1.0.0" - -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" - integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== - dependencies: - invert-kv "^2.0.0" - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levenary@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" - integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== - dependencies: - leven "^3.1.0" - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -listr-silent-renderer@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" - integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= - -listr-update-renderer@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.2.0.tgz#ca80e1779b4e70266807e8eed1ad6abe398550f9" - integrity sha1-yoDhd5tOcCZoB+ju0a1qvjmFUPk= - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - elegant-spinner "^1.0.1" - figures "^1.7.0" - indent-string "^3.0.0" - log-symbols "^1.0.2" - log-update "^1.0.2" - strip-ansi "^3.0.1" - -listr-verbose-renderer@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#8206f4cf6d52ddc5827e5fd14989e0e965933a35" - integrity sha1-ggb0z21S3cWCfl/RSYng6WWTOjU= - dependencies: - chalk "^1.1.3" - cli-cursor "^1.0.2" - date-fns "^1.27.2" - figures "^1.7.0" - -listr@0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/listr/-/listr-0.12.0.tgz#6bce2c0f5603fa49580ea17cd6a00cc0e5fa451a" - integrity sha1-a84sD1YD+klYDqF81qAMwOX6RRo= - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - figures "^1.7.0" - indent-string "^2.1.0" - is-promise "^2.1.0" - is-stream "^1.1.0" - listr-silent-renderer "^1.1.1" - listr-update-renderer "^0.2.0" - listr-verbose-renderer "^0.4.0" - log-symbols "^1.0.2" - log-update "^1.0.2" - ora "^0.2.3" - p-map "^1.1.1" - rxjs "^5.0.0-beta.11" - stream-to-observable "^0.1.0" - strip-ansi "^3.0.1" - -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - -loader-runner@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" - integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== - -loader-utils@1.2.3, loader-utils@^1.0.2, loader-utils@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" - integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== - dependencies: - big.js "^5.2.2" - emojis-list "^2.0.0" - json5 "^1.0.1" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -lodash.escape@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" - integrity sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg= - -lodash.flattendeep@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" - integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= - -lodash.includes@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" - integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= - -lodash.isboolean@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" - integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= - -lodash.isequal@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= - -lodash.isinteger@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" - integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= - -lodash.isnumber@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" - integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= - -lodash.once@^4.0.0, lodash.once@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" - integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= - -lodash@4.17.15, lodash@^4.0.0, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@~4.17.10: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== - -log-symbols@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== - dependencies: - chalk "^2.0.1" - -log-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" - integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= - dependencies: - chalk "^1.0.0" - -log-update@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" - integrity sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE= - dependencies: - ansi-escapes "^1.0.0" - cli-cursor "^1.0.2" - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -lowercase-keys@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lru-cache@^4.0.1: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== - dependencies: - pify "^3.0.0" - -make-dir@^2.0.0, make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -mamacro@^0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" - integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA== - -map-age-cleaner@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - -mem@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" - integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^2.0.0" - p-is-promise "^2.0.0" - -memoize-one@^5.0.4: - version "5.1.1" - resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.1.1.tgz#047b6e3199b508eaec03504de71229b8eb1d75c0" - integrity sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA== - -memory-fs@^0.4.0, memory-fs@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -meow@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= - -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@1.40.0: - version "1.40.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" - integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== - -"mime-db@>= 1.40.0 < 2": - version "1.41.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.41.0.tgz#9110408e1f6aa1b34aef51f2c9df3caddf46b6a0" - integrity sha512-B5gxBI+2K431XW8C2rcc/lhppbuji67nf9v39eH8pkWoZDxnAL0PxdpH32KYRScniF8qDHBDlI+ipgg5WrCUYw== - -mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.24" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" - integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== - dependencies: - mime-db "1.40.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -mimic-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= - -minimatch@^3.0.4, minimatch@~3.0.2: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - -minimist@1.2.0, minimist@^1.1.3, minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= - -minipass@^2.2.1, minipass@^2.3.5: - version "2.5.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.5.0.tgz#dddb1d001976978158a05badfcbef4a771612857" - integrity sha512-9FwMVYhn6ERvMR8XFdOavRz4QK/VJV8elU1x50vYexf9lslDcWe/f4HBRxCPd185ekRSjU6CfYyJCECa/CQy7Q== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minipass@^2.8.6: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" - integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== - dependencies: - minipass "^2.2.1" - -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - dependencies: - minimist "0.0.8" - -moment@2.24.0, moment@^2.24.0: - version "2.24.0" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" - integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== - -moo@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/moo/-/moo-0.4.3.tgz#3f847a26f31cf625a956a87f2b10fbc013bfd10e" - integrity sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw== - -morgan@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz#0a8d16734a1d9afbc824b99df87e738e58e2da59" - integrity sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA== - dependencies: - basic-auth "~2.0.0" - debug "2.6.9" - depd "~1.1.2" - on-finished "~2.3.0" - on-headers "~1.0.1" - -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -ms@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= - -nan@^2.10.0, nan@^2.12.1, nan@^2.13.2, nan@^2.14.0: - version "2.14.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" - integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -napi-build-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.1.tgz#1381a0f92c39d66bf19852e7873432fc2123e508" - integrity sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -nearley@^2.7.10: - version "2.19.0" - resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.19.0.tgz#37717781d0fd0f2bfc95e233ebd75678ca4bda46" - integrity sha512-2v52FTw7RPqieZr3Gth1luAXZR7Je6q3KaDHY5bjl/paDUdMu35fZ8ICNgiYJRr3tf3NMvIQQR1r27AvEr9CRA== - dependencies: - commander "^2.19.0" - moo "^0.4.3" - railroad-diagrams "^1.0.0" - randexp "0.4.6" - semver "^5.4.1" - -needle@^2.2.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" - integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== - -neo-async@^2.5.0, neo-async@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" - integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -nocache@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/nocache/-/nocache-2.1.0.tgz#120c9ffec43b5729b1d5de88cd71aa75a0ba491f" - integrity sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q== - -node-abi@^2.2.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.11.0.tgz#b7dce18815057544a049be5ae75cd1fdc2e9ea59" - integrity sha512-kuy/aEg75u40v378WRllQ4ZexaXJiCvB68D2scDXclp/I4cRq6togpbOoKhmN07tns9Zldu51NNERo0wehfX9g== - dependencies: - semver "^5.4.1" - -node-gyp@^3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" - integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== - dependencies: - fstream "^1.0.0" - glob "^7.0.3" - graceful-fs "^4.1.2" - mkdirp "^0.5.0" - nopt "2 || 3" - npmlog "0 || 1 || 2 || 3 || 4" - osenv "0" - request "^2.87.0" - rimraf "2" - semver "~5.3.0" - tar "^2.0.0" - which "1" - -node-libs-browser@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" - integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^3.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.1" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.11.0" - vm-browserify "^1.0.1" - -node-pre-gyp@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" - integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - -node-pre-gyp@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" - integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4.4.2" - -node-releases@^1.1.50: - version "1.1.52" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.52.tgz#bcffee3e0a758e92e44ecfaecd0a47554b0bcba9" - integrity sha512-snSiT1UypkgGt2wxPqS6ImEUICbNCMb31yaxWrOLXjhlt2z2/IBpaOxzONExqSm4y5oLnAqjjRWu+wsDzK5yNQ== - dependencies: - semver "^6.3.0" - -node-sass@^4.12.0: - version "4.12.0" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.12.0.tgz#0914f531932380114a30cc5fa4fa63233a25f017" - integrity sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ== - dependencies: - async-foreach "^0.1.3" - chalk "^1.1.1" - cross-spawn "^3.0.0" - gaze "^1.0.0" - get-stdin "^4.0.1" - glob "^7.0.3" - in-publish "^2.0.0" - lodash "^4.17.11" - meow "^3.7.0" - mkdirp "^0.5.1" - nan "^2.13.2" - node-gyp "^3.8.0" - npmlog "^4.0.0" - request "^2.88.0" - sass-graph "^2.2.4" - stdout-stream "^1.4.0" - "true-case-path" "^1.0.2" - -nodemon@^1.18.10: - version "1.19.2" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.19.2.tgz#b0975147dc99b3761ceb595b3f9277084931dcc0" - integrity sha512-hRLYaw5Ihyw9zK7NF+9EUzVyS6Cvgc14yh8CAYr38tPxJa6UrOxwAQ351GwrgoanHCF0FalQFn6w5eoX/LGdJw== - dependencies: - chokidar "^2.1.5" - debug "^3.1.0" - ignore-by-default "^1.0.1" - minimatch "^3.0.4" - pstree.remy "^1.1.6" - semver "^5.5.0" - supports-color "^5.2.0" - touch "^3.1.0" - undefsafe "^2.0.2" - update-notifier "^2.5.0" - -noop-logger@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" - integrity sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI= - -"nopt@2 || 3": - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= - dependencies: - abbrev "1" - -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= - dependencies: - abbrev "1" - osenv "^0.1.4" - -nopt@~1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" - integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= - dependencies: - abbrev "1" - -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-bundled@^1.0.1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" - integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== - -npm-packlist@^1.1.6: - version "1.4.4" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44" - integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.1, npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -nth-check@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-inspect@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" - integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== - -object-is@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" - integrity sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY= - -object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.entries@^1.0.4, object.entries@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519" - integrity sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.12.0" - function-bind "^1.1.1" - has "^1.0.3" - -object.fromentries@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.0.tgz#49a543d92151f8277b3ac9600f1e930b189d30ab" - integrity sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA== - dependencies: - define-properties "^1.1.2" - es-abstract "^1.11.0" - function-bind "^1.1.1" - has "^1.0.1" - -object.getownpropertydescriptors@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" - integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= - dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -object.values@^1.0.4, object.values@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" - integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.12.0" - function-bind "^1.1.1" - has "^1.0.3" - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.1, on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -one-datatable@sbbarragan/material-table#develop: - version "1.0.0" - resolved "https://codeload.github.com/sbbarragan/material-table/tar.gz/16132509339764bddcb5f4fbf16eaf15de8879db" - dependencies: - "@date-io/date-fns" "^1.1.0" - "@material-ui/pickers" "^3.2.2" - classnames "^2.2.6" - date-fns "^2.0.0-alpha.27" - debounce "^1.2.0" - fast-deep-equal "2.0.1" - filefy "0.1.10" - prop-types "^15.6.2" - react-beautiful-dnd "11.0.3" - react-double-scrollbar "0.0.15" - -onetime@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" - integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - -optionator@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - -ora@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" - integrity sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q= - dependencies: - chalk "^1.1.1" - cli-cursor "^1.0.2" - cli-spinners "^0.1.2" - object-assign "^4.0.1" - -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= - -os-homedir@^1.0.0, os-homedir@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= - dependencies: - lcid "^1.0.0" - -os-locale@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" - integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== - dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" - -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -osenv@0, osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-is-promise@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" - integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" - integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== - dependencies: - p-try "^2.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-map@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" - integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -package-json@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" - integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= - dependencies: - got "^6.7.1" - registry-auth-token "^3.0.1" - registry-url "^3.0.3" - semver "^5.1.0" - -pako@~1.0.5: - version "1.0.10" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" - integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== - -parallel-transform@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" - integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== - dependencies: - cyclist "^1.0.1" - inherits "^2.0.3" - readable-stream "^2.1.5" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-asn1@^5.0.0: - version "5.1.4" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.4.tgz#37f6628f823fbdeb2273b4d540434a22f3ef1fcc" - integrity sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw== - dependencies: - asn1.js "^4.0.0" - browserify-aes "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - dependencies: - error-ex "^1.2.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= - -parse5@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" - integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA== - dependencies: - "@types/node" "*" - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" - integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= - dependencies: - pinkie-promise "^2.0.0" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-is-inside@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= - -path-to-regexp@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" - integrity sha1-Wf3g9DW62suhA6hOnTvGTpa5k30= - dependencies: - isarray "0.0.1" - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= - dependencies: - pify "^2.0.0" - -pbkdf2@^3.0.3: - version "3.0.17" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" - integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= - -perfect-scrollbar@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/perfect-scrollbar/-/perfect-scrollbar-1.4.0.tgz#5d014ef9775e1f43058a1dbae9ed1daf0e7091f1" - integrity sha512-/2Sk/khljhdrsamjJYS5NjrH+GKEHEwh7zFSiYyxROyYKagkE4kSn2zDQDRTOMo8mpT2jikxx6yI1dG7lNP/hw== - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - -pify@^2.0.0, pify@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - dependencies: - find-up "^2.1.0" - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - -pngjs@^3.3.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" - integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== - -popper.js@^1.14.1: - version "1.16.1" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" - integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -postcss-modules-extract-imports@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" - integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== - dependencies: - postcss "^7.0.5" - -postcss-modules-local-by-default@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz#e8a6561be914aaf3c052876377524ca90dbb7915" - integrity sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ== - dependencies: - icss-utils "^4.1.1" - postcss "^7.0.16" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.0.0" - -postcss-modules-scope@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.1.0.tgz#ad3f5bf7856114f6fcab901b0502e2a2bc39d4eb" - integrity sha512-91Rjps0JnmtUB0cujlc8KIKCsJXWjzuxGeT/+Q2i2HXKZ7nBUeF9YQTZZTNvHVoNYj1AthsjnGLtqDUE0Op79A== - dependencies: - postcss "^7.0.6" - postcss-selector-parser "^6.0.0" - -postcss-modules-values@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" - integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== - dependencies: - icss-utils "^4.0.0" - postcss "^7.0.6" - -postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" - integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== - dependencies: - cssesc "^3.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-value-parser@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz#482282c09a42706d1fc9a069b73f44ec08391dc9" - integrity sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ== - -postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.17, postcss@^7.0.5, postcss@^7.0.6: - version "7.0.18" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.18.tgz#4b9cda95ae6c069c67a4d933029eddd4838ac233" - integrity sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g== - dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" - -prebuild-install@5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.2.1.tgz#87ba8cf17c65360a75eefeb3519e87973bf9791d" - integrity sha512-9DAccsInWHB48TBQi2eJkLPE049JuAI6FjIH0oIrij4bpDVEbX6JvlWRAcAAlUqBHhjgq0jNqA3m3bBXWm9v6w== - dependencies: - detect-libc "^1.0.3" - expand-template "^1.0.2" - github-from-package "0.0.0" - minimist "^1.2.0" - mkdirp "^0.5.1" - napi-build-utils "^1.0.1" - node-abi "^2.2.0" - noop-logger "^0.1.1" - npmlog "^4.0.1" - os-homedir "^1.0.1" - pump "^2.0.1" - rc "^1.2.7" - simple-get "^2.7.0" - tar-fs "^1.13.0" - tunnel-agent "^0.6.0" - which-pm-runs "^1.0.0" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -prepend-http@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= - -prettier@^1.7.4: - version "1.18.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" - integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== - -private@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= - -prop-types-exact@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/prop-types-exact/-/prop-types-exact-1.2.0.tgz#825d6be46094663848237e3925a98c6e944e9869" - integrity sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA== - dependencies: - has "^1.0.3" - object.assign "^4.1.0" - reflect.ownkeys "^0.2.0" - -prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: - version "15.7.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" - integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.8.1" - -proxy-addr@~2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" - integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ== - dependencies: - forwarded "~0.1.2" - ipaddr.js "1.9.0" - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - -psl@^1.1.24: - version "1.4.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.4.0.tgz#5dd26156cdb69fa1fdb8ab1991667d3f80ced7c2" - integrity sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw== - -pstree.remy@^1.1.6: - version "1.1.7" - resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.7.tgz#c76963a28047ed61542dc361aa26ee55a7fa15f3" - integrity sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A== - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - -pump@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" - integrity sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^2.0.0, pump@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= - -punycode@^1.2.4, punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -qrcode@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.4.2.tgz#e7c82a60140916d666541043bd2b0b72ee4e38a6" - integrity sha512-eR6RgxFYPDFH+zFLTJKtoNP/RlsHANQb52AUmQ2bGDPMuUw7jJb0F+DNEgx7qQGIElrbFxWYMc0/B91zLZPF9Q== - dependencies: - dijkstrajs "^1.0.1" - isarray "^2.0.1" - pngjs "^3.3.0" - yargs "^13.2.4" - -qs@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== - -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - -querystring-es3@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= - -raf-schd@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/raf-schd/-/raf-schd-4.0.2.tgz#bd44c708188f2e84c810bf55fcea9231bcaed8a0" - integrity sha512-VhlMZmGy6A6hrkJWHLNTGl5gtgMUm+xfGza6wbwnE914yeQ5Ybm18vgM734RZhMgfw4tacUrWseGZlpUrrakEQ== - -raf@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" - integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== - dependencies: - performance-now "^2.1.0" - -railroad-diagrams@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" - integrity sha1-635iZ1SN3t+4mcG5Dlc3RVnN234= - -ramda@0.24.1: - version "0.24.1" - resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.24.1.tgz#c3b7755197f35b8dc3502228262c4c91ddb6b857" - integrity sha1-w7d1UZfzW43DUCIoJixMkd22uFc= - -randexp@0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3" - integrity sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ== - dependencies: - discontinuous-range "1.0.0" - ret "~0.1.10" - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== - dependencies: - bytes "3.1.0" - http-errors "1.7.2" - iconv-lite "0.4.24" - unpipe "1.0.0" - -rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -react-addons-test-utils@^15.6.2: - version "15.6.2" - resolved "https://registry.yarnpkg.com/react-addons-test-utils/-/react-addons-test-utils-15.6.2.tgz#c12b6efdc2247c10da7b8770d185080a7b047156" - integrity sha1-wStu/cIkfBDae4dw0YUICnsEcVY= - -react-beautiful-dnd@11.0.3: - version "11.0.3" - resolved "https://registry.yarnpkg.com/react-beautiful-dnd/-/react-beautiful-dnd-11.0.3.tgz#5678bb3e725d8b56cb7cf57f56e952105fc4f2af" - integrity sha512-2FX2SnOlKMmfn90xUHCav7cxRWXwY7FeRa6TzdxWeX7DdP5JTvVQcsWgiOkdbJSj+J+1q1nA9QO4/HQ52D0DAA== - dependencies: - "@babel/runtime-corejs2" "^7.4.4" - css-box-model "^1.1.2" - memoize-one "^5.0.4" - raf-schd "^4.0.0" - react-redux "^7.0.3" - redux "^4.0.1" - tiny-invariant "^1.0.4" - use-memo-one "^1.1.0" - -react-dom@^16.8.6: - version "16.9.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.9.0.tgz#5e65527a5e26f22ae3701131bcccaee9fb0d3962" - integrity sha512-YFT2rxO9hM70ewk9jq0y6sQk8cL02xm4+IzYBz75CQGlClQQ1Bxq0nhHF6OtSbit+AIahujJgb/CPRibFkMNJQ== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.15.0" - -react-double-scrollbar@0.0.15: - version "0.0.15" - resolved "https://registry.yarnpkg.com/react-double-scrollbar/-/react-double-scrollbar-0.0.15.tgz#e915ab8cb3b959877075f49436debfdb04288fe4" - integrity sha1-6RWrjLO5WYdwdfSUNt6/2wQoj+Q= - -react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.6, react-is@^16.9.0: - version "16.9.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.9.0.tgz#21ca9561399aad0ff1a7701c01683e8ca981edcb" - integrity sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw== - -react-is@^16.8.0: - version "16.13.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.0.tgz#0f37c3613c34fe6b37cd7f763a0d6293ab15c527" - integrity sha512-GFMtL0vHkiBv9HluwNZTggSn/sCyEt9n02aM0dSAjGGyqyNlAyftYm4phPxdvCigG15JreC5biwxCgTAJZ7yAA== - -react-json-pretty@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/react-json-pretty/-/react-json-pretty-2.1.0.tgz#ba2fd96b26706c7455f72d8683e7d7a00f5c4e9f" - integrity sha512-TG5Ore8TWBrLydZ4Rz9TaifIOCL7EFXSFQBdXTY/lI/7Q5L4JJHvWXPF3/DXZOLteuW0pZ+g6gjNq0elGFAMvA== - dependencies: - prop-types "^15.6.2" - -react-perfect-scrollbar@^1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/react-perfect-scrollbar/-/react-perfect-scrollbar-1.5.3.tgz#a8a0051a5f737801d4f73d48af5369724c595787" - integrity sha512-2fVqbDJgOb1siCCJozGbv22cAHnh6TI9HFHRpM0lBJTPPM0ajgmsU75mBnI3k0ndryo+JiwUbLKACrurx1BjBw== - dependencies: - perfect-scrollbar "^1.4.0" - prop-types "^15.6.1" - -react-redux@^7.0.3: - version "7.2.0" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.0.tgz#f970f62192b3981642fec46fd0db18a074fe879d" - integrity sha512-EvCAZYGfOLqwV7gh849xy9/pt55rJXPwmYvI4lilPM5rUT/1NxuuN59ipdBksRVSvz0KInbPnp4IfoXJXCqiDA== - dependencies: - "@babel/runtime" "^7.5.5" - hoist-non-react-statics "^3.3.0" - loose-envify "^1.4.0" - prop-types "^15.7.2" - react-is "^16.9.0" - -react-redux@^7.1.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.1.1.tgz#ce6eee1b734a7a76e0788b3309bf78ff6b34fa0a" - integrity sha512-QsW0vcmVVdNQzEkrgzh2W3Ksvr8cqpAv5FhEk7tNEft+5pp7rXxAudTz3VOPawRkLIepItpkEIyLcN/VVXzjTg== - dependencies: - "@babel/runtime" "^7.5.5" - hoist-non-react-statics "^3.3.0" - invariant "^2.2.4" - loose-envify "^1.4.0" - prop-types "^15.7.2" - react-is "^16.9.0" - -react-router-dom@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-4.3.1.tgz#4c2619fc24c4fa87c9fd18f4fb4a43fe63fbd5c6" - integrity sha512-c/MlywfxDdCp7EnB7YfPMOfMD3tOtIjrQlj/CKfNMBxdmpJP8xcz5P/UAFn3JbnQCNUxsHyVVqllF9LhgVyFCA== - dependencies: - history "^4.7.2" - invariant "^2.2.4" - loose-envify "^1.3.1" - prop-types "^15.6.1" - react-router "^4.3.1" - warning "^4.0.1" - -react-router@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-4.3.1.tgz#aada4aef14c809cb2e686b05cee4742234506c4e" - integrity sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg== - dependencies: - history "^4.7.2" - hoist-non-react-statics "^2.5.0" - invariant "^2.2.4" - loose-envify "^1.3.1" - path-to-regexp "^1.7.0" - prop-types "^15.6.1" - warning "^4.0.1" - -react-test-renderer@^16.0.0-0: - version "16.9.0" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.9.0.tgz#7ed657a374af47af88f66f33a3ef99c9610c8ae9" - integrity sha512-R62stB73qZyhrJo7wmCW9jgl/07ai+YzvouvCXIJLBkRlRqLx4j9RqcLEAfNfU3OxTGucqR2Whmn3/Aad6L3hQ== - dependencies: - object-assign "^4.1.1" - prop-types "^15.6.2" - react-is "^16.9.0" - scheduler "^0.15.0" - -react-transition-group@^4.0.0, react-transition-group@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.3.0.tgz#fea832e386cf8796c58b61874a3319704f5ce683" - integrity sha512-1qRV1ZuVSdxPlPf4O8t7inxUGpdyO5zG9IoNfJxSO0ImU2A1YWkEQvFPuIPZmMLkg5hYs7vv5mMOyfgSkvAwvw== - dependencies: - "@babel/runtime" "^7.5.5" - dom-helpers "^5.0.1" - loose-envify "^1.4.0" - prop-types "^15.6.2" - -react@^16.8.6: - version "16.9.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.9.0.tgz#40ba2f9af13bc1a38d75dbf2f4359a5185c4f7aa" - integrity sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - -read-pkg@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237" - integrity sha1-ljYlN48+HE1IyFhytabsfV0JMjc= - dependencies: - normalize-package-data "^2.3.2" - parse-json "^4.0.0" - pify "^3.0.0" - -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.1.1: - version "3.4.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" - integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - -redux-thunk@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" - integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw== - -redux@^4.0.1: - version "4.0.5" - resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f" - integrity sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w== - dependencies: - loose-envify "^1.4.0" - symbol-observable "^1.2.0" - -redux@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.4.tgz#4ee1aeb164b63d6a1bcc57ae4aa0b6e6fa7a3796" - integrity sha512-vKv4WdiJxOWKxK0yRoaK3Y4pxxB0ilzVx6dszU2W8wLxlb2yikRph4iV/ymtdJ6ZxpBLFbyrxklnT5yBbQSl3Q== - dependencies: - loose-envify "^1.4.0" - symbol-observable "^1.2.0" - -referrer-policy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/referrer-policy/-/referrer-policy-1.2.0.tgz#b99cfb8b57090dc454895ef897a4cc35ef67a98e" - integrity sha512-LgQJIuS6nAy1Jd88DCQRemyE3mS+ispwlqMk3b0yjZ257fI1v9c+/p6SD5gP5FGyXUIgrNOAfmyioHwZtYv2VA== - -reflect.ownkeys@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz#749aceec7f3fdf8b63f927a04809e90c5c0b3460" - integrity sha1-dJrO7H8/34tj+SegSAnpDFwLNGA= - -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" - integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== - dependencies: - regenerate "^1.4.0" - -regenerate@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== - -regenerator-runtime@^0.13.2: - version "0.13.3" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" - integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw== - -regenerator-runtime@^0.13.4: - version "0.13.5" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" - integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== - -regenerator-transform@^0.14.2: - version "0.14.3" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.3.tgz#54aebff2ef58c0ae61e695ad1b9a9d65995fff78" - integrity sha512-zXHNKJspmONxBViAb3ZUmFoFPnTBs3zFhCEZJiwp/gkNzxVbTqNJVjYKx6Qk1tQ1P4XLf4TbH9+KBB7wGoAaUw== - dependencies: - "@babel/runtime" "^7.8.4" - private "^0.1.8" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== - -regexpu-core@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" - integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.2.0" - regjsgen "^0.5.1" - regjsparser "^0.6.4" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.2.0" - -registry-auth-token@^3.0.1: - version "3.4.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" - integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A== - dependencies: - rc "^1.1.6" - safe-buffer "^5.0.1" - -registry-url@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" - integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= - dependencies: - rc "^1.0.1" - -regjsgen@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" - integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== - -regjsparser@^0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" - integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== - dependencies: - jsesc "~0.5.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -remove@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/remove/-/remove-0.1.5.tgz#095ffd827d65c9f41ad97d33e416a75811079955" - integrity sha1-CV/9gn1lyfQa2X0z5BanWBEHmVU= - dependencies: - seq ">= 0.3.5" - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= - dependencies: - is-finite "^1.0.0" - -request-progress@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" - integrity sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4= - dependencies: - throttleit "^1.0.0" - -request@2.88.0, request@^2.87.0, request@^2.88.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" - integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.0" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.4.3" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= - dependencies: - resolve-from "^3.0.0" - -resolve-dir@^1.0.0, resolve-dir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-pathname@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-2.2.0.tgz#7e9ae21ed815fd63ab189adeee64dc831eefa879" - integrity sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg== - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.5.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" - integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== - dependencies: - path-parse "^1.0.6" - -resolve@^1.3.2: - version "1.15.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" - integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== - dependencies: - path-parse "^1.0.6" - -restore-cursor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" - integrity sha1-NGYfRohjJ/7SmRR5FSJS35LapUE= - dependencies: - exit-hook "^1.0.0" - onetime "^1.0.0" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -rifm@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/rifm/-/rifm-0.7.0.tgz#debe951a9c83549ca6b33e5919f716044c2230be" - integrity sha512-DSOJTWHD67860I5ojetXdEQRIBvF6YcpNe53j0vn1vp9EUb9N80EiZTxgP+FkDKorWC8PZw052kTF4C1GOivCQ== - dependencies: - "@babel/runtime" "^7.3.1" - -rimraf@2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -rst-selector-parser@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz#81b230ea2fcc6066c89e3472de794285d9b03d91" - integrity sha1-gbIw6i/MYGbInjRy3nlChdmwPZE= - dependencies: - lodash.flattendeep "^4.4.0" - nearley "^2.7.10" - -run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= - dependencies: - is-promise "^2.1.0" - -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= - dependencies: - aproba "^1.1.1" - -rxjs@^5.0.0-beta.11: - version "5.5.12" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc" - integrity sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw== - dependencies: - symbol-observable "1.0.1" - -rxjs@^6.4.0: - version "6.5.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" - integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA== - dependencies: - tslib "^1.9.0" - -rxjs@^6.5.2: - version "6.5.4" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" - integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q== - dependencies: - tslib "^1.9.0" - -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" - integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sass-graph@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" - integrity sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k= - dependencies: - glob "^7.0.0" - lodash "^4.0.0" - scss-tokenizer "^0.2.3" - yargs "^7.0.0" - -sax@1.2.x, sax@>=0.6.0, sax@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -scheduler@^0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.15.0.tgz#6bfcf80ff850b280fed4aeecc6513bc0b4f17f8e" - integrity sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -schema-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" - integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== - dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" - -schema-utils@^2.0.0, schema-utils@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.2.0.tgz#48a065ce219e0cacf4631473159037b2c1ae82da" - integrity sha512-5EwsCNhfFTZvUreQhx/4vVQpJ/lnCAkgoIHLhSpp4ZirE+4hzFvdJi0FMub6hxbFVBJYSpeVVmon+2e7uEGRrA== - dependencies: - ajv "^6.10.2" - ajv-keywords "^3.4.1" - -scss-tokenizer@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" - integrity sha1-jrBtualyMzOCTT9VMGQRSYR85dE= - dependencies: - js-base64 "^2.1.8" - source-map "^0.4.2" - -semver-diff@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" - integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= - dependencies: - semver "^5.0.3" - -"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - -semver@^6.1.2, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= - -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.7.2" - mime "1.6.0" - ms "2.1.1" - on-finished "~2.3.0" - range-parser "~1.2.1" - statuses "~1.5.0" - -"seq@>= 0.3.5": - version "0.3.5" - resolved "https://registry.yarnpkg.com/seq/-/seq-0.3.5.tgz#ae02af3a424793d8ccbf212d69174e0c54dffe38" - integrity sha1-rgKvOkJHk9jMvyEtaRdODFTf/jg= - dependencies: - chainsaw ">=0.0.7 <0.1" - hashish ">=0.0.2 <0.1" - -serialize-javascript@^1.7.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" - integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== - -serve-static@1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.17.1" - -set-blocking@^2.0.0, set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= - -simple-concat@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" - integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY= - -simple-get@^2.7.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.1.tgz#0e22e91d4575d87620620bc91308d57a77f44b5d" - integrity sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw== - dependencies: - decompress-response "^3.3.0" - once "^1.3.1" - simple-concat "^1.0.0" - -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== - -slice-ansi@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" - integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= - -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -source-list-map@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - -source-map-resolve@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== - dependencies: - atob "^2.1.1" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@~0.5.12: - version "0.5.13" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= - -source-map@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - integrity sha1-66T12pwNyZneaAMti092FzZSA2s= - dependencies: - amdefine ">=0.0.4" - -source-map@^0.5.0, source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -spawn-command@^0.0.2-1: - version "0.0.2-1" - resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0" - integrity sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A= - -spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== - -spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" - integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== - -speakeasy@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/speakeasy/-/speakeasy-2.0.0.tgz#85c91a071b09a5cb8642590d983566165f57613a" - integrity sha1-hckaBxsJpcuGQlkNmDVmFl9XYTo= - dependencies: - base32.js "0.0.1" - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -sprintf-js@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" - integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -ssri@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" - integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== - dependencies: - figgy-pudding "^3.5.1" - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -"statuses@>= 1.5.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -stdout-stream@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de" - integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA== - dependencies: - readable-stream "^2.0.1" - -stream-browserify@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" - integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-http@^2.7.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-shift@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" - integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= - -stream-to-observable@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.1.0.tgz#45bf1d9f2d7dc09bed81f1c307c430e68b84cffe" - integrity sha1-Rb8dny19wJvtgfHDB8Qw5ouEz/4= - -string-width@^1.0.1, string-width@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string.prototype.trim@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.0.tgz#75a729b10cfc1be439543dae442129459ce61e3d" - integrity sha512-9EIjYD/WdlvLpn987+ctkLf0FfvBefOCuiEr2henD8X+7jfwPnyvTdmW8OJhj5p+M0/96mBdynLWkxUr+rHlpg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.13.0" - function-bind "^1.1.1" - -string.prototype.trimleft@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.0.0.tgz#68b6aa8e162c6a80e76e3a8a0c2e747186e271ff" - integrity sha1-aLaqjhYsaoDnbjqKDC50cYbicf8= - dependencies: - define-properties "^1.1.2" - function-bind "^1.0.2" - -string.prototype.trimright@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.0.0.tgz#ab4a56d802a01fbe7293e11e84f24dc8164661dd" - integrity sha1-q0pW2AKgH75yk+EehPJNyBZGYd0= - dependencies: - define-properties "^1.1.2" - function-bind "^1.0.2" - -string_decoder@^1.0.0, string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= - dependencies: - is-utf8 "^0.2.0" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= - dependencies: - get-stdin "^4.0.1" - -strip-json-comments@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" - integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -style-loader@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.0.0.tgz#1d5296f9165e8e2c85d24eee0b7caf9ec8ca1f82" - integrity sha512-B0dOCFwv7/eY31a5PCieNwMgMhVGFe9w+rh7s/Bx8kfFkrth9zfTZquoYvdw8URgiqxObQKcpW51Ugz1HjfdZw== - dependencies: - loader-utils "^1.2.3" - schema-utils "^2.0.1" - -supports-color@5.5.0, supports-color@^5.2.0, supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@6.1.0, supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - -symbol-observable@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" - integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ= - -symbol-observable@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== - -table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - -tapable@^1.0.0, tapable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - -tar-fs@^1.13.0: - version "1.16.3" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.3.tgz#966a628841da2c4010406a82167cbd5e0c72d509" - integrity sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw== - dependencies: - chownr "^1.0.1" - mkdirp "^0.5.1" - pump "^1.0.0" - tar-stream "^1.1.2" - -tar-stream@^1.1.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" - integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== - dependencies: - bl "^1.0.0" - buffer-alloc "^1.2.0" - end-of-stream "^1.0.0" - fs-constants "^1.0.0" - readable-stream "^2.3.0" - to-buffer "^1.1.1" - xtend "^4.0.0" - -tar@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" - integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA== - dependencies: - block-stream "*" - fstream "^1.0.12" - inherits "2" - -tar@^4: - version "4.4.10" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" - integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.3.5" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" - -tar@^4.4.2: - version "4.4.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" - integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.8.6" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" - -term-size@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" - integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= - dependencies: - execa "^0.7.0" - -terser-webpack-plugin@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4" - integrity sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg== - dependencies: - cacache "^12.0.2" - find-cache-dir "^2.1.0" - is-wsl "^1.1.0" - schema-utils "^1.0.0" - serialize-javascript "^1.7.0" - source-map "^0.6.1" - terser "^4.1.2" - webpack-sources "^1.4.0" - worker-farm "^1.7.0" - -terser@^4.1.2: - version "4.3.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.3.1.tgz#09820bcb3398299c4b48d9a86aefc65127d0ed65" - integrity sha512-pnzH6dnFEsR2aa2SJaKb1uSCl3QmIsJ8dEkj0Fky+2AwMMcC9doMqLOQIH6wVTEKaVfKVvLSk5qxPBEZT9mywg== - dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -throttleit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" - integrity sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw= - -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -timed-out@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= - -timers-browserify@^2.0.4: - version "2.0.11" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" - integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== - dependencies: - setimmediate "^1.0.4" - -tiny-invariant@^1.0.2: - version "1.0.6" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73" - integrity sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA== - -tiny-invariant@^1.0.4, tiny-invariant@^1.0.6: - version "1.1.0" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" - integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw== - -tiny-warning@^1.0.0, tiny-warning@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" - integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== - -tmp@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877" - integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw== - dependencies: - rimraf "^2.6.3" - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= - -to-buffer@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" - integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== - -touch@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" - integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== - dependencies: - nopt "~1.0.10" - -tough-cookie@~2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== - dependencies: - psl "^1.1.24" - punycode "^1.4.1" - -traverse@>=0.2.4: - version "0.6.6" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" - integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= - -"traverse@>=0.3.0 <0.4": - version "0.3.9" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" - integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= - -tree-kill@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" - integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== - -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= - -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= - -"true-case-path@^1.0.2": - version "1.0.3" - resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d" - integrity sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew== - dependencies: - glob "^7.1.2" - -tslib@^1.9.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" - integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== - -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -type-is@~1.6.17, type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -undefsafe@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.2.tgz#225f6b9e0337663e0d8e7cfd686fc2836ccace76" - integrity sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY= - dependencies: - debug "^2.2.0" - -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" - integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" - integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -unique-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= - dependencies: - crypto-random-string "^1.0.0" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -unzip-response@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" - integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= - -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - -upcast@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/upcast/-/upcast-4.0.0.tgz#30c8397a8805be1f40b176f253c78f0f53d108f6" - integrity sha512-LS0LmQtEPyyM3Zk4Bb7dNpDVha0xD4Z/Ne3zAqal0hCU/nYjoYU7qic2MPKB+Lu+3h5vKSe2iVqvYnZjmLrAyQ== - dependencies: - esm "^3.0.84" - -update-notifier@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" - integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== - dependencies: - boxen "^1.2.1" - chalk "^2.0.1" - configstore "^3.0.0" - import-lazy "^2.1.0" - is-ci "^1.0.10" - is-installed-globally "^0.1.0" - is-npm "^1.0.0" - latest-version "^3.0.0" - semver-diff "^2.0.0" - xdg-basedir "^3.0.0" - -uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -url-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= - dependencies: - prepend-http "^1.0.1" - -url@0.11.0, url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use-memo-one@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/use-memo-one/-/use-memo-one-1.1.1.tgz#39e6f08fe27e422a7d7b234b5f9056af313bd22c" - integrity sha512-oFfsyun+bP7RX8X2AskHNTxu+R3QdE/RC5IefMbqptmACAA/gfol1KDD5KRzPsGMa62sWxGZw+Ui43u6x4ddoQ== - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -util.promisify@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== - dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" - -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= - dependencies: - inherits "2.0.1" - -util@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" - integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== - dependencies: - inherits "2.0.3" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - -uuid@^3.3.2: - version "3.3.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" - integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== - -v8-compile-cache@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" - integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w== - -v8-compile-cache@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" - integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -value-equal@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-0.4.0.tgz#c5bdd2f54ee093c04839d71ce2e4758a6890abc7" - integrity sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw== - -vary@^1, vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vm-browserify@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" - integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw== - -warning@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" - integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== - dependencies: - loose-envify "^1.0.0" - -watchpack@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" - integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== - dependencies: - chokidar "^2.0.2" - graceful-fs "^4.1.2" - neo-async "^2.5.0" - -webpack-cli@^3.3.7: - version "3.3.8" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.8.tgz#caeaebcc26f685db1736e5decd3f01aac30123ec" - integrity sha512-RANYSXwikSWINjHMd/mtesblNSpjpDLoYTBtP99n1RhXqVI/wxN40Auqy42I7y4xrbmRBoA5Zy5E0JSBD5XRhw== - dependencies: - chalk "2.4.2" - cross-spawn "6.0.5" - enhanced-resolve "4.1.0" - findup-sync "3.0.0" - global-modules "2.0.0" - import-local "2.0.0" - interpret "1.2.0" - loader-utils "1.2.3" - supports-color "6.1.0" - v8-compile-cache "2.0.3" - yargs "13.2.4" - -webpack-node-externals@^1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/webpack-node-externals/-/webpack-node-externals-1.7.2.tgz#6e1ee79ac67c070402ba700ef033a9b8d52ac4e3" - integrity sha512-ajerHZ+BJKeCLviLUUmnyd5B4RavLF76uv3cs6KNuO8W+HuQaEs0y0L7o40NQxdPy5w0pcv8Ew7yPUAQG0UdCg== - -webpack-sources@^1.4.0, webpack-sources@^1.4.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack@^4.29.5: - version "4.39.3" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.39.3.tgz#a02179d1032156b713b6ec2da7e0df9d037def50" - integrity sha512-BXSI9M211JyCVc3JxHWDpze85CvjC842EvpRsVTc/d15YJGlox7GIDd38kJgWrb3ZluyvIjgenbLDMBQPDcxYQ== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-module-context" "1.8.5" - "@webassemblyjs/wasm-edit" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" - acorn "^6.2.1" - ajv "^6.10.2" - ajv-keywords "^3.4.1" - chrome-trace-event "^1.0.2" - enhanced-resolve "^4.1.0" - eslint-scope "^4.0.3" - json-parse-better-errors "^1.0.2" - loader-runner "^2.4.0" - loader-utils "^1.2.3" - memory-fs "^0.4.1" - micromatch "^3.1.10" - mkdirp "^0.5.1" - neo-async "^2.6.1" - node-libs-browser "^2.2.1" - schema-utils "^1.0.0" - tapable "^1.1.3" - terser-webpack-plugin "^1.4.1" - watchpack "^1.6.0" - webpack-sources "^1.4.1" - -websocket@^1.0.30: - version "1.0.30" - resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.30.tgz#91d3bd00c3d43e916f0cf962f8f8c451bb0b2373" - integrity sha512-aO6klgaTdSMkhfl5VVJzD5fm+Srhh5jLYbS15+OiI1sN6h/RU/XW6WN9J1uVIpUKNmsTvT3Hs35XAFjn9NMfOw== - dependencies: - debug "^2.2.0" - nan "^2.14.0" - typedarray-to-buffer "^3.1.5" - yaeti "^0.0.6" - -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which-pm-runs@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" - integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= - -which@1, which@^1.2.14, which@^1.2.9, which@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - -widest-line@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" - integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== - dependencies: - string-width "^2.1.1" - -window-or-global@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/window-or-global/-/window-or-global-1.0.1.tgz#dbe45ba2a291aabc56d62cf66c45b7fa322946de" - integrity sha1-2+RboqKRqrxW1iz2bEW3+jIpRt4= - -wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - -worker-farm@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" - integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== - dependencies: - errno "~0.1.7" - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@^2.0.0: - version "2.4.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" - integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - -x-xss-protection@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/x-xss-protection/-/x-xss-protection-1.3.0.tgz#3e3a8dd638da80421b0e9fff11a2dbe168f6d52c" - integrity sha512-kpyBI9TlVipZO4diReZMAHWtS0MMa/7Kgx8hwG/EuZLiA6sg4Ah/4TRdASHhRRN3boobzcYgFRUFSgHRge6Qhg== - -xdg-basedir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" - integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= - -xml2js@^0.4.19: - version "0.4.22" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.22.tgz#4fa2d846ec803237de86f30aa9b5f70b6600de02" - integrity sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw== - dependencies: - sax ">=0.6.0" - util.promisify "~1.0.0" - xmlbuilder "~11.0.0" - -xmlbuilder@8.2.x: - version "8.2.2" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773" - integrity sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M= - -xmlbuilder@~11.0.0: - version "11.0.1" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" - integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== - -xmlrpc@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/xmlrpc/-/xmlrpc-1.3.2.tgz#26b2ea347848d028aac7e7514b5351976de3e83d" - integrity sha1-JrLqNHhI0Ciqx+dRS1NRl23j6D0= - dependencies: - sax "1.2.x" - xmlbuilder "8.2.x" - -xtend@^4.0.0, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= - -y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== - -yaeti@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" - integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc= - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" - integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== - -yaml@^1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.7.2.tgz#f26aabf738590ab61efaca502358e48dc9f348b2" - integrity sha512-qXROVp90sb83XtAoqE8bP9RwAkTTZbugRUTm5YeFCBfNRPEp2YzTeqWiz7m5OORHzEvrA/qcGS8hp/E+MMROYw== - dependencies: - "@babel/runtime" "^7.6.3" - -yargs-parser@^13.1.0, yargs-parser@^13.1.1: - version "13.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" - integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" - integrity sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo= - dependencies: - camelcase "^3.0.0" - -yargs@13.2.4: - version "13.2.4" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" - integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - os-locale "^3.1.0" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.0" - -yargs@^13.2.4, yargs@^13.3.0: - version "13.3.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" - integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.1" - -yargs@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" - integrity sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg= - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^5.0.0" - -yauzl@2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" - -yauzl@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" - integrity sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU= - dependencies: - fd-slicer "~1.0.1" - -zeromq@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/zeromq/-/zeromq-5.1.0.tgz#e96508f8babe851c1ea07c0edcedf8e7715947f6" - integrity sha512-wBEwnWaC1BQgcVoC4ZcERuIf+F0LdW12rblcwFNQANUGjJqQB1Ty3D59+WhvBJU9EliQw9Qc6V914gYXMzO6jw== - dependencies: - nan "^2.10.0" - prebuild-install "5.2.1" diff --git a/src/flow/lib/EventManager.rb b/src/flow/lib/EventManager.rb index f4afcd7639a..d03ed598e08 100644 --- a/src/flow/lib/EventManager.rb +++ b/src/flow/lib/EventManager.rb @@ -203,7 +203,7 @@ def wait_cooldown(client, service_id, role_name, cooldown_time) Log.info LOG_COMP, "Waiting #{cooldown_time}s for cooldown for " \ "service #{service_id} and role #{role_name}." - sleep cooldown_time + sleep cooldown_time.to_i @lcm.trigger_action(:cooldown_cb, service_id, @@ -395,10 +395,9 @@ def check_nodes(nodes, state, lcm_state, subscriber) def check_nodes_report(nodes) rc_nodes = { :successful => [], :failure => [] } - client = @cloud_auth.client nodes.delete_if do |node| - vm = OpenNebula::VirtualMachine.new_with_id(node, client) + vm = OpenNebula::VirtualMachine.new_with_id(node, @cloud_auth.client) vm.info diff --git a/src/flow/lib/LifeCycleManager.rb b/src/flow/lib/LifeCycleManager.rb index d2aec329914..64b0c106333 100644 --- a/src/flow/lib/LifeCycleManager.rb +++ b/src/flow/lib/LifeCycleManager.rb @@ -58,7 +58,7 @@ def initialize(client, concurrency, cloud_auth) @event_manager = EventManager.new(em_conf).am - @wd = ServiceWD.new(client, em_conf) + @wd = ServiceWD.new(em_conf) # Register Action Manager actions @am.register_action(ACTIONS['DEPLOY_CB'], @@ -94,7 +94,6 @@ def initialize(client, concurrency, cloud_auth) Thread.new do auto_scaler = ServiceAutoScaler.new(@srv_pool, - client, @cloud_auth, self) auto_scaler.start @@ -440,6 +439,41 @@ def recover_action(client, service_id, delete = false) rc end + # Update service template + # + # @param client [OpenNebula::Client] Client executing action + # @param service_id [Integer] Service ID + # @param new_tempalte [String] New template + def service_update(client, service_id, new_template) + rc = @srv_pool.get(service_id, client) do |service| + unless service.can_update? + break OpenNebula::Error.new( + "Service cannot be updated in state: #{service.state_str}" + ) + end + + rc = service.check_new_template(new_template) + + unless rc[0] + if rc[1] == 'name' + break OpenNebula::Error.new( + 'To change `service/name` use rename operation' + ) + else + break OpenNebula::Error.new( + "Immutable value: `#{rc[1]}` can not be changed" + ) + end + end + + service.update(new_template) + end + + Log.error LOG_COMP, rc.message if OpenNebula.is_error?(rc) + + rc + end + # Update role elasticity/schedule policies # # @param client [OpenNebula::Client] Client executing action @@ -768,7 +802,7 @@ def deploy_roles(client, roles, success_state, error_state, scale, report) action = :wait_deploy end - rc = roles.each do |name, role| + roles.each do |name, role| rc = role.deploy if !rc[0] @@ -788,8 +822,6 @@ def deploy_roles(client, roles, success_state, error_state, scale, report) rc[0], report) end - - rc end def undeploy_roles(client, roles, success_state, error_state, scale) @@ -799,7 +831,7 @@ def undeploy_roles(client, roles, success_state, error_state, scale) action = :wait_undeploy end - rc = roles.each do |name, role| + roles.each do |name, role| rc = role.shutdown(false) if !rc[0] @@ -820,8 +852,6 @@ def undeploy_roles(client, roles, success_state, error_state, scale) role.name, rc[0]) end - - rc end def set_cardinality(role, cardinality, force) diff --git a/src/flow/lib/ServiceAutoScaler.rb b/src/flow/lib/ServiceAutoScaler.rb index 44ede7fc390..b3c04d0c0fd 100644 --- a/src/flow/lib/ServiceAutoScaler.rb +++ b/src/flow/lib/ServiceAutoScaler.rb @@ -23,23 +23,21 @@ class ServiceAutoScaler # Class constructor # # @param service_pool [OpenNebula::ServicePool] Service pool - # @param clien [OpenNebula::Client] OpenNebula Client # @param cloud_auth [OpenNebula::CloudAuth] Cloud auth to get clients # @param lcm [LifeCycleManager] Lcm for flows - def initialize(service_pool, client, cloud_auth, lcm) + def initialize(service_pool, cloud_auth, lcm) @lcm = lcm @interval = cloud_auth.conf[:autoscaler_interval] @srv_pool = service_pool - @vm_pool = VirtualMachinePool.new(cloud_auth.client) @cloud_auth = cloud_auth - @client = client end # Start auto scaler loop def start loop do @srv_pool.info - @vm_pool.info_all_extended + vm_pool = VirtualMachinePool.new(client) + vm_pool.info_all_extended @srv_pool.each do |service| # fill service roles information @@ -51,7 +49,7 @@ def start 'Checking policies for ' \ "service: #{service.id}" - apply_scaling_policies(service) + apply_scaling_policies(service, vm_pool) end sleep(@interval) @@ -62,9 +60,6 @@ def start # Get OpenNebula client def client - # If there's a client defined use it - return @client unless @client.nil? - # If not, get one via cloud_auth @cloud_auth.client end @@ -73,9 +68,9 @@ def client # to SCALING. Only one role is set to scale. # # @param [OpenNebula::Service] service - def apply_scaling_policies(service) + def apply_scaling_policies(service, vm_pool) service.roles.each do |name, role| - diff, cooldown_duration = role.scale?(@vm_pool) + diff, cooldown_duration = role.scale?(vm_pool) policies = {} policies['elasticity_policies'] = role.elasticity_policies diff --git a/src/flow/lib/ServiceWatchDog.rb b/src/flow/lib/ServiceWatchDog.rb index 4d2ba2354b0..cab0932cfad 100644 --- a/src/flow/lib/ServiceWatchDog.rb +++ b/src/flow/lib/ServiceWatchDog.rb @@ -45,14 +45,13 @@ class ServiceWD # Class constructor # # @param options [Hash] event manager options - def initialize(client, options) + def initialize(options) @conf = DEFAULT_CONF.merge(options) @lcm = options[:lcm] @context = ZMQ::Context.new(1) @cloud_auth = @conf[:cloud_auth] @wait_timeout = @cloud_auth.conf[:wait_timeout] - @client = client # Array of running services to watch @mutex = Mutex.new @@ -154,9 +153,6 @@ def remove_service(service_id) # Get OpenNebula client def client - # If there's a client defined use it - return @client unless @client.nil? - # If not, get one via cloud_auth @cloud_auth.client end diff --git a/src/flow/lib/models.rb b/src/flow/lib/models.rb index 276573c07d7..a3271160a9e 100644 --- a/src/flow/lib/models.rb +++ b/src/flow/lib/models.rb @@ -25,8 +25,8 @@ require 'validator' -require 'models/role.rb' -require 'models/service_pool.rb' -require 'models/service.rb' -require 'models/service_template_pool.rb' -require 'models/service_template.rb' +require 'models/role' +require 'models/service_pool' +require 'models/service' +require 'models/service_template_pool' +require 'models/service_template' diff --git a/src/flow/lib/models/role.rb b/src/flow/lib/models/role.rb index 12dd8cd04c9..70e38099ba5 100644 --- a/src/flow/lib/models/role.rb +++ b/src/flow/lib/models/role.rb @@ -120,6 +120,22 @@ class Role 'DOWN' => 1 } + # List of attributes that can't be changed in update operation + # cardinality: this is internal information managed by OneFlow server + # last_vmname: this is internal information managed by OneFlow server + # nodes: this is internal information managed by OneFlow server + # parents: this has only sense in deploy operation + # state: this is internal information managed by OneFlow server + # vm_template: this will affect scale operation + IMMUTABLE_ATTRS = %w[ + cardinality + last_vmname + nodes + parents + state + vm_template + ] + # VM information to save in document VM_INFO = %w[ID UID GID UNAME GNAME NAME] @@ -468,7 +484,7 @@ def shutdown(recover) rc = shutdown_nodes(nodes, n_nodes, recover) unless rc[0] - return [false, "Error undeploying nodes for role #{id}"] + return [false, "Error undeploying nodes for role `#{name}`"] end [rc[1], nil] @@ -675,6 +691,22 @@ def update(template) nil end + # Check that changes values are correct + # + # @param template_json [String] New template + # + # @return [Boolean, String] True, nil if everything is correct + # False, attr if attr was changed + def check_new_template(template) + IMMUTABLE_ATTRS.each do |attr| + next if template[attr] == @body[attr] + + return [false, "role/#{attr}"] + end + + [true, nil] + end + ######################################################################## # Recover ######################################################################## diff --git a/src/flow/lib/models/service.rb b/src/flow/lib/models/service.rb index c018bcedbc2..26b30ff268a 100644 --- a/src/flow/lib/models/service.rb +++ b/src/flow/lib/models/service.rb @@ -80,6 +80,29 @@ class Service < DocumentJSON SCALING ] + # List of attributes that can't be changed in update operation + # + # custom_attrs: it only has sense when deploying, not in running + # custom_attrs_values: it only has sense when deploying, not in running + # deployment: changing this, changes the undeploy operation + # log: this is just internal information, no sense to change it + # name: this has to be changed using rename operation + # networks: it only has sense when deploying, not in running + # networks_values: it only has sense when deploying, not in running + # ready_status_gate: it only has sense when deploying, not in running + # state: this is internal information managed by OneFlow server + IMMUTABLE_ATTRS = %w[ + custom_attrs + custom_attrs_values + deployment + log + name + networks + networks_values + ready_status_gate + state + ] + LOG_COMP = 'SER' # Returns the service state @@ -123,6 +146,12 @@ def can_undeploy? end end + # Return true if the service can be updated + # @return true if the service can be updated, false otherwise + def can_update? + !transient_state? && !failed_state? + end + def can_recover_deploy? RECOVER_DEPLOY_STATES.include? STATE_STR[state] end @@ -471,6 +500,38 @@ def update_raw(template_raw, append = false) super(template_raw, append) end + # Check that changes values are correct + # + # @param template_json [String] New template + # + # @return [Boolean, String] True, nil if everything is correct + # False, attr if attr was changed + def check_new_template(template_json) + template = JSON.parse(template_json) + + if template['roles'].size != @roles.size + return [false, 'service/roles size'] + end + + IMMUTABLE_ATTRS.each do |attr| + next if template[attr] == @body[attr] + + return [false, "service/#{attr}"] + end + + template['roles'].each do |role| + # Role name can't be changed, if it is changed some problems + # may appear, as name is used to reference roles + return [false, 'name'] unless @roles[role['name']] + + rc = @roles[role['name']].check_new_template(role) + + return rc unless rc[0] + end + + [true, nil] + end + def deploy_networks body = JSON.parse(self['TEMPLATE/BODY']) diff --git a/src/flow/oneflow-server.rb b/src/flow/oneflow-server.rb index 7e62aafdb44..6eef749cdfa 100644 --- a/src/flow/oneflow-server.rb +++ b/src/flow/oneflow-server.rb @@ -236,6 +236,8 @@ def one_error_to_http(error) end post '/service/:id/action' do + #require 'pry-byebug' + #binding.pry action = JSON.parse(request.body.read)['action'] opts = action['params'] @@ -279,26 +281,6 @@ def one_error_to_http(error) rc = OpenNebula::Error.new("Action #{action['perform']}: " \ 'You have to specify a name') end - # when 'update' - # if opts && opts['append'] - # if opts['template_json'] - # begin - # service.update(opts['template_json'], true) - # status 204 - # rescue Validator::ParseException, JSON::ParserError => e - # OpenNebula::Error.new(e.message) - # end - # elsif opts['template_raw'] - # service.update_raw(opts['template_raw'], true) - # status 204 - # else - # OpenNebula::Error.new("Action #{action['perform']}: " \ - # 'You have to provide a template') - # end - # else - # OpenNebula::Error.new("Action #{action['perform']}: " \ - # 'Only supported for append') - # end when *Role::SCHEDULE_ACTIONS # Use defaults only if one of the options is supplied opts['period'] ||= conf[:action_period] @@ -323,6 +305,28 @@ def one_error_to_http(error) status 204 end +put '/service/:id' do + new_template = request.body.read + + begin + # Check that the JSON is valid + json_template = JSON.parse(new_template) + + # Check the schema of the new template + ServiceTemplate.validate(json_template) + rescue Validator::ParseException, JSON::ParserError => e + return internal_error(e.message, VALIDATION_EC) + end + + rc = lcm.service_update(@client, params[:id], new_template) + + if OpenNebula.is_error?(rc) + return internal_error(rc.message, one_error_to_http(rc.errno)) + end + + status 204 +end + # put '/service/:id/role/:name' do # service_pool = nil # OpenNebula::ServicePool.new(@client) # @@ -456,6 +460,8 @@ def one_error_to_http(error) s_template = OpenNebula::ServiceTemplate.new(xml, @client) begin + # require 'pry-byebug' + # binding.pry rc = s_template.allocate(request.body.read) rescue Validator::ParseException, JSON::ParserError => e return internal_error(e.message, VALIDATION_EC) diff --git a/src/group/Group.cc b/src/group/Group.cc index 2f4f73a5402..fd18fa831bb 100644 --- a/src/group/Group.cc +++ b/src/group/Group.cc @@ -17,18 +17,25 @@ #include "Group.h" #include "Nebula.h" #include "AclManager.h" +#include "AclRule.h" +#include "OneDB.h" #include -const char * Group::table = "group_pool"; +using namespace std; -const char * Group::db_names = - "oid, name, body, uid, gid, owner_u, group_u, other_u"; -const char * Group::db_bootstrap = "CREATE TABLE IF NOT EXISTS group_pool (" - "oid INTEGER PRIMARY KEY, name VARCHAR(128), body MEDIUMTEXT, uid INTEGER, " - "gid INTEGER, owner_u INTEGER, group_u INTEGER, other_u INTEGER, " - "UNIQUE(name))"; +Group::Group(int id, const string& name): + PoolObjectSQL(id,GROUP,name,-1,-1,"","",one_db::group_table), + quota(), + users("USERS"), + admins("ADMINS") +{ + // Allow users in this group to see it + group_u = 1; + + obj_template = new GroupTemplate; +} /* ************************************************************************ */ /* Group :: Database Access Functions */ @@ -138,7 +145,7 @@ int Group::insert_replace(SqlDB *db, bool replace, string& error_str) if ( replace ) { - oss << "UPDATE " << table << " SET " + oss << "UPDATE " << one_db::group_table << " SET " << "name = '" << sql_name << "', " << "body = '" << sql_xml << "', " << "uid = " << uid << ", " @@ -150,15 +157,16 @@ int Group::insert_replace(SqlDB *db, bool replace, string& error_str) } else { - oss << "INSERT INTO " << table << " (" << db_names << ") VALUES (" - << oid << "," - << "'" << sql_name << "'," - << "'" << sql_xml << "'," - << uid << "," - << gid << "," - << owner_u << "," - << group_u << "," - << other_u << ")"; + oss << "INSERT INTO " << one_db::group_table + << " (" << one_db::group_db_names << ") VALUES (" + << oid << "," + << "'" << sql_name << "'," + << "'" << sql_xml << "'," + << uid << "," + << gid << "," + << owner_u << "," + << group_u << "," + << other_u << ")"; } rc = db->exec_wr(oss); @@ -242,6 +250,16 @@ string& Group::to_xml_extended(string& xml, bool extended) const /* ------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------ */ +int Group::bootstrap(SqlDB * db) +{ + ostringstream oss_group(one_db::group_db_bootstrap); + + return db->exec_local_wr(oss_group); +} + +/* ------------------------------------------------------------------------ */ +/* ------------------------------------------------------------------------ */ + int Group::from_xml(const string& xml) { int rc = 0; diff --git a/src/group/GroupPool.cc b/src/group/GroupPool.cc index e370c6951b3..e35f5eb7c07 100644 --- a/src/group/GroupPool.cc +++ b/src/group/GroupPool.cc @@ -17,9 +17,12 @@ #include "GroupPool.h" #include "Nebula.h" #include "NebulaLog.h" +#include "OneDB.h" #include +using namespace std; + /* -------------------------------------------------------------------------- */ /* There are two default groups boostrapped by the core: */ /* - oneadmin cannot be removed */ @@ -38,7 +41,8 @@ const int GroupPool::USERS_ID = 1; /* -------------------------------------------------------------------------- */ GroupPool::GroupPool(SqlDB * db, bool is_slave, - vector& restricted_attrs):PoolSQL(db, Group::table) + vector& restricted_attrs) + : PoolSQL(db, one_db::group_table) { ostringstream oss; string error_str; @@ -225,10 +229,10 @@ int GroupPool::dump(string& oss, const string& where, int sid, int eid, bool des ostringstream cmd; - cmd << "SELECT " << Group::table << ".body, " - << GroupQuotas::db_table << ".body" << " FROM " << Group::table - << " LEFT JOIN " << GroupQuotas::db_table << " ON " - << Group::table << ".oid=" << GroupQuotas::db_table << ".group_oid"; + cmd << "SELECT " << one_db::group_table << ".body, " + << one_db::group_quotas_db_table << ".body" << " FROM " << one_db::group_table + << " LEFT JOIN " << one_db::group_quotas_db_table << " ON " + << one_db::group_table << ".oid=" << one_db::group_quotas_db_table << ".group_oid"; if ( !where.empty() ) { diff --git a/src/hm/Hook.cc b/src/hm/Hook.cc index f688458ed24..50a662519e9 100644 --- a/src/hm/Hook.cc +++ b/src/hm/Hook.cc @@ -21,21 +21,28 @@ #include "HookStateHost.h" #include "HookStateVM.h" #include "HookLog.h" +#include "OneDB.h" #include -/* ************************************************************************ */ -/* Hook :: Database Access Functions */ -/* ************************************************************************ */ +using namespace std; -const char * Hook::table = "hook_pool"; - -const char * Hook::db_names = - "oid, name, body, uid, gid, owner_u, group_u, other_u, type"; +/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ -const char * Hook::db_bootstrap = "CREATE TABLE IF NOT EXISTS hook_pool (" - "oid INTEGER PRIMARY KEY, name VARCHAR(128), body MEDIUMTEXT, uid INTEGER," - "gid INTEGER, owner_u INTEGER, group_u INTEGER, other_u INTEGER, type INTEGER)"; +Hook::Hook(Template * tmpl): + PoolObjectSQL(-1, HOOK, "", -1, -1, "", "", one_db::hook_table), + type(HookType::UNDEFINED), cmd(""), remote(false), _hook(0) +{ + if (tmpl != 0) + { + obj_template = tmpl; + } + else + { + obj_template = new Template(); + } +}; /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ @@ -175,6 +182,16 @@ int Hook::post_update_template(string& error) /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ +int Hook::bootstrap(SqlDB * db) +{ + std::ostringstream oss_hook(one_db::hook_db_bootstrap); + + return db->exec_local_wr(oss_hook); +}; + +/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ + int Hook::insert(SqlDB *db, std::string& error_str) { std::string type_str; @@ -286,7 +303,8 @@ int Hook::insert_replace(SqlDB *db, bool replace, std::string& error_str) } // Construct the SQL statement to Insert or Replace - oss <<" INTO "<" @@ -102,7 +105,10 @@ std::string * HookAPI::format_message(std::string method, ParamList& paramList, << "" << ""; - return one_util::base64_encode(oss.str()); + string base64; + ssl_util::base64_encode(oss.str(), base64); + + return base64; } /* -------------------------------------------------------------------------- */ diff --git a/src/hm/HookLog.cc b/src/hm/HookLog.cc index 127d626762e..c4e696355c9 100644 --- a/src/hm/HookLog.cc +++ b/src/hm/HookLog.cc @@ -24,23 +24,14 @@ #include -/* -------------------------------------------------------------------------- */ -/* -------------------------------------------------------------------------- */ - -const char * HookLog::table = "hook_log"; - -const char * HookLog::db_names = "hkid, exeid, timestamp, rc, body"; - -const char * HookLog::db_bootstrap = "CREATE TABLE IF NOT EXISTS hook_log" - " (hkid INTEGER, exeid INTEGER, timestamp INTEGER, rc INTEGER," - " body MEDIUMTEXT,PRIMARY KEY(hkid, exeid))"; +using namespace std; /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ int HookLog::bootstrap(SqlDB * db) { - std::ostringstream oss_hook(HookLog::db_bootstrap); + std::ostringstream oss_hook(one_db::hook_log_db_bootstrap); return db->exec_local_wr(oss_hook); } @@ -64,7 +55,7 @@ int HookLog::_dump_log(int hkid, int exec_id, std::string &xml_log) string_cb cb(1); - cmd << "SELECT body FROM "<< table; + cmd << "SELECT body FROM "<< one_db::hook_log_table; if ( hkid == -1 ) { @@ -99,7 +90,7 @@ int HookLog::dump_log(const std::string &where_clause, std::string &xml_log) string_cb cb(1); - cmd << "SELECT body FROM "<< table; + cmd << "SELECT body FROM "<< one_db::hook_log_table; if (!where_clause.empty()) { @@ -141,8 +132,9 @@ int HookLog::dump_log(std::string &xml_log) int HookLog::drop(SqlDB *db, const int hook_id) { ostringstream oss; - - oss << "DELETE FROM " << table << " WHERE hkid =" << hook_id; + + oss << "DELETE FROM " << one_db::hook_log_table + << " WHERE hkid =" << hook_id; return db->exec_wr(oss); } @@ -204,7 +196,8 @@ int HookLog::add(int hkid, int hkrc, std::string &xml_result) oss.str(""); - oss <<"INSERT INTO "<< table <<" ("<< db_names <<") VALUES (" + oss << "INSERT INTO " << one_db::hook_log_table + << " (" << one_db::hook_log_db_names << ") VALUES (" << hkid << "," << last_exeid << "," << the_time << "," @@ -217,7 +210,8 @@ int HookLog::add(int hkid, int hkrc, std::string &xml_result) { oss.str(""); - oss << "DELETE FROM " << table << " WHERE hkid = " << hkid + oss << "DELETE FROM " << one_db::hook_log_table + << " WHERE hkid = " << hkid << " AND exeid <= " << last_exeid - log_retention; rc = db->exec_wr(oss); @@ -233,11 +227,7 @@ int HookLog::add(int hkid, int hkrc, std::string &xml_result) int HookLog::retry(int hkid, int exeid, std::string& err_msg) { - std::string xml, command, args, host, as_stdin_str; - - string * message; - - ostringstream oss; + std::string xml, args, host; Nebula& nd = Nebula::instance(); @@ -267,15 +257,12 @@ int HookLog::retry(int hkid, int exeid, std::string& err_msg) obj_xml.xpath(host, "/HOOKLOG/HOOK_EXECUTION_RECORD/REMOTE_HOST", ""); - std::string* args64 = one_util::base64_encode(args); - - message = HookManager::format_message(*args64, host, hkid); - - hm->trigger(HMAction::RETRY, *message); + std::string args64; + ssl_util::base64_encode(args, args64); - delete message; + string message = HookManager::format_message(args64, host, hkid); - delete args64; + hm->trigger_retry(message); return 0; } diff --git a/src/hm/HookManager.cc b/src/hm/HookManager.cc index 69cf9682a76..abc9386e859 100644 --- a/src/hm/HookManager.cc +++ b/src/hm/HookManager.cc @@ -17,74 +17,58 @@ #include "HookManager.h" #include "NebulaLog.h" +using namespace std; + const char * HookManager::hook_driver_name = "hook_exe"; /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -extern "C" void * hm_action_loop(void *arg) +int HookManager::start() { - HookManager * hm; - - if ( arg == 0 ) - { - return 0; - } - - NebulaLog::log("HKM",Log::INFO,"Hook Manager started."); - - hm = static_cast(arg); - - hm->am.loop(); - - NebulaLog::log("HKM",Log::INFO,"Hook Manager stopped."); + using namespace std::placeholders; // for _1 - return 0; -} + register_action(HookManagerMessages::UNDEFINED, + &HookManager::_undefined); -/* -------------------------------------------------------------------------- */ -/* -------------------------------------------------------------------------- */ + register_action(HookManagerMessages::EXECUTE, + bind(&HookManager::_execute, this, _1)); -int HookManager::start() -{ - int rc; - pthread_attr_t pattr; + register_action(HookManagerMessages::RETRY, + bind(&HookManager::_retry, this, _1)); - rc = MadManager::start(); + register_action(HookManagerMessages::LOG, + &HookManager::_log); - if ( rc != 0 ) + string error; + if ( DriverManager::start(error) != 0 ) { + NebulaLog::error("HKM", error); return -1; } NebulaLog::log("HKM",Log::INFO,"Starting Hook Manager..."); - pthread_attr_init (&pattr); - pthread_attr_setdetachstate (&pattr, PTHREAD_CREATE_JOINABLE); - - rc = pthread_create(&hm_thread,&pattr,hm_action_loop,(void *) this); + Listener::start(); - return rc; + return 0; } /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -int HookManager::load_mads(int uid) +int HookManager::load_drivers(const std::vector& _mads) { - HookManagerDriver * hm_mad; - ostringstream oss; - const VectorAttribute * vattr = 0; - int rc; + const VectorAttribute * vattr = nullptr; NebulaLog::log("HKM",Log::INFO,"Loading Hook Manager driver."); - if ( mad_conf.size() > 0 ) + if ( _mads.size() > 0 ) { - vattr = static_cast(mad_conf[0]); + vattr = static_cast(_mads[0]); } - if ( vattr == 0 ) + if ( vattr == nullptr ) { NebulaLog::log("HKM",Log::INFO,"Failed to load Hook Manager driver."); return -1; @@ -94,74 +78,57 @@ int HookManager::load_mads(int uid) hook_conf.replace("NAME",hook_driver_name); - hm_mad = new HookManagerDriver(0,hook_conf.value(),false); - - rc = add(hm_mad); - - if ( rc == 0 ) + if ( load_driver(&hook_conf) != 0 ) { - oss.str(""); - oss << "\tHook Manager loaded"; - - NebulaLog::log("HKM",Log::INFO,oss); + NebulaLog::error("HKM", "Unable to load Hook Manager driver"); + return -1; } - return rc; -} - -/* -------------------------------------------------------------------------- */ -/* -------------------------------------------------------------------------- */ - -void HookManager::user_action(const ActionRequest& ar) -{ - const HMAction& hm_ar = static_cast(ar); - const std::string& message = hm_ar.message(); + NebulaLog::log("HKM",Log::INFO,"\tHook Manager loaded"); - switch (hm_ar.action()) - { - case HMAction::SEND_EVENT: - send_event_action(message); - break; - case HMAction::RETRY: - retry_action(message); - break; - } + return 0; } /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -void HookManager::send_event_action(const std::string& message) +void HookManager::trigger_send_event(const std::string& message) { - const HookManagerDriver* hmd = get(); + trigger([this, message] { + auto hmd = get(); - if ( hmd == nullptr ) - { - return; - } + if ( hmd == nullptr ) + { + return; + } - hmd->execute(message); + hook_msg_t msg(HookManagerMessages::EXECUTE, "", -1, message); + hmd->write(msg); + }); } /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -void HookManager::retry_action(const std::string& message) +void HookManager::trigger_retry(const std::string& message) { - const HookManagerDriver* hmd = get(); + trigger([this, message] { + auto hmd = get(); - if ( hmd == nullptr ) - { - return; - } + if ( hmd == nullptr ) + { + return; + } - hmd->retry(message); + hook_msg_t msg(HookManagerMessages::RETRY, "", -1, message); + hmd->write(msg); + }); } /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -string * HookManager::format_message(const string& args, const string&remote_host, +string HookManager::format_message(const string& args, const string&remote_host, int hook_id) { std::ostringstream oss; @@ -177,7 +144,10 @@ string * HookManager::format_message(const string& args, const string&remote_hos oss << ""; - return one_util::base64_encode(oss.str()); + string base64; + ssl_util::base64_encode(oss.str(), base64); + + return base64; } /* -------------------------------------------------------------------------- */ diff --git a/src/hm/HookManagerDriver.cc b/src/hm/HookManagerDriver.cc deleted file mode 100644 index 7fd5b8c9bb3..00000000000 --- a/src/hm/HookManagerDriver.cc +++ /dev/null @@ -1,159 +0,0 @@ -/* -------------------------------------------------------------------------- */ -/* Copyright 2002-2020, OpenNebula Project, OpenNebula Systems */ -/* */ -/* Licensed under the Apache License, Version 2.0 (the "License"); you may */ -/* not use this file except in compliance with the License. You may obtain */ -/* a copy of the License at */ -/* */ -/* http://www.apache.org/licenses/LICENSE-2.0 */ -/* */ -/* Unless required by applicable law or agreed to in writing, software */ -/* distributed under the License is distributed on an "AS IS" BASIS, */ -/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */ -/* See the License for the specific language governing permissions and */ -/* limitations under the License. */ -/* -------------------------------------------------------------------------- */ - -#include "HookManagerDriver.h" -#include "Nebula.h" -#include "NebulaLog.h" -#include - -/* ************************************************************************** */ -/* Driver ASCII Protocol Implementation */ -/* ************************************************************************** */ - -void HookManagerDriver::execute( - const string& message ) const -{ - ostringstream oss; - - oss << "EXECUTE " << message << endl; - - write(oss); -} - -// ---------------------------------------------------------------------------- -// ---------------------------------------------------------------------------- - -void HookManagerDriver::retry( - const string& message ) const -{ - ostringstream oss; - - oss << "RETRY " << message << endl; - - write(oss); -} - -/* -------------------------------------------------------------------------- */ -/* -------------------------------------------------------------------------- */ - -void HookManagerDriver::protocol(const string& message) const -{ - std::string error_str; - std::istringstream is(message); - - //stores the action name - std::string action; - std::string result; - - NebulaLog::log("HKM", Log::DEBUG, "Message received: " + message); - - Nebula& nd = Nebula::instance(); - HookLog* hl = nd.get_hl(); - - // Parse the driver message - if ( is.good() ) - { - is >> action >> ws; - } - else - { - error_str = "Error reading driver action."; - goto error_common; - } - - if ( is.good() ) - { - is >> result >> ws; - } - else - { - error_str = "Error reading action result."; - goto error_common; - } - - // ------------------------------------------------------------------------- - // Protocol implementation - // ------------------------------------------------------------------------- - - if ( action == "EXECUTE" ) - { - std::ostringstream oss; - - std::string info_b64; - std::string *info; - - int hook_id; - int hook_rc; - - // Parse the hook info - if ( is.good() ) - { - is >> hook_id >> ws; - } - else - { - error_str = "Error reading hook id."; - goto error_common; - } - - if ( is.good() ) - { - is >> hook_rc >> ws; - } - else - { - error_str = "Error reading hook execution return code."; - goto error_common; - } - - getline(is, info_b64); - - if (result == "SUCCESS") - { - oss << "Success executing Hook " << hook_id; - NebulaLog::log("HKM",Log::INFO,oss); - } - else - { - oss << "Error executing Hook " << hook_id; - NebulaLog::log("HKM",Log::ERROR,oss); - } - - info = one_util::base64_decode(info_b64); - - if ( info != 0 ) - { - hl->add(hook_id, hook_rc, *info); - delete info; - } - - } - - return; - -error_common: - NebulaLog::log("HKM", Log::ERROR, error_str); - return; -} - -/* -------------------------------------------------------------------------- */ -/* -------------------------------------------------------------------------- */ - -void HookManagerDriver::recover() -{ - NebulaLog::log("HKM", Log::ERROR, "Hook driver crashed, recovering..."); - -} diff --git a/src/hm/HookManagerProtocol.cc b/src/hm/HookManagerProtocol.cc new file mode 100644 index 00000000000..d9da5158d41 --- /dev/null +++ b/src/hm/HookManagerProtocol.cc @@ -0,0 +1,99 @@ +/* -------------------------------------------------------------------------- */ +/* Copyright 2002-2020, OpenNebula Project, OpenNebula Systems */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); you may */ +/* not use this file except in compliance with the License. You may obtain */ +/* a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */ +/* See the License for the specific language governing permissions and */ +/* limitations under the License. */ +/* -------------------------------------------------------------------------- */ + +#include "HookManager.h" +#include "HookLog.h" +#include "Nebula.h" +#include "NebulaLog.h" +#include + +using namespace std; + + +static void log_msg(hook_msg_t *msg) +{ + ostringstream oss; + + oss << "Message received: "; + msg->write_to(oss); + + NebulaLog::log("HKM", Log::DEBUG, oss); +} + +/* ************************************************************************** */ +/* Driver Protocol Implementation */ +/* ************************************************************************** */ + +void HookManager::_undefined(unique_ptr msg) +{ + NebulaLog::warn("HKM", "Received UNDEFINED msg: " + msg->payload()); +} + +/* -------------------------------------------------------------------------- */ + +void HookManager::_execute(unique_ptr msg) +{ + log_msg(msg.get()); + + int hook_id = msg->oid(); + int hook_rc; + + istringstream is(msg->payload()); + + is >> hook_rc >> ws; + + if (is.bad()) + { + NebulaLog::error("HKM", "Error reading hook execution return code."); + return; + } + + ostringstream oss; + if (msg->status() == "SUCCESS") + { + oss << "Success executing Hook " << hook_id; + NebulaLog::log("HKM", Log::INFO, oss); + } + else + { + oss << "Error executing Hook " << hook_id; + NebulaLog::log("HKM", Log::ERROR, oss); + } + + std::string info_b64; + getline(is, info_b64); + + string info; + ssl_util::base64_decode(info_b64, info); + + HookLog* hl = Nebula::instance().get_hl(); + + hl->add(hook_id, hook_rc, info); +} + +/* -------------------------------------------------------------------------- */ + +void HookManager::_retry(unique_ptr msg) +{ + log_msg(msg.get()); +} + +/* -------------------------------------------------------------------------- */ + +void HookManager::_log(unique_ptr msg) +{ + NebulaLog::log("HKM", log_type(msg->status()[0]), msg->payload()); +} diff --git a/src/hm/HookPool.cc b/src/hm/HookPool.cc index c0c1c395436..bde9a8031ff 100644 --- a/src/hm/HookPool.cc +++ b/src/hm/HookPool.cc @@ -18,6 +18,9 @@ #include "HookAPI.h" #include "HookPool.h" +using namespace std; + + int HookPool::allocate (Template * tmpl, string& error_str) { Hook * hook; diff --git a/src/hm/HookStateHost.cc b/src/hm/HookStateHost.cc index 793a1ad4a02..f47148ff927 100644 --- a/src/hm/HookStateHost.cc +++ b/src/hm/HookStateHost.cc @@ -17,6 +17,9 @@ #include "HookStateHost.h" #include "NebulaLog.h" #include "Host.h" +#include "SSLUtil.h" + +using std::string; /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ @@ -29,7 +32,7 @@ bool HookStateHost::trigger(Host * host) /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -string * HookStateHost::format_message(Host * host) +string HookStateHost::format_message(Host * host) { std::ostringstream oss; std::string host_xml; @@ -43,7 +46,10 @@ string * HookStateHost::format_message(Host * host) << host->to_xml(host_xml) << ""; - return one_util::base64_encode(oss.str()); + string base64; + ssl_util::base64_encode(oss.str(), base64); + + return base64; } /* -------------------------------------------------------------------------- */ diff --git a/src/hm/HookStateVM.cc b/src/hm/HookStateVM.cc index 7ebaa53c5ad..a002a254fa8 100644 --- a/src/hm/HookStateVM.cc +++ b/src/hm/HookStateVM.cc @@ -17,6 +17,10 @@ #include "HookStateVM.h" #include "VirtualMachine.h" #include "NebulaUtil.h" +#include "SSLUtil.h" + +using namespace std; + bool HookStateVM::trigger(VirtualMachine * vm) { @@ -26,7 +30,7 @@ bool HookStateVM::trigger(VirtualMachine * vm) /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -string * HookStateVM::format_message(VirtualMachine * vm) +string HookStateVM::format_message(VirtualMachine * vm) { std::ostringstream oss; std::string vm_xml; @@ -58,7 +62,10 @@ string * HookStateVM::format_message(VirtualMachine * vm) oss << vm->to_xml_extended(vm_xml) << ""; - return one_util::base64_encode(oss.str()); + string base64; + ssl_util::base64_encode(oss.str(), base64); + + return base64; } /* -------------------------------------------------------------------------- */ diff --git a/src/hm/SConstruct b/src/hm/SConstruct index 060f83fd765..1828f968af9 100755 --- a/src/hm/SConstruct +++ b/src/hm/SConstruct @@ -28,7 +28,7 @@ source_files=[ 'HookStateVM.cc', 'HookStateHost.cc', 'HookManager.cc', - 'HookManagerDriver.cc', + 'HookManagerProtocol.cc', 'ExecuteHook.cc', 'HookLog.cc' ] diff --git a/src/hm_mad/one_hm.rb b/src/hm_mad/one_hm.rb index 1a6cf2fd1be..5e4cc2229b0 100755 --- a/src/hm_mad/one_hm.rb +++ b/src/hm_mad/one_hm.rb @@ -83,7 +83,7 @@ def initialize(options) end end - def action_execute(*arguments) + def action_execute(_not_used, *arguments) arg_xml = Nokogiri::XML(Base64.decode64(arguments.flatten[0])) type = arg_xml.xpath('//HOOK_TYPE').text @@ -97,7 +97,7 @@ def action_execute(*arguments) end end - def action_retry(*arguments) + def action_retry(_not_used, *arguments) arguments.flatten! command = arguments[0] diff --git a/src/host/Host.cc b/src/host/Host.cc index 32f07ad9b77..31e8d295395 100644 --- a/src/host/Host.cc +++ b/src/host/Host.cc @@ -23,6 +23,8 @@ #include +using namespace std; + /* ************************************************************************ */ /* Host :: Constructor/Destructor */ /* ************************************************************************ */ diff --git a/src/host/HostPool.cc b/src/host/HostPool.cc index 4286924f732..6ea98f8285f 100644 --- a/src/host/HostPool.cc +++ b/src/host/HostPool.cc @@ -30,6 +30,8 @@ #include "ClusterPool.h" #include "InformationManager.h" +using namespace std; + /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ @@ -98,11 +100,9 @@ int HostPool::allocate ( if (host != nullptr) { - std::string * event = HookStateHost::format_message(host); - - Nebula::instance().get_hm()->trigger(HMAction::SEND_EVENT, *event); + std::string event = HookStateHost::format_message(host); - delete event; + Nebula::instance().get_hm()->trigger_send_event(event); auto *im = Nebula::instance().get_im(); im->update_host(host); @@ -146,11 +146,9 @@ int HostPool::update(PoolObjectSQL * objsql) if ( HookStateHost::trigger(host) ) { - std::string * event = HookStateHost::format_message(host); - - Nebula::instance().get_hm()->trigger(HMAction::SEND_EVENT, *event); + std::string event = HookStateHost::format_message(host); - delete event; + Nebula::instance().get_hm()->trigger_send_event(event); } host->set_prev_state(); diff --git a/src/host/HostShareDatastore.cc b/src/host/HostShareDatastore.cc index 369a38222e3..b1566fd2a6d 100644 --- a/src/host/HostShareDatastore.cc +++ b/src/host/HostShareDatastore.cc @@ -17,6 +17,8 @@ #include "HostShareDatastore.h" #include "HostShareCapacity.h" +using namespace std; + /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ diff --git a/src/host/HostShareNUMA.cc b/src/host/HostShareNUMA.cc index 07bde1a1c4f..03075218979 100644 --- a/src/host/HostShareNUMA.cc +++ b/src/host/HostShareNUMA.cc @@ -642,7 +642,7 @@ void HostShareNode::set_hugepage(unsigned long size, unsigned int nr, return; } - HugePage h = {size, nr, fr, usage}; + HugePage h = {size, nr, fr, usage, 0}; pages.insert(make_pair(h.size_kb, h)); @@ -801,10 +801,10 @@ void HostShareNUMA::set_monitorization(Template &ht, unsigned int _vt) for (auto it = pages.begin(); it != pages.end(); ++it) { - unsigned int pages; - unsigned int free; + unsigned int pages = 0; + unsigned int free = 0; - unsigned long size; + unsigned long size = 0; if ( (*it)->vector_value("NODE_ID", node_id) == -1 ) { @@ -1349,9 +1349,11 @@ void HostShareNUMA::del(HostShareCapacity &sr) if ( pt != mem_node.pages.end() ) { - pt->second.usage -= num_hp; - - if ( pt->second.usage < 0 ) + if (pt->second.usage > num_hp) + { + pt->second.usage -= num_hp; + } + else { pt->second.usage = 0; } diff --git a/src/im/InformationManager.cc b/src/im/InformationManager.cc index 61d755a2d4f..35a148a5c7e 100644 --- a/src/im/InformationManager.cc +++ b/src/im/InformationManager.cc @@ -16,11 +16,12 @@ #include "InformationManager.h" #include "HostPool.h" -#include "OpenNebulaMessages.h" #include "VirtualMachinePool.h" #include "Nebula.h" #include "LifeCycleManager.h" +using namespace std; + /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ @@ -30,16 +31,18 @@ int InformationManager::start() using namespace std::placeholders; // for _1 - register_action(OpenNebulaMessages::UNDEFINED, + NebulaLog::info("InM", "Starting Information Manager..."); + + register_action(InformationManagerMessages::UNDEFINED, &InformationManager::_undefined); - register_action(OpenNebulaMessages::HOST_STATE, + register_action(InformationManagerMessages::HOST_STATE, bind(&InformationManager::_host_state, this, _1)); - register_action(OpenNebulaMessages::HOST_SYSTEM, + register_action(InformationManagerMessages::HOST_SYSTEM, bind(&InformationManager::_host_system, this, _1)); - register_action(OpenNebulaMessages::VM_STATE, + register_action(InformationManagerMessages::VM_STATE, bind(&InformationManager::_vm_state, this, _1)); int rc = DriverManager::start(error); @@ -50,16 +53,6 @@ int InformationManager::start() return -1; } - NebulaLog::info("InM", "Starting Information Manager..."); - - im_thread = std::thread([&] { - NebulaLog::info("InM", "Information Manager started."); - - am.loop(); - - NebulaLog::info("InM", "Information Manager stopped."); - }); - auto rftm = Nebula::instance().get_raftm(); raft_status(rftm->get_state()); @@ -85,9 +78,9 @@ void InformationManager::stop_monitor(int hid, const string& name, const string& data.add("IM_MAD", im_mad); string tmp; - Message msg; + im_msg_t msg; - msg.type(OpenNebulaMessages::STOP_MONITOR); + msg.type(InformationManagerMessages::STOP_MONITOR); msg.oid(hid); msg.payload(data.to_xml(tmp)); @@ -112,9 +105,9 @@ int InformationManager::start_monitor(Host * host, bool update_remotes) return -1; } - Message msg; + im_msg_t msg; - msg.type(OpenNebulaMessages::START_MONITOR); + msg.type(InformationManagerMessages::START_MONITOR); msg.oid(host->get_oid()); msg.payload(to_string(update_remotes)); @@ -136,9 +129,9 @@ void InformationManager::update_host(Host *host) } string tmp; - Message msg; + im_msg_t msg; - msg.type(OpenNebulaMessages::UPDATE_HOST); + msg.type(InformationManagerMessages::UPDATE_HOST); msg.oid(host->get_oid()); msg.payload(host->to_xml(tmp)); @@ -157,9 +150,9 @@ void InformationManager::delete_host(int hid) return; } - Message msg; + im_msg_t msg; - msg.type(OpenNebulaMessages::DEL_HOST); + msg.type(InformationManagerMessages::DEL_HOST); msg.oid(hid); imd->write(msg); @@ -186,17 +179,17 @@ void InformationManager::raft_status(RaftManager::State state) hpool->dump(xml_hosts, "", 0, -1, false); - Message msg; + im_msg_t msg; - msg.type(OpenNebulaMessages::HOST_LIST); + msg.type(InformationManagerMessages::HOST_LIST); msg.payload(xml_hosts); imd->write(msg); } - Message msg; + im_msg_t msg; - msg.type(OpenNebulaMessages::RAFT_STATUS); + msg.type(InformationManagerMessages::RAFT_STATUS); msg.payload(RaftManager::state_to_str(state)); imd->write(msg); @@ -205,7 +198,7 @@ void InformationManager::raft_status(RaftManager::State state) /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -void InformationManager::_undefined(unique_ptr> msg) +void InformationManager::_undefined(unique_ptr msg) { NebulaLog::warn("InM", "Received undefined message: " + msg->payload() + "from host: " + to_string(msg->oid())); @@ -215,7 +208,7 @@ void InformationManager::_undefined(unique_ptr> msg) /* -------------------------------------------------------------------------- */ /* HOST_STATE - */ -void InformationManager::_host_state(unique_ptr> msg) +void InformationManager::_host_state(unique_ptr msg) { NebulaLog::ddebug("InM", "HOST_STATE update from host: " + to_string(msg->oid()) + ". Host information: " + msg->payload()); @@ -264,7 +257,7 @@ void InformationManager::_host_state(unique_ptr> msg for (const auto& vmid : host->get_vm_ids()) { - lcm->trigger(LCMAction::MONITOR_DONE, vmid); + lcm->trigger_monitor_done(vmid); } } else @@ -281,7 +274,7 @@ void InformationManager::_host_state(unique_ptr> msg /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -void InformationManager::_host_system(unique_ptr> msg) +void InformationManager::_host_system(unique_ptr msg) { NebulaLog::ddebug("InM", "HOST_SYSTEM update from host: " + to_string(msg->oid()) + ". Host information: " + msg->payload()); @@ -333,10 +326,12 @@ void InformationManager::_host_system(unique_ptr> ms /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -static LCMAction::Actions test_and_trigger(const string& state_str, - VirtualMachine::VmState state, VirtualMachine::LcmState lcm_state, - string& vm_message) +static void test_and_trigger(const string& state_str, VirtualMachine * vm) { + auto state = vm->get_state(); + auto lcm_state = vm->get_lcm_state(); + auto lcm = Nebula::instance().get_lcm(); + if (state_str == "RUNNING") { if (state == VirtualMachine::POWEROFF || @@ -355,7 +350,8 @@ static LCMAction::Actions test_and_trigger(const string& state_str, lcm_state == VirtualMachine::BOOT_UNDEPLOY_FAILURE || lcm_state == VirtualMachine::BOOT_FAILURE))) { - return LCMAction::MONITOR_POWERON; + lcm->trigger_monitor_poweron(vm->get_oid()); + return; } } else if (state_str == "FAILURE") @@ -364,9 +360,12 @@ static LCMAction::Actions test_and_trigger(const string& state_str, (lcm_state == VirtualMachine::RUNNING || lcm_state == VirtualMachine::UNKNOWN)) { - vm_message = "VM running but monitor state is ERROR."; + lcm->trigger_monitor_done(vm->get_oid()); - return LCMAction::MONITOR_DONE; + vm->log("VMM", Log::INFO, + "VM running but monitor state is ERROR."); + + return; } } else if (state_str == "SUSPENDED") @@ -375,9 +374,12 @@ static LCMAction::Actions test_and_trigger(const string& state_str, (lcm_state == VirtualMachine::RUNNING || lcm_state == VirtualMachine::UNKNOWN)) { - vm_message = "VM running but monitor state is PAUSED."; + lcm->trigger_monitor_suspend(vm->get_oid()); + + vm->log("VMM", Log::INFO, + "VM running but monitor state is PAUSED."); - return LCMAction::MONITOR_SUSPEND; + return; } } else if (state_str == "POWEROFF") @@ -389,15 +391,14 @@ static LCMAction::Actions test_and_trigger(const string& state_str, lcm_state == VirtualMachine::SHUTDOWN_POWEROFF || lcm_state == VirtualMachine::SHUTDOWN_UNDEPLOY)) { - return LCMAction::MONITOR_POWEROFF; + lcm->trigger_monitor_poweroff(vm->get_oid()); + return; } } - - return LCMAction::NONE; } -void InformationManager::_vm_state(unique_ptr> msg) +void InformationManager::_vm_state(unique_ptr msg) { LifeCycleManager* lcm = Nebula::instance().get_lcm(); @@ -423,7 +424,6 @@ void InformationManager::_vm_state(unique_ptr> msg) string deploy_id; string state_str; - string vm_msg; vector vms; tmpl.get("VM", vms); @@ -482,18 +482,7 @@ void InformationManager::_vm_state(unique_ptr> msg) /* ------------------------------------------------------------------ */ /* Apply state changes */ /* ------------------------------------------------------------------ */ - LCMAction::Actions action = test_and_trigger(state_str, vm->get_state(), - vm->get_lcm_state(), vm_msg); - - if ( action != LCMAction::NONE ) - { - lcm->trigger(action, vm->get_oid()); - - if ( !vm_msg.empty() ) - { - vm->log("VMM", Log::INFO, vm_msg); - } - } + test_and_trigger(state_str, vm); vm->unlock(); } @@ -521,7 +510,7 @@ void InformationManager::_vm_state(unique_ptr> msg) return; } - set host_ids = host->get_vm_ids(); + const set& host_ids = host->get_vm_ids(); set missing; set zombies; @@ -561,27 +550,19 @@ void InformationManager::_vm_state(unique_ptr> msg) continue; } - LCMAction::Actions action; + NebulaLog::debug("InM", "VM_STATE update from host: " + + to_string(msg->oid()) + ". VM id: " + to_string(vm->get_oid()) + + ", state: " + missing_state); - if ( missing_state == "POWEROFF" ) + if (missing_state == "UNKNOWN") { - action = LCMAction::MONITOR_POWEROFF; - } - else if ( missing_state == "UNKNOWN" ) - { - action = LCMAction::MONITOR_DONE; + lcm->trigger_monitor_done(vm->get_oid()); } else { - action = LCMAction::MONITOR_POWEROFF; + lcm->trigger_monitor_poweroff(vm->get_oid()); } - NebulaLog::debug("InM", "VM_STATE update from host: " + - to_string(msg->oid()) + ". VM id: " + to_string(vm->get_oid()) + - ", state: " + missing_state); - - lcm->trigger(action, vm->get_oid()); - vm->unlock(); } } diff --git a/src/im_mad/im_exec/one_im_exec.rb b/src/im_mad/im_exec/one_im_exec.rb index b508eb84bfe..3b8fd0aa933 100755 --- a/src/im_mad/im_exec/one_im_exec.rb +++ b/src/im_mad/im_exec/one_im_exec.rb @@ -213,7 +213,7 @@ def log(id, message, not_used=true) zline = Zlib::Deflate.deflate(line.strip, Zlib::BEST_COMPRESSION) zline64 = Base64.strict_encode64(zline) - send_message('LOG', severity, id, zline64) + send_message('LOG', severity, id, "#{Time.now.to_i} #{zline64}") end end diff --git a/src/im_mad/remotes/lib/kvm.rb b/src/im_mad/remotes/lib/kvm.rb index 536c7402a7d..0402ececd22 100644 --- a/src/im_mad/remotes/lib/kvm.rb +++ b/src/im_mad/remotes/lib/kvm.rb @@ -261,6 +261,7 @@ def to_one 'pmsuspended' => 'SUSPENDED', 'paused' => { 'migrating' => 'RUNNING', + 'saving' => 'RUNNING', 'starting up' => 'RUNNING', 'booted' => 'RUNNING', 'I/O error' => 'FAILURE', @@ -272,6 +273,9 @@ def to_one } } + # List of domain state reasons (for RUNNING) when to skip I/O monitoring + REASONS_SKIP_IO = ['migrating', 'starting up', 'saving'] + # Get the I/O stats of the domain as provided by Libvirt command domstats # The metrics are aggregated for all DIKS and NIC def io_stats @@ -282,7 +286,8 @@ def io_stats @vm[:diskrdiops] = 0 @vm[:diskwriops] = 0 - return if @vm[:state] != 'RUNNING' || @vm[:reason] == 'migrating' + return if @vm[:state] != 'RUNNING' || + REASONS_SKIP_IO.include?(@vm[:reason]) vm_stats, _e, s = KVM.virsh(:domstats, @name) diff --git a/src/im_mad/remotes/lib/lxd.rb b/src/im_mad/remotes/lib/lxd.rb index 362c213dc1f..74534bebcf7 100644 --- a/src/im_mad/remotes/lib/lxd.rb +++ b/src/im_mad/remotes/lib/lxd.rb @@ -156,7 +156,7 @@ def import_template cpu = cpu.chomp('%').to_f / 100 mem = parse_memory(mem) - template = <<-EOT + <<-EOT NAME = "#{@deploy_id}" CPU = #{cpu} VCPU = #{vcpu} @@ -166,8 +166,6 @@ def import_template DEPLOY_ID = "#{@deploy_id}" OS = [ ARCH="#{arch}" ] EOT - - template end private diff --git a/src/im_mad/remotes/lib/monitord_client.rb b/src/im_mad/remotes/lib/monitord_client.rb index c9d36910894..19c313b0e97 100644 --- a/src/im_mad/remotes/lib/monitord_client.rb +++ b/src/im_mad/remotes/lib/monitord_client.rb @@ -96,10 +96,8 @@ def pack(data) data = edata end - zdata = Zlib::Deflate.deflate(data, Zlib::BEST_COMPRESSION) - data64 = Base64.strict_encode64(zdata) - - data64 + zdata = Zlib::Deflate.deflate(data, Zlib::BEST_COMPRESSION) + Base64.strict_encode64(zdata) end end diff --git a/src/im_mad/remotes/lib/vcenter_cluster.rb b/src/im_mad/remotes/lib/vcenter_cluster.rb index 0f4edd067c3..b59260e1ccb 100644 --- a/src/im_mad/remotes/lib/vcenter_cluster.rb +++ b/src/im_mad/remotes/lib/vcenter_cluster.rb @@ -117,7 +117,7 @@ def initialize(hid, onec) # VI Client Initialization #----------------------------------------------------------------------- def connect_vcenter - # Avoid leaving open sessions to vCenter + # Avoid leaving open sessions to vCenter @vic.close_connection if @vic @vic = VCenterDriver::VIClient.new(connection, @hid) @cluster = VCenterDriver::ClusterComputeResource @@ -147,8 +147,7 @@ def monitor_host # Try connectivity to a vCenter instance and close the connection def beacon_host - vi_client = VCenterDriver::VIClient.new(connection, @host.id) - vi_client.close_connection + @vic.vim.serviceContent.about.instanceUuid Time.now.to_s end @@ -242,7 +241,7 @@ def vcenter_vms_state view.DestroyView vmpool = OpenNebula::VirtualMachinePool.new(@onec) - rc = vmpool.info + rc = vmpool.info(-2) return {} if OpenNebula.is_error?(rc) @@ -262,6 +261,7 @@ def vcenter_vms_state } one_id = ids[0]["ID"] if ids[0] + next if one_id.to_i == -1 vms[vm_ref] = { :id => one_id, @@ -842,7 +842,7 @@ def monitor(conf) $logger.debug("\tResult(#{success})\n#{probe_result}\n") - c[:monitordc].send("#{probe_name}_udp".to_sym, + c[:monitordc].send("#{probe_name}_tcp".to_sym, success, probe_result) diff --git a/src/image/Image.cc b/src/image/Image.cc index 018fbc83ca5..b61f214fa2a 100644 --- a/src/image/Image.cc +++ b/src/image/Image.cc @@ -21,14 +21,14 @@ #include "UserPool.h" #include "NebulaUtil.h" #include "LifeCycleManager.h" +#include "VirtualMachineDisk.h" #include "Nebula.h" #include #include #include - -#define TO_UPPER(S) transform(S.begin(),S.end(),S.begin(),(int(*)(int))toupper) +using namespace std; /* ************************************************************************ */ /* Image :: Constructor/Destructor */ @@ -40,7 +40,7 @@ Image::Image(int _uid, const string& _gname, int _umask, ImageTemplate * _image_template): - PoolObjectSQL(-1,IMAGE,"",_uid,_gid,_uname,_gname,table), + PoolObjectSQL(-1,IMAGE,"",_uid,_gid,_uname,_gname,one_db::image_table), type(OS), disk_type(FILE), regtime(time(0)), @@ -76,19 +76,6 @@ Image::Image(int _uid, /* Image :: Database Access Functions */ /* ************************************************************************ */ -const char * Image::table = "image_pool"; - -const char * Image::db_names = - "oid, name, body, uid, gid, owner_u, group_u, other_u"; - -const char * Image::db_bootstrap = "CREATE TABLE IF NOT EXISTS image_pool (" - "oid INTEGER PRIMARY KEY, name VARCHAR(128), body MEDIUMTEXT, uid INTEGER, " - "gid INTEGER, owner_u INTEGER, group_u INTEGER, other_u INTEGER, " - "UNIQUE(name,uid) )"; - -/* ------------------------------------------------------------------------ */ -/* ------------------------------------------------------------------------ */ - int Image::insert(SqlDB *db, string& error_str) { int rc; @@ -133,7 +120,7 @@ int Image::insert(SqlDB *db, string& error_str) case OS: case DATABLOCK: case CDROM: - TO_UPPER(persistent_attr); + one_util::toupper(persistent_attr); persistent_img = (persistent_attr == "YES"); get_template_attribute("DEV_PREFIX", dev_prefix); @@ -286,7 +273,7 @@ int Image::insert_replace(SqlDB *db, bool replace, string& error_str) if (replace) { - oss << "UPDATE " << table << " SET " + oss << "UPDATE " << one_db::image_table << " SET " << "name = '" << sql_name << "', " << "body = '" << sql_xml << "', " << "uid = " << uid << ", " @@ -298,7 +285,8 @@ int Image::insert_replace(SqlDB *db, bool replace, string& error_str) } else { - oss << "INSERT INTO " << table << " (" << db_names << ") VALUES (" + oss << "INSERT INTO " << one_db::image_table + << " (" << one_db::image_db_names << ") VALUES (" << oid << "," << "'" << sql_name << "'," << "'" << sql_xml << "'," @@ -337,8 +325,18 @@ int Image::insert_replace(SqlDB *db, bool replace, string& error_str) return -1; } +/* ------------------------------------------------------------------------ */ +/* ------------------------------------------------------------------------ */ + +int Image::bootstrap(SqlDB * db) +{ + ostringstream oss_image(one_db::image_db_bootstrap); + + return db->exec_local_wr(oss_image); +}; + /* ************************************************************************ */ -/* Image :: Misc */ +/* Image :: Misc */ /* ************************************************************************ */ string& Image::to_xml(string& xml) const @@ -513,7 +511,7 @@ void Image::disk_attribute(VirtualMachineDisk * disk, get_template_attribute("DRIVER", template_driver); get_template_attribute("PERSISTENT_TYPE", template_ptype); - TO_UPPER(template_ptype); + one_util::toupper(template_ptype); //--------------------------------------------------------------------------- // DEV_PREFIX ATTRIBUTE @@ -674,7 +672,7 @@ int Image::set_type(string& _type, string& error) { int rc = 0; - TO_UPPER(_type); + one_util::toupper(_type); if ((_type != "OS" && _type != "DATABLOCK") && (snapshots.size() > 0)) { @@ -755,7 +753,7 @@ Image::ImageType Image::str_to_type(string& str_type) str_type = ImagePool::default_type(); } - TO_UPPER(str_type); + one_util::toupper(str_type); if ( str_type == "OS" ) { @@ -798,29 +796,41 @@ Image::DiskType Image::str_to_disk_type(string& s_disk_type) { type = Image::FILE; } + else if (s_disk_type == "CDROM") + { + type = Image::CD_ROM; + } else if (s_disk_type == "BLOCK") { type = Image::BLOCK; } - else if (s_disk_type == "ISCSI") + else if (s_disk_type == "RBD") { - type = Image::ISCSI; + type = Image::RBD; } - else if (s_disk_type == "CDROM") + else if (s_disk_type == "RBD_CDROM") { - type = Image::CD_ROM; + type = Image::RBD_CDROM; } - else if (s_disk_type == "RBD") + else if (s_disk_type == "GLUSTER") { - type = Image::RBD; + type = Image::GLUSTER; + } + else if (s_disk_type == "GLUSTER_CDROM") + { + type = Image::GLUSTER_CDROM; } else if (s_disk_type == "SHEEPDOG") { type = Image::SHEEPDOG; } - else if (s_disk_type == "GLUSTER") + else if (s_disk_type == "SHEEPDOG_CDROM") { - type = Image::GLUSTER; + type = Image::SHEEPDOG_CDROM; + } + else if (s_disk_type == "ISCSI") + { + type = Image::ISCSI; } return type; @@ -838,7 +848,7 @@ void Image::set_state(ImageState _state) for (set::iterator i = vms.begin(); i != vms.end(); i++) { - lcm->trigger(LCMAction::DISK_LOCK_FAILURE, *i); + lcm->trigger_disk_lock_failure(*i); } } else if (state == LOCKED) @@ -908,7 +918,7 @@ void Image::set_state_unlock() for (set::iterator i = vms.begin(); i != vms.end(); i++) { - lcm->trigger(LCMAction::DISK_LOCK_SUCCESS, *i); + lcm->trigger_disk_lock_success(*i); } } } diff --git a/src/image/ImageManager.cc b/src/image/ImageManager.cc index 8e3864a0d8d..af848b50df5 100644 --- a/src/image/ImageManager.cc +++ b/src/image/ImageManager.cc @@ -20,27 +20,41 @@ #include "DatastorePool.h" #include "RaftManager.h" +using namespace std; + const char * ImageManager::image_driver_name = "image_exe"; /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -extern "C" void * image_action_loop(void *arg) +int ImageManager::load_drivers(const std::vector& _mads) { - ImageManager * im; + const VectorAttribute * vattr = 0; - if ( arg == 0 ) + NebulaLog::log("ImM",Log::INFO,"Loading Image Manager driver."); + + if (_mads.size() > 0) { - return 0; + vattr = _mads[0]; } - NebulaLog::log("ImM",Log::INFO,"Image Manager started."); + if (vattr == nullptr) + { + NebulaLog::log("ImM",Log::INFO,"Failed to load Image Manager driver."); + return -1; + } - im = static_cast(arg); + VectorAttribute image_conf("IMAGE_MAD",vattr->value()); - im->am.loop(im->timer_period); + image_conf.replace("NAME", image_driver_name); - NebulaLog::log("ImM",Log::INFO,"Image Manager stopped."); + if (load_driver(&image_conf) != 0) + { + NebulaLog::error("ImM", "Unable to load Image Manager driver"); + return -1; + } + + NebulaLog::info("ImM", "\tImage Manager loaded"); return 0; } @@ -48,74 +62,60 @@ extern "C" void * image_action_loop(void *arg) /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -int ImageManager::load_mads(int uid) +int ImageManager::start() { - ImageManagerDriver * imagem_mad; - ostringstream oss; - const VectorAttribute * vattr = 0; - int rc; + using namespace std::placeholders; // for _1 - NebulaLog::log("ImM",Log::INFO,"Loading Image Manager driver."); + register_action(ImageManagerMessages::UNDEFINED, + &ImageManager::_undefined); - if ( mad_conf.size() > 0 ) - { - vattr = static_cast(mad_conf[0]); - } + register_action(ImageManagerMessages::STAT, + bind(&ImageManager::_stat, this, _1)); - if ( vattr == 0 ) - { - NebulaLog::log("ImM",Log::INFO,"Failed to load Image Manager driver."); - return -1; - } + register_action(ImageManagerMessages::CP, + bind(&ImageManager::_cp, this, _1)); - VectorAttribute image_conf("IMAGE_MAD",vattr->value()); + register_action(ImageManagerMessages::CLONE, + bind(&ImageManager::_clone, this, _1)); - image_conf.replace("NAME",image_driver_name); + register_action(ImageManagerMessages::MKFS, + bind(&ImageManager::_mkfs, this, _1)); - imagem_mad= new ImageManagerDriver(0,image_conf.value(),false,ipool,dspool); + register_action(ImageManagerMessages::RM, + bind(&ImageManager::_rm, this, _1)); - rc = add(imagem_mad); + register_action(ImageManagerMessages::MONITOR, + bind(&ImageManager::_monitor, this, _1)); - if ( rc == 0 ) - { - oss.str(""); - oss << "\tImage Manager loaded"; + register_action(ImageManagerMessages::SNAP_DELETE, + bind(&ImageManager::_snap_delete, this, _1)); - NebulaLog::log("ImM",Log::INFO,oss); - } - - return rc; -} + register_action(ImageManagerMessages::SNAP_REVERT, + bind(&ImageManager::_snap_revert, this, _1)); -/* -------------------------------------------------------------------------- */ -/* -------------------------------------------------------------------------- */ + register_action(ImageManagerMessages::SNAP_FLATTEN, + bind(&ImageManager::_snap_flatten, this, _1)); -int ImageManager::start() -{ - int rc; - pthread_attr_t pattr; + register_action(ImageManagerMessages::LOG, + &ImageManager::_log); - rc = MadManager::start(); + NebulaLog::info("ImM", "Starting Image Manager..."); - if ( rc != 0 ) + string error; + if (DriverManager::start(error) != 0) { + NebulaLog::error("ImM", "Unable to start Image Manager driver: " + + error); return -1; } - NebulaLog::log("ImM",Log::INFO,"Starting Image Manager..."); - - pthread_attr_init (&pattr); - pthread_attr_setdetachstate (&pattr, PTHREAD_CREATE_JOINABLE); - - rc = pthread_create(&imagem_thread,&pattr,image_action_loop,(void *) this); - - return rc; + return 0; } /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -void ImageManager::timer_action(const ActionRequest& ar) +void ImageManager::timer_action() { static int mark = 0; static int tics = monitor_period; @@ -139,7 +139,6 @@ void ImageManager::timer_action(const ActionRequest& ar) int rc; vector datastores; - vector::iterator it; Nebula& nd = Nebula::instance(); DatastorePool * dspool = nd.get_dspool(); @@ -157,9 +156,9 @@ void ImageManager::timer_action(const ActionRequest& ar) return; } - for(it = datastores.begin() ; it != datastores.end(); it++) + for (auto ds : datastores) { - monitor_datastore(*it); + monitor_datastore(ds); } return; @@ -173,7 +172,6 @@ void ImageManager::monitor_datastore(int ds_id) { static map monitor_vm_disk_counter; string ds_data, ds_location, ds_name; - string* drv_msg; bool shared; @@ -184,7 +182,7 @@ void ImageManager::monitor_datastore(int ds_id) ostringstream oss; - const ImageManagerDriver* imd = get(); + const auto* imd = get(); if ( imd == 0 ) { @@ -245,14 +243,13 @@ void ImageManager::monitor_datastore(int ds_id) break; } - drv_msg = ImageManager::format_message("", ds_data, ds_location); + string drv_msg(ImageManager::format_message("", ds_data, ds_location)); oss.str(""); oss << "Monitoring datastore " << ds_name << " (" << ds_id << ")"; NebulaLog::log("InM", Log::DEBUG, oss); - imd->monitor(ds_id, *drv_msg); - - delete drv_msg; + image_msg_t msg(ImageManagerMessages::MONITOR, "", ds_id, drv_msg); + imd->write(msg); } diff --git a/src/image/ImageManagerActions.cc b/src/image/ImageManagerActions.cc index 460fc9955dd..68f19e35e00 100644 --- a/src/image/ImageManagerActions.cc +++ b/src/image/ImageManagerActions.cc @@ -23,6 +23,8 @@ #include "DatastorePool.h" #include "VirtualMachinePool.h" +using namespace std; + /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ @@ -34,7 +36,7 @@ Image * ImageManager::acquire_image(int vm_id, int image_id, bool attach, img = ipool->get(image_id); - if ( img == 0 ) + if ( img == nullptr ) { ostringstream oss; oss << "Image with ID: " << image_id << " does not exist"; @@ -48,7 +50,7 @@ Image * ImageManager::acquire_image(int vm_id, int image_id, bool attach, if ( rc != 0 ) { img->unlock(); - img = 0; + img = nullptr; } return img; @@ -64,7 +66,7 @@ Image * ImageManager::acquire_image(int vm_id, const string& name, int uid, img = ipool->get(name,uid); - if ( img == 0 ) + if ( img == nullptr ) { ostringstream oss; oss << "User " << uid << " does not own an image with name: " << name @@ -79,7 +81,7 @@ Image * ImageManager::acquire_image(int vm_id, const string& name, int uid, if ( rc != 0 ) { img->unlock(); - img = 0; + img = nullptr; } return img; @@ -209,7 +211,7 @@ void ImageManager::release_image(int vm_id, int iid, bool failed) Image * img = ipool->get(iid); - if ( img == 0 ) + if ( img == nullptr ) { return; } @@ -321,7 +323,7 @@ void ImageManager::release_cloning_resource( { Image * img = ipool->get(iid); - if ( img == 0 ) + if ( img == nullptr ) { return; } @@ -383,7 +385,7 @@ int ImageManager::enable_image(int iid, bool to_enable, string& error_str) img = ipool->get(iid); - if ( img == 0 ) + if ( img == nullptr ) { return -1; } @@ -447,7 +449,6 @@ int ImageManager::delete_image(int iid, string& error_str) string source; string img_tmpl; - string * drv_msg; string ds_data; long long size; @@ -462,7 +463,7 @@ int ImageManager::delete_image(int iid, string& error_str) img = ipool->get_ro(iid); - if ( img == 0 ) + if ( img == nullptr ) { error_str = "Image does not exist"; return -1; @@ -474,7 +475,7 @@ int ImageManager::delete_image(int iid, string& error_str) ds = dspool->get_ro(ds_id); - if ( ds == 0 ) + if ( ds == nullptr ) { error_str = "Datastore no longer exists cannot remove image"; return -1; @@ -486,7 +487,7 @@ int ImageManager::delete_image(int iid, string& error_str) img = ipool->get(iid); - if ( img == 0 ) + if ( img == nullptr ) { error_str = "Image does not exist"; return -1; @@ -543,9 +544,9 @@ int ImageManager::delete_image(int iid, string& error_str) /* ------------------- Send RM operation request to the DS -------------- */ - const ImageManagerDriver* imd = get(); + const auto* imd = get(); - if ( imd == 0 ) + if ( imd == nullptr ) { error_str = "Error getting ImageManagerDriver"; @@ -553,7 +554,6 @@ int ImageManager::delete_image(int iid, string& error_str) return -1; } - drv_msg = format_message(img->to_xml(img_tmpl), ds_data, ""); source = img->get_source(); size = img->get_size(); ds_id = img->get_ds_id(); @@ -575,7 +575,12 @@ int ImageManager::delete_image(int iid, string& error_str) } else { - imd->rm(img->get_oid(), *drv_msg); + string drv_msg(format_message(img->to_xml(img_tmpl), ds_data, "")); + + image_msg_t msg(ImageManagerMessages::RM, "", iid, drv_msg); + + imd->write(msg); + img->set_state(Image::DELETE); img->clear_cloning_id(); @@ -587,8 +592,6 @@ int ImageManager::delete_image(int iid, string& error_str) img->unlock(); - delete drv_msg; - /* -------------------- Update Group & User quota counters -------------- */ Template img_usage; @@ -607,7 +610,7 @@ int ImageManager::delete_image(int iid, string& error_str) ds = dspool->get(ds_id); - if ( ds != 0 ) + if ( ds != nullptr ) { ds->del_image(iid); dspool->update(ds); @@ -649,7 +652,7 @@ int ImageManager::can_clone_image(int cloning_id, ostringstream& oss_error) img = ipool->get_ro(cloning_id); - if (img == 0) + if (img == nullptr) { oss_error << "Cannot clone image, it does not exist"; return -1; @@ -693,7 +696,7 @@ int ImageManager::set_clone_state( int rc = 0; Image * img = ipool->get(cloning_id); - if (img == 0) + if (img == nullptr) { error = "Cannot clone image, it does not exist"; return -1; @@ -749,16 +752,15 @@ int ImageManager::clone_image(int new_id, const string& extra_data, string& error) { - const ImageManagerDriver* imd = get(); + const auto* imd = get(); ostringstream oss; Image * img; string path; string img_tmpl; - string* drv_msg; - if ( imd == 0 ) + if ( imd == nullptr ) { error = "Could not get datastore driver"; @@ -773,7 +775,7 @@ int ImageManager::clone_image(int new_id, img = ipool->get_ro(new_id); - if (img == 0) + if (img == nullptr) { release_cloning_image(cloning_id, new_id); @@ -781,9 +783,11 @@ int ImageManager::clone_image(int new_id, return -1; } - drv_msg = format_message(img->to_xml(img_tmpl), ds_data, extra_data); + string drv_msg(format_message(img->to_xml(img_tmpl), ds_data, extra_data)); + + image_msg_t msg(ImageManagerMessages::CLONE, "", img->get_oid(), drv_msg); - imd->clone(img->get_oid(), *drv_msg); + imd->write(msg); oss << "Cloning image " << img->get_path() <<" to repository as image "<get_oid(); @@ -792,8 +796,6 @@ int ImageManager::clone_image(int new_id, img->unlock(); - delete drv_msg; - return 0; } @@ -805,17 +807,16 @@ int ImageManager::register_image(int iid, const string& extra_data, string& error) { - const ImageManagerDriver* imd = get(); + const auto* imd = get(); ostringstream oss; Image * img; string path; string img_tmpl; - string * drv_msg; - if ( imd == 0 ) + if ( imd == nullptr ) { error = "Could not get datastore driver"; NebulaLog::log("ImM",Log::ERROR, error); @@ -824,13 +825,13 @@ int ImageManager::register_image(int iid, img = ipool->get(iid); - if (img == 0) + if (img == nullptr) { error = "Image deleted during copy operation"; return -1; } - drv_msg = format_message(img->to_xml(img_tmpl), ds_data, extra_data); + string drv_msg(format_message(img->to_xml(img_tmpl), ds_data, extra_data)); path = img->get_path(); if ( path.empty() == true ) //NO PATH @@ -848,7 +849,8 @@ int ImageManager::register_image(int iid, else if ( img->is_saving() || img->get_type() == Image::DATABLOCK || img->get_type() == Image::OS) { - imd->mkfs(img->get_oid(), *drv_msg); + image_msg_t msg(ImageManagerMessages::MKFS, "", img->get_oid(), drv_msg); + imd->write(msg); oss << "Creating disk at " << source << " of "<< img->get_size() << "Mb (type: " << img->get_fstype() << ")"; @@ -856,7 +858,9 @@ int ImageManager::register_image(int iid, } else //PATH -> COPY TO REPOSITORY AS SOURCE { - imd->cp(img->get_oid(), *drv_msg); + image_msg_t msg(ImageManagerMessages::CP, "", img->get_oid(), drv_msg); + imd->write(msg); + oss << "Copying " << path <<" to repository for image "<get_oid(); } @@ -864,8 +868,6 @@ int ImageManager::register_image(int iid, img->unlock(); - delete drv_msg; - return 0; } /* -------------------------------------------------------------------------- */ @@ -875,18 +877,15 @@ int ImageManager::stat_image(Template* img_tmpl, const string& ds_data, string& res) { - const ImageManagerDriver* imd = get(); + const auto* imd = get(); - string* drv_msg; string type_att; ostringstream img_data; - SyncRequest sr; - int rc = 0; - if ( imd == 0 ) + if ( imd == nullptr ) { res = "Could not get datastore driver"; NebulaLog::log("ImM",Log::ERROR, res); @@ -975,16 +974,17 @@ int ImageManager::stat_image(Template* img_tmpl, break; } + SyncRequest sr; + add_request(&sr); - drv_msg = format_message(img_data.str(), ds_data, ""); + string drv_msg(format_message(img_data.str(), ds_data, "")); - imd->stat(sr.id, *drv_msg); + image_msg_t msg(ImageManagerMessages::STAT, "", sr.id, drv_msg); + imd->write(msg); sr.wait(); - delete drv_msg; - res = sr.message; if ( sr.result != true ) @@ -998,7 +998,7 @@ int ImageManager::stat_image(Template* img_tmpl, /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -string * ImageManager::format_message( +string ImageManager::format_message( const string& img_data, const string& ds_data, const string& extra_data) @@ -1011,7 +1011,10 @@ string * ImageManager::format_message( << extra_data << ""; - return one_util::base64_encode(oss.str()); + string base64; + ssl_util::base64_encode(oss.str(), base64); + + return base64; } /* -------------------------------------------------------------------------- */ @@ -1021,7 +1024,7 @@ void ImageManager::set_image_snapshots(int iid, const Snapshots& s) { Image * img = ipool->get(iid); - if ( img == 0 ) + if ( img == nullptr ) { return; } @@ -1077,7 +1080,7 @@ void ImageManager::set_image_size(int iid, long long size) { Image * img = ipool->get(iid); - if ( img == 0 ) + if ( img == nullptr ) { return; } @@ -1114,9 +1117,9 @@ void ImageManager::set_image_size(int iid, long long size) int ImageManager::delete_snapshot(int iid, int sid, string& error) { - const ImageManagerDriver* imd = get(); + const auto* imd = get(); - if ( imd == 0 ) + if ( imd == nullptr ) { error = "Could not get datastore driver"; NebulaLog::log("ImM",Log::ERROR, error); @@ -1126,7 +1129,7 @@ int ImageManager::delete_snapshot(int iid, int sid, string& error) Image * img = ipool->get_ro(iid); - if ( img == 0 ) + if ( img == nullptr ) { error = "Image does not exist"; return -1; @@ -1143,7 +1146,7 @@ int ImageManager::delete_snapshot(int iid, int sid, string& error) Datastore * ds = dspool->get_ro(ds_id); - if ( ds == 0 ) + if ( ds == nullptr ) { error = "Datastore no longer exists"; return -1; @@ -1160,7 +1163,7 @@ int ImageManager::delete_snapshot(int iid, int sid, string& error) /* ---------------------------------------------------------------------- */ img = ipool->get(iid); - if ( img == 0 ) + if ( img == nullptr ) { error = "Image does not exist"; return -1; @@ -1187,9 +1190,11 @@ int ImageManager::delete_snapshot(int iid, int sid, string& error) img->set_target_snapshot(sid); string img_tmpl; - string * drv_msg = format_message(img->to_xml(img_tmpl), ds_data, ""); + string drv_msg(format_message(img->to_xml(img_tmpl), ds_data, "")); + + image_msg_t msg(ImageManagerMessages::SNAP_DELETE, "", iid, drv_msg); - imd->snapshot_delete(iid, *drv_msg); + imd->write(msg); img->set_state(Image::LOCKED); @@ -1197,8 +1202,6 @@ int ImageManager::delete_snapshot(int iid, int sid, string& error) img->unlock(); - delete drv_msg; - return 0; } @@ -1207,9 +1210,9 @@ int ImageManager::delete_snapshot(int iid, int sid, string& error) int ImageManager::revert_snapshot(int iid, int sid, string& error) { - const ImageManagerDriver* imd = get(); + const auto* imd = get(); - if ( imd == 0 ) + if ( imd == nullptr ) { error = "Could not get datastore driver"; NebulaLog::log("ImM",Log::ERROR, error); @@ -1219,7 +1222,7 @@ int ImageManager::revert_snapshot(int iid, int sid, string& error) Image * img = ipool->get_ro(iid); - if ( img == 0 ) + if ( img == nullptr ) { error = "Image does not exist"; return -1; @@ -1236,7 +1239,7 @@ int ImageManager::revert_snapshot(int iid, int sid, string& error) Datastore * ds = dspool->get_ro(ds_id); - if ( ds == 0 ) + if ( ds == nullptr ) { error = "Datastore no longer exists"; return -1; @@ -1254,7 +1257,7 @@ int ImageManager::revert_snapshot(int iid, int sid, string& error) /* ---------------------------------------------------------------------- */ img = ipool->get(iid); - if ( img == 0 ) + if ( img == nullptr ) { error = "Image does not exist"; return -1; @@ -1291,9 +1294,11 @@ int ImageManager::revert_snapshot(int iid, int sid, string& error) img->set_target_snapshot(sid); string img_tmpl; - string * drv_msg = format_message(img->to_xml(img_tmpl), ds_data, ""); + string drv_msg(format_message(img->to_xml(img_tmpl), ds_data, "")); + + image_msg_t msg(ImageManagerMessages::SNAP_REVERT, "", iid, drv_msg); - imd->snapshot_revert(iid, *drv_msg); + imd->write(msg); img->set_state(Image::LOCKED); @@ -1301,8 +1306,6 @@ int ImageManager::revert_snapshot(int iid, int sid, string& error) img->unlock(); - delete drv_msg; - return 0; } @@ -1311,9 +1314,9 @@ int ImageManager::revert_snapshot(int iid, int sid, string& error) int ImageManager::flatten_snapshot(int iid, int sid, string& error) { - const ImageManagerDriver* imd = get(); + const auto* imd = get(); - if ( imd == 0 ) + if ( imd == nullptr ) { error = "Could not get datastore driver"; NebulaLog::log("ImM",Log::ERROR, error); @@ -1323,7 +1326,7 @@ int ImageManager::flatten_snapshot(int iid, int sid, string& error) Image * img = ipool->get_ro(iid); - if ( img == 0 ) + if ( img == nullptr ) { error = "Image does not exist"; return -1; @@ -1340,7 +1343,7 @@ int ImageManager::flatten_snapshot(int iid, int sid, string& error) Datastore * ds = dspool->get_ro(ds_id); - if ( ds == 0 ) + if ( ds == nullptr ) { error = "Datastore no longer exists"; return -1; @@ -1358,7 +1361,7 @@ int ImageManager::flatten_snapshot(int iid, int sid, string& error) img = ipool->get(iid); - if ( img == 0 ) + if ( img == nullptr ) { error = "Image does not exist"; return -1; @@ -1388,9 +1391,11 @@ int ImageManager::flatten_snapshot(int iid, int sid, string& error) img->set_target_snapshot(sid); string img_tmpl; - string * drv_msg = format_message(img->to_xml(img_tmpl), ds_data, ""); + string drv_msg(format_message(img->to_xml(img_tmpl), ds_data, "")); - imd->snapshot_flatten(iid, *drv_msg); + image_msg_t msg(ImageManagerMessages::SNAP_FLATTEN, "", iid, drv_msg); + + imd->write(msg); img->set_state(Image::LOCKED); @@ -1398,8 +1403,6 @@ int ImageManager::flatten_snapshot(int iid, int sid, string& error) img->unlock(); - delete drv_msg; - return 0; } diff --git a/src/image/ImageManagerDriver.cc b/src/image/ImageManagerDriver.cc deleted file mode 100644 index c6b17bf6fca..00000000000 --- a/src/image/ImageManagerDriver.cc +++ /dev/null @@ -1,1015 +0,0 @@ -/* -------------------------------------------------------------------------- */ -/* Copyright 2002-2020, OpenNebula Project, OpenNebula Systems */ -/* */ -/* Licensed under the Apache License, Version 2.0 (the "License"); you may */ -/* not use this file except in compliance with the License. You may obtain */ -/* a copy of the License at */ -/* */ -/* http://www.apache.org/licenses/LICENSE-2.0 */ -/* */ -/* Unless required by applicable law or agreed to in writing, software */ -/* distributed under the License is distributed on an "AS IS" BASIS, */ -/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */ -/* See the License for the specific language governing permissions and */ -/* limitations under the License. */ -/* -------------------------------------------------------------------------- */ - -#include "ImageManagerDriver.h" -#include "ImageManager.h" -#include "ImagePool.h" - -#include "NebulaLog.h" -#include "Quotas.h" -#include "VirtualMachinePool.h" -#include "VirtualMachineManagerDriver.h" -#include "TransferManager.h" - -#include "Nebula.h" -#include - -/* ************************************************************************** */ -/* Driver ASCII Protocol Implementation */ -/* ************************************************************************** */ - -void ImageManagerDriver::cp(int oid, - const string& drv_msg) const -{ - ostringstream os; - - os << "CP " << oid << " " << drv_msg << endl; - - write(os); -} - -/* -------------------------------------------------------------------------- */ - -void ImageManagerDriver::clone(int oid, - const string& drv_msg) const -{ - ostringstream os; - - os << "CLONE " << oid << " " << drv_msg << endl; - - write(os); -} - -/* -------------------------------------------------------------------------- */ -void ImageManagerDriver::stat(int oid, - const string& drv_msg) const -{ - ostringstream os; - - os << "STAT " << oid << " " << drv_msg << endl; - - write(os); -} - -/* -------------------------------------------------------------------------- */ - -void ImageManagerDriver::mkfs(int oid, - const string& drv_msg) const -{ - ostringstream os; - - os << "MKFS " << oid << " " << drv_msg << endl; - - write(os); -} - -/* -------------------------------------------------------------------------- */ - -void ImageManagerDriver::rm(int oid, const string& drv_msg) const -{ - ostringstream os; - - os << "RM " << oid << " " << drv_msg << endl; - - write(os); -} - -/* -------------------------------------------------------------------------- */ - -void ImageManagerDriver::monitor(int oid, const string& drv_msg) const -{ - ostringstream os; - - os << "MONITOR " << oid << " " << drv_msg << endl; - - write(os); -} - -/* -------------------------------------------------------------------------- */ - -void ImageManagerDriver::snapshot_delete(int oid, const string& drv_msg) const -{ - ostringstream os; - - os << "SNAP_DELETE " << oid << " " << drv_msg << endl; - - write(os); -} - -/* -------------------------------------------------------------------------- */ - -void ImageManagerDriver::snapshot_revert(int oid, const string& drv_msg) const -{ - ostringstream os; - - os << "SNAP_REVERT " << oid << " " << drv_msg << endl; - - write(os); -} - -/* -------------------------------------------------------------------------- */ - -void ImageManagerDriver::snapshot_flatten(int oid, const string& drv_msg) const -{ - ostringstream os; - - os << "SNAP_FLATTEN " << oid << " " << drv_msg << endl; - - write(os); -} - -/* -------------------------------------------------------------------------- */ -/* -------------------------------------------------------------------------- */ - -/* ************************************************************************** */ -/* MAD Interface */ -/* ************************************************************************** */ - -static void stat_action(istringstream& is, int id, const string& result) -{ - string size_mb; - string info; - - Nebula& nd = Nebula::instance(); - ImageManager * im = nd.get_imagem(); - - if ( result == "SUCCESS" ) - { - if ( is.good() ) - { - is >> size_mb >> ws; - } - - if ( is.fail() ) - { - im->notify_request(id, false, "Cannot get size from STAT"); - } - - im->notify_request(id, true, size_mb); - } - else - { - getline(is,info); - - im->notify_request(id, false, info); - } -} - -/* -------------------------------------------------------------------------- */ - -static int cp_action(istringstream& is, - ImagePool* ipool, - int id, - const string& result) -{ - string source; - string info; - int ds_id = -1; - - Image * image; - - ostringstream oss; - - image = ipool->get(id); - - if ( image == 0 ) - { - if (result == "SUCCESS") - { - ostringstream oss; - - if ( is.good()) - { - is >> source >> ws; - } - - if (!source.empty()) - { - oss << "CP operation succeeded but image no longer exists." - << " Source image: " << source << ", may be left in datastore"; - - NebulaLog::log("ImM", Log::ERROR, oss); - } - } - - return ds_id; - } - - ds_id = image->get_ds_id(); - - if ( result == "FAILURE" ) - { - goto error; - } - - if ( is.good() ) - { - is >> source >> ws; - } - - if ( is.fail() ) - { - goto error; - } - - image->set_source(source); - - image->set_state_unlock(); - - ipool->update(image); - - image->unlock(); - - oss << "Image (" << id << ") copied and ready to use."; - NebulaLog::log("ImM", Log::INFO, oss); - - return ds_id; - -error: - oss << "Error copying image in the datastore"; - - getline(is, info); - - if (!info.empty() && (info[0] != '-')) - { - oss << ": " << info; - } - - NebulaLog::log("ImM", Log::ERROR, oss); - - image->set_template_error_message(oss.str()); - image->set_state(Image::ERROR); - - ipool->update(image); - - image->unlock(); - - return ds_id; -} - -/* -------------------------------------------------------------------------- */ - -static int clone_action(istringstream& is, - ImagePool* ipool, - int id, - const string& result) -{ - int cloning_id; - int ds_id = -1; - string source; - string info; - - Image * image; - - ostringstream oss; - - Nebula& nd = Nebula::instance(); - ImageManager * im = nd.get_imagem(); - - image = ipool->get(id); - - if ( image == 0 ) - { - if (result == "SUCCESS") - { - ostringstream oss; - - if ( is.good()) - { - is >> source >> ws; - } - - if (!source.empty()) - { - oss << "CLONE operation succeeded but image no longer exists." - << " Source image: " << source << ", may be left in datastore"; - - NebulaLog::log("ImM", Log::ERROR, oss); - } - } - - return ds_id; - } - - ds_id = image->get_ds_id(); - cloning_id = image->get_cloning_id(); - - if ( result == "FAILURE" ) - { - goto error; - } - - if ( is.good() ) - { - is >> source >> ws; - } - - if ( is.fail() ) - { - goto error; - } - - image->set_source(source); - - image->set_state_unlock(); - - image->clear_cloning_id(); - - ipool->update(image); - - image->unlock(); - - NebulaLog::log("ImM", Log::INFO, "Image cloned and ready to use."); - - im->release_cloning_image(cloning_id, id); - - return ds_id; - -error: - oss << "Error cloning from Image " << cloning_id; - - getline(is, info); - - if (!info.empty() && (info[0] != '-')) - { - oss << ": " << info; - } - - NebulaLog::log("ImM", Log::ERROR, oss); - - image->set_template_error_message(oss.str()); - image->set_state(Image::ERROR); - - image->clear_cloning_id(); - - ipool->update(image); - - image->unlock(); - - im->release_cloning_image(cloning_id, id); - - return ds_id; -} - -/* -------------------------------------------------------------------------- */ - -static int mkfs_action(istringstream& is, - ImagePool* ipool, - int id, - const string& result) -{ - string source; - Image * image; - bool is_saving = false; - - string info; - - int vm_id = -1; - int ds_id = -1; - int disk_id = -1; - - VirtualMachine * vm; - ostringstream oss; - - Nebula& nd = Nebula::instance(); - VirtualMachinePool * vmpool = nd.get_vmpool(); - TransferManager * tm = nd.get_tm(); - - image = ipool->get(id); - - if ( image == 0 ) - { - if (result == "SUCCESS") - { - ostringstream oss; - - if ( is.good()) - { - is >> source >> ws; - } - - if (!source.empty()) - { - oss << "MkFS operation succeeded but image no longer exists." - << " Source image: " << source << ", may be left in datastore"; - - NebulaLog::log("ImM", Log::ERROR, oss); - } - } - - return ds_id; - } - else if ( image->get_state() == Image::DELETE ) - { - NebulaLog::log("ImM", Log::INFO, "Ignoring mkfs callback, image is " - "being deleted"); - - image->unlock(); - return ds_id; - } - - is_saving = image->is_saving(); - ds_id = image->get_ds_id(); - - if ( is_saving ) - { - image->get_template_attribute("SAVED_DISK_ID", disk_id); - image->get_template_attribute("SAVED_VM_ID", vm_id); - } - - if ( result == "FAILURE" ) - { - goto error_img; - } - - if ( !is.fail() ) - { - is >> source >> ws; - } - else - { - goto error_img; - } - - image->set_source(source); - - if (!is_saving) - { - image->set_state_unlock(); - } - - ipool->update(image); - - image->unlock(); - - if ( !is_saving ) - { - NebulaLog::log("ImM", Log::INFO, "Image created and ready to use"); - return ds_id; - } - - vm = vmpool->get(vm_id); - - if ( vm == 0 ) - { - goto error_save_get; - } - - if ( vm->set_saveas_disk(disk_id, source, id) == -1 ) - { - goto error_save_state; - } - - tm->trigger(TMAction::SAVEAS_HOT, vm_id); - - vmpool->update(vm); - - vm->unlock(); - - return ds_id; - -error_img: - oss << "Error creating datablock"; - goto error; - -error_save_get: - oss << "Image created to save as a disk but VM does not exist."; - goto error_save; - -error_save_state: - vm->unlock(); - oss << "Image created to save as disk but VM is no longer running"; - -error_save: - image = ipool->get(id); - - if ( image == 0 ) - { - NebulaLog::log("ImM", Log::ERROR, oss); - return ds_id; - } - -error: - getline(is,info); - - if (!info.empty() && (info[0] != '-')) - { - oss << ": " << info; - } - - NebulaLog::log("ImM", Log::ERROR, oss); - - image->set_template_error_message(oss.str()); - image->set_state(Image::ERROR); - - ipool->update(image); - - image->unlock(); - - if (is_saving && vm_id != -1) - { - if ((vm = vmpool->get(vm_id)) != 0) - { - vm->clear_saveas_state(); - - vm->clear_saveas_disk(); - - vmpool->update(vm); - - vm->unlock(); - } - } - - return ds_id; -} - -/* -------------------------------------------------------------------------- */ - -static int rm_action(istringstream& is, - ImagePool* ipool, - int id, - const string& result) -{ - int rc; - int ds_id = -1; - - string tmp_error; - string source; - string info; - Image * image; - - ostringstream oss; - - image = ipool->get(id); - - if ( image == 0 ) - { - return ds_id; - } - - ds_id = image->get_ds_id(); - source = image->get_source(); - - rc = ipool->drop(image, tmp_error); - - image->unlock(); - - if ( result == "FAILURE" ) - { - goto error; - } - else if ( rc < 0 ) - { - goto error_drop; - } - - NebulaLog::log("ImM", Log::INFO, "Image successfully removed."); - - return ds_id; - -error_drop: - oss << "Error removing image from DB: " << tmp_error - << ". Remove image source " << source << " to completely delete image."; - - NebulaLog::log("ImM", Log::ERROR, oss); - return ds_id; - -error: - oss << "Error removing image from datastore. Manually remove image source " - << source << " to completely delete the image"; - - getline(is,info); - - if (!info.empty() && (info[0] != '-')) - { - oss << ": " << info; - } - - NebulaLog::log("ImM", Log::ERROR, oss); - - return ds_id; -} - -/* -------------------------------------------------------------------------- */ - -static void monitor_action(istringstream& is, - DatastorePool* dspool, - int id, - const string& result) -{ - string dsinfo64; - string *dsinfo = 0; - - ostringstream oss; - - getline (is, dsinfo64); - - if (is.fail()) - { - oss << "Error monitoring datastore " << id << ". Bad monitor data: " - << dsinfo64; - - NebulaLog::log("ImM", Log::ERROR, oss); - return; - } - - dsinfo = one_util::base64_decode(dsinfo64); - - if (dsinfo == 0) - { - oss << "Error monitoring datastore " << id << ". Bad monitor data: " - << dsinfo64; - - NebulaLog::log("ImM", Log::ERROR, oss); - return; - } - - if (result != "SUCCESS") - { - oss << "Error monitoring datastore " << id << ": " << dsinfo64; - - if (!(*dsinfo).empty()) - { - oss << ". Decoded info: " << *dsinfo; - } - - NebulaLog::log("ImM", Log::ERROR, oss); - - delete dsinfo; - return; - } - - Template monitor_data; - - char* error_msg; - int rc = monitor_data.parse(*dsinfo, &error_msg); - - if ( rc != 0 ) - { - oss << "Error parsing datastore information: " << error_msg - << ". Monitoring information: " << endl << *dsinfo; - - NebulaLog::log("ImM", Log::ERROR, oss); - - delete dsinfo; - free(error_msg); - - return; - } - - delete dsinfo; - - float total, free, used; - string ds_name; - - monitor_data.get("TOTAL_MB", total); - monitor_data.get("FREE_MB", free); - monitor_data.get("USED_MB", used); - - Datastore * ds = dspool->get(id); - - if (ds == 0 ) - { - return; - } - - ds_name = ds->get_name(); - - ds->update_monitor(total, free, used); - - dspool->update(ds); - - ds->unlock(); - - oss << "Datastore " << ds_name << " (" << id << ") successfully monitored."; - - NebulaLog::log("ImM", Log::DEBUG, oss); - - return; -} - -/* -------------------------------------------------------------------------- */ - -static void snap_delete_action(istringstream& is, - ImagePool* ipool, - int id, - const string& result) -{ - ostringstream oss; - string info; - - long long snap_size; - int ds_id, uid, gid; - - Image * image = ipool->get(id); - - if ( image == 0 ) - { - return; - } - - image->set_state_unlock(); - - int snap_id = image->get_target_snapshot(); - - if (snap_id == -1) - { - NebulaLog::log("ImM", Log::ERROR, "No target snapshot in callback"); - - ipool->update(image); - - image->unlock(); - return; - } - - if ( result == "SUCCESS") - { - ds_id = image->get_ds_id(); - uid = image->get_uid(); - gid = image->get_gid(); - snap_size = (image->get_snapshots()).get_snapshot_size(snap_id); - - image->delete_snapshot(snap_id); - } - else - { - oss << "Error removing snapshot " << snap_id << " from image " << id; - - getline(is, info); - - if (!info.empty() && (info[0] != '-')) - { - oss << ": " << info; - } - - image->set_template_error_message(oss.str()); - - NebulaLog::log("ImM", Log::ERROR, oss); - } - - image->clear_target_snapshot(); - - ipool->update(image); - - image->unlock(); - - if (result == "SUCCESS") - { - Template quotas; - - quotas.add("DATASTORE", ds_id); - quotas.add("SIZE", snap_size); - quotas.add("IMAGES",0 ); - - Quotas::ds_del(uid, gid, "as); - } -} - -/* -------------------------------------------------------------------------- */ - -static void snap_revert_action(istringstream& is, - ImagePool* ipool, - int id, - const string& result) -{ - ostringstream oss; - string info; - - Image * image = ipool->get(id); - - if ( image == 0 ) - { - return; - } - - int snap_id = image->get_target_snapshot(); - - image->set_state_unlock(); - - if (snap_id == -1) - { - NebulaLog::log("ImM", Log::ERROR, "No target snapshot in callback"); - - ipool->update(image); - - image->unlock(); - return; - } - - if ( result == "SUCCESS") - { - image->revert_snapshot(snap_id); - } - else - { - oss << "Error reverting image " << id << " to snapshot " << snap_id; - - getline(is, info); - - if (!info.empty() && (info[0] != '-')) - { - oss << ": " << info; - } - - image->set_template_error_message(oss.str()); - - NebulaLog::log("ImM", Log::ERROR, oss); - } - - image->clear_target_snapshot(); - - ipool->update(image); - - image->unlock(); -} - -/* -------------------------------------------------------------------------- */ - -static void snap_flatten_action(istringstream& is, - ImagePool* ipool, - int id, - const string& result) -{ - ostringstream oss; - string info; - - long long snap_size; - int ds_id, uid, gid; - - Image * image = ipool->get(id); - - if ( image == 0 ) - { - return; - } - - if ( result == "SUCCESS") - { - ds_id = image->get_ds_id(); - uid = image->get_uid(); - gid = image->get_gid(); - snap_size = (image->get_snapshots()).get_total_size(); - - image->clear_snapshots(); - } - else - { - oss << "Error flattening image snapshot"; - - getline(is, info); - - if (!info.empty() && (info[0] != '-')) - { - oss << ": " << info; - } - - image->set_template_error_message(oss.str()); - - NebulaLog::log("ImM", Log::ERROR, oss); - } - - image->set_state_unlock(); - - image->clear_target_snapshot(); - - ipool->update(image); - - image->unlock(); - - if (result == "SUCCESS") - { - Template quotas; - - quotas.add("DATASTORE", ds_id); - quotas.add("SIZE", snap_size); - quotas.add("IMAGES",0 ); - - Quotas::ds_del(uid, gid, "as); - } -} - -/* -------------------------------------------------------------------------- */ -/* -------------------------------------------------------------------------- */ - -void ImageManagerDriver::protocol(const string& message) const -{ - istringstream is(message); - ostringstream oss; - - string action; - string result; - string source; - string info; - - int id; - int ds_id = -1; - - oss << "Message received: " << message; - NebulaLog::log("ImG", Log::DDEBUG, oss); - - // --------------------- Parse the driver message -------------------------- - - if ( is.good() ) - is >> action >> ws; - else - return; - - if ( is.good() ) - is >> result >> ws; - else - return; - - if ( is.good() ) - { - is >> id >> ws; - - if ( is.fail() ) - { - if ( action == "LOG" ) - { - is.clear(); - getline(is,info); - - NebulaLog::log("ImG",log_type(result[0]), info.c_str()); - } - - return; - } - } - else - return; - - if (action == "STAT") - { - stat_action(is, id, result); - } - else if (action == "CP") - { - ds_id = cp_action(is, ipool, id, result); - } - else if (action == "CLONE") - { - ds_id = clone_action(is, ipool, id, result); - } - else if (action == "MKFS") - { - ds_id = mkfs_action(is, ipool, id, result); - } - else if (action == "RM") - { - ds_id = rm_action(is, ipool, id, result); - } - else if (action == "MONITOR") - { - monitor_action(is, dspool, id, result); - } - else if (action == "SNAP_DELETE") - { - snap_delete_action(is, ipool, id, result); - } - else if (action == "SNAP_REVERT") - { - snap_revert_action(is, ipool, id, result); - } - else if (action == "SNAP_FLATTEN") - { - snap_flatten_action(is, ipool, id, result); - } - else if (action == "LOG") - { - getline(is,info); - NebulaLog::log("ImM", log_type(result[0]), info.c_str()); - } - - if (ds_id != -1) - { - Nebula& nd = Nebula::instance(); - ImageManager * im = nd.get_imagem(); - - im->monitor_datastore(ds_id); - } - - return; -} - -/* -------------------------------------------------------------------------- */ -/* -------------------------------------------------------------------------- */ - -void ImageManagerDriver::recover() -{ - NebulaLog::log("ImG",Log::INFO,"Recovering Image Repository drivers"); -} - diff --git a/src/image/ImageManagerProtocol.cc b/src/image/ImageManagerProtocol.cc new file mode 100644 index 00000000000..1afd08f9df7 --- /dev/null +++ b/src/image/ImageManagerProtocol.cc @@ -0,0 +1,732 @@ +/* -------------------------------------------------------------------------- */ +/* Copyright 2002-2020, OpenNebula Project, OpenNebula Systems */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); you may */ +/* not use this file except in compliance with the License. You may obtain */ +/* a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */ +/* See the License for the specific language governing permissions and */ +/* limitations under the License. */ +/* -------------------------------------------------------------------------- */ + +#include "ImageManager.h" +#include "ImagePool.h" +#include "DatastorePool.h" +#include "Quotas.h" +#include "TransferManager.h" +#include "VirtualMachine.h" +#include "VirtualMachinePool.h" +#include "Nebula.h" + +using namespace std; + +/* ************************************************************************** */ +/* Driver Protocol Implementation */ +/* ************************************************************************** */ + +void ImageManager::_undefined(unique_ptr msg) +{ + NebulaLog::warn("ImM", "Received UNDEFINED msg: " + msg->payload()); +} + +/* -------------------------------------------------------------------------- */ + +void ImageManager::_stat(unique_ptr msg) +{ + NebulaLog::dddebug("ImM", "_stat: " + msg->payload()); + + if (msg->status() == "SUCCESS") + { + if (msg->payload().empty()) + { + notify_request(msg->oid(), false, "Cannot get size from STAT"); + } + + notify_request(msg->oid(), true, msg->payload()); + } + else + { + notify_request(msg->oid(), false, msg->payload()); + } +} + +/* -------------------------------------------------------------------------- */ + +void ImageManager::_cp(unique_ptr msg) +{ + NebulaLog::dddebug("ImM", "_cp: " + msg->payload()); + + string source; + int ds_id = -1; + + ostringstream oss; + istringstream is(msg->payload()); + + auto image = ipool->get(msg->oid()); + + if (image == nullptr) + { + if (msg->status() == "SUCCESS") + { + is >> source >> ws; + + if (!source.empty()) + { + oss << "CP operation succeeded but image no longer exists." + << " Source image: " << source << ", may be left in datastore"; + + NebulaLog::log("ImM", Log::ERROR, oss); + } + } + + return; + } + + ds_id = image->get_ds_id(); + + if (msg->status() != "SUCCESS") + { + goto error; + } + + is >> source >> ws; + + if (is.fail()) + { + goto error; + } + + image->set_source(source); + + image->set_state_unlock(); + + ipool->update(image); + + image->unlock(); + + oss << "Image (" << msg->oid() << ") copied and ready to use."; + NebulaLog::log("ImM", Log::INFO, oss); + + monitor_datastore(ds_id); + + return; + +error: + oss << "Error copying image in the datastore"; + + const auto& info = msg->payload(); + + if (!info.empty() && (info[0] != '-')) + { + oss << ": " << info; + } + + NebulaLog::log("ImM", Log::ERROR, oss); + + image->set_template_error_message(oss.str()); + image->set_state(Image::ERROR); + + ipool->update(image); + + image->unlock(); + + monitor_datastore(ds_id); + + return; +} + +/* -------------------------------------------------------------------------- */ + +void ImageManager::_clone(unique_ptr msg) +{ + NebulaLog::dddebug("ImM", "_clone: " + msg->payload()); + + int cloning_id; + int ds_id = -1; + + Image * image = ipool->get(msg->oid()); + + if (image == nullptr) + { + if (msg->status() == "SUCCESS") + { + ostringstream oss; + + if (!msg->payload().empty()) + { + oss << "CLONE operation succeeded but image no longer exists." + << " Source image: " << msg->payload() + << ", may be left in datastore"; + + NebulaLog::log("ImM", Log::ERROR, oss); + } + } + + return; + } + + ds_id = image->get_ds_id(); + cloning_id = image->get_cloning_id(); + + if (msg->status() != "SUCCESS") + { + goto error; + } + + image->set_source(msg->payload()); + + image->set_state_unlock(); + + image->clear_cloning_id(); + + ipool->update(image); + + image->unlock(); + + NebulaLog::info("ImM", "Image cloned and ready to use."); + + release_cloning_image(cloning_id, msg->oid()); + + monitor_datastore(ds_id); + + return; + +error: + ostringstream oss; + + oss << "Error cloning from Image " << cloning_id; + + const auto& info = msg->payload(); + + if (!info.empty() && (info[0] != '-')) + { + oss << ": " << info; + } + + NebulaLog::log("ImM", Log::ERROR, oss); + + image->set_template_error_message(oss.str()); + image->set_state(Image::ERROR); + + image->clear_cloning_id(); + + ipool->update(image); + + image->unlock(); + + release_cloning_image(cloning_id, msg->oid()); +} + +/* -------------------------------------------------------------------------- */ + +void ImageManager::_mkfs(unique_ptr msg) +{ + NebulaLog::dddebug("ImM", "_mkfs: " + msg->payload()); + + int vm_id = -1; + int disk_id = -1; + + VirtualMachine * vm = nullptr; + + ostringstream oss; + + Nebula& nd = Nebula::instance(); + VirtualMachinePool * vmpool = nd.get_vmpool(); + TransferManager * tm = nd.get_tm(); + + Image * image = ipool->get(msg->oid()); + const string& source = msg->payload(); + + if (image == nullptr) + { + if (msg->status() == "SUCCESS") + { + ostringstream oss; + + if (!source.empty()) + { + oss << "MkFS operation succeeded but image no longer exists." + << " Source image: " << source << ", may be left in datastore"; + + NebulaLog::log("ImM", Log::ERROR, oss); + } + } + + return; + } + else if (image->get_state() == Image::DELETE) + { + NebulaLog::info("ImM", "Ignoring mkfs callback, image is " + "being deleted"); + + image->unlock(); + return; + } + + bool is_saving = image->is_saving(); + int ds_id = image->get_ds_id(); + + if (is_saving) + { + image->get_template_attribute("SAVED_DISK_ID", disk_id); + image->get_template_attribute("SAVED_VM_ID", vm_id); + } + + if (msg->status() != "SUCCESS") + { + goto error_img; + } + + image->set_source(source); + + if (!is_saving) + { + image->set_state_unlock(); + } + + ipool->update(image); + + image->unlock(); + + if (!is_saving) + { + NebulaLog::info("ImM", "Image created and ready to use"); + + monitor_datastore(ds_id); + + return; + } + + vm = vmpool->get(vm_id); + + if (vm == nullptr) + { + goto error_save_get; + } + + if (vm->set_saveas_disk(disk_id, source, msg->oid()) == -1) + { + goto error_save_state; + } + + tm->trigger_saveas_hot(vm_id); + + vmpool->update(vm); + + vm->unlock(); + + monitor_datastore(ds_id); + + return; + +error_img: + oss << "Error creating datablock"; + goto error; + +error_save_get: + oss << "Image created to save as a disk but VM does not exist."; + goto error_save; + +error_save_state: + vm->unlock(); + oss << "Image created to save as disk but VM is no longer running"; + +error_save: + image = ipool->get(msg->oid()); + + if (image == nullptr) + { + NebulaLog::log("ImM", Log::ERROR, oss); + return; + } + +error: + const auto& info = msg->payload(); + + if (!info.empty() && (info[0] != '-')) + { + oss << ": " << info; + } + + NebulaLog::log("ImM", Log::ERROR, oss); + + image->set_template_error_message(oss.str()); + image->set_state(Image::ERROR); + + ipool->update(image); + + image->unlock(); + + if (is_saving && vm_id != -1) + { + if ((vm = vmpool->get(vm_id)) != nullptr) + { + vm->clear_saveas_state(); + + vm->clear_saveas_disk(); + + vmpool->update(vm); + + vm->unlock(); + } + } + + monitor_datastore(ds_id); + + return; +} + +/* -------------------------------------------------------------------------- */ + +void ImageManager::_rm(unique_ptr msg) +{ + NebulaLog::dddebug("ImM", "_rm: " + msg->payload()); + + int ds_id = -1; + + string tmp_error; + Image * image; + + ostringstream oss; + + image = ipool->get(msg->oid()); + + if (image == nullptr) + { + return; + } + + ds_id = image->get_ds_id(); + const auto& source = image->get_source(); + + int rc = ipool->drop(image, tmp_error); + + image->unlock(); + + if (msg->status() != "SUCCESS") + { + goto error; + } + else if (rc < 0) + { + goto error_drop; + } + + NebulaLog::info("ImM", "Image successfully removed."); + + monitor_datastore(ds_id); + + return; + +error_drop: + oss << "Error removing image from DB: " << tmp_error + << ". Remove image source " << source << " to completely delete image."; + + NebulaLog::log("ImM", Log::ERROR, oss); + return; + +error: + oss << "Error removing image from datastore. Manually remove image source " + << source << " to completely delete the image"; + + const auto& info = msg->payload(); + + if (!info.empty() && (info[0] != '-')) + { + oss << ": " << info; + } + + NebulaLog::log("ImM", Log::ERROR, oss); + + return; +} + +/* -------------------------------------------------------------------------- */ + +void ImageManager::_monitor(unique_ptr msg) +{ + NebulaLog::dddebug("ImM", "_monitor: " + msg->payload()); + + ostringstream oss; + + string dsinfo64 = msg->payload(); + + if (dsinfo64.empty()) + { + oss << "Error monitoring datastore " << msg->oid() + << ". Bad monitor data: " << dsinfo64; + + NebulaLog::log("ImM", Log::ERROR, oss); + return; + } + + string dsinfo; + + ssl_util::base64_decode(dsinfo64, dsinfo); + + if (msg->status() != "SUCCESS") + { + oss << "Error monitoring datastore " << msg->oid() << ": " << dsinfo64; + + if (!dsinfo.empty()) + { + oss << ". Decoded info: " << dsinfo; + } + + NebulaLog::log("ImM", Log::ERROR, oss); + + return; + } + + Template monitor_data; + + char* error_msg; + int rc = monitor_data.parse(dsinfo, &error_msg); + + if (rc != 0) + { + oss << "Error parsing datastore information: " << error_msg + << ". Monitoring information: " << endl << dsinfo; + + NebulaLog::log("ImM", Log::ERROR, oss); + + free(error_msg); + + return; + } + + float total, free, used; + string ds_name; + + monitor_data.get("TOTAL_MB", total); + monitor_data.get("FREE_MB", free); + monitor_data.get("USED_MB", used); + + Datastore * ds = dspool->get(msg->oid()); + + if (ds == nullptr) + { + return; + } + + ds_name = ds->get_name(); + + ds->update_monitor(total, free, used); + + dspool->update(ds); + + ds->unlock(); + + oss << "Datastore " << ds_name << " (" << msg->oid() + << ") successfully monitored."; + + NebulaLog::debug("ImM", oss.str()); + + return; +} + +/* -------------------------------------------------------------------------- */ + +void ImageManager::_snap_delete(unique_ptr msg) +{ + NebulaLog::dddebug("ImM", "_snap_delete: " + msg->payload()); + + long long snap_size; + int ds_id, uid, gid; + + Image * image = ipool->get(msg->oid()); + + if (image == nullptr) + { + return; + } + + image->set_state_unlock(); + + int snap_id = image->get_target_snapshot(); + + if (snap_id == -1) + { + NebulaLog::error("ImM", "No target snapshot in callback"); + + ipool->update(image); + + image->unlock(); + return; + } + + if (msg->status() == "SUCCESS") + { + ds_id = image->get_ds_id(); + uid = image->get_uid(); + gid = image->get_gid(); + snap_size = (image->get_snapshots()).get_snapshot_size(snap_id); + + image->delete_snapshot(snap_id); + } + else + { + ostringstream oss; + + oss << "Error removing snapshot " << snap_id + << " from image " << msg->oid(); + + const auto& info = msg->payload(); + + if (!info.empty() && (info[0] != '-')) + { + oss << ": " << info; + } + + image->set_template_error_message(oss.str()); + + NebulaLog::log("ImM", Log::ERROR, oss); + } + + image->clear_target_snapshot(); + + ipool->update(image); + + image->unlock(); + + if (msg->status() == "SUCCESS") + { + Template quotas; + + quotas.add("DATASTORE", ds_id); + quotas.add("SIZE", snap_size); + quotas.add("IMAGES", 0); + + Quotas::ds_del(uid, gid, "as); + } +} + +/* -------------------------------------------------------------------------- */ + +void ImageManager::_snap_revert(unique_ptr msg) +{ + NebulaLog::dddebug("ImM", "_snap_revert: " + msg->payload()); + + Image * image = ipool->get(msg->oid()); + + if (image == nullptr) + { + return; + } + + int snap_id = image->get_target_snapshot(); + + image->set_state_unlock(); + + if (snap_id == -1) + { + NebulaLog::error("ImM", "No target snapshot in callback"); + + ipool->update(image); + + image->unlock(); + return; + } + + if (msg->status() == "SUCCESS") + { + image->revert_snapshot(snap_id); + } + else + { + ostringstream oss; + oss << "Error reverting image " << msg->oid() + << " to snapshot " << snap_id; + + const auto& info = msg->payload(); + + if (!info.empty() && (info[0] != '-')) + { + oss << ": " << info; + } + + image->set_template_error_message(oss.str()); + + NebulaLog::log("ImM", Log::ERROR, oss); + } + + image->clear_target_snapshot(); + + ipool->update(image); + + image->unlock(); +} + +/* -------------------------------------------------------------------------- */ + +void ImageManager::_snap_flatten(unique_ptr msg) +{ + NebulaLog::dddebug("ImM", "_snap_flatten: " + msg->payload()); + + long long snap_size; + int ds_id, uid, gid; + + Image * image = ipool->get(msg->oid()); + + if (image == nullptr) + { + return; + } + + if (msg->status() == "SUCCESS") + { + ds_id = image->get_ds_id(); + uid = image->get_uid(); + gid = image->get_gid(); + snap_size = (image->get_snapshots()).get_total_size(); + + image->clear_snapshots(); + } + else + { + ostringstream oss; + oss << "Error flattening image snapshot"; + + const auto& info = msg->payload(); + + if (!info.empty() && (info[0] != '-')) + { + oss << ": " << info; + } + + image->set_template_error_message(oss.str()); + + NebulaLog::log("ImM", Log::ERROR, oss); + } + + image->set_state_unlock(); + + image->clear_target_snapshot(); + + ipool->update(image); + + image->unlock(); + + if (msg->status() == "SUCCESS") + { + Template quotas; + + quotas.add("DATASTORE", ds_id); + quotas.add("SIZE", snap_size); + quotas.add("IMAGES", 0); + + Quotas::ds_del(uid, gid, "as); + } +} + +/* -------------------------------------------------------------------------- */ + +void ImageManager::_log(unique_ptr msg) +{ + NebulaLog::log("ImM", log_type(msg->status()[0]), msg->payload()); +} diff --git a/src/image/ImagePool.cc b/src/image/ImagePool.cc index e023a9e4434..c5d5ef98360 100644 --- a/src/image/ImagePool.cc +++ b/src/image/ImagePool.cc @@ -27,6 +27,8 @@ #include "VirtualMachineDisk.h" #include "DatastorePool.h" +using namespace std; + /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ string ImagePool::_default_type; @@ -43,7 +45,7 @@ ImagePool::ImagePool( const string& __default_cdrom_dev_prefix, vector& restricted_attrs, const vector& _inherit_attrs) - :PoolSQL(db, Image::table) + : PoolSQL(db, one_db::image_table) { // Init static defaults _default_type = __default_type; diff --git a/src/image/SConstruct b/src/image/SConstruct index 3c3d3683bce..9a2c600d821 100644 --- a/src/image/SConstruct +++ b/src/image/SConstruct @@ -24,7 +24,7 @@ lib_name='nebula_image' source_files=[ 'Image.cc', 'ImagePool.cc', - 'ImageManagerDriver.cc', + 'ImageManagerProtocol.cc', 'ImageManager.cc', 'ImageManagerActions.cc', 'ImageTemplate.cc' diff --git a/src/ipamm/IPAMManager.cc b/src/ipamm/IPAMManager.cc index 48344c82d5f..d88e42c42e3 100644 --- a/src/ipamm/IPAMManager.cc +++ b/src/ipamm/IPAMManager.cc @@ -17,213 +17,140 @@ #include "IPAMManager.h" #include "IPAMRequest.h" +using std::string; + /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ const char * IPAMManager::ipam_driver_name = "ipam_exe"; -/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -extern "C" void * ipamm_action_loop(void *arg) +int IPAMManager::start() { - IPAMManager * ipamm; - - if ( arg == 0 ) - { - return 0; - } - - ipamm = static_cast(arg); + using namespace std::placeholders; // for _1 - NebulaLog::log("IPM",Log::INFO,"IPAM Manager started."); + register_action(IPAMManagerMessages::UNDEFINED, + &IPAMManager::_undefined); - ipamm->am.loop(ipamm->timer_period); + register_action(IPAMManagerMessages::REGISTER_ADDRESS_RANGE, + bind(&IPAMManager::_notify_request, this, _1)); - NebulaLog::log("IPM",Log::INFO,"IPAM Manager stopped."); + register_action(IPAMManagerMessages::UNREGISTER_ADDRESS_RANGE, + bind(&IPAMManager::_notify_request, this, _1)); - return 0; -} + register_action(IPAMManagerMessages::GET_ADDRESS, + bind(&IPAMManager::_notify_request, this, _1)); -/* -------------------------------------------------------------------------- */ + register_action(IPAMManagerMessages::ALLOCATE_ADDRESS, + bind(&IPAMManager::_notify_request, this, _1)); -int IPAMManager::start() -{ - int rc; - pthread_attr_t pattr; + register_action(IPAMManagerMessages::FREE_ADDRESS, + bind(&IPAMManager::_notify_request, this, _1)); - rc = MadManager::start(); + register_action(IPAMManagerMessages::LOG, + &IPAMManager::_log); - if ( rc != 0 ) + string error; + if ( DriverManager::start(error) != 0 ) { + NebulaLog::error("IPM", error); return -1; } NebulaLog::log("IPM",Log::INFO,"Starting IPAM Manager..."); - pthread_attr_init(&pattr); - pthread_attr_setdetachstate(&pattr, PTHREAD_CREATE_JOINABLE); - - rc = pthread_create(&ipamm_thread, &pattr, ipamm_action_loop, (void *)this); + Listener::start(); - return rc; + return 0; } /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -void IPAMManager::user_action(const ActionRequest& ar) +void IPAMManager::send_request(IPAMManagerMessages type, IPAMRequest& ir) { - const IPMAction& ipam_ar = static_cast(ar); - - IPAMRequest * request = ipam_ar.request(); + auto ipammd = get(); - if ( request == 0 ) + if (ipammd == nullptr) { - return; - } - - switch(ipam_ar.action()) - { - case IPMAction::REGISTER_ADDRESS_RANGE: - register_address_range_action(request); - break; + ir.result = false; + ir.message = "Could not find the IPAM driver"; - case IPMAction::UNREGISTER_ADDRESS_RANGE: - unregister_address_range_action(request); - break; + ir.notify(); - case IPMAction::ALLOCATE_ADDRESS: - allocate_address_action(request); - break; - - case IPMAction::GET_ADDRESS: - get_address_action(request); - break; - - case IPMAction::FREE_ADDRESS: - free_address_action(request); - break; + return; } -} - -/* -------------------------------------------------------------------------- */ -/* -------------------------------------------------------------------------- */ - -const IPAMManagerDriver * IPAMManager::setup_request(IPAMRequest * ir) -{ - const IPAMManagerDriver * ipammd = get(); - - if (ipammd == 0) - { - ir->result = false; - ir->message = "Could not find the IPAM driver"; - ir->notify(); + add_request(&ir); - return 0; - } + string action_data; + ipam_msg_t msg(type, "", ir.id, ir.to_xml64(action_data)); - add_request(ir); - - return ipammd; + ipammd->write(msg); } /* -------------------------------------------------------------------------- */ -void IPAMManager::register_address_range_action(IPAMRequest * ir) +void IPAMManager::trigger_register_address_range(IPAMRequest& ir) { - std::string action_data; - const IPAMManagerDriver * ipammd = setup_request(ir); - - if (ipammd == 0) - { - return; - } - - ipammd->register_address_range(ir->id, ir->to_xml64(action_data)); + trigger([&] { + send_request(IPAMManagerMessages::REGISTER_ADDRESS_RANGE, ir); + }); } - /* -------------------------------------------------------------------------- */ -void IPAMManager::unregister_address_range_action(IPAMRequest * ir) +void IPAMManager::trigger_unregister_address_range(IPAMRequest& ir) { - std::string action_data; - const IPAMManagerDriver * ipammd = setup_request(ir); - - if (ipammd == 0) - { - return; - } - - ipammd->unregister_address_range(ir->id, ir->to_xml64(action_data)); + trigger([&] { + send_request(IPAMManagerMessages::UNREGISTER_ADDRESS_RANGE, ir); + }); } /* -------------------------------------------------------------------------- */ -void IPAMManager::get_address_action(IPAMRequest * ir) +void IPAMManager::trigger_get_address(IPAMRequest& ir) { - std::string action_data; - const IPAMManagerDriver * ipammd = setup_request(ir); - - if (ipammd == 0) - { - return; - } - - ipammd->get_address(ir->id, ir->to_xml64(action_data)); + trigger([&] { + send_request(IPAMManagerMessages::GET_ADDRESS, ir); + }); } /* -------------------------------------------------------------------------- */ -void IPAMManager::allocate_address_action(IPAMRequest * ir) +void IPAMManager::trigger_allocate_address(IPAMRequest& ir) { - std::string action_data; - const IPAMManagerDriver * ipammd = setup_request(ir); - - if (ipammd == 0) - { - return; - } - - ipammd->allocate_address(ir->id, ir->to_xml64(action_data)); + trigger([&] { + send_request(IPAMManagerMessages::ALLOCATE_ADDRESS, ir); + }); } /* -------------------------------------------------------------------------- */ -void IPAMManager::free_address_action(IPAMRequest * ir) +void IPAMManager::trigger_free_address(IPAMRequest& ir) { - std::string action_data; - const IPAMManagerDriver * ipammd = setup_request(ir); - - if (ipammd == 0) - { - return; - } - - ipammd->free_address(ir->id, ir->to_xml64(action_data)); + trigger([&] { + send_request(IPAMManagerMessages::FREE_ADDRESS, ir); + }); } /* ************************************************************************** */ /* MAD Loading */ /* ************************************************************************** */ -int IPAMManager::load_mads(int uid) +int IPAMManager::load_drivers(const std::vector& _mads) { - const VectorAttribute * vattr; - IPAMManagerDriver * ipamm_driver; - - if ( mad_conf.size() == 0 ) + if ( _mads.size() == 0 ) { return 0; } NebulaLog::log("IPM", Log::INFO, "Loading IPAM Manager driver."); - vattr = dynamic_cast(mad_conf[0]); + const VectorAttribute * vattr = _mads[0]; - if ( vattr == 0 ) + if ( vattr == nullptr ) { NebulaLog::log("IPM", Log::ERROR, "Failed to load IPAM Manager driver."); return -1; @@ -233,10 +160,9 @@ int IPAMManager::load_mads(int uid) ipam_conf.replace("NAME", ipam_driver_name); - ipamm_driver = new IPAMManagerDriver(uid, ipam_conf.value(), false, this); - - if ( add(ipamm_driver) != 0 ) + if ( load_driver(&ipam_conf) != 0 ) { + NebulaLog::error("ImM", "Unable to load IPAM Manager driver"); return -1; } diff --git a/src/ipamm/IPAMManagerDriver.cc b/src/ipamm/IPAMManagerProtocol.cc similarity index 59% rename from src/ipamm/IPAMManagerDriver.cc rename to src/ipamm/IPAMManagerProtocol.cc index 7bf6369de62..e5127a0bdd1 100644 --- a/src/ipamm/IPAMManagerDriver.cc +++ b/src/ipamm/IPAMManagerProtocol.cc @@ -14,84 +14,48 @@ /* limitations under the License. */ /* -------------------------------------------------------------------------- */ -#include "IPAMManagerDriver.h" #include "IPAMManager.h" #include "NebulaLog.h" #include +using namespace std; + /* ************************************************************************** */ -/* MAD Interface */ +/* Driver Protocol Implementation */ /* ************************************************************************** */ -void IPAMManagerDriver::protocol(const string& message) const +void IPAMManager::_undefined(unique_ptr msg) { - istringstream is(message); - ostringstream os; - - string action; - string result; - string info=""; - - int id; - - os << "Message received: " << message; - NebulaLog::log("IPM", Log::DEBUG, os); - - // Parse the driver message - if ( is.good() ) - is >> action >> ws; - else - return; - - if ( is.good() ) - is >> result >> ws; - else - return; - - if ( is.good() ) - { - is >> id >> ws; + NebulaLog::warn("IPM", "Received UNDEFINED msg: " + msg->payload()); +} - if ( is.fail() ) - { - if ( action == "LOG" ) - { - is.clear(); - getline(is,info); +/* -------------------------------------------------------------------------- */ - NebulaLog::log("IPM", log_type(result[0]), info.c_str()); - } +void IPAMManager::_notify_request(unique_ptr msg) +{ + ostringstream os; - return; - } - } - else - return; + os << "Message received: "; + msg->write_to(os); - getline(is, info); + NebulaLog::log("IPM", Log::DEBUG, os); - if (action == "LOG") - { - NebulaLog::log("IPM", Log::INFO, info.c_str()); - } - else if (result == "SUCCESS") + if (msg->status() == "SUCCESS") { - ipamm->notify_request(id, true, info); + notify_request(msg->oid(), true, msg->payload()); } else { - ipamm->notify_request(id, false, info); + notify_request(msg->oid(), false, msg->payload()); } return; } -/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -void IPAMManagerDriver::recover() +void IPAMManager::_log(unique_ptr msg) { - NebulaLog::log("IPM",Log::INFO,"Recovering IPAM drivers"); + NebulaLog::log("IPM", log_type(msg->status()[0]), msg->payload()); } - diff --git a/src/ipamm/SConstruct b/src/ipamm/SConstruct index fd8a26cf51a..76086fe1363 100644 --- a/src/ipamm/SConstruct +++ b/src/ipamm/SConstruct @@ -23,7 +23,7 @@ lib_name='nebula_ipamm' # Sources to generate the library source_files=[ 'IPAMManager.cc', - 'IPAMManagerDriver.cc', + 'IPAMManagerProtocol.cc', 'IPAMRequest.cc' ] diff --git a/src/lcm/LifeCycleActions.cc b/src/lcm/LifeCycleActions.cc index c7516e8e6c6..c5d7fd5555f 100644 --- a/src/lcm/LifeCycleActions.cc +++ b/src/lcm/LifeCycleActions.cc @@ -18,950 +18,967 @@ #include "TransferManager.h" #include "DispatchManager.h" #include "VirtualMachineManager.h" +#include "ClusterPool.h" +#include "HostPool.h" +#include "ImagePool.h" +#include "SecurityGroupPool.h" +#include "VirtualMachinePool.h" #include "Request.h" -void LifeCycleManager::deploy_action(const LCMAction& la) +using namespace std; + +void LifeCycleManager::trigger_deploy(int vid) { - VirtualMachine * vm; - ostringstream os; + trigger([this, vid] { + ostringstream os; - int vid = la.vm_id(); + VirtualMachine * vm = vmpool->get(vid); - vm = vmpool->get(vid); + if ( vm == nullptr ) + { + return; + } - if ( vm == 0 ) - { - return; - } + if ( vm->get_state() == VirtualMachine::ACTIVE ) + { + HostShareCapacity sr; - if ( vm->get_state() == VirtualMachine::ACTIVE ) - { - HostShareCapacity sr; + time_t thetime = time(0); + int rc; - time_t thetime = time(0); - int rc; + VirtualMachine::LcmState vm_state; - VirtualMachine::LcmState vm_state; - TMAction::Actions tm_action; + //---------------------------------------------------- + // PROLOG STATE + //---------------------------------------------------- - //---------------------------------------------------- - // PROLOG STATE - //---------------------------------------------------- + vm->get_capacity(sr); - vm->get_capacity(sr); + vm_state = VirtualMachine::PROLOG; - vm_state = VirtualMachine::PROLOG; - tm_action = TMAction::PROLOG; + void (TransferManager::*tm_action)(VirtualMachine *) = + &TransferManager::trigger_prolog; - if (vm->hasPreviousHistory()) - { - if (vm->get_previous_action() == VMActions::STOP_ACTION) + if (vm->hasPreviousHistory()) { - vm_state = VirtualMachine::PROLOG_RESUME; - tm_action = TMAction::PROLOG_RESUME; - } - else if (vm->get_previous_action() == VMActions::UNDEPLOY_ACTION || - vm->get_previous_action() == VMActions::UNDEPLOY_HARD_ACTION) - { - vm_state = VirtualMachine::PROLOG_UNDEPLOY; - tm_action = TMAction::PROLOG_RESUME; + if (vm->get_previous_action() == VMActions::STOP_ACTION) + { + vm_state = VirtualMachine::PROLOG_RESUME; + tm_action = &TransferManager::trigger_prolog_resume; + } + else if (vm->get_previous_action() == VMActions::UNDEPLOY_ACTION || + vm->get_previous_action() == VMActions::UNDEPLOY_HARD_ACTION) + { + vm_state = VirtualMachine::PROLOG_UNDEPLOY; + tm_action = &TransferManager::trigger_prolog_resume; + } } - } - vm->set_state(vm_state); + vm->set_state(vm_state); - rc = hpool->add_capacity(vm->get_hid(), sr); + rc = hpool->add_capacity(vm->get_hid(), sr); - vm->set_stime(thetime); + vm->set_stime(thetime); - vm->set_prolog_stime(thetime); + vm->set_prolog_stime(thetime); - vmpool->update_history(vm); + vmpool->update_history(vm); - vmpool->update(vm); + vmpool->update(vm); - if ( rc == -1) - { - //The host has been deleted, move VM to FAILURE - this->trigger(LCMAction::PROLOG_FAILURE, vid); + if ( rc == -1) + { + //The host has been deleted, move VM to FAILURE + trigger_prolog_failure(vid); + } + else + { + (tm->*tm_action)(vm); + } } else { - tm->trigger(tm_action, vid); + vm->log("LCM", Log::ERROR, "deploy_action, VM in a wrong state."); } - } - else - { - vm->log("LCM", Log::ERROR, "deploy_action, VM in a wrong state."); - } - - vm->unlock(); - return; + vm->unlock(); + }); } /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -void LifeCycleManager::suspend_action(const LCMAction& la) +void LifeCycleManager::trigger_suspend(int vid, const RequestAttributes& ra) { - int vid = la.vm_id(); + int uid = ra.uid; + int gid = ra.gid; + int req_id = ra.req_id; - VirtualMachine * vm = vmpool->get(vid); - - if ( vm == 0 ) - { - return; - } + trigger([this, vid, uid, gid, req_id] { + VirtualMachine * vm = vmpool->get(vid); - if (vm->get_state() == VirtualMachine::ACTIVE && - vm->get_lcm_state() == VirtualMachine::RUNNING) - { - //---------------------------------------------------- - // SAVE_SUSPEND STATE - //---------------------------------------------------- + if ( vm == nullptr ) + { + return; + } - vm->set_state(VirtualMachine::SAVE_SUSPEND); + if (vm->get_state() == VirtualMachine::ACTIVE && + vm->get_lcm_state() == VirtualMachine::RUNNING) + { + //---------------------------------------------------- + // SAVE_SUSPEND STATE + //---------------------------------------------------- - vm->set_resched(false); + vm->set_state(VirtualMachine::SAVE_SUSPEND); - vm->set_action(VMActions::SUSPEND_ACTION, la.uid(), la.gid(), la.req_id()); + vm->set_resched(false); - vmpool->update_history(vm); + vm->set_action(VMActions::SUSPEND_ACTION, uid, gid, req_id); - vmpool->update(vm); + vmpool->update_history(vm); - //---------------------------------------------------- + vmpool->update(vm); - vmm->trigger(VMMAction::SAVE,vid); - } - else - { - vm->log("LCM", Log::ERROR, "suspend_action, VM in a wrong state."); - } + //---------------------------------------------------- - vm->unlock(); + vmm->trigger_save(vid); + } + else + { + vm->log("LCM", Log::ERROR, "suspend_action, VM in a wrong state."); + } - return; + vm->unlock(); + }); } /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -void LifeCycleManager::stop_action(const LCMAction& la) +void LifeCycleManager::trigger_stop(int vid, const RequestAttributes& ra) { - int vid = la.vm_id(); + int uid = ra.uid; + int gid = ra.gid; + int req_id = ra.req_id; - VirtualMachine * vm = vmpool->get(vid); + trigger([this, vid, uid, gid, req_id] { + VirtualMachine * vm = vmpool->get(vid); - if ( vm == 0 ) - { - return; - } - - if (vm->get_state() == VirtualMachine::ACTIVE && - vm->get_lcm_state() == VirtualMachine::RUNNING) - { - //---------------------------------------------------- - // SAVE_STOP STATE - //---------------------------------------------------- + if ( vm == nullptr ) + { + return; + } - vm->set_state(VirtualMachine::SAVE_STOP); + if (vm->get_state() == VirtualMachine::ACTIVE && + vm->get_lcm_state() == VirtualMachine::RUNNING) + { + //---------------------------------------------------- + // SAVE_STOP STATE + //---------------------------------------------------- - vm->set_resched(false); + vm->set_state(VirtualMachine::SAVE_STOP); - vm->set_action(VMActions::STOP_ACTION, la.uid(), la.gid(), la.req_id()); + vm->set_resched(false); - vmpool->update_history(vm); + vm->set_action(VMActions::STOP_ACTION, uid, gid, req_id); - vmpool->update(vm); + vmpool->update_history(vm); - //---------------------------------------------------- + vmpool->update(vm); - vmm->trigger(VMMAction::SAVE,vid); - } - else if (vm->get_state() == VirtualMachine::SUSPENDED) - { - //---------------------------------------------------- - // Bypass SAVE_STOP - //---------------------------------------------------- - vm->set_state(VirtualMachine::ACTIVE); - vm->set_state(VirtualMachine::EPILOG_STOP); + //---------------------------------------------------- - vm->set_action(VMActions::STOP_ACTION, la.uid(), la.gid(), la.req_id()); + vmm->trigger_save(vid); + } + else if (vm->get_state() == VirtualMachine::SUSPENDED) + { + //---------------------------------------------------- + // Bypass SAVE_STOP + //---------------------------------------------------- + vm->set_state(VirtualMachine::ACTIVE); + vm->set_state(VirtualMachine::EPILOG_STOP); - vm->set_epilog_stime(time(0)); + vm->set_action(VMActions::STOP_ACTION, uid, gid, req_id); - vmpool->update_history(vm); + vm->set_epilog_stime(time(0)); - vmpool->update(vm); + vmpool->update_history(vm); - //---------------------------------------------------- + vmpool->update(vm); - tm->trigger(TMAction::EPILOG_STOP,vid); - } - else - { - vm->log("LCM", Log::ERROR, "stop_action, VM in a wrong state."); - } + //---------------------------------------------------- - vm->unlock(); + tm->trigger_epilog_stop(vm); + } + else + { + vm->log("LCM", Log::ERROR, "stop_action, VM in a wrong state."); + } - return; + vm->unlock(); + }); } /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -void LifeCycleManager::migrate_action(const LCMAction& la) +void LifeCycleManager::trigger_migrate(int vid, const RequestAttributes& ra, + VMActions::Action vm_action) { - HostShareCapacity sr; - - time_t the_time = time(0); - - int vid = la.vm_id(); + int uid = ra.uid; + int gid = ra.gid; + int req_id = ra.req_id; - VirtualMachine * vm = vmpool->get(vid); - - if ( vm == 0 ) - { - return; - } + trigger([this, vid, uid, gid, req_id, vm_action] { + HostShareCapacity sr; - if (vm->get_state() == VirtualMachine::ACTIVE && - vm->get_lcm_state() == VirtualMachine::RUNNING) - { - //---------------------------------------------------- - // SAVE_MIGRATE STATE - //---------------------------------------------------- + time_t the_time = time(0); - VMActions::Action action; + VirtualMachine * vm = vmpool->get(vid); - switch (la.action()) + if ( vm == nullptr ) { - case LCMAction::POFF_MIGRATE : - action = VMActions::POFF_MIGRATE_ACTION; - break; - case LCMAction::POFF_HARD_MIGRATE : - action = VMActions::POFF_HARD_MIGRATE_ACTION; - break; - default : - action = VMActions::MIGRATE_ACTION; - break; + return; } - vm->set_state(VirtualMachine::SAVE_MIGRATE); + if (vm->get_state() == VirtualMachine::ACTIVE && + vm->get_lcm_state() == VirtualMachine::RUNNING) + { + //---------------------------------------------------- + // SAVE_MIGRATE STATE + //---------------------------------------------------- - vm->set_resched(false); + vm->set_state(VirtualMachine::SAVE_MIGRATE); - vm->get_capacity(sr); + vm->set_resched(false); - hpool->add_capacity(vm->get_hid(), sr); + vm->get_capacity(sr); - vm->set_stime(the_time); + hpool->add_capacity(vm->get_hid(), sr); - vm->set_action(action, la.uid(), la.gid(), la.req_id()); + vm->set_stime(the_time); - vmpool->update_history(vm); + vm->set_action(vm_action, uid, gid, req_id); - vm->set_previous_action(action, la.uid(), la.gid(), la.req_id()); + vmpool->update_history(vm); - vmpool->update_previous_history(vm); + vm->set_previous_action(vm_action, uid, gid, req_id); - vmpool->update(vm); + vmpool->update_previous_history(vm); - //---------------------------------------------------- + vmpool->update(vm); - switch (la.action()) - { - case LCMAction::POFF_MIGRATE : - vmm->trigger(VMMAction::SHUTDOWN,vid); - break; - case LCMAction::POFF_HARD_MIGRATE : - vmm->trigger(VMMAction::CANCEL,vid); - break; - default : - vmm->trigger(VMMAction::SAVE,vid); - break; - } + //---------------------------------------------------- - } - else if (vm->get_state() == VirtualMachine::POWEROFF || - vm->get_state() == VirtualMachine::SUSPENDED || - (vm->get_state() == VirtualMachine::ACTIVE && - vm->get_lcm_state() == VirtualMachine::UNKNOWN )) - { - //---------------------------------------------------------------------- - // Bypass SAVE_MIGRATE & go to PROLOG_MIGRATE_POWEROFF/SUSPENDED/UNKNOWN - //---------------------------------------------------------------------- - if (vm->get_state() == VirtualMachine::POWEROFF) - { - vm->set_state(VirtualMachine::PROLOG_MIGRATE_POWEROFF); - } - else if (vm->get_state() == VirtualMachine::SUSPENDED) - { - vm->set_state(VirtualMachine::PROLOG_MIGRATE_SUSPEND); + switch (vm_action) + { + case VMActions::POFF_MIGRATE_ACTION: + vmm->trigger_shutdown(vid); + break; + case VMActions::POFF_HARD_MIGRATE_ACTION: + vmm->trigger_cancel(vid); + break; + default: + vmm->trigger_save(vid); + break; + } } - else //VirtualMachine::UNKNOWN + else if (vm->get_state() == VirtualMachine::POWEROFF || + vm->get_state() == VirtualMachine::SUSPENDED || + (vm->get_state() == VirtualMachine::ACTIVE && + vm->get_lcm_state() == VirtualMachine::UNKNOWN )) { - vm->set_state(VirtualMachine::PROLOG_MIGRATE_UNKNOWN); - - vm->set_previous_action(VMActions::MIGRATE_ACTION, la.uid(), - la.gid(), la.req_id()); - } + //---------------------------------------------------------------------- + // Bypass SAVE_MIGRATE & go to PROLOG_MIGRATE_POWEROFF/SUSPENDED/UNKNOWN + //---------------------------------------------------------------------- + if (vm->get_state() == VirtualMachine::POWEROFF) + { + vm->set_state(VirtualMachine::PROLOG_MIGRATE_POWEROFF); + } + else if (vm->get_state() == VirtualMachine::SUSPENDED) + { + vm->set_state(VirtualMachine::PROLOG_MIGRATE_SUSPEND); + } + else //VirtualMachine::UNKNOWN + { + vm->set_state(VirtualMachine::PROLOG_MIGRATE_UNKNOWN); - vm->set_previous_running_etime(the_time); + vm->set_previous_action(VMActions::MIGRATE_ACTION, uid, + gid, req_id); + } - vm->set_previous_etime(the_time); + vm->set_previous_running_etime(the_time); - vmpool->update_previous_history(vm); + vm->set_previous_etime(the_time); - vm->set_state(VirtualMachine::ACTIVE); + vmpool->update_previous_history(vm); - vm->set_resched(false); + vm->set_state(VirtualMachine::ACTIVE); - if ( !vmm->is_keep_snapshots(vm->get_vmm_mad()) ) - { - vm->delete_snapshots(); - } + vm->set_resched(false); - vm->set_action(VMActions::MIGRATE_ACTION, la.uid(), la.gid(), la.req_id()); + if ( !vmm->is_keep_snapshots(vm->get_vmm_mad()) ) + { + vm->delete_snapshots(); + } - vm->get_capacity(sr); + vm->set_action(VMActions::MIGRATE_ACTION, uid, gid, req_id); - hpool->add_capacity(vm->get_hid(), sr); + vm->get_capacity(sr); - if ( vm->get_hid() != vm->get_previous_hid() ) - { - hpool->del_capacity(vm->get_previous_hid(), sr); - } + hpool->add_capacity(vm->get_hid(), sr); - vm->set_stime(the_time); + if ( vm->get_hid() != vm->get_previous_hid() ) + { + hpool->del_capacity(vm->get_previous_hid(), sr); + } - vm->set_prolog_stime(the_time); + vm->set_stime(the_time); - vmpool->update_history(vm); + vm->set_prolog_stime(the_time); - vmpool->update(vm); + vmpool->update_history(vm); - //---------------------------------------------------- + vmpool->update(vm); - tm->trigger(TMAction::PROLOG_MIGR,vid); - } - else - { - vm->log("LCM", Log::ERROR, "migrate_action, VM in a wrong state."); - } + //---------------------------------------------------- - vm->unlock(); + tm->trigger_prolog_migr(vm); + } + else + { + vm->log("LCM", Log::ERROR, "migrate_action, VM in a wrong state."); + } - return; + vm->unlock(); + }); } /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -void LifeCycleManager::live_migrate_action(const LCMAction& la) +void LifeCycleManager::trigger_live_migrate(int vid, const RequestAttributes& ra) { - ostringstream os; + int uid = ra.uid; + int gid = ra.gid; + int req_id = ra.req_id; - int vid = la.vm_id(); + trigger([this, vid, uid, gid, req_id] { + ostringstream os; - VirtualMachine * vm = vmpool->get(vid); + VirtualMachine * vm = vmpool->get(vid); - if ( vm == 0 ) - { - return; - } - - if (vm->get_state() == VirtualMachine::ACTIVE && - vm->get_lcm_state() == VirtualMachine::RUNNING) - { - HostShareCapacity sr; + if ( vm == nullptr ) + { + return; + } - //---------------------------------------------------- - // MIGRATE STATE - //---------------------------------------------------- + if (vm->get_state() == VirtualMachine::ACTIVE && + vm->get_lcm_state() == VirtualMachine::RUNNING) + { + HostShareCapacity sr; - vm->set_state(VirtualMachine::MIGRATE); + //---------------------------------------------------- + // MIGRATE STATE + //---------------------------------------------------- - vm->set_resched(false); + vm->set_state(VirtualMachine::MIGRATE); - vm->get_capacity(sr); + vm->set_resched(false); - hpool->add_capacity(vm->get_hid(), sr); + vm->get_capacity(sr); - vm->set_stime(time(0)); + hpool->add_capacity(vm->get_hid(), sr); - vmpool->update_history(vm); + vm->set_stime(time(0)); - vm->set_previous_action(VMActions::LIVE_MIGRATE_ACTION, la.uid(),la.gid(), - la.req_id()); + vmpool->update_history(vm); - vmpool->update_previous_history(vm); + vm->set_previous_action(VMActions::LIVE_MIGRATE_ACTION, uid, gid, + req_id); - vmpool->update(vm); + vmpool->update_previous_history(vm); - //---------------------------------------------------- + vmpool->update(vm); - vmm->trigger(VMMAction::MIGRATE,vid); - } - else - { - vm->log("LCM", Log::ERROR, "live_migrate_action, VM in a wrong state."); - } + //---------------------------------------------------- - vm->unlock(); + vmm->trigger_migrate(vid); + } + else + { + vm->log("LCM", Log::ERROR, "live_migrate_action, VM in a wrong state."); + } - return; + vm->unlock(); + }); } /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -void LifeCycleManager::shutdown_action(const LCMAction& la, bool hard) +void LifeCycleManager::trigger_shutdown(int vid, bool hard, + const RequestAttributes& ra) { - int vid = la.vm_id(); - VirtualMachine * vm = vmpool->get(vid); - VirtualMachineTemplate quota_tmpl; - string error; - - if ( vm == 0 ) - { - return; - } - - int uid = vm->get_uid(); - int gid = vm->get_gid(); + int uid = ra.uid; + int gid = ra.gid; + int req_id = ra.req_id; - std::string memory, cpu; + trigger([this, hard, vid, uid, gid, req_id] { + VirtualMachine * vm = vmpool->get(vid); + VirtualMachineTemplate quota_tmpl; + string error; - vm->get_template_attribute("MEMORY", memory); - vm->get_template_attribute("CPU", cpu); - - if ( (vm->get_state() == VirtualMachine::SUSPENDED) || - (vm->get_state() == VirtualMachine::POWEROFF) || - (vm->get_state() == VirtualMachine::STOPPED) || - (vm->get_state() == VirtualMachine::UNDEPLOYED)) - { - quota_tmpl.add("RUNNING_MEMORY", memory); - quota_tmpl.add("RUNNING_CPU", cpu); - quota_tmpl.add("RUNNING_VMS", 1); + if ( vm == nullptr ) + { + return; + } - quota_tmpl.add("MEMORY", 0); - quota_tmpl.add("CPU", 0); - quota_tmpl.add("VMS", 0); - } + int uid = vm->get_uid(); + int gid = vm->get_gid(); - if (vm->get_state() == VirtualMachine::ACTIVE && - (vm->get_lcm_state() == VirtualMachine::RUNNING || - vm->get_lcm_state() == VirtualMachine::UNKNOWN)) - { - //---------------------------------------------------- - // SHUTDOWN STATE - //---------------------------------------------------- + std::string memory, cpu; - vm->set_state(VirtualMachine::SHUTDOWN); + vm->get_template_attribute("MEMORY", memory); + vm->get_template_attribute("CPU", cpu); - if (hard) + if ( (vm->get_state() == VirtualMachine::SUSPENDED) || + (vm->get_state() == VirtualMachine::POWEROFF) || + (vm->get_state() == VirtualMachine::STOPPED) || + (vm->get_state() == VirtualMachine::UNDEPLOYED)) { - vm->set_action(VMActions::TERMINATE_HARD_ACTION, la.uid(), la.gid(), - la.req_id()); + quota_tmpl.add("RUNNING_MEMORY", memory); + quota_tmpl.add("RUNNING_CPU", cpu); + quota_tmpl.add("RUNNING_VMS", 1); - vmm->trigger(VMMAction::CANCEL,vid); + quota_tmpl.add("MEMORY", 0); + quota_tmpl.add("CPU", 0); + quota_tmpl.add("VMS", 0); } - else + + if (vm->get_state() == VirtualMachine::ACTIVE && + (vm->get_lcm_state() == VirtualMachine::RUNNING || + vm->get_lcm_state() == VirtualMachine::UNKNOWN)) { - vm->set_action(VMActions::TERMINATE_ACTION, la.uid(), la.gid(), - la.req_id()); + //---------------------------------------------------- + // SHUTDOWN STATE + //---------------------------------------------------- - vmm->trigger(VMMAction::SHUTDOWN,vid); - } + vm->set_state(VirtualMachine::SHUTDOWN); - vm->set_resched(false); + if (hard) + { + vm->set_action(VMActions::TERMINATE_HARD_ACTION, uid, gid, + req_id); - vmpool->update_history(vm); + vmm->trigger_cancel(vid); + } + else + { + vm->set_action(VMActions::TERMINATE_ACTION, uid, gid, + req_id); - vmpool->update(vm); - } - else if (vm->get_state() == VirtualMachine::SUSPENDED || - vm->get_state() == VirtualMachine::POWEROFF) - { - vm->set_state(VirtualMachine::ACTIVE); - vm->set_state(VirtualMachine::EPILOG); + vmm->trigger_shutdown(vid); + } - Quotas::vm_check(uid, gid, "a_tmpl, error); + vm->set_resched(false); - vm->set_action(VMActions::TERMINATE_ACTION, la.uid(), la.gid(), - la.req_id()); + vmpool->update_history(vm); - vm->set_epilog_stime(time(0)); + vmpool->update(vm); + } + else if (vm->get_state() == VirtualMachine::SUSPENDED || + vm->get_state() == VirtualMachine::POWEROFF) + { + vm->set_state(VirtualMachine::ACTIVE); + vm->set_state(VirtualMachine::EPILOG); - vmpool->update_history(vm); + Quotas::vm_check(uid, gid, "a_tmpl, error); - vmpool->update(vm); + vm->set_action(VMActions::TERMINATE_ACTION, uid, gid, req_id); - //---------------------------------------------------- + vm->set_epilog_stime(time(0)); - tm->trigger(TMAction::EPILOG, vid); - } - else if (vm->get_state() == VirtualMachine::STOPPED || - vm->get_state() == VirtualMachine::UNDEPLOYED) - { - vm->set_state(VirtualMachine::ACTIVE); - vm->set_state(VirtualMachine::EPILOG); + vmpool->update_history(vm); + + vmpool->update(vm); - Quotas::vm_check(uid, gid, "a_tmpl, error); + //---------------------------------------------------- - vm->set_action(VMActions::TERMINATE_ACTION, la.uid(), la.gid(), - la.req_id()); + tm->trigger_epilog(false, vm); + } + else if (vm->get_state() == VirtualMachine::STOPPED || + vm->get_state() == VirtualMachine::UNDEPLOYED) + { + vm->set_state(VirtualMachine::ACTIVE); + vm->set_state(VirtualMachine::EPILOG); - vm->set_epilog_stime(time(0)); + Quotas::vm_check(uid, gid, "a_tmpl, error); - vmpool->update_history(vm); + vm->set_action(VMActions::TERMINATE_ACTION, uid, gid, req_id); - vmpool->update(vm); + vm->set_epilog_stime(time(0)); - //---------------------------------------------------- + vmpool->update_history(vm); - tm->trigger(TMAction::EPILOG_LOCAL, vid); - } - else - { - vm->log("LCM", Log::ERROR, "shutdown_action, VM in a wrong state."); - } + vmpool->update(vm); - vm->unlock(); + //---------------------------------------------------- - return; + tm->trigger_epilog(true, vm); + } + else + { + vm->log("LCM", Log::ERROR, "shutdown_action, VM in a wrong state."); + } + + vm->unlock(); + }); } /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -void LifeCycleManager::undeploy_action(const LCMAction& la, bool hard) +void LifeCycleManager::trigger_undeploy(int vid, bool hard, + const RequestAttributes& ra) { - int vid = la.vm_id(); - unsigned int port; - VirtualMachine * vm = vmpool->get(vid); + int uid = ra.uid; + int gid = ra.gid; + int req_id = ra.req_id; - if ( vm == 0 ) - { - return; - } + trigger([this, hard, vid, uid, gid, req_id] { + unsigned int port; + VirtualMachine * vm = vmpool->get(vid); - if (vm->get_state() == VirtualMachine::ACTIVE && - (vm->get_lcm_state() == VirtualMachine::RUNNING || - vm->get_lcm_state() == VirtualMachine::UNKNOWN)) - { - //---------------------------------------------------- - // SHUTDOWN_UNDEPLOY STATE - //---------------------------------------------------- + if ( vm == nullptr ) + { + return; + } - vm->set_state(VirtualMachine::SHUTDOWN_UNDEPLOY); + if (vm->get_state() == VirtualMachine::ACTIVE && + (vm->get_lcm_state() == VirtualMachine::RUNNING || + vm->get_lcm_state() == VirtualMachine::UNKNOWN)) + { + //---------------------------------------------------- + // SHUTDOWN_UNDEPLOY STATE + //---------------------------------------------------- - vm->set_resched(false); + vm->set_state(VirtualMachine::SHUTDOWN_UNDEPLOY); - if (hard) - { - vm->set_action(VMActions::UNDEPLOY_HARD_ACTION, la.uid(), la.gid(), - la.req_id()); + vm->set_resched(false); - vmm->trigger(VMMAction::CANCEL,vid); - } - else - { - vm->set_action(VMActions::UNDEPLOY_ACTION, la.uid(), la.gid(), - la.req_id()); + if (hard) + { + vm->set_action(VMActions::UNDEPLOY_HARD_ACTION, uid, gid, + req_id); - vmm->trigger(VMMAction::SHUTDOWN,vid); - } + vmm->trigger_cancel(vid); + } + else + { + vm->set_action(VMActions::UNDEPLOY_ACTION, uid, gid, + req_id); - VectorAttribute * graphics = vm->get_template_attribute("GRAPHICS"); + vmm->trigger_shutdown(vid); + } - if ( graphics != 0 && (graphics->vector_value("PORT", port) == 0)) - { - graphics->remove("PORT"); - clpool->release_vnc_port(vm->get_cid(), port); - } + VectorAttribute * graphics = vm->get_template_attribute("GRAPHICS"); - vmpool->update_history(vm); + if ( graphics != 0 && (graphics->vector_value("PORT", port) == 0)) + { + graphics->remove("PORT"); + clpool->release_vnc_port(vm->get_cid(), port); + } - vmpool->update(vm); - } - else if (vm->get_state() == VirtualMachine::POWEROFF) - { - //---------------------------------------------------- - // Bypass SHUTDOWN_UNDEPLOY - //---------------------------------------------------- + vmpool->update_history(vm); - vm->set_state(VirtualMachine::ACTIVE); - vm->set_state(VirtualMachine::EPILOG_UNDEPLOY); + vmpool->update(vm); + } + else if (vm->get_state() == VirtualMachine::POWEROFF) + { + //---------------------------------------------------- + // Bypass SHUTDOWN_UNDEPLOY + //---------------------------------------------------- - vm->set_action(VMActions::UNDEPLOY_ACTION, la.uid(), la.gid(), - la.req_id()); + vm->set_state(VirtualMachine::ACTIVE); + vm->set_state(VirtualMachine::EPILOG_UNDEPLOY); - vm->set_epilog_stime(time(0)); + vm->set_action(VMActions::UNDEPLOY_ACTION, uid, gid, req_id); - vmpool->update_history(vm); + vm->set_epilog_stime(time(0)); - vmpool->update(vm); + vmpool->update_history(vm); - //---------------------------------------------------- + vmpool->update(vm); - tm->trigger(TMAction::EPILOG_STOP,vid); - } - else - { - vm->log("LCM", Log::ERROR, "undeploy_action, VM in a wrong state."); - } + //---------------------------------------------------- - vm->unlock(); + tm->trigger_epilog_stop(vm); + } + else + { + vm->log("LCM", Log::ERROR, "undeploy_action, VM in a wrong state."); + } - return; + vm->unlock(); + }); } /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -void LifeCycleManager::poweroff_action(const LCMAction& la) +void LifeCycleManager::trigger_poweroff(int vid, const RequestAttributes& ra) { - int vid = la.vm_id(); - - poweroff_action(vid, false, la); + trigger_poweroff(vid, false, ra); } /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -void LifeCycleManager::poweroff_hard_action(const LCMAction& la) +void LifeCycleManager::trigger_poweroff_hard(int vid, const RequestAttributes& ra) { - int vid = la.vm_id(); - - poweroff_action(vid, true, la); + trigger_poweroff(vid, true, ra); } /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -void LifeCycleManager::poweroff_action(int vid, bool hard, const LCMAction& la) +void LifeCycleManager::trigger_poweroff(int vid, bool hard, + const RequestAttributes& ra) { - VirtualMachine * vm = vmpool->get(vid); + int uid = ra.uid; + int gid = ra.gid; + int req_id = ra.req_id; - if ( vm == 0 ) - { - return; - } + trigger([this, hard, vid, uid, gid, req_id] { + VirtualMachine * vm = vmpool->get(vid); - if (vm->get_state() == VirtualMachine::ACTIVE && - (vm->get_lcm_state() == VirtualMachine::RUNNING || - vm->get_lcm_state() == VirtualMachine::UNKNOWN)) - { - //---------------------------------------------------- - // SHUTDOWN_POWEROFF STATE - //---------------------------------------------------- + if ( vm == nullptr ) + { + return; + } - vm->set_state(VirtualMachine::SHUTDOWN_POWEROFF); + if (vm->get_state() == VirtualMachine::ACTIVE && + (vm->get_lcm_state() == VirtualMachine::RUNNING || + vm->get_lcm_state() == VirtualMachine::UNKNOWN)) + { + //---------------------------------------------------- + // SHUTDOWN_POWEROFF STATE + //---------------------------------------------------- - vm->set_resched(false); + vm->set_state(VirtualMachine::SHUTDOWN_POWEROFF); - if (hard) - { - vm->set_action(VMActions::POWEROFF_HARD_ACTION, la.uid(), la.gid(), - la.req_id()); + vm->set_resched(false); - vmm->trigger(VMMAction::CANCEL,vid); - } - else - { - vm->set_action(VMActions::POWEROFF_ACTION, la.uid(), la.gid(), - la.req_id()); + if (hard) + { + vm->set_action(VMActions::POWEROFF_HARD_ACTION, uid, gid, + req_id); - vmm->trigger(VMMAction::SHUTDOWN,vid); - } + vmm->trigger_cancel(vid); + } + else + { + vm->set_action(VMActions::POWEROFF_ACTION, uid, gid, req_id); - vmpool->update_history(vm); + vmm->trigger_shutdown(vid); + } - vmpool->update(vm); - } - else - { - vm->log("LCM", Log::ERROR, "poweroff_action, VM in a wrong state."); - } + vmpool->update_history(vm); - vm->unlock(); + vmpool->update(vm); + } + else + { + vm->log("LCM", Log::ERROR, "poweroff_action, VM in a wrong state."); + } - return; + vm->unlock(); + }); } /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -void LifeCycleManager::restore_action(const LCMAction& la) +void LifeCycleManager::trigger_restore(int vid, const RequestAttributes& ra) { - ostringstream os; - - int vid = la.vm_id(); + int uid = ra.uid; + int gid = ra.gid; + int req_id = ra.req_id; - VirtualMachine * vm = vmpool->get(vid); + trigger([this, vid, uid, gid, req_id] { + ostringstream os; - if ( vm == 0 ) - { - return; - } + VirtualMachine * vm = vmpool->get(vid); - if (vm->get_state() == VirtualMachine::SUSPENDED) - { - time_t the_time = time(0); + if ( vm == nullptr ) + { + return; + } - vm->log("LCM", Log::INFO, "Restoring VM"); + if (vm->get_state() == VirtualMachine::SUSPENDED) + { + time_t the_time = time(0); - //---------------------------------------------------- - // BOOT STATE (FROM SUSPEND) - //---------------------------------------------------- - vm->set_state(VirtualMachine::ACTIVE); + vm->log("LCM", Log::INFO, "Restoring VM"); - vm->set_state(VirtualMachine::BOOT_SUSPENDED); + //---------------------------------------------------- + // BOOT STATE (FROM SUSPEND) + //---------------------------------------------------- + vm->set_state(VirtualMachine::ACTIVE); - vm->set_etime(the_time); + vm->set_state(VirtualMachine::BOOT_SUSPENDED); - vm->set_running_etime(the_time); + vm->set_etime(the_time); - vmpool->update_history(vm); + vm->set_running_etime(the_time); - vm->cp_history(); + vmpool->update_history(vm); - vm->set_stime(the_time); + vm->cp_history(); - vm->set_running_stime(the_time); + vm->set_stime(the_time); - vm->set_action(VMActions::RESUME_ACTION, la.uid(), la.gid(), la.req_id()); + vm->set_running_stime(the_time); - vmpool->insert_history(vm); + vm->set_action(VMActions::RESUME_ACTION, uid, gid, req_id); - vmpool->update(vm); + vmpool->insert_history(vm); - //---------------------------------------------------- + vmpool->update(vm); - vmm->trigger(VMMAction::RESTORE,vid); - } - else - { - vm->log("LCM", Log::ERROR, "restore_action, VM in a wrong state."); - } + //---------------------------------------------------- - vm->unlock(); + vmm->trigger_restore(vid); + } + else + { + vm->log("LCM", Log::ERROR, "restore_action, VM in a wrong state."); + } - return; + vm->unlock(); + }); } /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -void LifeCycleManager::restart_action(const LCMAction& la) +void LifeCycleManager::trigger_restart(int vid, const RequestAttributes& ra) { - int vid = la.vm_id(); + int uid = ra.uid; + int gid = ra.gid; + int req_id = ra.req_id; - VirtualMachine * vm = vmpool->get(vid); + trigger([this, vid, uid, gid, req_id] { + VirtualMachine * vm = vmpool->get(vid); - if ( vm == 0 ) - { - return; - } - - if (vm->get_state() == VirtualMachine::ACTIVE && - vm->get_lcm_state() == VirtualMachine::UNKNOWN) - { - vm->set_state(VirtualMachine::BOOT_UNKNOWN); + if ( vm == nullptr ) + { + return; + } - vmpool->update(vm); + if (vm->get_state() == VirtualMachine::ACTIVE && + vm->get_lcm_state() == VirtualMachine::UNKNOWN) + { + vm->set_state(VirtualMachine::BOOT_UNKNOWN); - vmm->trigger(VMMAction::DEPLOY, vid); - } - else if ( vm->get_state() == VirtualMachine::POWEROFF ) - { - time_t the_time = time(0); + vmpool->update(vm); - vm->set_state(VirtualMachine::ACTIVE); + vmm->trigger_deploy(vid); + } + else if ( vm->get_state() == VirtualMachine::POWEROFF ) + { + time_t the_time = time(0); - vm->set_state(VirtualMachine::BOOT_POWEROFF); + vm->set_state(VirtualMachine::ACTIVE); - vm->set_etime(the_time); + vm->set_state(VirtualMachine::BOOT_POWEROFF); - vm->set_running_etime(the_time); + vm->set_etime(the_time); - vmpool->update_history(vm); + vm->set_running_etime(the_time); - vm->cp_history(); + vmpool->update_history(vm); - vm->set_stime(the_time); + vm->cp_history(); - vm->set_running_stime(the_time); + vm->set_stime(the_time); - vm->set_action(VMActions::RESUME_ACTION, la.uid(), la.gid(), la.req_id()); + vm->set_running_stime(the_time); - vmpool->insert_history(vm); + vm->set_action(VMActions::RESUME_ACTION, uid, gid, req_id); - vmpool->update(vm); + vmpool->insert_history(vm); - vmm->trigger(VMMAction::DEPLOY, vid); - } - else - { - vm->log("LCM", Log::ERROR, "restart_action, VM in a wrong state."); - } + vmpool->update(vm); - vm->unlock(); + vmm->trigger_deploy(vid); + } + else + { + vm->log("LCM", Log::ERROR, "restart_action, VM in a wrong state."); + } - return; + vm->unlock(); + }); } /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -void LifeCycleManager::delete_action(const LCMAction& la) +void LifeCycleManager::trigger_delete(int vid, const RequestAttributes& ra) { - int image_id = -1; - int vid = la.vm_id(); + int uid = ra.uid; + int gid = ra.gid; + int req_id = ra.req_id; - VirtualMachine * vm = vmpool->get(vid); + trigger([this, vid, uid, gid, req_id] { + int image_id = -1; - if ( vm == 0 ) - { - return; - } + VirtualMachine * vm = vmpool->get(vid); - if ( vm->get_state() != VirtualMachine::ACTIVE ) - { - vm->log("LCM", Log::ERROR, "clean_action, VM in a wrong state."); - vm->unlock(); + if ( vm == nullptr ) + { + return; + } - return; - } + if ( vm->get_state() != VirtualMachine::ACTIVE ) + { + vm->log("LCM", Log::ERROR, "clean_action, VM in a wrong state."); + vm->unlock(); - switch(vm->get_lcm_state()) - { - case VirtualMachine::CLEANUP_RESUBMIT: - vm->set_state(VirtualMachine::CLEANUP_DELETE); - vmpool->update(vm); + return; + } - case VirtualMachine::CLEANUP_DELETE: - dm->trigger(DMAction::DONE, vid); - break; + switch (vm->get_lcm_state()) + { + case VirtualMachine::CLEANUP_RESUBMIT: + vm->set_state(VirtualMachine::CLEANUP_DELETE); + vmpool->update(vm); - default: - clean_up_vm(vm, true, image_id, la); - dm->trigger(DMAction::DONE, vid); - break; - } + case VirtualMachine::CLEANUP_DELETE: + dm->trigger_done(vid); + break; - vm->unlock(); + default: + clean_up_vm(vm, true, image_id, uid, gid, req_id); + dm->trigger_done(vid); + break; + } - if ( image_id != -1 ) - { - Image * image = ipool->get(image_id); + vm->unlock(); - if ( image != 0 ) + if ( image_id != -1 ) { - image->set_state(Image::ERROR); + Image * image = ipool->get(image_id); + + if ( image != nullptr ) + { + image->set_state(Image::ERROR); - ipool->update(image); + ipool->update(image); - image->unlock(); + image->unlock(); + } } - } + }); } /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -void LifeCycleManager::delete_recreate_action(const LCMAction& la) +void LifeCycleManager::trigger_delete_recreate(int vid, + const RequestAttributes& ra) { - Template * vm_quotas_snp = 0; + int uid = ra.uid; + int gid = ra.gid; + int req_id = ra.req_id; - vector