+ ?>
+
-
-
-
-
-
-
-
-
-
- query($db->update('table.options')->rows(['value' => 1])->where('name = ?', 'installed'));
- ?>
-
-
-
-
+
+
+
+
-
-
-
-
-
:
-
- getTokenUrl($loginUrl);
- } else {
- $loginUrl = _u() . '/admin/index.php';
- }
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
- query($script, Typecho_Db::WRITE);
- }
- }
-
- /** 全局变量 */
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'theme', 'user' => 0, 'value' => 'default')));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'theme:default', 'user' => 0, 'value' => 'a:2:{s:7:"logoUrl";N;s:12:"sidebarBlock";a:5:{i:0;s:15:"ShowRecentPosts";i:1;s:18:"ShowRecentComments";i:2;s:12:"ShowCategory";i:3;s:11:"ShowArchive";i:4;s:9:"ShowOther";}}')));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'timezone', 'user' => 0, 'value' => _t('28800'))));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'lang', 'user' => 0, 'value' => $lang)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'charset', 'user' => 0, 'value' => _t('UTF-8'))));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'contentType', 'user' => 0, 'value' => 'text/html')));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'gzip', 'user' => 0, 'value' => 0)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'generator', 'user' => 0, 'value' => $options->generator)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'title', 'user' => 0, 'value' => 'Hello World')));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'description', 'user' => 0, 'value' => 'Just So So ...')));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'keywords', 'user' => 0, 'value' => 'typecho,php,blog')));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'rewrite', 'user' => 0, 'value' => 0)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'frontPage', 'user' => 0, 'value' => 'recent')));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'frontArchive', 'user' => 0, 'value' => 0)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsRequireMail', 'user' => 0, 'value' => 1)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsWhitelist', 'user' => 0, 'value' => 0)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsRequireURL', 'user' => 0, 'value' => 0)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsRequireModeration', 'user' => 0, 'value' => 0)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'plugins', 'user' => 0, 'value' => 'a:0:{}')));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentDateFormat', 'user' => 0, 'value' => 'F jS, Y \a\t h:i a')));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'siteUrl', 'user' => 0, 'value' => $config['siteUrl'])));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'defaultCategory', 'user' => 0, 'value' => 1)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'allowRegister', 'user' => 0, 'value' => 0)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'defaultAllowComment', 'user' => 0, 'value' => 1)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'defaultAllowPing', 'user' => 0, 'value' => 1)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'defaultAllowFeed', 'user' => 0, 'value' => 1)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'pageSize', 'user' => 0, 'value' => 5)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'postsListSize', 'user' => 0, 'value' => 10)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsListSize', 'user' => 0, 'value' => 10)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsHTMLTagAllowed', 'user' => 0, 'value' => NULL)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'postDateFormat', 'user' => 0, 'value' => 'Y-m-d')));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'feedFullText', 'user' => 0, 'value' => 1)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'editorSize', 'user' => 0, 'value' => 350)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'autoSave', 'user' => 0, 'value' => 0)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'markdown', 'user' => 0, 'value' => 1)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'xmlrpcMarkdown', 'user' => 0, 'value' => 0)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsMaxNestingLevels', 'user' => 0, 'value' => 5)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsPostTimeout', 'user' => 0, 'value' => 24 * 3600 * 30)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsUrlNofollow', 'user' => 0, 'value' => 1)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsShowUrl', 'user' => 0, 'value' => 1)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsMarkdown', 'user' => 0, 'value' => 0)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsPageBreak', 'user' => 0, 'value' => 0)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsThreaded', 'user' => 0, 'value' => 1)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsPageSize', 'user' => 0, 'value' => 20)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsPageDisplay', 'user' => 0, 'value' => 'last')));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsOrder', 'user' => 0, 'value' => 'ASC')));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsCheckReferer', 'user' => 0, 'value' => 1)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsAutoClose', 'user' => 0, 'value' => 0)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsPostIntervalEnable', 'user' => 0, 'value' => 1)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsPostInterval', 'user' => 0, 'value' => 60)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsShowCommentOnly', 'user' => 0, 'value' => 0)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsAvatar', 'user' => 0, 'value' => 1)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsAvatarRating', 'user' => 0, 'value' => 'G')));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsAntiSpam', 'user' => 0, 'value' => 1)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'routingTable', 'user' => 0, 'value' => 'a:25:{s:5:"index";a:3:{s:3:"url";s:1:"/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:7:"archive";a:3:{s:3:"url";s:6:"/blog/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:2:"do";a:3:{s:3:"url";s:22:"/action/[action:alpha]";s:6:"widget";s:9:"Widget_Do";s:6:"action";s:6:"action";}s:4:"post";a:3:{s:3:"url";s:24:"/archives/[cid:digital]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:10:"attachment";a:3:{s:3:"url";s:26:"/attachment/[cid:digital]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:8:"category";a:3:{s:3:"url";s:17:"/category/[slug]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:3:"tag";a:3:{s:3:"url";s:12:"/tag/[slug]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:6:"author";a:3:{s:3:"url";s:22:"/author/[uid:digital]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:6:"search";a:3:{s:3:"url";s:19:"/search/[keywords]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:10:"index_page";a:3:{s:3:"url";s:21:"/page/[page:digital]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:12:"archive_page";a:3:{s:3:"url";s:26:"/blog/page/[page:digital]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:13:"category_page";a:3:{s:3:"url";s:32:"/category/[slug]/[page:digital]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:8:"tag_page";a:3:{s:3:"url";s:27:"/tag/[slug]/[page:digital]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:11:"author_page";a:3:{s:3:"url";s:37:"/author/[uid:digital]/[page:digital]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:11:"search_page";a:3:{s:3:"url";s:34:"/search/[keywords]/[page:digital]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:12:"archive_year";a:3:{s:3:"url";s:18:"/[year:digital:4]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:13:"archive_month";a:3:{s:3:"url";s:36:"/[year:digital:4]/[month:digital:2]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:11:"archive_day";a:3:{s:3:"url";s:52:"/[year:digital:4]/[month:digital:2]/[day:digital:2]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:17:"archive_year_page";a:3:{s:3:"url";s:38:"/[year:digital:4]/page/[page:digital]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:18:"archive_month_page";a:3:{s:3:"url";s:56:"/[year:digital:4]/[month:digital:2]/page/[page:digital]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:16:"archive_day_page";a:3:{s:3:"url";s:72:"/[year:digital:4]/[month:digital:2]/[day:digital:2]/page/[page:digital]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:12:"comment_page";a:3:{s:3:"url";s:53:"[permalink:string]/comment-page-[commentPage:digital]";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:4:"feed";a:3:{s:3:"url";s:20:"/feed[feed:string:0]";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:4:"feed";}s:8:"feedback";a:3:{s:3:"url";s:31:"[permalink:string]/[type:alpha]";s:6:"widget";s:15:"Widget_Feedback";s:6:"action";s:6:"action";}s:4:"page";a:3:{s:3:"url";s:12:"/[slug].html";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}}')));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'actionTable', 'user' => 0, 'value' => 'a:0:{}')));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'panelTable', 'user' => 0, 'value' => 'a:0:{}')));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'attachmentTypes', 'user' => 0, 'value' => '@image@')));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'secret', 'user' => 0, 'value' => Typecho_Common::randString(32, true))));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'installed', 'user' => 0, 'value' => 0)));
- $installDb->query($installDb->insert('table.options')->rows(array('name' => 'allowXmlRpc', 'user' => 0, 'value' => 2)));
-
- /** 初始分类 */
- $installDb->query($installDb->insert('table.metas')->rows(array('name' => _t('默认分类'), 'slug' => 'default', 'type' => 'category', 'description' => _t('只是一个默认分类'),
- 'count' => 1, 'order' => 1)));
-
- /** 初始关系 */
- $installDb->query($installDb->insert('table.relationships')->rows(array('cid' => 1, 'mid' => 1)));
-
- /** 初始内容 */
- $installDb->query($installDb->insert('table.contents')->rows(array('title' => _t('欢迎使用 Typecho'), 'slug' => 'start', 'created' => Typecho_Date::time(), 'modified' => Typecho_Date::time(),
- 'text' => '' . _t('如果您看到这篇文章,表示您的 blog 已经安装成功.'), 'authorId' => 1, 'type' => 'post', 'status' => 'publish', 'commentsNum' => 1, 'allowComment' => 1,
- 'allowPing' => 1, 'allowFeed' => 1, 'parent' => 0)));
-
- $installDb->query($installDb->insert('table.contents')->rows(array('title' => _t('关于'), 'slug' => 'start-page', 'created' => Typecho_Date::time(), 'modified' => Typecho_Date::time(),
- 'text' => '' . _t('本页面由 Typecho 创建, 这只是个测试页面.'), 'authorId' => 1, 'order' => 0, 'type' => 'page', 'status' => 'publish', 'commentsNum' => 0, 'allowComment' => 1,
- 'allowPing' => 1, 'allowFeed' => 1, 'parent' => 0)));
-
- /** 初始评论 */
- $installDb->query($installDb->insert('table.comments')->rows(array('cid' => 1, 'created' => Typecho_Date::time(), 'author' => 'Typecho', 'ownerId' => 1, 'url' => 'http://typecho.org',
- 'ip' => '127.0.0.1', 'agent' => $options->generator, 'text' => '欢迎加入 Typecho 大家族', 'type' => 'comment', 'status' => 'approved', 'parent' => 0)));
-
- /** 初始用户 */
- $password = empty($config['userPassword']) ? substr(uniqid(), 7) : $config['userPassword'];
- $hasher = new PasswordHash(8, true);
-
- $installDb->query($installDb->insert('table.users')->rows(array('name' => $config['userName'], 'password' => $hasher->HashPassword($password), 'mail' => $config['userMail'],
- 'url' => 'http://www.typecho.org', 'screenName' => $config['userName'], 'group' => 'administrator', 'created' => Typecho_Date::time())));
-
- unset($_SESSION['typecho']);
- header('Location: ./install.php?finish&user=' . urlencode($config['userName'])
- . '&password=' . urlencode($password));
- } catch (Typecho_Db_Exception $e) {
- $success = false;
- $code = $e->getCode();
-?>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
GPL 协议发布, 我们允许用户在 GPL 协议许可的范围内使用, 拷贝, 修改和分发此程序.'); ?>
-
-
-
-
-
-
-
-
- 1): ?>
-
- $val): ?>
- selected>
-
-
-
-
-
-
+
+ :
+ :
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ GPL 协议发布, 我们允许用户在 GPL 协议许可的范围内使用, 拷贝, 修改和分发此程序.'); ?>
+
+
+
+
+
+
+
+
+
+
+ 1): ?>
+
+ $val): ?>
+ selected>
+
+
+
+
+
+
+
+
+getConfig(Typecho_Db::WRITE)->toArray();
+ $config['prefix'] = $installDb->getPrefix();
+ $config['adapter'] = $adapter;
+ }
+?>
+
+
+
+
+
+
+
+
+
+
+ $name): ?>
+ selected="selected">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [
+ 'dbHost' => 'localhost',
+ 'dbPort' => 3306,
+ 'dbUser' => null,
+ 'dbPassword' => null,
+ 'dbCharset' => 'utf8mb4',
+ 'dbDatabase' => null,
+ 'dbEngine' => 'InnoDB'
+ ],
+ 'Pgsql' => [
+ 'dbHost' => 'localhost',
+ 'dbPort' => 5432,
+ 'dbUser' => null,
+ 'dbPassword' => null,
+ 'dbCharset' => 'utf8',
+ 'dbDatabase' => null,
+ ],
+ 'SQLite' => [
+ 'dbFile' => __TYPECHO_ROOT_DIR__ . '/usr/' . uniqid() . '.db'
+ ]
+ ];
+
+ if (install_is_cli()) {
+ $config = [
+ 'dbHost' => $request->getServer('TYPECHO_DB_HOST'),
+ 'dbUser' => $request->getServer('TYPECHO_DB_USER'),
+ 'dbPassword' => $request->getServer('TYPECHO_DB_PASSWORD'),
+ 'dbCharset' => $request->getServer('TYPECHO_DB_CHARSET'),
+ 'dbPort' => $request->getServer('TYPECHO_DB_PORT'),
+ 'dbDatabase' => $request->getServer('TYPECHO_DB_DATABASE'),
+ 'dbFile' => $request->getServer('TYPECHO_DB_FILE'),
+ 'dbDsn' => $request->getServer('TYPECHO_DB_DSN'),
+ 'dbEngine' => $request->getServer('TYPECHO_DB_ENGINE'),
+ 'dbPrefix' => $request->getServer('TYPECHO_DB_PREFIX', 'typecho_'),
+ 'dbAdapter' => $request->getServer('TYPECHO_DB_ADAPTER', install_get_current_db_driver()),
+ 'dbNext' => $request->getServer('TYPECHO_DB_NEXT', 'none')
+ ];
+ } else {
+ $config = $request->from([
+ 'dbHost',
+ 'dbUser',
+ 'dbPassword',
+ 'dbCharset',
+ 'dbPort',
+ 'dbDatabase',
+ 'dbFile',
+ 'dbDsn',
+ 'dbEngine',
+ 'dbPrefix',
+ 'dbAdapter',
+ 'dbNext'
+ ]);
+ }
+
+ $error = (new Typecho_Validate())
+ ->addRule('dbPrefix', 'required', _t('确认您的配置'))
+ ->addRule('dbPrefix', 'minLength', _t('确认您的配置'), 1)
+ ->addRule('dbPrefix', 'maxLength', _t('确认您的配置'), 16)
+ ->addRule('dbPrefix', 'alphaDash', _t('确认您的配置'))
+ ->addRule('dbAdapter', 'required', _t('确认您的配置'))
+ ->addRule('dbAdapter', 'enum', _t('确认您的配置'), array_keys($drivers))
+ ->addRule('dbNext', 'required', _t('确认您的配置'))
+ ->addRule('dbNext', 'enum', _t('确认您的配置'), ['none', 'delete', 'keep', 'config'])
+ ->run($config);
+
+ if (!empty($error)) {
+ install_raise_error($error);
+ }
+
+ $type = install_get_db_type($config['dbAdapter']);
+ $dbConfig = [];
+
+ foreach ($configMap[$type] as $key => $value) {
+ $config[$key] = $config[$key] === null ? (install_is_cli() ? $value : null) : $config[$key];
+ }
+
+ switch ($type) {
+ case 'Mysql':
+ $error = (new Typecho_Validate())
+ ->addRule('dbHost', 'required', _t('确认您的配置'))
+ ->addRule('dbPort', 'required', _t('确认您的配置'))
+ ->addRule('dbPort', 'isInteger', _t('确认您的配置'))
+ ->addRule('dbUser', 'required', _t('确认您的配置'))
+ ->addRule('dbCharset', 'required', _t('确认您的配置'))
+ ->addRule('dbCharset', 'enum', _t('确认您的配置'), ['utf8', 'utf8mb4'])
+ ->addRule('dbDatabase', 'required', _t('确认您的配置'))
+ ->addRule('dbEngine', 'required', _t('确认您的配置'))
+ ->addRule('dbEngine', 'enum', _t('确认您的配置'), ['InnoDB', 'MyISAM'])
+ ->run($config);
+ break;
+ case 'Pgsql':
+ $error = (new Typecho_Validate())
+ ->addRule('dbHost', 'required', _t('确认您的配置'))
+ ->addRule('dbPort', 'required', _t('确认您的配置'))
+ ->addRule('dbPort', 'isInteger', _t('确认您的配置'))
+ ->addRule('dbUser', 'required', _t('确认您的配置'))
+ ->addRule('dbCharset', 'required', _t('确认您的配置'))
+ ->addRule('dbCharset', 'enum', _t('确认您的配置'), ['utf8'])
+ ->addRule('dbDatabase', 'required', _t('确认您的配置'))
+ ->run($config);
+ break;
+ case 'SQLite':
+ $error = (new Typecho_Validate())
+ ->addRule('dbFile', 'required', _t('确认您的配置'))
+ ->run($config);
+ break;
+ default:
+ install_raise_error(_t('确认您的配置'));
+ break;
+ }
+
+ if (!empty($error)) {
+ install_raise_error($error);
+ }
+
+ foreach ($configMap[$type] as $key => $value) {
+ $dbConfig[strtolower(substr($key, 2))] = $config[$key];
+ }
+
+ // check config file
+ if ($config['dbNext'] == 'config' && !install_check('config')) {
+ $code = install_config_file($config['dbAdapter'], $config['dbPrefix'], $dbConfig, true);
+ install_raise_error(_t('没有检测到您手动创建的配置文件, 请检查后再次创建'), ['code' => $code]);
+ } elseif (empty($installDb)) {
+ // detect db config
+ try {
+ $installDb = new Typecho_Db($config['dbAdapter'], $config['dbPrefix']);
+ $installDb->addServer($dbConfig, Typecho_Db::READ | Typecho_Db::WRITE);
+ $installDb->query('SELECT 1=1');
+ } catch (Typecho_Db_Adapter_Exception $e) {
+ install_raise_error(_t('对不起, 无法连接数据库, 请先检查数据库配置再继续进行安装'));
+ } catch (Typecho_Db_Exception $e) {
+ install_raise_error(_t('安装程序捕捉到以下错误: " %s ". 程序被终止, 请检查您的配置信息.', $e->getMessage()));
+ }
+
+ $code = install_config_file($config['dbAdapter'], $config['dbPrefix'], $dbConfig);
+
+ if (!install_check('config')) {
+ install_raise_error(
+ _t('安装程序无法自动创建
config.inc.php 文件') . "\n" .
+ _t('您可以在网站根目录下手动创建
config.inc.php 文件, 并复制如下代码至其中')
+ , [
+ 'code' => $code
+ ]);
+ }
+ }
+
+ // delete exists db
+ if($config['dbNext'] == 'delete') {
+ $tables = [
+ $config['dbPrefix'] . 'comments',
+ $config['dbPrefix'] . 'contents',
+ $config['dbPrefix'] . 'fields',
+ $config['dbPrefix'] . 'metas',
+ $config['dbPrefix'] . 'options',
+ $config['dbPrefix'] . 'relationships',
+ $config['dbPrefix'] . 'users'
+ ];
+
+ try {
+ foreach ($tables as $table) {
+ if ($type == 'Mysql') {
+ $installDb->query("DROP TABLE IF EXISTS `{$table}`");
+ } elseif ($type == 'Pgsql') {
+ $installDb->query("DROP TABLE {$table}");
+ } elseif ($type == 'SQLite') {
+ $installDb->query("DROP TABLE {$table}");
+ }
+ }
+ } catch (Typecho_Db_Exception $e) {
+ install_raise_error(_t('安装程序捕捉到以下错误: "%s". 程序被终止, 请检查您的配置信息.', $e->getMessage()));
+ }
+ }
+
+ // init db structure
+ try {
+ $scripts = file_get_contents(__TYPECHO_ROOT_DIR__ . '/install/' . $type . '.sql');
+ $scripts = str_replace('typecho_', $config['dbPrefix'], $scripts);
+
+ if (isset($dbConfig['charset'])) {
+ $scripts = str_replace('%charset%', $dbConfig['charset'], $scripts);
+ }
+
+ if (isset($dbConfig['engine'])) {
+ $scripts = str_replace('%engine%', $dbConfig['engine'], $scripts);
+ }
+
+ $scripts = explode(';', $scripts);
+ foreach ($scripts as $script) {
+ $script = trim($script);
+ if ($script) {
+ $installDb->query($script, Typecho_Db::WRITE);
+ }
+ }
+ } catch (Typecho_Db_Exception $e) {
+ $code = $e->getCode();
+
+ if(('Mysql' == $type && (1050 == $code || '42S01' == $code)) ||
+ ('SQLite' == $type && ('HY000' == $code || 1 == $code)) ||
+ ('Pgsql' == $type && '42P07' == $code)) {
+
+ if ($config['dbNext'] == 'keep') {
+ if (install_check('db_data')) {
+ install_success(0);
+ } else {
+ install_success(3);
+ }
+ } elseif ($config['dbNext'] == 'none') {
+ install_remove_config_file();
+
+ install_raise_error(_t('安装程序检查到原有数据表已经存在.'), [
+ 'delete' => _t('删除原有数据'),
+ 'keep' => _t('使用原有数据')
+ ]);
+ }
+ } else {
+ install_remove_config_file();
+
+ install_raise_error(_t('安装程序捕捉到以下错误: "%s". 程序被终止, 请检查您的配置信息.', $e->getMessage()));
+ }
+ }
+
+ install_success(3);
+}
+
+/**
+ * display step 3
+ */
+function install_step_3() {
+ $options = Typecho_Widget::widget('Widget_Options');
+?>
+
+ $request->getServer('TYPECHO_SITE_URL'),
+ 'userName' => $request->getServer('TYPECHO_USER_NAME', 'typecho'),
+ 'userPassword' => $request->getServer('TYPECHO_USER_PASSWORD'),
+ 'userMail' => $request->getServer('TYPECHO_USER_MAIL', 'admin@localhost.local')
+ ];
+ } else {
+ $config = $request->from([
+ 'userUrl',
+ 'userName',
+ 'userPassword',
+ 'userMail',
+ ]);
+ }
+
+ $error = (new Typecho_Validate())
+ ->addRule('userUrl', 'required', _t('请填写站点地址'))
+ ->addRule('userUrl', 'url', _t('请填写一个合法的URL地址'))
+ ->addRule('userName', 'required', _t('必须填写用户名称'))
+ ->addRule('userName', 'xssCheck', _t('请不要在用户名中使用特殊字符'))
+ ->addRule('userName', 'maxLength', _t('用户名长度超过限制, 请不要超过 32 个字符'), 32)
+ ->addRule('userMail', 'required', _t('必须填写电子邮箱'))
+ ->addRule('userMail', 'email', _t('电子邮箱格式错误'))
+ ->addRule('userMail', 'maxLength', _t('邮箱长度超过限制, 请不要超过 200 个字符'), 200)
+ ->run($config);
+
+ if (!empty($error)) {
+ install_raise_error($error);
+ }
+
+ if (empty($config['userPassword'])) {
+ $config['userPassword'] = $defaultPassword;
+ }
+
+ try {
+ // write options
+ foreach (install_get_default_options() as $key => $value) {
+ $installDb->query(
+ $installDb->insert('table.options')->rows(['name' => $key, 'user' => 0, 'value' => $value])
+ );
+ }
+
+ // write user
+ $hasher = new PasswordHash(8, true);
+ $installDb->query(
+ $installDb->insert('table.users')->rows([
+ 'name' => $config['userName'],
+ 'password' => $hasher->HashPassword($config['userPassword']),
+ 'mail' => $config['userMail'],
+ 'url' => $options->siteUrl,
+ 'screenName' => $config['userName'],
+ 'group' => 'administrator',
+ 'created' => Typecho_Date::time()
+ ])
+ );
+
+ // write category
+ $installDb->query(
+ $installDb->insert('table.metas')
+ ->rows([
+ 'name' => _t('默认分类'),
+ 'slug' => 'default',
+ 'type' => 'category',
+ 'description' => _t('只是一个默认分类')
+ ])
+ );
+
+ $installDb->query($installDb->insert('table.relationships')->rows(['cid' => 1, 'mid' => 1]));
+
+ // write first page and post
+ $installDb->query(
+ $installDb->insert('table.contents')->rows([
+ 'title' => _t('欢迎使用 Typecho'),
+ 'slug' => 'start', 'created' => Typecho_Date::time(),
+ 'modified' => Typecho_Date::time(),
+ 'text' => '' . _t('如果您看到这篇文章,表示您的 blog 已经安装成功.'),
+ 'authorId' => 1,
+ 'type' => 'post',
+ 'status' => 'publish',
+ 'commentsNum' => 1,
+ 'allowComment' => 1,
+ 'allowPing' => 1,
+ 'allowFeed' => 1,
+ 'parent' => 0
+ ])
+ );
+
+ $installDb->query(
+ $installDb->insert('table.contents')->rows([
+ 'title' => _t('关于'),
+ 'slug' => 'start-page',
+ 'created' => Typecho_Date::time(),
+ 'modified' => Typecho_Date::time(),
+ 'text' => '' . _t('本页面由 Typecho 创建, 这只是个测试页面.'),
+ 'authorId' => 1,
+ 'order' => 0,
+ 'type' => 'page',
+ 'status' => 'publish',
+ 'commentsNum' => 0,
+ 'allowComment' => 1,
+ 'allowPing' => 1,
+ 'allowFeed' => 1,
+ 'parent' => 0
+ ])
+ );
+
+ // write comment
+ $installDb->query(
+ $installDb->insert('table.comments')->rows([
+ 'cid' => 1, 'created' => Typecho_Date::time(),
+ 'author' => 'Typecho',
+ 'ownerId' => 1,
+ 'url' => 'http://typecho.org',
+ 'ip' => '127.0.0.1',
+ 'agent' => $options->generator,
+ 'text' => '欢迎加入 Typecho 大家族',
+ 'type' => 'comment',
+ 'status' => 'approved',
+ 'parent' => 0
+ ])
+ );
+ } catch (Typecho_Db_Exception $e) {
+ install_raise_error($e->getMessage());
+ }
+
+ $parts = parse_url($options->loginAction);
+ $parts['query'] = http_build_query([
+ 'name' => $config['userName'],
+ 'password' => $config['userPassword'],
+ 'referer' => $options->adminUrl
+ ]);
+ $loginUrl = Typecho_Common::buildUrl($parts);
+
+ install_success(0, [
+ $config['userName'],
+ $config['userPassword'],
+ Typecho_Widget::widget('Widget_Security')->getTokenUrl($loginUrl, $request->getReferer()),
+ $options->siteUrl
+ ]);
+}
+
+/**
+ * dispatch install action
+ *
+ * @throws Typecho_Exception
+ */
+function install_dispatch() {
+ define('__TYPECHO_INSTALL__', true);
+
+ // disable root url on cli mode
+ if (install_is_cli()) {
+ define('__TYPECHO_ROOT_URL__', 'http://localhost');
+ }
+
+ // init default options
+ $options = Typecho_Widget::widget('Widget_Options', install_get_default_options());
+ Typecho_Widget::widget('Widget_Init');
+
+ // install finished yet
+ if (
+ install_check('config')
+ && install_check('db_structure')
+ && install_check('db_data')
+ ) {
+ exit(1);
+ }
+
+ if (install_is_cli()) {
+ install_step_2_perform();
+ } else {
+ $request = Typecho_Request::getInstance();
+ $response = Typecho_Response::getInstance();
+ $step = $request->get('step');
+
+ $action = 1;
+
+ switch (true) {
+ case $step == 2:
+ if (!install_check('db_structure')) {
+ $action = 2;
+ } else {
+ $response->redirect('install.php?step=3');
+ }
+ break;
+ case $step == 3:
+ if (install_check('db_structure')) {
+ $action = 3;
+ } else {
+ $response->redirect('install.php?step=2');
+ }
+ break;
+ default:
+ break;
+ }
+
+ $method = 'install_step_' . $action;
+
+ if ($request->isPost() && $action > 1) {
+ $method .= '_perform';
+ $method();
+ exit;
+ }
+?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- /cloudsql/typecho-gae:typecho'); ?>
-
-
-
-
-
- :/cloudsql/typecho-gae:typecho'); ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
- selected>utf8mb4
- selected>utf8
-
-
-
+
+
+
+
+
-
-
-
- selected>InnoDB
- selected>MyISAM
-
-
+
+
+
+
+ utf8mb4
+ utf8
+
+
+
+
+
+
+
+
+
+ InnoDB
+ MyISAM
+
+
+
+
\ No newline at end of file
diff --git a/install/Pgsql.php b/install/Pgsql.php
index b6fc2036..ac89e04c 100644
--- a/install/Pgsql.php
+++ b/install/Pgsql.php
@@ -1,26 +1,37 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/install/SQLite.php b/install/SQLite.php
index ec0fa661..1b289c77 100644
--- a/install/SQLite.php
+++ b/install/SQLite.php
@@ -1,7 +1,9 @@
-
-
-
-
-
-
+
+
diff --git a/tools/package-lock.json b/tools/package-lock.json
index 2a95b7cd..a92e3832 100644
--- a/tools/package-lock.json
+++ b/tools/package-lock.json
@@ -163,9 +163,9 @@
"integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ=="
},
"node_modules/@types/node": {
- "version": "16.4.13",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.4.13.tgz",
- "integrity": "sha512-bLL69sKtd25w7p1nvg9pigE4gtKVpGTPojBFLMkGHXuUgap2sLqQt2qUnqmVCDfzGUL0DRNZP+1prIZJbMeAXg=="
+ "version": "16.6.1",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.6.1.tgz",
+ "integrity": "sha512-Sr7BhXEAer9xyGuCN3Ek9eg9xPviCF2gfu9kTfuU2HkTVAMYSDeX40fvpmo72n5nansg3nsBjuQBrsS28r+NUw=="
},
"node_modules/@types/normalize-package-data": {
"version": "2.4.1",
@@ -189,6 +189,14 @@
"node": ">=8"
}
},
+ "node_modules/aggregate-error/node_modules/indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -447,50 +455,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/bin-build/node_modules/lru-cache": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
- "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
- "dependencies": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- },
- "node_modules/bin-build/node_modules/shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "dependencies": {
- "shebang-regex": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/bin-build/node_modules/shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/bin-build/node_modules/which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "which": "bin/which"
- }
- },
- "node_modules/bin-build/node_modules/yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
- },
"node_modules/bin-check": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz",
@@ -546,50 +510,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/bin-check/node_modules/lru-cache": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
- "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
- "dependencies": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- },
- "node_modules/bin-check/node_modules/shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "dependencies": {
- "shebang-regex": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/bin-check/node_modules/shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/bin-check/node_modules/which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "which": "bin/which"
- }
- },
- "node_modules/bin-check/node_modules/yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
- },
"node_modules/bin-pack": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bin-pack/-/bin-pack-1.0.2.tgz",
@@ -620,14 +540,6 @@
"node": ">=6"
}
},
- "node_modules/bin-version-check/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "bin": {
- "semver": "bin/semver"
- }
- },
"node_modules/bin-wrapper": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz",
@@ -774,6 +686,14 @@
"node": ">=4"
}
},
+ "node_modules/bin-wrapper/node_modules/pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/bin-wrapper/node_modules/prepend-http": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
@@ -903,27 +823,23 @@
}
},
"node_modules/camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
"engines": {
- "node": ">=6"
+ "node": ">=0.10.0"
}
},
"node_modules/camelcase-keys": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
- "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
"dependencies": {
- "camelcase": "^5.3.1",
- "map-obj": "^4.0.0",
- "quick-lru": "^4.0.1"
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
},
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=0.10.0"
}
},
"node_modules/caseless": {
@@ -1208,6 +1124,47 @@
"node": ">= 8"
}
},
+ "node_modules/cross-spawn/node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cross-spawn/node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cross-spawn/node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cross-spawn/node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
"node_modules/currently-unhandled": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
@@ -1263,14 +1220,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/decamelize-keys/node_modules/map-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
- "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/decode-uri-component": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
@@ -1431,14 +1380,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/decompress-unzip/node_modules/pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/decompress/node_modules/make-dir": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
@@ -1458,14 +1399,6 @@
"node": ">=4"
}
},
- "node_modules/decompress/node_modules/pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/del": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/del/-/del-5.1.0.tgz",
@@ -1508,6 +1441,14 @@
"node": ">=8"
}
},
+ "node_modules/dir-glob/node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/download": {
"version": "6.2.5",
"resolved": "https://registry.npmjs.org/download/-/download-6.2.5.tgz",
@@ -1655,52 +1596,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/execa/node_modules/path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/execa/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/execa/node_modules/shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "dependencies": {
- "shebang-regex": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/execa/node_modules/shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/execa/node_modules/which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "which": "bin/which"
- }
- },
"node_modules/executable": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz",
@@ -1712,14 +1607,6 @@
"node": ">=4"
}
},
- "node_modules/executable/node_modules/pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/ext-list": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz",
@@ -1850,15 +1737,15 @@
}
},
"node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
"dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
"node_modules/find-versions": {
@@ -2261,15 +2148,9 @@
"integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
},
"node_modules/hosted-git-info": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz",
- "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- }
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="
},
"node_modules/http-cache-semantics": {
"version": "3.8.1",
@@ -2358,11 +2239,14 @@
}
},
"node_modules/indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "dependencies": {
+ "repeating": "^2.0.0"
+ },
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
"node_modules/inflight": {
@@ -2694,34 +2578,24 @@
"node": ">=0.10.0"
}
},
- "node_modules/load-json-file/node_modules/parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
- "dependencies": {
- "error-ex": "^1.2.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/load-json-file/node_modules/pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
"dependencies": {
- "p-locate": "^4.1.0"
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=6"
+ }
+ },
+ "node_modules/locate-path/node_modules/path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "engines": {
+ "node": ">=4"
}
},
"node_modules/lodash": {
@@ -2786,201 +2660,13 @@
"node": ">=0.10.0"
}
},
- "node_modules/lpad-align/node_modules/camelcase": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
- "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/lpad-align/node_modules/camelcase-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
- "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
- "dependencies": {
- "camelcase": "^2.0.0",
- "map-obj": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/lpad-align/node_modules/find-up": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
- "dependencies": {
- "path-exists": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/lpad-align/node_modules/hosted-git-info": {
- "version": "2.8.9",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
- "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="
- },
- "node_modules/lpad-align/node_modules/indent-string": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
- "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
- "dependencies": {
- "repeating": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/lpad-align/node_modules/map-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
- "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/lpad-align/node_modules/meow": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
- "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"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/lpad-align/node_modules/normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "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"
- }
- },
- "node_modules/lpad-align/node_modules/path-exists": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
- "dependencies": {
- "pinkie-promise": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/lpad-align/node_modules/path-type": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
- "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/lpad-align/node_modules/pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/lpad-align/node_modules/read-pkg": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
- "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
- "dependencies": {
- "load-json-file": "^1.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/lpad-align/node_modules/read-pkg-up": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
- "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
- "dependencies": {
- "find-up": "^1.0.0",
- "read-pkg": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/lpad-align/node_modules/redent": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
- "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
- "dependencies": {
- "indent-string": "^2.1.0",
- "strip-indent": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/lpad-align/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/lpad-align/node_modules/strip-indent": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
- "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
- "dependencies": {
- "get-stdin": "^4.0.1"
- },
- "bin": {
- "strip-indent": "cli.js"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/lpad-align/node_modules/trim-newlines": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
- "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
"dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
}
},
"node_modules/make-dir": {
@@ -3006,39 +2692,31 @@
}
},
"node_modules/map-obj": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz",
- "integrity": "sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=0.10.0"
}
},
"node_modules/meow": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz",
- "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==",
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
"dependencies": {
- "@types/minimist": "^1.2.0",
- "camelcase-keys": "^6.2.2",
- "decamelize": "^1.2.0",
- "decamelize-keys": "^1.1.0",
- "hard-rejection": "^2.1.0",
- "minimist-options": "4.1.0",
- "normalize-package-data": "^3.0.0",
- "read-pkg-up": "^7.0.1",
- "redent": "^3.0.0",
- "trim-newlines": "^3.0.0",
- "type-fest": "^0.18.0",
- "yargs-parser": "^20.2.3"
+ "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"
},
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=0.10.0"
}
},
"node_modules/merge2": {
@@ -3136,6 +2814,11 @@
"node": ">=8"
}
},
+ "node_modules/minipass/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
"node_modules/minizlib": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
@@ -3148,6 +2831,11 @@
"node": ">= 8"
}
},
+ "node_modules/minizlib/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
"node_modules/mkdirp": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
@@ -3226,6 +2914,50 @@
"node": ">= 10.12.0"
}
},
+ "node_modules/node-gyp/node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/node-gyp/node_modules/semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/node-gyp/node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/node-gyp/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
"node_modules/node-sass": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/node-sass/-/node-sass-6.0.1.tgz",
@@ -3263,6 +2995,30 @@
"node": ">=0.10.0"
}
},
+ "node_modules/node-sass/node_modules/camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/node-sass/node_modules/camelcase-keys": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
+ "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
+ "dependencies": {
+ "camelcase": "^5.3.1",
+ "map-obj": "^4.0.0",
+ "quick-lru": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/node-sass/node_modules/chalk": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
@@ -3278,6 +3034,252 @@
"node": ">=0.10.0"
}
},
+ "node_modules/node-sass/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/node-sass/node_modules/hosted-git-info": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz",
+ "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==",
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/node-sass/node_modules/indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/node-sass/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/node-sass/node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/node-sass/node_modules/map-obj": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz",
+ "integrity": "sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/node-sass/node_modules/meow": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz",
+ "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==",
+ "dependencies": {
+ "@types/minimist": "^1.2.0",
+ "camelcase-keys": "^6.2.2",
+ "decamelize": "^1.2.0",
+ "decamelize-keys": "^1.1.0",
+ "hard-rejection": "^2.1.0",
+ "minimist-options": "4.1.0",
+ "normalize-package-data": "^3.0.0",
+ "read-pkg-up": "^7.0.1",
+ "redent": "^3.0.0",
+ "trim-newlines": "^3.0.0",
+ "type-fest": "^0.18.0",
+ "yargs-parser": "^20.2.3"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/node-sass/node_modules/normalize-package-data": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz",
+ "integrity": "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==",
+ "dependencies": {
+ "hosted-git-info": "^4.0.1",
+ "resolve": "^1.20.0",
+ "semver": "^7.3.4",
+ "validate-npm-package-license": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/node-sass/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/node-sass/node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/node-sass/node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/node-sass/node_modules/read-pkg": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "dependencies": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/node-sass/node_modules/read-pkg-up": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+ "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+ "dependencies": {
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/node-sass/node_modules/read-pkg-up/node_modules/type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/node-sass/node_modules/read-pkg/node_modules/hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="
+ },
+ "node_modules/node-sass/node_modules/read-pkg/node_modules/normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "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"
+ }
+ },
+ "node_modules/node-sass/node_modules/read-pkg/node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/node-sass/node_modules/read-pkg/node_modules/type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/node-sass/node_modules/redent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
+ "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
+ "dependencies": {
+ "indent-string": "^4.0.0",
+ "strip-indent": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/node-sass/node_modules/semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/node-sass/node_modules/strip-indent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
+ "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+ "dependencies": {
+ "min-indent": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/node-sass/node_modules/supports-color": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
@@ -3286,6 +3288,38 @@
"node": ">=0.8.0"
}
},
+ "node_modules/node-sass/node_modules/trim-newlines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
+ "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/node-sass/node_modules/type-fest": {
+ "version": "0.18.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
+ "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/node-sass/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
+ "node_modules/node-sass/node_modules/yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/nopt": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
@@ -3301,17 +3335,14 @@
}
},
"node_modules/normalize-package-data": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz",
- "integrity": "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==",
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
"dependencies": {
- "hosted-git-info": "^4.0.1",
- "resolve": "^1.20.0",
- "semver": "^7.3.4",
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
"validate-npm-package-license": "^3.0.1"
- },
- "engines": {
- "node": ">=10"
}
},
"node_modules/normalize-url": {
@@ -3377,14 +3408,6 @@
"node": ">=4"
}
},
- "node_modules/npm-run-path/node_modules/path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/npmlog": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
@@ -3463,14 +3486,6 @@
"node": ">=6"
}
},
- "node_modules/ow/node_modules/type-fest": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz",
- "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/p-cancelable": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz",
@@ -3521,14 +3536,14 @@
}
},
"node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
"dependencies": {
- "p-limit": "^2.2.0"
+ "p-limit": "^2.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=6"
}
},
"node_modules/p-map": {
@@ -3600,28 +3615,25 @@
}
},
"node_modules/parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
"dependencies": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
+ "error-ex": "^1.2.0"
},
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=0.10.0"
}
},
"node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dependencies": {
+ "pinkie-promise": "^2.0.0"
+ },
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
"node_modules/path-is-absolute": {
@@ -3633,11 +3645,11 @@
}
},
"node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
"engines": {
- "node": ">=8"
+ "node": ">=4"
}
},
"node_modules/path-parse": {
@@ -3646,11 +3658,16 @@
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
"node_modules/path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
"node_modules/pend": {
@@ -3675,11 +3692,11 @@
}
},
"node_modules/pify": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
"engines": {
- "node": ">=6"
+ "node": ">=0.10.0"
}
},
"node_modules/pinkie": {
@@ -3802,52 +3819,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/pngquant-bin/node_modules/path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pngquant-bin/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/pngquant-bin/node_modules/shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "dependencies": {
- "shebang-regex": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/pngquant-bin/node_modules/shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/pngquant-bin/node_modules/which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "which": "bin/which"
- }
- },
"node_modules/prepend-http": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
@@ -3942,73 +3913,28 @@
}
},
"node_modules/read-pkg": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
- "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
"dependencies": {
- "@types/normalize-package-data": "^2.4.0",
- "normalize-package-data": "^2.5.0",
- "parse-json": "^5.0.0",
- "type-fest": "^0.6.0"
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
"node_modules/read-pkg-up": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
- "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
"dependencies": {
- "find-up": "^4.1.0",
- "read-pkg": "^5.2.0",
- "type-fest": "^0.8.1"
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
},
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/read-pkg-up/node_modules/type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/read-pkg/node_modules/hosted-git-info": {
- "version": "2.8.9",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
- "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="
- },
- "node_modules/read-pkg/node_modules/normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "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"
- }
- },
- "node_modules/read-pkg/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/read-pkg/node_modules/type-fest": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
- "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
- "engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
"node_modules/readable-stream": {
@@ -4026,15 +3952,15 @@
}
},
"node_modules/redent": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
- "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
"dependencies": {
- "indent-string": "^4.0.0",
- "strip-indent": "^3.0.0"
+ "indent-string": "^2.1.0",
+ "strip-indent": "^1.0.1"
},
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
"node_modules/repeating": {
@@ -4225,17 +4151,11 @@
}
},
"node_modules/semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
+ "semver": "bin/semver"
}
},
"node_modules/semver-regex": {
@@ -4257,36 +4177,28 @@
"node": ">=0.10.0"
}
},
- "node_modules/semver-truncate/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "bin": {
- "semver": "bin/semver"
- }
- },
"node_modules/set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
},
"node_modules/shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
"dependencies": {
- "shebang-regex": "^3.0.0"
+ "shebang-regex": "^1.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
"node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
"node_modules/signal-exit": {
@@ -4359,9 +4271,9 @@
}
},
"node_modules/spdx-license-ids": {
- "version": "3.0.9",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz",
- "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ=="
+ "version": "3.0.10",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz",
+ "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA=="
},
"node_modules/sprite-magic-importer": {
"version": "1.6.2",
@@ -4555,14 +4467,17 @@
}
},
"node_modules/strip-indent": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
- "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
"dependencies": {
- "min-indent": "^1.0.0"
+ "get-stdin": "^4.0.1"
+ },
+ "bin": {
+ "strip-indent": "cli.js"
},
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
"node_modules/strip-outer": {
@@ -4588,9 +4503,9 @@
}
},
"node_modules/tar": {
- "version": "6.1.6",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.6.tgz",
- "integrity": "sha512-oaWyu5dQbHaYcyZCTfyPpC+VmI62/OM2RTUYavTk1MDr1cwW5Boi3baeYQKiZbY2uSQJGr+iMOzb/JFxLrft+g==",
+ "version": "6.1.8",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.8.tgz",
+ "integrity": "sha512-sb9b0cp855NbkMJcskdSYA7b11Q8JsX4qe4pyUAfHp+Y6jBjJeek2ZVlwEfWayshEIwlIzXx0Fain3QG9JPm2A==",
"dependencies": {
"chownr": "^2.0.0",
"fs-minipass": "^2.0.0",
@@ -4620,6 +4535,11 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/tar/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
"node_modules/temp-dir": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz",
@@ -4691,11 +4611,11 @@
}
},
"node_modules/trim-newlines": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
- "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
"node_modules/trim-repeated": {
@@ -4734,14 +4654,11 @@
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
},
"node_modules/type-fest": {
- "version": "0.18.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
- "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz",
+ "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==",
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=6"
}
},
"node_modules/typedarray": {
@@ -4881,17 +4798,14 @@
}
},
"node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
"dependencies": {
"isexe": "^2.0.0"
},
"bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
+ "which": "bin/which"
}
},
"node_modules/which-module": {
@@ -5003,9 +4917,9 @@
"integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
},
"node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
},
"node_modules/yargs": {
"version": "13.3.2",
@@ -5025,11 +4939,20 @@
}
},
"node_modules/yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "version": "13.1.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+ "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
+ "dependencies": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ },
+ "node_modules/yargs-parser/node_modules/camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"engines": {
- "node": ">=10"
+ "node": ">=6"
}
},
"node_modules/yargs/node_modules/ansi-regex": {
@@ -5059,37 +4982,6 @@
"node": ">=4"
}
},
- "node_modules/yargs/node_modules/locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dependencies": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/yargs/node_modules/p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "dependencies": {
- "p-limit": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/yargs/node_modules/path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/yargs/node_modules/string-width": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
@@ -5114,15 +5006,6 @@
"node": ">=6"
}
},
- "node_modules/yargs/node_modules/yargs-parser": {
- "version": "13.1.2",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
- "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
- "dependencies": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- },
"node_modules/yauzl": {
"version": "2.10.0",
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
@@ -5251,9 +5134,9 @@
"integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ=="
},
"@types/node": {
- "version": "16.4.13",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.4.13.tgz",
- "integrity": "sha512-bLL69sKtd25w7p1nvg9pigE4gtKVpGTPojBFLMkGHXuUgap2sLqQt2qUnqmVCDfzGUL0DRNZP+1prIZJbMeAXg=="
+ "version": "16.6.1",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.6.1.tgz",
+ "integrity": "sha512-Sr7BhXEAer9xyGuCN3Ek9eg9xPviCF2gfu9kTfuU2HkTVAMYSDeX40fvpmo72n5nansg3nsBjuQBrsS28r+NUw=="
},
"@types/normalize-package-data": {
"version": "2.4.1",
@@ -5272,6 +5155,13 @@
"requires": {
"clean-stack": "^2.0.0",
"indent-string": "^4.0.0"
+ },
+ "dependencies": {
+ "indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="
+ }
}
},
"ajv": {
@@ -5453,41 +5343,6 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
- },
- "lru-cache": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
- "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
- "requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- },
- "shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
- },
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
}
}
},
@@ -5533,41 +5388,6 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
- },
- "lru-cache": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
- "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
- "requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- },
- "shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
- },
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
}
}
},
@@ -5593,13 +5413,6 @@
"bin-version": "^3.0.0",
"semver": "^5.6.0",
"semver-truncate": "^1.1.2"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
- }
}
},
"bin-wrapper": {
@@ -5718,6 +5531,11 @@
"p-finally": "^1.0.0"
}
},
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
+ },
"prepend-http": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
@@ -5819,18 +5637,17 @@
}
},
"camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8="
},
"camelcase-keys": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
- "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
"requires": {
- "camelcase": "^5.3.1",
- "map-obj": "^4.0.0",
- "quick-lru": "^4.0.1"
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
}
},
"caseless": {
@@ -6068,6 +5885,34 @@
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
"which": "^2.0.1"
+ },
+ "dependencies": {
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ }
}
},
"currently-unhandled": {
@@ -6111,13 +5956,6 @@
"requires": {
"decamelize": "^1.1.0",
"map-obj": "^1.0.0"
- },
- "dependencies": {
- "map-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
- "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0="
- }
}
},
"decode-uri-component": {
@@ -6154,11 +5992,6 @@
"integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
}
}
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
}
}
},
@@ -6262,11 +6095,6 @@
"object-assign": "^4.0.1",
"pinkie-promise": "^2.0.0"
}
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
}
}
},
@@ -6301,6 +6129,13 @@
"integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
"requires": {
"path-type": "^4.0.0"
+ },
+ "dependencies": {
+ "path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
+ }
}
},
"download": {
@@ -6421,37 +6256,6 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
- },
- "path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
- },
- "shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
- },
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "requires": {
- "isexe": "^2.0.0"
- }
}
}
},
@@ -6461,13 +6265,6 @@
"integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==",
"requires": {
"pify": "^2.2.0"
- },
- "dependencies": {
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
- }
}
},
"ext-list": {
@@ -6573,12 +6370,12 @@
}
},
"find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
"requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
}
},
"find-versions": {
@@ -6900,12 +6697,9 @@
"integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
},
"hosted-git-info": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz",
- "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==",
- "requires": {
- "lru-cache": "^6.0.0"
- }
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="
},
"http-cache-semantics": {
"version": "3.8.1",
@@ -6964,9 +6758,12 @@
"integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ=="
},
"indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "requires": {
+ "repeating": "^2.0.0"
+ }
},
"inflight": {
"version": "1.0.6",
@@ -7229,29 +7026,22 @@
"pify": "^2.0.0",
"pinkie-promise": "^2.0.0",
"strip-bom": "^2.0.0"
- },
- "dependencies": {
- "parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
- "requires": {
- "error-ex": "^1.2.0"
- }
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
- }
}
},
"locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
"requires": {
- "p-locate": "^4.1.0"
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "dependencies": {
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+ }
}
},
"lodash": {
@@ -7296,154 +7086,15 @@
"indent-string": "^2.1.0",
"longest": "^1.0.0",
"meow": "^3.3.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
- "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8="
- },
- "camelcase-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
- "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
- "requires": {
- "camelcase": "^2.0.0",
- "map-obj": "^1.0.0"
- }
- },
- "find-up": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
- "requires": {
- "path-exists": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "hosted-git-info": {
- "version": "2.8.9",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
- "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="
- },
- "indent-string": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
- "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
- "requires": {
- "repeating": "^2.0.0"
- }
- },
- "map-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
- "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0="
- },
- "meow": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
- "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
- "requires": {
- "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"
- }
- },
- "normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
- "requires": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- }
- },
- "path-exists": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
- "requires": {
- "pinkie-promise": "^2.0.0"
- }
- },
- "path-type": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
- "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
- "requires": {
- "graceful-fs": "^4.1.2",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
- },
- "read-pkg": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
- "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
- "requires": {
- "load-json-file": "^1.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^1.0.0"
- }
- },
- "read-pkg-up": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
- "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
- "requires": {
- "find-up": "^1.0.0",
- "read-pkg": "^1.0.0"
- }
- },
- "redent": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
- "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
- "requires": {
- "indent-string": "^2.1.0",
- "strip-indent": "^1.0.1"
- }
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
- },
- "strip-indent": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
- "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
- "requires": {
- "get-stdin": "^4.0.1"
- }
- },
- "trim-newlines": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
- "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM="
- }
}
},
"lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
"requires": {
- "yallist": "^4.0.0"
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
}
},
"make-dir": {
@@ -7462,27 +7113,25 @@
}
},
"map-obj": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz",
- "integrity": "sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ=="
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0="
},
"meow": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz",
- "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==",
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
"requires": {
- "@types/minimist": "^1.2.0",
- "camelcase-keys": "^6.2.2",
- "decamelize": "^1.2.0",
- "decamelize-keys": "^1.1.0",
- "hard-rejection": "^2.1.0",
- "minimist-options": "4.1.0",
- "normalize-package-data": "^3.0.0",
- "read-pkg-up": "^7.0.1",
- "redent": "^3.0.0",
- "trim-newlines": "^3.0.0",
- "type-fest": "^0.18.0",
- "yargs-parser": "^20.2.3"
+ "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"
}
},
"merge2": {
@@ -7551,6 +7200,13 @@
"integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==",
"requires": {
"yallist": "^4.0.0"
+ },
+ "dependencies": {
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ }
}
},
"minizlib": {
@@ -7560,6 +7216,13 @@
"requires": {
"minipass": "^3.0.0",
"yallist": "^4.0.0"
+ },
+ "dependencies": {
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ }
}
},
"mkdirp": {
@@ -7623,6 +7286,37 @@
"semver": "^7.3.2",
"tar": "^6.0.2",
"which": "^2.0.2"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ }
}
},
"node-sass": {
@@ -7652,6 +7346,21 @@
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
"integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
},
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
+ },
+ "camelcase-keys": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
+ "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
+ "requires": {
+ "camelcase": "^5.3.1",
+ "map-obj": "^4.0.0",
+ "quick-lru": "^4.0.1"
+ }
+ },
"chalk": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
@@ -7664,10 +7373,208 @@
"supports-color": "^2.0.0"
}
},
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "hosted-git-info": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz",
+ "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==",
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "map-obj": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz",
+ "integrity": "sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ=="
+ },
+ "meow": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz",
+ "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==",
+ "requires": {
+ "@types/minimist": "^1.2.0",
+ "camelcase-keys": "^6.2.2",
+ "decamelize": "^1.2.0",
+ "decamelize-keys": "^1.1.0",
+ "hard-rejection": "^2.1.0",
+ "minimist-options": "4.1.0",
+ "normalize-package-data": "^3.0.0",
+ "read-pkg-up": "^7.0.1",
+ "redent": "^3.0.0",
+ "trim-newlines": "^3.0.0",
+ "type-fest": "^0.18.0",
+ "yargs-parser": "^20.2.3"
+ }
+ },
+ "normalize-package-data": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz",
+ "integrity": "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==",
+ "requires": {
+ "hosted-git-info": "^4.0.1",
+ "resolve": "^1.20.0",
+ "semver": "^7.3.4",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ }
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
+ },
+ "read-pkg": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "requires": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ },
+ "dependencies": {
+ "hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ },
+ "type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg=="
+ }
+ }
+ },
+ "read-pkg-up": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+ "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+ "requires": {
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="
+ }
+ }
+ },
+ "redent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
+ "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
+ "requires": {
+ "indent-string": "^4.0.0",
+ "strip-indent": "^3.0.0"
+ }
+ },
+ "semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "strip-indent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
+ "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+ "requires": {
+ "min-indent": "^1.0.0"
+ }
+ },
"supports-color": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
"integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ },
+ "trim-newlines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
+ "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw=="
+ },
+ "type-fest": {
+ "version": "0.18.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
+ "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw=="
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
+ "yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="
}
}
},
@@ -7680,13 +7587,13 @@
}
},
"normalize-package-data": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz",
- "integrity": "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==",
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
"requires": {
- "hosted-git-info": "^4.0.1",
- "resolve": "^1.20.0",
- "semver": "^7.3.4",
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
"validate-npm-package-license": "^3.0.1"
}
},
@@ -7737,13 +7644,6 @@
"integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
"requires": {
"path-key": "^2.0.0"
- },
- "dependencies": {
- "path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
- }
}
},
"npmlog": {
@@ -7804,13 +7704,6 @@
"integrity": "sha512-9wvr+q+ZTDRvXDjL6eDOdFe5WUl/wa5sntf9kAolxqSpkBqaIObwLgFCGXSJASFw+YciXnOVtDWpxXa9cqV94A==",
"requires": {
"type-fest": "^0.5.1"
- },
- "dependencies": {
- "type-fest": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz",
- "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw=="
- }
}
},
"p-cancelable": {
@@ -7845,11 +7738,11 @@
}
},
"p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
"requires": {
- "p-limit": "^2.2.0"
+ "p-limit": "^2.0.0"
}
},
"p-map": {
@@ -7900,20 +7793,20 @@
}
},
"parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
"requires": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
+ "error-ex": "^1.2.0"
}
},
"path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
},
"path-is-absolute": {
"version": "1.0.1",
@@ -7921,9 +7814,9 @@
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
},
"path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
},
"path-parse": {
"version": "1.0.7",
@@ -7931,9 +7824,14 @@
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
"path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
},
"pend": {
"version": "1.2.0",
@@ -7951,9 +7849,9 @@
"integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw=="
},
"pify": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
},
"pinkie": {
"version": "2.0.4",
@@ -8039,37 +7937,6 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
- },
- "path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
- },
- "shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
- },
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "requires": {
- "isexe": "^2.0.0"
- }
}
}
},
@@ -8138,59 +8005,22 @@
"integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g=="
},
"read-pkg": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
- "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
"requires": {
- "@types/normalize-package-data": "^2.4.0",
- "normalize-package-data": "^2.5.0",
- "parse-json": "^5.0.0",
- "type-fest": "^0.6.0"
- },
- "dependencies": {
- "hosted-git-info": {
- "version": "2.8.9",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
- "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="
- },
- "normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
- "requires": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- }
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
- },
- "type-fest": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
- "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg=="
- }
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
}
},
"read-pkg-up": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
- "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
"requires": {
- "find-up": "^4.1.0",
- "read-pkg": "^5.2.0",
- "type-fest": "^0.8.1"
- },
- "dependencies": {
- "type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="
- }
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
}
},
"readable-stream": {
@@ -8208,12 +8038,12 @@
}
},
"redent": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
- "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
"requires": {
- "indent-string": "^4.0.0",
- "strip-indent": "^3.0.0"
+ "indent-string": "^2.1.0",
+ "strip-indent": "^1.0.1"
}
},
"repeating": {
@@ -8357,12 +8187,9 @@
}
},
"semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
- "requires": {
- "lru-cache": "^6.0.0"
- }
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
},
"semver-regex": {
"version": "2.0.0",
@@ -8375,13 +8202,6 @@
"integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=",
"requires": {
"semver": "^5.3.0"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
- }
}
},
"set-blocking": {
@@ -8390,17 +8210,17 @@
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
},
"shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
"requires": {
- "shebang-regex": "^3.0.0"
+ "shebang-regex": "^1.0.0"
}
},
"shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
},
"signal-exit": {
"version": "3.0.3",
@@ -8460,9 +8280,9 @@
}
},
"spdx-license-ids": {
- "version": "3.0.9",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz",
- "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ=="
+ "version": "3.0.10",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz",
+ "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA=="
},
"sprite-magic-importer": {
"version": "1.6.2",
@@ -8616,11 +8436,11 @@
"integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
},
"strip-indent": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
- "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
"requires": {
- "min-indent": "^1.0.0"
+ "get-stdin": "^4.0.1"
}
},
"strip-outer": {
@@ -8640,9 +8460,9 @@
}
},
"tar": {
- "version": "6.1.6",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.6.tgz",
- "integrity": "sha512-oaWyu5dQbHaYcyZCTfyPpC+VmI62/OM2RTUYavTk1MDr1cwW5Boi3baeYQKiZbY2uSQJGr+iMOzb/JFxLrft+g==",
+ "version": "6.1.8",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.8.tgz",
+ "integrity": "sha512-sb9b0cp855NbkMJcskdSYA7b11Q8JsX4qe4pyUAfHp+Y6jBjJeek2ZVlwEfWayshEIwlIzXx0Fain3QG9JPm2A==",
"requires": {
"chownr": "^2.0.0",
"fs-minipass": "^2.0.0",
@@ -8650,6 +8470,13 @@
"minizlib": "^2.1.1",
"mkdirp": "^1.0.3",
"yallist": "^4.0.0"
+ },
+ "dependencies": {
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ }
}
},
"tar-stream": {
@@ -8722,9 +8549,9 @@
}
},
"trim-newlines": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
- "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw=="
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM="
},
"trim-repeated": {
"version": "1.0.0",
@@ -8756,9 +8583,9 @@
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
},
"type-fest": {
- "version": "0.18.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
- "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw=="
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz",
+ "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw=="
},
"typedarray": {
"version": "0.0.6",
@@ -8868,9 +8695,9 @@
}
},
"which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
"requires": {
"isexe": "^2.0.0"
}
@@ -8965,9 +8792,9 @@
"integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
},
"yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
},
"yargs": {
"version": "13.3.2",
@@ -9004,28 +8831,6 @@
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
},
- "locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "requires": {
- "p-limit": "^2.0.0"
- }
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
- },
"string-width": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
@@ -9043,22 +8848,24 @@
"requires": {
"ansi-regex": "^4.1.0"
}
- },
- "yargs-parser": {
- "version": "13.1.2",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
- "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
}
}
},
"yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="
+ "version": "13.1.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+ "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
+ }
+ }
},
"yauzl": {
"version": "2.10.0",
diff --git a/tools/package.json b/tools/package.json
index 3d35010f..2a7748f3 100644
--- a/tools/package.json
+++ b/tools/package.json
@@ -3,6 +3,9 @@
"version": "1.0.0",
"description": "Typecho build tools",
"main": "build.js",
+ "engines": {
+ "node": "16.x"
+ },
"scripts": {
"build_js": "node build.js js",
"build_css": "node build.js css"
diff --git a/usr/themes/default/header.php b/usr/themes/default/header.php
index ae89eab8..8452e6e1 100644
--- a/usr/themes/default/header.php
+++ b/usr/themes/default/header.php
@@ -1,6 +1,6 @@
-
+
diff --git a/var/Typecho/Common.php b/var/Typecho/Common.php
index 1c936692..4ee00d8f 100644
--- a/var/Typecho/Common.php
+++ b/var/Typecho/Common.php
@@ -437,22 +437,6 @@ EOF;
return false;
}
- /**
- * 检测是否在app engine上运行,屏蔽某些功能
- *
- * @static
- * @access public
- * @return boolean
- */
- public static function isAppEngine()
- {
- return !empty($_SERVER['HTTP_APPNAME']) // SAE
- || !!getenv('HTTP_BAE_ENV_APPID') // BAE
- || !!getenv('HTTP_BAE_LOGID') // BAE 3.0
- || (isset($_SERVER['SERVER_SOFTWARE']) && strpos($_SERVER['SERVER_SOFTWARE'],'Google App Engine') !== false) // GAE
- ;
- }
-
/**
* 抽取多维数组的某个元素,组成一个新数组,使这个数组变成一个扁平数组
* 使用方法:
@@ -981,7 +965,11 @@ EOF;
public static function url($path, $prefix)
{
$path = (0 === strpos($path, './')) ? substr($path, 2) : $path;
- return rtrim($prefix, '/') . '/' . str_replace('//', '/', ltrim($path, '/'));
+ return rtrim(
+ rtrim($prefix, '/') . '/'
+ . str_replace('//', '/', ltrim($path, '/')),
+ '/'
+ );
}
/**
diff --git a/var/Typecho/Config.php b/var/Typecho/Config.php
index 0e58fc74..3763d138 100644
--- a/var/Typecho/Config.php
+++ b/var/Typecho/Config.php
@@ -25,7 +25,7 @@ class Typecho_Config implements Iterator
* @access private
* @var array
*/
- private $_currentConfig = array();
+ private $_currentConfig = [];
/**
* 实例化一个当前配置
@@ -33,7 +33,7 @@ class Typecho_Config implements Iterator
* @access public
* @param mixed $config 配置列表
*/
- public function __construct($config = array())
+ public function __construct($config = [])
{
/** 初始化参数 */
$this->setDefault($config);
@@ -43,10 +43,12 @@ class Typecho_Config implements Iterator
* 工厂模式实例化一个当前配置
*
* @access public
- * @param array $config 配置列表
+ *
+ * @param array|string $config 配置列表
+ *
* @return Typecho_Config
*/
- public static function factory($config = array())
+ public static function factory($config = []): Typecho_Config
{
return new Typecho_Config($config);
}
@@ -55,11 +57,13 @@ class Typecho_Config implements Iterator
* 设置默认的配置
*
* @access public
+ *
* @param mixed $config 配置信息
* @param boolean $replace 是否替换已经存在的信息
+ *
* @return void
*/
- public function setDefault($config, $replace = false)
+ public function setDefault($config, bool $replace = false)
{
if (empty($config)) {
return;
@@ -130,7 +134,7 @@ class Typecho_Config implements Iterator
* @access public
* @return boolean
*/
- public function valid()
+ public function valid(): bool
{
return false !== $this->current();
}
@@ -142,9 +146,9 @@ class Typecho_Config implements Iterator
* @param string $name 配置名称
* @return mixed
*/
- public function __get($name)
+ public function __get(string $name)
{
- return isset($this->_currentConfig[$name]) ? $this->_currentConfig[$name] : NULL;
+ return $this->_currentConfig[$name] ?? null;
}
/**
@@ -155,7 +159,7 @@ class Typecho_Config implements Iterator
* @param mixed $value 配置值
* @return void
*/
- public function __set($name, $value)
+ public function __set(string $name, $value)
{
$this->_currentConfig[$name] = $value;
}
@@ -165,10 +169,10 @@ class Typecho_Config implements Iterator
*
* @access public
* @param string $name 配置名称
- * @param array $args 参数
+ * @param array|null $args 参数
* @return void
*/
- public function __call($name, $args)
+ public function __call(string $name, ?array $args)
{
echo $this->_currentConfig[$name];
}
@@ -180,7 +184,7 @@ class Typecho_Config implements Iterator
* @param string $name 配置名称
* @return boolean
*/
- public function __isSet($name)
+ public function __isSet(string $name): bool
{
return isset($this->_currentConfig[$name]);
}
@@ -191,8 +195,16 @@ class Typecho_Config implements Iterator
* @access public
* @return string
*/
- public function __toString()
+ public function __toString(): string
{
return serialize($this->_currentConfig);
}
+
+ /**
+ * @return array
+ */
+ public function toArray(): array
+ {
+ return $this->_currentConfig;
+ }
}
diff --git a/var/Typecho/Db.php b/var/Typecho/Db.php
index f32eef08..4f284545 100644
--- a/var/Typecho/Db.php
+++ b/var/Typecho/Db.php
@@ -61,8 +61,7 @@ class Typecho_Db
/**
* 默认配置
*
- * @access private
- * @var Typecho_Config
+ * @var array
*/
private $_config;
@@ -109,9 +108,10 @@ class Typecho_Db
*
* @param mixed $adapterName 适配器名称
* @param string $prefix 前缀
+ *
* @throws Typecho_Db_Exception
*/
- public function __construct($adapterName, $prefix = 'typecho_')
+ public function __construct($adapterName, string $prefix = 'typecho_')
{
/** 获取适配器名称 */
$this->_adapterName = $adapterName;
@@ -119,16 +119,20 @@ class Typecho_Db
/** 数据库适配器 */
$adapterName = 'Typecho_Db_Adapter_' . $adapterName;
- if (!call_user_func(array($adapterName, 'isAvailable'))) {
+ if (!call_user_func([$adapterName, 'isAvailable'])) {
throw new Typecho_Db_Exception("Adapter {$adapterName} is not available");
}
$this->_prefix = $prefix;
/** 初始化内部变量 */
- $this->_pool = array();
- $this->_connectedPool = array();
- $this->_config = array();
+ $this->_pool = [];
+ $this->_connectedPool = [];
+
+ $this->_config = [
+ self::READ => [],
+ self::WRITE => []
+ ];
//实例化适配器对象
$this->_adapter = new $adapterName();
@@ -140,7 +144,7 @@ class Typecho_Db
* @access public
* @return string
*/
- public function getAdapterName()
+ public function getAdapterName(): string
{
return $this->_adapterName;
}
@@ -151,54 +155,69 @@ class Typecho_Db
* @access public
* @return string
*/
- public function getPrefix()
+ public function getPrefix(): string
{
return $this->_prefix;
}
/**
- * getConfig
- *
- * @access public
- * @return array
+ * @param Typecho_Config $config
+ * @param int $op
*/
- public function getConfig()
+ public function addConfig(Typecho_Config $config, int $op)
{
- return $this->_config;
+ if ($op & self::READ) {
+ $this->_config[self::READ][] = $config;
+ }
+
+ if ($op & self::WRITE) {
+ $this->_config[self::WRITE][] = $config;
+ }
+ }
+
+ /**
+ * getConfig
+ *
+ * @param int $op
+ *
+ * @return Typecho_Config
+ * @throws Typecho_Db_Exception
+ */
+ public function getConfig(int $op): Typecho_Config
+ {
+ if (empty($this->_config[$op])) {
+ /** Typecho_Db_Exception */
+ throw new Typecho_Db_Exception('Missing Database Connection');
+ }
+
+ $key = array_rand($this->_config[$op]);
+ return $this->_config[$op][$key];
}
/**
* 重置连接池
- *
+ *
* @return void
*/
public function flushPool()
{
- $this->_connectedPool = array();
+ $this->_connectedPool = [];
}
/**
* 选择数据库
- *
- * @param int $op
- * @return Typecho_Db_Adapter
+ *
+ * @param int $op
+ *
+ * @return mixed
* @throws Typecho_Db_Exception
*/
- public function selectDb($op)
+ public function selectDb(int $op)
{
if (!isset($this->_connectedPool[$op])) {
- if (empty($this->_pool[$op])) {
- /** Typecho_Db_Exception */
- throw new Typecho_Db_Exception('Missing Database Connection');
- }
-
- //获取相应读或写服务器连接池中的一个
- $selectConnection = rand(0, count($this->_pool[$op]) - 1);
- //获取随机获得的连接池配置
- $selectConnectionConfig = $this->_config[$this->_pool[$op][$selectConnection]];
+ $selectConnectionConfig = $this->getConfig($op);
$selectConnectionHandle = $this->_adapter->connect($selectConnectionConfig);
- $this->_connectedPool[$op] = &$selectConnectionHandle;
-
+ $this->_connectedPool[$op] = $selectConnectionHandle;
}
return $this->_connectedPool[$op];
@@ -209,7 +228,7 @@ class Typecho_Db
*
* @return Typecho_Db_Query
*/
- public function sql()
+ public function sql(): Typecho_Db_Query
{
return new Typecho_Db_Query($this->_adapter, $this->_prefix);
}
@@ -218,35 +237,25 @@ class Typecho_Db
* 为多数据库提供支持
*
* @access public
- * @param Typecho_Db $db 数据库实例
+ * @param array $config 数据库实例
* @param integer $op 数据库操作
* @return void
*/
- public function addServer($config, $op)
+ public function addServer(array $config, int $op)
{
- $this->_config[] = Typecho_Config::factory($config);
- $key = count($this->_config) - 1;
-
- /** 将连接放入池中 */
- switch ($op) {
- case self::READ:
- case self::WRITE:
- $this->_pool[$op][] = $key;
- break;
- default:
- $this->_pool[self::READ][] = $key;
- $this->_pool[self::WRITE][] = $key;
- break;
- }
+ $this->addConfig(Typecho_Config::factory($config), $op);
+ $this->flushPool();
}
/**
* 获取版本
- *
- * @param int $op
+ *
+ * @param int $op
+ *
* @return string
+ * @throws Typecho_Db_Exception
*/
- public function getVersion($op = self::READ)
+ public function getVersion(int $op = self::READ): string
{
return $this->_adapter->getVersion($this->selectDb($op));
}
@@ -270,7 +279,7 @@ class Typecho_Db
* @return Typecho_Db
* @throws Typecho_Db_Exception
*/
- public static function get()
+ public static function get(): Typecho_Db
{
if (empty(self::$_instance)) {
/** Typecho_Db_Exception */
@@ -283,24 +292,31 @@ class Typecho_Db
/**
* 选择查询字段
*
- * @access public
- * @param mixed $field 查询字段
+ * @param ...$ags
+ *
* @return Typecho_Db_Query
+ * @throws Typecho_Db_Exception
*/
- public function select()
+ public function select(...$ags): Typecho_Db_Query
{
+ $this->selectDb(self::READ);
+
$args = func_get_args();
- return call_user_func_array(array($this->sql(), 'select'), $args ? $args : array('*'));
+ return call_user_func_array([$this->sql(), 'select'], $args ?: ['*']);
}
/**
* 更新记录操作(UPDATE)
*
* @param string $table 需要更新记录的表
+ *
* @return Typecho_Db_Query
+ * @throws Typecho_Db_Exception
*/
- public function update($table)
+ public function update(string $table): Typecho_Db_Query
{
+ $this->selectDb(self::WRITE);
+
return $this->sql()->update($table);
}
@@ -308,10 +324,14 @@ class Typecho_Db
* 删除记录操作(DELETE)
*
* @param string $table 需要删除记录的表
+ *
* @return Typecho_Db_Query
+ * @throws Typecho_Db_Exception
*/
- public function delete($table)
+ public function delete(string $table): Typecho_Db_Query
{
+ $this->selectDb(self::WRITE);
+
return $this->sql()->delete($table);
}
@@ -319,10 +339,14 @@ class Typecho_Db
* 插入记录操作(INSERT)
*
* @param string $table 需要插入记录的表
+ *
* @return Typecho_Db_Query
+ * @throws Typecho_Db_Exception
*/
- public function insert($table)
+ public function insert(string $table): Typecho_Db_Query
{
+ $this->selectDb(self::WRITE);
+
return $this->sql()->insert($table);
}
@@ -342,19 +366,20 @@ class Typecho_Db
* @param mixed $query 查询语句或者查询对象
* @param int $op 数据库读写状态
* @param string $action 操作动作
+ *
* @return mixed
* @throws Typecho_Db_Exception
*/
- public function query($query, $op = self::READ, $action = self::SELECT)
+ public function query($query, int $op = self::READ, string $action = self::SELECT)
{
- $table = NULL;
+ $table = null;
/** 在适配器中执行查询 */
if ($query instanceof Typecho_Db_Query) {
$action = $query->getAttribute('action');
$table = $query->getAttribute('table');
$op = (self::UPDATE == $action || self::DELETE == $action
- || self::INSERT == $action) ? self::WRITE : self::READ;
+ || self::INSERT == $action) ? self::WRITE : self::READ;
} else if (!is_string($query)) {
/** 如果query不是对象也不是字符串,那么将其判断为查询资源句柄,直接返回 */
return $query;
@@ -389,24 +414,26 @@ class Typecho_Db
* 一次取出所有行
*
* @param mixed $query 查询对象
- * @param array $filter 行过滤器函数,将查询的每一行作为第一个参数传入指定的过滤器中
+ * @param array|null $filter 行过滤器函数,将查询的每一行作为第一个参数传入指定的过滤器中
+ *
* @return array
+ * @throws Typecho_Db_Exception
*/
- public function fetchAll($query, array $filter = NULL)
+ public function fetchAll($query, ?array $filter = null): array
{
//执行查询
$resource = $this->query($query, self::READ);
- $result = array();
+ $result = [];
/** 取出过滤器 */
if (!empty($filter)) {
- list($object, $method) = $filter;
+ [$object, $method] = $filter;
}
//取出每一行
while ($rows = $this->_adapter->fetch($resource)) {
//判断是否有过滤器
- $result[] = $filter ? call_user_func(array(&$object, $method), $rows) : $rows;
+ $result[] = $filter ? call_user_func([&$object, $method], $rows) : $rows;
}
return $result;
@@ -416,41 +443,45 @@ class Typecho_Db
* 一次取出一行
*
* @param mixed $query 查询对象
- * @param array $filter 行过滤器函数,将查询的每一行作为第一个参数传入指定的过滤器中
+ * @param array|null $filter 行过滤器函数,将查询的每一行作为第一个参数传入指定的过滤器中
+ *
* @return mixed
+ * @throws Typecho_Db_Exception
*/
- public function fetchRow($query, array $filter = NULL)
+ public function fetchRow($query, ?array $filter = null)
{
$resource = $this->query($query, self::READ);
/** 取出过滤器 */
if ($filter) {
- list($object, $method) = $filter;
+ [$object, $method] = $filter;
}
return ($rows = $this->_adapter->fetch($resource)) ?
- ($filter ? $object->$method($rows) : $rows) :
- array();
+ ($filter ? $object->$method($rows) : $rows) :
+ [];
}
/**
* 一次取出一个对象
*
* @param mixed $query 查询对象
- * @param array $filter 行过滤器函数,将查询的每一行作为第一个参数传入指定的过滤器中
+ * @param array|null $filter 行过滤器函数,将查询的每一行作为第一个参数传入指定的过滤器中
+ *
* @return mixed
+ * @throws Typecho_Db_Exception
*/
- public function fetchObject($query, array $filter = NULL)
+ public function fetchObject($query, ?array $filter = null)
{
$resource = $this->query($query, self::READ);
/** 取出过滤器 */
if ($filter) {
- list($object, $method) = $filter;
+ [$object, $method] = $filter;
}
return ($rows = $this->_adapter->fetchObject($resource)) ?
- ($filter ? $object->$method($rows) : $rows) :
- new stdClass();
+ ($filter ? $object->$method($rows) : $rows) :
+ new stdClass();
}
}
diff --git a/var/Typecho/Db/Adapter.php b/var/Typecho/Db/Adapter.php
index 2b5b4e0f..6af4f8ec 100644
--- a/var/Typecho/Db/Adapter.php
+++ b/var/Typecho/Db/Adapter.php
@@ -27,7 +27,7 @@ interface Typecho_Db_Adapter
* 数据库连接函数
*
* @param Typecho_Config $config 数据库配置
- * @return resource
+ * @return mixed
*/
public function connect(Typecho_Config $config);
diff --git a/var/Typecho/Db/Adapter/Mysql.php b/var/Typecho/Db/Adapter/Mysql.php
index 7dd246c0..869c4aab 100644
--- a/var/Typecho/Db/Adapter/Mysql.php
+++ b/var/Typecho/Db/Adapter/Mysql.php
@@ -39,7 +39,7 @@ class Typecho_Db_Adapter_Mysql implements Typecho_Db_Adapter
*
* @param Typecho_Config $config 数据库配置
* @throws Typecho_Db_Exception
- * @return resource
+ * @return mixed
*/
public function connect(Typecho_Config $config)
{
diff --git a/var/Typecho/Db/Adapter/Mysqli.php b/var/Typecho/Db/Adapter/Mysqli.php
index 25e9d5d2..4c437f20 100644
--- a/var/Typecho/Db/Adapter/Mysqli.php
+++ b/var/Typecho/Db/Adapter/Mysqli.php
@@ -19,7 +19,7 @@ class Typecho_Db_Adapter_Mysqli implements Typecho_Db_Adapter
* 数据库连接字符串标示
*
* @access private
- * @var resource
+ * @var mysqli
*/
private $_dbLink;
@@ -39,12 +39,18 @@ class Typecho_Db_Adapter_Mysqli implements Typecho_Db_Adapter
*
* @param Typecho_Config $config 数据库配置
* @throws Typecho_Db_Exception
- * @return resource
+ * @return mixed
*/
public function connect(Typecho_Config $config)
{
- if ($this->_dbLink = @new MySQLi($config->host, $config->user, $config->password, $config->database, (empty($config->port) ? '' : $config->port))) {
+ if ($this->_dbLink = @mysqli_connect(
+ $config->host,
+ $config->user,
+ $config->password,
+ $config->database,
+ (empty($config->port) ? null : $config->port))
+ ) {
if ($config->charset) {
$this->_dbLink->query("SET NAMES '{$config->charset}'");
}
diff --git a/var/Typecho/Request.php b/var/Typecho/Request.php
index dfae1c12..08d961d5 100644
--- a/var/Typecho/Request.php
+++ b/var/Typecho/Request.php
@@ -22,7 +22,7 @@ class Typecho_Request
* @access private
* @var array
*/
- private $_params = array();
+ private $_params = [];
/**
* 路径信息
@@ -30,7 +30,7 @@ class Typecho_Request
* @access private
* @var string
*/
- private $_pathInfo = NULL;
+ private $_pathInfo = null;
/**
* 服务端参数
@@ -38,31 +38,31 @@ class Typecho_Request
* @access private
* @var array
*/
- private $_server = array();
+ private $_server = [];
/**
- * _requestUri
- *
+ * _requestUri
+ *
* @var string
* @access private
*/
- private $_requestUri = NULL;
+ private $_requestUri = null;
/**
- * _requestRoot
- *
+ * _requestRoot
+ *
* @var mixed
* @access private
*/
- private $_requestRoot = NULL;
+ private $_requestRoot = null;
/**
* 获取baseurl
- *
+ *
* @var string
* @access private
*/
- private $_baseUrl = NULL;
+ private $_baseUrl = null;
/**
* 客户端ip地址
@@ -70,7 +70,7 @@ class Typecho_Request
* @access private
* @var string
*/
- private $_ip = NULL;
+ private $_ip = null;
/**
* 客户端字符串
@@ -78,7 +78,7 @@ class Typecho_Request
* @access private
* @var string
*/
- private $_agent = NULL;
+ private $_agent = null;
/**
* 来源页
@@ -86,7 +86,7 @@ class Typecho_Request
* @access private
* @var string
*/
- private $_referer = NULL;
+ private $_referer = null;
/**
* 单例句柄
@@ -94,7 +94,7 @@ class Typecho_Request
* @access private
* @var Typecho_Request
*/
- private static $_instance = NULL;
+ private static $_instance;
/**
* 全部的http数据
@@ -103,13 +103,13 @@ class Typecho_Request
*/
private static $_httpParams = false;
-
+
/**
* 域名前缀
*
* @var string
*/
- private static $_urlPrefix = NULL;
+ private $_urlPrefix = null;
/**
* 当前过滤器
@@ -117,7 +117,7 @@ class Typecho_Request
* @access private
* @var array
*/
- private $_filter = array();
+ private $_filter = [];
/**
* 支持的过滤器列表
@@ -125,14 +125,14 @@ class Typecho_Request
* @access private
* @var string
*/
- private static $_supportFilters = array(
- 'int' => 'intval',
- 'integer' => 'intval',
- 'search' => array('Typecho_Common', 'filterSearchQuery'),
- 'xss' => array('Typecho_Common', 'removeXSS'),
- 'url' => array('Typecho_Common', 'safeUrl'),
- 'slug' => array('Typecho_Common', 'slugName')
- );
+ private static $_supportFilters = [
+ 'int' => 'intval',
+ 'integer' => 'intval',
+ 'search' => ['Typecho_Common', 'filterSearchQuery'],
+ 'xss' => ['Typecho_Common', 'removeXSS'],
+ 'url' => ['Typecho_Common', 'safeUrl'],
+ 'slug' => ['Typecho_Common', 'slugName']
+ ];
/**
* 获取单例句柄
@@ -140,9 +140,9 @@ class Typecho_Request
* @access public
* @return Typecho_Request
*/
- public static function getInstance()
+ public static function getInstance(): Typecho_Request
{
- if (NULL === self::$_instance) {
+ if (!isset(self::$_instance)) {
self::$_instance = new Typecho_Request();
}
@@ -153,7 +153,9 @@ class Typecho_Request
* 应用过滤器
*
* @access private
+ *
* @param mixed $value
+ *
* @return mixed
*/
private function _applyFilter($value)
@@ -161,10 +163,10 @@ class Typecho_Request
if ($this->_filter) {
foreach ($this->_filter as $filter) {
$value = is_array($value) ? array_map($filter, $value) :
- call_user_func($filter, $value);
+ call_user_func($filter, $value);
}
- $this->_filter = array();
+ $this->_filter = [];
}
return $value;
@@ -174,13 +176,14 @@ class Typecho_Request
* 检查ip地址是否合法
*
* @param string $ip ip地址
+ *
* @return boolean
*/
- private function _checkIp($ip)
+ private function _checkIp(string $ip): bool
{
if (__TYPECHO_FILTER_SUPPORTED__) {
return false !== (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)
- || filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
+ || filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
}
return preg_match("/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/", $ip)
@@ -191,12 +194,13 @@ class Typecho_Request
* 检查ua是否合法
*
* @param string $agent ua字符串
+ *
* @return boolean
*/
- private function _checkAgent($agent)
+ private function _checkAgent(string $agent): bool
{
return preg_match("/^[_a-z0-9- ,:;=#@\.\(\)\/\+\*\?]+$/i", $agent);
- }
+ }
/**
* 初始化变量
@@ -205,28 +209,28 @@ class Typecho_Request
{
if (false === self::$_httpParams) {
self::$_httpParams = array_filter(array_merge($_POST, $_GET),
- array('Typecho_Common', 'checkStrEncoding'));
+ ['Typecho_Common', 'checkStrEncoding']);
}
}
/**
- * 获取url前缀
- *
+ * 获取url前缀
+ *
* @access public
* @return string
*/
- public static function getUrlPrefix()
+ public function getUrlPrefix(): string
{
- if (empty(self::$_urlPrefix)) {
+ if (empty($this->_urlPrefix)) {
if (defined('__TYPECHO_URL_PREFIX__')) {
- self::$_urlPrefix = __TYPECHO_URL_PREFIX__;
+ $this->_urlPrefix = __TYPECHO_URL_PREFIX__;
} else if (!defined('__TYPECHO_CLI__')) {
- self::$_urlPrefix = (self::isSecure() ? 'https' : 'http') . '://'
- . (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME']);
+ $this->_urlPrefix = ($this->isSecure() ? 'https' : 'http') . '://'
+ . ($_SERVER['HTTP_HOST'] ?? $_SERVER['SERVER_NAME']);
}
}
- return self::$_urlPrefix;
+ return $this->_urlPrefix;
}
/**
@@ -235,7 +239,7 @@ class Typecho_Request
* @access public
* @return boolean
*/
- public static function isSecure()
+ public function isSecure(): bool
{
return (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && !strcasecmp('https', $_SERVER['HTTP_X_FORWARDED_PROTO']))
|| (!empty($_SERVER['HTTP_X_FORWARDED_PORT']) && 443 == $_SERVER['HTTP_X_FORWARDED_PORT'])
@@ -250,13 +254,13 @@ class Typecho_Request
* @access public
* @return Typecho_Request
*/
- public function filter()
+ public function filter(): Typecho_Request
{
$filters = func_get_args();
foreach ($filters as $filter) {
$this->_filter[] = is_string($filter) && isset(self::$_supportFilters[$filter])
- ? self::$_supportFilters[$filter] : $filter;
+ ? self::$_supportFilters[$filter] : $filter;
}
return $this;
@@ -266,10 +270,12 @@ class Typecho_Request
* 获取实际传递参数(magic)
*
* @access public
+ *
* @param string $key 指定参数
+ *
* @return mixed
*/
- public function __get($key)
+ public function __get(string $key)
{
return $this->get($key);
}
@@ -278,24 +284,28 @@ class Typecho_Request
* 判断参数是否存在
*
* @access public
+ *
* @param string $key 指定参数
+ *
* @return boolean
*/
- public function __isset($key)
+ public function __isset(string $key)
{
return isset(self::$_httpParams[$key])
- || isset($this->_params[$key]);
+ || isset($this->_params[$key]);
}
/**
* 获取实际传递参数
*
* @access public
+ *
* @param string $key 指定参数
* @param mixed $default 默认参数 (default: NULL)
+ *
* @return mixed
*/
- public function get($key, $default = NULL)
+ public function get(string $key, $default = null)
{
switch (true) {
case isset($this->_params[$key]):
@@ -317,15 +327,15 @@ class Typecho_Request
* 获取一个数组
*
* @param $key
+ *
* @return array
*/
- public function getArray($key)
+ public function getArray($key): array
{
- $result = isset($this->_params[$key]) ? $this->_params[$key] :
- (isset(self::$_httpParams[$key]) ? self::$_httpParams[$key] : array());
+ $result = $this->_params[$key] ?? (self::$_httpParams[$key] ?? []);
$result = is_array($result) ? $result
- : (strlen($result) > 0 ? array($result) : array());
+ : (strlen($result) > 0 ? [$result] : []);
return $this->_applyFilter($result);
}
@@ -333,12 +343,14 @@ class Typecho_Request
* 从参数列表指定的值中获取http传递参数
*
* @access public
+ *
* @param mixed $params 指定的参数
+ *
* @return array
*/
- public function from($params)
+ public function from($params): array
{
- $result = array();
+ $result = [];
$args = is_array($params) ? $params : func_get_args();
foreach ($args as $arg) {
@@ -352,11 +364,13 @@ class Typecho_Request
* 设置http传递参数
*
* @access public
+ *
* @param string $name 指定的参数
* @param mixed $value 参数值
+ *
* @return void
*/
- public function setParam($name, $value)
+ public function setParam(string $name, $value)
{
if (Typecho_Common::checkStrEncoding($value)) {
$this->_params[$name] = $value;
@@ -367,7 +381,9 @@ class Typecho_Request
* 设置多个参数
*
* @access public
+ *
* @param mixed $params 参数列表
+ *
* @return void
*/
public function setParams($params)
@@ -379,20 +395,20 @@ class Typecho_Request
}
$this->_params = array_merge($this->_params,
- array_filter($params, array('Typecho_Common', 'checkStrEncoding')));
+ array_filter($params, ['Typecho_Common', 'checkStrEncoding']));
}
/**
- * getRequestRoot
- *
+ * getRequestRoot
+ *
* @access public
* @return string
*/
- public function getRequestRoot()
+ public function getRequestRoot(): string
{
- if (NULL === $this->_requestRoot) {
- $root = rtrim(self::getUrlPrefix() . $this->getBaseUrl(), '/') . '/';
-
+ if (null === $this->_requestRoot) {
+ $root = rtrim($this->getUrlPrefix() . $this->getBaseUrl(), '/') . '/';
+
$pos = strrpos($root, '.php/');
if ($pos) {
$root = dirname(substr($root, 0, $pos));
@@ -406,22 +422,22 @@ class Typecho_Request
/**
* 获取当前请求url
- *
+ *
* @access public
* @return string
*/
- public function getRequestUrl()
+ public function getRequestUrl(): string
{
- return self::getUrlPrefix() . $this->getRequestUri();
+ return $this->getUrlPrefix() . $this->getRequestUri();
}
/**
* 获取请求地址
- *
+ *
* @access public
* @return string
*/
- public function getRequestUri()
+ public function getRequestUri(): ?string
{
if (!empty($this->_requestUri)) {
return $this->_requestUri;
@@ -438,16 +454,16 @@ class Typecho_Request
&& $_SERVER['IIS_WasUrlRewritten'] == '1'
&& isset($_SERVER['UNENCODED_URL'])
&& $_SERVER['UNENCODED_URL'] != ''
- ) {
+ ) {
$requestUri = $_SERVER['UNENCODED_URL'];
} elseif (isset($_SERVER['REQUEST_URI'])) {
$requestUri = $_SERVER['REQUEST_URI'];
- $parts = @parse_url($requestUri);
-
+ $parts = @parse_url($requestUri);
+
if (isset($_SERVER['HTTP_HOST']) && strstr($requestUri, $_SERVER['HTTP_HOST'])) {
if (false !== $parts) {
- $requestUri = (empty($parts['path']) ? '' : $parts['path'])
- . ((empty($parts['query'])) ? '' : '?' . $parts['query']);
+ $requestUri = (empty($parts['path']) ? '' : $parts['path'])
+ . ((empty($parts['query'])) ? '' : '?' . $parts['query']);
}
} elseif (!empty($_SERVER['QUERY_STRING']) && empty($parts['query'])) {
// fix query missing
@@ -464,14 +480,14 @@ class Typecho_Request
}
/**
- * getBaseUrl
- *
+ * getBaseUrl
+ *
* @access public
* @return string
*/
- public function getBaseUrl()
+ public function getBaseUrl(): ?string
{
- if (NULL !== $this->_baseUrl) {
+ if (null !== $this->_baseUrl) {
return $this->_baseUrl;
}
@@ -487,22 +503,22 @@ class Typecho_Request
} else {
// Backtrack up the script_filename to find the portion matching
// php_self
- $path = isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : '';
- $file = isset($_SERVER['SCRIPT_FILENAME']) ? $_SERVER['SCRIPT_FILENAME'] : '';
- $segs = explode('/', trim($file, '/'));
- $segs = array_reverse($segs);
- $index = 0;
- $last = count($segs);
+ $path = $_SERVER['PHP_SELF'] ?? '';
+ $file = $_SERVER['SCRIPT_FILENAME'] ?? '';
+ $segs = explode('/', trim($file, '/'));
+ $segs = array_reverse($segs);
+ $index = 0;
+ $last = count($segs);
$baseUrl = '';
do {
- $seg = $segs[$index];
+ $seg = $segs[$index];
$baseUrl = '/' . $seg . $baseUrl;
++$index;
} while (($last > $index) && (false !== ($pos = strpos($path, $baseUrl))) && (0 != $pos));
}
// Does the baseUrl have anything in common with the request_uri?
- $finalBaseUrl = NULL;
+ $finalBaseUrl = null;
$requestUri = $this->getRequestUri();
if (0 === strpos($requestUri, $baseUrl)) {
@@ -515,25 +531,26 @@ class Typecho_Request
// no match whatsoever; set it blank
$finalBaseUrl = '';
} else if ((strlen($requestUri) >= strlen($baseUrl))
- && ((false !== ($pos = strpos($requestUri, $baseUrl))) && ($pos !== 0)))
- {
+ && ((false !== ($pos = strpos($requestUri, $baseUrl))) && ($pos !== 0))) {
// If using mod_rewrite or ISAPI_Rewrite strip the script filename
// out of baseUrl. $pos !== 0 makes sure it is not matching a value
// from PATH_INFO or QUERY_STRING
$baseUrl = substr($requestUri, 0, $pos + strlen($baseUrl));
}
- return ($this->_baseUrl = (NULL === $finalBaseUrl) ? rtrim($baseUrl, '/') : $finalBaseUrl);
+ return ($this->_baseUrl = (null === $finalBaseUrl) ? rtrim($baseUrl, '/') : $finalBaseUrl);
}
/**
* 根据当前uri构造指定参数的uri
*
* @access public
+ *
* @param mixed $parameter 指定的参数
+ *
* @return string
*/
- public function makeUriByRequest($parameter = NULL)
+ public function makeUriByRequest($parameter = null): string
{
/** 初始化地址 */
$requestUri = $this->getRequestUrl();
@@ -563,19 +580,21 @@ class Typecho_Request
* 获取当前pathinfo
*
* @access public
- * @param string $inputEncoding 输入编码
- * @param string $outputEncoding 输出编码
+ *
+ * @param string|null $inputEncoding 输入编码
+ * @param string|null $outputEncoding 输出编码
+ *
* @return string
*/
- public function getPathInfo($inputEncoding = NULL, $outputEncoding = NULL)
+ public function getPathInfo(string $inputEncoding = null, string $outputEncoding = null): ?string
{
/** 缓存信息 */
- if (NULL !== $this->_pathInfo) {
+ if (null !== $this->_pathInfo) {
return $this->_pathInfo;
}
//参考Zend Framework对pahtinfo的处理, 更好的兼容性
- $pathInfo = NULL;
+ $pathInfo = null;
//处理requestUri
$requestUri = $this->getRequestUri();
@@ -586,12 +605,11 @@ class Typecho_Request
$requestUri = substr($requestUri, 0, $pos);
}
- if ((NULL !== $finalBaseUrl)
- && (false === ($pathInfo = substr($requestUri, strlen($finalBaseUrl)))))
- {
+ if ((null !== $finalBaseUrl)
+ && (false === ($pathInfo = substr($requestUri, strlen($finalBaseUrl))))) {
// If substr() returns false then PATH_INFO is set to an empty string
$pathInfo = '/';
- } elseif (NULL === $finalBaseUrl) {
+ } elseif (null === $finalBaseUrl) {
$pathInfo = $requestUri;
}
@@ -599,8 +617,8 @@ class Typecho_Request
//针对iis的utf8编码做强制转换
//参考http://docs.moodle.org/ja/%E5%A4%9A%E8%A8%80%E8%AA%9E%E5%AF%BE%E5%BF%9C%EF%BC%9A%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AE%E8%A8%AD%E5%AE%9A
if (!empty($inputEncoding) && !empty($outputEncoding) &&
- (stripos($_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS') !== false
- || stripos($_SERVER['SERVER_SOFTWARE'], 'ExpressionDevServer') !== false)) {
+ (stripos($_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS') !== false
+ || stripos($_SERVER['SERVER_SOFTWARE'], 'ExpressionDevServer') !== false)) {
if (function_exists('mb_convert_encoding')) {
$pathInfo = mb_convert_encoding($pathInfo, $outputEncoding, $inputEncoding);
} else if (function_exists('iconv')) {
@@ -615,62 +633,46 @@ class Typecho_Request
return ($this->_pathInfo = '/' . ltrim(urldecode($pathInfo), '/'));
}
- /**
- * 设置服务端参数
- *
- * @access public
- * @param string $name 参数名称
- * @param mixed $value 参数值
- * @return void
- */
- public function setServer($name, $value = NULL)
- {
- if (NULL == $value) {
- if (isset($_SERVER[$name])) {
- $value = $_SERVER[$name];
- } else if (isset($_ENV[$name])) {
- $value = $_ENV[$name];
- }
- }
-
- $this->_server[$name] = $value;
- }
-
/**
* 获取环境变量
*
* @access public
+ *
* @param string $name 获取环境变量名
- * @return string
+ * @param string|null $default
+ *
+ * @return string|null
*/
- public function getServer($name)
+ public function getServer(string $name, string $default = null): ?string
{
- if (!isset($this->_server[$name])) {
- $this->setServer($name);
- }
-
- return $this->_server[$name];
+ return $_SERVER[$name] ?? $default;
}
/**
* 设置ip地址
*
* @access public
- * @param string $ip
+ *
+ * @param string|null $ip
*/
- public function setIp($ip = NULL)
+ public function setIp(string $ip = null)
{
if (!empty($ip)) {
$this->_ip = $ip;
} else {
switch (true) {
- case defined('__TYPECHO_IP_SOURCE__') && NULL !== $this->getServer(__TYPECHO_IP_SOURCE__):
- list($this->_ip) = array_map('trim', explode(',', $this->getServer(__TYPECHO_IP_SOURCE__)));
+ case defined('__TYPECHO_IP_SOURCE__')
+ && null !== $this->getServer(__TYPECHO_IP_SOURCE__):
+ list($this->_ip) = array_map(
+ 'trim',
+ explode(',',
+ $this->getServer(__TYPECHO_IP_SOURCE__))
+ );
break;
- case NULL !== $this->getServer('REMOTE_ADDR'):
+ case null !== $this->getServer('REMOTE_ADDR'):
$this->_ip = $this->getServer('REMOTE_ADDR');
break;
- case NULL !== $this->getServer('HTTP_CLIENT_IP'):
+ case null !== $this->getServer('HTTP_CLIENT_IP'):
$this->_ip = $this->getServer('HTTP_CLIENT_IP');
break;
default:
@@ -689,9 +691,9 @@ class Typecho_Request
* @access public
* @return string
*/
- public function getIp()
+ public function getIp(): string
{
- if (NULL === $this->_ip) {
+ if (null === $this->_ip) {
$this->setIp();
}
@@ -702,12 +704,14 @@ class Typecho_Request
* 设置客户端
*
* @access public
- * @param string $agent 客户端字符串
+ *
+ * @param string|null $agent 客户端字符串
+ *
* @return void
*/
- public function setAgent($agent = NULL)
+ public function setAgent(string $agent = null)
{
- $agent = (NULL === $agent) ? $this->getServer('HTTP_USER_AGENT') : $agent;
+ $agent = (null === $agent) ? $this->getServer('HTTP_USER_AGENT') : $agent;
$this->_agent = self::_checkAgent($agent) ? $agent : '';
}
@@ -717,9 +721,9 @@ class Typecho_Request
* @access public
* @return string
*/
- public function getAgent()
+ public function getAgent(): ?string
{
- if (NULL === $this->_agent) {
+ if (null === $this->_agent) {
$this->setAgent();
}
@@ -730,23 +734,25 @@ class Typecho_Request
* 设置来源页
*
* @access public
- * @param string $referer 客户端字符串
+ *
+ * @param string|null $referer 客户端字符串
+ *
* @return void
*/
- public function setReferer($referer = NULL)
+ public function setReferer(string $referer = null)
{
- $this->_referer = (NULL === $referer) ? $this->getServer('HTTP_REFERER') : $referer;
+ $this->_referer = (null === $referer) ? $this->getServer('HTTP_REFERER') : $referer;
}
/**
* 获取客户端
*
* @access public
- * @return string
+ * @return string|null
*/
- public function getReferer()
+ public function getReferer(): ?string
{
- if (NULL === $this->_referer) {
+ if (null === $this->_referer) {
$this->setReferer();
}
@@ -759,7 +765,7 @@ class Typecho_Request
* @access public
* @return boolean
*/
- public function isGet()
+ public function isGet(): bool
{
return 'GET' == $this->getServer('REQUEST_METHOD');
}
@@ -770,7 +776,7 @@ class Typecho_Request
* @access public
* @return boolean
*/
- public function isPost()
+ public function isPost(): bool
{
return 'POST' == $this->getServer('REQUEST_METHOD');
}
@@ -781,10 +787,10 @@ class Typecho_Request
* @access public
* @return boolean
*/
- public function isPut()
+ public function isPut(): bool
{
return 'PUT' == $this->getServer('REQUEST_METHOD');
- }
+ }
/**
* 判断是否为ajax
@@ -792,43 +798,21 @@ class Typecho_Request
* @access public
* @return boolean
*/
- public function isAjax()
+ public function isAjax(): bool
{
return 'XMLHttpRequest' == $this->getServer('HTTP_X_REQUESTED_WITH');
}
- /**
- * 判断是否为flash
- *
- * @access public
- * @return boolean
- */
- public function isFlash()
- {
- return 'Shockwave Flash' == $this->getServer('USER_AGENT');
- }
-
- /**
- * isMobile
- *
- * @static
- * @access public
- * @return boolean
- */
- public function isMobile()
- {
- $userAgent = $this->getAgent();
- return preg_match('/android.+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i',$userAgent) || preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i',substr($userAgent,0,4));
- }
-
/**
* 判断输入是否满足要求
*
* @access public
+ *
* @param mixed $query 条件
+ *
* @return boolean
*/
- public function is($query)
+ public function is($query): bool
{
$validated = false;
@@ -840,7 +824,7 @@ class Typecho_Request
}
/** 验证串 */
- if ($params) {
+ if (!empty($params)) {
$validated = true;
foreach ($params as $key => $val) {
$validated = empty($val) ? $this->__isset($key) : ($val == $this->get($key));
diff --git a/var/Typecho/Response.php b/var/Typecho/Response.php
index d5e449ec..3d90ae22 100644
--- a/var/Typecho/Response.php
+++ b/var/Typecho/Response.php
@@ -25,7 +25,7 @@ class Typecho_Response
* @access private
* @var array
*/
- private static $_httpCode = array(
+ private static $_httpCode = [
100 => 'Continue',
101 => 'Switching Protocols',
200 => 'OK',
@@ -66,7 +66,7 @@ class Typecho_Response
503 => 'Service Unavailable',
504 => 'Gateway Timeout',
505 => 'HTTP Version Not Supported'
- );
+ ];
/**
* 字符编码
@@ -85,14 +85,14 @@ class Typecho_Response
* @access private
* @var Typecho_Response
*/
- private static $_instance = null;
+ private static $_instance;
/**
* 结束前回调函数
*
* @var array
*/
- private static $_callbacks = array();
+ private static $_callbacks = [];
/**
* 获取单例句柄
@@ -100,9 +100,9 @@ class Typecho_Response
* @access public
* @return Typecho_Response
*/
- public static function getInstance()
+ public static function getInstance(): Typecho_Response
{
- if (null === self::$_instance) {
+ if (!isset(self::$_instance)) {
self::$_instance = new Typecho_Response();
}
@@ -116,7 +116,7 @@ class Typecho_Response
* @param mixed $message 格式化数据
* @return string
*/
- private function _parseXml($message)
+ private function _parseXml($message): string
{
/** 对于数组型则继续递归 */
if (is_array($message)) {
@@ -164,10 +164,10 @@ class Typecho_Response
* 设置默认回执编码
*
* @access public
- * @param string $charset 字符集
+ * @param string|null $charset 字符集
* @return void
*/
- public function setCharset($charset = null)
+ public function setCharset(string $charset = null)
{
$this->_charset = empty($charset) ? self::CHARSET : $charset;
}
@@ -178,7 +178,7 @@ class Typecho_Response
* @access public
* @return string
*/
- public function getCharset()
+ public function getCharset(): string
{
if (empty($this->_charset)) {
$this->setCharset();
@@ -194,7 +194,7 @@ class Typecho_Response
* @param string $contentType 文档类型
* @return void
*/
- public function setContentType($contentType = 'text/html')
+ public function setContentType(string $contentType = 'text/html')
{
header('Content-Type: ' . $contentType . '; charset=' . $this->getCharset(), true);
}
@@ -207,7 +207,7 @@ class Typecho_Response
* @param string $value 对应值
* @return void
*/
- public function setHeader($name, $value)
+ public function setHeader(string $name, string $value)
{
header($name . ': ' . $value, true);
}
@@ -219,10 +219,11 @@ class Typecho_Response
* @param integer $code http代码
* @return void
*/
- public static function setStatus($code)
+ public static function setStatus(int $code)
{
if (isset(self::$_httpCode[$code])) {
- header((isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.1') . ' ' . $code . ' ' . self::$_httpCode[$code], true, $code);
+ header(($_SERVER['SERVER_PROTOCOL'] ?? 'HTTP/1.1')
+ . ' ' . $code . ' ' . self::$_httpCode[$code], true, $code);
}
}
@@ -233,7 +234,7 @@ class Typecho_Response
* @param string $message 消息体
* @return void
*/
- public function throwXml($message)
+ public function throwXml(string $message)
{
/** 设置http头信息 */
$this->setContentType('text/xml');
@@ -276,33 +277,33 @@ class Typecho_Response
* @param boolean $isPermanently 是否为永久重定向
* @return void
*/
- public function redirect($location, $isPermanently = false)
+ public function redirect(string $location, bool $isPermanently = false)
{
/** Typecho_Common */
$location = Typecho_Common::safeUrl($location);
+ self::callback();
+
if ($isPermanently) {
- self::callback();
header('Location: ' . $location, false, 301);
- exit;
} else {
- self::callback();
header('Location: ' . $location, false, 302);
- exit;
}
+
+ exit;
}
/**
* 返回来路
*
* @access public
- * @param string $suffix 附加地址
- * @param string $default 默认来路
+ * @param string|null $suffix 附加地址
+ * @param string|null $default 默认来路
*/
- public function goBack($suffix = NULL, $default = NULL)
+ public function goBack(string $suffix = null, string $default = null)
{
//获取来源
- $referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
+ $referer = $_SERVER['HTTP_REFERER'] ?? '';
//判断来源
if (!empty($referer)) {
@@ -316,7 +317,7 @@ class Typecho_Response
}
if (isset($myParts['query'])) {
- $args = array();
+ $args = [];
if (isset($parts['query'])) {
parse_str($parts['query'], $args);
}
diff --git a/var/Typecho/Validate.php b/var/Typecho/Validate.php
index d32ce732..b8e2ec3c 100644
--- a/var/Typecho/Validate.php
+++ b/var/Typecho/Validate.php
@@ -62,16 +62,16 @@ class Typecho_Validate
* @param string $key 数值键值
* @param string $rule 规则名称
* @param string $message 错误字符串
- * @return Typecho_Validation
+ * @return $this
*/
- public function addRule($key, $rule, $message)
+ public function addRule(string $key, string $rule, string $message): Typecho_Validate
{
if (func_num_args() <= 3) {
- $this->_rules[$key][] = array($rule, $message);
+ $this->_rules[$key][] = [$rule, $message];
} else {
$params = func_get_args();
$params = array_splice($params, 3);
- $this->_rules[$key][] = array_merge(array($rule, $message), $params);
+ $this->_rules[$key][] = array_merge([$rule, $message], $params);
}
return $this;
@@ -94,13 +94,12 @@ class Typecho_Validate
*
* @access public
* @param array $data 需要验证的数据
- * @param array $rules 验证数据遵循的规则
+ * @param array|null $rules 验证数据遵循的规则
* @return array
- * @throws Typecho_Validate_Exception
*/
- public function run(array $data, $rules = NULL)
+ public function run(array $data, array $rules = null): array
{
- $result = array();
+ $result = [];
$this->_data = $data;
$rules = empty($rules) ? $this->_rules : $rules;
@@ -108,7 +107,7 @@ class Typecho_Validate
foreach ($rules as $key => $rules) {
$this->_key = $key;
$data[$key] = (is_array($data[$key]) ? 0 == count($data[$key])
- : 0 == strlen($data[$key])) ? NULL : $data[$key];
+ : 0 == strlen($data[$key])) ? null : $data[$key];
foreach ($rules as $params) {
$method = $params[0];
@@ -121,7 +120,7 @@ class Typecho_Validate
$params[1] = $data[$key];
$params = array_slice($params, 1);
- if (!call_user_func_array(is_array($method) ? $method : array($this, $method), $params)) {
+ if (!call_user_func_array(is_array($method) ? $method : [$this, $method], $params)) {
$result[$key] = $message;
break;
}
@@ -144,7 +143,7 @@ class Typecho_Validate
* @param integer $length 最小长度
* @return boolean
*/
- public static function minLength($str, $length)
+ public static function minLength(string $str, int $length): bool
{
return (Typecho_Common::strLen($str) >= $length);
}
@@ -153,11 +152,11 @@ class Typecho_Validate
* 验证输入是否一致
*
* @access public
- * @param string $str 待处理的字符串
+ * @param string|null $str 待处理的字符串
* @param string $key 需要一致性检查的键值
* @return boolean
*/
- public function confirm($str, $key)
+ public function confirm(?string $str, string $key): bool
{
return !empty($this->_data[$key]) ? ($str == $this->_data[$key]) : empty($str);
}
@@ -166,10 +165,10 @@ class Typecho_Validate
* 是否为空
*
* @access public
- * @param string $str 待处理的字符串
+ * @param string|null $str 待处理的字符串
* @return boolean
*/
- public function required($str)
+ public function required(?string $str): bool
{
return !empty($this->_data[$this->_key]);
}
@@ -180,9 +179,9 @@ class Typecho_Validate
* @access public
* @param string $str 待处理的字符串
* @param array $params 枚举值
- * @return unknown
+ * @return bool
*/
- public static function enum($str, array $params)
+ public static function enum(string $str, array $params): bool
{
$keys = array_flip($params);
return isset($keys[$str]);
@@ -191,11 +190,11 @@ class Typecho_Validate
/**
* Max Length
*
- * @param $str
- * @param $length
+ * @param string $str
+ * @param int $length
* @return bool
*/
- public static function maxLength($str, $length)
+ public static function maxLength(string $str, int $length): bool
{
return (Typecho_Common::strLen($str) < $length);
}
@@ -204,10 +203,10 @@ class Typecho_Validate
* Valid Email
*
* @access public
- * @param string
+ * @param string $str
* @return boolean
*/
- public static function email($str)
+ public static function email(string $str): bool
{
return preg_match("/^[_a-z0-9-\.+]+@([-a-z0-9]+\.)+[a-z]{2,}$/i", $str);
}
@@ -219,7 +218,7 @@ class Typecho_Validate
* @param string $str
* @return boolean
*/
- public static function url($str)
+ public static function url(string $str): bool
{
$parts = @parse_url($str);
if (!$parts) {
@@ -227,8 +226,8 @@ class Typecho_Validate
}
return isset($parts['scheme']) &&
- in_array($parts['scheme'], array('http', 'https', 'ftp')) &&
- !preg_match('/(\(|\)|\\\|"|<|>|[\x00-\x08]|[\x0b-\x0c]|[\x0e-\x19])/', $str);
+ in_array($parts['scheme'], ['http', 'https', 'ftp']) &&
+ !preg_match('/(\(|\)|\\\|"|<|>|[\x00-\x08]|[\x0b-\x0c]|[\x0e-\x19])/', $str);
}
/**
@@ -238,7 +237,7 @@ class Typecho_Validate
* @param string
* @return boolean
*/
- public static function alpha($str)
+ public static function alpha(string $str): bool
{
return preg_match("/^([a-z])+$/i", $str) ? true : false;
}
@@ -250,7 +249,7 @@ class Typecho_Validate
* @param string
* @return boolean
*/
- public static function alphaNumeric($str)
+ public static function alphaNumeric(string $str): bool
{
return preg_match("/^([a-z0-9])+$/i", $str);
}
@@ -262,7 +261,7 @@ class Typecho_Validate
* @param string
* @return boolean
*/
- public static function alphaDash($str)
+ public static function alphaDash(string $str): bool
{
return preg_match("/^([_a-z0-9-])+$/i", $str) ? true : false;
}
@@ -274,7 +273,7 @@ class Typecho_Validate
* @param string $str
* @return boolean
*/
- public static function xssCheck($str)
+ public static function xssCheck(string $str): bool
{
$search = 'abcdefghijklmnopqrstuvwxyz';
$search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
@@ -298,10 +297,10 @@ class Typecho_Validate
* Numeric
*
* @access public
- * @param integer
+ * @param mixed $str
* @return boolean
*/
- public static function isFloat($str)
+ public static function isFloat($str): bool
{
return preg_match("/^[0-9\.]+$/", $str);
}
@@ -310,10 +309,10 @@ class Typecho_Validate
* Is Numeric
*
* @access public
- * @param string
+ * @param mixed $str
* @return boolean
*/
- public static function isInteger($str)
+ public static function isInteger($str): bool
{
return is_numeric($str);
}
diff --git a/var/Widget/Contents/Attachment/Edit.php b/var/Widget/Contents/Attachment/Edit.php
index e3e09bce..2e7a4fd7 100644
--- a/var/Widget/Contents/Attachment/Edit.php
+++ b/var/Widget/Contents/Attachment/Edit.php
@@ -117,7 +117,7 @@ class Widget_Contents_Attachment_Edit extends Widget_Contents_Post_Edit implemen
Typecho_Widget_Helper_Form::POST_METHOD);
/** 文件名称 */
- $name = new Typecho_Widget_Helper_Form_Element_Text('name', NULL, $this->title, _t('标题 *'));
+ $name = new Typecho_Widget_Helper_Form_Element_Text('name', NULL, $this->title, _t('标题') . ' *');
$form->addInput($name);
/** 文件缩略名 */
diff --git a/var/Widget/Init.php b/var/Widget/Init.php
index bd377e3c..f8163c81 100644
--- a/var/Widget/Init.php
+++ b/var/Widget/Init.php
@@ -27,7 +27,7 @@ class Widget_Init extends Typecho_Widget
$options = $this->widget('Widget_Options');
/** 检查安装状态 */
- if (!$options->installed) {
+ if (!defined('__TYPECHO_INSTALL__') && !$options->installed) {
$options->update(array('value' => 1), Typecho_Db::get()->sql()->where('name = ?', 'installed'));
}
@@ -74,7 +74,7 @@ class Widget_Init extends Typecho_Widget
Typecho_Date::setTimezoneOffset($options->timezone);
/** 开始会话, 减小负载只针对后台打开session支持 */
- if ($this->widget('Widget_User')->hasLogin()) {
+ if (!defined('__TYPECHO_INSTALL__') && $this->widget('Widget_User')->hasLogin()) {
@session_start();
}
diff --git a/var/Widget/Metas/Category/Edit.php b/var/Widget/Metas/Category/Edit.php
index 6ff55b3c..cb096dc5 100644
--- a/var/Widget/Metas/Category/Edit.php
+++ b/var/Widget/Metas/Category/Edit.php
@@ -128,7 +128,7 @@ class Widget_Metas_Category_Edit extends Widget_Abstract_Metas implements Widget
Typecho_Widget_Helper_Form::POST_METHOD);
/** 分类名称 */
- $name = new Typecho_Widget_Helper_Form_Element_Text('name', NULL, NULL, _t('分类名称 *'));
+ $name = new Typecho_Widget_Helper_Form_Element_Text('name', NULL, NULL, _t('分类名称') . ' *');
$form->addInput($name);
/** 分类缩略名 */
diff --git a/var/Widget/Metas/Tag/Edit.php b/var/Widget/Metas/Tag/Edit.php
index ec0f9081..6bc64d78 100644
--- a/var/Widget/Metas/Tag/Edit.php
+++ b/var/Widget/Metas/Tag/Edit.php
@@ -130,7 +130,7 @@ class Widget_Metas_Tag_Edit extends Widget_Abstract_Metas implements Widget_Inte
/** 标签名称 */
$name = new Typecho_Widget_Helper_Form_Element_Text('name', NULL, NULL,
- _t('标签名称 *'), _t('这是标签在站点中显示的名称.可以使用中文,如 "地球".'));
+ _t('标签名称') . ' *', _t('这是标签在站点中显示的名称.可以使用中文,如 "地球".'));
$form->addInput($name);
/** 标签缩略名 */
diff --git a/var/Widget/Options.php b/var/Widget/Options.php
index 7daf5f98..e61138de 100644
--- a/var/Widget/Options.php
+++ b/var/Widget/Options.php
@@ -52,12 +52,17 @@ class Widget_Options extends Typecho_Widget
* @param mixed $response response对象
* @param mixed $params 参数列表
*/
- public function __construct($request, $response, $params = NULL)
+ public function __construct($request, $response, $params = null)
{
- parent::__construct($request, $response, $params);
+ parent::__construct($request, $response, null);
- /** 初始化数据库 */
- $this->db = Typecho_Db::get();
+ if (!empty($params)) {
+ // 使用参数初始化而不使用数据库
+ $this->row = $params;
+ } else {
+ /** 初始化数据库 */
+ $this->db = Typecho_Db::get();
+ }
}
/**
@@ -335,7 +340,7 @@ class Widget_Options extends Typecho_Widget
{
$attachmentTypesResult = array();
- if (NULL != $this->attachmentTypes) {
+ if (null != $this->attachmentTypes) {
$attachmentTypes = str_replace(
array('@image@', '@media@', '@doc@'),
array('gif,jpg,jpeg,png,tiff,bmp', 'mp3,mp4,mov,wmv,wma,rmvb,rm,avi,flv,ogg,oga,ogv',
@@ -355,12 +360,20 @@ class Widget_Options extends Typecho_Widget
*/
public function execute()
{
- $this->db->fetchAll($this->db->select()->from('table.options')
- ->where('user = 0'), array($this, 'push'));
-
+ if (!empty($this->db)) {
+ $values = $this->db->fetchAll($this->db->select()->from('table.options')
+ ->where('user = 0'), array($this, 'push'));
+
+ // finish install
+ if (empty($values)) {
+ $this->response->redirect(defined('__TYPECHO_ADMIN__')
+ ? '../install.php?step=3' : 'install.php?step=3');
+ }
+ }
+
/** 支持皮肤变量重载 */
if (!empty($this->row['theme:' . $this->row['theme']])) {
- $themeOptions = NULL;
+ $themeOptions = null;
/** 解析变量 */
if ($themeOptions = unserialize($this->row['theme:' . $this->row['theme']])) {
@@ -387,7 +400,7 @@ class Widget_Options extends Typecho_Widget
}
$this->originalSiteUrl = $this->siteUrl;
- $this->siteUrl = Typecho_Common::url(NULL, $this->siteUrl);
+ $this->siteUrl = Typecho_Common::url(null, $this->siteUrl);
$this->plugins = unserialize($this->plugins);
/** 动态判断皮肤目录 */
@@ -400,7 +413,7 @@ class Widget_Options extends Typecho_Widget
/** 自动初始化路由表 */
$this->routingTable = unserialize($this->routingTable);
- if (!isset($this->routingTable[0])) {
+ if (!empty($this->db) && !isset($this->routingTable[0])) {
/** 解析路由并缓存 */
$parser = new Typecho_Router_Parser($this->routingTable);
$parsedRoutingTable = $parser->parse();
@@ -431,7 +444,7 @@ class Widget_Options extends Typecho_Widget
* @param string $path 子路径
* @return void
*/
- public function siteUrl($path = NULL)
+ public function siteUrl($path = null)
{
echo Typecho_Common::url($path, $this->siteUrl);
}
@@ -443,7 +456,7 @@ class Widget_Options extends Typecho_Widget
* @param string $path 子路径
* @return void
*/
- public function index($path = NULL)
+ public function index($path = null)
{
echo Typecho_Common::url($path, $this->index);
}
@@ -456,7 +469,7 @@ class Widget_Options extends Typecho_Widget
* @param string $theme 模版名称
* @return string
*/
- public function themeUrl($path = NULL, $theme = NULL)
+ public function themeUrl($path = null, $theme = null)
{
if (empty($theme)) {
echo Typecho_Common::url($path, $this->themeUrl);
@@ -475,7 +488,7 @@ class Widget_Options extends Typecho_Widget
* @param string $path 子路径
* @return void
*/
- public function pluginUrl($path = NULL)
+ public function pluginUrl($path = null)
{
echo Typecho_Common::url($path, $this->pluginUrl);
}
@@ -498,7 +511,7 @@ class Widget_Options extends Typecho_Widget
* @param $plugin
* @return string
*/
- public function pluginDir($plugin = NULL)
+ public function pluginDir($plugin = null)
{
return __TYPECHO_ROOT_DIR__ . '/' . __TYPECHO_PLUGIN_DIR__;
}
@@ -510,7 +523,7 @@ class Widget_Options extends Typecho_Widget
* @param string $path 子路径
* @return void
*/
- public function adminUrl($path = NULL)
+ public function adminUrl($path = null)
{
echo Typecho_Common::url($path, $this->adminUrl);
}
@@ -522,7 +535,7 @@ class Widget_Options extends Typecho_Widget
* @param string $file
* @return void|string
*/
- public function adminStaticUrl($type, $file = NULL)
+ public function adminStaticUrl($type, $file = null)
{
$url = Typecho_Common::url($type, $this->adminUrl);
diff --git a/var/Widget/Options/Permalink.php b/var/Widget/Options/Permalink.php
index 800617dc..64359181 100644
--- a/var/Widget/Options/Permalink.php
+++ b/var/Widget/Options/Permalink.php
@@ -122,7 +122,7 @@ class Widget_Options_Permalink extends Widget_Abstract_Options implements Widget
$hasWrote = false;
if (!file_exists(__TYPECHO_ROOT_DIR__ . '/.htaccess')
- && !Typecho_Common::isAppEngine()) {
+ && strpos(php_sapi_name(), 'apache') !== false) {
if (is_writeable(__TYPECHO_ROOT_DIR__)) {
$parsed = parse_url($this->options->siteUrl);
$basePath = empty($parsed['path']) ? '/' : $parsed['path'];
diff --git a/var/Widget/Security.php b/var/Widget/Security.php
index 03e2b9b4..44c2569c 100644
--- a/var/Widget/Security.php
+++ b/var/Widget/Security.php
@@ -95,9 +95,10 @@ class Widget_Security extends Typecho_Widget
* 生成带token的路径
*
* @param $path
+ * @param string|null $url
* @return string
*/
- public function getTokenUrl($path)
+ public function getTokenUrl($path, ?string $url = null)
{
$parts = parse_url($path);
$params = array();
@@ -106,7 +107,7 @@ class Widget_Security extends Typecho_Widget
parse_str($parts['query'], $params);
}
- $params['_'] = $this->getToken($this->request->getRequestUrl());
+ $params['_'] = $this->getToken($url ?: $this->request->getRequestUrl());
$parts['query'] = http_build_query($params);
return Typecho_Common::buildUrl($parts);
diff --git a/var/Widget/Themes/Edit.php b/var/Widget/Themes/Edit.php
index 17c11644..abd6a13d 100644
--- a/var/Widget/Themes/Edit.php
+++ b/var/Widget/Themes/Edit.php
@@ -84,7 +84,7 @@ class Widget_Themes_Edit extends Widget_Abstract_Options implements Widget_Inter
{
$path = $this->options->themeFile($theme, $file);
- if (file_exists($path) && is_writeable($path) && !Typecho_Common::isAppEngine()
+ if (file_exists($path) && is_writeable($path)
&& (!defined('__TYPECHO_THEME_WRITEABLE__') || __TYPECHO_THEME_WRITEABLE__)) {
$handle = fopen($path, 'wb');
if ($handle && fwrite($handle, $this->request->content)) {
diff --git a/var/Widget/Themes/Files.php b/var/Widget/Themes/Files.php
index f7b1a15c..1782b72f 100644
--- a/var/Widget/Themes/Files.php
+++ b/var/Widget/Themes/Files.php
@@ -112,7 +112,7 @@ class Widget_Themes_Files extends Typecho_Widget
public function currentIsWriteable()
{
return is_writeable($this->widget('Widget_Options')
- ->themeFile($this->_currentTheme, $this->_currentFile)) && !Typecho_Common::isAppEngine()
+ ->themeFile($this->_currentTheme, $this->_currentFile))
&& (!defined('__TYPECHO_THEME_WRITEABLE__') || __TYPECHO_THEME_WRITEABLE__);
}
diff --git a/var/Widget/Upload.php b/var/Widget/Upload.php
index 2c3dcb83..970d9945 100644
--- a/var/Widget/Upload.php
+++ b/var/Widget/Upload.php
@@ -94,7 +94,7 @@ class Widget_Upload extends Widget_Abstract_Contents implements Widget_Interface
$ext = self::getSafeName($file['name']);
- if (!self::checkFileType($ext) || Typecho_Common::isAppEngine()) {
+ if (!self::checkFileType($ext)) {
return false;
}
@@ -172,7 +172,7 @@ class Widget_Upload extends Widget_Abstract_Contents implements Widget_Interface
$ext = self::getSafeName($file['name']);
- if ($content['attachment']->type != $ext || Typecho_Common::isAppEngine()) {
+ if ($content['attachment']->type != $ext) {
return false;
}
@@ -243,8 +243,7 @@ class Widget_Upload extends Widget_Abstract_Contents implements Widget_Interface
return $result;
}
- return !Typecho_Common::isAppEngine()
- && @unlink(__TYPECHO_ROOT_DIR__ . '/' . $content['attachment']->path);
+ return @unlink(__TYPECHO_ROOT_DIR__ . '/' . $content['attachment']->path);
}
/**
diff --git a/var/Widget/User.php b/var/Widget/User.php
index 7122d894..b856e263 100644
--- a/var/Widget/User.php
+++ b/var/Widget/User.php
@@ -286,8 +286,8 @@ class Widget_User extends Typecho_Widget
} else {
//防止循环重定向
$this->response->redirect(defined('__TYPECHO_ADMIN__') ? $this->options->loginUrl .
- (0 === strpos($this->request->getReferer(), $this->options->loginUrl) ? '' :
- '?referer=' . urlencode($this->request->makeUriByRequest())) : $this->options->siteUrl, false);
+ (0 === strpos($this->request->getReferer(), $this->options->loginUrl) ? '' :
+ '?referer=' . urlencode($this->request->makeUriByRequest())) : $this->options->siteUrl, false);
}
}
diff --git a/var/Widget/Users/Edit.php b/var/Widget/Users/Edit.php
index 3f8ea864..21dc934c 100644
--- a/var/Widget/Users/Edit.php
+++ b/var/Widget/Users/Edit.php
@@ -95,12 +95,12 @@ class Widget_Users_Edit extends Widget_Abstract_Users implements Widget_Interfac
Typecho_Widget_Helper_Form::POST_METHOD);
/** 用户名称 */
- $name = new Typecho_Widget_Helper_Form_Element_Text('name', NULL, NULL, _t('用户名 *'), _t('此用户名将作为用户登录时所用的名称.')
+ $name = new Typecho_Widget_Helper_Form_Element_Text('name', NULL, NULL, _t('用户名') . ' *', _t('此用户名将作为用户登录时所用的名称.')
. ' ' . _t('请不要与系统中现有的用户名重复.'));
$form->addInput($name);
/** 电子邮箱地址 */
- $mail = new Typecho_Widget_Helper_Form_Element_Text('mail', NULL, NULL, _t('电子邮箱地址 *'), _t('电子邮箱地址将作为此用户的主要联系方式.')
+ $mail = new Typecho_Widget_Helper_Form_Element_Text('mail', NULL, NULL, _t('邮件地址') . ' *', _t('电子邮箱地址将作为此用户的主要联系方式.')
. ' ' . _t('请不要与系统中现有的电子邮箱地址重复.'));
$form->addInput($mail);
@@ -180,8 +180,8 @@ class Widget_Users_Edit extends Widget_Abstract_Users implements Widget_Interfac
$name->addRule('required', _t('必须填写用户名称'));
$name->addRule('xssCheck', _t('请不要在用户名中使用特殊字符'));
$name->addRule(array($this, 'nameExists'), _t('用户名已经存在'));
- $password->label(_t('用户密码 *'));
- $confirm->label(_t('用户密码确认 *'));
+ $password->label(_t('用户密码') . ' *');
+ $confirm->label(_t('用户密码确认') . ' *');
$password->addRule('required', _t('必须填写密码'));
}
diff --git a/var/Widget/Users/Profile.php b/var/Widget/Users/Profile.php
index c558cb4d..a579b270 100644
--- a/var/Widget/Users/Profile.php
+++ b/var/Widget/Users/Profile.php
@@ -55,7 +55,7 @@ class Widget_Users_Profile extends Widget_Users_Edit implements Widget_Interface
$form->addInput($url);
/** 电子邮箱地址 */
- $mail = new Typecho_Widget_Helper_Form_Element_Text('mail', NULL, NULL, _t('电子邮箱地址 *'), _t('电子邮箱地址将作为此用户的主要联系方式.')
+ $mail = new Typecho_Widget_Helper_Form_Element_Text('mail', NULL, NULL, _t('邮件地址') . ' *', _t('电子邮箱地址将作为此用户的主要联系方式.')
. ' ' . _t('请不要与系统中现有的电子邮箱地址重复.'));
$form->addInput($mail);