From 16099b2c35c7e2e50fc5b7a5ad094cc36df03c04 Mon Sep 17 00:00:00 2001 From: yanyongyu Date: Wed, 24 Jun 2020 21:56:49 +0800 Subject: [PATCH] clean up files --- .editorconfig | 37 + .gitignore | 1 - .style.yapf | 2 + docs/.vuepress/config.js | 80 - docs/.vuepress/override.styl | 1 - docs/.vuepress/public/browserconfig.xml | 9 - .../public/icons/android-chrome-192x192.png | Bin 7015 -> 0 bytes .../public/icons/android-chrome-384x384.png | Bin 17852 -> 0 bytes .../public/icons/apple-touch-icon.png | Bin 2553 -> 0 bytes docs/.vuepress/public/icons/favicon-16x16.png | Bin 520 -> 0 bytes docs/.vuepress/public/icons/favicon-32x32.png | Bin 886 -> 0 bytes docs/.vuepress/public/icons/favicon.ico | Bin 15086 -> 0 bytes .../.vuepress/public/icons/mstile-150x150.png | Bin 2748 -> 0 bytes .../public/icons/safari-pinned-tab.svg | 25 - docs/.vuepress/public/logo.png | Bin 9052 -> 0 bytes docs/.vuepress/public/manifest.json | 19 - docs/.vuepress/style.styl | 3 - docs/README.md | 14 - docs/advanced/README.md | 3 - docs/advanced/command-argument.md | 110 - docs/advanced/command-group.md | 1 - docs/advanced/command-session.md | 9 - docs/advanced/configuration.md | 1 - docs/advanced/database.md | 1 - docs/advanced/decorator.md | 1 - docs/advanced/deployment.md | 80 - docs/advanced/larger-application.md | 7 - docs/advanced/logging.md | 23 - docs/advanced/message.md | 5 - docs/advanced/permission.md | 1 - docs/advanced/scheduler.md | 161 - docs/advanced/server-app.md | 39 - docs/api.md | 3219 ------- docs/assets/diagram.png | Bin 30630 -> 0 bytes docs/changelog.md | 233 - docs/glossary.md | 140 - docs/guide/README.md | 42 - docs/guide/assets/echo_and_say.png | Bin 19518 -> 0 bytes docs/guide/basic-configuration.md | 133 - docs/guide/code/awesome-bot-1/bot.py | 8 - docs/guide/code/awesome-bot-1/config.py | 7 - .../guide/code/awesome-bot-1/requirements.txt | 1 - .../awesome-bot-2/awesome/plugins/weather.py | 43 - docs/guide/code/awesome-bot-2/bot.py | 13 - docs/guide/code/awesome-bot-2/config.py | 7 - .../guide/code/awesome-bot-2/requirements.txt | 1 - .../awesome/plugins/weather/__init__.py | 50 - .../awesome/plugins/weather/data_source.py | 2 - docs/guide/code/awesome-bot-3/bot.py | 13 - docs/guide/code/awesome-bot-3/config.py | 8 - .../guide/code/awesome-bot-3/requirements.txt | 2 - .../awesome-bot-4/awesome/plugins/tuling.py | 86 - .../awesome/plugins/weather/__init__.py | 50 - .../awesome/plugins/weather/data_source.py | 2 - docs/guide/code/awesome-bot-4/bot.py | 13 - docs/guide/code/awesome-bot-4/config.py | 10 - .../guide/code/awesome-bot-4/requirements.txt | 3 - .../awesome/plugins/group_admin.py | 21 - .../awesome-bot-5/awesome/plugins/tuling.py | 86 - .../awesome/plugins/weather/__init__.py | 50 - .../awesome/plugins/weather/data_source.py | 2 - docs/guide/code/awesome-bot-5/bot.py | 13 - docs/guide/code/awesome-bot-5/config.py | 10 - .../guide/code/awesome-bot-5/requirements.txt | 3 - .../awesome/plugins/group_admin.py | 21 - .../awesome/plugins/scheduler.py | 16 - .../awesome-bot-6/awesome/plugins/tuling.py | 86 - .../awesome/plugins/weather/__init__.py | 50 - .../awesome/plugins/weather/data_source.py | 2 - docs/guide/code/awesome-bot-6/bot.py | 13 - docs/guide/code/awesome-bot-6/config.py | 10 - .../guide/code/awesome-bot-6/requirements.txt | 4 - .../awesome/plugins/group_admin.py | 21 - .../awesome/plugins/scheduler.py | 16 - .../awesome-bot-7/awesome/plugins/tuling.py | 93 - .../awesome-bot-7/awesome/plugins/usage.py | 20 - .../awesome/plugins/weather/__init__.py | 57 - .../awesome/plugins/weather/data_source.py | 2 - docs/guide/code/awesome-bot-7/bot.py | 13 - docs/guide/code/awesome-bot-7/config.py | 10 - .../guide/code/awesome-bot-7/requirements.txt | 4 - docs/guide/command.md | 203 - docs/guide/cqhttp.md | 72 - docs/guide/getting-started.md | 104 - docs/guide/installation.md | 41 - docs/guide/nl-processor.md | 266 - docs/guide/notice-and-request.md | 58 - docs/guide/scheduler.md | 50 - docs/guide/tuling.md | 254 - docs/guide/usage.md | 76 - docs/guide/whats-happened.md | 88 - docs/guide/whats-next.md | 5 - nonebot/matcher.py | 57 +- nonebot_test/__init__.py | 4 + package.json | 9 - poetry.lock | 115 + pyproject.toml | 42 + setup.py | 36 - yarn.lock | 7600 ----------------- 99 files changed, 229 insertions(+), 14193 deletions(-) create mode 100644 .editorconfig create mode 100644 .style.yapf delete mode 100644 docs/.vuepress/config.js delete mode 100644 docs/.vuepress/override.styl delete mode 100644 docs/.vuepress/public/browserconfig.xml delete mode 100644 docs/.vuepress/public/icons/android-chrome-192x192.png delete mode 100644 docs/.vuepress/public/icons/android-chrome-384x384.png delete mode 100644 docs/.vuepress/public/icons/apple-touch-icon.png delete mode 100644 docs/.vuepress/public/icons/favicon-16x16.png delete mode 100644 docs/.vuepress/public/icons/favicon-32x32.png delete mode 100644 docs/.vuepress/public/icons/favicon.ico delete mode 100644 docs/.vuepress/public/icons/mstile-150x150.png delete mode 100644 docs/.vuepress/public/icons/safari-pinned-tab.svg delete mode 100644 docs/.vuepress/public/logo.png delete mode 100644 docs/.vuepress/public/manifest.json delete mode 100644 docs/.vuepress/style.styl delete mode 100644 docs/README.md delete mode 100644 docs/advanced/README.md delete mode 100644 docs/advanced/command-argument.md delete mode 100644 docs/advanced/command-group.md delete mode 100644 docs/advanced/command-session.md delete mode 100644 docs/advanced/configuration.md delete mode 100644 docs/advanced/database.md delete mode 100644 docs/advanced/decorator.md delete mode 100644 docs/advanced/deployment.md delete mode 100644 docs/advanced/larger-application.md delete mode 100644 docs/advanced/logging.md delete mode 100644 docs/advanced/message.md delete mode 100644 docs/advanced/permission.md delete mode 100644 docs/advanced/scheduler.md delete mode 100644 docs/advanced/server-app.md delete mode 100644 docs/api.md delete mode 100644 docs/assets/diagram.png delete mode 100644 docs/changelog.md delete mode 100644 docs/glossary.md delete mode 100644 docs/guide/README.md delete mode 100644 docs/guide/assets/echo_and_say.png delete mode 100644 docs/guide/basic-configuration.md delete mode 100644 docs/guide/code/awesome-bot-1/bot.py delete mode 100644 docs/guide/code/awesome-bot-1/config.py delete mode 100644 docs/guide/code/awesome-bot-1/requirements.txt delete mode 100644 docs/guide/code/awesome-bot-2/awesome/plugins/weather.py delete mode 100644 docs/guide/code/awesome-bot-2/bot.py delete mode 100644 docs/guide/code/awesome-bot-2/config.py delete mode 100644 docs/guide/code/awesome-bot-2/requirements.txt delete mode 100644 docs/guide/code/awesome-bot-3/awesome/plugins/weather/__init__.py delete mode 100644 docs/guide/code/awesome-bot-3/awesome/plugins/weather/data_source.py delete mode 100644 docs/guide/code/awesome-bot-3/bot.py delete mode 100644 docs/guide/code/awesome-bot-3/config.py delete mode 100644 docs/guide/code/awesome-bot-3/requirements.txt delete mode 100644 docs/guide/code/awesome-bot-4/awesome/plugins/tuling.py delete mode 100644 docs/guide/code/awesome-bot-4/awesome/plugins/weather/__init__.py delete mode 100644 docs/guide/code/awesome-bot-4/awesome/plugins/weather/data_source.py delete mode 100644 docs/guide/code/awesome-bot-4/bot.py delete mode 100644 docs/guide/code/awesome-bot-4/config.py delete mode 100644 docs/guide/code/awesome-bot-4/requirements.txt delete mode 100644 docs/guide/code/awesome-bot-5/awesome/plugins/group_admin.py delete mode 100644 docs/guide/code/awesome-bot-5/awesome/plugins/tuling.py delete mode 100644 docs/guide/code/awesome-bot-5/awesome/plugins/weather/__init__.py delete mode 100644 docs/guide/code/awesome-bot-5/awesome/plugins/weather/data_source.py delete mode 100644 docs/guide/code/awesome-bot-5/bot.py delete mode 100644 docs/guide/code/awesome-bot-5/config.py delete mode 100644 docs/guide/code/awesome-bot-5/requirements.txt delete mode 100644 docs/guide/code/awesome-bot-6/awesome/plugins/group_admin.py delete mode 100644 docs/guide/code/awesome-bot-6/awesome/plugins/scheduler.py delete mode 100644 docs/guide/code/awesome-bot-6/awesome/plugins/tuling.py delete mode 100644 docs/guide/code/awesome-bot-6/awesome/plugins/weather/__init__.py delete mode 100644 docs/guide/code/awesome-bot-6/awesome/plugins/weather/data_source.py delete mode 100644 docs/guide/code/awesome-bot-6/bot.py delete mode 100644 docs/guide/code/awesome-bot-6/config.py delete mode 100644 docs/guide/code/awesome-bot-6/requirements.txt delete mode 100644 docs/guide/code/awesome-bot-7/awesome/plugins/group_admin.py delete mode 100644 docs/guide/code/awesome-bot-7/awesome/plugins/scheduler.py delete mode 100644 docs/guide/code/awesome-bot-7/awesome/plugins/tuling.py delete mode 100644 docs/guide/code/awesome-bot-7/awesome/plugins/usage.py delete mode 100644 docs/guide/code/awesome-bot-7/awesome/plugins/weather/__init__.py delete mode 100644 docs/guide/code/awesome-bot-7/awesome/plugins/weather/data_source.py delete mode 100644 docs/guide/code/awesome-bot-7/bot.py delete mode 100644 docs/guide/code/awesome-bot-7/config.py delete mode 100644 docs/guide/code/awesome-bot-7/requirements.txt delete mode 100644 docs/guide/command.md delete mode 100644 docs/guide/cqhttp.md delete mode 100644 docs/guide/getting-started.md delete mode 100644 docs/guide/installation.md delete mode 100644 docs/guide/nl-processor.md delete mode 100644 docs/guide/notice-and-request.md delete mode 100644 docs/guide/scheduler.md delete mode 100644 docs/guide/tuling.md delete mode 100644 docs/guide/usage.md delete mode 100644 docs/guide/whats-happened.md delete mode 100644 docs/guide/whats-next.md create mode 100644 nonebot_test/__init__.py delete mode 100644 package.json create mode 100644 poetry.lock create mode 100644 pyproject.toml delete mode 100644 setup.py delete mode 100644 yarn.lock diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..bdeb8382 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,37 @@ +# http://editorconfig.org +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +# The JSON files contain newlines inconsistently +[*.json] +insert_final_newline = ignore + +# Minified JavaScript files shouldn't be changed +[**.min.js] +indent_style = ignore +insert_final_newline = ignore + +# Makefiles always use tabs for indentation +[Makefile] +indent_style = tab + +# Batch files use tabs for indentation +[*.bat] +indent_style = tab + +[*.md] +trim_trailing_whitespace = false + +# Matches the exact files either package.json or .travis.yml +[{package.json,.travis.yml}] +indent_size = 2 + +[*.py] +indent_size = 4 diff --git a/.gitignore b/.gitignore index 106c2416..ce338cb9 100644 --- a/.gitignore +++ b/.gitignore @@ -186,4 +186,3 @@ typings/ .idea .vscode dev -doc diff --git a/.style.yapf b/.style.yapf new file mode 100644 index 00000000..0e9640c2 --- /dev/null +++ b/.style.yapf @@ -0,0 +1,2 @@ +[style] +based_on_style = google diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js deleted file mode 100644 index ffbef389..00000000 --- a/docs/.vuepress/config.js +++ /dev/null @@ -1,80 +0,0 @@ -module.exports = { - title: 'NoneBot', - description: '基于 酷Q 的 Python 异步 QQ 机器人框架', - markdown: { - lineNumbers: true - }, - head: [ - ['link', { rel: 'icon', href: `/logo.png` }], - ['link', { rel: 'manifest', href: '/manifest.json' }], - ['meta', { name: 'theme-color', content: '#ffffff' }], - ['meta', { name: 'application-name', content: 'NoneBot' }], - ['meta', { name: 'apple-mobile-web-app-title', content: 'NoneBot' }], - ['meta', { name: 'apple-mobile-web-app-capable', content: 'yes' }], - ['link', { rel: 'apple-touch-icon', href: `/icons/apple-touch-icon.png` }], - ['link', { rel: 'mask-icon', href: '/icons/safari-pinned-tab.svg', color: '#5bbad5' }], - ['meta', { name: 'msapplication-TileImage', content: '/icons/mstile-150x150.png' }], - ['meta', { name: 'msapplication-TileColor', content: '#00aba9' }] - ], - ga: 'UA-115509121-2', - themeConfig: { - repo: 'nonebot/nonebot', - docsDir: 'docs', - editLinks: true, - editLinkText: '在 GitHub 上编辑此页', - lastUpdated: '上次更新', - activeHeaderLinks: false, - nav: [ - { text: '指南', link: '/guide/' }, - { text: '进阶', link: '/advanced/' }, - { text: 'API', link: '/api.md' }, - { text: '术语表', link: '/glossary.md' }, - { text: '更新日志', link: '/changelog.md' }, - ], - sidebar: { - '/guide/': [ - { - title: '指南', - collapsable: false, - children: [ - '', - 'installation', - 'getting-started', - 'whats-happened', - 'basic-configuration', - 'command', - 'nl-processor', - 'tuling', - 'notice-and-request', - 'cqhttp', - 'scheduler', - 'usage', - 'whats-next', - ] - } - ], - '/advanced/': [ - { - title: '进阶', - collapsable: false, - children: [ - '', - 'command-session', - 'command-argument', - 'command-group', - 'message', - 'permission', - 'decorator', - 'database', - 'server-app', - 'scheduler', - 'logging', - 'configuration', - 'larger-application', - 'deployment', - ] - } - ], - }, - } -} diff --git a/docs/.vuepress/override.styl b/docs/.vuepress/override.styl deleted file mode 100644 index 82df942e..00000000 --- a/docs/.vuepress/override.styl +++ /dev/null @@ -1 +0,0 @@ -$accentColor = #d32f2f \ No newline at end of file diff --git a/docs/.vuepress/public/browserconfig.xml b/docs/.vuepress/public/browserconfig.xml deleted file mode 100644 index e0322103..00000000 --- a/docs/.vuepress/public/browserconfig.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - #00aba9 - - - diff --git a/docs/.vuepress/public/icons/android-chrome-192x192.png b/docs/.vuepress/public/icons/android-chrome-192x192.png deleted file mode 100644 index cc5ddde2880ed179e5da125147e86ba632b62ab6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7015 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 diff --git a/docs/.vuepress/public/icons/android-chrome-384x384.png b/docs/.vuepress/public/icons/android-chrome-384x384.png deleted file mode 100644 index f8a7a5faba30cc349fd9095a7c1d55290300e1a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17852 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 diff --git a/docs/.vuepress/public/icons/favicon-32x32.png b/docs/.vuepress/public/icons/favicon-32x32.png deleted file mode 100644 index 0ad08ba4c141ae862b172a90cd037ec6081592e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 886 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 oZ7&#)o1QeuHbL8>EH58G08 - - - -Created by potrace 1.11, written by Peter Selinger 2001-2013 - - - - - diff --git a/docs/.vuepress/public/logo.png b/docs/.vuepress/public/logo.png deleted file mode 100644 index 45857adacc0b9c5590375712bb5038d87ebfcc32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9052 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 JRj69M`G4*cmU93A diff --git a/docs/.vuepress/public/manifest.json b/docs/.vuepress/public/manifest.json deleted file mode 100644 index d27d4f61..00000000 --- a/docs/.vuepress/public/manifest.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "NoneBot", - "short_name": "NoneBot", - "icons": [ - { - "src": "/icons/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "/icons/android-chrome-384x384.png", - "sizes": "384x384", - "type": "image/png" - } - ], - "theme_color": "#ffffff", - "background_color": "#ffffff", - "display": "standalone" -} diff --git a/docs/.vuepress/style.styl b/docs/.vuepress/style.styl deleted file mode 100644 index b952c5aa..00000000 --- a/docs/.vuepress/style.styl +++ /dev/null @@ -1,3 +0,0 @@ -body { - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", "Open Sans", "Helvetica Neue", "Noto Sans CJK SC", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", "Wenquanyi Micro Hei", "WenQuanYi Zen Hei", sans-serif; -} \ No newline at end of file diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index a0d505e7..00000000 --- a/docs/README.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -home: true -heroImage: /logo.png -actionText: 开始使用 -actionLink: /guide/ -features: -- title: 简洁 - details: 提供极其简洁易懂的 API,使你可以毫无压力地开始验证你的绝佳创意,只需编写最少量的代码,即可实现丰富的功能。 -- title: 易于扩展 - details: 精心设计的消息处理流程使得你可以很方便地将原型扩充为具有大量实用功能的完整聊天机器人,并持续保证扩展性。 -- title: 高性能 - details: 采用异步 I/O,利用 WebSocket 进行通信,以获得极高的性能;同时,支持使用多账号同时接入,减少业务宕机的可能。 -footer: MIT Licensed | Copyright © 2020 NoneBot Team ---- diff --git a/docs/advanced/README.md b/docs/advanced/README.md deleted file mode 100644 index 998760b1..00000000 --- a/docs/advanced/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# 概览 - -在 [指南](../guide/) 中,我们已经介绍了 NoneBot 的基础用法,利用这些基础用法已经可以编写很多有趣的功能。而在进阶这一部分,我们将介绍 NoneBot 的高级特性、特殊用法和最佳实践,以帮助你编写更加复杂、功能更丰富的机器人。 diff --git a/docs/advanced/command-argument.md b/docs/advanced/command-argument.md deleted file mode 100644 index d7a66717..00000000 --- a/docs/advanced/command-argument.md +++ /dev/null @@ -1,110 +0,0 @@ -# 命令参数 - -## `session.get()` 和参数解析器 - -## 类 Shell 参数解析 - -`nonebot.argparse` 模块主要继承自 Python 内置的同名模块(`argparse`),用于解析命令的参数。在需要编写类 shell 语法的命令的时候,使用此模块可以大大提高开发效率。 - -「类 shell 语法」指的是形如 `some-command --verbose -n 3 --name=some-name argument1 argument2` 的类似于 shell 命令的语法。 - -下面给出一个使用 `argparse` 模块的实际例子: - -```python {1-15} -@on_command('schedule', shell_like=True) -async def _(session: CommandSession): - parser = ArgumentParser(session=session, usage=USAGE) - parser.add_argument('-S', '--second') - parser.add_argument('-M', '--minute') - parser.add_argument('-H', '--hour') - parser.add_argument('-d', '--day') - parser.add_argument('-m', '--month') - parser.add_argument('-w', '--day-of-week') - parser.add_argument('-f', '--force', action='store_true', default=False) - parser.add_argument('-v', '--verbose', action='store_true', default=False) - parser.add_argument('--name', required=True) - parser.add_argument('commands', nargs='+') - - args = parser.parse_args(session.argv) - - if not re.match(r'[_a-zA-Z][_a-zA-Z0-9]*', args.name): - await session.send('计划任务名必须仅包含字母、数字、下划线,且以字母或下划线开头') - return - - parsed_commands: List[ScheduledCommand] = [] - invalid_commands: List[str] = [] - - if args.verbose: - parsed_commands.append( - ScheduledCommand(('echo',), f'开始执行计划任务 {args.name}……')) - - for cmd_str in args.commands: - cmd, current_arg = parse_command(session.bot, cmd_str) - if cmd: - tmp_session = CommandSession(session.bot, session.ctx, cmd, - current_arg=current_arg) - if await cmd.run(tmp_session, dry=True): - parsed_commands.append(ScheduledCommand(cmd.name, current_arg)) - continue - invalid_commands.append(cmd_str) - if invalid_commands: - invalid_commands_joined = '\n'.join( - [f'- {c}' for c in invalid_commands]) - await session.send(f'计划任务添加失败,' - f'因为下面的 {len(invalid_commands)} 个命令无法被运行' - f'(命令不存在或权限不够):\n' - f'{invalid_commands_joined}') - return - - trigger_args = {k: v for k, v in args.__dict__.items() - if k in {'second', 'minute', 'hour', 'day', 'month', 'day_of_week'}} - try: - job = await scheduler.add_scheduled_commands( - parsed_commands, - job_id=scheduler.make_job_id(PLUGIN_NAME, context_id(session.ctx), args.name), - ctx=session.ctx, - trigger='cron', **trigger_args, - replace_existing=args.force - ) - except scheduler.JobIdConflictError: - # a job with same name exists - await session.send(f'计划任务 {args.name} 已存在,' - f'若要覆盖请使用 --force 参数') - return - - await session.send(f'计划任务 {args.name} 添加成功') - await session.send(format_job(args.name, job)) - - -USAGE = r""" -添加计划任务 - -使用方法: - schedule.add [OPTIONS] --name NAME COMMAND [COMMAND ...] - -OPTIONS: - -h, --help 显示本使用帮助 - -S SECOND, --second SECOND 定时器的秒参数 - -M MINUTE, --minute MINUTE 定时器的分参数 - -H HOUR, --hour HOUR 定时器的时参数 - -d DAY, --day DAY 定时器 的日参数 - -m MONTH, --month MONTH 定时器的月参数 - -w DAY_OF_WEEK, --day-of-week DAY_OF_WEEK 定时器的星期参数 - -f, --force 强制覆盖已有的同名计划任务 - -v, --verbose 在执行计划任务时输出更多信息 - -NAME: - 计划任务名称 - -COMMAND: - 要计划执行的命令,如果有空格或特殊字符,需使用引号括起来 -""".strip() -``` - -上面的例子出自 [cczu-osa/aki](https://github.com/cczu-osa/aki) 项目的计划任务插件,这里我们只关注前 15 行。 - -`on_command` 的 `shell_like=True` 参数告诉 NoneBot 这个命令需要使用类 shell 语法,NoneBot 会自动添加命令参数解析器来使用 Python 内置的 `shlex` 包分割参数。分割后的参数被放在 `session.args['argv']`,可通过 `session.argv` 属性来快速获得。 - -命令处理函数中,使用 `nonebot.argparse` 模块包装后的 `ArgumentParser` 类来解析参数,具体 `ArgumentParser` 添加参数的方法,请参考 [`argparse`](https://docs.python.org/3/library/argparse.html)。在使用 `add_argument()` 方法添加需要解析的参数后,使用 `parse_args()` 方法最终将 `argv` 解析为 `argparse.Namespace` 对象。 - -特别地,`parse_args()` 方法如果遇到需要打印帮助或报错并退出程序的情况(具体可以通过使用 Python 内置的 `argparse.ArgumentParser` 来体验),行为会更改为发送消息给当前 session 对应的上下文。注意到,`ArgumentParser` 类初始化时传入了 `session` 和 `usage` 参数,分别用于发送消息和使用帮助的内容。 diff --git a/docs/advanced/command-group.md b/docs/advanced/command-group.md deleted file mode 100644 index c7ff200b..00000000 --- a/docs/advanced/command-group.md +++ /dev/null @@ -1 +0,0 @@ -# 命令组 diff --git a/docs/advanced/command-session.md b/docs/advanced/command-session.md deleted file mode 100644 index befbadbe..00000000 --- a/docs/advanced/command-session.md +++ /dev/null @@ -1,9 +0,0 @@ -# 命令会话 - -## 生命周期 - -## 状态数据 - -## 暂停、终止 - -## 切换上下文 diff --git a/docs/advanced/configuration.md b/docs/advanced/configuration.md deleted file mode 100644 index fa1492dc..00000000 --- a/docs/advanced/configuration.md +++ /dev/null @@ -1 +0,0 @@ -# 配置 diff --git a/docs/advanced/database.md b/docs/advanced/database.md deleted file mode 100644 index dcf65a13..00000000 --- a/docs/advanced/database.md +++ /dev/null @@ -1 +0,0 @@ -# 数据库 diff --git a/docs/advanced/decorator.md b/docs/advanced/decorator.md deleted file mode 100644 index 24e37995..00000000 --- a/docs/advanced/decorator.md +++ /dev/null @@ -1 +0,0 @@ -# `on_*` 装饰器 diff --git a/docs/advanced/deployment.md b/docs/advanced/deployment.md deleted file mode 100644 index 154cce33..00000000 --- a/docs/advanced/deployment.md +++ /dev/null @@ -1,80 +0,0 @@ -# 部署 - -## 基本部署 - -NoneBot 所基于的 python-aiocqhttp 库使用的 web 框架是 Quart,因此 NoneBot 的部署方法和 Quart 一致([Deploying Quart](https://pgjones.gitlab.io/quart/tutorials/deployment.html))。 - -Quart 官方建议使用 Hypercorn 来部署,这需要一个 ASGI app 对象,在 NoneBot 中,可使用 `nonebot.get_bot().asgi` 获得 ASGI app 对象。 - -具体地,通常在项目根目录下创建一个 `run.py` 文件如下: - -```python -import os -import sys - -import nonebot - -import config - -nonebot.init(config) -bot = nonebot.get_bot() -app = bot.asgi - -if __name__ == '__main__': - bot.run() -``` - -然后使用下面命令部署: - -```python -hypercorn run:app -``` - -另外,NoneBot 配置文件的 `DEBUG` 项默认为 `True`,在生产环境部署时请注意修改为 `False` 以提高性能。 - -## 使用 Docker Compose 与 酷Q 同时部署 - -Docker Compose 是 Docker 官方提供的一个命令行工具,用来定义和运行由多个容器组成的应用。通过建立一个名为 `docker-compose.yml` 的文件,可以将部署过程中需要的参数记录在其中,并由单个命令完成应用的创建和启动。 - -`docker-compose.yml` 文件的示例如下: - -```yaml -version: "3" -services: - - cqhttp: - image: richardchien/cqhttp:latest - volumes: - - "./coolq:/home/user/coolq" # 用于保存COOLQ文件的目录 - environment: - - COOLQ_ACCOUNT=123456 # 指定要登陆的QQ号,用于自动登录 - - FORCE_ENV=true - - CQHTTP_USE_HTTP=false - - CQHTTP_USE_WS=false - - CQHTTP_USE_WS_REVERSE=true - - CQHTTP_WS_REVERSE_API_URL=ws://nonebot:8080/ws/api/ - - CQHTTP_WS_REVERSE_EVENT_URL=ws://nonebot:8080/ws/event/ - depends_on: - - nonebot - ports: 9000:9000 # noVNC 端口,用于从浏览器控制 酷Q - - nonebot: - build: ./nonebot # 构建nonebot执行环境,Dockerfile见下面的例子 - expose: - - "8080" - environment: - - TZ=Asia/Shanghai - volumes: - - "./qbot:/root/qbot" # 项目文件所在目录 - command: python3 /root/qbot/bot.py -``` - -部分说明见注释。NoneBot 运行环境由文件 `./nonebot/Dockerfile` 控制构建。如果项目中使用了第三方库,可以在这一步骤进行安装。`Dockerfile` 内容例如: - -```Dockerfile -FROM alpine -RUN apk add --no-cache tzdata python3 py3-multidict py3-yarl && \ - pip3 install --no-cache-dir "nonebot[scheduler]" -``` - -上述文件编辑完成后,输入命令 `docker-compose up` 即可一次性启动酷Q和 NoneBot(可通过 `docker-compose up -d` 在后台启动。更多 Docker Compose 用法见 [官方文档](https://docs.docker.com/compose/reference/overview/)。 diff --git a/docs/advanced/larger-application.md b/docs/advanced/larger-application.md deleted file mode 100644 index 9da8793b..00000000 --- a/docs/advanced/larger-application.md +++ /dev/null @@ -1,7 +0,0 @@ -# 大型应用的最佳实践 - -## 使用独立 Logger - -## 项目结构 - -## 根据运行环境加载不同的配置 diff --git a/docs/advanced/logging.md b/docs/advanced/logging.md deleted file mode 100644 index bb64e970..00000000 --- a/docs/advanced/logging.md +++ /dev/null @@ -1,23 +0,0 @@ -# 日志 - -`nonebot.log` 模块提供了一个 `logger` 对象,可用于日志。 - -使用 `nonebot.init()` 配置 NoneBot 时,`logger` 对象的日志级别会随 `DEBUG` 配置项的不同而不同,如果 `DEBUG` 为 `True`,则日志级别为 `DEBUG`,否则为 `INFO`。你也可以在 `nonebot.init()` 调用之后自行设置 `logger` 的日志级别。 - -举例: - -```python -import logging - -import nonebot -from nonebot.log import logger - -import config - - -nonebot.init(config) -# logger.setLevel(logging.WARNING) - -logger.info('Starting') -nonebot.run() -``` diff --git a/docs/advanced/message.md b/docs/advanced/message.md deleted file mode 100644 index 92836ce6..00000000 --- a/docs/advanced/message.md +++ /dev/null @@ -1,5 +0,0 @@ -# 消息处理 - -## CQ 码和消息段 - -## Expression diff --git a/docs/advanced/permission.md b/docs/advanced/permission.md deleted file mode 100644 index 7190bcdd..00000000 --- a/docs/advanced/permission.md +++ /dev/null @@ -1 +0,0 @@ -# 权限控制 diff --git a/docs/advanced/scheduler.md b/docs/advanced/scheduler.md deleted file mode 100644 index e17950a8..00000000 --- a/docs/advanced/scheduler.md +++ /dev/null @@ -1,161 +0,0 @@ -# 计划任务 - -NoneBot 可选地内置了计划任务功能,在指南的 [添加计划任务](../guide/scheduler.md) 已经进行了简单的介绍。这里列出更多常见的用法。 - -## 固定的计划任务 - -可以利用固定的*触发器*(trigger)来触发某些任务。 - -### 一次性任务 - -[`date` 触发器](https://apscheduler.readthedocs.io/en/stable/modules/triggers/date.html#module-apscheduler.triggers.date) 固定时间触发,仅触发一次: - -```python -from datetime import datetime - -@nonebot.scheduler.scheduled_job( - 'date', - run_date=datetime(2021, 1, 1, 0, 0), - # timezone=None, -) -async def _(): - await bot.send_group_msg(group_id=123456, - message="2021,新年快乐!") -``` - -### 定期任务 - -[`cron` 触发器](https://apscheduler.readthedocs.io/en/stable/modules/triggers/cron.html#module-apscheduler.triggers.cron) 从 `start_date` 开始到 `end_date` 结束,根据类似 [Cron](https://wiki.archlinux.org/index.php/Cron_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)) 的规则触发任务: - -```python -@nonebot.scheduler.scheduled_job( - 'cron', - # year=None, - # month=None, - # day=None, - # week=None, - day_of_week="mon,tue,wed,thu,fri", - hour=7, - # minute=None, - # second=None, - # start_date=None, - # end_date=None, - # timezone=None, -) -async def _(): - await bot.send_group_msg(group_id=123456, - message="起床啦!") -``` - -### 间隔任务 - -[`interval` 触发器](https://apscheduler.readthedocs.io/en/stable/modules/triggers/interval.html#module-apscheduler.triggers.interval) 从 `start_date` 开始,每间隔一段时间触发,到 `end_date` 结束: - -```python -@nonebot.scheduler.scheduled_job( - 'interval', - # weeks=0, - # days=0, - # hours=0, - minutes=5, - # seconds=0, - # start_date=time.now(), - # end_date=None, -) -async def _(): - has_new_item = check_new_item() - if has_new_item: - await bot.send_group_msg(group_id=123456, - message="XX有更新啦!") -``` - -## 动态的计划任务 - -有时,我们需要机器人在运行的过程中,添加或删除计划任务,那么我们就需要 `scheduler.add_job` 来帮忙。这里,我们以*一次性任务*为例,其他类型的任务可以用相同的方法: - -```python -import datetime - -from apscheduler.triggers.date import DateTrigger # 一次性触发器 -# from apscheduler.triggers.cron import CronTrigger # 定期触发器 -# from apscheduler.triggers.interval import IntervalTrigger # 间隔触发器 -from nonebot import on_command, scheduler - -@on_command('赖床') -async def _(session: CommandSession): - await session.send('我会在5分钟后再喊你') - - # 制作一个“5分钟后”触发器 - delta = datetime.timedelta(minutes=5) - trigger = DateTrigger( - run_date=datetime.datetime.now() + delta - ) - - # 添加任务 - scheduler.add_job( - func=session.send, # 要添加任务的函数,不要带参数 - trigger=trigger, # 触发器 - args=('不要再赖床啦!',), # 函数的参数列表,注意:只有一个值时,不能省略末尾的逗号 - # kwargs=None, - misfire_grace_time=60, # 允许的误差时间,建议不要省略 - # jobstore='default', # 任务储存库,在下一小节中说明 - ) -``` - - diff --git a/docs/advanced/server-app.md b/docs/advanced/server-app.md deleted file mode 100644 index 541a1e1e..00000000 --- a/docs/advanced/server-app.md +++ /dev/null @@ -1,39 +0,0 @@ -# Server App - -如果需要对 web 框架进行更详细的控制,可以通过 `bot.server_app` 访问到内部的 Quart 对象,之后可以像使用 Quart 的 app 对象一样添加路由、设置生命周期处理函数等。 - -:::tip 提示 -Quart 是一个与 Flask 具有相同 API 的异步 web 框架,其用法可以参考 [官方文档](https://pgjones.gitlab.io/quart/)。 -::: - -## 自定义路由 - -这里以一个简单的管理页面为例: - -```python -import nonebot - -bot = nonebot.get_bot() # 在此之前必须已经 init - -@bot.server_app.route('/admin') -async def admin(): - await bot.send_private_msg(12345678, '你的主页被访问了') - return '欢迎来到管理页面' -``` - -启动 NoneBot 后访问 ,你会看见管理页面的欢迎词,并收到机器人的提醒。 - -## 处理生命周期事件 - -有时可能需要在 NoneBot 启动时初始化数据库连接池,例如: - -```python -import nonebot - -bot = nonebot.get_bot() # 在此之前必须已经 init - -@bot.server_app.before_serving -async def init_db(): - # 这会在 NoneBot 启动后立即运行 - pass -``` diff --git a/docs/api.md b/docs/api.md deleted file mode 100644 index e18f1465..00000000 --- a/docs/api.md +++ /dev/null @@ -1,3219 +0,0 @@ ---- -sidebar: auto ---- - -# API - -## 类型 - -下面的 API 文档中,「类型」部分使用 Python 的 Type Hint 语法,见 [PEP 484](https://www.python.org/dev/peps/pep-0484/)、[PEP 526](https://www.python.org/dev/peps/pep-0526/) 和 [typing](https://docs.python.org/3/library/typing.html)。 - -除了 Python 内置的类型,下面还出现了如下 NoneBot 自定类型,实际上它们是 Python 内置类型的别名。 - -以下类型均可从 `nonebot.typing` 模块导入。 - -### `Context_T` - -- **类型:** `Dict[str, Any]` - -- **说明:** - - CQHTTP 上报的事件数据对象的类型。 - -### `Message_T` - -- **类型:** `Union[str, Dict[str, Any], List[Dict[str, Any]]]` - -- **说明:** - - 消息对象的类型,通常表示 NoneBot 提供的消息相关接口所支持的类型,`nonebot.message.Message` 也是一个合法的 `Message_T`。 - -### `Expression_T` - -- **类型:** `Union[str, Sequence[str], Callable]` - -- **说明:** - - Expression 对象的类型。 - -### `CommandName_T` - -- **类型:** `Tuple[str]` - -- **说明:** - - 命令名称的类型。 - -### `CommandArgs_T` - -- **类型:** `Dict[str, Any]` - -- **说明:** - - 命令参数的类型。 - -### `CommandHandler_T` - -- **类型:** `Callable[[CommandSession], Any]` - -- **说明:** - - 命令处理函数 - -### `State_T` - -- **类型:** `Dict[str, Any]` - -- **说明:** - - 命令会话的状态(`state` 属性)的类型。 - -### `Filter_T` - -- **类型:** `Callable[[Any], Union[Any, Awaitable[Any]]]` - -- **说明:** - - 过滤器的类型。 - - 例如: - - ```python - async def validate(value): - if value > 100: - raise ValidateError('数值必须小于 100') - return value - ``` - -## 配置 - -### `API_ROOT` - -- **类型:** `str` - -- **默认值:** `''` - -- **说明:** - - CQHTTP 插件的 HTTP 接口地址,如果不使用 HTTP 通信,则无需设置。 - -- **用法:** - - ```python - API_ROOT = 'http://127.0.0.1:5700' - ``` - - 告诉 NoneBot CQHTTP 插件的 HTTP 服务运行在 `http://127.0.0.1:5700`。 - -### `ACCESS_TOKEN` - -- **类型:** `str` - -- **默认值:** `''` - -- **说明:** - - 需要和 CQHTTP 插件的配置中的 `access_token` 相同。 - -### `SECRET` - -- **类型:** `str` - -- **默认值:** `''` - -- **说明:** - - 需要和 CQHTTP 插件的配置中的 `secret` 相同。 - -### `HOST` - -- **类型:** `str` - -- **默认值:** `'127.0.0.1'` - -- **说明:** - - NoneBot 的 HTTP 和 WebSocket 服务端监听的 IP/主机名。 - -- **用法:** - - ```python - HOST = '0.0.0.0' - ``` - - 监听服务器的所有 IP。 - -### `PORT` - -- **类型:** `int` - -- **默认值:** `8080` - -- **说明:** - - NoneBot 的 HTTP 和 WebSocket 服务端监听的端口。 - -- **用法:** - - ```python - PORT = 9876 - ``` - - 监听 9876 端口。 - -### `DEBUG` - -- **类型:** `bool` - -- **默认值:** `True` - -- **说明:** - - 是否以调试模式运行,生产环境需要设置为 `False` 以提高性能。 - -- **用法:** - - ```python - DEBUG = False - ``` - - 不使用调试模式运行。 - -### `SUPERUSERS` - -- **类型:** `Container[int]` - -- **默认值:** `set()` - -- **说明:** - - 超级用户的 QQ 号,用于命令的权限检查。 - -- **用法:** - - ```python - SUPERUSERS = {12345678, 87654321} - ``` - - 设置 `12345678` 和 `87654321` 为超级用户。 - -### `NICKNAME` - -- **类型:** `Union[str, Iterable[str]]` - -- **默认值:** `''` - -- **说明:** - - 机器人的昵称,用于辨别用户是否在和机器人说话(目前仅用于自然语言处理器,命令仍需 @)。 - -- **用法:** - - ```python - NICKNAME = {'奶茶', '小奶茶'} - ``` - - 用户可以通过「奶茶」或「小奶茶」来呼唤机器人。 - -### `COMMAND_START` - -- **类型:** `Iterable[Union[str, Pattern]]` - -- **默认值:** `{'/', '!', '/', '!'}` - -- **说明:** - - 命令的起始标记,用于判断一条消息是不是命令。 - -- **用法:** - - ```python - COMMAND_START = {'', '/', '!'} - ``` - - 允许使用 `/`、`!` 作为命令起始符,或不用发送起始符。 - -### `COMMAND_SEP` - -- **类型:** `Iterable[Union[str, Pattern]]` - -- **默认值:** `{'/', '.'}` - -- **说明:** - - 命令的分隔标记,用于将文本形式的命令切分为元组(实际的命令名)。 - -- **用法:** - - ```python - COMMAND_SEP = {'.'} - ``` - - 将 `note.add` 这样的命令解析为 `('note', 'add')`。 - -### `SESSION_EXPIRE_TIMEOUT` - -- **类型:** `Optional[datetime.timedelta]` - -- **默认值:** `datetime.timedelta(minutes=5)` - -- **说明:** - - 命令会话的过期超时时长,超时后会话将被移除。`None` 表示不超时。 - -- **用法:** - - ```python - from datetime import timedelta - SESSION_EXPIRE_TIMEOUT = timedelta(minutes=2) - ``` - - 设置过期超时为 2 分钟,即用户 2 分钟不发消息后,会话将被关闭。 - -### `SESSION_RUN_TIMEOUT` - -- **类型:** `Optional[datetime.timedelta]` - -- **默认值:** `None` - -- **说明:** - - 命令会话的运行超时时长,超时后会话将被移除,命令处理函数会被异常所中断。此时用户可以调用新的命令,开启新的会话。`None` 表示不超时。 - -- **用法:** - - ```python - from datetime import timedelta - SESSION_RUN_TIMEOUT = timedelta(seconds=10) - ``` - - 设置运行超时为 10 秒,即命令会话运行达到 10 秒,NoneBot 将认为它已经结束。 - -### `SESSION_RUNNING_EXPRESSION` - -- **类型:** `Expression_T` - -- **默认值:** `'您有命令正在执行,请稍后再试'` - -- **说明:** - - 当有命令会话正在运行时,给用户新消息的回复。 - -- **用法:** - - ```python - SESSION_RUNNING_EXPRESSION = '' - ``` - - 设置为空,表示当有命令会话正在运行时,不回复用户的新消息。 - -### `SHORT_MESSAGE_MAX_LENGTH` - -- **类型:** `int` - -- **默认值:** `50` - -- **说明:** - - 短消息的最大长度。默认情况下(`only_short_message` 为 `True`),自然语言处理器只会响应消息中纯文本部分的长度总和小于等于此值的消息。 - -- **用法:** - - ```python - SHORT_MESSAGE_MAX_LENGTH = 100 - ``` - - 设置最大长度为 100。 - -### `DEFAULT_VALIDATION_FAILURE_EXPRESSION` - -- **类型:** `Expression_T` - -- **默认值:** `'您的输入不符合要求,请重新输入'` - -- **说明:** - - 命令参数验证失败(验证器抛出 `ValidateError` 异常)、且验证器没有指定错误信息时,默认向用户发送的错误提示。 - -- **用法:** - - ```python - DEFAULT_VALIDATION_FAILURE_EXPRESSION = '你发送的内容格式不太对呢,请检查一下再发送哦~' - ``` - - 设置更亲切的默认错误提示。 - -### `MAX_VALIDATION_FAILURES` - -- **类型:** `int` - -- **默认值:** `3` - -- **说明:** - - 命令参数验证允许的最大失败次数,用户输入错误达到这个次数之后,将会提示用户输入错误太多次,并结束命令会话。 - - 设置为 `0` 将不会检查验证失败次数。 - -### `TOO_MANY_VALIDATION_FAILURES_EXPRESSION` - -- **类型:** `Expression_T` - -- **默认值:** `'您输入错误太多次啦,如需重试,请重新触发本功能'` - -- **说明:** - - 命令参数验证失败达到 `MAX_VALIDATION_FAILURES` 次之后,向用户发送的提示。 - -- **用法:** - - ```python - TOO_MANY_VALIDATION_FAILURES_EXPRESSION = ( - '你输错太多次啦,需要的时候再叫我吧', - '你输错太多次了,建议先看看使用帮助哦~', - ) - ``` - -### `SESSION_CANCEL_EXPRESSION` - -- **类型:** `Expression_T` - -- **默认值:** `'好的'` - -- **说明:** - - `nonebot.command.argfilter.controllers.handle_cancellation()` 控制器在用户发送了 `算了`、`取消` 等取消指令后,结束当前命令会话时,向用户发送的提示。 - -- **用法:** - - ```python - SESSION_CANCEL_EXPRESSION = ( - '好的', - '好的吧', - '好吧,那奶茶就不打扰啦', - '那奶茶先不打扰小主人啦', - ) - ``` - -### `APSCHEDULER_CONFIG` - -- **类型:** `Dict[str, Any]` - -- **默认值:** `{'apscheduler.timezone': 'Asia/Shanghai'}` - -- **说明:** - - APScheduler 的配置对象,见 [Configuring the scheduler](https://apscheduler.readthedocs.io/en/latest/userguide.html#configuring-the-scheduler)。 - -## `nonebot` 模块 - -### 快捷导入 - -为方便使用,`nonebot` 模块从子模块导入了部分内容: - -- `CQHttpError` -> `nonebot.exceptions.CQHttpError` -- `load_plugin` -> `nonebot.plugin.load_plugin` -- `load_plugins` -> `nonebot.plugin.load_plugins` -- `load_builtin_plugins` -> `nonebot.plugin.load_builtin_plugins` -- `get_loaded_plugins` -> `nonebot.plugin.get_loaded_plugins` -- `on_command` -> `nonebot.plugin.on_command` -- `on_natural_language` -> `nonebot.plugin.on_natural_language` -- `on_notice` -> `nonebot.plugin.on_notice` -- `on_request` -> `nonebot.plugin.on_request` -- `message_preprocessor` -> `nonebot.message.message_preprocessor` -- `Message` -> `nonebot.message.Message` -- `MessageSegment` -> `nonebot.message.MessageSegment` -- `CommandSession` -> `nonebot.command.CommandSession` -- `CommandGroup` -> `nonebot.command.CommandGroup` -- `NLPSession` -> `nonebot.natural_language.NLPSession` -- `NLPResult` -> `nonebot.natural_language.NLPResult` -- `NoticeSession` -> `nonebot.notice_request.NoticeSession` -- `RequestSession` -> `nonebot.notice_request.RequestSession` -- `context_id` -> `nonebot.helpers.context_id` - -### `scheduler` - -- **类型:** `Scheduler` - -- **说明:** - - 全局的计划任务对象,只有当 Python 环境中安装了 APScheduler 时才有效,否则为 `None`。 - -### _class_ `NoneBot` - -继承自 `aiocqhttp.CQHttp`。 - -#### `config` - -- **类型:** `Any` - -- **说明:** - - 配置对象。 - -#### `asgi` - -- **类型:** `Quart` - -- **说明:** - - ASGI 对象,继承自 `aiocqhttp.CQHttp`,目前等价于 `server_app`。 - -#### `server_app` - -- **类型:** `Quart` - -- **说明:** - - 内部的 Quart 对象,继承自 `aiocqhttp.CQHttp`。 - -#### `__init__(config_object=None)` - -- **说明:** - - 初始化 NoneBot 对象。配置对象会被保存到 `config` 属性,并且被传入父类的初始化函数。 - - 不建议手动创建 NoneBot 对象,而应该使用全局的 `init()` 函数。 - -- **参数:** - - - `config_object: Optional[Any]`: 配置对象,类型不限,只要能够通过 `__getattr__` 和 `__dict__` 分别访问到单个和所有配置项即可,若没有传入,则使用默认配置 - -#### `__getattr__(item)` - -- **说明:** - - 获取用于 API 调用的 `Callable` 对象。 - - 对返回结果进行函数调用会调用 CQHTTP 的相应 API,请注意捕获 `CQHttpError` 异常,具体请参考 aiocqhttp 的 [API 调用](https://github.com/richardchien/python-aiocqhttp#api-%E8%B0%83%E7%94%A8)。 - -- **参数:** - - - `item: str`: 要调用的 API 动作名,请参考 CQHTTP 插件文档的 [API 列表](https://cqhttp.cc/docs/#/API?id=api-%E5%88%97%E8%A1%A8) - -- **返回:** - - - `Callable`: 用于 API 调用的 `Callable` 对象 - -- **用法:** - - ```python - bot = nonebot.get_bot() - try: - info = await bot.get_group_member_info(group_id=1234567, user_id=12345678) - except CQHttpError as e: - logger.exception(e) - ``` - -#### `run(host=None, port=None, *args, **kwargs)` - -- **说明:** - - 运行 NoneBot。 - - 不建议直接运行 NoneBot 对象,而应该使用全局的 `run()` 函数。 - -- **参数:** - - - `host: Optional[str]`: 主机名/IP - - `port: Optional[int]`: 端口 - - `*args: Any`: 其它传入 `CQHttp.run()` 的位置参数 - - `**kwargs: Any`: 其它传入 `CQHttp.run()` 的命名参数 - -#### _decorator_ `on_message(*events)` - -- **说明:** - - 将函数装饰为消息事件的处理函数,继承自 `aiocqhttp.CQHttp`。 - - 监听所有消息事件时,可以不加括号。 - -- **参数:** - - - `*events: str`: 消息事件名,例如 `private`、`group`、`private.friend`,不传入表示监听所有消息事件 - -- **用法:** - - ```python - bot = nonebot.get_bot() - - @bot.on_message('group') - async def handle_group_message(event: aiocqhttp.Event) - pass - ``` - - 注册群消息事件处理函数。 - -#### _decorator_ `on_notice(*events)` - -- **说明:** - - 将函数装饰为通知事件的处理函数,继承自 `aiocqhttp.CQHttp`。 - - 监听所有通知事件时,可以不加括号。 - -- **参数:** - - - `*events: str`: 消息事件名,例如 `group_increase`、`group_decrease.leave`、`friend_add`,不传入表示监听所有通知事件 - -- **用法:** - - ```python - bot = nonebot.get_bot() - - @bot.on_notice('group_increase') - async def handle_group_increase(event: aiocqhttp.Event) - pass - ``` - - 注册群成员增加事件处理函数。 - -#### _decorator_ `on_request(*events)` - -- **说明:** - - 将函数装饰为请求事件的处理函数,继承自 `aiocqhttp.CQHttp`。 - - 监听所有请求事件时,可以不加括号。 - -- **参数:** - - - `*events: str`: 消息事件名,例如 `friend`、`group`、`group.add`,不传入表示监听所有请求事件 - -- **用法:** - - ```python - bot = nonebot.get_bot() - - @bot.on_request('friend', 'group.invite') - async def handle_request(event: aiocqhttp.Event) - pass - ``` - - 注册加好友和邀请入群请求事件处理函数。 - -#### _decorator_ `on_meta_event(*events)` - -- **说明:** - - 将函数装饰为元事件的处理函数,继承自 `aiocqhttp.CQHttp`。 - - 监听所有元事件时,可以不加括号。 - -- **参数:** - - - `*events: str`: 消息事件名,例如 `heartbeat`,不传入表示监听所有元事件 - -- **用法:** - - ```python - bot = nonebot.get_bot() - - @bot.on_meta_event('heartbeat') - async def handle_heartbeat(event: aiocqhttp.Event) - pass - ``` - - 注册心跳元事件处理函数。 - -### `init(config_object=None)` - -- **说明:** - - 初始化全局 NoneBot 对象。 - -- **参数:** - - - `config_object: Optional[Any]`: 配置对象,类型不限,只要能够通过 `__getattr__` 和 `__dict__` 分别访问到单个和所有配置项即可,若没有传入,则使用默认配置 - -- **返回:** - - - `None` - -- **用法:** - - ```python - import config - nonebot.init(config) - ``` - - 导入 `config` 模块并初始化全局 NoneBot 对象。 - -### `get_bot()` - -- **说明:** - - 获取全局 NoneBot 对象。可用于在计划任务的回调中获取当前 NoneBot 对象。 - -- **返回:** - - - `NoneBot`: 全局 NoneBot 对象 - -- **异常:** - - - `ValueError`: 全局 NoneBot 对象尚未初始化 - -- **用法:** - - ```python - bot = nonebot.get_bot() - ``` - -### `run(host=None, port=None, *args, **kwargs)` - -- **说明:** - - 运行全局 NoneBot 对象。 - -- **参数:** - - - `host: Optional[str]`: 主机名/IP,若不传入则使用配置文件中指定的值 - - `port: Optional[int]`: 端口,若不传入则使用配置文件中指定的值 - - `*args: Any`: 其它传入 `CQHttp.run()` 的位置参数 - - `**kwargs: Any`: 其它传入 `CQHttp.run()` 的命名参数 - -- **返回:** - - - `None` - -- **用法:** - - ```python - nonebot.run(host='127.0.0.1', port=8080) - ``` - - 在 `127.0.0.1:8080` 运行全局 NoneBot 对象。 - -### _decorator_ `on_startup` - -- **说明:** - - 将函数装饰为 NoneBot 启动时的回调函数。 - -- **用法:** - - ```python - @on_startup - async def startup() - await db.init() - ``` - - 注册启动时回调,初始化数据库。 - -### _decorator_ `on_websocket_connect` - -- **说明:** - - 将函数装饰为 CQHTTP 反向 WebSocket 连接建立时的回调函数。 - - 该装饰器等价于 `@bot.on_meta_event('lifecycle.connect')`,只在 CQHTTP v4.14+ 有用。 - -- **用法:** - - ```python - @on_websocket_connect - async def connect(event: aiocqhttp.Event): - bot = nonebot.get_bot() - groups = await bot.get_group_list() - ``` - - 注册 WebSocket 连接时回调,获取群列表。 - -## `nonebot.exceptions` 模块 - -### _class_ `CQHttpError` - -等价于 `aiocqhttp.Error`。 - -## `nonebot.plugin` 模块 - -### _class_ `Plugin` - -用于包装已加载的插件模块的类。 - -#### `module` - -- **类型:** `ModuleType` - -- **说明:** - - 已加载的插件模块(importlib 导入的 Python 模块)。 - -#### `name` - -- **类型:** `Optional[str]` - -- **说明:** - - 插件名称,从插件模块的 `__plugin_name__` 特殊变量获得,如果没有此变量,则为 `None`。 - -#### `usage` - -- **类型:** `Optional[Any]` - -- **说明:** - - 插件使用方法,从插件模块的 `__plugin_usage__` 特殊变量获得,如果没有此变量,则为 `None`。 - -#### `commands` - -- **类型:** `Set[Command]` - -- **说明:** - - 插件包含的命令,通过 `on_command` 装饰器注册。 - -#### `nl_processors` - -- **类型:** `Set[NLProcessor]` - -- **说明:** - - 插件包含的自然语言处理器,通过 `on_natural_language` 装饰器注册。 - -#### `event_handlers` - -- **类型:** `Set[EventHandler]` - -- **说明:** - - 插件包含的事件处理器(包含通知、请求),通过 `on_notice` 以及 `on_request` 装饰器注册。 - -### _class_ `PluginManager` - -插件管理器:用于管理插件的加载以及插件中命令、自然语言处理器、事件处理器的开关。 - -#### `cmd_manager` - -- **类型:** `CommandManager` - -- **说明:** - - 命令管理器实例。 - -#### `nlp_manager` - -- **类型:** `NLPManager` - -- **说明:** - - 自然语言管理器实例。 - -#### _class method_ `add_plugin(cls, module_path, plugin)` - -- **说明:** - - 注册一个 `Plugin` 对象。 - -- **参数:** - - - `module_path: str`: 模块路径 - - `plugin: Plugin`: Plugin 对象 - -- **返回:** - - None - -- **用法:** - - ```python - plugin = Plugin(module, name, usage, commands, nl_processors, event_handlers) - PluginManager.add_plugin("path.to.plugin", plugin) - ``` - -#### _class method_ `get_plugin(cls, module_path)` - -- **说明:** - - 获取一个已经注册的 `Plugin` 对象。 - -- **参数:** - - - `module_path: str`: 模块路径 - -- **返回:** - - - `Optional[Plugin]`: Plugin 对象 - -- **用法:** - - ```python - plugin = PluginManager.get_plugin("path.to.plugin") - ``` - -#### _class method_ `remove_plugin(cls, module_path)` - -- **说明:** - - 删除 Plugin 中的所有命令、自然语言处理器、事件处理器并移除 Plugin 对象。 - - :::danger - 这个方法实际并没有完全移除 Plugin 。仅是移除 Plugin 中的所有命令、自然语言处理器以及事件处理器。 - ::: - -- **参数:** - - - `module_path: str`: 模块路径 - -- **返回:** - - - `bool`: 是否移除了插件 - -- **用法:** - -#### _class method_ `switch_plugin_global(cls, module_path, state=None)` - -- **说明:** - - 根据 `state` 更改 plugin 中 commands, nl_processors, event_handlers 的全局状态。 - - :::warning - 更改插件状态并不会影响插件内 message_preprocessor, scheduler 等状态 - ::: - -- **参数:** - - - `module_path: str`: 模块路径 - - `state: Optional[bool]`: - - `None(default)`: 切换状态,即 开 -> 关、关 -> 开 - - `bool`: 切换至指定状态,`True` -> 开、`False` -> 关 - -- **返回:** - - None - -- **用法:** - - ```python - from nonebot import message_preprocessor - - # 全局关闭插件 path.to.plugin , 对所有消息生效 - PluginManager.switch_plugin_global("path.to.plugin", state=False) - - @message_preprocessor - async def processor(bot: NoneBot, event: CQEvent, plugin_manager: PluginManager): - plugin_manager.switch_plugin_global("path.to.plugin", state=False) - ``` - -#### _class method_ `switch_command_global(cls, module_path, state=None)` - -- **说明:** - - 根据 `state` 更改 plugin 中 commands 的全局状态。 - -- **参数:** - - - `module_path: str`: 模块路径 - - `state: Optional[bool]`: - - `None(default)`: 切换状态,即 开 -> 关、关 -> 开 - - `bool`: 切换至指定状态,`True` -> 开、`False` -> 关 - -- **返回:** - - None - -- **用法:** - - ```python - from nonebot import message_preprocessor - - # 全局关闭插件 path.to.plugin 中所有命令, 对所有消息生效 - PluginManager.switch_command_global("path.to.plugin", state=False) - - @message_preprocessor - async def processor(bot: NoneBot, event: CQEvent, plugin_manager: PluginManager): - plugin_manager.switch_command_global("path.to.plugin", state=False) - ``` - -#### _class method_ `switch_nlprocessor_global(cls, module_path, state=None)` - -- **说明:** - - 根据 `state` 更改 plugin 中 nl_processors 的全局状态。 - -- **参数:** - - - `module_path: str`: 模块路径 - - `state: Optional[bool]`: - - `None(default)`: 切换状态,即 开 -> 关、关 -> 开 - - `bool`: 切换至指定状态,`True` -> 开、`False` -> 关 - -- **返回:** - - None - -- **用法:** - - ```python - from nonebot import message_preprocessor - - # 全局关闭插件 path.to.plugin 中所有自然语言处理器, 对所有消息生效 - PluginManager.switch_nlprocessor_global("path.to.plugin", state=False) - - @message_preprocessor - async def processor(bot: NoneBot, event: CQEvent, plugin_manager: PluginManager): - plugin_manager.switch_nlprocessor_global("path.to.plugin", state=False) - ``` - -#### _class method_ `switch_eventhandler_global(cls, module_path, state=None)` - -- **说明:** - - 根据 `state` 更改 plugin 中 event handlers 的全局状态。 - -- **参数:** - - - `module_path: str`: 模块路径 - - `state: Optional[bool]`: - - `None(default)`: 切换状态,即 开 -> 关、关 -> 开 - - `bool`: 切换至指定状态,`True` -> 开、`False` -> 关 - -- **返回:** - - None - -- **用法:** - - ```python - from nonebot import message_preprocessor - - # 全局关闭插件 path.to.plugin 中所有事件处理器, 对所有消息生效 - PluginManager.switch_eventhandler_global("path.to.plugin", state=False) - - @message_preprocessor - async def processor(bot: NoneBot, event: CQEvent, plugin_manager: PluginManager): - plugin_manager.switch_eventhandler_global("path.to.plugin", state=False) - ``` - -#### `switch_plugin(cls, module_path, state=None)` - -- **说明:** - - 根据 `state` 修改 plugin 的状态。仅对当前消息有效。 - -- **参数:** - - - `module_path: str`: 模块路径 - - `state: Optional[bool]`: - - `None(default)`: 切换状态,即 开 -> 关、关 -> 开 - - `bool`: 切换至指定状态,`True` -> 开、`False` -> 关 - -- **返回:** - - None - -- **用法:** - - ```python - from nonebot import message_preprocessor - - # 关闭插件 path.to.plugin , 仅对当前消息生效 - @message_preprocessor - async def processor(bot: NoneBot, event: CQEvent, plugin_manager: PluginManager): - plugin_manager.switch_plugin("path.to.plugin", state=False) - ``` - -#### `switch_command(cls, module_path, state=None)` - -- **说明:** - - 根据 `state` 修改 plugin 中 commands 的状态。仅对当前消息有效。 - -- **参数:** - - - `module_path: str`: 模块路径 - - `state: Optional[bool]`: - - `None(default)`: 切换状态,即 开 -> 关、关 -> 开 - - `bool`: 切换至指定状态,`True` -> 开、`False` -> 关 - -- **返回:** - - None - -- **用法:** - - ```python - from nonebot import message_preprocessor - - # 关闭插件 path.to.plugin 中所有命令, 仅对当前消息生效 - @message_preprocessor - async def processor(bot: NoneBot, event: CQEvent, plugin_manager: PluginManager): - plugin_manager.switch_command("path.to.plugin", state=False) - ``` - -#### `switch_nlprocessor(cls, module_path, state=None)` - -- **说明:** - - 根据 `state` 修改 plugin 中 nl_processors 的状态。仅对当前消息有效。 - -- **参数:** - - - `module_path: str`: 模块路径 - - `state: Optional[bool]`: - - `None(default)`: 切换状态,即 开 -> 关、关 -> 开 - - `bool`: 切换至指定状态,`True` -> 开、`False` -> 关 - -- **返回:** - - None - -- **用法:** - - ```python - from nonebot import message_preprocessor - - # 关闭插件 path.to.plugin 中所有自然语言处理器, 仅对当前消息生效 - @message_preprocessor - async def processor(bot: NoneBot, event: CQEvent, plugin_manager: PluginManager): - plugin_manager.switch_nlprocessor("path.to.plugin", state=False) - ``` - -### `load_plugin(module_path)` - -- **说明:** - - 加载插件(等价于导入模块)。 - -- **参数:** - - - `module_path: str`: 模块路径 - -- **返回:** - - - `Optional[Plugin]`: 加载后生成的 Plugin 对象 - -- **用法:** - - ```python - nonebot.plugin.load_plugin('nonebot_tuling') - ``` - - 加载 `nonebot_tuling` 插件。 - -### `reload_plugin(module_path)` - -- **说明:** - - 重载插件。 - - :::danger - 该函数为强制重载,可能导致不可预测的错误! - ::: - -- **参数:** - - - `module_path: str`: 模块路径 - -- **返回:** - - - `Optional[Plugin]`: 重载后生成的 Plugin 对象 - -- **用法:** - - ```python - nonebot.plugin.reload_plugin('nonebot_tuling') - ``` - - 重载 `nonebot_tuling` 插件。 - -### `load_plugins(plugin_dir, module_prefix)` - -- **说明:** - - 查找指定路径(相对或绝对)中的非隐藏模块(隐藏模块名字以 `_` 开头)并通过指定的模块前缀导入。 - -- **参数:** - - - `plugin_dir: str`: 插件目录 - - `module_prefix: str`: 模块前缀 - -- **返回:** - - - `Set[Plugin]`: 加载成功的 Plugin 对象 - -- **用法:** - - ```python - nonebot.plugin.load_plugins(path.join(path.dirname(__file__), 'plugins'), 'plugins') - ``` - - 加载 `plugins` 目录下的插件。 - -### `load_builtin_plugins()` - -- **说明:** - - 加载内置插件。 - -- **返回:** - - - `Set[Plugin]:`: 加载成功的 Plugin 对象 - -- **用法:** - - ```python - nonebot.plugin.load_builtin_plugins() - ``` - -### `get_loaded_plugins()` - -- **说明:** - - 获取已经加载的插件集合。 - -- **返回:** - - - `Set[Plugin]:` 已加载的插件集合 - -- **用法:** - - ```python - plugins = nonebot.plugin.get_loaded_plugins() - await session.send('我现在支持以下功能:\n\n' + - '\n'.join(map(lambda p: p.name, filter(lambda p: p.name, plugins)))) - ``` - -### _decorator_ `on_command(name, *, aliases=(), permission=perm.EVERYBODY, only_to_me=True, privileged=False, shell_like=False)` - -- **说明:** - - 将函数装饰为命令处理器 `CommandHandler_T` 。 - - 被装饰的函数将会获得一个 `args_parser` 属性,是一个装饰器,下面会有详细说明。 - -- **参数:** - - - `name: Union[str, CommandName_T]`: 命令名,如果传入的是字符串则会自动转为元组 - - `aliases: Union[Iterable[str], str]`: 命令别名 - - `permission: int`: 命令所需要的权限,不满足权限的用户将无法触发该命令 - - `only_to_me: bool`: 是否只响应确定是在和「我」(机器人)说话的命令(在开头或结尾 @ 了机器人,或在开头称呼了机器人昵称) - - `privileged: bool`: 是否特权命令,若是,则无论当前是否有命令会话正在运行,都会运行该命令,但运行不会覆盖已有会话,也不会保留新创建的会话 - - `shell_like: bool`: 是否使用类 shell 语法,若是,则会自动使用 `shlex` 模块进行分割(无需手动编写参数解析器),分割后的参数列表放入 `session.args['argv']` - -- **要求:** - - 被装饰函数必须是一个 async 函数,且必须接收且仅接收一个位置参数,类型为 `CommandSession`,即形如: - - ```python - async def func(session: CommandSession): - pass - ``` - -- **用法:** - - ```python - @on_command('echo', aliases=('复读',)) - async def _(session: CommandSession): - await session.send(session.current_arg) - ``` - - 一个简单的复读命令。 - -### _decorator_ _command_func._`args_parser` - -- **说明:** - - 将函数装饰为命令层面的参数解析器,将在命令实际处理函数之前被运行。 - - 如果已经在 `on_command` 装饰器中使用了 `shell_like=True`,则无需手动使用编写参数解析器。 - - 如果使用 `CommandSession#get()` 方法获取参数,并且传入了 `arg_filters`(相当于单个参数层面的参数解析器),则不会再运行此装饰器注册的命令层面的参数解析器;相反,如果没有传入 `arg_filters`,则会运行。 - -- **要求:** - - 对被装饰函数的要求同 `on_command` 装饰器。 - -- **用法:** - - ```python - @my_cmd.args_parser - async def _(session: CommandSession): - stripped_text = session.current_arg_text.strip() - if not session.current_key and stripped_text: - session.current_key = 'initial_arg' - session.state[session.current_key] = stripped_text # 若使用 1.1.0 及以下版本,请使用 session.args - ``` - - 一个典型的命令参数解析器。 - -### _decorator_ `on_natural_language(keywords=None, *, permission=EVERYBODY, only_to_me=True, only_short_message=True, allow_empty_message=False)` - -- **说明:** - - 将函数装饰为自然语言处理器。 - -- **参数:** - - - `keywords: Optional[Union[Iterable, str]]`: 要响应的关键词,若传入 `None`,则响应所有消息 - - `permission: int`: 自然语言处理器所需要的权限,不满足权限的用户将无法触发该处理器 - - `only_to_me: bool`: 是否只响应确定是在和「我」(机器人)说话的消息(在开头或结尾 @ 了机器人,或在开头称呼了机器人昵称) - - `only_short_message: bool`: 是否只响应短消息 - - `allow_empty_message: bool`: 是否响应内容为空的消息(只有 @ 或机器人昵称) - -- **要求:** - - 被装饰函数必须是一个 async 函数,且必须接收且仅接收一个位置参数,类型为 `NLPSession`,即形如: - - ```python - async def func(session: NLPSession): - pass - ``` - -- **用法:** - - ```python - @on_natural_language({'天气'}, only_to_me=False) - async def _(session: NLPSession): - return NLPResult(100.0, ('weather',), None) - ``` - - 响应所有带有「天气」关键词的消息,当做 `weather` 命令处理。 - -### _decorator_ `on_notice(*events)` - -- **说明:** - - 将函数装饰为通知处理器。 - -- **参数:** - - - `*events: str`: 要处理的通知类型(`notice_type`),若不传入,则处理所有通知 - -- **要求:** - - 被装饰函数必须是一个 async 函数,且必须接收且仅接收一个位置参数,类型为 `NoticeSession`,即形如: - - ```python - async def func(session: NoticeSession): - pass - ``` - -- **用法:** - - ```python - @on_notice - async def _(session: NoticeSession): - logger.info('有新的通知事件:%s', session.event) - - @on_notice('group_increase') - async def _(session: NoticeSession): - await session.send('欢迎新朋友~') - ``` - - 收到所有通知时打日志,收到新成员进群通知时除了打日志还发送欢迎信息。 - -### _decorator_ `on_request(*events)` - -- **说明:** - - 将函数装饰为请求处理器。 - -- **参数:** - - - `*events: str`: 要处理的请求类型(`request_type`),若不传入,则处理所有请求 - -- **要求:** - - 被装饰函数必须是一个 async 函数,且必须接收且仅接收一个位置参数,类型为 `RequestSession`,即形如: - - ```python - async def func(session: RequestSession): - pass - ``` - -- **用法:** - - ```python - @on_request - async def _(session: RequestSession): - logger.info('有新的请求事件:%s', session.event) - - @on_request('group') - async def _(session: RequestSession): - await session.approve() - ``` - - 收到所有请求时打日志,收到群请求时除了打日志还同意请求。 - -## `nonebot.message` 模块 - -### _decorator_ `message_preprocessor` - -- **说明:** - - 将函数装饰为消息预处理器。 - -- **要求:** - - 被装饰函数必须是一个 async 函数,且必须接收且仅接收三个位置参数,类型分别为 `NoneBot` 、 `aiocqhttp.Event` 和 `nonebot.plugin.PluginManager`,即形如: - - ```python - async def func(bot: NoneBot, event: aiocqhttp.Event, plugin_manager: PluginManager): - pass - ``` - -- **用法:** - - ```python - @message_preprocessor - async def _(bot: NoneBot, event: aiocqhttp.Event, plugin_manager: PluginManager): - event["preprocessed"] = True - - # 关闭某个插件,仅对当前消息生效 - plugin_manager.switch_plugin("path.to.plugin", state=False) - ``` - - 在所有消息处理之前,向消息事件对象中加入 `preprocessed` 字段。 - -### _exception_ `CanceledException` - -- **说明:** - - 取消消息处理异常 - -- **要求:** - - 在消息预处理函数 `message_preprocessor` 中可以选择抛出该异常来阻止响应该消息。 - -- **用法:** - - ```python - @message_preprocessor - async def _(bot: NoneBot, event: aiocqhttp.Event, plugin_manager: PluginManager): - raise CanceledException(reason) - ``` - -### _class_ `MessageSegment` - -从 `aiocqhttp.message` 模块导入,继承自 `dict`,用于表示一个消息段。该类型是合法的 `Message_T`。 - -更多关于消息段的内容,见 [消息格式](https://cqhttp.cc/docs/#/Message)。 - -#### `type` - -- **类型:** `str` - -- **说明:** - - 消息段类型。 - -#### `data` - -- **类型:** `Dict[str, Any]` - -- **说明:** - - 消息段数据。 - -#### `__init__(d=None, *, type_=None, data=None)` - -- **说明:** - - 初始化消息段对象。 - -- **参数:** - - - `d: Dict[str, Any]`: 当有此参数且此参数中有 `type` 字段时,由此参数构造消息段 - - `type_: str`: 当没有传入 `d` 参数或 `d` 参数无法识别时,此参数必填,对应消息段的 `type` 字段 - - `data: Dict[str, str]`: 对应消息段的 `data` 字段,若不传入则初始化为 `{}` - -- **异常:** - - - `ValueError`: 没有正确传入 `type` 参数 - -- **用法:** - - ```python - seg1 = MessageSegment({'type': 'face', 'data': {'id': '123'}}) - seg2 = MessageSegment(type_='face', data={'id': '123'}) - ``` - -#### `__str__()` - -- **说明:** - - 将消息段转换成字符串格式。 - -- **返回:** - - - `str`: 字符串格式的消息段 - -- **用法:** - - ```python - str(MessageSegment.face(123)) - ``` - -#### `__eq__(other)` - -- **说明:** - - 判断两个消息段是否相同。 - -- **参数:** - - - `other: Any`: 要比较的对象 - -- **返回:** - - - `bool`: 两个消息段相同 - -- **用法:** - - ```python - MessageSegment.face(123) == MessageSegment(type='face', data={'id': '123'}) - ``` - -#### _staticmethod_ `text(text)` - -- **说明:** - - 构造纯文本消息段。 - -- **参数:** - - - `text: str`: 文本内容 - -- **返回:** - - - `MessageSegment`: 消息段对象 - -#### _staticmethod_ `emoji(id_)` - -- **说明:** - - 构造 emoji 消息段。 - -- **参数:** - - - `id_: int`: Emoji ID(Unicode 代码点) - -- **返回:** - - - `MessageSegment`: 消息段对象 - -#### _staticmethod_ `face(id_)` - -- **说明:** - - 构造 QQ 表情消息段。 - -- **参数:** - - - `id_: int`: QQ 表情 ID - -- **返回:** - - - `MessageSegment`: 消息段对象 - -#### _staticmethod_ `image(file)` - -- **说明:** - - 构造图片消息段。 - -- **参数:** - - - `file: str`: 图片文件名、路径、URL、或 Base64 编码 - -- **返回:** - - - `MessageSegment`: 消息段对象 - -#### _staticmethod_ `record(file, magic=False)` - -- **说明:** - - 构造语音消息段。 - -- **参数:** - - - `file: str`: 语音文件名、路径、URL、或 Base64 编码 - - `magic: bool`: 是否使用变声 - -- **返回:** - - - `MessageSegment`: 消息段对象 - -#### _staticmethod_ `at(user_id)` - -- **说明:** - - 构造 @ 消息段。 - -- **参数:** - - - `user_id: int`: 要 @ 用户 QQ 号 - -- **返回:** - - - `MessageSegment`: 消息段对象 - -#### _staticmethod_ `rps()` - -- **说明:** - - 构造猜拳消息段。 - -- **返回:** - - - `MessageSegment`: 消息段对象 - -#### _staticmethod_ `dice()` - -- **说明:** - - 构造掷骰子消息段。 - -- **返回:** - - - `MessageSegment`: 消息段对象 - -#### _staticmethod_ `shake()` - -- **说明:** - - 构造窗口抖动消息段。 - -- **返回:** - - - `MessageSegment`: 消息段对象 - -#### _staticmethod_ `anonymous(ignore_failure=False)` - -- **说明:** - - 构造匿名消息段。 - -- **参数:** - - - `ignore_failure: bool`: 是否忽略匿名失败,如果忽略,则匿名失败时仍使用真实身份发送消息 - -- **返回:** - - - `MessageSegment`: 消息段对象 - -#### _staticmethod_ `share(url, title, content='', image_url='')` - -- **说明:** - - 构造链接分享消息段。 - -- **参数:** - - - `url: str`: 链接 URL - - `title: str`: 卡片标题 - - `content: str`: 卡片内容 - - `image_url: str`: 图片 URL - -- **返回:** - - - `MessageSegment`: 消息段对象 - -#### _staticmethod_ `contact_user(id_)` - -- **说明:** - - 构造好友分享消息段。 - -- **参数:** - - - `id_: int`: 好友 QQ 号 - -- **返回:** - - - `MessageSegment`: 消息段对象 - -#### _staticmethod_ `contact_group(id_)` - -- **说明:** - - 构造群组分享消息段。 - -- **参数:** - - - `id_: int`: 群号 - -- **返回:** - - - `MessageSegment`: 消息段对象 - -#### _staticmethod_ `location(latitude, longitude, title='', content='')` - -- **说明:** - - 构造位置分享消息段。 - -- **参数:** - - - `latitude: float`: 纬度 - - `longitude: float`: 经度 - - `title: str`: 卡片标题 - - `content: str`: 卡片内容 - -- **返回:** - - - `MessageSegment`: 消息段对象 - -#### _staticmethod_ `music(type_, id_)` - -- **说明:** - - 构造音乐分享消息段。 - -- **参数:** - - - `type_: str`: 分享类型 - - `id_: int`: 音乐 ID - -- **返回:** - - - `MessageSegment`: 消息段对象 - -#### _staticmethod_ `music_custom(url, audio_url, title, content='', image_url='')` - -- **说明:** - - 构造自定义音乐分享消息段。 - -- **参数:** - - - `url: str`: 链接 URL - - `audio_url: str`: 音频 URL - - `title: str`: 卡片标题 - - `content: str`: 卡片内容 - - `image_url: str`: 图片 URL - -- **返回:** - - - `MessageSegment`: 消息段对象 - -### _class_ `Message` - -从 `aiocqhttp.message` 模块导入,继承自 `list`,用于表示一个消息。该类型是合法的 `Message_T`。 - -#### `__init__(msg=None)` - -- **说明:** - - 初始化消息对象。 - -- **参数:** - - - `msg: Optional[Message_T]`: 消息内容,若不传入则构造空消息 - -- **异常:** - - - `ValueError`: `msg` 参数不是一个合法的 `Message_T` - -- **用法:** - - ```python - msg = Message('你好') - ``` - -#### `__str__()` - -- **说明:** - - 将消息转换成字符串格式。 - -- **返回:** - - - `str`: 字符串格式的消息 - -- **用法:** - - ```python - str(event.message) - ``` - -#### `__add__(other)` - -- **说明:** - - 将两个消息对象拼接。 - -- **参数:** - - - `other: Message_T`: 任何符合 `Message_T` 类型的对象 - -- **返回:** - - - `Message`: 两个消息拼接的结果 - -- **异常:** - - - `ValueError`: `other` 参数不是一个合法的 `Message_T` - -- **用法:** - - ```python - msg = Message('你好') + ',世界!' - ``` - -#### `append(obj)` - -- **说明:** - - 将一个消息段拼接到当前消息的尾部。 - -- **参数:** - - - `obj: Any`: `MessageSegment` 对象,或任何可以传入 `MessageSegment` 构造函数的对象 - -- **返回:** - - - `None` - -- **异常:** - - - `ValueError`: `obj` 参数不是一个能够被识别的消息段 - -- **用法:** - - ```python - msg = Message('你好') - msg.append(MessageSegment.face(14)) - ``` - -#### `extend(msg)` - -- **说明:** - - 将一个消息拼接到当前消息的尾部。 - -- **参数:** - - - `msg: Any`: 字符串,或任何元素能够传入 `append()` 的 `Iterable` - -- **返回:** - - - `None` - -- **异常:** - - - `ValueError`: `msg` 参数不是一个能够被识别的消息 - -- **用法:** - - ```python - msg = Message('你好') - msg.extend('[CQ:face,id=14]') - ``` - -#### `extract_plain_text(reduce=False)` - -- **说明:** - - 从消息中提取类型为 `text` 的消息段,使用空格拼接。 - -- **参数:** - - - `reduce: bool`: 是否先化简消息段列表(合并相邻的 `text` 段),对于从 酷 Q 收到的消息,通常不需要开启 - -- **返回:** - - - `str`: 消息文本字符串 - -- **用法:** - - ```python - text = session.event.message.extract_plain_text() - ``` - - 提取事件上报的原始消息中的纯文本部分。 - -### `escape(s, *, escape_comma=True)` - -- **说明:** - - 从 `aiocqhttp.message` 模块导入,对字符串进行转义。 - -- **参数:** - - - `s: str`: 要转义的字符串 - - `escape_comma: bool`: 是否转义英文逗号 `,` - -- **返回:** - - - `str`: 转义后的字符串 - -### `unescape(s)` - -- **说明:** - - 从 `aiocqhttp.message` 模块导入,对字符串进行去转义。 - -- **参数:** - - - `s: str`: 要去转义的字符串 - -- **返回:** - - - `str`: 去转义后的字符串 - -## `nonebot.command` 模块 - -### _decorator_ `on_command(name, *, aliases=(), permission=perm.EVERYBODY, only_to_me=True, privileged=False, shell_like=False)` - -- **说明:** - - 将函数装饰为命令处理器。 - - 被装饰的函数将会获得一个 `args_parser` 属性,是一个装饰器,下面会有详细说明。 - -- **参数:** - - - `name: Union[str, CommandName_T]`: 命令名,如果传入的是字符串则会自动转为元组 - - `aliases: Union[Iterable[str], str]`: 命令别名 - - `permission: int`: 命令所需要的权限,不满足权限的用户将无法触发该命令 - - `only_to_me: bool`: 是否只响应确定是在和「我」(机器人)说话的命令(在开头或结尾 @ 了机器人,或在开头称呼了机器人昵称) - - `privileged: bool`: 是否特权命令,若是,则无论当前是否有命令会话正在运行,都会运行该命令,但运行不会覆盖已有会话,也不会保留新创建的会话 - - `shell_like: bool`: 是否使用类 shell 语法,若是,则会自动使用 `shlex` 模块进行分割(无需手动编写参数解析器),分割后的参数列表放入 `session.args['argv']` - -- **要求:** - - 被装饰函数必须是一个 async 函数,且必须接收且仅接收一个位置参数,类型为 `CommandSession`,即形如: - - ```python - async def func(session: CommandSession): - pass - ``` - -- **用法:** - - ```python - @on_command('echo', aliases=('复读',)) - async def _(session: CommandSession): - await session.send(session.current_arg) - ``` - - 一个简单的复读命令。 - -### _class_ `CommandGroup` - -命令组,用于声明一组有相同名称前缀的命令。 - -#### `basename` - -- **类型:** `CommandName_T` - -- **说明:** - - 命令名前缀。 - -#### `permission` - -- **类型:** `Optional[int]` - -- **说明:** - - 命令组内命令的默认 `permission` 属性。 - -#### `only_to_me` - -- **类型:** `Optional[bool]` - -- **说明:** - - 命令组内命令的默认 `only_to_me` 属性。 - -#### `privileged` - -- **类型:** `Optional[bool]` - -- **说明:** - - 命令组内命令的默认 `privileged` 属性。 - -#### `shell_like` - -- **类型:** `Optional[bool]` - -- **说明:** - - 命令组内命令的默认 `shell_like` 属性。 - -#### `__init__(name, permission=None, *, only_to_me=None, privileged=None, shell_like=None)` - -- **说明:** - - 初始化命令组,参数即为上面的三个属性。 - -- **参数:** - - - `name: Union[str, CommandName_T]`: 命令名前缀,若传入字符串,则会自动转换成元组 - - `permission: Optional[int]`: 对应 `permission` 属性 - - `only_to_me: Optional[bool]`: 对应 `only_to_me` 属性 - - `privileged: Optional[bool]`: 对应 `privileged` 属性 - - `shell_like: Optional[bool]`: 对应 `shell_like` 属性 - -#### _decorator_ `command(name, *, aliases=None, permission=None, only_to_me=None, privileged=None, shell_like=None)` - -- **说明:** - - 将函数装饰为命令组中的命令处理器。使用方法和 `on_command` 装饰器完全相同。 - -- **参数:** - - - `name: Union[str, CommandName_T]`: 命令名,注册命令处理器时会加上命令组的前缀 - - `aliases: Optional[Iterable[str]]`: 和 `on_command` 装饰器含义相同,若不传入则使用命令组默认值,若命令组没有默认值,则使用 `on_command` 装饰器的默认值 - - `permission: Optional[int]`: 同上 - - `only_to_me: Optional[bool]`: 同上 - - `privileged: Optional[bool]`: 同上 - - `shell_like: Optional[bool]`: 同上 - -- **用法:** - - ```python - sched = CommandGroup('scheduler') - - @sched.command('add', permission=PRIVATE) - async def _(session: CommandSession) - pass - ``` - - 注册 `('scheduler', 'add')` 命令。 - -### _class_ `CommandManager` - -#### `commands` - -- **类型:** `Dict[CommandName_T, Command]` - -- **说明:** - - 命令字典。 - -#### `aliases` - -- **类型:** `Dict[str, Command]` - -- **说明:** - - 命令别名字典。 - -#### `switches` - -- **类型:** `Dict[CommandName_T, bool]` - -- **说明:** - - 命令开关状态字典。 - -#### _class method_ `add_command(cls, cmd_name, cmd)` - -- **说明:** - - 注册一个 `Command` 对象。 - -- **参数:** - - - `cmd_name: CommandName_T`: 命令名称 - - `cmd: Command`: 命令对象 - -- **返回:** - - None - -- **用法:** - - ```python - cmd = Command(name, func, permission, only_to_me, privileged) - CommandManager.add_command(name, cmd) - ``` - -#### _class method_ `add_aliases(cls, aliases, cmd)` - -- **说明:** - - 为 `Command` 添加命令别名。 - -- **参数:** - - - `aliases: Union[Iterable[str], str]`: 命令别名列表 - -- **返回:** - - None - -- **用法:** - - ```python - cmd = Command(name, func, permission, only_to_me, privileged) - CommandManager.add_aliases({"别名", "test"}, cmd) - ``` - -#### _class method_ `reload_command(cls, cmd_name, cmd)` - -- **说明:** - - 更新一个已存在的命令。 - -- **参数:** - - - `cmd_name: CommandName_T`: 命令名称 - - `cmd: Command`: 命令对象 - -- **返回:** - - None - -- **用法:** - - ```python - cmd = Command(name, func, permission, only_to_me, privileged) - CommandManager.reload_command(name, cmd) - ``` - -#### _class method_ `remove_command(cls, cmd_name)` - -- **说明:** - - 移除一个已存在的命令。 - -- **参数:** - - - `cmd_name: CommandName_T`: 命令名称 - -- **返回:** - - - `bool`: 是否成功移除命令 - -- **用法:** - - ```python - CommandManager.remove_command(("test", )) - ``` - -#### _class method_ `switch_command_global(cls, cmd_name, state)` - -- **说明:** - - 根据 `state` 更改 command 的全局状态。 - -- **参数:** - - - `cmd_name: CommandName_T`: 命令名称 - - `state: Optional[bool]`: - - `None(default)`: 切换状态,即 开 -> 关、关 -> 开 - - `bool`: 切换至指定状态,`True` -> 开、`False` -> 关 - -- **返回:** - - None - -- **用法:** - - ```python - from nonebot import message_preprocessor - - # 全局关闭命令test, 对所有消息生效 - CommandManager.switch_command_global(("test", ), state=False) - - @message_preprocessor - async def processor(bot: NoneBot, event: CQEvent, plugin_manager: PluginManager): - plugin_manager.cmd_manager.switch_command_global(("test", ), state=False) - ``` - -#### `switch_command(self, cmd_name, state)` - -- **说明:** - - 根据 `state` 更改 command 的状态。仅对当前消息有效。 - -- **参数:** - - - `cmd_name: CommandName_T`: 命令名称 - - `state: Optional[bool]`: - - `None(default)`: 切换状态,即 开 -> 关、关 -> 开 - - `bool`: 切换至指定状态,`True` -> 开、`False` -> 关 - -- **返回:** - - None - -- **用法:** - - ```python - from nonebot import message_preprocessor - - # 关闭命令test, 仅对当前消息生效 - @message_preprocessor - async def processor(bot: NoneBot, event: CQEvent, plugin_manager: PluginManager): - plugin_manager.cmd_manager.switch_command(("test", ), state=False) - ``` - -### _class_ `CommandSession` - -继承自 `BaseSession` 类,表示命令 Session。 - -#### _readonly property_ `state` - -- **类型:** `State_T` - -- **说明:** - - 命令会话的状态数据(包括已获得的所有参数)。 - - 属性本身只读,但属性中的内容可读写。 - -- **用法:** - - ```python - if not session.state.get('initialized'): - # ... 初始化工作 - session.state['initialized'] = True - ``` - - 在命令处理函数的开头进行**每次命令调用只应该执行一次的初始化操作**。 - -#### _readonly property_ `args` - -- **类型:** `CommandArgs_T` - -- **说明:** - - 命令会话已获得的所有参数。 - -#### _readonly property_ `is_first_run` - -- **类型:** `bool` - -- **说明:** - - 命令会话是否第一次运行。 - -#### `current_key` - -- **类型:** `Optional[str]` - -- **说明:** - - 命令会话当前正在询问用户的参数的键(或称参数的名字)。第一次运行会话时,该属性为 `None`。 - -#### `current_arg` - -- **类型:** `str` - -- **说明:** - - 命令会话当前参数。实际上是 酷 Q 收到的消息去掉命令名的剩下部分,因此可能存在 CQ 码。 - -#### _readonly property_ `current_arg_text` - -- **类型:** `str` - -- **说明:** - - `current_arg` 属性的纯文本部分(不包含 CQ 码),各部分使用空格连接。 - -#### _readonly property_ `current_arg_images` - -- **类型:** `List[str]` - -- **说明:** - - `current_arg` 属性中所有图片的 URL 的列表,如果参数中没有图片,则为 `[]`。 - -#### _readonly property_ `argv` - -- **类型:** `List[str]` - -- **说明:** - - 命令参数列表,类似于 `sys.argv`,本质上是 `session.state.get('argv', [])`,**需要搭配 `on_command(..., shell_like=True)` 使用**。 - -- **用法:** - - ```python - @on_command('some_cmd', shell_like=True) - async def _(session: CommandSession): - argv = session.argv - ``` - -#### `get(key, *, prompt=None, arg_filters=None, **kwargs)` - -- **说明:** - - 从 `state` 属性获取参数,如果参数不存在,则暂停当前会话,向用户发送提示,并等待用户的新一轮交互。 - - 如果需要暂停当前会话,则命令处理器中,此函数调用之后的语句将不会被执行(除非捕获了此函数抛出的特殊异常)。 - - 注意,一旦传入 `arg_filters` 参数(参数过滤器),则等用户再次输入时,_command_func._`args_parser` 所注册的参数解析函数将不会被运行,而会在对 `current_arg` 依次运行过滤器之后直接将其放入 `state` 属性中。 - -- **参数:** - - - `key: Any`: 参数的键 - - `prompt: Optional[Message_T]`: 提示的消息内容 - - `arg_filters: Optional[List[Filter_T]]` : 用于处理和验证用户输入的参数的过滤器 - - `**kwargs: Any`: 其它传入 `BaseSession.send()` 的命名参数 - -- **返回:** - - - `Any`: 参数的值 - -- **用法:** - - ```python - location = session.get('location', prompt='请输入要查询的地区') - ``` - - 获取位置信息,如果当前还不知道,则询问用户。 - - ```python - from nonebot.command.argfilter import extractors, validators - - time = session.get( - 'time', prompt='你需要我在什么时间提醒你呢?', - arg_filters=[ - extractors.extract_text, # 取纯文本部分 - controllers.handle_cancellation(session), # 处理用户可能的取消指令 - str.strip, # 去掉两边空白字符 - # 正则匹配输入格式 - validators.match_regex(r'^\d{4}-\d{2}-\d{2}$', '格式不对啦,请重新输入') - ] - ) - ``` - - 获取时间信息,如果当前还不知道,则询问用户,等待用户输入之后,会依次运行 `arg_filters` 参数中的过滤器,以确保参数内容和格式符合要求。 - -#### `get_optional(key, default=None)` - -- **说明:** - - 从 `args` 属性获取参数,如果参数不存在,则返回默认值。等价于 `args.get(key, default)`。 - -- **参数:** - - - `key: Any`: 参数的键 - - `default: Optional[Any]`: 默认值 - -- **返回:** - - - `Any`: 参数的值,或 `default` 参数给出的默认值 - -- **用法:** - - ```python - time = session.get_optional('time') - ``` - - 获取可选的时间参数。 - -#### `pause(message=None, **kwargs)` - -- **说明:** - - 暂停当前命令会话,并发送消息。此函数调用之后的语句将不会被执行(除非捕获了此函数抛出的特殊异常)。 - -- **参数:** - - - `message: Optional[Message_T]`: 要发送的消息,若不传入则不发送 - - `**kwargs: Any`: 其它传入 `BaseSession.send()` 的命名参数 - -- **用法:** - - ```python - session.pause('请继续发送要处理的图片,发送 done 结束') - ``` - - 需要连续接收用户输入,并且过程中不需要改变 `current_key` 时,使用此函数暂停会话。 - -#### `finish(message=None, **kwargs)` - -- **说明:** - - 结束当前命令会话,并发送消息。此函数调用之后的语句将不会被执行(除非捕获了此函数抛出的特殊异常)。 - - 调用此函数后,命令将被视为已经完成,当前命令会话将被移除。 - -- **参数:** - - - `message: Optional[Message_T]`: 要发送的消息,若不传入则不发送 - - `**kwargs: Any`: 其它传入 `BaseSession.send()` 的命名参数 - -- **用法:** - - ```python - session.finish('感谢您的使用~') - ``` - -#### `switch(new_message)` - -- **说明:** - - 结束当前会话,改变当前消息事件中的消息内容,然后重新处理消息事件。 - - 此函数可用于从一个命令中跳出,将用户输入的剩余部分作为新的消息来处理,例如可实现以下对话: - - ``` - 用户:帮我查下天气 - Bot:你要查询哪里的天气呢? - 用户:算了,帮我查下今天下午南京到上海的火车票吧 - Bot:今天下午南京到上海的火车票有如下班次:blahblahblah - ``` - - 这里进行到第三行时,命令期待的是一个地点,但实际发现消息的开头是「算了」,于是调用 `switch('帮我查下今天下午南京到上海的火车票吧')`,结束天气命令,将剩下来的内容作为新的消息来处理(触发火车票插件的自然语言处理器,进而调用火车票查询命令)。 - -- **参数:** - - - `new_message: Message_T`: 要覆盖消息事件的新消息内容 - -- **用法:** - - ```python - @my_cmd.args_parser - async def _(session: CommandSession) - if not session.is_first_run and session.current_arg.startswith('算了,'): - session.switch(session.current_arg[len('算了,'):]) - ``` - - 使用「算了」来取消当前命令,转而进入新的消息处理流程。这个例子比较简单,实际应用中可以使用更复杂的 NLP 技术来判断。 - -### _coroutine_ `call_command(bot, event, name, *, current_arg='', args=None, check_perm=True, disable_interaction=False)` - -- **说明:** - - 从内部直接调用命令。可用于在一个插件中直接调用另一个插件的命令。 - -- **参数:** - - - `bot: NoneBot`: NoneBot 对象 - - `event: aiocqhttp.Event`: 事件对象 - - `name: Union[str, CommandName_T]`: 要调用的命令名 - - `current_arg: str`: 命令会话的当前输入参数 - - `args: Optional[CommandArgs_T]`: 命令会话的(初始)参数(将会被并入命令会话的 `state` 属性) - - `check_perm: bool`: 是否检查命令的权限,若否,则即使当前事件上下文并没有权限调用这里指定的命令,也仍然会调用成功 - - `disable_interaction: bool`: 是否禁用交互功能,若是,则该命令的会话不会覆盖任何当前已存在的命令会话,新创建的会话也不会保留 - -- **返回:** - - - `bool`: 命令是否调用成功 - -- **用法:** - - ```python - await call_command(bot, event, 'say', current_arg='[CQ:face,id=14]', check_perm=False) - ``` - - 从内部调用 `say` 命令,且不检查权限。 - -### `kill_current_session(event)` - -- **说明:** - - 强行移除当前已存在的任何命令会话,即使它正在运行。该函数可用于强制移除执行时间超过预期的命令,以保证新的消息不会被拒绝服务。 - -- **参数:** - - - `event: aiocqhttp.Event`: 事件对象 - -- **返回:** - - - `None` - -- **用法:** - - ```python - @on_command('kill', privileged=True) - async def _(session: CommandSession): - kill_current_session(session.event) - ``` - - 在特权命令 `kill` 中强行移除当前正在运行的会话。 - -## `nonebot.command.argfilter` 模块 - -本模块主要用于命令参数过滤相关的功能。 - -命令参数过滤器主要有下面几种: - -- 提取器,从用户输入的原始参数内容中提取需要的内容,`extractors` 子模块中提供了一些常用提取器 -- 修剪器,将用户输入的原始参数内容进行适当修建,例如 `str.strip` 可以去掉两遍的空白字符 -- 验证器,验证参数的格式、长度等是否符合要求,`validators` 子模块中提供了一些常用验证器 -- 转换器,将参数进行类型或格式上的转换,例如 `int` 可以将字符串转换成整数,`converters` 子模块中提供了一些常用转换器 -- 控制器,根据用户输入或当前会话状态对会话进行相关控制,例如当用户发送 `算了` 时停止当前会话,`controllers` 子模块中提供了一些常用控制器 - -### _class_ `ValidateError` - -用于表示验证失败的异常类。 - -#### `message` - -- **类型:** `Optional[Message_T]` - -- **说明:** - - 验证失败时要发送的错误提示消息。如果为 `None`,则使用配置中的 `DEFAULT_VALIDATION_FAILURE_EXPRESSION`。 - -## `nonebot.command.argfilter.extractors` 模块 - -提供几种常用的提取器。 - -### `extract_text` - -- **说明:** - - 提取消息中的纯文本部分(使用空格合并纯文本消息段)。 - -- **输入类型:** `Message_T` - -- **输出类型:** `str` - -### `extract_image_urls` - -- **说明:** - - 提取消息中的图片 URL 列表。 - -- **输入类型:** `Message_T` - -- **输出类型:** `List[str]` - -### `extract_numbers` - -- **说明:** - - 提取消息中的所有数字(浮点数)。 - -- **输入类型:** `Message_T` - -- **输出类型:** `List[float]` - -## `nonebot.command.argfilter.validators` 模块 - -提供几种常用的验证器。 - -这些验证器的工厂函数全都接受可选参数 `message: Optional[Message_T]`,用于在验证失败时向用户发送错误提示。使用这些的验证器时,必须先调用验证器的工厂函数,其返回结果才是真正的验证器,例如: - -```python -session.get('arg1', prompt='请输入 arg1:', - arg_filters=[extract_text, not_empty('输入不能为空')]) -``` - -注意 `extract_text` 和 `not_empty` 使用上的区别。 - -### `not_empty(message=None)` - -- **说明:** - - 验证输入不为空。 - -- **输入类型:** `Any` - -- **输出类型:** `Any` - -### `fit_size(min_length=0, max_length=None, message=None)` - -- **说明:** - - 验证输入的长度(大小)在 `min_length` 到 `max_length` 之间(包括两者)。 - -- **参数:** - - - `min_length: int`: 最小长度 - - `max_length: Optional[int]`: 最大长度 - -- **输入类型:** `Sized` - -- **输出类型:** `Sized` - -### `match_regex(pattern, message=None, *, flags=0, fullmatch=False)` - -- **说明:** - - 验证输入是否匹配正则表达式。 - -- **参数:** - - - `pattern: str`: 正则表达式 - - `flags`: 传入 `re.compile()` 的标志 - - `fullmatch: bool`: 是否使用完全匹配(`re.fullmatch()`) - -- **输入类型:** `str` - -- **输出类型:** `str` - -### `ensure_true(bool_func, message=None)` - -- **说明:** - - 验证输入是否能使给定布尔函数返回 `True`。 - -- **参数:** - - - `bool_func: Callable[[Any], bool]`: 接受输入、返回布尔值的函数 - -- **输入类型:** `Any` - -- **输出类型:** `Any` - -### `between_inclusive(start=None, end=None, message=None)` - -- **说明:** - - 验证输入是否在 `start` 到 `end` 之间(包括两者)。 - -- **参数:** - - - `start`: 范围开始 - - `end`: 范围结束 - -- **输入类型:** `Comparable` - -- **输出类型:** `Comparable` - -## `nonebot.command.argfilter.converters` 模块 - -提供几种常用的转换器。 - -### `simple_chinese_to_bool` - -- **说明:** - - 将中文(`好`、`不行` 等)转换成布尔值。 - -- **输入类型:** `str` - -- **输出类型:** `Optional[bool]` - -### `split_nonempty_lines` - -- **说明:** - - 按行切割文本,并忽略所有空行。 - -- **输入类型:** `str` - -- **输出类型:** `List[str]` - -### `split_nonempty_stripped_lines` - -- **说明:** - - 按行切割文本,并对每一行进行 `str.strip`,再忽略所有空行。 - -- **输入类型:** `str` - -- **输出类型:** `List[str]` - -## `nonebot.command.argfilter.controllers` 模块 - -提供几种常用的控制器。 - -这些验证器通常需要提供一些参数进行一次调用,返回的结果才是真正的验证器,其中的技巧在于通过闭包使要控制的对象能够被内部函数访问。 - -### `handle_cancellation(session)` - -- **说明:** - - 在用户发送 `算了`、`不用了`、`取消吧`、`停` 之类的话的时候,结束当前传入的命令会话(调用 `session.finish()`),并发送配置项 `SESSION_CANCEL_EXPRESSION` 所填的内容。 - - 如果不是上述取消指令,则将输入原样输出。 - -- **参数:** - - - `session: CommandSession`: 要控制的命令会话 - -- **输入类型:** `Any` - -- **输出类型:** `Any` - -## `nonebot.natural_language` 模块 - -### _decorator_ `on_natural_language(keywords=None, *, permission=EVERYBODY, only_to_me=True, only_short_message=True, allow_empty_message=False)` - -- **说明:** - - 将函数装饰为自然语言处理器。 - -- **参数:** - - - `keywords: Optional[Union[Iterable, str]]`: 要响应的关键词,若传入 `None`,则响应所有消息 - - `permission: int`: 自然语言处理器所需要的权限,不满足权限的用户将无法触发该处理器 - - `only_to_me: bool`: 是否只响应确定是在和「我」(机器人)说话的消息(在开头或结尾 @ 了机器人,或在开头称呼了机器人昵称) - - `only_short_message: bool`: 是否只响应短消息 - - `allow_empty_message: bool`: 是否响应内容为空的消息(只有 @ 或机器人昵称) - -- **要求:** - - 被装饰函数必须是一个 async 函数,且必须接收且仅接收一个位置参数,类型为 `NLPSession`,即形如: - - ```python - async def func(session: NLPSession): - pass - ``` - -- **用法:** - - ```python - @on_natural_language({'天气'}, only_to_me=False) - async def _(session: NLPSession): - return NLPResult(100.0, ('weather',), None) - ``` - - 响应所有带有「天气」关键词的消息,当做 `weather` 命令处理。 - -### _class_ `NLPSession` - -继承自 `BaseSession` 类,表示自然语言处理 Session。 - -#### `msg` - -- **类型:** `str` - -- **说明:** - - 以字符串形式表示的消息内容,已去除开头的 @ 和机器人称呼,可能存在 CQ 码。 - -#### `msg_text` - -- **类型:** `str` - -- **说明:** - - 消息内容的纯文本部分,已去除所有 CQ 码/非 `text` 类型的消息段。各纯文本消息段之间使用空格连接。 - -#### `msg_images` - -- **类型:** `List[str]` - -- **说明:** - - 消息内容中所有图片的 URL 的列表,如果消息中没有图片,则为 `[]`。 - -### _class_ `IntentCommand` - -用于表示自然语言处理之后得到的意图命令,是一个 namedtuple,由自然语言处理器返回。 - -#### `confidence` - -- **类型:** `float` - -- **说明:** - - 意图的置信度,即表示对当前推测的用户意图有多大把握。 - -#### `name` - -- **类型:** `Union[str, CommandName_T]` - -- **说明:** - - 命令的名字。 - -#### `args` - -- **类型:** `Optional[CommandArgs_T]` - -- **说明:** - - 命令的(初始)参数。 - -#### `current_arg` - -- **类型:** `Optional[str]` - -- **说明:** - - 命令的当前输入参数。 - -#### `__init__(confidence, name, args=None, current_arg=None)` - -- **说明:** - - 初始化 `IntentCommand` 对象,参数即为上面的几个属性。 - -### _class_ `NLPResult` - -用于表示自然语言处理的结果,是一个 namedtuple,由自然语言处理器返回。 - -#### `confidence` - -- **类型:** `float` - -- **说明:** - - 自然语言处理结果的置信度,即消息意图确实符合此 `NLPResult` 的概率。 - -#### `cmd_name` - -- **类型:** `Union[str, CommandName_T]` - -- **说明:** - - 消息所对应的命令的名称。 - -#### `cmd_args` - -- **类型:** `Optional[CommandArgs_T]` - -- **说明:** - - 消息所对应的命令的参数。 - -#### `__init__(confidence, cmd_name, cmd_args=None)` - -- **说明:** - - 初始化 `NLPResult` 对象,参数即为上面的三个属性。 - -## `nonebot.notice_request` 模块 - -### _decorator_ `on_notice(*events)` - -- **说明:** - - 将函数装饰为通知处理器。 - -- **参数:** - - - `*events: str`: 要处理的通知类型(`notice_type`),若不传入,则处理所有通知 - -- **要求:** - - 被装饰函数必须是一个 async 函数,且必须接收且仅接收一个位置参数,类型为 `NoticeSession`,即形如: - - ```python - async def func(session: NoticeSession): - pass - ``` - -- **用法:** - - ```python - @on_notice - async def _(session: NoticeSession): - logger.info('有新的通知事件:%s', session.event) - - @on_notice('group_increase') - async def _(session: NoticeSession): - await session.send('欢迎新朋友~') - ``` - - 收到所有通知时打日志,收到新成员进群通知时除了打日志还发送欢迎信息。 - -### _decorator_ `on_request(*events)` - -- **说明:** - - 将函数装饰为请求处理器。 - -- **参数:** - - - `*events: str`: 要处理的请求类型(`request_type`),若不传入,则处理所有请求 - -- **要求:** - - 被装饰函数必须是一个 async 函数,且必须接收且仅接收一个位置参数,类型为 `RequestSession`,即形如: - - ```python - async def func(session: RequestSession): - pass - ``` - -- **用法:** - - ```python - @on_request - async def _(session: RequestSession): - logger.info('有新的请求事件:%s', session.event) - - @on_request('group') - async def _(session: RequestSession): - await session.approve() - ``` - - 收到所有请求时打日志,收到群请求时除了打日志还同意请求。 - -### _class_ `NoticeSession` - -继承自 `BaseSession` 类,表示通知类事件的 Session。 - -### _class_ `RequestSession` - -继承自 `BaseSession` 类,表示请求类事件的 Session。 - -#### _coroutine_ `approve(remark='')` - -- **说明:** - - 同意当前请求。 - -- **参数:** - - - `remark: str`: 好友备注,只在好友请求时有效 - -- **返回:** - - - `None` - -- **异常:** - - - `CQHttpError`: 发送失败时抛出,实际由 [aiocqhttp] 抛出,等价于 `aiocqhttp.Error` - -- **用法:** - - ```python - await session.approve() - ``` - -#### _coroutine_ `reject(reason='')` - -- **说明:** - - 拒绝当前请求。 - -- **参数:** - - - `reason: str`: 拒绝理由,只在群请求时有效 - -- **返回:** - - - `None` - -- **异常:** - - - `CQHttpError`: 发送失败时抛出,实际由 [aiocqhttp] 抛出,等价于 `aiocqhttp.Error` - -- **用法:** - - ```python - await session.reject() - ``` - -## `nonebot.session` 模块 - -### _class_ `BaseSession` - -基础 session 类,`CommandSession` 等均继承自此类。 - -#### `bot` - -- **类型:** `NoneBot` - -- **说明:** - - Session 对应的 NoneBot 对象。 - -- **用法:** - - ```python - await session.bot.send('hello') - ``` - - 在当前 Session 对应的上下文中发送 `hello`。 - -#### `event` - -- **类型:** `aiocqhttp.Event` - -- **说明:** - - CQHTTP 上报的事件数据对象,具体请参考 [`aiocqhttp.Event`](https://python-aiocqhttp.cqp.moe/module/aiocqhttp/index.html#aiocqhttp.Event) 和 [事件上报](https://cqhttp.cc/docs/#/Post)。 - -- **用法:** - - ```python - user_id = session.event['user_id'] - group_id = session.event.group_id - ``` - - 获取当前事件的 `user_id` 和 `group_id` 字段。 - -#### `ctx` - -- **类型:** `aiocqhttp.Event` - -- **说明:** - - CQHTTP 上报的事件数据对象,或称事件上下文,具体请参考 [事件上报](https://cqhttp.cc/docs/#/Post)。 - -- **用法:** - - ```python - user_id = session.ctx['user_id'] - ``` - - 获取当前事件的 `user_id` 字段。 - -#### _readonly property_ `self_id` - -- **类型:** `int` - -- **说明:** - - 当前 session 对应的 QQ 机器人账号,在多个机器人账号使用同一个 NoneBot 后端时可用于区分当前收到消息或事件的是哪一个机器人。 - - 等价于 `session.event.self_id`。 - -- **用法:** - - ```python - await bot.send_private_msg(self_id=session.self_id, user_id=12345678, message='Hello') - ``` - -#### _coroutine_ `send(message, *, at_sender=False, ensure_private=False, ignore_failure=True, **kwargs)` - -- **说明:** - - 发送消息到 Session 对应的上下文中。 - -- **参数:** - - - `message: Message_T`: 要发送的消息内容 - - `at_sender: bool`: 是否 @ 发送者,对私聊不起作用 - - `ensure_private: bool`: 确保消息发送到私聊,对于群组和讨论组消息上下文,会私聊发送者 - - `ignore_failure: bool`: 发送失败时忽略 `CQHttpError` 异常 - - `**kwargs: Any`: 其它传入 `CQHttp.send()` 的命名参数 - -- **返回:** - - - `Any` : 返回 CQHTTP 插件发送消息接口的调用返回值,具体见 aiocqhttp 的 [API 调用](https://github.com/richardchien/python-aiocqhttp#api-%E8%B0%83%E7%94%A8) - -- **异常:** - - - `CQHttpError`: 发送失败时抛出,实际由 [aiocqhttp] 抛出,等价于 `aiocqhttp.Error` - -- **用法:** - - ```python - await session.send('hello') - ``` - - 在当前 Session 对应的上下文中发送 `hello`。 - -## `nonebot.permission` 模块 - -### 权限声明常量 - -- `PRIVATE_FRIEND`: 好友私聊 -- `PRIVATE_GROUP`: 群临时私聊 -- `PRIVATE_DISCUSS`: 讨论组临时私聊 -- `PRIVATE_OTHER`: 其它私聊 -- `PRIVATE`: 任何私聊 -- `DISCUSS`: 讨论组 -- `GROUP_MEMBER`: 群成员 -- `GROUP_ADMIN`: 群管理员 -- `GROUP_OWNER`: 群主 -- `GROUP`: 任何群成员 -- `SUPERUSER`: 超级用户 -- `EVERYBODY`: 任何人 - -用于权限声明的常量可通过 `|` 合并,在命令或自然语言处理器装饰器的 `permission` 参数中传入,表示允许触发相应命令或自然语言处理器的用户类型。 - -例如下面的代码中,只有私聊和群管理员可以访问 `hello` 命令: - -```python -@nonebot.on_command('hello', permission=PRIVATE | GROUP_ADMIN) -async def _(session): - pass -``` - -需要注意的是,当一个用户是「群管理员」时,ta 同时也是「群成员」;当 ta 是「群主」时,ta 同时也是「群管理员」和「群成员」。 - -### _coroutine_ `check_permission(bot, event, permission_required)` - -- **说明:** - - 检查用户是否具有所要求的权限。 - -- **参数:** - - - `bot: NoneBot`: NoneBot 对象 - - `event: aiocqhttp.Event`: 消息事件对象 - - `permission_required: int`: 要求的权限值 - -- **返回:** - - - `bool`: 消息事件所对应的上下文是否具有所要求的权限 - -- **用法:** - - ```python - has_perm = await check_permission(bot, event, cmd.permission) - ``` - -## `nonebot.log` 模块 - -### `logger` - -- **类型:** `logging.Logger` - -- **说明:** - - NoneBot 全局的 logger。 - -- **用法:** - - ```python - logger.debug('Some log message here') - ``` - -## `nonebot.helpers` 模块 - -### `context_id(event, *, mode='default', use_hash=False)` - -- **说明:** - - 获取事件对应的上下文的唯一 ID。 - -- **参数:** - - - `event: aiocqhttp.Event`: 事件对象 - - `mode: str`: ID 的计算模式 - - `'default'`: 默认模式,任何一个上下文都有其唯一 ID - - `'group'`: 群组模式,同一个群组或讨论组的上下文(即使是不同用户)具有相同 ID - - `'user'`: 用户模式,同一个用户的上下文(即使在不同群组)具有相同 ID - - `use_hash: bool`: 是否将计算出的 ID 使用 MD5 进行哈希 - -- **返回:** - - - `str`: 事件对应的上下文的唯一 ID - -- **用法:** - - ```python - ctx_id = context_id(session.event, use_hash=True) - ``` - - 获取当前 Session 的事件对应的上下文的唯一 ID,并进行 MD5 哈希,得到的结果可用于图灵机器人等 API 的调用。 - -### _coroutine_ `send(bot, event, message, *, ensure_private=False, ignore_failure=True, **kwargs)` - -- **说明:** - - 发送消息到指定事件的上下文中。 - -- **参数:** - - - `bot: NoneBot`: NoneBot 对象 - - `event: aiocqhttp.Event`: 事件对象 - - `message: Message_T`: 要发送的消息内容 - - `ensure_private: bool`: 确保消息发送到私聊,对于群组和讨论组消息上下文,会私聊发送者 - - `ignore_failure: bool`: 发送失败时忽略 `CQHttpError` 异常 - - `**kwargs: Any`: 其它传入 `CQHttp.send()` 的命名参数 - -- **返回:** - - - `Any` : 返回 CQHTTP 插件发送消息接口的调用返回值,具体见 aiocqhttp 的 [API 调用](https://github.com/richardchien/python-aiocqhttp#api-%E8%B0%83%E7%94%A8) - -- **异常:** - - - `CQHttpError`: 发送失败时抛出,实际由 [aiocqhttp] 抛出,等价于 `aiocqhttp.Error` - -- **用法:** - - ```python - await send(bot, event, 'hello') - ``` - -### `render_expression(expr, *args, escape_args=True, **kwargs)` - -- **说明:** - - 渲染 Expression。 - -- **参数:** - - - `expr: Expression_T`: 要渲染的 Expression,对于 Expression 的三种类型:`str`、`Sequence[str]`、`Callable`,行为分别是: - - `str`:以 `*args`、`**kwargs` 为参数,使用 `str.format()` 进行格式化 - - `Sequence[str]`:随机选择其中之一,进行上面 `str` 的操作 - - `Callable`:以 `*args`、`**kwargs` 为参数,调用该可调用对象/函数,对返回的字符串进行上面 `str` 的操作 - - `escape_args: bool`: 是否对渲染参数进行转义 - - `*args: Any`: 渲染参数 - - `**kwargs: Any`: 渲染参数 - -- **返回:** - - - `str`: 渲染出的消息字符串 - -- **用法:** - - ```python - msg1 = render_expression( - ['你好,{username}!', '欢迎,{username}~'], - username=username - ) - msg2 = render_expression('你所查询的城市是{}', city) - ``` - -## `nonebot.argparse` 模块 - -### _class_ `ArgumentParser` - -继承自 `argparse.ArgumentParser` 类,修改部分函数实现使其适用于命令型聊天机器人。 - -此类可用于命令参数的解析。基本用法和 Python 内置的 `argparse.ArgumentParser` 类一致,下面主要列出与 Python 原生含义和行为不同的属性和方法。 - -- **用法:** - - ```python - USAGE = r""" - 创建计划任务 - - 使用方法: - XXXXXX - """.strip() - - @on_command('schedule', shell_like=True) - async def _(session: CommandSession): - parser = ArgumentParser(session=session, usage=USAGE) - parser.add_argument('-S', '--second') - parser.add_argument('-M', '--minute') - parser.add_argument('-H', '--hour') - parser.add_argument('-d', '--day') - parser.add_argument('-m', '--month') - parser.add_argument('-w', '--day-of-week') - parser.add_argument('-f', '--force', action='store_true', default=False) - parser.add_argument('-v', '--verbose', action='store_true', default=False) - parser.add_argument('--name', required=True) - parser.add_argument('commands', nargs='+') - - args = parser.parse_args(session.argv) - name = args.name - # ... - ``` - -#### `__init__(session=None, usage=None, **kwargs)` - -- **说明:** - - 初始化 `ArgumentParser` 对象。 - -- **参数:** - - - `session: CommandSession`: 当前需要解析参数的命令会话,用于解析失败或遇到 `--help` 时发送提示消息 - - `usage: str`: 命令的使用帮助,在参数为空或遇到 `--help` 时发送 - - `**kwargs: Any`: 和 Python `argparse.ArgumentParser` 类一致 - -#### `parse_args(args=None, namespace=None)` - -- **说明:** - - 解析参数。 - - Python 原生的「打印到控制台」行为变为「发送消息到用户」,「退出程序」变为「结束当前命令会话」。 - -- **参数:** - - 和 Python `argparse.ArgumentParser` 类一致。 - -- **异常:** - - 无。 - -## `nonebot.sched` 模块 - -### _class_ `Scheduler` - -继承自 `apscheduler.schedulers.asyncio.AsyncIOScheduler` 类,功能不变。 - -当 Python 环境中没有安装 APScheduler 包时,此类不存在,`Scheduler` 为 `None`。 - - - -[aiocqhttp]: https://github.com/richardchien/python-aiocqhttp/ diff --git a/docs/assets/diagram.png b/docs/assets/diagram.png deleted file mode 100644 index 9eaef136d4e4e606b5c64a7c216358ade4d81e0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30630 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 20000000, '必须大于2000000') - ], - at_sender=True, - ) - arg1_derived = arg1 + 42 - session.state['arg1_derived'] = arg1_derived # 修改会话状态 - - arg2 = session.get( - 'arg2', - prompt='请输入参数2', - arg_filters=[ - extractors.extract_image_urls, # 提取图片 URL 列表 - '\n'.join, # 使用换行符拼接 URL 列表 - validators.not_empty('请至少发送一张图片'), - ] - ) - - arg3 = session.get('arg3', prompt='你的arg3是什么呢?') - - reply = f'arg1_derived:\n{arg1_derived}\n\narg2:\n{arg2}\n\narg3:\n{arg3}' - session.finish(reply) - - -@demo.args_parser -async def _(session: CommandSession): - if session.is_first_run and session.current_arg_text.strip(): - # 第一次运行,如果有参数,则设置给 arg3 - session.state['arg3'] = session.current_arg_text.strip() - - # 如果不需要对参数进行特殊处理,则不用再手动加入 state,NoneBot 会自动放进去 - - -@on_natural_language(keywords={'demo'}) -async def _(session: NLPSession): - return IntentCommand(90.0, 'demo', current_arg='这是我的arg3') -``` - -## v1.1.0 - -- 插件模块现可通过 `__plugin_name__` 和 `__plugin_usage__` 来分别指定插件名称和插件使用方法(两者均不强制,若不设置则默认为 `None`) -- 新增 `nonebot.plugin.get_loaded_plugins()` 函数用于获取所有已加载的插件集合 -- `BaseSession.send()` 方法和 `nonebot.helpers.send()` 函数现返回 API 调用返回值(即 CQHTTP 插件的返回结果的 `data` 字段) -- `BaseSession` 新增 `self_id` 属性,可通过 `session.self_id` 代替 `session.ctx['self_id']` 来获取当前机器人账号 -- `only_to_me` 的命令现可以通过在消息结尾 @ 机器人触发,而不必在开头 - -## v1.0.0 - -- 更改包名为 `nonebot`,请注意修改导入语句,原先 `import none` 改为 `import nonebot`,`from none import something` 改为 `from nonebot import something`,`none.something` 改为 `nonebot.something`,如果代码量比较大,可以使用 `import nonebot as none`,以避免过多更改 -- `nonebot.command.kill_current_session()` 方法去掉了 `bot` 参数,现只需传入 `ctx` - -## v0.5.3 - -- 修复使用多级命令时,命令查找会出现异常的情况 -- 调整 `none.load_plugins()` 等方法,返回加载成功的插件数量,并新增 `none.load_plugin()` 方法用于加载单个插件模块 - -## v0.5.2 - -- 修复自然语言处理器匹配机器人昵称时的 bug -- 修复一些与异常处理有关的小问题 - -## v0.5.1 - -- 给所有发送消息的函数和方法(`BaseSession.send()`、`CommandSession.pause()`、`CommandSession.finish()` 等)新增了 `**kwargs`,并将此参数继续传递给 python-aiocqhttp 的 `CQHttp.send()` 方法,从而支持 `at_sender` 参数(默认 `False`),**注意,此功能需要安装 `aiocqhttp>=0.6.7`** -- `BaseSession.send()` 方法新增 `ensure_private` 参数,类型 `bool`,默认 `False`,可用于确保发送消息到私聊(对于群消息,会私聊发送给发送人) - -## v0.5.0 - -- 修复调用不存在的多级命令(例如 `/echo/nonexist`)时,抛出异常导致 WebSocket 连接断开的问题 -- 调整 Expression 相关接口:移除了所有 `send_expr()` 函数和方法,移除了 `CommandSession.get()` 方法的 `prompt_expr` 参数,移除了 `none.expression` 模块,原 `render()` 函数移动到 `none.helpers` 模块并改名为 `render_expression()` -- 修改 `none.argparse.ArgumentParser` 类的构造方法和 `parse_args()` 方法:构造方法新增 `session` 参数,可传入 `CommandSession` 对象;`parse_args()` 方法可直接用于解析参数,用户输入的参数错误,会发送错误提示或使用帮助 -- `on_command` 装饰器新增 `shell_like` 参数,设为 `True`(默认 `False`)将自动以类 shell 语法分割命令参数 `current_arg`(不再需要自行编写 args parser),并将分割后的参数列表放入 `session.args['argv']` -- `CommandSession` 类新增 `argv` 只读属性,用于获取 `session.args['argv']`,如不存在,则返回空列表 - -## v0.4.3 - -- 自然语言处理器支持响应只有机器人昵称而没有实际内容的消息,通过 `on_natural_language` 的 `allow_empty_message` 参数开启(默认关闭) - -## v0.4.2 - -- 修复命令处理器中抛出异常导致运行超时 `SESSION_RUN_TIMEOUT` 不生效的问题 - -## v0.4.1 - -- `load_plugins()` 导入模块失败时打印错误信息,且日志级别从 warning 改为 error -- 修复 `CommandName_T` 的问题 -- 修复特权命令在不满足 `to_me` 条件时没有被当做现有 session 的新参数的问题 - -## v0.4.0 - -- `message_preprocessor` 装饰器现要求被装饰函数接收 `bot` 和 `ctx` 两个参数 -- 调整了 Type Hint,使其更准确,并新增 `none.typing` 模块,提供部分常用类型 -- 规范部分模块的导入,现可通过 `none.Message` 访问 `aiocqhttp.Message`,通过 `none.CQHttpError` 访问 `aiocqhttp.Error` - -## v0.3.2 - -- `none.message` 模块现已导入所有 `aiocqhttp.message` 中的内容,因此不必再从后者导入 `Message`、`escape` 等类和函数 -- 命令的运行加入了超时机制,可通过 `SESSION_RUN_TIMEOUT` 配置,类型为 `datetime.timedelta`,默认为 `None` 表示永不超时 -- `on_command` 装饰器新增 `privileged` 参数,可将命令设置为特权命令,特权命令即使在已存在其它 CommandSession 的情况下也会运行,但它不会覆盖当前 CommandSession -- 新增 `none.command.kill_current_session()` 函数用于杀死当前已存在的 CommandSession(不会终止已经在运行的命令,但会移除 session 对象) - -## v0.3.1 - -- 调整计划任务的启动时间,修复创建任务后无法立即获取下次运行时间的 bug - -## v0.3.0 - -- 内置可选的计划任务功能(需要安装 APScheduler) - -## v0.2.2 - -- 修复快速的连续消息导致报错问题 [#5](https://github.com/richardchien/nonebot/issues/5) diff --git a/docs/glossary.md b/docs/glossary.md deleted file mode 100644 index 0a5ec9ff..00000000 --- a/docs/glossary.md +++ /dev/null @@ -1,140 +0,0 @@ ---- -sidebar: auto ---- - -# 术语表 - -## 酷Q - -[酷Q](https://cqp.cc) 是一个易语言编写的 QQ 机器人平台,其本身没有任何具体的功能,只是负责实现 QQ 协议,并以 DLL 导出函数的形式向插件提供 API 和事件上报。 - -## CQHTTP 插件 - -[CQHTTP 插件](https://cqhttp.cc/)即 CoolQ HTTP API 插件,是 酷Q 的一个第三方插件,用于将 酷Q 所提供的所有 DLL 接口转换为 HTTP 或 WebSocket 的 web 形式,从而使利用任意语言编写 酷Q 插件成为可能。 - -有时被称为 cqhttp、CQHTTP、酷Q HTTP API 等。 - -## aiocqhttp - -[aiocqhttp](https://github.com/richardchien/python-aiocqhttp)(或称 python-aiocqhttp)是 CQHTTP 插件的一个 Python 异步 SDK,基于 asyncio,在 Quart 的基础上封装了与 CQHTTP 插件的网络交互。 - -## asyncio - -[asyncio](https://docs.python.org/3/library/asyncio.html) 是 Python 3.4 引入的一个模块,实际上它是 Python 中整个基于事件循环(Event Loop)的异步 I/O 编程机制。 - -## Quart - -[Quart](https://pgjones.gitlab.io/quart/) 是一个基于异步 I/O 的 web 框架,支持 HTTP 和 WebSocket,是 aiocqhttp 的基础。 - -## 异步 I/O - -有时直接称为「异步」,是一种对 I/O 操作的处理方式,它可以在单个线程内实现非阻塞 I/O,即在 I/O 操作进行时,仍可以调度程序的其它部分。在 Python 3.4+ 中,asyncio 模块提供的异步 I/O 调度的基本单位是「协程(Coroutine)」,通过 `await` 关键字即可在进行 I/O 操作时将程序的执行权转移给其它协程,直到 I/O 结束再次被唤起。 - -## 通信方式 - -CQHTTP 插件中的一个术语,表示其与通过 web 技术编写的 酷Q 插件之间通信的手段。 - -目前 CQHTTP 插件支持 HTTP、WebSocket、反向 WebSocket 三种通信方式,见 [通信方式](https://cqhttp.cc/docs/#/CommunicationMethods),NoneBot 支持其中的 HTTP 和反向 WebSocket。 - -## 负载均衡 - -多个 QQ 连接到同一个后端,使用同一套逻辑分别服务不同的用户和群,以防止单个 QQ 无法承受过大的消息量或被腾讯封禁。 - -## 命令 - -NoneBot 主要支持的插件形式之一,主要用于处理符合特定格式的、意图明确的用户消息,例如: - -``` -天气 南京 明天 -/echo 喵喵喵 -note.add 这是一条笔记 -``` - -上面的每行都符合一种固定的格式,消息的第一个空格左边是命令的名字(可能包含命令的起始符和分隔符),右边是命令所需的参数,可能以空格分隔,或是完全作为单个参数。 - -你可以将命令理解为操作系统中的命令行程序,NoneBot 执行命令就像在 Shell 中运行程序一样: - -```bash -docker run hello-world -``` - -## 可交互命令 - -能够和用户「对话」的命令,称为可交互命令。 - -## 命令处理器 - -或称为「命令处理函数」,有时也简称为「命令」,是 NoneBot 插件中实际用于实现某个命令功能的函数。 - -通过 `nonebot.on_command` 装饰器可以将一个函数注册为命令处理器,例如: - -```python -from nonebot import on_command - -@on_command('echo') -async def echo(session): - pass -``` - -## 自然语言处理器 - -或称为「自然语言处理函数」,是 NoneBot 插件中用于将用户的自然语言消息解析为命令和参数的函数。 - -通过 `nonebot.on_natural_language` 装饰器可以将一个函数注册为自然语言处理器,例如: - -```python -from nonebot import on_natural_language - -@on_natural_language -async def _(session): - pass -``` - -## 会话(Session) - -是命令处理器、自然语言处理器等插件形式被调用时传入的一个包含有当前消息上下文的对象,它根据当前的插件形式的不同而不同,例如命令处理器拿到的 Session 是 `CommandSession` 类型,而自然语言处理器拿到的是 `NLPSession` 类型,不同类型的 Session 包含的属性不太一样,能进行的操作也有所区别。 - -特别地,命令的 Session 在需要和用户交互的情况下,会一直保留到下一次调用,以保证命令的多次交互能够共享数据。 - -## 表达(Expression) - -是 NoneBot 支持的一种消息渲染的机制,可以通过随机选择或函数生成+字符串格式化的方式根据参数生成出自然的、不固定的消息回复,提升用户体验。 - -Expression 可以是一个 `str`、元素类型是 `str` 的序列(一般为 `list` 或 `tuple`)或返回类型为 `str` 的 `Callable`。 - -## CQ 码 - -是 酷Q 用来表示非文本消息的一种表示方法,形如 `[CQ:image,file=ABC.jpg]`。具体的格式规则,请参考 酷Q 文档的 [CQ 码](https://d.cqp.me/Pro/CQ%E7%A0%81) 和 CQHTTP 插件文档的 [CQ 码](https://cqhttp.cc/docs/#/CQCode)。 - -## 消息段 - -是 CQHTTP 定义的、和 CQ 码可以互相转换的一个消息表示格式,具体表示方式见 [消息格式](https://cqhttp.cc/docs/#/Message)。 - -除了纯文本消息段之外,每一个消息段都和一个 CQ 码对应,例如下面这个消息段: - -```json -{ - "type": "face", - "data": { - "id": "14" - } -} -``` - -对应的 CQ 码表示形式就是: - -``` -[CQ:face,id=14] -``` - -具体的,NoneBot 中使用 `MessageSegment` 类来表示消息段(继承自 aiocqhttp),例如,要创建上面这个消息段,可以使用如下代码: - -```python -seg = MessageSegment(type="face", data={"id": "14"}) -``` - -或: - -```python -seg = MessageSegment.face(14) -``` diff --git a/docs/guide/README.md b/docs/guide/README.md deleted file mode 100644 index 2237569e..00000000 --- a/docs/guide/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# 概览 - -:::tip 提示 -如果在阅读本文档时遇到难以理解的词汇,请随时查阅 [术语表](../glossary.md) 或使用 [Google 搜索](https://www.google.com/ncr)。 -::: - -:::tip 提示 -初次使用时可能会觉得这里的概览过于枯燥,可以先简单略读之后直接前往 [安装](./installation.md) 查看安装方法,并进行后续的基础使用教程。 -::: - -NoneBot 是一个基于 [酷Q](https://cqp.cc/) 的 Python 异步 QQ 机器人框架,它会对 QQ 机器人收到的消息进行解析和处理,并以插件化的形式,分发给消息所对应的命令处理器和自然语言处理器,来完成具体的功能。 - -除了起到解析消息的作用,NoneBot 还为插件提供了大量实用的预设操作和权限控制机制,尤其对于命令处理器,它更是提供了完善且易用的会话机制和内部调用机制,以分别适应命令的连续交互和插件内部功能复用等需求。 - -NoneBot 在其底层与 酷Q 交互的部分使用 [python-aiocqhttp](https://github.com/richardchien/python-aiocqhttp) 库,后者是 [CQHTTP 插件](https://cqhttp.cc/) 的一个 Python 异步 SDK,在 [Quart](https://pgjones.gitlab.io/quart/) 的基础上封装了与 CQHTTP 插件的网络交互。 - -得益于 Python 的 [asyncio](https://docs.python.org/3/library/asyncio.html) 机制,NoneBot 处理消息的吞吐量有了很大的保障,再配合 CQHTTP 插件可选的 WebSocket 通信方式(也是最建议的通信方式),NoneBot 的性能可以达到 HTTP 通信方式的两倍以上,相较于传统同步 I/O 的 HTTP 通信,更是有质的飞跃。 - -需要注意的是,NoneBot 仅支持 Python 3.7+ 及 CQHTTP 插件 v4.8+。 - -## 它如何工作? - -NoneBot 的运行离不开 酷Q 和 CQHTTP 插件。酷Q 扮演着「无头 QQ 客户端」的角色,它进行实际的消息、通知、请求的接收和发送,当 酷Q 收到消息时,它将这个消息包装为一个事件(通知和请求同理),并通过它自己的插件机制将事件传送给 CQHTTP 插件,后者再根据其配置中的 `post_url` 或 `ws_reverse_url` 等项来将事件发送至 NoneBot。 - -在 NoneBot 收到事件前,它底层的 aiocqhttp 实际已经先看到了事件,aiocqhttp 根据事件的类型信息,通知到 NoneBot 的相应函数。特别地,对于消息类型的事件,还将消息内容转换成了 `aiocqhttp.message.Message` 类型,以便处理。 - -NoneBot 的事件处理函数收到通知后,对于不同类型的事件,再做相应的预处理和解析,然后调用对应的插件,并向其提供适合此类事件的会话(Session)对象。NoneBot 插件的编写者要做的,就是利用 Session 对象中提供的数据,在插件的处理函数中实现所需的功能。 - -## 示意图 - -![NoneBot 工作原理](../assets/diagram.png) - -## 特色 - -- 基于异步 I/O -- 同时支持 HTTP 和反向 WebSocket 通信方式 -- 支持命令、自然语言处理器等多种插件形式 -- 支持多个机器人账号负载均衡 -- 提供直观的交互式会话接口 -- 命令和自然语言处理器提供权限控制机制 -- 支持在命令会话运行过程中切换到其它命令或自然语言处理器 -- 多种方式渲染要发送的消息内容,使对话足够自然 diff --git a/docs/guide/assets/echo_and_say.png b/docs/guide/assets/echo_and_say.png deleted file mode 100644 index f139d1fae3e71d3fbf8930ad15d7ec299215b331..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19518 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.1.0 \ No newline at end of file diff --git a/docs/guide/code/awesome-bot-2/awesome/plugins/weather.py b/docs/guide/code/awesome-bot-2/awesome/plugins/weather.py deleted file mode 100644 index 95cfbe6c..00000000 --- a/docs/guide/code/awesome-bot-2/awesome/plugins/weather.py +++ /dev/null @@ -1,43 +0,0 @@ -from nonebot import on_command, CommandSession - - -# on_command 装饰器将函数声明为一个命令处理器 -# 这里 weather 为命令的名字,同时允许使用别名「天气」「天气预报」「查天气」 -@on_command('weather', aliases=('天气', '天气预报', '查天气')) -async def weather(session: CommandSession): - # 从会话状态(session.state)中获取城市名称(city),如果当前不存在,则询问用户 - city = session.get('city', prompt='你想查询哪个城市的天气呢?') - # 获取城市的天气预报 - weather_report = await get_weather_of_city(city) - # 向用户发送天气预报 - await session.send(weather_report) - - -# weather.args_parser 装饰器将函数声明为 weather 命令的参数解析器 -# 命令解析器用于将用户输入的参数解析成命令真正需要的数据 -@weather.args_parser -async def _(session: CommandSession): - # 去掉消息首尾的空白符 - stripped_arg = session.current_arg_text.strip() - - if session.is_first_run: - # 该命令第一次运行(第一次进入命令会话) - if stripped_arg: - # 第一次运行参数不为空,意味着用户直接将城市名跟在命令名后面,作为参数传入 - # 例如用户可能发送了:天气 南京 - session.state['city'] = stripped_arg - return - - if not stripped_arg: - # 用户没有发送有效的城市名称(而是发送了空白字符),则提示重新输入 - # 这里 session.pause() 将会发送消息并暂停当前会话(该行后面的代码不会被运行) - session.pause('要查询的城市名称不能为空呢,请重新输入') - - # 如果当前正在向用户询问更多信息(例如本例中的要查询的城市),且用户输入有效,则放入会话状态 - session.state[session.current_key] = stripped_arg - - -async def get_weather_of_city(city: str) -> str: - # 这里简单返回一个字符串 - # 实际应用中,这里应该调用返回真实数据的天气 API,并拼接成天气预报内容 - return f'{city}的天气是……' diff --git a/docs/guide/code/awesome-bot-2/bot.py b/docs/guide/code/awesome-bot-2/bot.py deleted file mode 100644 index 1bda71df..00000000 --- a/docs/guide/code/awesome-bot-2/bot.py +++ /dev/null @@ -1,13 +0,0 @@ -from os import path - -import nonebot - -import config - -if __name__ == '__main__': - nonebot.init(config) - nonebot.load_plugins( - path.join(path.dirname(__file__), 'awesome', 'plugins'), - 'awesome.plugins' - ) - nonebot.run() diff --git a/docs/guide/code/awesome-bot-2/config.py b/docs/guide/code/awesome-bot-2/config.py deleted file mode 100644 index ac705833..00000000 --- a/docs/guide/code/awesome-bot-2/config.py +++ /dev/null @@ -1,7 +0,0 @@ -from nonebot.default_config import * - -HOST = '0.0.0.0' -PORT = 8080 - -SUPERUSERS = {12345678} -COMMAND_START = {'', '/', '!', '/', '!'} diff --git a/docs/guide/code/awesome-bot-2/requirements.txt b/docs/guide/code/awesome-bot-2/requirements.txt deleted file mode 100644 index 415ceb31..00000000 --- a/docs/guide/code/awesome-bot-2/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -nonebot>=1.1.0 \ No newline at end of file diff --git a/docs/guide/code/awesome-bot-3/awesome/plugins/weather/__init__.py b/docs/guide/code/awesome-bot-3/awesome/plugins/weather/__init__.py deleted file mode 100644 index 9de9a0f4..00000000 --- a/docs/guide/code/awesome-bot-3/awesome/plugins/weather/__init__.py +++ /dev/null @@ -1,50 +0,0 @@ -from nonebot import on_command, CommandSession -from nonebot import on_natural_language, NLPSession, IntentCommand -from jieba import posseg - -from .data_source import get_weather_of_city - - -@on_command('weather', aliases=('天气', '天气预报', '查天气')) -async def weather(session: CommandSession): - city = session.get('city', prompt='你想查询哪个城市的天气呢?') - weather_report = await get_weather_of_city(city) - await session.send(weather_report) - - -@weather.args_parser -async def _(session: CommandSession): - stripped_arg = session.current_arg_text.strip() - - if session.is_first_run: - if stripped_arg: - session.state['city'] = stripped_arg - return - - if not stripped_arg: - session.pause('要查询的城市名称不能为空呢,请重新输入') - - session.state[session.current_key] = stripped_arg - - -# on_natural_language 装饰器将函数声明为一个自然语言处理器 -# keywords 表示需要响应的关键词,类型为任意可迭代对象,元素类型为 str -# 如果不传入 keywords,则响应所有没有被当作命令处理的消息 -@on_natural_language(keywords={'天气'}) -async def _(session: NLPSession): - # 去掉消息首尾的空白符 - stripped_msg = session.msg_text.strip() - # 对消息进行分词和词性标注 - words = posseg.lcut(stripped_msg) - - city = None - # 遍历 posseg.lcut 返回的列表 - for word in words: - # 每个元素是一个 pair 对象,包含 word 和 flag 两个属性,分别表示词和词性 - if word.flag == 'ns': - # ns 词性表示地名 - city = word.word - break - - # 返回意图命令,前两个参数必填,分别表示置信度和意图命令名 - return IntentCommand(90.0, 'weather', current_arg=city or '') diff --git a/docs/guide/code/awesome-bot-3/awesome/plugins/weather/data_source.py b/docs/guide/code/awesome-bot-3/awesome/plugins/weather/data_source.py deleted file mode 100644 index cc7f8329..00000000 --- a/docs/guide/code/awesome-bot-3/awesome/plugins/weather/data_source.py +++ /dev/null @@ -1,2 +0,0 @@ -async def get_weather_of_city(city: str) -> str: - return f'{city}的天气是……' diff --git a/docs/guide/code/awesome-bot-3/bot.py b/docs/guide/code/awesome-bot-3/bot.py deleted file mode 100644 index 1bda71df..00000000 --- a/docs/guide/code/awesome-bot-3/bot.py +++ /dev/null @@ -1,13 +0,0 @@ -from os import path - -import nonebot - -import config - -if __name__ == '__main__': - nonebot.init(config) - nonebot.load_plugins( - path.join(path.dirname(__file__), 'awesome', 'plugins'), - 'awesome.plugins' - ) - nonebot.run() diff --git a/docs/guide/code/awesome-bot-3/config.py b/docs/guide/code/awesome-bot-3/config.py deleted file mode 100644 index c8354f75..00000000 --- a/docs/guide/code/awesome-bot-3/config.py +++ /dev/null @@ -1,8 +0,0 @@ -from nonebot.default_config import * - -HOST = '0.0.0.0' -PORT = 8080 - -SUPERUSERS = {12345678} -COMMAND_START = {'', '/', '!', '/', '!'} -NICKNAME = {'小明', '明明'} diff --git a/docs/guide/code/awesome-bot-3/requirements.txt b/docs/guide/code/awesome-bot-3/requirements.txt deleted file mode 100644 index ef28b9da..00000000 --- a/docs/guide/code/awesome-bot-3/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -nonebot>=1.1.0 -jieba \ No newline at end of file diff --git a/docs/guide/code/awesome-bot-4/awesome/plugins/tuling.py b/docs/guide/code/awesome-bot-4/awesome/plugins/tuling.py deleted file mode 100644 index 505185c6..00000000 --- a/docs/guide/code/awesome-bot-4/awesome/plugins/tuling.py +++ /dev/null @@ -1,86 +0,0 @@ -import json -from typing import Optional - -import aiohttp -from aiocqhttp.message import escape -from nonebot import on_command, CommandSession -from nonebot import on_natural_language, NLPSession, IntentCommand -from nonebot.helpers import context_id, render_expression - -# 定义无法获取图灵回复时的「表达(Expression)」 -EXPR_DONT_UNDERSTAND = ( - '我现在还不太明白你在说什么呢,但没关系,以后的我会变得更强呢!', - '我有点看不懂你的意思呀,可以跟我聊些简单的话题嘛', - '其实我不太明白你的意思……', - '抱歉哦,我现在的能力还不能够明白你在说什么,但我会加油的~' -) - - -# 注册一个仅内部使用的命令,不需要 aliases -@on_command('tuling') -async def tuling(session: CommandSession): - # 获取可选参数,这里如果没有 message 参数,命令不会被中断,message 变量会是 None - message = session.state.get('message') - - # 通过封装的函数获取图灵机器人的回复 - reply = await call_tuling_api(session, message) - if reply: - # 如果调用图灵机器人成功,得到了回复,则转义之后发送给用户 - # 转义会把消息中的某些特殊字符做转换,以避免 酷Q 将它们理解为 CQ 码 - await session.send(escape(reply)) - else: - # 如果调用失败,或者它返回的内容我们目前处理不了,发送无法获取图灵回复时的「表达」 - # 这里的 render_expression() 函数会将一个「表达」渲染成一个字符串消息 - await session.send(render_expression(EXPR_DONT_UNDERSTAND)) - - -@on_natural_language -async def _(session: NLPSession): - # 以置信度 60.0 返回 tuling 命令 - # 确保任何消息都在且仅在其它自然语言处理器无法理解的时候使用 tuling 命令 - return IntentCommand(60.0, 'tuling', args={'message': session.msg_text}) - - -async def call_tuling_api(session: CommandSession, text: str) -> Optional[str]: - # 调用图灵机器人的 API 获取回复 - - if not text: - return None - - url = 'http://openapi.tuling123.com/openapi/api/v2' - - # 构造请求数据 - payload = { - 'reqType': 0, - 'perception': { - 'inputText': { - 'text': text - } - }, - 'userInfo': { - 'apiKey': session.bot.config.TULING_API_KEY, - 'userId': context_id(session.ctx, use_hash=True) - } - } - - group_unique_id = context_id(session.ctx, mode='group', use_hash=True) - if group_unique_id: - payload['userInfo']['groupId'] = group_unique_id - - try: - # 使用 aiohttp 库发送最终的请求 - async with aiohttp.ClientSession() as sess: - async with sess.post(url, json=payload) as response: - if response.status != 200: - # 如果 HTTP 响应状态码不是 200,说明调用失败 - return None - - resp_payload = json.loads(await response.text()) - if resp_payload['results']: - for result in resp_payload['results']: - if result['resultType'] == 'text': - # 返回文本类型的回复 - return result['values']['text'] - except (aiohttp.ClientError, json.JSONDecodeError, KeyError): - # 抛出上面任何异常,说明调用失败 - return None diff --git a/docs/guide/code/awesome-bot-4/awesome/plugins/weather/__init__.py b/docs/guide/code/awesome-bot-4/awesome/plugins/weather/__init__.py deleted file mode 100644 index 9de9a0f4..00000000 --- a/docs/guide/code/awesome-bot-4/awesome/plugins/weather/__init__.py +++ /dev/null @@ -1,50 +0,0 @@ -from nonebot import on_command, CommandSession -from nonebot import on_natural_language, NLPSession, IntentCommand -from jieba import posseg - -from .data_source import get_weather_of_city - - -@on_command('weather', aliases=('天气', '天气预报', '查天气')) -async def weather(session: CommandSession): - city = session.get('city', prompt='你想查询哪个城市的天气呢?') - weather_report = await get_weather_of_city(city) - await session.send(weather_report) - - -@weather.args_parser -async def _(session: CommandSession): - stripped_arg = session.current_arg_text.strip() - - if session.is_first_run: - if stripped_arg: - session.state['city'] = stripped_arg - return - - if not stripped_arg: - session.pause('要查询的城市名称不能为空呢,请重新输入') - - session.state[session.current_key] = stripped_arg - - -# on_natural_language 装饰器将函数声明为一个自然语言处理器 -# keywords 表示需要响应的关键词,类型为任意可迭代对象,元素类型为 str -# 如果不传入 keywords,则响应所有没有被当作命令处理的消息 -@on_natural_language(keywords={'天气'}) -async def _(session: NLPSession): - # 去掉消息首尾的空白符 - stripped_msg = session.msg_text.strip() - # 对消息进行分词和词性标注 - words = posseg.lcut(stripped_msg) - - city = None - # 遍历 posseg.lcut 返回的列表 - for word in words: - # 每个元素是一个 pair 对象,包含 word 和 flag 两个属性,分别表示词和词性 - if word.flag == 'ns': - # ns 词性表示地名 - city = word.word - break - - # 返回意图命令,前两个参数必填,分别表示置信度和意图命令名 - return IntentCommand(90.0, 'weather', current_arg=city or '') diff --git a/docs/guide/code/awesome-bot-4/awesome/plugins/weather/data_source.py b/docs/guide/code/awesome-bot-4/awesome/plugins/weather/data_source.py deleted file mode 100644 index cc7f8329..00000000 --- a/docs/guide/code/awesome-bot-4/awesome/plugins/weather/data_source.py +++ /dev/null @@ -1,2 +0,0 @@ -async def get_weather_of_city(city: str) -> str: - return f'{city}的天气是……' diff --git a/docs/guide/code/awesome-bot-4/bot.py b/docs/guide/code/awesome-bot-4/bot.py deleted file mode 100644 index 1bda71df..00000000 --- a/docs/guide/code/awesome-bot-4/bot.py +++ /dev/null @@ -1,13 +0,0 @@ -from os import path - -import nonebot - -import config - -if __name__ == '__main__': - nonebot.init(config) - nonebot.load_plugins( - path.join(path.dirname(__file__), 'awesome', 'plugins'), - 'awesome.plugins' - ) - nonebot.run() diff --git a/docs/guide/code/awesome-bot-4/config.py b/docs/guide/code/awesome-bot-4/config.py deleted file mode 100644 index 1f25a431..00000000 --- a/docs/guide/code/awesome-bot-4/config.py +++ /dev/null @@ -1,10 +0,0 @@ -from nonebot.default_config import * - -HOST = '0.0.0.0' -PORT = 8080 - -SUPERUSERS = {12345678} -COMMAND_START = {'', '/', '!', '/', '!'} -NICKNAME = {'小明', '明明'} - -TULING_API_KEY = '' diff --git a/docs/guide/code/awesome-bot-4/requirements.txt b/docs/guide/code/awesome-bot-4/requirements.txt deleted file mode 100644 index 4ee2b5bd..00000000 --- a/docs/guide/code/awesome-bot-4/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -nonebot>=1.1.0 -jieba -aiohttp \ No newline at end of file diff --git a/docs/guide/code/awesome-bot-5/awesome/plugins/group_admin.py b/docs/guide/code/awesome-bot-5/awesome/plugins/group_admin.py deleted file mode 100644 index 6928aafd..00000000 --- a/docs/guide/code/awesome-bot-5/awesome/plugins/group_admin.py +++ /dev/null @@ -1,21 +0,0 @@ -from nonebot import on_request, RequestSession -from nonebot import on_notice, NoticeSession - - -# 将函数注册为群请求处理器 -@on_request('group') -async def _(session: RequestSession): - # 判断验证信息是否符合要求 - if session.event.comment == '暗号': - # 验证信息正确,同意入群 - await session.approve() - return - # 验证信息错误,拒绝入群 - await session.reject('请说暗号') - - -# 将函数注册为群成员增加通知处理器 -@on_notice('group_increase') -async def _(session: NoticeSession): - # 发送欢迎消息 - await session.send('欢迎新朋友~') diff --git a/docs/guide/code/awesome-bot-5/awesome/plugins/tuling.py b/docs/guide/code/awesome-bot-5/awesome/plugins/tuling.py deleted file mode 100644 index 505185c6..00000000 --- a/docs/guide/code/awesome-bot-5/awesome/plugins/tuling.py +++ /dev/null @@ -1,86 +0,0 @@ -import json -from typing import Optional - -import aiohttp -from aiocqhttp.message import escape -from nonebot import on_command, CommandSession -from nonebot import on_natural_language, NLPSession, IntentCommand -from nonebot.helpers import context_id, render_expression - -# 定义无法获取图灵回复时的「表达(Expression)」 -EXPR_DONT_UNDERSTAND = ( - '我现在还不太明白你在说什么呢,但没关系,以后的我会变得更强呢!', - '我有点看不懂你的意思呀,可以跟我聊些简单的话题嘛', - '其实我不太明白你的意思……', - '抱歉哦,我现在的能力还不能够明白你在说什么,但我会加油的~' -) - - -# 注册一个仅内部使用的命令,不需要 aliases -@on_command('tuling') -async def tuling(session: CommandSession): - # 获取可选参数,这里如果没有 message 参数,命令不会被中断,message 变量会是 None - message = session.state.get('message') - - # 通过封装的函数获取图灵机器人的回复 - reply = await call_tuling_api(session, message) - if reply: - # 如果调用图灵机器人成功,得到了回复,则转义之后发送给用户 - # 转义会把消息中的某些特殊字符做转换,以避免 酷Q 将它们理解为 CQ 码 - await session.send(escape(reply)) - else: - # 如果调用失败,或者它返回的内容我们目前处理不了,发送无法获取图灵回复时的「表达」 - # 这里的 render_expression() 函数会将一个「表达」渲染成一个字符串消息 - await session.send(render_expression(EXPR_DONT_UNDERSTAND)) - - -@on_natural_language -async def _(session: NLPSession): - # 以置信度 60.0 返回 tuling 命令 - # 确保任何消息都在且仅在其它自然语言处理器无法理解的时候使用 tuling 命令 - return IntentCommand(60.0, 'tuling', args={'message': session.msg_text}) - - -async def call_tuling_api(session: CommandSession, text: str) -> Optional[str]: - # 调用图灵机器人的 API 获取回复 - - if not text: - return None - - url = 'http://openapi.tuling123.com/openapi/api/v2' - - # 构造请求数据 - payload = { - 'reqType': 0, - 'perception': { - 'inputText': { - 'text': text - } - }, - 'userInfo': { - 'apiKey': session.bot.config.TULING_API_KEY, - 'userId': context_id(session.ctx, use_hash=True) - } - } - - group_unique_id = context_id(session.ctx, mode='group', use_hash=True) - if group_unique_id: - payload['userInfo']['groupId'] = group_unique_id - - try: - # 使用 aiohttp 库发送最终的请求 - async with aiohttp.ClientSession() as sess: - async with sess.post(url, json=payload) as response: - if response.status != 200: - # 如果 HTTP 响应状态码不是 200,说明调用失败 - return None - - resp_payload = json.loads(await response.text()) - if resp_payload['results']: - for result in resp_payload['results']: - if result['resultType'] == 'text': - # 返回文本类型的回复 - return result['values']['text'] - except (aiohttp.ClientError, json.JSONDecodeError, KeyError): - # 抛出上面任何异常,说明调用失败 - return None diff --git a/docs/guide/code/awesome-bot-5/awesome/plugins/weather/__init__.py b/docs/guide/code/awesome-bot-5/awesome/plugins/weather/__init__.py deleted file mode 100644 index 9de9a0f4..00000000 --- a/docs/guide/code/awesome-bot-5/awesome/plugins/weather/__init__.py +++ /dev/null @@ -1,50 +0,0 @@ -from nonebot import on_command, CommandSession -from nonebot import on_natural_language, NLPSession, IntentCommand -from jieba import posseg - -from .data_source import get_weather_of_city - - -@on_command('weather', aliases=('天气', '天气预报', '查天气')) -async def weather(session: CommandSession): - city = session.get('city', prompt='你想查询哪个城市的天气呢?') - weather_report = await get_weather_of_city(city) - await session.send(weather_report) - - -@weather.args_parser -async def _(session: CommandSession): - stripped_arg = session.current_arg_text.strip() - - if session.is_first_run: - if stripped_arg: - session.state['city'] = stripped_arg - return - - if not stripped_arg: - session.pause('要查询的城市名称不能为空呢,请重新输入') - - session.state[session.current_key] = stripped_arg - - -# on_natural_language 装饰器将函数声明为一个自然语言处理器 -# keywords 表示需要响应的关键词,类型为任意可迭代对象,元素类型为 str -# 如果不传入 keywords,则响应所有没有被当作命令处理的消息 -@on_natural_language(keywords={'天气'}) -async def _(session: NLPSession): - # 去掉消息首尾的空白符 - stripped_msg = session.msg_text.strip() - # 对消息进行分词和词性标注 - words = posseg.lcut(stripped_msg) - - city = None - # 遍历 posseg.lcut 返回的列表 - for word in words: - # 每个元素是一个 pair 对象,包含 word 和 flag 两个属性,分别表示词和词性 - if word.flag == 'ns': - # ns 词性表示地名 - city = word.word - break - - # 返回意图命令,前两个参数必填,分别表示置信度和意图命令名 - return IntentCommand(90.0, 'weather', current_arg=city or '') diff --git a/docs/guide/code/awesome-bot-5/awesome/plugins/weather/data_source.py b/docs/guide/code/awesome-bot-5/awesome/plugins/weather/data_source.py deleted file mode 100644 index cc7f8329..00000000 --- a/docs/guide/code/awesome-bot-5/awesome/plugins/weather/data_source.py +++ /dev/null @@ -1,2 +0,0 @@ -async def get_weather_of_city(city: str) -> str: - return f'{city}的天气是……' diff --git a/docs/guide/code/awesome-bot-5/bot.py b/docs/guide/code/awesome-bot-5/bot.py deleted file mode 100644 index 1bda71df..00000000 --- a/docs/guide/code/awesome-bot-5/bot.py +++ /dev/null @@ -1,13 +0,0 @@ -from os import path - -import nonebot - -import config - -if __name__ == '__main__': - nonebot.init(config) - nonebot.load_plugins( - path.join(path.dirname(__file__), 'awesome', 'plugins'), - 'awesome.plugins' - ) - nonebot.run() diff --git a/docs/guide/code/awesome-bot-5/config.py b/docs/guide/code/awesome-bot-5/config.py deleted file mode 100644 index 1f25a431..00000000 --- a/docs/guide/code/awesome-bot-5/config.py +++ /dev/null @@ -1,10 +0,0 @@ -from nonebot.default_config import * - -HOST = '0.0.0.0' -PORT = 8080 - -SUPERUSERS = {12345678} -COMMAND_START = {'', '/', '!', '/', '!'} -NICKNAME = {'小明', '明明'} - -TULING_API_KEY = '' diff --git a/docs/guide/code/awesome-bot-5/requirements.txt b/docs/guide/code/awesome-bot-5/requirements.txt deleted file mode 100644 index 4ee2b5bd..00000000 --- a/docs/guide/code/awesome-bot-5/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -nonebot>=1.1.0 -jieba -aiohttp \ No newline at end of file diff --git a/docs/guide/code/awesome-bot-6/awesome/plugins/group_admin.py b/docs/guide/code/awesome-bot-6/awesome/plugins/group_admin.py deleted file mode 100644 index 6928aafd..00000000 --- a/docs/guide/code/awesome-bot-6/awesome/plugins/group_admin.py +++ /dev/null @@ -1,21 +0,0 @@ -from nonebot import on_request, RequestSession -from nonebot import on_notice, NoticeSession - - -# 将函数注册为群请求处理器 -@on_request('group') -async def _(session: RequestSession): - # 判断验证信息是否符合要求 - if session.event.comment == '暗号': - # 验证信息正确,同意入群 - await session.approve() - return - # 验证信息错误,拒绝入群 - await session.reject('请说暗号') - - -# 将函数注册为群成员增加通知处理器 -@on_notice('group_increase') -async def _(session: NoticeSession): - # 发送欢迎消息 - await session.send('欢迎新朋友~') diff --git a/docs/guide/code/awesome-bot-6/awesome/plugins/scheduler.py b/docs/guide/code/awesome-bot-6/awesome/plugins/scheduler.py deleted file mode 100644 index b23b6487..00000000 --- a/docs/guide/code/awesome-bot-6/awesome/plugins/scheduler.py +++ /dev/null @@ -1,16 +0,0 @@ -from datetime import datetime - -import nonebot -import pytz -from aiocqhttp.exceptions import Error as CQHttpError - - -@nonebot.scheduler.scheduled_job('cron', hour='*') -async def _(): - bot = nonebot.get_bot() - now = datetime.now(pytz.timezone('Asia/Shanghai')) - try: - await bot.send_group_msg(group_id=672076603, - message=f'现在{now.hour}点整啦!') - except CQHttpError: - pass diff --git a/docs/guide/code/awesome-bot-6/awesome/plugins/tuling.py b/docs/guide/code/awesome-bot-6/awesome/plugins/tuling.py deleted file mode 100644 index 505185c6..00000000 --- a/docs/guide/code/awesome-bot-6/awesome/plugins/tuling.py +++ /dev/null @@ -1,86 +0,0 @@ -import json -from typing import Optional - -import aiohttp -from aiocqhttp.message import escape -from nonebot import on_command, CommandSession -from nonebot import on_natural_language, NLPSession, IntentCommand -from nonebot.helpers import context_id, render_expression - -# 定义无法获取图灵回复时的「表达(Expression)」 -EXPR_DONT_UNDERSTAND = ( - '我现在还不太明白你在说什么呢,但没关系,以后的我会变得更强呢!', - '我有点看不懂你的意思呀,可以跟我聊些简单的话题嘛', - '其实我不太明白你的意思……', - '抱歉哦,我现在的能力还不能够明白你在说什么,但我会加油的~' -) - - -# 注册一个仅内部使用的命令,不需要 aliases -@on_command('tuling') -async def tuling(session: CommandSession): - # 获取可选参数,这里如果没有 message 参数,命令不会被中断,message 变量会是 None - message = session.state.get('message') - - # 通过封装的函数获取图灵机器人的回复 - reply = await call_tuling_api(session, message) - if reply: - # 如果调用图灵机器人成功,得到了回复,则转义之后发送给用户 - # 转义会把消息中的某些特殊字符做转换,以避免 酷Q 将它们理解为 CQ 码 - await session.send(escape(reply)) - else: - # 如果调用失败,或者它返回的内容我们目前处理不了,发送无法获取图灵回复时的「表达」 - # 这里的 render_expression() 函数会将一个「表达」渲染成一个字符串消息 - await session.send(render_expression(EXPR_DONT_UNDERSTAND)) - - -@on_natural_language -async def _(session: NLPSession): - # 以置信度 60.0 返回 tuling 命令 - # 确保任何消息都在且仅在其它自然语言处理器无法理解的时候使用 tuling 命令 - return IntentCommand(60.0, 'tuling', args={'message': session.msg_text}) - - -async def call_tuling_api(session: CommandSession, text: str) -> Optional[str]: - # 调用图灵机器人的 API 获取回复 - - if not text: - return None - - url = 'http://openapi.tuling123.com/openapi/api/v2' - - # 构造请求数据 - payload = { - 'reqType': 0, - 'perception': { - 'inputText': { - 'text': text - } - }, - 'userInfo': { - 'apiKey': session.bot.config.TULING_API_KEY, - 'userId': context_id(session.ctx, use_hash=True) - } - } - - group_unique_id = context_id(session.ctx, mode='group', use_hash=True) - if group_unique_id: - payload['userInfo']['groupId'] = group_unique_id - - try: - # 使用 aiohttp 库发送最终的请求 - async with aiohttp.ClientSession() as sess: - async with sess.post(url, json=payload) as response: - if response.status != 200: - # 如果 HTTP 响应状态码不是 200,说明调用失败 - return None - - resp_payload = json.loads(await response.text()) - if resp_payload['results']: - for result in resp_payload['results']: - if result['resultType'] == 'text': - # 返回文本类型的回复 - return result['values']['text'] - except (aiohttp.ClientError, json.JSONDecodeError, KeyError): - # 抛出上面任何异常,说明调用失败 - return None diff --git a/docs/guide/code/awesome-bot-6/awesome/plugins/weather/__init__.py b/docs/guide/code/awesome-bot-6/awesome/plugins/weather/__init__.py deleted file mode 100644 index 9de9a0f4..00000000 --- a/docs/guide/code/awesome-bot-6/awesome/plugins/weather/__init__.py +++ /dev/null @@ -1,50 +0,0 @@ -from nonebot import on_command, CommandSession -from nonebot import on_natural_language, NLPSession, IntentCommand -from jieba import posseg - -from .data_source import get_weather_of_city - - -@on_command('weather', aliases=('天气', '天气预报', '查天气')) -async def weather(session: CommandSession): - city = session.get('city', prompt='你想查询哪个城市的天气呢?') - weather_report = await get_weather_of_city(city) - await session.send(weather_report) - - -@weather.args_parser -async def _(session: CommandSession): - stripped_arg = session.current_arg_text.strip() - - if session.is_first_run: - if stripped_arg: - session.state['city'] = stripped_arg - return - - if not stripped_arg: - session.pause('要查询的城市名称不能为空呢,请重新输入') - - session.state[session.current_key] = stripped_arg - - -# on_natural_language 装饰器将函数声明为一个自然语言处理器 -# keywords 表示需要响应的关键词,类型为任意可迭代对象,元素类型为 str -# 如果不传入 keywords,则响应所有没有被当作命令处理的消息 -@on_natural_language(keywords={'天气'}) -async def _(session: NLPSession): - # 去掉消息首尾的空白符 - stripped_msg = session.msg_text.strip() - # 对消息进行分词和词性标注 - words = posseg.lcut(stripped_msg) - - city = None - # 遍历 posseg.lcut 返回的列表 - for word in words: - # 每个元素是一个 pair 对象,包含 word 和 flag 两个属性,分别表示词和词性 - if word.flag == 'ns': - # ns 词性表示地名 - city = word.word - break - - # 返回意图命令,前两个参数必填,分别表示置信度和意图命令名 - return IntentCommand(90.0, 'weather', current_arg=city or '') diff --git a/docs/guide/code/awesome-bot-6/awesome/plugins/weather/data_source.py b/docs/guide/code/awesome-bot-6/awesome/plugins/weather/data_source.py deleted file mode 100644 index cc7f8329..00000000 --- a/docs/guide/code/awesome-bot-6/awesome/plugins/weather/data_source.py +++ /dev/null @@ -1,2 +0,0 @@ -async def get_weather_of_city(city: str) -> str: - return f'{city}的天气是……' diff --git a/docs/guide/code/awesome-bot-6/bot.py b/docs/guide/code/awesome-bot-6/bot.py deleted file mode 100644 index 1bda71df..00000000 --- a/docs/guide/code/awesome-bot-6/bot.py +++ /dev/null @@ -1,13 +0,0 @@ -from os import path - -import nonebot - -import config - -if __name__ == '__main__': - nonebot.init(config) - nonebot.load_plugins( - path.join(path.dirname(__file__), 'awesome', 'plugins'), - 'awesome.plugins' - ) - nonebot.run() diff --git a/docs/guide/code/awesome-bot-6/config.py b/docs/guide/code/awesome-bot-6/config.py deleted file mode 100644 index 1f25a431..00000000 --- a/docs/guide/code/awesome-bot-6/config.py +++ /dev/null @@ -1,10 +0,0 @@ -from nonebot.default_config import * - -HOST = '0.0.0.0' -PORT = 8080 - -SUPERUSERS = {12345678} -COMMAND_START = {'', '/', '!', '/', '!'} -NICKNAME = {'小明', '明明'} - -TULING_API_KEY = '' diff --git a/docs/guide/code/awesome-bot-6/requirements.txt b/docs/guide/code/awesome-bot-6/requirements.txt deleted file mode 100644 index f39c6edb..00000000 --- a/docs/guide/code/awesome-bot-6/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -nonebot>=1.1.0 -jieba -aiohttp -pytz \ No newline at end of file diff --git a/docs/guide/code/awesome-bot-7/awesome/plugins/group_admin.py b/docs/guide/code/awesome-bot-7/awesome/plugins/group_admin.py deleted file mode 100644 index 6928aafd..00000000 --- a/docs/guide/code/awesome-bot-7/awesome/plugins/group_admin.py +++ /dev/null @@ -1,21 +0,0 @@ -from nonebot import on_request, RequestSession -from nonebot import on_notice, NoticeSession - - -# 将函数注册为群请求处理器 -@on_request('group') -async def _(session: RequestSession): - # 判断验证信息是否符合要求 - if session.event.comment == '暗号': - # 验证信息正确,同意入群 - await session.approve() - return - # 验证信息错误,拒绝入群 - await session.reject('请说暗号') - - -# 将函数注册为群成员增加通知处理器 -@on_notice('group_increase') -async def _(session: NoticeSession): - # 发送欢迎消息 - await session.send('欢迎新朋友~') diff --git a/docs/guide/code/awesome-bot-7/awesome/plugins/scheduler.py b/docs/guide/code/awesome-bot-7/awesome/plugins/scheduler.py deleted file mode 100644 index b23b6487..00000000 --- a/docs/guide/code/awesome-bot-7/awesome/plugins/scheduler.py +++ /dev/null @@ -1,16 +0,0 @@ -from datetime import datetime - -import nonebot -import pytz -from aiocqhttp.exceptions import Error as CQHttpError - - -@nonebot.scheduler.scheduled_job('cron', hour='*') -async def _(): - bot = nonebot.get_bot() - now = datetime.now(pytz.timezone('Asia/Shanghai')) - try: - await bot.send_group_msg(group_id=672076603, - message=f'现在{now.hour}点整啦!') - except CQHttpError: - pass diff --git a/docs/guide/code/awesome-bot-7/awesome/plugins/tuling.py b/docs/guide/code/awesome-bot-7/awesome/plugins/tuling.py deleted file mode 100644 index ac90d0ef..00000000 --- a/docs/guide/code/awesome-bot-7/awesome/plugins/tuling.py +++ /dev/null @@ -1,93 +0,0 @@ -import json -from typing import Optional - -import aiohttp -from aiocqhttp.message import escape -from nonebot import on_command, CommandSession -from nonebot import on_natural_language, NLPSession, IntentCommand -from nonebot.helpers import context_id, render_expression - -__plugin_name__ = '智能聊天' -__plugin_usage__ = r""" -智能聊天 - -直接跟我聊天即可~ -""".strip() - -# 定义无法获取图灵回复时的「表达(Expression)」 -EXPR_DONT_UNDERSTAND = ( - '我现在还不太明白你在说什么呢,但没关系,以后的我会变得更强呢!', - '我有点看不懂你的意思呀,可以跟我聊些简单的话题嘛', - '其实我不太明白你的意思……', - '抱歉哦,我现在的能力还不能够明白你在说什么,但我会加油的~' -) - - -# 注册一个仅内部使用的命令,不需要 aliases -@on_command('tuling') -async def tuling(session: CommandSession): - # 获取可选参数,这里如果没有 message 参数,命令不会被中断,message 变量会是 None - message = session.state.get('message') - - # 通过封装的函数获取图灵机器人的回复 - reply = await call_tuling_api(session, message) - if reply: - # 如果调用图灵机器人成功,得到了回复,则转义之后发送给用户 - # 转义会把消息中的某些特殊字符做转换,以避免 酷Q 将它们理解为 CQ 码 - await session.send(escape(reply)) - else: - # 如果调用失败,或者它返回的内容我们目前处理不了,发送无法获取图灵回复时的「表达」 - # 这里的 render_expression() 函数会将一个「表达」渲染成一个字符串消息 - await session.send(render_expression(EXPR_DONT_UNDERSTAND)) - - -@on_natural_language -async def _(session: NLPSession): - # 以置信度 60.0 返回 tuling 命令 - # 确保任何消息都在且仅在其它自然语言处理器无法理解的时候使用 tuling 命令 - return IntentCommand(60.0, 'tuling', args={'message': session.msg_text}) - - -async def call_tuling_api(session: CommandSession, text: str) -> Optional[str]: - # 调用图灵机器人的 API 获取回复 - - if not text: - return None - - url = 'http://openapi.tuling123.com/openapi/api/v2' - - # 构造请求数据 - payload = { - 'reqType': 0, - 'perception': { - 'inputText': { - 'text': text - } - }, - 'userInfo': { - 'apiKey': session.bot.config.TULING_API_KEY, - 'userId': context_id(session.ctx, use_hash=True) - } - } - - group_unique_id = context_id(session.ctx, mode='group', use_hash=True) - if group_unique_id: - payload['userInfo']['groupId'] = group_unique_id - - try: - # 使用 aiohttp 库发送最终的请求 - async with aiohttp.ClientSession() as sess: - async with sess.post(url, json=payload) as response: - if response.status != 200: - # 如果 HTTP 响应状态码不是 200,说明调用失败 - return None - - resp_payload = json.loads(await response.text()) - if resp_payload['results']: - for result in resp_payload['results']: - if result['resultType'] == 'text': - # 返回文本类型的回复 - return result['values']['text'] - except (aiohttp.ClientError, json.JSONDecodeError, KeyError): - # 抛出上面任何异常,说明调用失败 - return None diff --git a/docs/guide/code/awesome-bot-7/awesome/plugins/usage.py b/docs/guide/code/awesome-bot-7/awesome/plugins/usage.py deleted file mode 100644 index 825a57f9..00000000 --- a/docs/guide/code/awesome-bot-7/awesome/plugins/usage.py +++ /dev/null @@ -1,20 +0,0 @@ -import nonebot -from nonebot import on_command, CommandSession - - -@on_command('usage', aliases=['使用帮助', '帮助', '使用方法']) -async def _(session: CommandSession): - # 获取设置了名称的插件列表 - plugins = list(filter(lambda p: p.name, nonebot.get_loaded_plugins())) - - arg = session.current_arg_text.strip().lower() - if not arg: - # 如果用户没有发送参数,则发送功能列表 - await session.send( - '我现在支持的功能有:\n\n' + '\n'.join(p.name for p in plugins)) - return - - # 如果发了参数则发送相应命令的使用帮助 - for p in plugins: - if p.name.lower() == arg: - await session.send(p.usage) diff --git a/docs/guide/code/awesome-bot-7/awesome/plugins/weather/__init__.py b/docs/guide/code/awesome-bot-7/awesome/plugins/weather/__init__.py deleted file mode 100644 index 62623419..00000000 --- a/docs/guide/code/awesome-bot-7/awesome/plugins/weather/__init__.py +++ /dev/null @@ -1,57 +0,0 @@ -from nonebot import on_command, CommandSession -from nonebot import on_natural_language, NLPSession, IntentCommand -from jieba import posseg - -from .data_source import get_weather_of_city - -__plugin_name__ = '天气' -__plugin_usage__ = r""" -天气查询 - -天气 [城市名称] -""" - - -@on_command('weather', aliases=('天气', '天气预报', '查天气')) -async def weather(session: CommandSession): - city = session.get('city', prompt='你想查询哪个城市的天气呢?') - weather_report = await get_weather_of_city(city) - await session.send(weather_report) - - -@weather.args_parser -async def _(session: CommandSession): - stripped_arg = session.current_arg_text.strip() - - if session.is_first_run: - if stripped_arg: - session.state['city'] = stripped_arg - return - - if not stripped_arg: - session.pause('要查询的城市名称不能为空呢,请重新输入') - - session.state[session.current_key] = stripped_arg - - -# on_natural_language 装饰器将函数声明为一个自然语言处理器 -# keywords 表示需要响应的关键词,类型为任意可迭代对象,元素类型为 str -# 如果不传入 keywords,则响应所有没有被当作命令处理的消息 -@on_natural_language(keywords={'天气'}) -async def _(session: NLPSession): - # 去掉消息首尾的空白符 - stripped_msg = session.msg_text.strip() - # 对消息进行分词和词性标注 - words = posseg.lcut(stripped_msg) - - city = None - # 遍历 posseg.lcut 返回的列表 - for word in words: - # 每个元素是一个 pair 对象,包含 word 和 flag 两个属性,分别表示词和词性 - if word.flag == 'ns': - # ns 词性表示地名 - city = word.word - break - - # 返回意图命令,前两个参数必填,分别表示置信度和意图命令名 - return IntentCommand(90.0, 'weather', current_arg=city or '') diff --git a/docs/guide/code/awesome-bot-7/awesome/plugins/weather/data_source.py b/docs/guide/code/awesome-bot-7/awesome/plugins/weather/data_source.py deleted file mode 100644 index cc7f8329..00000000 --- a/docs/guide/code/awesome-bot-7/awesome/plugins/weather/data_source.py +++ /dev/null @@ -1,2 +0,0 @@ -async def get_weather_of_city(city: str) -> str: - return f'{city}的天气是……' diff --git a/docs/guide/code/awesome-bot-7/bot.py b/docs/guide/code/awesome-bot-7/bot.py deleted file mode 100644 index 1bda71df..00000000 --- a/docs/guide/code/awesome-bot-7/bot.py +++ /dev/null @@ -1,13 +0,0 @@ -from os import path - -import nonebot - -import config - -if __name__ == '__main__': - nonebot.init(config) - nonebot.load_plugins( - path.join(path.dirname(__file__), 'awesome', 'plugins'), - 'awesome.plugins' - ) - nonebot.run() diff --git a/docs/guide/code/awesome-bot-7/config.py b/docs/guide/code/awesome-bot-7/config.py deleted file mode 100644 index 1f25a431..00000000 --- a/docs/guide/code/awesome-bot-7/config.py +++ /dev/null @@ -1,10 +0,0 @@ -from nonebot.default_config import * - -HOST = '0.0.0.0' -PORT = 8080 - -SUPERUSERS = {12345678} -COMMAND_START = {'', '/', '!', '/', '!'} -NICKNAME = {'小明', '明明'} - -TULING_API_KEY = '' diff --git a/docs/guide/code/awesome-bot-7/requirements.txt b/docs/guide/code/awesome-bot-7/requirements.txt deleted file mode 100644 index f39c6edb..00000000 --- a/docs/guide/code/awesome-bot-7/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -nonebot>=1.1.0 -jieba -aiohttp -pytz \ No newline at end of file diff --git a/docs/guide/command.md b/docs/guide/command.md deleted file mode 100644 index 50783d4a..00000000 --- a/docs/guide/command.md +++ /dev/null @@ -1,203 +0,0 @@ -# 编写命令 - -本章将以一个天气查询插件为例,教你如何编写自己的命令。 - -:::tip 提示 -本章的完整代码可以在 [awesome-bot-2](https://github.com/richardchien/nonebot/tree/master/docs/guide/code/awesome-bot-2) 查看。 -::: - -## 创建插件目录 - -首先我们需要创建一个目录来存放插件,这个目录需要满足一些条件才能作为插件目录,首先,我们的代码能够比较容易访问到它,其次,它必须是一个能够以 Python 模块形式导入的路径(后面解释为什么),一个比较好的位置是项目目录中的 `awesome/plugins/`,创建好之后,我们的 `awesome-bot` 项目的目录结构如下: - -``` -awesome-bot -├── awesome -│ └── plugins -├── bot.py -└── config.py -``` - -接着在 `plugins` 目录中新建一个名为 `weather.py` 的 Python 文件,暂时留空,此时目录结构如下: - -``` -awesome-bot -├── awesome -│ └── plugins -│ └── weather.py -├── bot.py -└── config.py -``` - -## 加载插件 - -现在我们的插件目录已经有了一个空的 `weather.py`,实际上它已经可以被称为一个插件了,尽管它还什么都没做。下面我们来让 NoneBot 加载这个插件,修改 `bot.py` 如下: - -```python {1,9-12} -from os import path - -import nonebot - -import config - -if __name__ == '__main__': - nonebot.init(config) - nonebot.load_plugins( - path.join(path.dirname(__file__), 'awesome', 'plugins'), - 'awesome.plugins' - ) - nonebot.run() -``` - -这里的重点在于 `nonebot.load_plugins()` 函数的两个参数。第一个参数是插件目录的路径,这里根据 `bot.py` 的所在路径和相对路径拼接得到;第二个参数是导入插件模块时使用的模块名前缀,这个前缀要求必须是一个当前 Python 解释器可以导入的模块前缀,NoneBot 会在它后面加上插件的模块名共同组成完整的模块名来让解释器导入,因此这里我们传入 `awesome.plugins`,当运行 `bot.py` 的时候,Python 解释器就能够正确导入 `awesome.plugins.weather` 这个插件模块了。 - -尝试运行 `python bot.py`,可以看到日志输出了类似如下内容: - -``` -[2018-08-18 21:46:55,425 nonebot] INFO: Succeeded to import "awesome.plugins.weather" -``` - -这表示 NoneBot 已经成功加载到了 `weather` 插件。 - -:::warning 注意 -如果你运行时没有输出成功导入插件的日志,请确保你的当前工作目录是在 `awesome-bot` 项目的主目录中。 - -如果仍然不行,尝试先在 `awesome-bot` 主目录中执行下面的命令: - -```bash -export PYTHONPATH=. # Linux / macOS -set PYTHONPATH=. # Windows -``` -::: - -## 编写真正的内容 - -好了,现在已经确保插件可以正确加载,我们可以开始编写命令的实际代码了。在 `weather.py` 中添加如下代码: - -```python -from nonebot import on_command, CommandSession - - -# on_command 装饰器将函数声明为一个命令处理器 -# 这里 weather 为命令的名字,同时允许使用别名「天气」「天气预报」「查天气」 -@on_command('weather', aliases=('天气', '天气预报', '查天气')) -async def weather(session: CommandSession): - # 从会话状态(session.state)中获取城市名称(city),如果当前不存在,则询问用户 - city = session.get('city', prompt='你想查询哪个城市的天气呢?') - # 获取城市的天气预报 - weather_report = await get_weather_of_city(city) - # 向用户发送天气预报 - await session.send(weather_report) - - -# weather.args_parser 装饰器将函数声明为 weather 命令的参数解析器 -# 命令解析器用于将用户输入的参数解析成命令真正需要的数据 -@weather.args_parser -async def _(session: CommandSession): - # 去掉消息首尾的空白符 - stripped_arg = session.current_arg_text.strip() - - if session.is_first_run: - # 该命令第一次运行(第一次进入命令会话) - if stripped_arg: - # 第一次运行参数不为空,意味着用户直接将城市名跟在命令名后面,作为参数传入 - # 例如用户可能发送了:天气 南京 - session.state['city'] = stripped_arg - return - - if not stripped_arg: - # 用户没有发送有效的城市名称(而是发送了空白字符),则提示重新输入 - # 这里 session.pause() 将会发送消息并暂停当前会话(该行后面的代码不会被运行) - session.pause('要查询的城市名称不能为空呢,请重新输入') - - # 如果当前正在向用户询问更多信息(例如本例中的要查询的城市),且用户输入有效,则放入会话状态 - session.state[session.current_key] = stripped_arg - - -async def get_weather_of_city(city: str) -> str: - # 这里简单返回一个字符串 - # 实际应用中,这里应该调用返回真实数据的天气 API,并拼接成天气预报内容 - return f'{city}的天气是……' -``` - -:::tip 提示 -从这里开始,你需要对 Python 的 asyncio 编程有所了解,因为 NoneBot 是完全基于 asyncio 的,具体可以参考 [廖雪峰的 Python 教程](https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143208573480558080fa77514407cb23834c78c6c7309000)。 -::: - -为了简单起见,我们在这里的例子中没有接入真实的天气数据,但要接入也非常简单,你可以使用中国天气网、和风天气等网站提供的 API。 - -上面的代码中基本上每一行做了什么都在注释里写了,下面详细解释几个重要的地方。 - -要理解这段代码,我们要先单独看这个函数: - -```python -# on_command 装饰器将函数声明为一个命令处理器 -# 这里 weather 为命令的名字,同时允许使用别名「天气」「天气预报」「查天气」 -@on_command('weather', aliases=('天气', '天气预报', '查天气')) -async def weather(session: CommandSession): - # 从会话状态(session.state)中获取城市名称(city),如果当前不存在,则询问用户 - city = session.get('city', prompt='你想查询哪个城市的天气呢?') - # 获取城市的天气预报 - weather_report = await get_weather_of_city(city) - # 向用户发送天气预报 - await session.send(weather_report) -``` - -首先,`session.get()` 函数调用尝试从当前会话(Session)的状态中获取 `city` 这个参数,**所有的参数和会话中需要暂存的临时数据都被存储在 `session.state` 变量(一个 `dict`)中**,如果发现存在,则直接返回,并赋值给 `city` 变量,而如果 `city` 参数不存在,`session.get()` 会**中断**这次命令处理的流程,并保存当前会话,然后向用户发送 `prompt` 参数的内容。**这里的「中断」,意味着如果当前不存在 `city` 参数,`session.get()` 之后的代码将不会被执行,这是通过抛出异常做到的。** - -向用户发送 `prompt` 中的提示之后,会话会进入等待状态,此时我们称之为「当前用户正在 weather 命令的会话中」,当用户再次发送消息时,NoneBot 会唤起这个等待中的会话,并重新执行命令,也就是**从头开始**重新执行上面的这个函数,如果用户在一定时间内(默认 5 分钟,可通过 `SESSION_EXPIRE_TIMEOUT` 配置项来更改)都没有再次跟机器人发消息,则会话因超时被关闭。 - -你可能想问了,既然是重新执行,那执行到 `session.get()` 的时候不还是会中断吗?实际上,NoneBot 在 1.0.0 及更早版本中确实是这样的,必须手动编写下面要说的参数解析器,才能够让 `session.get()` 正确返回;而从 1.1.0 版本开始,NoneBot 会默认地把用户的完整输入作为当前询问内容的回答放进会话状态。 - -:::tip 提示 -删掉下面这段参数解析器,天气命令也可以正常使用,可以尝试不同的输入,看看行为上有什么不同。 -::: - -但这里我们还是手动编写参数解析器,以应对更复杂的情况,也就是下面这个函数: - -```python -# weather.args_parser 装饰器将函数声明为 weather 命令的参数解析器 -# 命令解析器用于将用户输入的参数解析成命令真正需要的数据 -@weather.args_parser -async def _(session: CommandSession): - # 去掉消息首尾的空白符 - stripped_arg = session.current_arg_text.strip() - - if session.is_first_run: - # 该命令第一次运行(第一次进入命令会话) - if stripped_arg: - # 第一次运行参数不为空,意味着用户直接将城市名跟在命令名后面,作为参数传入 - # 例如用户可能发送了:天气 南京 - session.state['city'] = stripped_arg - return - - if not stripped_arg: - # 用户没有发送有效的城市名称(而是发送了空白字符),则提示重新输入 - # 这里 session.pause() 将会发送消息并暂停当前会话(该行后面的代码不会被运行) - session.pause('要查询的城市名称不能为空呢,请重新输入') - - # 如果当前正在向用户询问更多信息(例如本例中的要查询的城市),且用户输入有效,则放入会话状态 - session.state[session.current_key] = stripped_arg -``` - -参数解析器的 `session` 参数和命令处理函数一样,都是当前命令的会话对象。并且,参数解析器会在命令处理函数之前执行,以确保正确解析参数以供后者使用。 - -上面的例子中,参数解析器会判断当前是否是该会话第一次运行(用户刚发送 `/天气`,触发了天气命令)。如果是,则检查用户触发天气命令时有没有附带参数(即 `stripped_arg` 是否有内容),如果带了参数(例如用户发送了 `/天气 南京`),则把附带的参数当做要查询的城市放进会话状态 `session.state`,以 `city` 作为状态的 key——也就是说,如果用户触发命令时就给出了城市,则命令处理函数中的 `session.get('city')` 第一次执行时就能返回结果。 - -如果不是第一次运行,那就说明命令处理函数中向用户询问了更多信息,导致会话被中断,并等待用户回复(也就是 `session.get()` 的效果)。这时候需要判断用户输入是不是有效,因为我们已经明确地询问了,如果用户此时发送了空白字符,显然这是没有意义的内容,需要提示用户重新发送。相反,如果有效的话,则直接以 `session.current_key` 作为 key(也就是 `session.get()` 的第一个参数,上例中只有可能是 `city`),将输入内容存入会话状态。 - -:::tip 提示 -上面用了 `session.current_arg_text` 来获取用户当前输入的参数,这表示从用户输入中提取纯文本部分,也就是说不包含图片、表情、语音、卡片分享等。 - -如果需要用户输入的原始内容,请使用 `session.current_arg`,里面可能包含 CQ 码。除此之外,还可以通过 `session.current_arg_images` 获取消息中的图片 URL 列表。 -::: - - -现在我们已经理解完了天气命令的代码,是时候运行一下看看实际效果了,启动 NoneBot 后尝试向它分别发送下面的两个带参数和不带参数的消息: - -``` -/天气 南京 -/天气 -``` - -观察看看有什么不同,以及它的回复是否符合我们对代码的理解。如果成功的话,此时你已经完成了一个**可交互的**天气查询命令的雏形,只需要再接入天气 API 就可以真正投入使用了! diff --git a/docs/guide/cqhttp.md b/docs/guide/cqhttp.md deleted file mode 100644 index e427ef20..00000000 --- a/docs/guide/cqhttp.md +++ /dev/null @@ -1,72 +0,0 @@ -# CQHTTP 事件和 API - -到目前为止,我们都在使用 NoneBot 显式提供的接口,但实际上 CQHTTP 插件还提供了更多的事件数据和 API,可能利用这些它们实现更加自由的逻辑。 - -## 事件数据 - -在 [发生了什么?](./whats-happened.md) 中我们提到,收到 酷Q 事件后,CQHTTP 通过反向 WebSocket 给 NoneBot 发送事件数据。这些数据被 aiocqhttp 包装为 [`aiocqhttp.Event`](https://python-aiocqhttp.cqp.moe/module/aiocqhttp/#aiocqhttp.Event) 对象,随后被 NoneBot 放在了 `session.event` 属性。该对象本质上是一个字典(但也提供了属性来获取其中的字段),你可以通过断点调试或打印等方式查看它的内容,其中的字段名和含义见 CQHTTP 的 [事件列表](https://cqhttp.cc/docs/#/Post?id=事件列表) 中的「上报数据」。 - -## API 调用 - -前面我们已经多次调用 `CommandSession` 类的 `send()` 方法,而这个方法只能回复给消息的发送方,不能手动指定发送者,因此当我们需要实现将收到的消息经过处理后转发给另一个接收方这样的功能时,这个方法就用不了了。 - -幸运的是,`NoneBot` 类是继承自 aiocqhttp 的 [`CQHttp` 类](https://python-aiocqhttp.cqp.moe/module/aiocqhttp/#aiocqhttp.CQHttp) 的,而这个类实现了 `__getattr__()` 魔术方法,由此提供了直接通过 bot 对象调用 CQHTTP 的 API 的能力。 - -:::tip 提示 -如果你在使用 HTTP 通信,要调用 CQHTTP API 要在 `config.py` 中添加: - -```python -API_ROOT = 'http://127.0.0.1:5700' # 这里 IP 和端口应与 CQHTTP 配置中的 `host` 和 `port` 对应 -``` -::: - -要获取 bot 对象,可以通过如下两种方式: - -```python -bot = session.bot -bot = nonebot.get_bot() -``` - -Bot 对象的使用方式如下: - -```python -await bot.send_private_msg(user_id=12345678, message='你好~') -``` - -这里,`send_private_msg` 实际上对应 CQHTTP 的 [`/send_private_msg` 接口](https://cqhttp.cc/docs/#/API?id=send_private_msg-%E5%8F%91%E9%80%81%E7%A7%81%E8%81%8A%E6%B6%88%E6%81%AF),其它接口同理。 - -通过这种方式调用 API 时,需要注意下面几点: - -- **所有参数必须为命名参数(keyword argument)**,否则无法正确调用 -- 这种调用**全都是异步调用**,因此需要适当 `await` -- **调用失败时(没有权限、对方不是好友、无 API 连接等)可能抛出 `nonebot.CQHttpError` 异常**,注意捕获,例如: - ```python - try: - info = await bot.get_group_list() - except CQHttpError: - pass - ``` -- **当多个机器人使用同一个 NoneBot 后端时**,可能需要加上参数 `self_id=<机器人QQ号>`,例如: - ```python - info = await bot.get_group_list(self_id=event.self_id) - ``` - -另外,在需要动态性的场合,除了使用 `getattr()` 方法外,还可以直接调用 `bot.call_action()` 方法,传入 `action` 和 `params` 即可,例如上例中,`action` 为 `'send_private_msg'`,`params` 为 `{'user_id': 12345678, 'message': '你好~'}`。 - -下面举出一些主动发送消息和调用 API 的例子: - -```python -await bot.send_private_msg(user_id=12345678, message='你好~') -await bot.send_group_msg(group_id=123456, message='大家好~') - -params = session.event.copy() -del params['message'] -await bot.send_msg(**params, message='喵~') - -await bot.delete_msg(**session.event) -await bot.set_group_card(**session.event, card='新人请改群名片') -self_info = await bot.get_login_info() -group_member_info = await bot.get_group_member_info(group_id=123456, user_id=12345678, no_cache=True) -``` - -其它更多接口请自行参考 CQHTTP 的 [API 列表](https://cqhttp.cc/docs/#/API?id=api-列表)。 diff --git a/docs/guide/getting-started.md b/docs/guide/getting-started.md deleted file mode 100644 index a6a308bc..00000000 --- a/docs/guide/getting-started.md +++ /dev/null @@ -1,104 +0,0 @@ -# 开始使用 - -一切都安装成功后,你就已经做好了进行简单配置以运行一个最小的 NoneBot 实例的准备。 - -## 最小实例 - -使用你最熟悉的编辑器或 IDE,创建一个名为 `bot.py` 的文件,内容如下: - -```python -import nonebot - -if __name__ == '__main__': - nonebot.init() - nonebot.load_builtin_plugins() - nonebot.run(host='127.0.0.1', port=8080) -``` - -`if __name__ == '__main__'` 语句块的这几行代码将依次: - -1. 使用默认配置初始化 NoneBot 包 -2. 加载 NoneBot 内置的插件 -3. 在地址 `127.0.0.1:8080` 运行 NoneBot - -:::tip 提示 -这里 `nonebot.run()` 的参数 `host='127.0.0.1'` 表示让 NoneBot 监听本地环回地址,如果你的 酷Q 运行在非本机的其它位置,例如 Docker 容器内、局域网内的另一台机器上等,则这里需要修改 `host` 参数为希望让 CQHTTP 插件访问的 IP。如果不清楚该使用哪个 IP,或者希望本机的所有 IP 都被监听,可以使用 `0.0.0.0`。 -::: - -在命令行使用如下命令即可运行这个 NoneBot 实例: - -```bash -python bot.py -``` - -运行后会产生如下日志: - -``` -[2020-03-16 15:50:26,166 nonebot] INFO: Succeeded to import "nonebot.plugins.base" -[2020-03-16 15:50:26,166 nonebot] INFO: Running on 127.0.0.1:8080 -Running on http://127.0.0.1:8080 (CTRL + C to quit) -[2020-03-16 15:50:26,177] Running on 127.0.0.1:8080 over http (CTRL + C to quit) -``` - -除此之外可能有一些红色的提示信息如 `ujson module not found, using json` 等,可以忽略。 - -## 配置 CQHTTP 插件 - -单纯运行 NoneBot 实例并不会产生任何效果,因为此刻 酷Q 这边还不知道 NoneBot 的存在,也就无法把消息发送给它,因此现在需要对 CQHTTP 插件做一个简单的配置来让它把消息等事件上报给 NoneBot。 - -如果你在之前已经按照 [安装](/guide/installation.md) 的建议使用默认配置运行了一次 CQHTTP 插件,此时 酷Q 的 `data/app/io.github.richardchien.coolqhttpapi/config/` 目录中应该已经有了一个名为 `.json` 的文件(`` 为你登录的 QQ 账号)。修改这个文件,**修改如下配置项(如果不存在相应字段则添加)**: - -:::warning 注意 -如果使用 CQHTTP 插件官方 Docker 镜像运行 酷Q,则配置文件所在目录可能是 `app/io.github.richardchien.coolqhttpapi/config/`。 -::: - -```json -{ - "ws_reverse_url": "ws://127.0.0.1:8080/ws/", - "use_ws_reverse": true, - "enable_heartbeat": true -} -``` - -:::tip 提示 -**这里的 `127.0.0.1:8080` 对应 `nonebot.run()` 中传入的 `host` 和 `port`**,如果在 `nonebot.run()` 中传入的 `host` 是 `0.0.0.0`,则插件的配置中需使用任意一个能够访问到 NoneBot 所在环境的 IP,**不要直接填 `0.0.0.0`**。特别地,如果你的 酷Q 运行在 Docker 容器中,NoneBot 运行在宿主机中,则默认情况下这里需使用 `172.17.0.1`(即宿主机在 Docker 默认网桥上的 IP,不同机器有可能不同,如果是 Linux 系统,可以使用命令 `ip addr show docker0 | grep -Po 'inet \K[\d.]+'`来获取需要填入的ip;如果是 macOS 系统或者 Windows 系统,可以考虑使用 `host.docker.internal`,具体解释详见 Docker 文档的 [Use cases and workarounds](https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds) 的「I WANT TO CONNECT FROM A CONTAINER TO A SERVICE ON THE HOST」小标题)。 -::: - -如果你的 CQHTTP 插件版本低于 v4.14.0,还需要删除配置文件中已有的 `ws_reverse_api_url` 和 `ws_reverse_event_url` 两项。 - -修改之后,在 酷Q 的应用菜单中重启 CQHTTP 插件,或直接重载应用,以使新的配置文件生效。 - -## 历史性的第一次对话 - -一旦新的配置文件正确生效之后,NoneBot 所在的控制台(如果正在运行的话)应该会输出类似下面的内容(两条访问日志): - -``` -[2020-03-16 15:50:26,435] 127.0.0.1:56363 GET /ws/ 1.1 101 - 7982 -[2020-03-16 15:50:26,438] 127.0.0.1:56364 GET /ws/ 1.1 101 - 8977 -``` - -这表示 CQHTTP 插件已经成功地连接上了 NoneBot,与此同时,CQHTTP 的日志控制台(和日志文件)中也会输出反向 WebSocket 连接成功的日志。 - -:::warning 注意 -如果到这一步你没有看到上面这样的成功日志,CQHTTP 的日志中在不断地重连或无反应,请注意检查配置中的 IP 和端口是否确实可以访问。比较常见的出错点包括: - -- NoneBot 监听 `0.0.0.0`,然后在 CQHTTP 配置中填了 `ws://0.0.0.0:8080/ws/` -- 在 Docker 容器内运行 酷Q 和 CQHTTP,并通过 `127.0.0.1` 访问宿主机上的 NoneBot -- 想从公网访问,但没有修改云服务商的安全组策略或系统防火墙 -- NoneBot 所监听的端口存在冲突,已被其它程序占用 -- 弄混了 NoneBot 的 `host`、`port` 参数与 CQHTTP 配置中的 `host`、`port` 参数 -- 使用旧版 CQHTTP 插件,且没有删除 `ws_reverse_api_url` 和 `ws_reverse_event_url` -- 使用旧版 CQHTTP 插件,且丢失了 `ws://127.0.0.1:8080/ws/` 结尾的 `/` -- `ws://` 错填为 `http://` -- 酷Q 或 CQHTTP 插件启动时遭到外星武器干扰 - -请尝试重启 CQHTTP、重启 酷Q、重启 NoneBot、更换端口、修改防火墙、重启系统、仔细阅读前面的文档及提示、更新 CQHTTP 和 NoneBot 到最新版本等方式来解决。 -::: - -现在,尝试向你的 QQ 机器人账号发送如下内容: - -``` -/echo 你好,世界 -``` - -到这里如果一切 OK,你应该会收到机器人给你回复了 `你好,世界`。这一历史性的对话标志着你已经成功地运行了一个 NoneBot 的最小实例,开始了编写更强大的 QQ 机器人的创意之旅! diff --git a/docs/guide/installation.md b/docs/guide/installation.md deleted file mode 100644 index 8f9f9ded..00000000 --- a/docs/guide/installation.md +++ /dev/null @@ -1,41 +0,0 @@ -# 安装 - -## NoneBot - -:::warning 注意 -请确保你的 Python 版本 >= 3.7。 -::: - -可以使用 pip 安装已发布的最新版本: - -```bash -pip install nonebot -``` - -如果你需要使用最新的(可能尚未发布的)特性,可以克隆 Git 仓库后手动安装: - -```bash -git clone https://github.com/richardchien/nonebot.git -cd nonebot -python setup.py install -``` - -以上命令中的 `pip`、`python` 可能需要根据情况换成 `pip3`、`python3`。 - -## 酷Q - -前往 酷Q 官方论坛的 [版本发布](https://cqp.cc/b/news) 页面根据需要下载最新版本的 酷Q Air 或 Pro,解压后启动 `CQA.exe` 或 `CQP.exe` 并登录 QQ 机器人账号。 - -如果你的操作系统是 Linux 或 macOS,可以使用版本发布页中 酷Q 官方提供的 Docker 镜像,也可以直接跳至下一个标题,使用 CQHTTP 插件官方提供的 Docker 镜像。 - -:::tip 提示 -如果这是你第一次使用 酷Q,建议完成它自带的新手教程,以对 酷Q 的运行机制有所了解。 -::: - -## CQHTTP 插件 - -前往 [CQHTTP 插件文档](https://cqhttp.cc/docs/),按照其教程的「使用方法」安装插件。安装后,请先使用默认配置运行,并查看 酷Q 日志窗口的输出,以确定插件的加载、配置的生成和读取、插件版本等符合预期。 - -:::warning 注意 -请确保你安装的插件版本 >= 4.8,通常建议插件在大版本内尽量及时升级至最新版本。 -::: diff --git a/docs/guide/nl-processor.md b/docs/guide/nl-processor.md deleted file mode 100644 index 5c902248..00000000 --- a/docs/guide/nl-processor.md +++ /dev/null @@ -1,266 +0,0 @@ -# 编写自然语言处理器 - -在上一章中我们编写了一个天气查询命令,但它还具有非常强的局限性,用户必须发送固定格式的消息,它才能理解,即使它可以交互式地询问用户要查询的城市,用户仍然需要记住命令的名字。 - -本章将会介绍如何让插件能够理解用户的自然语言消息,例如: - -``` -今天南京天气怎么样? -``` - -:::tip 提示 -本章的完整代码可以在 [awesome-bot-3](https://github.com/richardchien/nonebot/tree/master/docs/guide/code/awesome-bot-3) 查看。 -::: - -## 调整项目结构 - -在开始下一步之前,首先对项目结构再做一个调整,以方便后面的代码编写。 - -到目前为止 `weather.py` 中只有三个函数,看起来还比较简单,不过当我们再往里面添加更多功能之后,它可能会变得比较杂乱。幸运的是,NoneBot 除了支持加载 `.py` 文件(Python 模块)形式的插件,还支持加载包含 `__init__.py` 的目录(Python 包)。 - -下面我们对 `weather` 插件做一个调整,将 `get_weather_of_city()` 提取到单独的模块中(这个函数在实际应用中可能比较长,并且可能需要多个函数组合)。 - -首先创建 `weather` 目录,并将原来 `weather.py` 中的代码移动到 `weather/__init__.py` 文件(如果你使用 PyCharm 或 IDEA + Python 插件,可以右击 `weather.py` 并选择 Refactor - Convert to Python Package),然后在 `weather` 目录中再创建 `data_source.py` 文件,将 `get_weather_of_city()` 函数移动进去。 - -经过这些步骤后,目录结构如下: - -``` -awesome-bot -├── awesome -│ └── plugins -│ └── weather -│ ├── __init__.py -│ └── data_source.py -├── bot.py -└── config.py -``` - -`weather/__init__.py` 内容如下: - -```python -from nonebot import on_command, CommandSession - -from .data_source import get_weather_of_city - - -@on_command('weather', aliases=('天气', '天气预报', '查天气')) -async def weather(session: CommandSession): - city = session.get('city', prompt='你想查询哪个城市的天气呢?') - weather_report = await get_weather_of_city(city) - await session.send(weather_report) - - -@weather.args_parser -async def _(session: CommandSession): - stripped_arg = session.current_arg_text.strip() - - if session.is_first_run: - if stripped_arg: - session.state['city'] = stripped_arg - return - - if not stripped_arg: - session.pause('要查询的城市名称不能为空呢,请重新输入') - - session.state[session.current_key] = stripped_arg -``` - -`weather/data_source.py` 内容如下: - -```python -async def get_weather_of_city(city: str) -> str: - return f'{city}的天气是……' -``` - -## 编写雏形 - -在 `weather/__init__.py` 文件添加内容如下: - -```python {2,29-35} -from nonebot import on_command, CommandSession -from nonebot import on_natural_language, NLPSession, IntentCommand - -from .data_source import get_weather_of_city - - -@on_command('weather', aliases=('天气', '天气预报', '查天气')) -async def weather(session: CommandSession): - city = session.get('city', prompt='你想查询哪个城市的天气呢?') - weather_report = await get_weather_of_city(city) - await session.send(weather_report) - - -@weather.args_parser -async def _(session: CommandSession): - stripped_arg = session.current_arg_text.strip() - - if session.is_first_run: - if stripped_arg: - session.state['city'] = stripped_arg - return - - if not stripped_arg: - session.pause('要查询的城市名称不能为空呢,请重新输入') - - session.state[session.current_key] = stripped_arg - - -# on_natural_language 装饰器将函数声明为一个自然语言处理器 -# keywords 表示需要响应的关键词,类型为任意可迭代对象,元素类型为 str -# 如果不传入 keywords,则响应所有没有被当作命令处理的消息 -@on_natural_language(keywords={'天气'}) -async def _(session: NLPSession): - # 返回意图命令,前两个参数必填,分别表示置信度和意图命令名 - return IntentCommand(90.0, 'weather') -``` - -代码中的注释已经进行了大部分解释,这里再详细介绍一下 `IntentCommand` 这个类。 - -在 NoneBot 中,自然语言处理器的工作方式就是将用户的自然语言消息解析成一个命令和命令所需的参数,由于自然语言消息的模糊性,在解析时不可能完全确定用户的意图,因此还需要返回一个置信度作为这个命令的确定程度。 - -:::warning 注意 -这里的「置信度」与统计学中的置信度没有任何关系,只表示对「当前用户输入的意图是触发某命令」这件事有多大把握,应理解为普通意义的「confidence」。 -::: - -:::tip 提示 -置信度的计算需要自然语言处理器的编写者进行恰当的设计,以确保各插件之间的功能不会互相冲突。 -::: - -在实际项目中,很多插件都会注册有自然语言处理器,其中每个都按照它的解析情况返回 `IntentCommand` 对象(也可能不返回),NoneBot 会将所有自然语言处理器返回的 `IntentCommand` 对象按置信度排序,**取置信度最高且大于等于 60.0 的意图命令来执行**。 - - - -目前的代码中,直接根据关键词 `天气` 做出响应,无论消息其它部分是什么,只要包含关键词 `天气`,就会理解为 `weather` 命令。 - -现在运行 NoneBot,尝试向机器人发送任何包含 `天气` 二字的消息,例如: - -``` -今天天气怎么样? -``` - -一切正常的话,它会询问你要查询的城市,这表示它正确的进入了 `weather` 命令的会话中。 - -## 安装结巴分词 - -下面我们将允许用户在消息中直接给出要查询的城市,要做到这一点,我们需要能够对消息进行分词和词性标注,以判断哪个词是城市名称。 - -到这里是真正的自然语言处理的领域了,我们为了简单起见,使用 [结巴分词](https://github.com/fxsjy/jieba) 来进行词性标注。 - -使用如下命令安装结巴分词: - -```bash -pip install jieba -``` - -:::tip 提示 -如果你没有使用过结巴分词,建议先前往它的 [项目主页](https://github.com/fxsjy/jieba) 查看代码示例以了解基本用法。 -::: - -## 完善自然语言处理器 - -有了结巴分词之后,扩充 `weather/__init__.py` 如下: - -```python {3,35-49} -from nonebot import on_command, CommandSession -from nonebot import on_natural_language, NLPSession, IntentCommand -from jieba import posseg - -from .data_source import get_weather_of_city - - -@on_command('weather', aliases=('天气', '天气预报', '查天气')) -async def weather(session: CommandSession): - city = session.get('city', prompt='你想查询哪个城市的天气呢?') - weather_report = await get_weather_of_city(city) - await session.send(weather_report) - - -@weather.args_parser -async def _(session: CommandSession): - stripped_arg = session.current_arg_text.strip() - - if session.is_first_run: - if stripped_arg: - session.state['city'] = stripped_arg - return - - if not stripped_arg: - session.pause('要查询的城市名称不能为空呢,请重新输入') - - session.state[session.current_key] = stripped_arg - - -# on_natural_language 装饰器将函数声明为一个自然语言处理器 -# keywords 表示需要响应的关键词,类型为任意可迭代对象,元素类型为 str -# 如果不传入 keywords,则响应所有没有被当作命令处理的消息 -@on_natural_language(keywords={'天气'}) -async def _(session: NLPSession): - # 去掉消息首尾的空白符 - stripped_msg = session.msg_text.strip() - # 对消息进行分词和词性标注 - words = posseg.lcut(stripped_msg) - - city = None - # 遍历 posseg.lcut 返回的列表 - for word in words: - # 每个元素是一个 pair 对象,包含 word 和 flag 两个属性,分别表示词和词性 - if word.flag == 'ns': - # ns 词性表示地名 - city = word.word - break - - # 返回意图命令,前两个参数必填,分别表示置信度和意图命令名 - return IntentCommand(90.0, 'weather', current_arg=city or '') -``` - -这里我们首先使用结巴分词的 posseg 模块进行词性标注,然后找出第一个标记为 `ns`(表示地名,其它词性见 [ICTCLAS 汉语词性标注集](https://gist.github.com/luw2007/6016931#ictclas-%E6%B1%89%E8%AF%AD%E8%AF%8D%E6%80%A7%E6%A0%87%E6%B3%A8%E9%9B%86))的词,赋值给 `city`,进而作为 `weather` 命令的参数传入 `IntentCommand`(如果 `city` 为空,则给 `current_arg` 传入空字符串)。 - -:::tip 提示 -这里使用了 `current_arg`,因为之前编写的天气命令能够处理第一次运行时就附带了参数(城市名)的情况。 - -你也可以在你自己的功能中使用 `args` 传入更复杂的初始参数。 -::: - -现在运行 NoneBot,尝试向机器人分别发送下面两句话: - -``` -今天天气怎么样? -今天南京天气怎么样? -``` - -如果一切顺利,第一句它会问你要查询哪个城市,第二句会直接识别到城市。 - -## 理清自然语言处理器的逻辑 - -为了更好地理解自然语言处理器,这里再来尝试理清楚它的逻辑。 - -**自然语言处理器的核心功能,是从用户的任意消息中识别意图,并产生一个包含有初始参数的意图命令。** - -比如上面例子中的自然语言处理器所做的事情,就是进行如下所示的意图识别: - -``` -今天天气怎么样? => /天气 -今天南京天气怎么样? => /天气 南京 -``` - -箭头左边是用户发送的**没有明确格式的任意消息**,右边是自然语言处理器从中识别出的**真正意图所对应的命令**。 - -## 优化群聊中的使用体验 - -到目前为止我们都只关注了私聊的情况,实际上我们的天气插件在群聊中也可以正常工作,但是有一个问题,我们必须 @ 机器人,它才会回复。一种解决办法是,给 `on_natural_language` 装饰器添加参数 `only_to_me=False`,这样的话,机器人将会响应所有群聊中含有 `天气` 关键词的消息,这对于某些功能的插件来说可能比较适用。另一种办法是通过配置项 `NICKNAME` 设置机器人的昵称,例如: - -```python -NICKNAME = {'小明', '明明'} -``` - -`NICKNAME` 的值需要是一个 `Iterable`。设置了昵称之后,我们可以通过昵称来唤起机器人,例如: - -``` -小明,今天天气怎么样? -``` - -此处 `小明` 和 @ 的效果相同。 - -## 更精确的自然语言理解 - -如果你是一位自然语言处理领域的爱好者或从业人员,你可以在 NoneBot 中很方便地将你的理论研究应用到实例中,在自然语言处理器中使用更高级的 NLP 技术,并且,可以通过增加命令的参数,将自然语言的理解更加细化,以向用户提供更加顺畅的使用体验。 diff --git a/docs/guide/notice-and-request.md b/docs/guide/notice-and-request.md deleted file mode 100644 index e37c4d77..00000000 --- a/docs/guide/notice-and-request.md +++ /dev/null @@ -1,58 +0,0 @@ -# 处理通知和请求 - -除了聊天消息,酷Q 还提供了加群请求、加好友请求、出入群通知、管理员变动通知等很多其它事件,很多时候我们需要利用这些事件来实现群管功能,这也是 QQ 机器人除聊天之外的另一个很重要的应用之一。 - -本章将介绍如何在插件中处理通知和请求。 - -:::tip 提示 -本章的完整代码可以在 [awesome-bot-5](https://github.com/richardchien/nonebot/tree/master/docs/guide/code/awesome-bot-5) 查看。 -::: - -## 自动同意加群请求 - -首先我们可能需要机器人根据条件自动同意加群请求,从而不再需要管理员手动操作。 - -新建 `awesome/plugins/group_admin.py`,编写代码如下: - -```python -from nonebot import on_request, RequestSession - - -# 将函数注册为群请求处理器 -@on_request('group') -async def _(session: RequestSession): - # 判断验证信息是否符合要求 - if session.event.comment == '暗号': - # 验证信息正确,同意入群 - await session.approve() - return - # 验证信息错误,拒绝入群 - await session.reject('请说暗号') -``` - -这里首先 `on_request` 装饰器将函数注册为一个请求处理器,`group` 参数表示只处理群请求,这里各请求对应的参数值可以参考 [CQHTTP 插件的事件上报](https://cqhttp.cc/docs/#/Post?id=%E5%8A%A0%E5%A5%BD%E5%8F%8B%E8%AF%B7%E6%B1%82) 的 `request_type` 字段,目前有 `group` 和 `friend` 两种。 - -接着判断 `session.event.comment` 是否是正确的暗号,这里 `session.event` 是一个 `aiocqhttp.Event` 对象,即 CQHTTP 上报来的事件的简单包装,`comment` 属性用于获取加群或加好友事件中的验证信息。 - -最后 `session.approve()` 和 `session.reject()` 分别用于同意和拒绝加群请求,如果都不调用,则忽略请求(其它管理员仍然可以处理请求)。 - -## 欢迎新成员 - -新成员入群之后,为了活跃气氛,我们可能希望机器人发一段欢迎消息。只需下面的代码即可实现: - -```python -from nonebot import on_notice, NoticeSession - - -# 将函数注册为群成员增加通知处理器 -@on_notice('group_increase') -async def _(session: NoticeSession): - # 发送欢迎消息 - await session.send('欢迎新朋友~') -``` - -:::warning 注意 -这里最好预先判断一下是不是你想发送的群(通过 `session.event.group_id`),否则机器人所在的任何群有新成员进入它都会欢迎。 -::: - -总的来说这些 `on_*` 装饰器用起来都是差不多的,这里的 `group_increase` 表示群成员增加,其它的通知类型可以参考 [CQHTTP 插件的事件上报](https://cqhttp.cc/docs/#/Post?id=%E7%BE%A4%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0) 的 `notice_type`。 diff --git a/docs/guide/scheduler.md b/docs/guide/scheduler.md deleted file mode 100644 index 36219523..00000000 --- a/docs/guide/scheduler.md +++ /dev/null @@ -1,50 +0,0 @@ -# 添加计划任务 - -实际应用中还经常会有定时执行任务的需求,为了方便这类需求的开发,NoneBot 可选地包含了计划任务功能。 - -:::tip 提示 -本章的完整代码可以在 [awesome-bot-6](https://github.com/richardchien/nonebot/tree/master/docs/guide/code/awesome-bot-6) 查看。 -::: - -## 安装 `scheduler` 可选功能 - -计划任务功能在 NoneBot 中是可选功能,只有当同时安装了 [APScheduler](https://github.com/agronholm/apscheduler) 时,才会启用。 - -使用下面命令安装可选功能(会自动安装 APScheduler): - -```bash -pip install "nonebot[scheduler]" -``` - -安装成功之后就可以通过 `nonebot.scheduler` 访问 [`AsyncIOScheduler`](https://apscheduler.readthedocs.io/en/latest/modules/schedulers/asyncio.html#apscheduler.schedulers.asyncio.AsyncIOScheduler) 对象。 - -## 定时发送消息 - -这里以一个整点报时的功能为例,来介绍定时任务的使用。 - -新建文件 `awesome/plugins/scheduler.py`,编写代码如下: - -```python {8} -from datetime import datetime - -import nonebot -import pytz -from aiocqhttp.exceptions import Error as CQHttpError - - -@nonebot.scheduler.scheduled_job('cron', hour='*') -async def _(): - bot = nonebot.get_bot() - now = datetime.now(pytz.timezone('Asia/Shanghai')) - try: - await bot.send_group_msg(group_id=672076603, - message=f'现在{now.hour}点整啦!') - except CQHttpError: - pass -``` - -这里最主要的就是第 8 行,`nonebot.scheduler.scheduled_job()` 是一个装饰器,第一个参数是触发器类型(这里是 `cron`,表示使用 [Cron](https://apscheduler.readthedocs.io/en/latest/modules/triggers/cron.html#module-apscheduler.triggers.cron) 类型的触发参数)。这里 `hour='*'` 表示每小时都执行,`minute` 和 `second` 不填时默认为 `0`,也就是说装饰器所装饰的这个函数会在每小时的第一秒被执行。 - -除了 `cron`,还有两种触发器类型 `interval` 和 `date`。例如,你可以使用 `nonebot.scheduler.scheduled_job('interval', minutes=10)` 来每十分钟执行一次任务。 - -限于篇幅,这里无法给出太详细的接口介绍,`nonebot.scheduler` 是一个 APScheduler 的 `AsyncIOScheduler` 对象,因此关于它的更多使用方法,可以参考 [APScheduler 的官方文档](https://apscheduler.readthedocs.io/en/latest/userguide.html)。 diff --git a/docs/guide/tuling.md b/docs/guide/tuling.md deleted file mode 100644 index df545c92..00000000 --- a/docs/guide/tuling.md +++ /dev/null @@ -1,254 +0,0 @@ -# 接入图灵机器人 - -:::danger 重要 -本章内容可能已经过时,即将更新。 -::: - -到目前为止我们已经编写了一个相对完整的天气查询插件,包括命令和自然语言处理器,除此之外,使用同样的方法,还可以编写更多功能的插件。 - -但这样的套路存在一个问题,如果我们不是专业的 NLP 工程师,开放话题的智能聊天仍然是我们无法自己完成的事情,用户只能通过特定插件所支持的句式来使用相应的功能,当用户试图使用我们暂时没有开发的功能时,我们的机器人显得似乎有些无能为力。 - -不过还是有解决方案的,市面上有一些提供智能聊天机器人接口的厂商,本章我们以 [图灵机器人](http://www.tuling123.com/) 为例,因为它的使用比较广泛,接入也比较简单,不过缺点是免费调用次数比较少。 - -:::tip 提示 -本章的完整代码可以在 [awesome-bot-4](https://github.com/richardchien/nonebot/tree/master/docs/guide/code/awesome-bot-4) 查看。 -::: - -## 注册图灵机器人账号 - -首先前往 [图灵机器人官网](http://www.tuling123.com/) 注册账号,然后在「机器人管理」页根据它的提示创建机器人,可以设置机器人名字、属性、技能、语料库等。 - -:::warning 注意 -图灵机器人的免费套餐现在需要实名认证后才可使用。 -::: - -注册完成后先放一边,或者如果有兴趣的话,在网页上的聊天窗口和它聊几句看看效果。 - -## 编写图灵机器人插件 - -新建 `awesome/plugins/tuling.py` 文件,编写如下内容: - -```python -import json -from typing import Optional - -import aiohttp -from aiocqhttp.message import escape -from nonebot import on_command, CommandSession -from nonebot import on_natural_language, NLPSession, IntentCommand -from nonebot.helpers import context_id, render_expression - -# 定义无法获取图灵回复时的「表达(Expression)」 -EXPR_DONT_UNDERSTAND = ( - '我现在还不太明白你在说什么呢,但没关系,以后的我会变得更强呢!', - '我有点看不懂你的意思呀,可以跟我聊些简单的话题嘛', - '其实我不太明白你的意思……', - '抱歉哦,我现在的能力还不能够明白你在说什么,但我会加油的~' -) - - -# 注册一个仅内部使用的命令,不需要 aliases -@on_command('tuling') -async def tuling(session: CommandSession): - # 获取可选参数,这里如果没有 message 参数,命令不会被中断,message 变量会是 None - message = session.state.get('message') - - # 通过封装的函数获取图灵机器人的回复 - reply = await call_tuling_api(session, message) - if reply: - # 如果调用图灵机器人成功,得到了回复,则转义之后发送给用户 - # 转义会把消息中的某些特殊字符做转换,以避免 酷Q 将它们理解为 CQ 码 - await session.send(escape(reply)) - else: - # 如果调用失败,或者它返回的内容我们目前处理不了,发送无法获取图灵回复时的「表达」 - # 这里的 render_expression() 函数会将一个「表达」渲染成一个字符串消息 - await session.send(render_expression(EXPR_DONT_UNDERSTAND)) - - -@on_natural_language -async def _(session: NLPSession): - # 以置信度 60.0 返回 tuling 命令 - # 确保任何消息都在且仅在其它自然语言处理器无法理解的时候使用 tuling 命令 - return IntentCommand(60.0, 'tuling', args={'message': session.msg_text}) - - -async def call_tuling_api(session: CommandSession, text: str) -> Optional[str]: - # 调用图灵机器人的 API 获取回复 - - if not text: - return None - - url = 'http://openapi.tuling123.com/openapi/api/v2' - - # 构造请求数据 - payload = { - 'reqType': 0, - 'perception': { - 'inputText': { - 'text': text - } - }, - 'userInfo': { - 'apiKey': session.bot.config.TULING_API_KEY, - 'userId': context_id(session.ctx, use_hash=True) - } - } - - group_unique_id = context_id(session.ctx, mode='group', use_hash=True) - if group_unique_id: - payload['userInfo']['groupId'] = group_unique_id - - try: - # 使用 aiohttp 库发送最终的请求 - async with aiohttp.ClientSession() as sess: - async with sess.post(url, json=payload) as response: - if response.status != 200: - # 如果 HTTP 响应状态码不是 200,说明调用失败 - return None - - resp_payload = json.loads(await response.text()) - if resp_payload['results']: - for result in resp_payload['results']: - if result['resultType'] == 'text': - # 返回文本类型的回复 - return result['values']['text'] - except (aiohttp.ClientError, json.JSONDecodeError, KeyError): - # 抛出上面任何异常,说明调用失败 - return None -``` - -上面这段代码比较长,而且有一些新出现的函数和概念,我们后面会慢慢地详解,不过现在先在 `config.py` 中添加一项: - -```python -TULING_API_KEY = '' -``` - -`TULING_API_KEY` 的值填图灵机器人的「机器人设置」页面最下方提供的 API Key。 - -配置完成后来运行 NoneBot,尝试给机器人随便发送一条消息,看看它是不是正确地获取了图灵机器人的回复。 - -## 理解自然语言处理器 - -我们先来理解代码中最简单的部分: - -```python {3} -@on_natural_language -async def _(session: NLPSession): - return IntentCommand(60.0, 'tuling', args={'message': session.msg_text}) -``` - -根据我们前面一章中已经知道的用法,这里就是直接返回置信度为 60.0 的 `tuling` 命令。之所以返回置信度 60.0,是因为自然语言处理器所返回的结果最终会按置信度排序,取置信度最高且大于等于 60.0 的结果来执行。把置信度设为 60.0 可以保证一条消息无法被其它自然语言处理器理解的时候 fallback 到 `tuling` 命令。 - -## 理解图灵机器人接口的 HTTP 调用 - -图灵机器人接口的调用也非常简单,虽然看起来代码挺多,但新的概念并不多。 - -```python {7-23,26-37} -async def call_tuling_api(session: CommandSession, text: str) -> Optional[str]: - if not text: - return None - - url = 'http://openapi.tuling123.com/openapi/api/v2' - - # 构造请求数据 - payload = { - 'reqType': 0, - 'perception': { - 'inputText': { - 'text': text - } - }, - 'userInfo': { - 'apiKey': session.bot.config.TULING_API_KEY, - 'userId': context_id(session.ctx, use_hash=True) - } - } - - group_unique_id = context_id(session.ctx, mode='group', use_hash=True) - if group_unique_id: - payload['userInfo']['groupId'] = group_unique_id - - try: - async with aiohttp.ClientSession() as sess: - async with sess.post(url, json=payload) as response: - if response.status != 200: - # 如果 HTTP 响应状态码不是 200,说明调用失败 - return None - - resp_payload = json.loads(await response.text()) - if resp_payload['results']: - for result in resp_payload['results']: - if result['resultType'] == 'text': - # 返回文本类型的回复 - return result['values']['text'] - except (aiohttp.ClientError, json.JSONDecodeError, KeyError): - # 抛出上面任何异常,说明调用失败 - return None -``` - -这里的代码主要需要参考 [图灵机器人的官方 API 文档](https://www.kancloud.cn/turing/www-tuling123-com/718227)。 - -### 构造请求数据 - -第一段高亮部分是根据图灵机器人的文档构造请求数据,其中有几个需要注意的地方:第 16、17 和 21 行。 - -第 16 行通过 `session.bot.config` 访问了 NoneBot 的配置对象,`session.bot` 就是当前正在运行的 NoneBot 对象,你在其它任何地方都可以这么用(前提是已经调用过 `nonebot.init()`)。 - -第 17 和 21 行调用了 `context_id()` 函数,这是 `nonebot.helpers` 模块中提供的一个函数,用于计算 Context 的独特 ID,有三种模式可以选择(通过 `mode` 参数传入):`default`、`group`、`user`,默认 `default`,它们的效果如下表: - -| 模式 | 效果 | -| ------------ | --- | -| `default` | 每个用户在每个群、讨论组和私聊都对应不同的 ID | -| `group` | 每个群或讨论组内的成员共用一个 ID,私聊仍按用户区分 | -| `user` | 每个用户对应不同的 ID,但不区分用户是在私聊还是群或讨论组 | - -`context_id()` 函数还提供 `use_hash` 参数可选地将计算出的 ID 进行 MD5 哈希,以适应某些应用场景。 - -### 发送请求 - -第二段高亮的代码是使用 [aiohttp](https://aiohttp.readthedocs.io/en/stable/) 发送 HTTP POST 请求给图灵机器人,并获取它的回复,这段其实没有什么跟 NoneBot 有关的东西,请参考前面给出的图灵机器人的官方 API 文档,里面详细解释了每个返回字段的含义。 - -## 理解命令处理器 - -命令处理器这部分虽然代码比较少,但引入了不少新的概念。 - -```python {1,3-8,13,16,18} -from aiocqhttp.message import escape - -EXPR_DONT_UNDERSTAND = ( - '我现在还不太明白你在说什么呢,但没关系,以后的我会变得更强呢!', - '我有点看不懂你的意思呀,可以跟我聊些简单的话题嘛', - '其实我不太明白你的意思……', - '抱歉哦,我现在的能力还不能够明白你在说什么,但我会加油的~' -) - - -@on_command('tuling') -async def tuling(session: CommandSession): - message = session.state.get('message') - reply = await call_tuling_api(session, message) - if reply: - await session.send(escape(reply)) - else: - await session.send(render_expression(EXPR_DONT_UNDERSTAND)) -``` - -### 可选参数 - -首先看第 13 行,`session.state.get()` 可用于获取命令的可选参数,也就是说,从 `session.state` 中尝试获取一个参数(还记得 `IntentCommand` 的 `args` 参数内容会全部进入 `CommandSession` 的 `state` 吗),如果没有,返回 `None`,但并不会中断命令的执行。其实这就是 `dict.get()` 方法。 - -### 消息转义 - -再看第 16 行,在调用 `session.send()` 之前先对 `reply` 调用了 `escape()`,这个 `escape()` 函数是 `aiocqhttp.message` 模块提供的,用于将字符串中的某些特殊字符进行转义。具体来说,这些特殊字符是 酷Q 看作是 CQ 码的一部分的那些字符,包括 `&`、`[`、`]`、`,`。 - -CQ 码是 酷Q 用来表示非文本消息的一种表示方法,形如 `[CQ:image,file=ABC.jpg]`。具体的格式规则,请参考 酷Q 文档的 [CQ 码](https://d.cqp.me/Pro/CQ%E7%A0%81) 和 CoolQ HTTP API 插件文档的 [CQ 码](https://cqhttp.cc/docs/#/CQCode)。 - -### 发送 Expression - -第 18 行使用了 NoneBot 中 Expression 这个概念,或称为「表达」。 - -Expression 可以是一个 `str`、元素类型是 `str` 的序列(一般为 `list` 或 `tuple`)或返回类型为 `str` 的 `Callable`。 - -`render_expression()` 函数用于将 Expression 渲染成字符串。它首先判断 Expression 的类型,如果 Expression 是一个序列,则首先随机取其中的一个元素,如果是一个 `Callable`,则调用函数获取返回值。拿到最终的 `str` 类型的 Expression 之后,对它调用 `str.format()` 方法,格式化参数传入 `render_expression()` 函数的命名参数(`**kwargs`),最后返回格式化后的结果。特别地,如果 Expression 是个 `Callable`,在调用它获取返回值的时候,也会传入 `**kwargs`,以便函数根据参数来构造字符串。 - -你可以通过使用序列或 `Callable` 类型的 Expression 来让机器人的回复显得更加自然,甚至,可以利用更高级的人工智能技术来生成对话。 diff --git a/docs/guide/usage.md b/docs/guide/usage.md deleted file mode 100644 index 5284c217..00000000 --- a/docs/guide/usage.md +++ /dev/null @@ -1,76 +0,0 @@ -# 编写使用帮助 - -经过前面的部分,我们已经给机器人编写了天气查询和图灵聊天插件,当然,你可能已经另外编写了更多具有个性化功能的插件。 - -现在,为了让用户能够更方便的使用,是时候编写一个使用帮助了。 - -:::tip 提示 -本章的完整代码可以在 [awesome-bot-7](https://github.com/richardchien/nonebot/tree/master/docs/guide/code/awesome-bot-7) 查看。 -::: - -## 给插件添加名称和用法 - -这里以天气查询和图灵聊天两个插件为例,分别在 `awesome/plugins/weather/__init__.py` 和 `awesome/plugins/tuling.py` 两个文件的开头,通过 `__plugin_name__` 和 `__plugin_usage__` 两个特殊变量设置插件的名称和使用方法,如下: - -```python -# awesome/plugins/weather/__init__.py - -# ... 各种 import - -__plugin_name__ = '天气' -__plugin_usage__ = r""" -天气查询 - -天气 [城市名称] -""" -``` - -```python -# awesome/plugins/tuling.py - -# ... 各种 import - -__plugin_name__ = '智能聊天' -__plugin_usage__ = r""" -智能聊天 - -直接跟我聊天即可~ -""".strip() -``` - -一旦使用 `__plugin_name__` 和 `__plugin_usage__` 特殊变量设置了插件的名称和使用方法,NoneBot 在加载插件时就能够读取到这些内容,并存放在已加载插件的数据结构中。 - -## 编写使用帮助命令 - -新建插件 `awesome/plugins/usage.py`,编写内容如下: - -```python {8,13-14,20} -import nonebot -from nonebot import on_command, CommandSession - - -@on_command('usage', aliases=['使用帮助', '帮助', '使用方法']) -async def _(session: CommandSession): - # 获取设置了名称的插件列表 - plugins = list(filter(lambda p: p.name, nonebot.get_loaded_plugins())) - - arg = session.current_arg_text.strip().lower() - if not arg: - # 如果用户没有发送参数,则发送功能列表 - await session.send( - '我现在支持的功能有:\n\n' + '\n'.join(p.name for p in plugins)) - return - - # 如果发了参数则发送相应命令的使用帮助 - for p in plugins: - if p.name.lower() == arg: - await session.send(p.usage) -``` - -这里高亮的内容是重点: - -- `nonebot.get_loaded_plugins()` 函数用于获取所有已经加载的插件,**注意,由于可能存在插件没有设置 `__plugin_name__` 变量的情况,插件的名称有可能为空**,因此建议过滤一下 -- 插件的 `name` 属性(`plugin.name`)用于获得插件模块的 `__plugin_name__` 特殊变量的值 -- 插件的 `usage` 属性(`plugin.usage`)用于获得插件模块的 `__plugin_usage__` 特殊变量的值 - -到这里,使用帮助命令就已经编写完成了。如果愿意,可以继续按照自己的思路实现相对应的自然语言处理器,以优化使用体验。 diff --git a/docs/guide/whats-happened.md b/docs/guide/whats-happened.md deleted file mode 100644 index 85f80736..00000000 --- a/docs/guide/whats-happened.md +++ /dev/null @@ -1,88 +0,0 @@ -# 发生了什么? - -上一章中我们已经运行了一个最小的 NoneBot 实例,在看着 QQ 机器人回复了自己的消息的同时,你可能想问,这是如何实现的?具体来说,NoneBot、CQHTTP 插件、酷Q,这三者是如何协同工作的?本章将对这个问题做一个初步解答。 - -:::tip 提示 -如果你已经有较丰富的 QQ 机器人开发经验,尤其是使用 CQHTTP 插件的经验,可以直接跳到 [NoneBot 出场](#nonebot-出场)。 -::: - -## 一切从 酷Q 开始 - -我们在 [概览](./README.md) 中提到过,酷Q 扮演着「无头 QQ 客户端」的角色,一切的消息、通知、请求的发送和接收,最根本上都是由它来完成的,我们的最小 NoneBot 实例也不例外。 - -首先,我们向机器人发送的 `/echo 你好,世界` 进入腾讯的服务器,后者随后会把消息推送给 酷Q,就像推送给一个真正的 QQ 客户端一样。到这里,酷Q 就已经收到了我们发送的消息了。 - -## 进入 CQHTTP 插件 - -酷Q 在收到消息之后,按优先级依次将消息转交给已启用的各插件处理,在我们的例子中,只有一个插件,就是 CQHTTP 插件。 - -CQHTTP 插件收到消息后,会将其包装为一个统一的事件格式,并对消息内容进行一个初步的处理,例如编码转换、数组化、CQ 码增强等,这里的细节目前为止不需要完全明白,在需要的时候,可以去参考 CQHTTP 插件的 [文档](https://cqhttp.cc/docs/)。 - -接着,插件把包装好的事件转换成 JSON 格式,并通过「反向 WebSocket」发送给 NoneBot。这里的「反向 WebSocket」,连接的就是我们在 CQHTTP 插件的配置中指定的 `ws_reverse_url`,即 NoneBot 监听的 WebSocket 入口。 - -:::tip 提示 -「反向 WebSocket」是 CQHTTP 插件的一种通信方式,表示插件作为客户端,主动去连接配置文件中指定的 `ws_reverse_url`。除此之外还有 HTTP、(正向)WebSocket 等方式。除了反向 WebSocket,NoneBot 也支持通过 HTTP 与 CQHTTP 通信。 -::: - -## NoneBot 出场 - -CQHTTP 插件通过反向 WebSocket 将消息事件发送到 NoneBot 后,NoneBot 就开始了它的处理流程。 - -### 初步处理 - -首先 NoneBot 利用底层的 aiocqhttp 区分事件类型,并通知到相应的函数,本例中,相应的函数就是负责处理消息的函数。 - -负责处理消息的函数会尝试把消息作为一个命令来解析,根据默认配置,它发现消息内容 `/echo 你好,世界` 符合命令的一个特征——以 `/` 开头,剥离掉这个起始字符之后,消息变为 `echo 你好,世界`,紧接着,它读取第一个空白字符之前的内容,即 `echo`,将其理解为命令的名字。 - -:::tip 提示 -实际上,它还会使用配置中的分隔符对 `echo` 做一个分割,不过这里分割完也只有一个部分,所以实际命令名字为 `('echo',)`,形式是一个 Python 元组;而如果我们发送的命令是 `note.add`,分割之后就是 `('note', 'add')`。 -::: - -### 理解最小实例的代码 - -到这里,我们先暂停一下对消息事件的行踪的描述,回头来说一下最小实例的代码: - -```python {4-6} -import nonebot - -if __name__ == '__main__': - nonebot.init() - nonebot.load_builtin_plugins() - nonebot.run(host='127.0.0.1', port=8080) -``` - -第 4 行的 `nonebot.init()` 首先初始化 `nonebot` 包,这是无论如何都需要写的一行代码,并且必须在使用 NoneBot 的任何功能之前调用。 - -随后,`nonebot.load_builtin_plugins()` 加载了 NoneBot 的内置插件,这一步不是必须的,尤其在你编写了自己的插件之后,可能不再需要内置插件。 - -NoneBot 的内置插件只包含了两个命令,`echo` 和 `say`,两者的功能都是重复发送者的话,区别在于,`echo` 命令任何人都可以调用(不限制权限),但只能原样重复消息,不能手动指定要发送的 CQ 码,`say` 命令只有超级用户(通常是你自己,需要在配置中指定,下一章会介绍)可以调用,可以在消息中指定要发送的 CQ 码,如下图: - -

- Echo and Say -

- -最后,`nonebot.run(host='127.0.0.1', port=8080)` 让 NoneBot 跑在了地址 `127.0.0.1:8080` 地址上,向 CQHTTP 插件提供 `/`、`/ws/` 等入口,在我们的反向 WebSocket 配置中,插件连接了 `/ws/`。 - -### 命令处理器 - -现在,我们知道了最小 NoneBot 实例中已经加载了 `echo` 和 `say` 两个命令,在 [初步处理](#初步处理) 中也知道了消息内容符合命令的格式,并且从中拿到了命令名(`echo`),这时候消息处理函数发现,这条消息中解析出来的命令确实是存在的,于是它将剩余部分(`你好,世界`)当做命令的参数,并通过命令名获取到对应的命令处理器,然后把参数、消息事件中附带的其它信息一起打包成一个 Session 对象(具体来说,是一个 `CommandSession` 类的对象),传给命令处理器来调用它。 - -`echo` 命令处理器的代码其实非常简单,如下: - -```python -@on_command('echo') -async def echo(session: CommandSession): - await session.send(session.state.get('message') or session.current_arg) -``` - -你现在不用关心它是如何从 Session 中拿到参数的,只需看到,命令处理器中实际内容只有一行 `session.send()` 函数调用,这个调用会直接把参数中的消息内容原样发送。 - -## 再次进入 CQHTTP 插件 - -命令处理器在调用 `session.send()` 之后,NoneBot 把消息内容发送给了 CQHTTP 插件那边已连接的反向 WebSocket 客户端,同时告诉它要把消息发送到和收到消息相同的地方(即接收到消息所在的群组、讨论组或私聊)。CQHTTP 插件明白了 NoneBot 的要求之后,会对消息做一些必要的处理,然后按照指示调用 酷Q 提供的相应接口。 - -## 一切又在 酷Q 结束 - -酷Q 收到 CQHTTP 插件的接口调用之后,将消息内容发送给腾讯的服务器,就像一个真正的 QQ 客户端一样,于是你就收到了 QQ 机器人发来的消息了。 - -至此,我们已经理清楚了第一次对话中每一步到底都发生了些什么,以及 NoneBot 如何解析消息并调用到相应的命令处理器来进行回复。下面的几章中我们将一步一步地对最小 NoneBot 实例进行扩充,以实现一些非常棒的功能! diff --git a/docs/guide/whats-next.md b/docs/guide/whats-next.md deleted file mode 100644 index c119c39d..00000000 --- a/docs/guide/whats-next.md +++ /dev/null @@ -1,5 +0,0 @@ -# 下一步做什么? - -在阅读完前面的入门指南之后,你已经具备了实现具有复杂功能的 QQ 机器人的基本知识,可以开始编写完整的作品了。 - -在实际编写代码时,可能需要参考 [CQHTTP 文档](https://cqhttp.cc/docs/) 和 [aiocqhttp 文档](https://python-aiocqhttp.cqp.moe/);对于一些高级主题,可以参考本文档 [进阶](../advanced/README.md) 部分;另外,也可以参考 [cczu-osa/aki](https://github.com/cczu-osa/aki) 中的一些实践,比如模块划分、数据库访问等。 diff --git a/nonebot/matcher.py b/nonebot/matcher.py index 2e66ba91..c2ed44d7 100644 --- a/nonebot/matcher.py +++ b/nonebot/matcher.py @@ -28,17 +28,19 @@ class Matcher: self.parser = self._args_parser or self._default_parser @classmethod - def new(cls, - rule: Rule = Rule(), - scope: Scope = "ALL", - permission: str = "ALL", - block: bool = True, - handlers: list = [], - temp: bool = False, - *, - default_state: dict = {}, - default_parser: Optional[Callable[[Event, dict], None]] = None, - args_parser: Optional[Callable[[Event, dict], None]] = None): + def new( + cls, + rule: Rule = Rule(), + scope: Scope = "ALL", + permission: str = "ALL", + block: bool = True, + handlers: list = [], + temp: bool = False, + *, + default_state: dict = {}, + default_parser: Optional[Callable[[Event, dict], None]] = None, + args_parser: Optional[Callable[[Event, dict], None]] = None + ) -> Type["Matcher"]: # class NewMatcher(cls): # rule: Rule = rule @@ -51,7 +53,7 @@ class Matcher: # _default_state = default_state NewMatcher = type( - "Matcher", (cls,), { + "Matcher", (Matcher,), { "rule": rule, "scope": scope, "permission": permission, @@ -178,20 +180,19 @@ def on_message(rule: Rule, default_state=state) -def on_startswith(msg, - start: int = None, - end: int = None, - rule: Optional[Rule] = None, - **kwargs) -> Type[Matcher]: - return on_message(startswith(msg, start, end) & - rule, **kwargs) if rule else on_message( - startswith(msg, start, end), **kwargs) +# def on_startswith(msg, +# start: int = None, +# end: int = None, +# rule: Optional[Rule] = None, +# **kwargs) -> Type[Matcher]: +# return on_message(startswith(msg, start, end) & +# rule, **kwargs) if rule else on_message( +# startswith(msg, start, end), **kwargs) - -def on_regex(pattern, - flags: Union[int, re.RegexFlag] = 0, - rule: Optional[Rule] = None, - **kwargs) -> Type[Matcher]: - return on_message(regex(pattern, flags) & - rule, **kwargs) if rule else on_message( - regex(pattern, flags), **kwargs) +# def on_regex(pattern, +# flags: Union[int, re.RegexFlag] = 0, +# rule: Optional[Rule] = None, +# **kwargs) -> Type[Matcher]: +# return on_message(regex(pattern, flags) & +# rule, **kwargs) if rule else on_message( +# regex(pattern, flags), **kwargs) diff --git a/nonebot_test/__init__.py b/nonebot_test/__init__.py new file mode 100644 index 00000000..59652573 --- /dev/null +++ b/nonebot_test/__init__.py @@ -0,0 +1,4 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +# TODO: test running nonebot diff --git a/package.json b/package.json deleted file mode 100644 index 12405471..00000000 --- a/package.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "scripts": { - "docs:dev": "vuepress dev --host 127.0.0.1 -p 8888 --debug docs", - "docs:build": "vuepress build docs" - }, - "devDependencies": { - "vuepress": "^0.14.8" - } -} diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 00000000..cd39545d --- /dev/null +++ b/poetry.lock @@ -0,0 +1,115 @@ +[[package]] +category = "main" +description = "In-process task scheduler with Cron-like capabilities" +name = "apscheduler" +optional = true +python-versions = "*" +version = "3.6.3" + +[package.dependencies] +pytz = "*" +setuptools = ">=0.7" +six = ">=1.4.0" +tzlocal = ">=1.2" + +[package.extras] +asyncio = ["trollius"] +doc = ["sphinx", "sphinx-rtd-theme"] +gevent = ["gevent"] +mongodb = ["pymongo (>=2.8)"] +redis = ["redis (>=3.0)"] +rethinkdb = ["rethinkdb (>=2.4.0)"] +sqlalchemy = ["sqlalchemy (>=0.8)"] +testing = ["pytest", "pytest-cov", "pytest-tornado5", "mock", "pytest-asyncio (<0.6)", "pytest-asyncio"] +tornado = ["tornado (>=4.3)"] +twisted = ["twisted"] +zookeeper = ["kazoo"] + +[package.source] +reference = "aliyun" +type = "legacy" +url = "https://mirrors.aliyun.com/pypi/simple" + +[[package]] +category = "main" +description = "World timezone definitions, modern and historical" +name = "pytz" +optional = true +python-versions = "*" +version = "2020.1" + +[package.source] +reference = "aliyun" +type = "legacy" +url = "https://mirrors.aliyun.com/pypi/simple" + +[[package]] +category = "main" +description = "Python 2 and 3 compatibility utilities" +name = "six" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +version = "1.15.0" + +[package.source] +reference = "aliyun" +type = "legacy" +url = "https://mirrors.aliyun.com/pypi/simple" + +[[package]] +category = "main" +description = "tzinfo object for the local timezone" +name = "tzlocal" +optional = true +python-versions = "*" +version = "2.1" + +[package.dependencies] +pytz = "*" + +[package.source] +reference = "aliyun" +type = "legacy" +url = "https://mirrors.aliyun.com/pypi/simple" + +[[package]] +category = "dev" +description = "A formatter for Python code." +name = "yapf" +optional = false +python-versions = "*" +version = "0.30.0" + +[package.source] +reference = "aliyun" +type = "legacy" +url = "https://mirrors.aliyun.com/pypi/simple" + +[extras] +scheduler = ["apscheduler"] + +[metadata] +content-hash = "1cf1db5856a5f3e46484122795ab0da8f579d1ca907ce62b67869f77196f640f" +python-versions = "^3.7" + +[metadata.files] +apscheduler = [ + {file = "APScheduler-3.6.3-py2.py3-none-any.whl", hash = "sha256:e8b1ecdb4c7cb2818913f766d5898183c7cb8936680710a4d3a966e02262e526"}, + {file = "APScheduler-3.6.3.tar.gz", hash = "sha256:3bb5229eed6fbbdafc13ce962712ae66e175aa214c69bed35a06bffcf0c5e244"}, +] +pytz = [ + {file = "pytz-2020.1-py2.py3-none-any.whl", hash = "sha256:a494d53b6d39c3c6e44c3bec237336e14305e4f29bbf800b599253057fbb79ed"}, + {file = "pytz-2020.1.tar.gz", hash = "sha256:c35965d010ce31b23eeb663ed3cc8c906275d6be1a34393a1d73a41febf4a048"}, +] +six = [ + {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, + {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"}, +] +tzlocal = [ + {file = "tzlocal-2.1-py2.py3-none-any.whl", hash = "sha256:e2cb6c6b5b604af38597403e9852872d7f534962ae2954c7f35efcb1ccacf4a4"}, + {file = "tzlocal-2.1.tar.gz", hash = "sha256:643c97c5294aedc737780a49d9df30889321cbe1204eac2c2ec6134035a92e44"}, +] +yapf = [ + {file = "yapf-0.30.0-py2.py3-none-any.whl", hash = "sha256:3abf61ba67cf603069710d30acbc88cfe565d907e16ad81429ae90ce9651e0c9"}, + {file = "yapf-0.30.0.tar.gz", hash = "sha256:3000abee4c28daebad55da6c85f3cd07b8062ce48e2e9943c8da1b9667d48427"}, +] diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..8c4c3736 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,42 @@ +[tool.poetry] +name = "nonebot" +version = "2.0.0" +description = "An asynchronous QQ bot framework." +authors = ["Richard Chien ", "yanyongyu "] +license = "MIT" +readme = "README.md" +homepage = "https://nonebot.cqp.moe/" +repository = "https://github.com/nonebot/nonebot" +documentation = "https://nonebot.cqp.moe/" +keywords = ["bot", "qq", "qqbot", "cqhttp", "coolq"] +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Framework :: Robot Framework", + "Framework :: Robot Framework :: Library", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3" +] +packages = [ + { include = "nonebot" }, + { include = "nonebot_test" } +] + +[tool.poetry.dependencies] +python = "^3.7" +apscheduler = { version = "^3.6.3", optional = true } + +[tool.poetry.dev-dependencies] +yapf = "^0.30.0" + +[tool.poetry.extras] +scheduler = ["apscheduler"] + +[[tool.poetry.source]] +name = "aliyun" +url = "https://mirrors.aliyun.com/pypi/simple/" +default = true + +[build-system] +requires = ["poetry>=0.12"] +build-backend = "poetry.masonry.api" diff --git a/setup.py b/setup.py deleted file mode 100644 index cb6af14d..00000000 --- a/setup.py +++ /dev/null @@ -1,36 +0,0 @@ -from setuptools import setup, find_packages - -with open('README.md', 'r', encoding='utf-8') as f: - long_description = f.read() - -packages = find_packages(include=('nonebot', 'nonebot.*')) - -setup( - name='nonebot', - version='1.6.0', - url='https://github.com/richardchien/nonebot', - license='MIT License', - author='Richard Chien', - author_email='richardchienthebest@gmail.com', - description='An asynchronous QQ bot framework based on CoolQ.', - long_description=long_description, - long_description_content_type='text/markdown', - packages=packages, - package_data={ - '': ['*.pyi'], - }, - install_requires=['aiocqhttp>=1.2,<1.3', 'aiocache>=0.10,<1.0'], - extras_require={ - 'scheduler': ['apscheduler'], - }, - python_requires='>=3.7', - platforms='any', - classifiers=[ - 'Development Status :: 5 - Production/Stable', - 'Framework :: Robot Framework', - 'Framework :: Robot Framework :: Library', - 'License :: OSI Approved :: MIT License', - 'Operating System :: OS Independent', - 'Programming Language :: Python :: 3', - ], -) diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 55a547e7..00000000 --- a/yarn.lock +++ /dev/null @@ -1,7600 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.0.0-beta.47.tgz#d18c2f4c4ba8d093a2bcfab5616593bfe2441a27" - integrity sha1-0YwvTEuo0JOivPq1YWWTv+JEGic= - dependencies: - "@babel/highlight" "7.0.0-beta.47" - -"@babel/core@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/core/download/@babel/core-7.0.0-beta.47.tgz#b9c164fb9a1e1083f067c236a9da1d7a7d759271" - integrity sha1-ucFk+5oeEIPwZ8I2qdoden11knE= - dependencies: - "@babel/code-frame" "7.0.0-beta.47" - "@babel/generator" "7.0.0-beta.47" - "@babel/helpers" "7.0.0-beta.47" - "@babel/template" "7.0.0-beta.47" - "@babel/traverse" "7.0.0-beta.47" - "@babel/types" "7.0.0-beta.47" - babylon "7.0.0-beta.47" - convert-source-map "^1.1.0" - debug "^3.1.0" - json5 "^0.5.0" - lodash "^4.17.5" - micromatch "^2.3.11" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.0.0-beta.47.tgz#1835709f377cc4d2a4affee6d9258a10bbf3b9d1" - integrity sha1-GDVwnzd8xNKkr/7m2SWKELvzudE= - dependencies: - "@babel/types" "7.0.0-beta.47" - jsesc "^2.5.1" - lodash "^4.17.5" - source-map "^0.5.0" - trim-right "^1.0.1" - -"@babel/helper-annotate-as-pure@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.0.0-beta.47.tgz#354fb596055d9db369211bf075f0d5e93904d6f6" - integrity sha1-NU+1lgVdnbNpIRvwdfDV6TkE1vY= - dependencies: - "@babel/types" "7.0.0-beta.47" - -"@babel/helper-builder-binary-assignment-operator-visitor@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.0.0-beta.47.tgz#d5917c29ee3d68abc2c72f604bc043f6e056e907" - integrity sha1-1ZF8Ke49aKvCxy9gS8BD9uBW6Qc= - dependencies: - "@babel/helper-explode-assignable-expression" "7.0.0-beta.47" - "@babel/types" "7.0.0-beta.47" - -"@babel/helper-call-delegate@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/helper-call-delegate/download/@babel/helper-call-delegate-7.0.0-beta.47.tgz#96b7804397075f722a4030d3876f51ec19d8829b" - integrity sha1-lreAQ5cHX3IqQDDTh29R7BnYgps= - dependencies: - "@babel/helper-hoist-variables" "7.0.0-beta.47" - "@babel/traverse" "7.0.0-beta.47" - "@babel/types" "7.0.0-beta.47" - -"@babel/helper-define-map@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/helper-define-map/download/@babel/helper-define-map-7.0.0-beta.47.tgz#43a9def87c5166dc29630d51b3da9cc4320c131c" - integrity sha1-Q6ne+HxRZtwpYw1Rs9qcxDIMExw= - dependencies: - "@babel/helper-function-name" "7.0.0-beta.47" - "@babel/types" "7.0.0-beta.47" - lodash "^4.17.5" - -"@babel/helper-explode-assignable-expression@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.0.0-beta.47.tgz#56b688e282a698f4d1cf135453a11ae8af870a19" - integrity sha1-VraI4oKmmPTRzxNUU6Ea6K+HChk= - dependencies: - "@babel/traverse" "7.0.0-beta.47" - "@babel/types" "7.0.0-beta.47" - -"@babel/helper-function-name@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.0.0-beta.47.tgz#8057d63e951e85c57c02cdfe55ad7608d73ffb7d" - integrity sha1-gFfWPpUehcV8As3+Va12CNc/+30= - dependencies: - "@babel/helper-get-function-arity" "7.0.0-beta.47" - "@babel/template" "7.0.0-beta.47" - "@babel/types" "7.0.0-beta.47" - -"@babel/helper-get-function-arity@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.0.0-beta.47.tgz#2de04f97c14b094b55899d3fa83144a16d207510" - integrity sha1-LeBPl8FLCUtViZ0/qDFEoW0gdRA= - dependencies: - "@babel/types" "7.0.0-beta.47" - -"@babel/helper-hoist-variables@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.0.0-beta.47.tgz#ce295d1d723fe22b2820eaec748ed701aa5ae3d0" - integrity sha1-zildHXI/4isoIOrsdI7XAapa49A= - dependencies: - "@babel/types" "7.0.0-beta.47" - -"@babel/helper-member-expression-to-functions@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.0.0-beta.47.tgz#35bfcf1d16dce481ef3dec66d5a1ae6a7d80bb45" - integrity sha1-Nb/PHRbc5IHvPexm1aGuan2Au0U= - dependencies: - "@babel/types" "7.0.0-beta.47" - -"@babel/helper-module-imports@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.0.0-beta.47.tgz#5af072029ffcfbece6ffbaf5d9984c75580f3f04" - integrity sha1-WvByAp/8++zm/7r12ZhMdVgPPwQ= - dependencies: - "@babel/types" "7.0.0-beta.47" - lodash "^4.17.5" - -"@babel/helper-module-transforms@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.0.0-beta.47.tgz#7eff91fc96873bd7b8d816698f1a69bbc01f3c38" - integrity sha1-fv+R/JaHO9e42BZpjxppu8AfPDg= - dependencies: - "@babel/helper-module-imports" "7.0.0-beta.47" - "@babel/helper-simple-access" "7.0.0-beta.47" - "@babel/helper-split-export-declaration" "7.0.0-beta.47" - "@babel/template" "7.0.0-beta.47" - "@babel/types" "7.0.0-beta.47" - lodash "^4.17.5" - -"@babel/helper-optimise-call-expression@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.0.0-beta.47.tgz#085d864d0613c5813c1b7c71b61bea36f195929e" - integrity sha1-CF2GTQYTxYE8G3xxthvqNvGVkp4= - dependencies: - "@babel/types" "7.0.0-beta.47" - -"@babel/helper-plugin-utils@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.0.0-beta.47.tgz#4f564117ec39f96cf60fafcde35c9ddce0e008fd" - integrity sha1-T1ZBF+w5+Wz2D6/N41yd3ODgCP0= - -"@babel/helper-regex@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/helper-regex/download/@babel/helper-regex-7.0.0-beta.47.tgz#b8e3b53132c4edbb04804242c02ffe4d60316971" - integrity sha1-uOO1MTLE7bsEgEJCwC/+TWAxaXE= - dependencies: - lodash "^4.17.5" - -"@babel/helper-remap-async-to-generator@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.0.0-beta.47.tgz#444dc362f61470bd61a745ebb364431d9ca186c2" - integrity sha1-RE3DYvYUcL1hp0Xrs2RDHZyhhsI= - dependencies: - "@babel/helper-annotate-as-pure" "7.0.0-beta.47" - "@babel/helper-wrap-function" "7.0.0-beta.47" - "@babel/template" "7.0.0-beta.47" - "@babel/traverse" "7.0.0-beta.47" - "@babel/types" "7.0.0-beta.47" - -"@babel/helper-replace-supers@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.0.0-beta.47.tgz#310b206a302868a792b659455ceba27db686cbb7" - integrity sha1-MQsgajAoaKeStllFXOuifbaGy7c= - dependencies: - "@babel/helper-member-expression-to-functions" "7.0.0-beta.47" - "@babel/helper-optimise-call-expression" "7.0.0-beta.47" - "@babel/traverse" "7.0.0-beta.47" - "@babel/types" "7.0.0-beta.47" - -"@babel/helper-simple-access@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/helper-simple-access/download/@babel/helper-simple-access-7.0.0-beta.47.tgz#234d754acbda9251a10db697ef50181eab125042" - integrity sha1-I011SsvaklGhDbaX71AYHqsSUEI= - dependencies: - "@babel/template" "7.0.0-beta.47" - "@babel/types" "7.0.0-beta.47" - lodash "^4.17.5" - -"@babel/helper-split-export-declaration@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.0.0-beta.47.tgz#e11277855472d8d83baf22f2d0186c4a2059b09a" - integrity sha1-4RJ3hVRy2Ng7ryLy0BhsSiBZsJo= - dependencies: - "@babel/types" "7.0.0-beta.47" - -"@babel/helper-wrap-function@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.0.0-beta.47.tgz#6528b44a3ccb4f3aeeb79add0a88192f7eb81161" - integrity sha1-ZSi0SjzLTzrut5rdCogZL364EWE= - dependencies: - "@babel/helper-function-name" "7.0.0-beta.47" - "@babel/template" "7.0.0-beta.47" - "@babel/traverse" "7.0.0-beta.47" - "@babel/types" "7.0.0-beta.47" - -"@babel/helpers@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/helpers/download/@babel/helpers-7.0.0-beta.47.tgz#f9b42ed2e4d5f75ec0fb2e792c173e451e8d40fd" - integrity sha1-+bQu0uTV917A+y55LBc+RR6NQP0= - dependencies: - "@babel/template" "7.0.0-beta.47" - "@babel/traverse" "7.0.0-beta.47" - "@babel/types" "7.0.0-beta.47" - -"@babel/highlight@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.0.0-beta.47.tgz#8fbc83fb2a21f0bd2b95cdbeb238cf9689cad494" - integrity sha1-j7yD+yoh8L0rlc2+sjjPlonK1JQ= - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^3.0.0" - -"@babel/plugin-proposal-async-generator-functions@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.0.0-beta.47.tgz#571142284708c5ad4ec904d9aa705461a010be53" - integrity sha1-VxFCKEcIxa1OyQTZqnBUYaAQvlM= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - "@babel/helper-remap-async-to-generator" "7.0.0-beta.47" - "@babel/plugin-syntax-async-generators" "7.0.0-beta.47" - -"@babel/plugin-proposal-class-properties@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.0.0-beta.47.tgz#08c1a1dfc92d0f5c37b39096c6fb883e1ca4b0f5" - integrity sha1-CMGh38ktD1w3s5CWxvuIPhyksPU= - dependencies: - "@babel/helper-function-name" "7.0.0-beta.47" - "@babel/helper-plugin-utils" "7.0.0-beta.47" - "@babel/helper-replace-supers" "7.0.0-beta.47" - "@babel/plugin-syntax-class-properties" "7.0.0-beta.47" - -"@babel/plugin-proposal-decorators@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-proposal-decorators/download/@babel/plugin-proposal-decorators-7.0.0-beta.47.tgz#5e8943c8f8eb3301f911ef0dcd3ed64cf28c723e" - integrity sha1-XolDyPjrMwH5Ee8NzT7WTPKMcj4= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - "@babel/plugin-syntax-decorators" "7.0.0-beta.47" - -"@babel/plugin-proposal-export-namespace-from@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-proposal-export-namespace-from/download/@babel/plugin-proposal-export-namespace-from-7.0.0-beta.47.tgz#38171dd0fd5f54aee377d338ed41bb92e25d6720" - integrity sha1-OBcd0P1fVK7jd9M47UG7kuJdZyA= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - "@babel/plugin-syntax-export-namespace-from" "7.0.0-beta.47" - -"@babel/plugin-proposal-function-sent@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-proposal-function-sent/download/@babel/plugin-proposal-function-sent-7.0.0-beta.47.tgz#3ad46c04a277a887731f21843013292d254f7ba9" - integrity sha1-OtRsBKJ3qIdzHyGEMBMpLSVPe6k= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - "@babel/helper-wrap-function" "7.0.0-beta.47" - "@babel/plugin-syntax-function-sent" "7.0.0-beta.47" - -"@babel/plugin-proposal-numeric-separator@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-proposal-numeric-separator/download/@babel/plugin-proposal-numeric-separator-7.0.0-beta.47.tgz#3ace5cbacb62c3fa223c3c0b66c0c16e63a8e259" - integrity sha1-Os5custiw/oiPDwLZsDBbmOo4lk= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - "@babel/plugin-syntax-numeric-separator" "7.0.0-beta.47" - -"@babel/plugin-proposal-object-rest-spread@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.0.0-beta.47.tgz#e1529fddc88e948868ee1d0edaa27ebd9502322d" - integrity sha1-4VKf3ciOlIho7h0O2qJ+vZUCMi0= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - "@babel/plugin-syntax-object-rest-spread" "7.0.0-beta.47" - -"@babel/plugin-proposal-optional-catch-binding@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.0.0-beta.47.tgz#8c6453919537517ea773bb8f3fceda4250795efa" - integrity sha1-jGRTkZU3UX6nc7uPP87aQlB5Xvo= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - "@babel/plugin-syntax-optional-catch-binding" "7.0.0-beta.47" - -"@babel/plugin-proposal-throw-expressions@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-proposal-throw-expressions/download/@babel/plugin-proposal-throw-expressions-7.0.0-beta.47.tgz#9a67f8b0852b4b0b255eff5d6d25fa436928424f" - integrity sha1-mmf4sIUrSwslXv9dbSX6Q2koQk8= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - "@babel/plugin-syntax-throw-expressions" "7.0.0-beta.47" - -"@babel/plugin-proposal-unicode-property-regex@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.0.0-beta.47.tgz#34d7e4811bdc4f512400bb29d01051842528c8d5" - integrity sha1-NNfkgRvcT1EkALsp0BBRhCUoyNU= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - "@babel/helper-regex" "7.0.0-beta.47" - regexpu-core "^4.1.4" - -"@babel/plugin-syntax-async-generators@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-syntax-async-generators/download/@babel/plugin-syntax-async-generators-7.0.0-beta.47.tgz#8ab94852bf348badc866af85bd852221f0961256" - integrity sha1-irlIUr80i63IZq+FvYUiIfCWElY= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-syntax-class-properties@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-syntax-class-properties/download/@babel/plugin-syntax-class-properties-7.0.0-beta.47.tgz#de52bed12fd472c848e1562f57dd4a202fe27f11" - integrity sha1-3lK+0S/UcshI4VYvV91KIC/ifxE= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-syntax-decorators@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-syntax-decorators/download/@babel/plugin-syntax-decorators-7.0.0-beta.47.tgz#a42f10fcd651940bc475d93b3ac23432b4a8a293" - integrity sha1-pC8Q/NZRlAvEddk7OsI0MrSoopM= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-syntax-dynamic-import@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-syntax-dynamic-import/download/@babel/plugin-syntax-dynamic-import-7.0.0-beta.47.tgz#ee964915014a687701ee8e15c289e31a7c899e60" - integrity sha1-7pZJFQFKaHcB7o4VwonjGnyJnmA= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-syntax-export-namespace-from@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-syntax-export-namespace-from/download/@babel/plugin-syntax-export-namespace-from-7.0.0-beta.47.tgz#fd446c76c59849f15e6cde235b5b8e153413f21e" - integrity sha1-/URsdsWYSfFebN4jW1uOFTQT8h4= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-syntax-function-sent@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-syntax-function-sent/download/@babel/plugin-syntax-function-sent-7.0.0-beta.47.tgz#8d15536f55b21acdf9bfaa177c46591a589fe8b0" - integrity sha1-jRVTb1WyGs35v6oXfEZZGlif6LA= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-syntax-import-meta@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-syntax-import-meta/download/@babel/plugin-syntax-import-meta-7.0.0-beta.47.tgz#8ab5174209a954b91e327004a7d16737bcc4774d" - integrity sha1-irUXQgmpVLkeMnAEp9FnN7zEd00= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-syntax-jsx@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-syntax-jsx/download/@babel/plugin-syntax-jsx-7.0.0-beta.47.tgz#f3849d94288695d724bd205b4f6c3c99e4ec24a4" - integrity sha1-84SdlCiGldckvSBbT2w8meTsJKQ= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-syntax-numeric-separator@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-syntax-numeric-separator/download/@babel/plugin-syntax-numeric-separator-7.0.0-beta.47.tgz#9f06cb770a94f464b3b2889d2110080bc302fc80" - integrity sha1-nwbLdwqU9GSzsoidIRAIC8MC/IA= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-syntax-object-rest-spread@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.0.0-beta.47.tgz#21da514d94c138b2261ca09f0dec9abadce16185" - integrity sha1-IdpRTZTBOLImHKCfDeyautzhYYU= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-syntax-optional-catch-binding@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.0.0-beta.47.tgz#0b1c52b066aa36893c41450773a5adb904cd4024" - integrity sha1-CxxSsGaqNok8QUUHc6WtuQTNQCQ= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-syntax-throw-expressions@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-syntax-throw-expressions/download/@babel/plugin-syntax-throw-expressions-7.0.0-beta.47.tgz#8ca197bab3534f443eecd7eb79da47e199dafaf7" - integrity sha1-jKGXurNTT0Q+7NfredpH4Zna+vc= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-transform-arrow-functions@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.0.0-beta.47.tgz#d6eecda4c652b909e3088f0983ebaf8ec292984b" - integrity sha1-1u7NpMZSuQnjCI8Jg+uvjsKSmEs= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-transform-async-to-generator@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.0.0-beta.47.tgz#5723816ea1e91fa313a84e6ee9cc12ff31d46610" - integrity sha1-VyOBbqHpH6MTqE5u6cwS/zHUZhA= - dependencies: - "@babel/helper-module-imports" "7.0.0-beta.47" - "@babel/helper-plugin-utils" "7.0.0-beta.47" - "@babel/helper-remap-async-to-generator" "7.0.0-beta.47" - -"@babel/plugin-transform-block-scoped-functions@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.0.0-beta.47.tgz#e422278e06c797b43c45f459d83c7af9d6237002" - integrity sha1-5CInjgbHl7Q8RfRZ2Dx6+dYjcAI= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-transform-block-scoping@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.0.0-beta.47.tgz#b737cc58a81bea57efd5bda0baef9a43a25859ad" - integrity sha1-tzfMWKgb6lfv1b2guu+aQ6JYWa0= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - lodash "^4.17.5" - -"@babel/plugin-transform-classes@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.0.0-beta.47.tgz#7aff9cbe7b26fd94d7a9f97fa90135ef20c93fb6" - integrity sha1-ev+cvnsm/ZTXqfl/qQE17yDJP7Y= - dependencies: - "@babel/helper-annotate-as-pure" "7.0.0-beta.47" - "@babel/helper-define-map" "7.0.0-beta.47" - "@babel/helper-function-name" "7.0.0-beta.47" - "@babel/helper-optimise-call-expression" "7.0.0-beta.47" - "@babel/helper-plugin-utils" "7.0.0-beta.47" - "@babel/helper-replace-supers" "7.0.0-beta.47" - "@babel/helper-split-export-declaration" "7.0.0-beta.47" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.0.0-beta.47.tgz#56ef2a021769a2b65e90a3e12fd10b791da9f3e0" - integrity sha1-Vu8qAhdporZekKPhL9ELeR2p8+A= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-transform-destructuring@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.0.0-beta.47.tgz#452b607775fd1c4d10621997837189efc0a6d428" - integrity sha1-RStgd3X9HE0QYhmXg3GJ78Cm1Cg= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-transform-dotall-regex@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.0.0-beta.47.tgz#d8da9b706d4bfc68dec9d565661f83e6e8036636" - integrity sha1-2NqbcG1L/GjeydVlZh+D5ugDZjY= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - "@babel/helper-regex" "7.0.0-beta.47" - regexpu-core "^4.1.3" - -"@babel/plugin-transform-duplicate-keys@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.0.0-beta.47.tgz#4aabeda051ca3007e33a207db08f1a0cf9bd253b" - integrity sha1-SqvtoFHKMAfjOiB9sI8aDPm9JTs= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-transform-exponentiation-operator@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.0.0-beta.47.tgz#930e1abf5db9f4db5b63dbf97f3581ad0be1e907" - integrity sha1-kw4av1259NtbY9v5fzWBrQvh6Qc= - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "7.0.0-beta.47" - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-transform-for-of@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.0.0-beta.47.tgz#527d5dc24e4a4ad0fc1d0a3990d29968cb984e76" - integrity sha1-Un1dwk5KStD8HQo5kNKZaMuYTnY= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-transform-function-name@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.0.0-beta.47.tgz#fb443c81cc77f3206a863b730b35c8c553ce5041" - integrity sha1-+0Q8gcx38yBqhjtzCzXIxVPOUEE= - dependencies: - "@babel/helper-function-name" "7.0.0-beta.47" - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-transform-literals@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.0.0-beta.47.tgz#448fad196f062163684a38f10f14e83315892e9c" - integrity sha1-RI+tGW8GIWNoSjjxDxToMxWJLpw= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-transform-modules-amd@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.0.0-beta.47.tgz#84564419b11c1be6b9fcd4c7b3a6737f2335aac4" - integrity sha1-hFZEGbEcG+a5/NTHs6ZzfyM1qsQ= - dependencies: - "@babel/helper-module-transforms" "7.0.0-beta.47" - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-transform-modules-commonjs@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.0.0-beta.47.tgz#dfe5c6d867aa9614e55f7616736073edb3aab887" - integrity sha1-3+XG2GeqlhTlX3YWc2Bz7bOquIc= - dependencies: - "@babel/helper-module-transforms" "7.0.0-beta.47" - "@babel/helper-plugin-utils" "7.0.0-beta.47" - "@babel/helper-simple-access" "7.0.0-beta.47" - -"@babel/plugin-transform-modules-systemjs@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.0.0-beta.47.tgz#8514dbcdfca3345abd690059e7e8544e16ecbf05" - integrity sha1-hRTbzfyjNFq9aQBZ5+hUThbsvwU= - dependencies: - "@babel/helper-hoist-variables" "7.0.0-beta.47" - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-transform-modules-umd@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.0.0-beta.47.tgz#6dcfb9661fdd131b20b721044746a7a309882918" - integrity sha1-bc+5Zh/dExsgtyEER0anowmIKRg= - dependencies: - "@babel/helper-module-transforms" "7.0.0-beta.47" - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-transform-new-target@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.0.0-beta.47.tgz#4b5cb7ce30d7bffa105a1f43ed07d6ae206a4155" - integrity sha1-S1y3zjDXv/oQWh9D7QfWriBqQVU= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-transform-object-super@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.0.0-beta.47.tgz#ca8e5f326c5011c879f3a6ed749e58bd10fff05d" - integrity sha1-yo5fMmxQEch586btdJ5YvRD/8F0= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - "@babel/helper-replace-supers" "7.0.0-beta.47" - -"@babel/plugin-transform-parameters@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.0.0-beta.47.tgz#46a4236040a6552a5f165fb3ddd60368954b0ddd" - integrity sha1-RqQjYECmVSpfFl+z3dYDaJVLDd0= - dependencies: - "@babel/helper-call-delegate" "7.0.0-beta.47" - "@babel/helper-get-function-arity" "7.0.0-beta.47" - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-transform-regenerator@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.0.0-beta.47.tgz#86500e1c404055fb98fc82b73b09bd053cacb516" - integrity sha1-hlAOHEBAVfuY/IK3Owm9BTystRY= - dependencies: - regenerator-transform "^0.12.3" - -"@babel/plugin-transform-runtime@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.0.0-beta.47.tgz#1700938fa8710909cbf28f7dd39f9b40688b09fd" - integrity sha1-FwCTj6hxCQnL8o9905+bQGiLCf0= - dependencies: - "@babel/helper-module-imports" "7.0.0-beta.47" - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-transform-shorthand-properties@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.0.0-beta.47.tgz#00be44c4fad8fe2c00ed18ea15ea3c88dd519dbb" - integrity sha1-AL5ExPrY/iwA7RjqFeo8iN1Rnbs= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-transform-spread@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.0.0-beta.47.tgz#3feadb02292ed1e9b75090d651b9df88a7ab5c50" - integrity sha1-P+rbAiku0em3UJDWUbnfiKerXFA= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-transform-sticky-regex@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.0.0-beta.47.tgz#c0aa347d76b5dc87d3b37ac016ada3f950605131" - integrity sha1-wKo0fXa13IfTs3rAFq2j+VBgUTE= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - "@babel/helper-regex" "7.0.0-beta.47" - -"@babel/plugin-transform-template-literals@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.0.0-beta.47.tgz#5f7b5badf64c4c5da79026aeab03001e62a6ee5f" - integrity sha1-X3tbrfZMTF2nkCauqwMAHmKm7l8= - dependencies: - "@babel/helper-annotate-as-pure" "7.0.0-beta.47" - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-transform-typeof-symbol@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.0.0-beta.47.tgz#03c612ec09213eb386a81d5fa67c234ee4b2034c" - integrity sha1-A8YS7AkhPrOGqB1fpnwjTuSyA0w= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-transform-unicode-regex@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.0.0-beta.47.tgz#efed0b2f1dfbf28283502234a95b4be88f7fdcb6" - integrity sha1-7+0LLx378oKDUCI0qVtL6I9/3LY= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - "@babel/helper-regex" "7.0.0-beta.47" - regexpu-core "^4.1.3" - -"@babel/preset-env@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/preset-env/download/@babel/preset-env-7.0.0-beta.47.tgz#a3dab3b5fac4de56e3510bdbcb528f1cbdedbe2d" - integrity sha1-o9qztfrE3lbjUQvby1KPHL3tvi0= - dependencies: - "@babel/helper-module-imports" "7.0.0-beta.47" - "@babel/helper-plugin-utils" "7.0.0-beta.47" - "@babel/plugin-proposal-async-generator-functions" "7.0.0-beta.47" - "@babel/plugin-proposal-object-rest-spread" "7.0.0-beta.47" - "@babel/plugin-proposal-optional-catch-binding" "7.0.0-beta.47" - "@babel/plugin-proposal-unicode-property-regex" "7.0.0-beta.47" - "@babel/plugin-syntax-async-generators" "7.0.0-beta.47" - "@babel/plugin-syntax-object-rest-spread" "7.0.0-beta.47" - "@babel/plugin-syntax-optional-catch-binding" "7.0.0-beta.47" - "@babel/plugin-transform-arrow-functions" "7.0.0-beta.47" - "@babel/plugin-transform-async-to-generator" "7.0.0-beta.47" - "@babel/plugin-transform-block-scoped-functions" "7.0.0-beta.47" - "@babel/plugin-transform-block-scoping" "7.0.0-beta.47" - "@babel/plugin-transform-classes" "7.0.0-beta.47" - "@babel/plugin-transform-computed-properties" "7.0.0-beta.47" - "@babel/plugin-transform-destructuring" "7.0.0-beta.47" - "@babel/plugin-transform-dotall-regex" "7.0.0-beta.47" - "@babel/plugin-transform-duplicate-keys" "7.0.0-beta.47" - "@babel/plugin-transform-exponentiation-operator" "7.0.0-beta.47" - "@babel/plugin-transform-for-of" "7.0.0-beta.47" - "@babel/plugin-transform-function-name" "7.0.0-beta.47" - "@babel/plugin-transform-literals" "7.0.0-beta.47" - "@babel/plugin-transform-modules-amd" "7.0.0-beta.47" - "@babel/plugin-transform-modules-commonjs" "7.0.0-beta.47" - "@babel/plugin-transform-modules-systemjs" "7.0.0-beta.47" - "@babel/plugin-transform-modules-umd" "7.0.0-beta.47" - "@babel/plugin-transform-new-target" "7.0.0-beta.47" - "@babel/plugin-transform-object-super" "7.0.0-beta.47" - "@babel/plugin-transform-parameters" "7.0.0-beta.47" - "@babel/plugin-transform-regenerator" "7.0.0-beta.47" - "@babel/plugin-transform-shorthand-properties" "7.0.0-beta.47" - "@babel/plugin-transform-spread" "7.0.0-beta.47" - "@babel/plugin-transform-sticky-regex" "7.0.0-beta.47" - "@babel/plugin-transform-template-literals" "7.0.0-beta.47" - "@babel/plugin-transform-typeof-symbol" "7.0.0-beta.47" - "@babel/plugin-transform-unicode-regex" "7.0.0-beta.47" - browserslist "^3.0.0" - invariant "^2.2.2" - semver "^5.3.0" - -"@babel/preset-stage-2@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/preset-stage-2/download/@babel/preset-stage-2-7.0.0-beta.47.tgz#deb930c44d7d6e519a33174bba121a2a630ed654" - integrity sha1-3rkwxE19blGaMxdLuhIaKmMO1lQ= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - "@babel/plugin-proposal-decorators" "7.0.0-beta.47" - "@babel/plugin-proposal-export-namespace-from" "7.0.0-beta.47" - "@babel/plugin-proposal-function-sent" "7.0.0-beta.47" - "@babel/plugin-proposal-numeric-separator" "7.0.0-beta.47" - "@babel/plugin-proposal-throw-expressions" "7.0.0-beta.47" - "@babel/preset-stage-3" "7.0.0-beta.47" - -"@babel/preset-stage-3@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/preset-stage-3/download/@babel/preset-stage-3-7.0.0-beta.47.tgz#17028f3b5dddc548d80404c86ed62622f601597b" - integrity sha1-FwKPO13dxUjYBATIbtYmIvYBWXs= - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - "@babel/plugin-proposal-async-generator-functions" "7.0.0-beta.47" - "@babel/plugin-proposal-class-properties" "7.0.0-beta.47" - "@babel/plugin-proposal-object-rest-spread" "7.0.0-beta.47" - "@babel/plugin-proposal-optional-catch-binding" "7.0.0-beta.47" - "@babel/plugin-proposal-unicode-property-regex" "7.0.0-beta.47" - "@babel/plugin-syntax-dynamic-import" "7.0.0-beta.47" - "@babel/plugin-syntax-import-meta" "7.0.0-beta.47" - -"@babel/runtime@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.0.0-beta.47.tgz#273f5e71629e80f6cbcd7507503848615e59f7e0" - integrity sha1-Jz9ecWKegPbLzXUHUDhIYV5Z9+A= - dependencies: - core-js "^2.5.3" - regenerator-runtime "^0.11.1" - -"@babel/template@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/template/download/@babel/template-7.0.0-beta.47.tgz#0473970a7c0bee7a1a18c1ca999d3ba5e5bad83d" - integrity sha1-BHOXCnwL7noaGMHKmZ07peW62D0= - dependencies: - "@babel/code-frame" "7.0.0-beta.47" - "@babel/types" "7.0.0-beta.47" - babylon "7.0.0-beta.47" - lodash "^4.17.5" - -"@babel/traverse@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.0.0-beta.47.tgz#0e57fdbb9ff3a909188b6ebf1e529c641e6c82a4" - integrity sha1-Dlf9u5/zqQkYi26/HlKcZB5sgqQ= - dependencies: - "@babel/code-frame" "7.0.0-beta.47" - "@babel/generator" "7.0.0-beta.47" - "@babel/helper-function-name" "7.0.0-beta.47" - "@babel/helper-split-export-declaration" "7.0.0-beta.47" - "@babel/types" "7.0.0-beta.47" - babylon "7.0.0-beta.47" - debug "^3.1.0" - globals "^11.1.0" - invariant "^2.2.0" - lodash "^4.17.5" - -"@babel/types@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/@babel/types/download/@babel/types-7.0.0-beta.47.tgz#e6fcc1a691459002c2671d558a586706dddaeef8" - integrity sha1-5vzBppFFkALCZx1VilhnBt3a7vg= - dependencies: - esutils "^2.0.2" - lodash "^4.17.5" - to-fast-properties "^2.0.0" - -"@mrmlnc/readdir-enhanced@^2.2.1": - version "2.2.1" - resolved "http://registry.npm.taobao.org/@mrmlnc/readdir-enhanced/download/@mrmlnc/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" - integrity sha1-UkryQNGjYFJ7cwR17PoTRKpUDd4= - dependencies: - call-me-maybe "^1.0.1" - glob-to-regexp "^0.3.0" - -"@nodelib/fs.stat@^1.1.2": - version "1.1.3" - resolved "http://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" - integrity sha1-K1o6s/kYzKSKjHVMCBaOPwPrphs= - -"@shellscape/koa-send@^4.1.0": - version "4.1.3" - resolved "http://registry.npm.taobao.org/@shellscape/koa-send/download/@shellscape/koa-send-4.1.3.tgz#1a7c8df21f63487e060b7bfd8ed82e1d3c4ae0b0" - integrity sha1-GnyN8h9jSH4GC3v9jtguHTxK4LA= - dependencies: - debug "^2.6.3" - http-errors "^1.6.1" - mz "^2.6.0" - resolve-path "^1.3.3" - -"@shellscape/koa-static@^4.0.4": - version "4.0.5" - resolved "http://registry.npm.taobao.org/@shellscape/koa-static/download/@shellscape/koa-static-4.0.5.tgz#b329b55bfd41056a6981c584ae6bace30b5b6b3b" - integrity sha1-sym1W/1BBWppgcWErmus4wtbazs= - dependencies: - "@shellscape/koa-send" "^4.1.0" - debug "^2.6.8" - -"@vue/babel-preset-app@3.0.0-beta.11": - version "3.0.0-beta.11" - resolved "http://registry.npm.taobao.org/@vue/babel-preset-app/download/@vue/babel-preset-app-3.0.0-beta.11.tgz#c8b889aa73464050f9cd3f9dc621951d85c24508" - integrity sha1-yLiJqnNGQFD5zT+dxiGVHYXCRQg= - dependencies: - "@babel/plugin-syntax-jsx" "7.0.0-beta.47" - "@babel/plugin-transform-runtime" "7.0.0-beta.47" - "@babel/preset-env" "7.0.0-beta.47" - "@babel/preset-stage-2" "7.0.0-beta.47" - "@babel/runtime" "7.0.0-beta.47" - babel-helper-vue-jsx-merge-props "^2.0.3" - babel-plugin-dynamic-import-node "^1.2.0" - babel-plugin-transform-vue-jsx "^4.0.1" - -"@vue/component-compiler-utils@^2.0.0": - version "2.3.1" - resolved "http://registry.npm.taobao.org/@vue/component-compiler-utils/download/@vue/component-compiler-utils-2.3.1.tgz#d1c2623f02ad3fe6b6fc9c3762be55c9c61e3977" - integrity sha1-0cJiPwKtP+a2/Jw3Yr5VycYeOXc= - dependencies: - consolidate "^0.15.1" - hash-sum "^1.0.2" - lru-cache "^4.1.2" - merge-source-map "^1.1.0" - postcss "^6.0.20" - postcss-selector-parser "^3.1.1" - prettier "1.13.7" - source-map "^0.5.6" - vue-template-es2015-compiler "^1.6.0" - -"@webassemblyjs/ast@1.7.11": - version "1.7.11" - resolved "http://registry.npm.taobao.org/@webassemblyjs/ast/download/@webassemblyjs/ast-1.7.11.tgz#b988582cafbb2b095e8b556526f30c90d057cace" - integrity sha1-uYhYLK+7Kwlei1VlJvMMkNBXys4= - dependencies: - "@webassemblyjs/helper-module-context" "1.7.11" - "@webassemblyjs/helper-wasm-bytecode" "1.7.11" - "@webassemblyjs/wast-parser" "1.7.11" - -"@webassemblyjs/floating-point-hex-parser@1.7.11": - version "1.7.11" - resolved "http://registry.npm.taobao.org/@webassemblyjs/floating-point-hex-parser/download/@webassemblyjs/floating-point-hex-parser-1.7.11.tgz#a69f0af6502eb9a3c045555b1a6129d3d3f2e313" - integrity sha1-pp8K9lAuuaPARVVbGmEp09Py4xM= - -"@webassemblyjs/helper-api-error@1.7.11": - version "1.7.11" - resolved "http://registry.npm.taobao.org/@webassemblyjs/helper-api-error/download/@webassemblyjs/helper-api-error-1.7.11.tgz#c7b6bb8105f84039511a2b39ce494f193818a32a" - integrity sha1-x7a7gQX4QDlRGis5zklPGTgYoyo= - -"@webassemblyjs/helper-buffer@1.7.11": - version "1.7.11" - resolved "http://registry.npm.taobao.org/@webassemblyjs/helper-buffer/download/@webassemblyjs/helper-buffer-1.7.11.tgz#3122d48dcc6c9456ed982debe16c8f37101df39b" - integrity sha1-MSLUjcxslFbtmC3r4WyPNxAd85s= - -"@webassemblyjs/helper-code-frame@1.7.11": - version "1.7.11" - resolved "http://registry.npm.taobao.org/@webassemblyjs/helper-code-frame/download/@webassemblyjs/helper-code-frame-1.7.11.tgz#cf8f106e746662a0da29bdef635fcd3d1248364b" - integrity sha1-z48QbnRmYqDaKb3vY1/NPRJINks= - dependencies: - "@webassemblyjs/wast-printer" "1.7.11" - -"@webassemblyjs/helper-fsm@1.7.11": - version "1.7.11" - resolved "http://registry.npm.taobao.org/@webassemblyjs/helper-fsm/download/@webassemblyjs/helper-fsm-1.7.11.tgz#df38882a624080d03f7503f93e3f17ac5ac01181" - integrity sha1-3ziIKmJAgNA/dQP5Pj8XrFrAEYE= - -"@webassemblyjs/helper-module-context@1.7.11": - version "1.7.11" - resolved "http://registry.npm.taobao.org/@webassemblyjs/helper-module-context/download/@webassemblyjs/helper-module-context-1.7.11.tgz#d874d722e51e62ac202476935d649c802fa0e209" - integrity sha1-2HTXIuUeYqwgJHaTXWScgC+g4gk= - -"@webassemblyjs/helper-wasm-bytecode@1.7.11": - version "1.7.11" - resolved "http://registry.npm.taobao.org/@webassemblyjs/helper-wasm-bytecode/download/@webassemblyjs/helper-wasm-bytecode-1.7.11.tgz#dd9a1e817f1c2eb105b4cf1013093cb9f3c9cb06" - integrity sha1-3ZoegX8cLrEFtM8QEwk8ufPJywY= - -"@webassemblyjs/helper-wasm-section@1.7.11": - version "1.7.11" - resolved "http://registry.npm.taobao.org/@webassemblyjs/helper-wasm-section/download/@webassemblyjs/helper-wasm-section-1.7.11.tgz#9c9ac41ecf9fbcfffc96f6d2675e2de33811e68a" - integrity sha1-nJrEHs+fvP/8lvbSZ14t4zgR5oo= - dependencies: - "@webassemblyjs/ast" "1.7.11" - "@webassemblyjs/helper-buffer" "1.7.11" - "@webassemblyjs/helper-wasm-bytecode" "1.7.11" - "@webassemblyjs/wasm-gen" "1.7.11" - -"@webassemblyjs/ieee754@1.7.11": - version "1.7.11" - resolved "http://registry.npm.taobao.org/@webassemblyjs/ieee754/download/@webassemblyjs/ieee754-1.7.11.tgz#c95839eb63757a31880aaec7b6512d4191ac640b" - integrity sha1-yVg562N1ejGICq7HtlEtQZGsZAs= - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.7.11": - version "1.7.11" - resolved "http://registry.npm.taobao.org/@webassemblyjs/leb128/download/@webassemblyjs/leb128-1.7.11.tgz#d7267a1ee9c4594fd3f7e37298818ec65687db63" - integrity sha1-1yZ6HunEWU/T9+NymIGOxlaH22M= - dependencies: - "@xtuc/long" "4.2.1" - -"@webassemblyjs/utf8@1.7.11": - version "1.7.11" - resolved "http://registry.npm.taobao.org/@webassemblyjs/utf8/download/@webassemblyjs/utf8-1.7.11.tgz#06d7218ea9fdc94a6793aa92208160db3d26ee82" - integrity sha1-Btchjqn9yUpnk6qSIIFg2z0m7oI= - -"@webassemblyjs/wasm-edit@1.7.11": - version "1.7.11" - resolved "http://registry.npm.taobao.org/@webassemblyjs/wasm-edit/download/@webassemblyjs/wasm-edit-1.7.11.tgz#8c74ca474d4f951d01dbae9bd70814ee22a82005" - integrity sha1-jHTKR01PlR0B266b1wgU7iKoIAU= - dependencies: - "@webassemblyjs/ast" "1.7.11" - "@webassemblyjs/helper-buffer" "1.7.11" - "@webassemblyjs/helper-wasm-bytecode" "1.7.11" - "@webassemblyjs/helper-wasm-section" "1.7.11" - "@webassemblyjs/wasm-gen" "1.7.11" - "@webassemblyjs/wasm-opt" "1.7.11" - "@webassemblyjs/wasm-parser" "1.7.11" - "@webassemblyjs/wast-printer" "1.7.11" - -"@webassemblyjs/wasm-gen@1.7.11": - version "1.7.11" - resolved "http://registry.npm.taobao.org/@webassemblyjs/wasm-gen/download/@webassemblyjs/wasm-gen-1.7.11.tgz#9bbba942f22375686a6fb759afcd7ac9c45da1a8" - integrity sha1-m7upQvIjdWhqb7dZr816ycRdoag= - dependencies: - "@webassemblyjs/ast" "1.7.11" - "@webassemblyjs/helper-wasm-bytecode" "1.7.11" - "@webassemblyjs/ieee754" "1.7.11" - "@webassemblyjs/leb128" "1.7.11" - "@webassemblyjs/utf8" "1.7.11" - -"@webassemblyjs/wasm-opt@1.7.11": - version "1.7.11" - resolved "http://registry.npm.taobao.org/@webassemblyjs/wasm-opt/download/@webassemblyjs/wasm-opt-1.7.11.tgz#b331e8e7cef8f8e2f007d42c3a36a0580a7d6ca7" - integrity sha1-szHo5874+OLwB9QsOjagWAp9bKc= - dependencies: - "@webassemblyjs/ast" "1.7.11" - "@webassemblyjs/helper-buffer" "1.7.11" - "@webassemblyjs/wasm-gen" "1.7.11" - "@webassemblyjs/wasm-parser" "1.7.11" - -"@webassemblyjs/wasm-parser@1.7.11": - version "1.7.11" - resolved "http://registry.npm.taobao.org/@webassemblyjs/wasm-parser/download/@webassemblyjs/wasm-parser-1.7.11.tgz#6e3d20fa6a3519f6b084ef9391ad58211efb0a1a" - integrity sha1-bj0g+mo1GfawhO+Tka1YIR77Cho= - dependencies: - "@webassemblyjs/ast" "1.7.11" - "@webassemblyjs/helper-api-error" "1.7.11" - "@webassemblyjs/helper-wasm-bytecode" "1.7.11" - "@webassemblyjs/ieee754" "1.7.11" - "@webassemblyjs/leb128" "1.7.11" - "@webassemblyjs/utf8" "1.7.11" - -"@webassemblyjs/wast-parser@1.7.11": - version "1.7.11" - resolved "http://registry.npm.taobao.org/@webassemblyjs/wast-parser/download/@webassemblyjs/wast-parser-1.7.11.tgz#25bd117562ca8c002720ff8116ef9072d9ca869c" - integrity sha1-Jb0RdWLKjAAnIP+BFu+QctnKhpw= - dependencies: - "@webassemblyjs/ast" "1.7.11" - "@webassemblyjs/floating-point-hex-parser" "1.7.11" - "@webassemblyjs/helper-api-error" "1.7.11" - "@webassemblyjs/helper-code-frame" "1.7.11" - "@webassemblyjs/helper-fsm" "1.7.11" - "@xtuc/long" "4.2.1" - -"@webassemblyjs/wast-printer@1.7.11": - version "1.7.11" - resolved "http://registry.npm.taobao.org/@webassemblyjs/wast-printer/download/@webassemblyjs/wast-printer-1.7.11.tgz#c4245b6de242cb50a2cc950174fdbf65c78d7813" - integrity sha1-xCRbbeJCy1CizJUBdP2/ZceNeBM= - dependencies: - "@webassemblyjs/ast" "1.7.11" - "@webassemblyjs/wast-parser" "1.7.11" - "@xtuc/long" "4.2.1" - -"@webpack-contrib/config-loader@^1.1.1": - version "1.2.1" - resolved "http://registry.npm.taobao.org/@webpack-contrib/config-loader/download/@webpack-contrib/config-loader-1.2.1.tgz#5b3dd474e207437939d294d200c68b7b00008e04" - integrity sha1-Wz3UdOIHQ3k50pTSAMaLewAAjgQ= - dependencies: - "@webpack-contrib/schema-utils" "^1.0.0-beta.0" - chalk "^2.1.0" - cosmiconfig "^5.0.2" - is-plain-obj "^1.1.0" - loud-rejection "^1.6.0" - merge-options "^1.0.1" - minimist "^1.2.0" - resolve "^1.6.0" - webpack-log "^1.1.2" - -"@webpack-contrib/schema-utils@^1.0.0-beta.0": - version "1.0.0-beta.0" - resolved "http://registry.npm.taobao.org/@webpack-contrib/schema-utils/download/@webpack-contrib/schema-utils-1.0.0-beta.0.tgz#bf9638c9464d177b48209e84209e23bee2eb4f65" - integrity sha1-v5Y4yUZNF3tIIJ6EIJ4jvuLrT2U= - dependencies: - ajv "^6.1.0" - ajv-keywords "^3.1.0" - chalk "^2.3.2" - strip-ansi "^4.0.0" - text-table "^0.2.0" - webpack-log "^1.1.2" - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "http://registry.npm.taobao.org/@xtuc/ieee754/download/@xtuc/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A= - -"@xtuc/long@4.2.1": - version "4.2.1" - resolved "http://registry.npm.taobao.org/@xtuc/long/download/@xtuc/long-4.2.1.tgz#5c85d662f76fa1d34575766c5dcd6615abcd30d8" - integrity sha1-XIXWYvdvodNFdXZsXc1mFavNMNg= - -abbrev@1: - version "1.1.1" - resolved "http://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg= - -accepts@^1.3.5: - version "1.3.5" - resolved "http://registry.npm.taobao.org/accepts/download/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" - integrity sha1-63d99gEXI6OxTopywIBcjoZ0a9I= - dependencies: - mime-types "~2.1.18" - negotiator "0.6.1" - -acorn-dynamic-import@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/acorn-dynamic-import/download/acorn-dynamic-import-3.0.0.tgz#901ceee4c7faaef7e07ad2a47e890675da50a278" - integrity sha1-kBzu5Mf6rvfgetKkfokGddpQong= - dependencies: - acorn "^5.0.0" - -acorn@^5.0.0, acorn@^5.6.2: - version "5.7.3" - resolved "http://registry.npm.taobao.org/acorn/download/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" - integrity sha1-Z6ojG/iBKXS4UjWpZ3Hra9B+onk= - -agentkeepalive@^2.2.0: - version "2.2.0" - resolved "http://registry.npm.taobao.org/agentkeepalive/download/agentkeepalive-2.2.0.tgz#c5d1bd4b129008f1163f236f86e5faea2026e2ef" - integrity sha1-xdG9SxKQCPEWPyNvhuX66iAm4u8= - -ajv-errors@^1.0.0: - version "1.0.1" - resolved "http://registry.npm.taobao.org/ajv-errors/download/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" - integrity sha1-81mGrOuRr63sQQL72FAUlQzvpk0= - -ajv-keywords@^3.0.0, ajv-keywords@^3.1.0: - version "3.2.0" - resolved "http://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" - integrity sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo= - -ajv@^6.0.1, ajv@^6.1.0, ajv@^6.5.5: - version "6.6.1" - resolved "http://registry.npm.taobao.org/ajv/download/ajv-6.6.1.tgz#6360f5ed0d80f232cc2b294c362d5dc2e538dd61" - integrity sha1-Y2D17Q2A8jLMKylMNi1dwuU43WE= - dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -algoliasearch@^3.24.5: - version "3.31.0" - resolved "http://registry.npm.taobao.org/algoliasearch/download/algoliasearch-3.31.0.tgz#c4083375ff02538ef50d9ec73e6a72e5e19ed96f" - integrity sha1-xAgzdf8CU471DZ7HPmpy5eGe2W8= - dependencies: - agentkeepalive "^2.2.0" - debug "^2.6.8" - envify "^4.0.0" - es6-promise "^4.1.0" - events "^1.1.0" - foreach "^2.0.5" - global "^4.3.2" - inherits "^2.0.1" - isarray "^2.0.1" - load-script "^1.0.0" - object-keys "^1.0.11" - querystring-es3 "^0.2.1" - reduce "^1.0.1" - semver "^5.1.0" - tunnel-agent "^0.6.0" - -alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: - version "1.0.2" - resolved "http://registry.npm.taobao.org/alphanum-sort/download/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= - -amdefine@>=0.0.4: - version "1.0.1" - resolved "http://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= - -ansi-align@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/ansi-align/download/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" - integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= - dependencies: - string-width "^2.0.0" - -ansi-colors@^3.0.0: - version "3.2.3" - resolved "http://registry.npm.taobao.org/ansi-colors/download/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" - integrity sha1-V9NbhoboUeLMBMQD8cACA5dqGBM= - -ansi-escapes@^3.0.0: - version "3.1.0" - resolved "http://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" - integrity sha1-9zIHu4EgfXX9bIPxJa8m7qN4yjA= - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0= - dependencies: - color-convert "^1.9.0" - -any-promise@^1.0.0, any-promise@^1.1.0: - version "1.3.0" - resolved "http://registry.npm.taobao.org/any-promise/download/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= - -anymatch@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha1-vLJLTzeTTZqnrBe0ra+J58du8us= - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -app-root-path@^2.0.1: - version "2.1.0" - resolved "http://registry.npm.taobao.org/app-root-path/download/app-root-path-2.1.0.tgz#98bf6599327ecea199309866e8140368fd2e646a" - integrity sha1-mL9lmTJ+zqGZMJhm6BQDaP0uZGo= - -aproba@^1.0.3, aproba@^1.1.1: - version "1.2.0" - resolved "http://registry.npm.taobao.org/aproba/download/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha1-aALmJk79GMeQobDVF/DyYnvyyUo= - -arch@^2.1.0: - version "2.1.1" - resolved "http://registry.npm.taobao.org/arch/download/arch-2.1.1.tgz#8f5c2731aa35a30929221bb0640eed65175ec84e" - integrity sha1-j1wnMao1owkpIhuwZA7tZRdeyE4= - -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "http://registry.npm.taobao.org/are-we-there-yet/download/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha1-SzXClE8GKov82mZBB2A1D+nd/CE= - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -argparse@^1.0.7: - version "1.0.10" - resolved "http://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE= - dependencies: - sprintf-js "~1.0.2" - -arr-diff@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/arr-diff/download/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8= - dependencies: - arr-flatten "^1.0.1" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "http://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.0.1, arr-flatten@^1.1.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha1-NgSLv/TntH4TZkQxbJlmnqWukfE= - -arr-union@^3.1.0: - version "3.1.0" - resolved "http://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-find-index@^1.0.1: - version "1.0.2" - resolved "http://registry.npm.taobao.org/array-find-index/download/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= - -array-union@^1.0.1: - version "1.0.2" - resolved "http://registry.npm.taobao.org/array-union/download/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1: - version "1.0.3" - resolved "http://registry.npm.taobao.org/array-uniq/download/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - -array-unique@^0.2.1: - version "0.2.1" - resolved "http://registry.npm.taobao.org/array-unique/download/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= - -array-unique@^0.3.2: - version "0.3.2" - resolved "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -arrify@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/arrify/download/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - -asn1.js@^4.0.0: - version "4.10.1" - resolved "http://registry.npm.taobao.org/asn1.js/download/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" - integrity sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA= - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -asn1@~0.2.3: - version "0.2.4" - resolved "http://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha1-jSR136tVO7M+d7VOWeiAu4ziMTY= - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -assert@^1.1.1: - version "1.4.1" - resolved "http://registry.npm.taobao.org/assert/download/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" - integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE= - dependencies: - util "0.10.3" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -async-each@^1.0.0: - version "1.0.1" - resolved "http://registry.npm.taobao.org/async-each/download/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" - integrity sha1-GdOGodntxufByF04iu28xW0zYC0= - -async-limiter@~1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" - integrity sha1-ePrtjD0HSrgfIrTphdeehzj3IPg= - -async@^1.5.2: - version "1.5.2" - resolved "http://registry.npm.taobao.org/async/download/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= - -asynckit@^0.4.0: - version "0.4.0" - resolved "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -atob@^2.1.1: - version "2.1.2" - resolved "http://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k= - -autocomplete.js@0.33.0: - version "0.33.0" - resolved "http://registry.npm.taobao.org/autocomplete.js/download/autocomplete.js-0.33.0.tgz#33d460367e2e7b6c2fe424353d955e022fe4594c" - integrity sha1-M9RgNn4ue2wv5CQ1PZVeAi/kWUw= - dependencies: - immediate "^3.2.3" - -autoprefixer@^6.3.1: - version "6.7.7" - resolved "http://registry.npm.taobao.org/autoprefixer/download/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" - integrity sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ= - dependencies: - browserslist "^1.7.6" - caniuse-db "^1.0.30000634" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^5.2.16" - postcss-value-parser "^3.2.3" - -autoprefixer@^8.2.0: - version "8.6.5" - resolved "http://registry.npm.taobao.org/autoprefixer/download/autoprefixer-8.6.5.tgz#343f3d193ed568b3208e00117a1b96eb691d4ee9" - integrity sha1-ND89GT7VaLMgjgARehuW62kdTuk= - dependencies: - browserslist "^3.2.8" - caniuse-lite "^1.0.30000864" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^6.0.23" - postcss-value-parser "^3.2.3" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "http://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.8.0" - resolved "http://registry.npm.taobao.org/aws4/download/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" - integrity sha1-8OAD2cqef1nHpQiUXXsu+aBKVC8= - -babel-code-frame@^6.26.0: - version "6.26.0" - resolved "http://registry.npm.taobao.org/babel-code-frame/download/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -babel-extract-comments@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/babel-extract-comments/download/babel-extract-comments-1.0.0.tgz#0a2aedf81417ed391b85e18b4614e693a0351a21" - integrity sha1-Cirt+BQX7TkbheGLRhTmk6A1GiE= - dependencies: - babylon "^6.18.0" - -babel-helper-vue-jsx-merge-props@^2.0.3: - version "2.0.3" - resolved "http://registry.npm.taobao.org/babel-helper-vue-jsx-merge-props/download/babel-helper-vue-jsx-merge-props-2.0.3.tgz#22aebd3b33902328e513293a8e4992b384f9f1b6" - integrity sha1-Iq69OzOQIyjlEyk6jkmSs4T58bY= - -babel-loader@8.0.0-beta.3: - version "8.0.0-beta.3" - resolved "http://registry.npm.taobao.org/babel-loader/download/babel-loader-8.0.0-beta.3.tgz#49efeea6e8058d5af860a18a6de88b8c1450645b" - integrity sha1-Se/upugFjVr4YKGKbeiLjBRQZFs= - dependencies: - find-cache-dir "^1.0.0" - loader-utils "^1.0.2" - mkdirp "^0.5.1" - util.promisify "^1.0.0" - -babel-plugin-dynamic-import-node@^1.2.0: - version "1.2.0" - resolved "http://registry.npm.taobao.org/babel-plugin-dynamic-import-node/download/babel-plugin-dynamic-import-node-1.2.0.tgz#f91631e703e0595e47d4beafbb088576c87fbeee" - integrity sha1-+RYx5wPgWV5H1L6vuwiFdsh/vu4= - dependencies: - babel-plugin-syntax-dynamic-import "^6.18.0" - -babel-plugin-syntax-dynamic-import@^6.18.0: - version "6.18.0" - resolved "http://registry.npm.taobao.org/babel-plugin-syntax-dynamic-import/download/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" - integrity sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo= - -babel-plugin-syntax-object-rest-spread@^6.8.0: - version "6.13.0" - resolved "http://registry.npm.taobao.org/babel-plugin-syntax-object-rest-spread/download/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" - integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= - -babel-plugin-transform-object-rest-spread@^6.26.0: - version "6.26.0" - resolved "http://registry.npm.taobao.org/babel-plugin-transform-object-rest-spread/download/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" - integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY= - dependencies: - babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-runtime "^6.26.0" - -babel-plugin-transform-vue-jsx@^4.0.1: - version "4.0.1" - resolved "http://registry.npm.taobao.org/babel-plugin-transform-vue-jsx/download/babel-plugin-transform-vue-jsx-4.0.1.tgz#2c8bddce87a6ef09eaa59869ff1bfbeeafc5f88d" - integrity sha1-LIvdzoem7wnqpZhp/xv77q/F+I0= - dependencies: - esutils "^2.0.2" - -babel-runtime@^6.26.0: - version "6.26.0" - resolved "http://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -babylon@7.0.0-beta.47: - version "7.0.0-beta.47" - resolved "http://registry.npm.taobao.org/babylon/download/babylon-7.0.0-beta.47.tgz#6d1fa44f0abec41ab7c780481e62fd9aafbdea80" - integrity sha1-bR+kTwq+xBq3x4BIHmL9mq+96oA= - -babylon@^6.18.0: - version "6.18.0" - resolved "http://registry.npm.taobao.org/babylon/download/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - integrity sha1-ry87iPpvXB5MY00aD46sT1WzleM= - -balanced-match@^0.4.2: - version "0.4.2" - resolved "http://registry.npm.taobao.org/balanced-match/download/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" - integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg= - -balanced-match@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -base64-js@^1.0.2: - version "1.3.0" - resolved "http://registry.npm.taobao.org/base64-js/download/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" - integrity sha1-yrHmEY8FEJXli1KBrqjBzSK/wOM= - -base@^0.11.1: - version "0.11.2" - resolved "http://registry.npm.taobao.org/base/download/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha1-e95c7RRbbVUakNuH+DxVi060io8= - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "http://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - -big.js@^3.1.3: - version "3.2.0" - resolved "http://registry.npm.taobao.org/big.js/download/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" - integrity sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4= - -binary-extensions@^1.0.0: - version "1.12.0" - resolved "http://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14" - integrity sha1-wteA9T1Fu6gxeokC1M7q86Y4WxQ= - -bluebird@^3.1.1, bluebird@^3.5.1: - version "3.5.3" - resolved "http://registry.npm.taobao.org/bluebird/download/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" - integrity sha1-fQHG+WFsmlGrD4xUmnnf5uwz76c= - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.8" - resolved "http://registry.npm.taobao.org/bn.js/download/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" - integrity sha1-LN4J617jQfSEdGuwMJsyU7GxRC8= - -boolbase@~1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/boolbase/download/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= - -boxen@^1.2.1: - version "1.3.0" - resolved "http://registry.npm.taobao.org/boxen/download/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" - integrity sha1-VcbDmouljZxhrSLNh3Uy3rZlogs= - dependencies: - ansi-align "^2.0.0" - camelcase "^4.0.0" - chalk "^2.0.1" - cli-boxes "^1.0.0" - string-width "^2.0.0" - term-size "^1.2.0" - widest-line "^2.0.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0= - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^1.8.2: - version "1.8.5" - resolved "http://registry.npm.taobao.org/braces/download/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc= - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -braces@^2.3.0, braces@^2.3.1: - version "2.3.2" - resolved "http://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha1-WXn9PxTNUxVl5fot8av/8d+u5yk= - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -brorand@^1.0.1: - version "1.1.0" - resolved "http://registry.npm.taobao.org/brorand/download/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "http://registry.npm.taobao.org/browserify-aes/download/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha1-Mmc0ZC9APavDADIJhTu3CtQo70g= - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "http://registry.npm.taobao.org/browserify-cipher/download/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha1-jWR0wbhwv9q807z8wZNKEOlPFfA= - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "http://registry.npm.taobao.org/browserify-des/download/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw= - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0: - version "4.0.1" - resolved "http://registry.npm.taobao.org/browserify-rsa/download/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= - dependencies: - bn.js "^4.1.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.0.4" - resolved "http://registry.npm.taobao.org/browserify-sign/download/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" - integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= - dependencies: - bn.js "^4.1.1" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.2" - elliptic "^6.0.0" - inherits "^2.0.1" - parse-asn1 "^5.0.0" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "http://registry.npm.taobao.org/browserify-zlib/download/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha1-KGlFnZqjviRf6P4sofRuLn9U1z8= - dependencies: - pako "~1.0.5" - -browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: - version "1.7.7" - resolved "http://registry.npm.taobao.org/browserslist/download/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" - integrity sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk= - dependencies: - caniuse-db "^1.0.30000639" - electron-to-chromium "^1.2.7" - -browserslist@^3.0.0, browserslist@^3.2.8: - version "3.2.8" - resolved "http://registry.npm.taobao.org/browserslist/download/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" - integrity sha1-sABTYdZHHw9ZUnl6dvyYXx+Xj8Y= - dependencies: - caniuse-lite "^1.0.30000844" - electron-to-chromium "^1.3.47" - -buffer-from@^1.0.0: - version "1.1.1" - resolved "http://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8= - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "http://registry.npm.taobao.org/buffer-xor/download/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= - -buffer@^4.3.0: - version "4.9.1" - resolved "http://registry.npm.taobao.org/buffer/download/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" - integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg= - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -builtin-modules@^1.0.0: - version "1.1.1" - resolved "http://registry.npm.taobao.org/builtin-modules/download/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= - -cacache@^10.0.4: - version "10.0.4" - resolved "http://registry.npm.taobao.org/cacache/download/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" - integrity sha1-ZFI2eZnv+dQYiu/ZoU6dfGomNGA= - dependencies: - bluebird "^3.5.1" - chownr "^1.0.1" - glob "^7.1.2" - graceful-fs "^4.1.11" - lru-cache "^4.1.1" - mississippi "^2.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.2" - ssri "^5.2.4" - unique-filename "^1.1.0" - y18n "^4.0.0" - -cacache@^11.0.2: - version "11.3.1" - resolved "http://registry.npm.taobao.org/cacache/download/cacache-11.3.1.tgz#d09d25f6c4aca7a6d305d141ae332613aa1d515f" - integrity sha1-0J0l9sSsp6bTBdFBrjMmE6odUV8= - dependencies: - bluebird "^3.5.1" - chownr "^1.0.1" - figgy-pudding "^3.1.0" - glob "^7.1.2" - graceful-fs "^4.1.11" - lru-cache "^4.1.3" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.2" - ssri "^6.0.0" - unique-filename "^1.1.0" - y18n "^4.0.0" - -cache-base@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha1-Cn9GQWgxyLZi7jb+TnxZ129marI= - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -cache-content-type@^1.0.0: - version "1.0.1" - resolved "http://registry.npm.taobao.org/cache-content-type/download/cache-content-type-1.0.1.tgz#035cde2b08ee2129f4a8315ea8f00a00dba1453c" - integrity sha1-A1zeKwjuISn0qDFeqPAKANuhRTw= - dependencies: - mime-types "^2.1.18" - ylru "^1.2.0" - -cache-loader@^1.2.2: - version "1.2.5" - resolved "http://registry.npm.taobao.org/cache-loader/download/cache-loader-1.2.5.tgz#9ab15b0ae5f546f376083a695fc1a75f546cb266" - integrity sha1-mrFbCuX1RvN2CDppX8GnX1RssmY= - dependencies: - loader-utils "^1.1.0" - mkdirp "^0.5.1" - neo-async "^2.5.0" - schema-utils "^0.4.2" - -call-me-maybe@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/call-me-maybe/download/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/caller-callsite/download/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/caller-path/download/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= - dependencies: - caller-callsite "^2.0.0" - -callsites@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/callsites/download/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= - -camel-case@3.0.x: - version "3.0.0" - resolved "http://registry.npm.taobao.org/camel-case/download/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" - integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= - dependencies: - no-case "^2.2.0" - upper-case "^1.1.1" - -camelcase-keys@^4.0.0: - version "4.2.0" - resolved "http://registry.npm.taobao.org/camelcase-keys/download/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" - integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= - dependencies: - camelcase "^4.1.0" - map-obj "^2.0.0" - quick-lru "^1.0.0" - -camelcase@^4.0.0, camelcase@^4.1.0: - version "4.1.0" - resolved "http://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - -caniuse-api@^1.5.2: - version "1.6.1" - resolved "http://registry.npm.taobao.org/caniuse-api/download/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" - integrity sha1-tTTnxzTE+B7F++isoq0kNUuWLGw= - dependencies: - browserslist "^1.3.6" - caniuse-db "^1.0.30000529" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000921" - resolved "http://registry.npm.taobao.org/caniuse-db/download/caniuse-db-1.0.30000921.tgz#2aa78193e23539634abcf0248919d5901506c53b" - integrity sha1-KqeBk+I1OWNKvPAkiRnVkBUGxTs= - -caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000864: - version "1.0.30000921" - resolved "http://registry.npm.taobao.org/caniuse-lite/download/caniuse-lite-1.0.30000921.tgz#7a607c1623444b22351d834e093aedda3c42fbe8" - integrity sha1-emB8FiNESyI1HYNOCTrt2jxC++g= - -capture-stack-trace@^1.0.0: - version "1.0.1" - resolved "http://registry.npm.taobao.org/capture-stack-trace/download/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" - integrity sha1-psC74fOPOqC5Ijjstv9Cw0TUE10= - -caseless@~0.12.0: - version "0.12.0" - resolved "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -chalk@^1.1.3: - version "1.1.3" - resolved "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.2, chalk@^2.4.1: - version "2.4.1" - resolved "http://registry.npm.taobao.org/chalk/download/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" - integrity sha1-GMSasWoDe26wFSzIPjRxM4IVtm4= - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chokidar@^2.0.2, chokidar@^2.0.3: - version "2.0.4" - resolved "http://registry.npm.taobao.org/chokidar/download/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" - integrity sha1-NW/04rDo5D4yLRijckYLvPOszSY= - dependencies: - anymatch "^2.0.0" - async-each "^1.0.0" - braces "^2.3.0" - glob-parent "^3.1.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - lodash.debounce "^4.0.8" - normalize-path "^2.1.1" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - upath "^1.0.5" - optionalDependencies: - fsevents "^1.2.2" - -chownr@^1.0.1, chownr@^1.1.1: - version "1.1.1" - resolved "http://registry.npm.taobao.org/chownr/download/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" - integrity sha1-VHJri4//TfBTxCGH6AH7RBLfFJQ= - -chrome-trace-event@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/chrome-trace-event/download/chrome-trace-event-1.0.0.tgz#45a91bd2c20c9411f0963b5aaeb9a1b95e09cc48" - integrity sha1-Rakb0sIMlBHwljtarrmhuV4JzEg= - dependencies: - tslib "^1.9.0" - -ci-info@^1.5.0: - version "1.6.0" - resolved "http://registry.npm.taobao.org/ci-info/download/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" - integrity sha1-LKINu5zrMtRSSmgzAzE/AwSx5Jc= - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "http://registry.npm.taobao.org/cipher-base/download/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94= - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -clap@^1.0.9: - version "1.2.3" - resolved "http://registry.npm.taobao.org/clap/download/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" - integrity sha1-TzZ0WzIAhJJVf0ZBLWbVDLmbzlE= - dependencies: - chalk "^1.1.3" - -class-utils@^0.3.5: - version "0.3.6" - resolved "http://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha1-+TNprouafOAv1B+q0MqDAzGQxGM= - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -clean-css@4.2.x: - version "4.2.1" - resolved "http://registry.npm.taobao.org/clean-css/download/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" - integrity sha1-LUEe92uFabbQyEBo2r6FsKpeXBc= - dependencies: - source-map "~0.6.0" - -cli-boxes@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/cli-boxes/download/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" - integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= - -cli-cursor@^2.0.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/cli-cursor/download/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - -clipboard@^2.0.0: - version "2.0.4" - resolved "http://registry.npm.taobao.org/clipboard/download/clipboard-2.0.4.tgz#836dafd66cf0fea5d71ce5d5b0bf6e958009112d" - integrity sha1-g22v1mzw/qXXHOXVsL9ulYAJES0= - dependencies: - good-listener "^1.2.2" - select "^1.1.2" - tiny-emitter "^2.0.0" - -clipboardy@^1.2.2: - version "1.2.3" - resolved "http://registry.npm.taobao.org/clipboardy/download/clipboardy-1.2.3.tgz#0526361bf78724c1f20be248d428e365433c07ef" - integrity sha1-BSY2G/eHJMHyC+JI1CjjZUM8B+8= - dependencies: - arch "^2.1.0" - execa "^0.8.0" - -clone@^1.0.2: - version "1.0.4" - resolved "http://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - -co@^4.6.0: - version "4.6.0" - resolved "http://registry.npm.taobao.org/co/download/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= - -coa@~1.0.1: - version "1.0.4" - resolved "http://registry.npm.taobao.org/coa/download/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" - integrity sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0= - dependencies: - q "^1.1.2" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - -collection-visit@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.3.0, color-convert@^1.9.0: - version "1.9.3" - resolved "http://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg= - dependencies: - color-name "1.1.3" - -color-name@1.1.3: - version "1.1.3" - resolved "http://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@^1.0.0: - version "1.1.4" - resolved "http://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha1-wqCah6y95pVD3m9j+jmVyCbFNqI= - -color-string@^0.3.0: - version "0.3.0" - resolved "http://registry.npm.taobao.org/color-string/download/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" - integrity sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE= - dependencies: - color-name "^1.0.0" - -color@^0.11.0: - version "0.11.4" - resolved "http://registry.npm.taobao.org/color/download/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" - integrity sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q= - dependencies: - clone "^1.0.2" - color-convert "^1.3.0" - color-string "^0.3.0" - -colormin@^1.0.5: - version "1.1.2" - resolved "http://registry.npm.taobao.org/colormin/download/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" - integrity sha1-6i90IKcrlogaOKrlnsEkpvcpgTM= - dependencies: - color "^0.11.0" - css-color-names "0.0.4" - has "^1.0.1" - -colors@~1.1.2: - version "1.1.2" - resolved "http://registry.npm.taobao.org/colors/download/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" - integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.7" - resolved "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" - integrity sha1-LR0kMXr7ir6V1tLAsHtXgTU52Cg= - dependencies: - delayed-stream "~1.0.0" - -commander@2.17.x, commander@~2.17.1: - version "2.17.1" - resolved "http://registry.npm.taobao.org/commander/download/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" - integrity sha1-vXerfebelCBc6sxy8XFtKfIKd78= - -commander@^2.15.1: - version "2.19.0" - resolved "http://registry.npm.taobao.org/commander/download/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" - integrity sha1-9hmKqE5bg8RgVLlN3tv+1e6f8So= - -common-tags@^1.4.0: - version "1.8.0" - resolved "http://registry.npm.taobao.org/common-tags/download/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" - integrity sha1-jjFT5ULUo56bEFVENK+q+YlWqTc= - -commondir@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - -component-emitter@^1.2.1: - version "1.2.1" - resolved "http://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= - -concat-map@0.0.1: - version "0.0.1" - resolved "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -concat-stream@^1.5.0: - version "1.6.2" - resolved "http://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ= - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -configstore@^3.0.0: - version "3.1.2" - resolved "http://registry.npm.taobao.org/configstore/download/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" - integrity sha1-xvJd767vJt8S3TNBSwAf6BpUP48= - dependencies: - dot-prop "^4.1.0" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - unique-string "^1.0.0" - write-file-atomic "^2.0.0" - xdg-basedir "^3.0.0" - -connect-history-api-fallback@^1.5.0: - version "1.5.0" - resolved "http://registry.npm.taobao.org/connect-history-api-fallback/download/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" - integrity sha1-sGhzk0vF40T+9hGhlqb6rgruAVo= - -consola@^1.4.3: - version "1.4.5" - resolved "http://registry.npm.taobao.org/consola/download/consola-1.4.5.tgz#09732d07cb50af07332e54e0f42fafb92b962c4a" - integrity sha1-CXMtB8tQrwczLlTg9C+vuSuWLEo= - dependencies: - chalk "^2.3.2" - figures "^2.0.0" - lodash "^4.17.5" - std-env "^1.1.0" - -console-browserify@^1.1.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/console-browserify/download/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" - integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA= - dependencies: - date-now "^0.1.4" - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/console-control-strings/download/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - -consolidate@^0.15.1: - version "0.15.1" - resolved "http://registry.npm.taobao.org/consolidate/download/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7" - integrity sha1-IasEMjXHGgfUXZqtmFk7DbpWurc= - dependencies: - bluebird "^3.1.1" - -constants-browserify@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/constants-browserify/download/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= - -content-disposition@~0.5.2: - version "0.5.2" - resolved "http://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" - integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ= - -content-type@^1.0.4: - version "1.0.4" - resolved "http://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha1-4TjMdeBAxyexlm/l5fjJruJW/js= - -convert-source-map@^1.1.0: - version "1.6.0" - resolved "http://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" - integrity sha1-UbU3qMQ+DwTewZk7/83VBOdYrCA= - dependencies: - safe-buffer "~5.1.1" - -cookies@~0.7.1: - version "0.7.3" - resolved "http://registry.npm.taobao.org/cookies/download/cookies-0.7.3.tgz#7912ce21fbf2e8c2da70cf1c3f351aecf59dadfa" - integrity sha1-eRLOIfvy6MLacM8cPzUa7PWdrfo= - dependencies: - depd "~1.1.2" - keygrip "~1.0.3" - -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "http://registry.npm.taobao.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha1-kilzmMrjSTf8r9bsgTnBgFHwteA= - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "http://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -copy-webpack-plugin@^4.5.1: - version "4.6.0" - resolved "http://registry.npm.taobao.org/copy-webpack-plugin/download/copy-webpack-plugin-4.6.0.tgz#e7f40dd8a68477d405dd1b7a854aae324b158bae" - integrity sha1-5/QN2KaEd9QF3Rt6hUquMksVi64= - dependencies: - cacache "^10.0.4" - find-cache-dir "^1.0.0" - globby "^7.1.1" - is-glob "^4.0.0" - loader-utils "^1.1.0" - minimatch "^3.0.4" - p-limit "^1.0.0" - serialize-javascript "^1.4.0" - -core-js@^2.4.0, core-js@^2.5.3: - version "2.6.0" - resolved "http://registry.npm.taobao.org/core-js/download/core-js-2.6.0.tgz#1e30793e9ee5782b307e37ffa22da0eacddd84d4" - integrity sha1-HjB5Pp7leCswfjf/oi2g6s3dhNQ= - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cosmiconfig@^4.0.0: - version "4.0.0" - resolved "http://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc" - integrity sha1-dgORVJWAu9LfHlYrwXexPCkJctw= - dependencies: - is-directory "^0.3.1" - js-yaml "^3.9.0" - parse-json "^4.0.0" - require-from-string "^2.0.1" - -cosmiconfig@^5.0.2: - version "5.0.7" - resolved "http://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-5.0.7.tgz#39826b292ee0d78eda137dfa3173bd1c21a43b04" - integrity sha1-OYJrKS7g147aE336MXO9HCGkOwQ= - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.9.0" - parse-json "^4.0.0" - -create-ecdh@^4.0.0: - version "4.0.3" - resolved "http://registry.npm.taobao.org/create-ecdh/download/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" - integrity sha1-yREbbzMEXEaX8UR4f5JUzcd8Rf8= - dependencies: - bn.js "^4.1.0" - elliptic "^6.0.0" - -create-error-class@^3.0.0: - version "3.0.2" - resolved "http://registry.npm.taobao.org/create-error-class/download/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" - integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= - dependencies: - capture-stack-trace "^1.0.0" - -create-hash@^1.1.0, create-hash@^1.1.2: - version "1.2.0" - resolved "http://registry.npm.taobao.org/create-hash/download/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY= - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: - version "1.1.7" - resolved "http://registry.npm.taobao.org/create-hmac/download/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8= - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-spawn@^5.0.1: - version "5.1.0" - resolved "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^6.0.5: - version "6.0.5" - resolved "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q= - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "http://registry.npm.taobao.org/crypto-browserify/download/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha1-OWz58xN/A+S45TLFj2mCVOAPgOw= - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -crypto-random-string@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/crypto-random-string/download/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= - -css-color-names@0.0.4: - version "0.0.4" - resolved "http://registry.npm.taobao.org/css-color-names/download/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= - -css-loader@^0.28.11: - version "0.28.11" - resolved "http://registry.npm.taobao.org/css-loader/download/css-loader-0.28.11.tgz#c3f9864a700be2711bb5a2462b2389b1a392dab7" - integrity sha1-w/mGSnAL4nEbtaJGKyOJsaOS2rc= - dependencies: - babel-code-frame "^6.26.0" - css-selector-tokenizer "^0.7.0" - cssnano "^3.10.0" - icss-utils "^2.1.0" - loader-utils "^1.0.2" - lodash.camelcase "^4.3.0" - object-assign "^4.1.1" - postcss "^5.0.6" - postcss-modules-extract-imports "^1.2.0" - postcss-modules-local-by-default "^1.2.0" - postcss-modules-scope "^1.1.0" - postcss-modules-values "^1.3.0" - postcss-value-parser "^3.3.0" - source-list-map "^2.0.0" - -css-parse@1.7.x: - version "1.7.0" - resolved "http://registry.npm.taobao.org/css-parse/download/css-parse-1.7.0.tgz#321f6cf73782a6ff751111390fc05e2c657d8c9b" - integrity sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs= - -css-select@^1.1.0: - version "1.2.0" - resolved "http://registry.npm.taobao.org/css-select/download/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - -css-selector-tokenizer@^0.7.0: - version "0.7.1" - resolved "http://registry.npm.taobao.org/css-selector-tokenizer/download/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d" - integrity sha1-oXcnGovKUBkXL0+JH8bu2cv2jV0= - dependencies: - cssesc "^0.1.0" - fastparse "^1.1.1" - regexpu-core "^1.0.0" - -css-what@2.1: - version "2.1.2" - resolved "http://registry.npm.taobao.org/css-what/download/css-what-2.1.2.tgz#c0876d9d0480927d7d4920dcd72af3595649554d" - integrity sha1-wIdtnQSAkn19SSDc1yrzWVZJVU0= - -cssesc@^0.1.0: - version "0.1.0" - resolved "http://registry.npm.taobao.org/cssesc/download/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" - integrity sha1-yBSQPkViM3GgR3tAEJqq++6t27Q= - -cssnano@^3.10.0: - version "3.10.0" - resolved "http://registry.npm.taobao.org/cssnano/download/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" - integrity sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg= - dependencies: - autoprefixer "^6.3.1" - decamelize "^1.1.2" - defined "^1.0.0" - has "^1.0.1" - object-assign "^4.0.1" - postcss "^5.0.14" - postcss-calc "^5.2.0" - postcss-colormin "^2.1.8" - postcss-convert-values "^2.3.4" - postcss-discard-comments "^2.0.4" - postcss-discard-duplicates "^2.0.1" - postcss-discard-empty "^2.0.1" - postcss-discard-overridden "^0.1.1" - postcss-discard-unused "^2.2.1" - postcss-filter-plugins "^2.0.0" - postcss-merge-idents "^2.1.5" - postcss-merge-longhand "^2.0.1" - postcss-merge-rules "^2.0.3" - postcss-minify-font-values "^1.0.2" - postcss-minify-gradients "^1.0.1" - postcss-minify-params "^1.0.4" - postcss-minify-selectors "^2.0.4" - postcss-normalize-charset "^1.1.0" - postcss-normalize-url "^3.0.7" - postcss-ordered-values "^2.1.0" - postcss-reduce-idents "^2.2.2" - postcss-reduce-initial "^1.0.0" - postcss-reduce-transforms "^1.0.3" - postcss-svgo "^2.1.1" - postcss-unique-selectors "^2.0.2" - postcss-value-parser "^3.2.3" - postcss-zindex "^2.0.1" - -csso@~2.3.1: - version "2.3.2" - resolved "http://registry.npm.taobao.org/csso/download/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" - integrity sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U= - dependencies: - clap "^1.0.9" - source-map "^0.5.3" - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "http://registry.npm.taobao.org/currently-unhandled/download/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= - dependencies: - array-find-index "^1.0.1" - -cyclist@~0.2.2: - version "0.2.2" - resolved "http://registry.npm.taobao.org/cyclist/download/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" - integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= - -d@1: - version "1.0.0" - resolved "http://registry.npm.taobao.org/d/download/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" - integrity sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8= - dependencies: - es5-ext "^0.10.9" - -dashdash@^1.12.0: - version "1.14.1" - resolved "http://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -date-now@^0.1.4: - version "0.1.4" - resolved "http://registry.npm.taobao.org/date-now/download/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" - integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= - -de-indent@^1.0.2: - version "1.0.2" - resolved "http://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" - integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= - -debug@*: - version "4.1.0" - resolved "http://registry.npm.taobao.org/debug/download/debug-4.1.0.tgz#373687bffa678b38b1cd91f861b63850035ddc87" - integrity sha1-NzaHv/pnizixzZH4YbY4UANd3Ic= - dependencies: - ms "^2.1.1" - -debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.1, debug@^2.6.3, debug@^2.6.8: - version "2.6.9" - resolved "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8= - dependencies: - ms "2.0.0" - -debug@^3.1.0: - version "3.2.6" - resolved "http://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha1-6D0X3hbYp++3cX7b5fsQE17uYps= - dependencies: - ms "^2.1.1" - -debug@~3.1.0: - version "3.1.0" - resolved "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE= - dependencies: - ms "2.0.0" - -decamelize-keys@^1.0.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/decamelize-keys/download/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.1.2: - version "1.2.0" - resolved "http://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "http://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -deep-equal@~1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/deep-equal/download/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= - -deep-extend@^0.6.0: - version "0.6.0" - resolved "http://registry.npm.taobao.org/deep-extend/download/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha1-xPp8lUBKF6nD6Mp+FTcxK3NjMKw= - -deepmerge@^1.5.2: - version "1.5.2" - resolved "http://registry.npm.taobao.org/deepmerge/download/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753" - integrity sha1-EEmdhohEza1P7ghC34x/bwyVp1M= - -define-properties@^1.1.2: - version "1.1.3" - resolved "http://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE= - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "http://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha1-1Flono1lS6d+AqgX+HENcCyxbp0= - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -defined@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/defined/download/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -delegate@^3.1.2: - version "3.2.0" - resolved "http://registry.npm.taobao.org/delegate/download/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" - integrity sha1-tmtxwxWFIuirV0T3INjKDCr1kWY= - -delegates@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/delegates/download/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - -depd@^1.1.2, depd@~1.1.2: - version "1.1.2" - resolved "http://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -des.js@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/des.js/download/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" - integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw= - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@^1.0.4: - version "1.0.4" - resolved "http://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= - -detect-libc@^1.0.2: - version "1.0.3" - resolved "http://registry.npm.taobao.org/detect-libc/download/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - -diacritics@^1.3.0: - version "1.3.0" - resolved "http://registry.npm.taobao.org/diacritics/download/diacritics-1.3.0.tgz#3efa87323ebb863e6696cebb0082d48ff3d6f7a1" - integrity sha1-PvqHMj67hj5mls67AILUj/PW96E= - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "http://registry.npm.taobao.org/diffie-hellman/download/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha1-QOjumPVaIUlgcUaSHGPhrl89KHU= - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dir-glob@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/dir-glob/download/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" - integrity sha1-CyBdK2rvmCOMooZZioIE0p0KADQ= - dependencies: - arrify "^1.0.1" - path-type "^3.0.0" - -docsearch.js@^2.5.2: - version "2.6.2" - resolved "http://registry.npm.taobao.org/docsearch.js/download/docsearch.js-2.6.2.tgz#cb36a97aeac8a8d31eed5915cdee808a2248b41c" - integrity sha1-yzapeurIqNMe7VkVze6AiiJItBw= - dependencies: - algoliasearch "^3.24.5" - autocomplete.js "0.33.0" - hogan.js "^3.0.2" - request "^2.87.0" - stack-utils "^1.0.1" - to-factory "^1.0.0" - zepto "^1.2.0" - -dom-converter@~0.2: - version "0.2.0" - resolved "http://registry.npm.taobao.org/dom-converter/download/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" - integrity sha1-ZyGp2u4uKTaClVtq/kFncWJ7t2g= - dependencies: - utila "~0.4" - -dom-serializer@0: - version "0.1.0" - resolved "http://registry.npm.taobao.org/dom-serializer/download/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" - integrity sha1-BzxpdUbOB4DOI75KKOKT5AvDDII= - dependencies: - domelementtype "~1.1.1" - entities "~1.1.1" - -dom-walk@^0.1.0: - version "0.1.1" - resolved "http://registry.npm.taobao.org/dom-walk/download/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" - integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg= - -domain-browser@^1.1.1: - version "1.2.0" - resolved "http://registry.npm.taobao.org/domain-browser/download/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - integrity sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto= - -domelementtype@1: - version "1.3.1" - resolved "http://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha1-0EjESzew0Qp/Kj1f7j9DM9eQSB8= - -domelementtype@~1.1.1: - version "1.1.3" - resolved "http://registry.npm.taobao.org/domelementtype/download/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" - integrity sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs= - -domhandler@2.1: - version "2.1.0" - resolved "http://registry.npm.taobao.org/domhandler/download/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594" - integrity sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ= - dependencies: - domelementtype "1" - -domutils@1.1: - version "1.1.6" - resolved "http://registry.npm.taobao.org/domutils/download/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" - integrity sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU= - dependencies: - domelementtype "1" - -domutils@1.5.1: - version "1.5.1" - resolved "http://registry.npm.taobao.org/domutils/download/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= - dependencies: - dom-serializer "0" - domelementtype "1" - -dot-prop@^4.1.0, dot-prop@^4.1.1: - version "4.2.0" - resolved "http://registry.npm.taobao.org/dot-prop/download/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - integrity sha1-HxngwuGqDjJ5fEl5nyg3rGr2nFc= - dependencies: - is-obj "^1.0.0" - -duplexer3@^0.1.4: - version "0.1.4" - resolved "http://registry.npm.taobao.org/duplexer3/download/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.6.1" - resolved "http://registry.npm.taobao.org/duplexify/download/duplexify-3.6.1.tgz#b1a7a29c4abfd639585efaecce80d666b1e34125" - integrity sha1-saeinEq/1jlYXvrszoDWZrHjQSU= - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "http://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "http://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.47: - version "1.3.92" - resolved "http://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.92.tgz#9027b5abaea400045edd652c0e4838675c814399" - integrity sha1-kCe1q66kAARe3WUsDkg4Z1yBQ5k= - -elliptic@^6.0.0: - version "6.4.1" - resolved "http://registry.npm.taobao.org/elliptic/download/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" - integrity sha1-wtC3d2kRuGcixjLDwGxg8vgZk5o= - dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" - hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" - -emojis-list@^2.0.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/emojis-list/download/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= - -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.1" - resolved "http://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" - integrity sha1-7SljTRm6ukY7bOa4CjchPqtx7EM= - dependencies: - once "^1.4.0" - -enhanced-resolve@^4.1.0: - version "4.1.0" - resolved "http://registry.npm.taobao.org/enhanced-resolve/download/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" - integrity sha1-Qcfgv9/nSsH/4eV61qXGyfN0Kn8= - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.4.0" - tapable "^1.0.0" - -entities@~1.1.1: - version "1.1.2" - resolved "http://registry.npm.taobao.org/entities/download/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha1-vfpzUplmTfr9NFKe1PhSKidf6lY= - -envify@^4.0.0: - version "4.1.0" - resolved "http://registry.npm.taobao.org/envify/download/envify-4.1.0.tgz#f39ad3db9d6801b4e6b478b61028d3f0b6819f7e" - integrity sha1-85rT251oAbTmtHi2ECjT8LaBn34= - dependencies: - esprima "^4.0.0" - through "~2.3.4" - -errno@^0.1.3, errno@~0.1.7: - version "0.1.7" - resolved "http://registry.npm.taobao.org/errno/download/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - integrity sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg= - dependencies: - prr "~1.0.1" - -error-ex@^1.3.1: - version "1.3.2" - resolved "http://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha1-tKxAZIEH/c3PriQvQovqihTU8b8= - dependencies: - is-arrayish "^0.2.1" - -error-inject@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/error-inject/download/error-inject-1.0.0.tgz#e2b3d91b54aed672f309d950d154850fa11d4f37" - integrity sha1-4rPZG1Su1nLzCdlQ0VSFD6EdTzc= - -es-abstract@^1.5.1: - version "1.12.0" - resolved "http://registry.npm.taobao.org/es-abstract/download/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" - integrity sha1-nbvdJ8aFbwABQhyhh4LXhr+KYWU= - dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.1" - has "^1.0.1" - is-callable "^1.1.3" - is-regex "^1.0.4" - -es-to-primitive@^1.1.1: - version "1.2.0" - resolved "http://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" - integrity sha1-7fckeAM0VujdqO8J4ArZZQcH83c= - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.46" - resolved "http://registry.npm.taobao.org/es5-ext/download/es5-ext-0.10.46.tgz#efd99f67c5a7ec789baa3daa7f79870388f7f572" - integrity sha1-79mfZ8Wn7Hibqj2qf3mHA4j39XI= - dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.1" - next-tick "1" - -es6-iterator@~2.0.3: - version "2.0.3" - resolved "http://registry.npm.taobao.org/es6-iterator/download/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-promise@^4.1.0: - version "4.2.5" - resolved "http://registry.npm.taobao.org/es6-promise/download/es6-promise-4.2.5.tgz#da6d0d5692efb461e082c14817fe2427d8f5d054" - integrity sha1-2m0NVpLvtGHggsFIF/4kJ9j10FQ= - -es6-symbol@^3.1.1, es6-symbol@~3.1.1: - version "3.1.1" - resolved "http://registry.npm.taobao.org/es6-symbol/download/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" - integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc= - dependencies: - d "1" - es5-ext "~0.10.14" - -escape-html@^1.0.3: - version "1.0.3" - resolved "http://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -eslint-scope@^4.0.0: - version "4.0.0" - resolved "http://registry.npm.taobao.org/eslint-scope/download/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" - integrity sha1-UL8wcekzi83EMzF5Sgy1M/ATYXI= - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -esprima@^2.6.0: - version "2.7.3" - resolved "http://registry.npm.taobao.org/esprima/download/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= - -esprima@^4.0.0: - version "4.0.1" - resolved "http://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha1-E7BM2z5sXRnfkatph6hpVhmwqnE= - -esrecurse@^4.1.0: - version "4.2.1" - resolved "http://registry.npm.taobao.org/esrecurse/download/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - integrity sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8= - dependencies: - estraverse "^4.1.0" - -estraverse@^4.1.0, estraverse@^4.1.1: - version "4.2.0" - resolved "http://registry.npm.taobao.org/estraverse/download/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= - -esutils@^2.0.2: - version "2.0.2" - resolved "http://registry.npm.taobao.org/esutils/download/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= - -events@^1.0.0, events@^1.1.0: - version "1.1.1" - resolved "http://registry.npm.taobao.org/events/download/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" - integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "http://registry.npm.taobao.org/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI= - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -execa@^0.7.0: - version "0.7.0" - resolved "http://registry.npm.taobao.org/execa/download/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^0.8.0: - version "0.8.0" - resolved "http://registry.npm.taobao.org/execa/download/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" - integrity sha1-2NdrvBtVIX7RkP1t1J08d07PyNo= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s= - dependencies: - is-posix-bracket "^0.1.0" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-range@^1.8.1: - version "1.8.2" - resolved "http://registry.npm.taobao.org/expand-range/download/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc= - dependencies: - fill-range "^2.1.0" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@~3.0.2: - version "3.0.2" - resolved "http://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo= - -extglob@^0.3.1: - version "0.3.2" - resolved "http://registry.npm.taobao.org/extglob/download/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE= - dependencies: - is-extglob "^1.0.0" - -extglob@^2.0.4: - version "2.0.4" - resolved "http://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM= - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= - -fast-glob@^2.0.2: - version "2.2.4" - resolved "http://registry.npm.taobao.org/fast-glob/download/fast-glob-2.2.4.tgz#e54f4b66d378040e0e4d6a68ec36bbc5b04363c0" - integrity sha1-5U9LZtN4BA4OTWpo7Da7xbBDY8A= - dependencies: - "@mrmlnc/readdir-enhanced" "^2.2.1" - "@nodelib/fs.stat" "^1.1.2" - glob-parent "^3.1.0" - is-glob "^4.0.0" - merge2 "^1.2.3" - micromatch "^3.1.10" - -fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= - -fastparse@^1.1.1: - version "1.1.2" - resolved "http://registry.npm.taobao.org/fastparse/download/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" - integrity sha1-kXKMWllC7O2FMSg8eUQe5BIsNak= - -figgy-pudding@^3.1.0, figgy-pudding@^3.5.1: - version "3.5.1" - resolved "http://registry.npm.taobao.org/figgy-pudding/download/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" - integrity sha1-hiRwESkBxyeg5JWoB0S9W6odZ5A= - -figures@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/figures/download/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - dependencies: - escape-string-regexp "^1.0.5" - -file-loader@^1.1.11: - version "1.1.11" - resolved "http://registry.npm.taobao.org/file-loader/download/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8" - integrity sha1-b+iGRJsPKpNuQ8q6rAzb+zaVBvg= - dependencies: - loader-utils "^1.0.2" - schema-utils "^0.4.5" - -filename-regex@^2.0.0: - version "2.0.1" - resolved "http://registry.npm.taobao.org/filename-regex/download/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= - -fill-range@^2.1.0: - version "2.2.4" - resolved "http://registry.npm.taobao.org/fill-range/download/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" - integrity sha1-6x53OrsFbc2N8r/favWbizqTZWU= - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^3.0.0" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -fill-range@^4.0.0: - version "4.0.0" - resolved "http://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -find-cache-dir@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" - integrity sha1-kojj6ePMN0hxfTnq3hfPcfww7m8= - dependencies: - commondir "^1.0.1" - make-dir "^1.0.0" - pkg-dir "^2.0.0" - -find-cache-dir@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-2.0.0.tgz#4c1faed59f45184530fb9d7fa123a4d04a98472d" - integrity sha1-TB+u1Z9FGEUw+51/oSOk0EqYRy0= - dependencies: - commondir "^1.0.1" - make-dir "^1.0.0" - pkg-dir "^3.0.0" - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/find-up/download/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha1-SRafHXmTQwZG2mHsxa41XCHJe3M= - dependencies: - locate-path "^3.0.0" - -flatten@^1.0.2: - version "1.0.2" - resolved "http://registry.npm.taobao.org/flatten/download/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" - integrity sha1-2uRqnXj74lKSJYzB54CkHZXAN4I= - -flush-write-stream@^1.0.0: - version "1.0.3" - resolved "http://registry.npm.taobao.org/flush-write-stream/download/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" - integrity sha1-xdWG7zivYJdlC0m8QbVfq7GfNb0= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.4" - -for-in@^1.0.1, for-in@^1.0.2: - version "1.0.2" - resolved "http://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -for-own@^0.1.4: - version "0.1.5" - resolved "http://registry.npm.taobao.org/for-own/download/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= - dependencies: - for-in "^1.0.1" - -foreach@^2.0.5: - version "2.0.5" - resolved "http://registry.npm.taobao.org/foreach/download/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= - -forever-agent@~0.6.1: - version "0.6.1" - resolved "http://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -form-data@~2.3.2: - version "2.3.3" - resolved "http://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha1-3M5SwF9kTymManq5Nr1yTO/786Y= - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "http://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - -fresh@~0.5.2: - version "0.5.2" - resolved "http://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= - -from2@^2.1.0: - version "2.3.0" - resolved "http://registry.npm.taobao.org/from2/download/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fs-extra@^4.0.2: - version "4.0.3" - resolved "http://registry.npm.taobao.org/fs-extra/download/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" - integrity sha1-DYUhIuW8W+tFP7Ao6cDJvzY0DJQ= - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^5.0.0: - version "5.0.0" - resolved "http://registry.npm.taobao.org/fs-extra/download/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" - integrity sha1-QU0BEM3QZwVzTQVWUsVBEmDDGr0= - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-minipass@^1.2.5: - version "1.2.5" - resolved "http://registry.npm.taobao.org/fs-minipass/download/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" - integrity sha1-BsJ3IYRU7CiN93raVKA7hwKqy50= - dependencies: - minipass "^2.2.1" - -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "http://registry.npm.taobao.org/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^1.2.2: - version "1.2.4" - resolved "http://registry.npm.taobao.org/fsevents/download/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" - integrity sha1-9B3LGvJYKvNpLaNvxVy9jhBBxCY= - dependencies: - nan "^2.9.2" - node-pre-gyp "^0.10.0" - -function-bind@^1.1.1: - version "1.1.1" - resolved "http://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0= - -gauge@~2.7.3: - version "2.7.4" - resolved "http://registry.npm.taobao.org/gauge/download/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/get-own-enumerable-property-symbols/download/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203" - integrity sha1-uHe0mlwWrvrDZV8u0upbaE340gM= - -get-port@^3.2.0: - version "3.2.0" - resolved "http://registry.npm.taobao.org/get-port/download/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" - integrity sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw= - -get-stream@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "http://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -getpass@^0.1.1: - version "0.1.7" - resolved "http://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -glob-base@^0.3.0: - version "0.3.0" - resolved "http://registry.npm.taobao.org/glob-base/download/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/glob-parent/download/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= - dependencies: - is-glob "^2.0.0" - -glob-parent@^3.1.0: - version "3.1.0" - resolved "http://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-to-regexp@^0.3.0: - version "0.3.0" - resolved "http://registry.npm.taobao.org/glob-to-regexp/download/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" - integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= - -glob@7.0.x: - version "7.0.6" - resolved "http://registry.npm.taobao.org/glob/download/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" - integrity sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo= - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.5, glob@^7.1.2: - version "7.1.3" - resolved "http://registry.npm.taobao.org/glob/download/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha1-OWCDLT8VdBCDQtr9OmezMsCWnfE= - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-dirs@^0.1.0: - version "0.1.1" - resolved "http://registry.npm.taobao.org/global-dirs/download/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" - integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= - dependencies: - ini "^1.3.4" - -global@^4.3.2: - version "4.3.2" - resolved "http://registry.npm.taobao.org/global/download/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" - integrity sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8= - dependencies: - min-document "^2.19.0" - process "~0.5.1" - -globals@^11.1.0: - version "11.9.0" - resolved "http://registry.npm.taobao.org/globals/download/globals-11.9.0.tgz#bde236808e987f290768a93d065060d78e6ab249" - integrity sha1-veI2gI6YfykHaKk9BlBg145qskk= - -globby@^7.1.1: - version "7.1.1" - resolved "http://registry.npm.taobao.org/globby/download/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" - integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= - dependencies: - array-union "^1.0.1" - dir-glob "^2.0.0" - glob "^7.1.2" - ignore "^3.3.5" - pify "^3.0.0" - slash "^1.0.0" - -globby@^8.0.1: - version "8.0.1" - resolved "http://registry.npm.taobao.org/globby/download/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50" - integrity sha1-ta1IuKqAs1uBT8EoHsyFHx0rW1A= - dependencies: - array-union "^1.0.1" - dir-glob "^2.0.0" - fast-glob "^2.0.2" - glob "^7.1.2" - ignore "^3.3.5" - pify "^3.0.0" - slash "^1.0.0" - -good-listener@^1.2.2: - version "1.2.2" - resolved "http://registry.npm.taobao.org/good-listener/download/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" - integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA= - dependencies: - delegate "^3.1.2" - -got@^6.7.1: - version "6.7.1" - resolved "http://registry.npm.taobao.org/got/download/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" - integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= - dependencies: - create-error-class "^3.0.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-redirect "^1.0.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - lowercase-keys "^1.0.0" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - unzip-response "^2.0.1" - url-parse-lax "^1.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.1.15" - resolved "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" - integrity sha1-/7cD4QZuig7qpMi4C6klPu77+wA= - -gray-matter@^4.0.1: - version "4.0.1" - resolved "http://registry.npm.taobao.org/gray-matter/download/gray-matter-4.0.1.tgz#375263c194f0d9755578c277e41b1c1dfdf22c7d" - integrity sha1-N1JjwZTw2XVVeMJ35BscHf3yLH0= - dependencies: - js-yaml "^3.11.0" - kind-of "^6.0.2" - section-matter "^1.0.0" - strip-bom-string "^1.0.0" - -har-schema@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.0: - version "5.1.3" - resolved "http://registry.npm.taobao.org/har-validator/download/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" - integrity sha1-HvievT5JllV2de7ZiTEQ3DUPoIA= - dependencies: - ajv "^6.5.5" - har-schema "^2.0.0" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.0.0" - -has-flag@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= - -has-flag@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-symbols@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= - -has-unicode@^2.0.0: - version "2.0.1" - resolved "http://registry.npm.taobao.org/has-unicode/download/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - -has-value@^0.3.1: - version "0.3.1" - resolved "http://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "http://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.1: - version "1.0.3" - resolved "http://registry.npm.taobao.org/has/download/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y= - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.0.4" - resolved "http://registry.npm.taobao.org/hash-base/download/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -hash-sum@^1.0.2: - version "1.0.2" - resolved "http://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04" - integrity sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ= - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "http://registry.npm.taobao.org/hash.js/download/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I= - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -he@1.2.x, he@^1.1.0: - version "1.2.0" - resolved "http://registry.npm.taobao.org/he/download/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha1-hK5l+n6vsWX922FWauFLrwVmTw8= - -hmac-drbg@^1.0.0: - version "1.0.1" - resolved "http://registry.npm.taobao.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hoek@4.x.x: - version "4.2.1" - resolved "http://registry.npm.taobao.org/hoek/download/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" - integrity sha1-ljRQKqEsRF3Vp8VzS1cruHOKrLs= - -hogan.js@^3.0.2: - version "3.0.2" - resolved "http://registry.npm.taobao.org/hogan.js/download/hogan.js-3.0.2.tgz#4cd9e1abd4294146e7679e41d7898732b02c7bfd" - integrity sha1-TNnhq9QpQUbnZ55B14mHMrAse/0= - dependencies: - mkdirp "0.3.0" - nopt "1.0.10" - -hosted-git-info@^2.1.4: - version "2.7.1" - resolved "http://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" - integrity sha1-l/I2l3vW4SVAiTD/bePuxigewEc= - -html-comment-regex@^1.1.0: - version "1.1.2" - resolved "http://registry.npm.taobao.org/html-comment-regex/download/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" - integrity sha1-l9RoiutcgYhqNk+qDK0d2hTUM6c= - -html-minifier@^3.2.3: - version "3.5.21" - resolved "http://registry.npm.taobao.org/html-minifier/download/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c" - integrity sha1-0AQOBUcw41TbAIRjWTGUAVIS0gw= - dependencies: - camel-case "3.0.x" - clean-css "4.2.x" - commander "2.17.x" - he "1.2.x" - param-case "2.1.x" - relateurl "0.2.x" - uglify-js "3.4.x" - -htmlparser2@~3.3.0: - version "3.3.0" - resolved "http://registry.npm.taobao.org/htmlparser2/download/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" - integrity sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4= - dependencies: - domelementtype "1" - domhandler "2.1" - domutils "1.1" - readable-stream "1.0" - -http-assert@^1.3.0: - version "1.4.0" - resolved "http://registry.npm.taobao.org/http-assert/download/http-assert-1.4.0.tgz#0e550b4fca6adf121bbeed83248c17e62f593a9a" - integrity sha1-DlULT8pq3xIbvu2DJIwX5i9ZOpo= - dependencies: - deep-equal "~1.0.1" - http-errors "~1.7.1" - -http-errors@^1.6.1, http-errors@^1.6.3, http-errors@~1.7.1: - version "1.7.1" - resolved "http://registry.npm.taobao.org/http-errors/download/http-errors-1.7.1.tgz#6a4ffe5d35188e1c39f872534690585852e1f027" - integrity sha1-ak/+XTUYjhw5+HJTRpBYWFLh8Cc= - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-errors@~1.6.2: - version "1.6.3" - resolved "http://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-signature@~1.2.0: - version "1.2.0" - resolved "http://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-browserify@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/https-browserify/download/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= - -iconv-lite@^0.4.4: - version "0.4.24" - resolved "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha1-ICK0sl+93CHS9SSXSkdKr+czkIs= - dependencies: - safer-buffer ">= 2.1.2 < 3" - -icss-replace-symbols@^1.1.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/icss-replace-symbols/download/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" - integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= - -icss-utils@^2.1.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/icss-utils/download/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" - integrity sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI= - dependencies: - postcss "^6.0.1" - -ieee754@^1.1.4: - version "1.1.12" - resolved "http://registry.npm.taobao.org/ieee754/download/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" - integrity sha1-UL8k5bnIu5ivSWTJQc2wkY2ntgs= - -iferr@^0.1.5: - version "0.1.5" - resolved "http://registry.npm.taobao.org/iferr/download/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= - -ignore-walk@^3.0.1: - version "3.0.1" - resolved "http://registry.npm.taobao.org/ignore-walk/download/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - integrity sha1-qD5i59JyrA47VRqqgoMaGbafgvg= - dependencies: - minimatch "^3.0.4" - -ignore@^3.3.5: - version "3.3.10" - resolved "http://registry.npm.taobao.org/ignore/download/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" - integrity sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM= - -immediate@^3.2.3: - version "3.2.3" - resolved "http://registry.npm.taobao.org/immediate/download/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c" - integrity sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw= - -import-cwd@^2.0.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/import-cwd/download/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" - integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= - dependencies: - import-from "^2.1.0" - -import-fresh@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/import-fresh/download/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - -import-from@^2.1.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/import-from/download/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" - integrity sha1-M1238qev/VOqpHHUuAId7ja387E= - dependencies: - resolve-from "^3.0.0" - -import-lazy@^2.1.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/import-lazy/download/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= - -import-local@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/import-local/download/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" - integrity sha1-Xk/9wD9P5sAJxnKb6yljHC+CJ7w= - dependencies: - pkg-dir "^2.0.0" - resolve-cwd "^2.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "http://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^3.0.0: - version "3.2.0" - resolved "http://registry.npm.taobao.org/indent-string/download/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= - -indexes-of@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/indexes-of/download/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= - -indexof@0.0.1: - version "0.0.1" - resolved "http://registry.npm.taobao.org/indexof/download/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= - -inflight@^1.0.4: - version "1.0.6" - resolved "http://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.3" - resolved "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -inherits@2.0.1: - version "2.0.1" - resolved "http://registry.npm.taobao.org/inherits/download/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= - -ini@^1.3.4, ini@~1.3.0: - version "1.3.5" - resolved "http://registry.npm.taobao.org/ini/download/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc= - -invariant@^2.2.0, invariant@^2.2.2: - version "2.2.4" - resolved "http://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY= - dependencies: - loose-envify "^1.0.0" - -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY= - dependencies: - kind-of "^6.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "http://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "http://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha1-76ouqdqg16suoTqXsritUf776L4= - -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/is-builtin-module/download/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74= - dependencies: - builtin-modules "^1.0.0" - -is-callable@^1.1.3, is-callable@^1.1.4: - version "1.1.4" - resolved "http://registry.npm.taobao.org/is-callable/download/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - integrity sha1-HhrfIZ4e62hNaR+dagX/DTCiTXU= - -is-ci@^1.0.10, is-ci@^1.1.0: - version "1.2.1" - resolved "http://registry.npm.taobao.org/is-ci/download/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" - integrity sha1-43ecjuF/zPQoSI9uKBGH8uYyhBw= - dependencies: - ci-info "^1.5.0" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc= - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco= - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw= - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "http://registry.npm.taobao.org/is-directory/download/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= - -is-dotfile@^1.0.0: - version "1.0.3" - resolved "http://registry.npm.taobao.org/is-dotfile/download/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "http://registry.npm.taobao.org/is-equal-shallow/download/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ= - dependencies: - is-primitive "^2.0.0" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "http://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ= - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "http://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-generator-function@^1.0.7: - version "1.0.7" - resolved "http://registry.npm.taobao.org/is-generator-function/download/is-generator-function-1.0.7.tgz#d2132e529bb0000a7f80794d4bdf5cd5e5813522" - integrity sha1-0hMuUpuwAAp/gHlNS99c1eWBNSI= - -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "http://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= - dependencies: - is-extglob "^1.0.0" - -is-glob@^3.1.0: - version "3.1.0" - resolved "http://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0: - version "4.0.0" - resolved "http://registry.npm.taobao.org/is-glob/download/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" - integrity sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A= - dependencies: - is-extglob "^2.1.1" - -is-installed-globally@^0.1.0: - version "0.1.0" - resolved "http://registry.npm.taobao.org/is-installed-globally/download/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" - integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= - dependencies: - global-dirs "^0.1.0" - is-path-inside "^1.0.0" - -is-npm@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/is-npm/download/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" - integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= - -is-number@^2.1.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/is-number/download/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8= - dependencies: - kind-of "^3.0.2" - -is-number@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - -is-number@^4.0.0: - version "4.0.0" - resolved "http://registry.npm.taobao.org/is-number/download/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" - integrity sha1-ACbjf1RU1z41bf5lZGmYZ8an8P8= - -is-obj@^1.0.0, is-obj@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/is-obj/download/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "http://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= - dependencies: - path-is-inside "^1.0.1" - -is-plain-obj@^1.0.0, is-plain-obj@^1.1, is-plain-obj@^1.1.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "http://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc= - dependencies: - isobject "^3.0.1" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "http://registry.npm.taobao.org/is-posix-bracket/download/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= - -is-primitive@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/is-primitive/download/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= - -is-redirect@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/is-redirect/download/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" - integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= - -is-regex@^1.0.4: - version "1.0.4" - resolved "http://registry.npm.taobao.org/is-regex/download/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= - dependencies: - has "^1.0.1" - -is-regexp@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/is-regexp/download/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= - -is-retry-allowed@^1.0.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/is-retry-allowed/download/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" - integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ= - -is-stream@^1.0.0, is-stream@^1.1.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -is-svg@^2.0.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/is-svg/download/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" - integrity sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk= - dependencies: - html-comment-regex "^1.1.0" - -is-symbol@^1.0.2: - version "1.0.2" - resolved "http://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" - integrity sha1-oFX2rlcZLK7jKeeoYBGLSXqVDzg= - dependencies: - has-symbols "^1.0.0" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-windows@^1.0.2: - version "1.0.2" - resolved "http://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0= - -is-wsl@^1.1.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= - -isarray@0.0.1: - version "0.0.1" - resolved "http://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isarray@^2.0.1: - version "2.0.4" - resolved "http://registry.npm.taobao.org/isarray/download/isarray-2.0.4.tgz#38e7bcbb0f3ba1b7933c86ba1894ddfc3781bbb7" - integrity sha1-OOe8uw87obeTPIa6GJTd/DeBu7c= - -isemail@3.x.x: - version "3.2.0" - resolved "http://registry.npm.taobao.org/isemail/download/isemail-3.2.0.tgz#59310a021931a9fb06bbb51e155ce0b3f236832c" - integrity sha1-WTEKAhkxqfsGu7UeFVzgs/I2gyw= - dependencies: - punycode "2.x.x" - -isexe@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^2.0.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -isstream@~0.1.2: - version "0.1.2" - resolved "http://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -javascript-stringify@^1.6.0: - version "1.6.0" - resolved "http://registry.npm.taobao.org/javascript-stringify/download/javascript-stringify-1.6.0.tgz#142d111f3a6e3dae8f4a9afd77d45855b5a9cce3" - integrity sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM= - -joi@^11.1.1: - version "11.4.0" - resolved "http://registry.npm.taobao.org/joi/download/joi-11.4.0.tgz#f674897537b625e9ac3d0b7e1604c828ad913ccb" - integrity sha1-9nSJdTe2JemsPQt+FgTIKK2RPMs= - dependencies: - hoek "4.x.x" - isemail "3.x.x" - topo "2.x.x" - -js-base64@^2.1.9: - version "2.4.9" - resolved "http://registry.npm.taobao.org/js-base64/download/js-base64-2.4.9.tgz#748911fb04f48a60c4771b375cac45a80df11c03" - integrity sha1-dIkR+wT0imDEdxs3XKxFqA3xHAM= - -js-tokens@^3.0.0, js-tokens@^3.0.2: - version "3.0.2" - resolved "http://registry.npm.taobao.org/js-tokens/download/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= - -"js-tokens@^3.0.0 || ^4.0.0": - version "4.0.0" - resolved "http://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha1-GSA/tZmR35jjoocFDUZHzerzJJk= - -js-yaml@^3.11.0, js-yaml@^3.9.0: - version "3.12.0" - resolved "http://registry.npm.taobao.org/js-yaml/download/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" - integrity sha1-6u1lbsg0TxD1J8a/obbiJE3hZ9E= - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@~3.7.0: - version "3.7.0" - resolved "http://registry.npm.taobao.org/js-yaml/download/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" - integrity sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A= - dependencies: - argparse "^1.0.7" - esprima "^2.6.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "http://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jsesc@^2.5.1: - version "2.5.2" - resolved "http://registry.npm.taobao.org/jsesc/download/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q= - -jsesc@~0.5.0: - version "0.5.0" - resolved "http://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: - version "1.0.2" - resolved "http://registry.npm.taobao.org/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk= - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha1-afaofZUTq4u4/mO9sJecRI5oRmA= - -json-schema@0.2.3: - version "0.2.3" - resolved "http://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - -json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -json5@^0.5.0: - version "0.5.1" - resolved "http://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= - -jsonfile@^4.0.0: - version "4.0.0" - resolved "http://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - -jsprim@^1.2.2: - version "1.4.1" - resolved "http://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -keygrip@~1.0.3: - version "1.0.3" - resolved "http://registry.npm.taobao.org/keygrip/download/keygrip-1.0.3.tgz#399d709f0aed2bab0a059e0cdd3a5023a053e1dc" - integrity sha1-OZ1wnwrtK6sKBZ4M3TpQI6BT4dw= - -killable@^1.0.0: - version "1.0.1" - resolved "http://registry.npm.taobao.org/killable/download/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" - integrity sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI= - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha1-cpyR4thXt6QZofmqZWhcTDP1hF0= - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - integrity sha1-ARRrNqYhjmTljzqNZt5df8b20FE= - -koa-compose@^3.0.0, koa-compose@^3.2.1: - version "3.2.1" - resolved "http://registry.npm.taobao.org/koa-compose/download/koa-compose-3.2.1.tgz#a85ccb40b7d986d8e5a345b3a1ace8eabcf54de7" - integrity sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec= - dependencies: - any-promise "^1.1.0" - -koa-compose@^4.1.0: - version "4.1.0" - resolved "http://registry.npm.taobao.org/koa-compose/download/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877" - integrity sha1-UHMGuTcZAdtBEhyBLpI9DWfT6Hc= - -koa-connect@^2.0.1: - version "2.0.1" - resolved "http://registry.npm.taobao.org/koa-connect/download/koa-connect-2.0.1.tgz#2acad159c33862de1d73aa4562a48de13f137c0f" - integrity sha1-KsrRWcM4Yt4dc6pFYqSN4T8TfA8= - -koa-convert@^1.2.0: - version "1.2.0" - resolved "http://registry.npm.taobao.org/koa-convert/download/koa-convert-1.2.0.tgz#da40875df49de0539098d1700b50820cebcd21d0" - integrity sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA= - dependencies: - co "^4.6.0" - koa-compose "^3.0.0" - -koa-is-json@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/koa-is-json/download/koa-is-json-1.0.0.tgz#273c07edcdcb8df6a2c1ab7d59ee76491451ec14" - integrity sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ= - -koa-mount@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/koa-mount/download/koa-mount-3.0.0.tgz#08cab3b83d31442ed8b7e75c54b1abeb922ec197" - integrity sha1-CMqzuD0xRC7Yt+dcVLGr65IuwZc= - dependencies: - debug "^2.6.1" - koa-compose "^3.2.1" - -koa-range@^0.3.0: - version "0.3.0" - resolved "http://registry.npm.taobao.org/koa-range/download/koa-range-0.3.0.tgz#3588e3496473a839a1bd264d2a42b1d85bd7feac" - integrity sha1-NYjjSWRzqDmhvSZNKkKx2FvX/qw= - dependencies: - stream-slice "^0.1.2" - -koa-send@^4.1.3: - version "4.1.3" - resolved "http://registry.npm.taobao.org/koa-send/download/koa-send-4.1.3.tgz#0822207bbf5253a414c8f1765ebc29fa41353cb6" - integrity sha1-CCIge79SU6QUyPF2Xrwp+kE1PLY= - dependencies: - debug "^2.6.3" - http-errors "^1.6.1" - mz "^2.6.0" - resolve-path "^1.4.0" - -koa-static@^4.0.2: - version "4.0.3" - resolved "http://registry.npm.taobao.org/koa-static/download/koa-static-4.0.3.tgz#5f93ad00fb1905db9ce46667c0e8bb7d22abfcd8" - integrity sha1-X5OtAPsZBduc5GZnwOi7fSKr/Ng= - dependencies: - debug "^3.1.0" - koa-send "^4.1.3" - -koa-webpack@^4.0.0: - version "4.0.0" - resolved "http://registry.npm.taobao.org/koa-webpack/download/koa-webpack-4.0.0.tgz#1d9b83c109db106d8ef65db376f910a45ba964c7" - integrity sha1-HZuDwQnbEG2O9l2zdvkQpFupZMc= - dependencies: - app-root-path "^2.0.1" - merge-options "^1.0.0" - webpack-dev-middleware "^3.0.0" - webpack-hot-client "^3.0.0" - webpack-log "^1.1.1" - -koa@^2.4.1: - version "2.6.2" - resolved "http://registry.npm.taobao.org/koa/download/koa-2.6.2.tgz#57ba4d049b0a99cae0d594e6144e2931949a7ce1" - integrity sha1-V7pNBJsKmcrg1ZTmFE4pMZSafOE= - dependencies: - accepts "^1.3.5" - cache-content-type "^1.0.0" - content-disposition "~0.5.2" - content-type "^1.0.4" - cookies "~0.7.1" - debug "~3.1.0" - delegates "^1.0.0" - depd "^1.1.2" - destroy "^1.0.4" - error-inject "^1.0.0" - escape-html "^1.0.3" - fresh "~0.5.2" - http-assert "^1.3.0" - http-errors "^1.6.3" - is-generator-function "^1.0.7" - koa-compose "^4.1.0" - koa-convert "^1.2.0" - koa-is-json "^1.0.0" - on-finished "^2.3.0" - only "~0.0.2" - parseurl "^1.3.2" - statuses "^1.5.0" - type-is "^1.6.16" - vary "^1.1.2" - -last-call-webpack-plugin@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/last-call-webpack-plugin/download/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555" - integrity sha1-l0LfDhDjz0blwDgcLekNOnotdVU= - dependencies: - lodash "^4.17.5" - webpack-sources "^1.1.0" - -latest-version@^3.0.0: - version "3.1.0" - resolved "http://registry.npm.taobao.org/latest-version/download/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" - integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= - dependencies: - package-json "^4.0.0" - -linkify-it@^2.0.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/linkify-it/download/linkify-it-2.1.0.tgz#c4caf38a6cd7ac2212ef3c7d2bde30a91561f9db" - integrity sha1-xMrzimzXrCIS7zx9K94wqRVh+ds= - dependencies: - uc.micro "^1.0.1" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "http://registry.npm.taobao.org/load-json-file/download/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -load-script@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/load-script/download/load-script-1.0.0.tgz#0491939e0bee5643ee494a7e3da3d2bac70c6ca4" - integrity sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ= - -loader-runner@^2.3.0: - version "2.3.1" - resolved "http://registry.npm.taobao.org/loader-runner/download/loader-runner-2.3.1.tgz#026f12fe7c3115992896ac02ba022ba92971b979" - integrity sha1-Am8S/nwxFZkolqwCugIrqSlxuXk= - -loader-utils@^0.2.16: - version "0.2.17" - resolved "http://registry.npm.taobao.org/loader-utils/download/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" - integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - object-assign "^4.0.1" - -loader-utils@^1.0.2, loader-utils@^1.1.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/loader-utils/download/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" - integrity sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0= - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4= - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -lodash._reinterpolate@~3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/lodash._reinterpolate/download/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "http://registry.npm.taobao.org/lodash.camelcase/download/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "http://registry.npm.taobao.org/lodash.clonedeep/download/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "http://registry.npm.taobao.org/lodash.debounce/download/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "http://registry.npm.taobao.org/lodash.memoize/download/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - -lodash.template@^4.4.0: - version "4.4.0" - resolved "http://registry.npm.taobao.org/lodash.template/download/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0" - integrity sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A= - dependencies: - lodash._reinterpolate "~3.0.0" - lodash.templatesettings "^4.0.0" - -lodash.templatesettings@^4.0.0: - version "4.1.0" - resolved "http://registry.npm.taobao.org/lodash.templatesettings/download/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316" - integrity sha1-K01OlbpEDZFf8IvImeRVNmZxMxY= - dependencies: - lodash._reinterpolate "~3.0.0" - -lodash.throttle@^4.1.1: - version "4.1.1" - resolved "http://registry.npm.taobao.org/lodash.throttle/download/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" - integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "http://registry.npm.taobao.org/lodash.uniq/download/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= - -lodash@^4.17.10, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5: - version "4.17.11" - resolved "http://registry.npm.taobao.org/lodash/download/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" - integrity sha1-s56mIp72B+zYniyN8SU2iRysm40= - -log-symbols@^2.1.0: - version "2.2.0" - resolved "http://registry.npm.taobao.org/log-symbols/download/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha1-V0Dhxdbw39pK2TI7UzIQfva0xAo= - dependencies: - chalk "^2.0.1" - -log-update@^2.3.0: - version "2.3.0" - resolved "http://registry.npm.taobao.org/log-update/download/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" - integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg= - dependencies: - ansi-escapes "^3.0.0" - cli-cursor "^2.0.0" - wrap-ansi "^3.0.1" - -loglevelnext@^1.0.1, loglevelnext@^1.0.2: - version "1.0.5" - resolved "http://registry.npm.taobao.org/loglevelnext/download/loglevelnext-1.0.5.tgz#36fc4f5996d6640f539ff203ba819641680d75a2" - integrity sha1-NvxPWZbWZA9Tn/IDuoGWQWgNdaI= - dependencies: - es6-symbol "^3.1.1" - object.assign "^4.1.0" - -loose-envify@^1.0.0: - version "1.4.0" - resolved "http://registry.npm.taobao.org/loose-envify/download/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8= - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -loud-rejection@^1.0.0, loud-rejection@^1.6.0: - version "1.6.0" - resolved "http://registry.npm.taobao.org/loud-rejection/download/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -lower-case@^1.1.1: - version "1.1.4" - resolved "http://registry.npm.taobao.org/lower-case/download/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= - -lowercase-keys@^1.0.0: - version "1.0.1" - resolved "http://registry.npm.taobao.org/lowercase-keys/download/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha1-b54wtHCE2XGnyCD/FabFFnt0wm8= - -lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.2, lru-cache@^4.1.3: - version "4.1.5" - resolved "http://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80= - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -make-dir@^1.0.0: - version "1.3.0" - resolved "http://registry.npm.taobao.org/make-dir/download/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha1-ecEDO4BRW9bSTsmTPoYMp17ifww= - dependencies: - pify "^3.0.0" - -map-cache@^0.2.2: - version "0.2.2" - resolved "http://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-obj@^1.0.0: - version "1.0.1" - resolved "http://registry.npm.taobao.org/map-obj/download/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - -map-obj@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/map-obj/download/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" - integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= - -map-visit@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - -markdown-it-anchor@^5.0.2: - version "5.0.2" - resolved "http://registry.npm.taobao.org/markdown-it-anchor/download/markdown-it-anchor-5.0.2.tgz#cdd917a05b7bf92fb736a6dae3385c6d0d0fa552" - integrity sha1-zdkXoFt7+S+3Nqba4zhcbQ0PpVI= - -markdown-it-container@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/markdown-it-container/download/markdown-it-container-2.0.0.tgz#0019b43fd02eefece2f1960a2895fba81a404695" - integrity sha1-ABm0P9Au7+zi8ZYKKJX7qBpARpU= - -markdown-it-emoji@^1.4.0: - version "1.4.0" - resolved "http://registry.npm.taobao.org/markdown-it-emoji/download/markdown-it-emoji-1.4.0.tgz#9bee0e9a990a963ba96df6980c4fddb05dfb4dcc" - integrity sha1-m+4OmpkKljupbfaYDE/dsF37Tcw= - -markdown-it-table-of-contents@^0.4.0: - version "0.4.3" - resolved "http://registry.npm.taobao.org/markdown-it-table-of-contents/download/markdown-it-table-of-contents-0.4.3.tgz#6453925a76e49b9b3d9569a0d89f1c2168b46982" - integrity sha1-ZFOSWnbkm5s9lWmg2J8cIWi0aYI= - -markdown-it@^8.4.1: - version "8.4.2" - resolved "http://registry.npm.taobao.org/markdown-it/download/markdown-it-8.4.2.tgz#386f98998dc15a37722aa7722084f4020bdd9b54" - integrity sha1-OG+YmY3BWjdyKqdyIIT0Agvdm1Q= - dependencies: - argparse "^1.0.7" - entities "~1.1.1" - linkify-it "^2.0.0" - mdurl "^1.0.1" - uc.micro "^1.0.5" - -math-expression-evaluator@^1.2.14: - version "1.2.17" - resolved "http://registry.npm.taobao.org/math-expression-evaluator/download/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" - integrity sha1-3oGf282E3M2PrlnGrreWFbnSZqw= - -math-random@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/math-random/download/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" - integrity sha1-izqsWIuKZuSXXjzepn97sylgH6w= - -md5.js@^1.3.4: - version "1.3.5" - resolved "http://registry.npm.taobao.org/md5.js/download/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8= - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -mdurl@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/mdurl/download/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" - integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= - -media-typer@0.3.0: - version "0.3.0" - resolved "http://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - -memory-fs@^0.4.0, memory-fs@~0.4.1: - version "0.4.1" - resolved "http://registry.npm.taobao.org/memory-fs/download/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -meow@^5.0.0: - version "5.0.0" - resolved "http://registry.npm.taobao.org/meow/download/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" - integrity sha1-38c9Y6mvxxSl43F2DrXIi5EHiqQ= - dependencies: - camelcase-keys "^4.0.0" - decamelize-keys "^1.0.0" - loud-rejection "^1.0.0" - minimist-options "^3.0.1" - normalize-package-data "^2.3.4" - read-pkg-up "^3.0.0" - redent "^2.0.0" - trim-newlines "^2.0.0" - yargs-parser "^10.0.0" - -merge-options@^1.0.0, merge-options@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/merge-options/download/merge-options-1.0.1.tgz#2a64b24457becd4e4dc608283247e94ce589aa32" - integrity sha1-KmSyRFe+zU5NxggoMkfpTOWJqjI= - dependencies: - is-plain-obj "^1.1" - -merge-source-map@^1.1.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/merge-source-map/download/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" - integrity sha1-L93n5gIJOfcJBqaPLXrmheTIxkY= - dependencies: - source-map "^0.6.1" - -merge2@^1.2.3: - version "1.2.3" - resolved "http://registry.npm.taobao.org/merge2/download/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5" - integrity sha1-fumdvWm7ZIFoklPwGEiKG5ArDtU= - -micromatch@^2.3.11: - version "2.3.11" - resolved "http://registry.npm.taobao.org/micromatch/download/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: - version "3.1.10" - resolved "http://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha1-cIWbyVyYQJUvNZoGij/En57PrCM= - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "http://registry.npm.taobao.org/miller-rabin/download/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha1-8IA1HIZbDcViqEYpZtqlNUPHik0= - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@~1.37.0: - version "1.37.0" - resolved "http://registry.npm.taobao.org/mime-db/download/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8" - integrity sha1-C2oM5v2+lXbiXx8tL96IMNwK0Ng= - -mime-types@^2.1.12, mime-types@^2.1.18, mime-types@~2.1.18, mime-types@~2.1.19: - version "2.1.21" - resolved "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96" - integrity sha1-KJlaoey3cHQv5q5+WPkYHHRLP5Y= - dependencies: - mime-db "~1.37.0" - -mime@^2.0.3, mime@^2.3.1: - version "2.4.0" - resolved "http://registry.npm.taobao.org/mime/download/mime-2.4.0.tgz#e051fd881358585f3279df333fe694da0bcffdd6" - integrity sha1-4FH9iBNYWF8yed8zP+aU2gvP/dY= - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "http://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI= - -min-document@^2.19.0: - version "2.19.0" - resolved "http://registry.npm.taobao.org/min-document/download/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= - dependencies: - dom-walk "^0.1.0" - -mini-css-extract-plugin@0.4.1: - version "0.4.1" - resolved "http://registry.npm.taobao.org/mini-css-extract-plugin/download/mini-css-extract-plugin-0.4.1.tgz#d2bcf77bb2596b8e4bd9257e43d3f9164c2e86cb" - integrity sha1-0rz3e7JZa45L2SV+Q9P5Fkwuhss= - dependencies: - "@webpack-contrib/schema-utils" "^1.0.0-beta.0" - loader-utils "^1.1.0" - webpack-sources "^1.1.0" - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc= - -minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= - -minimatch@^3.0.2, minimatch@^3.0.4: - version "3.0.4" - resolved "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM= - dependencies: - brace-expansion "^1.1.7" - -minimist-options@^3.0.1: - version "3.0.2" - resolved "http://registry.npm.taobao.org/minimist-options/download/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" - integrity sha1-+6TIGRM54T7PTWG+sD8HAQPz2VQ= - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - -minimist@0.0.8: - version "0.0.8" - resolved "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - -minimist@^1.2.0: - version "1.2.0" - resolved "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= - -minipass@^2.2.1, minipass@^2.3.4: - version "2.3.5" - resolved "http://registry.npm.taobao.org/minipass/download/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" - integrity sha1-ys6+SSAiSX9law8PUeJoKp7S2Eg= - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.1.1: - version "1.2.1" - resolved "http://registry.npm.taobao.org/minizlib/download/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" - integrity sha1-3SfqYTYkPHyIBoToZyuzpF/ZthQ= - dependencies: - minipass "^2.2.1" - -mississippi@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/mississippi/download/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f" - integrity sha1-NEKlCPr8KFAEhv7qmUCWduTuWm8= - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^2.0.1" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mississippi@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/mississippi/download/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - integrity sha1-6goykfl+C16HdrNj1fChLZTGcCI= - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mixin-deep@^1.2.0: - version "1.3.1" - resolved "http://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" - integrity sha1-pJ5yaNzhoNlpjkUybFYm3zVD0P4= - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@0.3.0: - version "0.3.0" - resolved "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" - integrity sha1-G79asbqCevI1dRQ0kEJkVfSB/h4= - -mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: - version "0.5.1" - resolved "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - dependencies: - minimist "0.0.8" - -move-concurrently@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" - -ms@2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@^2.1.1: - version "2.1.1" - resolved "http://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo= - -mz@^2.6.0: - version "2.7.0" - resolved "http://registry.npm.taobao.org/mz/download/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha1-lQCAV6Vsr63CvGPd5/n/aVWUjjI= - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -nan@^2.9.2: - version "2.11.1" - resolved "http://registry.npm.taobao.org/nan/download/nan-2.11.1.tgz#90e22bccb8ca57ea4cd37cc83d3819b52eea6766" - integrity sha1-kOIrzLjKV+pM03zIPTgZtS7qZ2Y= - -nanoassert@^1.1.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/nanoassert/download/nanoassert-1.1.0.tgz#4f3152e09540fde28c76f44b19bbcd1d5a42478d" - integrity sha1-TzFS4JVA/eKMdvRLGbvNHVpCR40= - -nanobus@^4.3.1: - version "4.4.0" - resolved "http://registry.npm.taobao.org/nanobus/download/nanobus-4.4.0.tgz#e5c20846fa17cff01ef5aac301410d1e541f81ed" - integrity sha1-5cIIRvoXz/Ae9arDAUENHlQfge0= - dependencies: - nanoassert "^1.1.0" - nanotiming "^7.2.0" - remove-array-items "^1.0.0" - -nanomatch@^1.2.9: - version "1.2.13" - resolved "http://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk= - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -nanoscheduler@^1.0.2: - version "1.0.3" - resolved "http://registry.npm.taobao.org/nanoscheduler/download/nanoscheduler-1.0.3.tgz#6ca027941bf3e04139ea4bab6227ea6ad803692f" - integrity sha1-bKAnlBvz4EE56kurYifqatgDaS8= - dependencies: - nanoassert "^1.1.0" - -nanotiming@^7.2.0: - version "7.3.1" - resolved "http://registry.npm.taobao.org/nanotiming/download/nanotiming-7.3.1.tgz#dc5cf8d9d8ad401a4394d1a9b7a16714bccfefda" - integrity sha1-3Fz42ditQBpDlNGpt6FnFLzP79o= - dependencies: - nanoassert "^1.1.0" - nanoscheduler "^1.0.2" - -needle@^2.2.1: - version "2.2.4" - resolved "http://registry.npm.taobao.org/needle/download/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" - integrity sha1-UZMb/4JTOxkot9HWngHxsA/9Kk4= - dependencies: - debug "^2.1.2" - iconv-lite "^0.4.4" - sax "^1.2.4" - -negotiator@0.6.1: - version "0.6.1" - resolved "http://registry.npm.taobao.org/negotiator/download/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" - integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk= - -neo-async@^2.5.0: - version "2.6.0" - resolved "http://registry.npm.taobao.org/neo-async/download/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" - integrity sha1-udFeTXHGdikIZUtRg+04t1M0CDU= - -next-tick@1: - version "1.0.0" - resolved "http://registry.npm.taobao.org/next-tick/download/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" - integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= - -nice-try@^1.0.4: - version "1.0.5" - resolved "http://registry.npm.taobao.org/nice-try/download/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y= - -no-case@^2.2.0: - version "2.3.2" - resolved "http://registry.npm.taobao.org/no-case/download/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" - integrity sha1-YLgTOWvjmz8SiKTB7V0efSi0ZKw= - dependencies: - lower-case "^1.1.1" - -node-libs-browser@^2.0.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/node-libs-browser/download/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" - integrity sha1-X5QmPUBPbkR2fXJpAf/wVHjWAN8= - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^1.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.0" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.10.3" - vm-browserify "0.0.4" - -node-pre-gyp@^0.10.0: - version "0.10.3" - resolved "http://registry.npm.taobao.org/node-pre-gyp/download/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" - integrity sha1-MHAEBxav3HeHR7YbaIe/eIgLgPw= - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - -nopt@1.0.10: - version "1.0.10" - resolved "http://registry.npm.taobao.org/nopt/download/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" - integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= - dependencies: - abbrev "1" - -nopt@^4.0.1: - version "4.0.1" - resolved "http://registry.npm.taobao.org/nopt/download/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: - version "2.4.0" - resolved "http://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" - integrity sha1-EvlaMH1YNSB1oEkHuErIvpisAS8= - dependencies: - hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.0.1, normalize-path@^2.1.1: - version "2.1.1" - resolved "http://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-range@^0.1.2: - version "0.1.2" - resolved "http://registry.npm.taobao.org/normalize-range/download/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= - -normalize-url@^1.4.0: - version "1.9.1" - resolved "http://registry.npm.taobao.org/normalize-url/download/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" - integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= - dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" - -npm-bundled@^1.0.1: - version "1.0.5" - resolved "http://registry.npm.taobao.org/npm-bundled/download/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979" - integrity sha1-PBcyt7qTazoQMlrvYWRnwMy8yXk= - -npm-packlist@^1.1.6: - version "1.1.12" - resolved "http://registry.npm.taobao.org/npm-packlist/download/npm-packlist-1.1.12.tgz#22bde2ebc12e72ca482abd67afc51eb49377243a" - integrity sha1-Ir3i68EucspIKr1nr8UetJN3JDo= - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "http://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -npmlog@^4.0.2: - version "4.1.2" - resolved "http://registry.npm.taobao.org/npmlog/download/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha1-CKfyqL9zRgR3mp76StXMcXq7lUs= - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -nprogress@^0.2.0: - version "0.2.0" - resolved "http://registry.npm.taobao.org/nprogress/download/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" - integrity sha1-y480xTIT2JVyP8urkH6UIq28r7E= - -nth-check@~1.0.1: - version "1.0.2" - resolved "http://registry.npm.taobao.org/nth-check/download/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha1-sr0pXDfj3VijvwcAN2Zjuk2c8Fw= - dependencies: - boolbase "~1.0.0" - -num2fraction@^1.2.2: - version "1.2.2" - resolved "http://registry.npm.taobao.org/num2fraction/download/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "http://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "http://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU= - -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "http://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-copy@^0.1.0: - version "0.1.0" - resolved "http://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-keys@^1.0.11, object-keys@^1.0.12, object-keys@~1.0.0: - version "1.0.12" - resolved "http://registry.npm.taobao.org/object-keys/download/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" - integrity sha1-CcU4VTd1dTEMymL1W7M0q/97PtI= - -object-visit@^1.0.0: - version "1.0.1" - resolved "http://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.0: - version "4.1.0" - resolved "http://registry.npm.taobao.org/object.assign/download/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha1-lovxEA15Vrs8oIbwBvhGs7xACNo= - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.getownpropertydescriptors@^2.0.3: - version "2.0.3" - resolved "http://registry.npm.taobao.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" - integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= - dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.1" - -object.omit@^2.0.0: - version "2.0.1" - resolved "http://registry.npm.taobao.org/object.omit/download/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo= - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "http://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -on-finished@^2.3.0: - version "2.3.0" - resolved "http://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - dependencies: - ee-first "1.1.1" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "http://registry.npm.taobao.org/onetime/download/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - -only@~0.0.2: - version "0.0.2" - resolved "http://registry.npm.taobao.org/only/download/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" - integrity sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q= - -opn@^5.1.0: - version "5.4.0" - resolved "http://registry.npm.taobao.org/opn/download/opn-5.4.0.tgz#cb545e7aab78562beb11aa3bfabc7042e1761035" - integrity sha1-y1Reeqt4VivrEao7+rxwQuF2EDU= - dependencies: - is-wsl "^1.1.0" - -optimize-css-assets-webpack-plugin@^4.0.0: - version "4.0.3" - resolved "http://registry.npm.taobao.org/optimize-css-assets-webpack-plugin/download/optimize-css-assets-webpack-plugin-4.0.3.tgz#4f714e276b279700892c4a6202b7e22812d6f683" - integrity sha1-T3FOJ2snlwCJLEpiArfiKBLW9oM= - dependencies: - cssnano "^3.10.0" - last-call-webpack-plugin "^3.0.0" - -os-browserify@^0.3.0: - version "0.3.0" - resolved "http://registry.npm.taobao.org/os-browserify/download/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= - -os-homedir@^1.0.0: - version "1.0.2" - resolved "http://registry.npm.taobao.org/os-homedir/download/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - -os-tmpdir@^1.0.0: - version "1.0.2" - resolved "http://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -osenv@^0.1.4: - version "0.1.5" - resolved "http://registry.npm.taobao.org/osenv/download/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha1-hc36+uso6Gd/QW4odZK18/SepBA= - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -p-finally@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-limit@^1.0.0, p-limit@^1.1.0: - version "1.3.0" - resolved "http://registry.npm.taobao.org/p-limit/download/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg= - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/p-limit/download/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec" - integrity sha1-5iTtVO6MRgp3izyfNnBJb/ileuw= - dependencies: - p-try "^2.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ= - dependencies: - p-limit "^2.0.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -p-try@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/p-try/download/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" - integrity sha1-hQgLuHxkaI+keZb+j3376CEXYLE= - -package-json@^4.0.0: - version "4.0.1" - resolved "http://registry.npm.taobao.org/package-json/download/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" - integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= - dependencies: - got "^6.7.1" - registry-auth-token "^3.0.1" - registry-url "^3.0.3" - semver "^5.1.0" - -pako@~1.0.5: - version "1.0.7" - resolved "http://registry.npm.taobao.org/pako/download/pako-1.0.7.tgz#2473439021b57f1516c82f58be7275ad8ef1bb27" - integrity sha1-JHNDkCG1fxUWyC9YvnJ1rY7xuyc= - -parallel-transform@^1.1.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/parallel-transform/download/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" - integrity sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY= - dependencies: - cyclist "~0.2.2" - inherits "^2.0.3" - readable-stream "^2.1.5" - -param-case@2.1.x: - version "2.1.1" - resolved "http://registry.npm.taobao.org/param-case/download/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" - integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= - dependencies: - no-case "^2.2.0" - -parse-asn1@^5.0.0: - version "5.1.1" - resolved "http://registry.npm.taobao.org/parse-asn1/download/parse-asn1-5.1.1.tgz#f6bf293818332bd0dab54efb16087724745e6ca8" - integrity sha1-9r8pOBgzK9DatU77Fgh3JHRebKg= - dependencies: - asn1.js "^4.0.0" - browserify-aes "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - -parse-glob@^3.0.4: - version "3.0.4" - resolved "http://registry.npm.taobao.org/parse-glob/download/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "http://registry.npm.taobao.org/parse-json/download/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parseurl@^1.3.2: - version "1.3.2" - resolved "http://registry.npm.taobao.org/parseurl/download/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" - integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M= - -pascalcase@^0.1.1: - version "0.1.1" - resolved "http://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-browserify@0.0.0: - version "0.0.0" - resolved "http://registry.npm.taobao.org/path-browserify/download/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" - integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo= - -path-dirname@^1.0.0: - version "1.0.2" - resolved "http://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - -path-exists@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-is-absolute@1.0.1, path-is-absolute@^1.0.0: - version "1.0.1" - resolved "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-is-inside@^1.0.1: - version "1.0.2" - resolved "http://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "http://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-parse@^1.0.5: - version "1.0.6" - resolved "http://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha1-1i27VnlAXXLEc37FhgDp3c8G0kw= - -path-type@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/path-type/download/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha1-zvMdyOCho7sNEFwM2Xzzv0f0428= - dependencies: - pify "^3.0.0" - -pbkdf2@^3.0.3: - version "3.0.17" - resolved "http://registry.npm.taobao.org/pbkdf2/download/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" - integrity sha1-l2wgZTBhexTrsyEUI597CTNuk6Y= - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -performance-now@^2.1.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - -pify@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/pkg-dir/download/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - dependencies: - find-up "^2.1.0" - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/pkg-dir/download/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM= - dependencies: - find-up "^3.0.0" - -portfinder@^1.0.13: - version "1.0.20" - resolved "http://registry.npm.taobao.org/portfinder/download/portfinder-1.0.20.tgz#bea68632e54b2e13ab7b0c4775e9b41bf270e44a" - integrity sha1-vqaGMuVLLhOrewxHdem0G/Jw5Eo= - dependencies: - async "^1.5.2" - debug "^2.2.0" - mkdirp "0.5.x" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "http://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -postcss-calc@^5.2.0: - version "5.3.1" - resolved "http://registry.npm.taobao.org/postcss-calc/download/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" - integrity sha1-d7rnypKK2FcW4v2kLyYb98HWW14= - dependencies: - postcss "^5.0.2" - postcss-message-helpers "^2.0.0" - reduce-css-calc "^1.2.6" - -postcss-colormin@^2.1.8: - version "2.2.2" - resolved "http://registry.npm.taobao.org/postcss-colormin/download/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" - integrity sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks= - dependencies: - colormin "^1.0.5" - postcss "^5.0.13" - postcss-value-parser "^3.2.3" - -postcss-convert-values@^2.3.4: - version "2.6.1" - resolved "http://registry.npm.taobao.org/postcss-convert-values/download/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" - integrity sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0= - dependencies: - postcss "^5.0.11" - postcss-value-parser "^3.1.2" - -postcss-discard-comments@^2.0.4: - version "2.0.4" - resolved "http://registry.npm.taobao.org/postcss-discard-comments/download/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" - integrity sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0= - dependencies: - postcss "^5.0.14" - -postcss-discard-duplicates@^2.0.1: - version "2.1.0" - resolved "http://registry.npm.taobao.org/postcss-discard-duplicates/download/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" - integrity sha1-uavye4isGIFYpesSq8riAmO5GTI= - dependencies: - postcss "^5.0.4" - -postcss-discard-empty@^2.0.1: - version "2.1.0" - resolved "http://registry.npm.taobao.org/postcss-discard-empty/download/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" - integrity sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU= - dependencies: - postcss "^5.0.14" - -postcss-discard-overridden@^0.1.1: - version "0.1.1" - resolved "http://registry.npm.taobao.org/postcss-discard-overridden/download/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" - integrity sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg= - dependencies: - postcss "^5.0.16" - -postcss-discard-unused@^2.2.1: - version "2.2.3" - resolved "http://registry.npm.taobao.org/postcss-discard-unused/download/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" - integrity sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM= - dependencies: - postcss "^5.0.14" - uniqs "^2.0.0" - -postcss-filter-plugins@^2.0.0: - version "2.0.3" - resolved "http://registry.npm.taobao.org/postcss-filter-plugins/download/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec" - integrity sha1-giRf34IzcEFkXkdxFNjlk6oYuOw= - dependencies: - postcss "^5.0.4" - -postcss-load-config@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/postcss-load-config/download/postcss-load-config-2.0.0.tgz#f1312ddbf5912cd747177083c5ef7a19d62ee484" - integrity sha1-8TEt2/WRLNdHF3CDxe96GdYu5IQ= - dependencies: - cosmiconfig "^4.0.0" - import-cwd "^2.0.0" - -postcss-loader@^2.1.5: - version "2.1.6" - resolved "http://registry.npm.taobao.org/postcss-loader/download/postcss-loader-2.1.6.tgz#1d7dd7b17c6ba234b9bed5af13e0bea40a42d740" - integrity sha1-HX3XsXxrojS5vtWvE+C+pApC10A= - dependencies: - loader-utils "^1.1.0" - postcss "^6.0.0" - postcss-load-config "^2.0.0" - schema-utils "^0.4.0" - -postcss-merge-idents@^2.1.5: - version "2.1.7" - resolved "http://registry.npm.taobao.org/postcss-merge-idents/download/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" - integrity sha1-TFUwMTwI4dWzu/PSu8dH4njuonA= - dependencies: - has "^1.0.1" - postcss "^5.0.10" - postcss-value-parser "^3.1.1" - -postcss-merge-longhand@^2.0.1: - version "2.0.2" - resolved "http://registry.npm.taobao.org/postcss-merge-longhand/download/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" - integrity sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg= - dependencies: - postcss "^5.0.4" - -postcss-merge-rules@^2.0.3: - version "2.1.2" - resolved "http://registry.npm.taobao.org/postcss-merge-rules/download/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" - integrity sha1-0d9d+qexrMO+VT8OnhDofGG19yE= - dependencies: - browserslist "^1.5.2" - caniuse-api "^1.5.2" - postcss "^5.0.4" - postcss-selector-parser "^2.2.2" - vendors "^1.0.0" - -postcss-message-helpers@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/postcss-message-helpers/download/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" - integrity sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4= - -postcss-minify-font-values@^1.0.2: - version "1.0.5" - resolved "http://registry.npm.taobao.org/postcss-minify-font-values/download/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" - integrity sha1-S1jttWZB66fIR0qzUmyv17vey2k= - dependencies: - object-assign "^4.0.1" - postcss "^5.0.4" - postcss-value-parser "^3.0.2" - -postcss-minify-gradients@^1.0.1: - version "1.0.5" - resolved "http://registry.npm.taobao.org/postcss-minify-gradients/download/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" - integrity sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE= - dependencies: - postcss "^5.0.12" - postcss-value-parser "^3.3.0" - -postcss-minify-params@^1.0.4: - version "1.2.2" - resolved "http://registry.npm.taobao.org/postcss-minify-params/download/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" - integrity sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM= - dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.2" - postcss-value-parser "^3.0.2" - uniqs "^2.0.0" - -postcss-minify-selectors@^2.0.4: - version "2.1.1" - resolved "http://registry.npm.taobao.org/postcss-minify-selectors/download/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" - integrity sha1-ssapjAByz5G5MtGkllCBFDEXNb8= - dependencies: - alphanum-sort "^1.0.2" - has "^1.0.1" - postcss "^5.0.14" - postcss-selector-parser "^2.0.0" - -postcss-modules-extract-imports@^1.2.0: - version "1.2.1" - resolved "http://registry.npm.taobao.org/postcss-modules-extract-imports/download/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a" - integrity sha1-3IfjQUjsfqtfeR981YSYMzdbdBo= - dependencies: - postcss "^6.0.1" - -postcss-modules-local-by-default@^1.2.0: - version "1.2.0" - resolved "http://registry.npm.taobao.org/postcss-modules-local-by-default/download/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" - integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk= - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-scope@^1.1.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/postcss-modules-scope/download/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" - integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A= - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-values@^1.3.0: - version "1.3.0" - resolved "http://registry.npm.taobao.org/postcss-modules-values/download/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" - integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA= - dependencies: - icss-replace-symbols "^1.1.0" - postcss "^6.0.1" - -postcss-normalize-charset@^1.1.0: - version "1.1.1" - resolved "http://registry.npm.taobao.org/postcss-normalize-charset/download/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" - integrity sha1-757nEhLX/nWceO0WL2HtYrXLk/E= - dependencies: - postcss "^5.0.5" - -postcss-normalize-url@^3.0.7: - version "3.0.8" - resolved "http://registry.npm.taobao.org/postcss-normalize-url/download/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" - integrity sha1-EI90s/L82viRov+j6kWSJ5/HgiI= - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^1.4.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - -postcss-ordered-values@^2.1.0: - version "2.2.3" - resolved "http://registry.npm.taobao.org/postcss-ordered-values/download/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" - integrity sha1-7sbCpntsQSqNsgQud/6NpD+VwR0= - dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.1" - -postcss-reduce-idents@^2.2.2: - version "2.4.0" - resolved "http://registry.npm.taobao.org/postcss-reduce-idents/download/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" - integrity sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM= - dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.2" - -postcss-reduce-initial@^1.0.0: - version "1.0.1" - resolved "http://registry.npm.taobao.org/postcss-reduce-initial/download/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" - integrity sha1-aPgGlfBF0IJjqHmtJA343WT2ROo= - dependencies: - postcss "^5.0.4" - -postcss-reduce-transforms@^1.0.3: - version "1.0.4" - resolved "http://registry.npm.taobao.org/postcss-reduce-transforms/download/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" - integrity sha1-/3b02CEkN7McKYpC0uFEQCV3GuE= - dependencies: - has "^1.0.1" - postcss "^5.0.8" - postcss-value-parser "^3.0.1" - -postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: - version "2.2.3" - resolved "http://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" - integrity sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A= - dependencies: - flatten "^1.0.2" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-selector-parser@^3.1.1: - version "3.1.1" - resolved "http://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" - integrity sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU= - dependencies: - dot-prop "^4.1.1" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-svgo@^2.1.1: - version "2.1.6" - resolved "http://registry.npm.taobao.org/postcss-svgo/download/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" - integrity sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0= - dependencies: - is-svg "^2.0.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - svgo "^0.7.0" - -postcss-unique-selectors@^2.0.2: - version "2.0.2" - resolved "http://registry.npm.taobao.org/postcss-unique-selectors/download/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" - integrity sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0= - dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" - -postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: - version "3.3.1" - resolved "http://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" - integrity sha1-n/giVH4okyE88cMO+lGsX9G6goE= - -postcss-zindex@^2.0.1: - version "2.2.0" - resolved "http://registry.npm.taobao.org/postcss-zindex/download/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" - integrity sha1-0hCd3AVbka9n/EyzsCWUZjnSryI= - dependencies: - has "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" - -postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: - version "5.2.18" - resolved "http://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" - integrity sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U= - dependencies: - chalk "^1.1.3" - js-base64 "^2.1.9" - source-map "^0.5.6" - supports-color "^3.2.3" - -postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.20, postcss@^6.0.23: - version "6.0.23" - resolved "http://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" - integrity sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ= - dependencies: - chalk "^2.4.1" - source-map "^0.6.1" - supports-color "^5.4.0" - -prepend-http@^1.0.0, prepend-http@^1.0.1: - version "1.0.4" - resolved "http://registry.npm.taobao.org/prepend-http/download/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= - -preserve@^0.2.0: - version "0.2.0" - resolved "http://registry.npm.taobao.org/preserve/download/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= - -prettier@1.13.7: - version "1.13.7" - resolved "http://registry.npm.taobao.org/prettier/download/prettier-1.13.7.tgz#850f3b8af784a49a6ea2d2eaa7ed1428a34b7281" - integrity sha1-hQ87iveEpJpuotLqp+0UKKNLcoE= - -pretty-bytes@^4.0.2: - version "4.0.2" - resolved "http://registry.npm.taobao.org/pretty-bytes/download/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" - integrity sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk= - -pretty-error@^2.0.2: - version "2.1.1" - resolved "http://registry.npm.taobao.org/pretty-error/download/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" - integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM= - dependencies: - renderkid "^2.0.1" - utila "~0.4" - -pretty-time@^1.1.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/pretty-time/download/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" - integrity sha1-/7dCmvq7hTXDRqNOQYc63z103Q4= - -prismjs@^1.13.0: - version "1.15.0" - resolved "http://registry.npm.taobao.org/prismjs/download/prismjs-1.15.0.tgz#8801d332e472091ba8def94976c8877ad60398d9" - integrity sha1-iAHTMuRyCRuo3vlJdsiHetYDmNk= - optionalDependencies: - clipboard "^2.0.0" - -private@^0.1.6: - version "0.1.8" - resolved "http://registry.npm.taobao.org/private/download/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - integrity sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8= - -process-nextick-args@~2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" - integrity sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o= - -process@^0.11.10: - version "0.11.10" - resolved "http://registry.npm.taobao.org/process/download/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= - -process@~0.5.1: - version "0.5.2" - resolved "http://registry.npm.taobao.org/process/download/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" - integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8= - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= - -prr@~1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/prr/download/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= - -pseudomap@^1.0.2: - version "1.0.2" - resolved "http://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - -psl@^1.1.24: - version "1.1.31" - resolved "http://registry.npm.taobao.org/psl/download/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" - integrity sha1-6aqG0BAbWxBcvpOsa3hM1UcnYYQ= - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "http://registry.npm.taobao.org/public-encrypt/download/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA= - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - -pump@^2.0.0, pump@^2.0.1: - version "2.0.1" - resolved "http://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk= - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ= - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.3: - version "1.5.1" - resolved "http://registry.npm.taobao.org/pumpify/download/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4= - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - -punycode@1.3.2: - version "1.3.2" - resolved "http://registry.npm.taobao.org/punycode/download/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= - -punycode@2.x.x, punycode@^2.1.0: - version "2.1.1" - resolved "http://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha1-tYsBCsQMIsVldhbI0sLALHv0eew= - -punycode@^1.2.4, punycode@^1.4.1: - version "1.4.1" - resolved "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - -q@^1.1.2: - version "1.5.1" - resolved "http://registry.npm.taobao.org/q/download/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= - -qs@~6.5.2: - version "6.5.2" - resolved "http://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha1-yzroBuh0BERYTvFUzo7pjUA/PjY= - -query-string@^4.1.0: - version "4.3.4" - resolved "http://registry.npm.taobao.org/query-string/download/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= - dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - -querystring-es3@^0.2.0, querystring-es3@^0.2.1: - version "0.2.1" - resolved "http://registry.npm.taobao.org/querystring-es3/download/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= - -querystring@0.2.0: - version "0.2.0" - resolved "http://registry.npm.taobao.org/querystring/download/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= - -quick-lru@^1.0.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/quick-lru/download/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" - integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= - -randomatic@^3.0.0: - version "3.1.1" - resolved "http://registry.npm.taobao.org/randomatic/download/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" - integrity sha1-t3bvxZN1mE42xTey9RofCv8Noe0= - dependencies: - is-number "^4.0.0" - kind-of "^6.0.0" - math-random "^1.0.1" - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: - version "2.0.6" - resolved "http://registry.npm.taobao.org/randombytes/download/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" - integrity sha1-0wLFIpSFiISKjTAMkytEwkIx2oA= - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "http://registry.npm.taobao.org/randomfill/download/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha1-ySGW/IarQr6YPxvzF3giSTHWFFg= - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@^1.0.3: - version "1.2.0" - resolved "http://registry.npm.taobao.org/range-parser/download/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" - integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= - -rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: - version "1.2.8" - resolved "http://registry.npm.taobao.org/rc/download/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha1-zZJL9SAKB1uDwYjNa54hG3/A0+0= - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/read-pkg/download/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.6" - resolved "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@1.0: - version "1.0.34" - resolved "http://registry.npm.taobao.org/readable-stream/download/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readdirp@^2.0.0: - version "2.2.1" - resolved "http://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha1-DodiKjMlqjPokihcr4tOhGUppSU= - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -redent@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/redent/download/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" - integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= - dependencies: - indent-string "^3.0.0" - strip-indent "^2.0.0" - -reduce-css-calc@^1.2.6: - version "1.3.0" - resolved "http://registry.npm.taobao.org/reduce-css-calc/download/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" - integrity sha1-dHyRTgSWFKTJz7umKYca0dKSdxY= - dependencies: - balanced-match "^0.4.2" - math-expression-evaluator "^1.2.14" - reduce-function-call "^1.0.1" - -reduce-function-call@^1.0.1: - version "1.0.2" - resolved "http://registry.npm.taobao.org/reduce-function-call/download/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" - integrity sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk= - dependencies: - balanced-match "^0.4.2" - -reduce@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/reduce/download/reduce-1.0.1.tgz#14fa2e5ff1fc560703a020cbb5fbaab691565804" - integrity sha1-FPouX/H8VgcDoCDLtfuqtpFWWAQ= - dependencies: - object-keys "~1.0.0" - -regenerate-unicode-properties@^7.0.0: - version "7.0.0" - resolved "http://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c" - integrity sha1-EHQFr8xKGQ7F7UUOyqAO0Mr6ekw= - dependencies: - regenerate "^1.4.0" - -regenerate@^1.2.1, regenerate@^1.4.0: - version "1.4.0" - resolved "http://registry.npm.taobao.org/regenerate/download/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - integrity sha1-SoVuxLVuQHfFV1icroXnpMiGmhE= - -regenerator-runtime@^0.11.0, regenerator-runtime@^0.11.1: - version "0.11.1" - resolved "http://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - integrity sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk= - -regenerator-transform@^0.12.3: - version "0.12.4" - resolved "http://registry.npm.taobao.org/regenerator-transform/download/regenerator-transform-0.12.4.tgz#aa9b6c59f4b97be080e972506c560b3bccbfcff0" - integrity sha1-qptsWfS5e+CA6XJQbFYLO8y/z/A= - dependencies: - private "^0.1.6" - -regex-cache@^0.4.2: - version "0.4.4" - resolved "http://registry.npm.taobao.org/regex-cache/download/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - integrity sha1-db3FiioUls7EihKDW8VMjVYjNt0= - dependencies: - is-equal-shallow "^0.1.3" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "http://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw= - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexpu-core@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/regexpu-core/download/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" - integrity sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs= - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regexpu-core@^4.1.3, regexpu-core@^4.1.4: - version "4.4.0" - resolved "http://registry.npm.taobao.org/regexpu-core/download/regexpu-core-4.4.0.tgz#8d43e0d1266883969720345e70c275ee0aec0d32" - integrity sha1-jUPg0SZog5aXIDRecMJ17grsDTI= - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^7.0.0" - regjsgen "^0.5.0" - regjsparser "^0.6.0" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.0.2" - -register-service-worker@^1.5.1: - version "1.5.2" - resolved "http://registry.npm.taobao.org/register-service-worker/download/register-service-worker-1.5.2.tgz#a4631896c38d6ec5597358f44988cc46a911912d" - integrity sha1-pGMYlsONbsVZc1j0SYjMRqkRkS0= - -registry-auth-token@^3.0.1: - version "3.3.2" - resolved "http://registry.npm.taobao.org/registry-auth-token/download/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" - integrity sha1-hR/UkDjuy1hpERFa+EUmDuyYPyA= - dependencies: - rc "^1.1.6" - safe-buffer "^5.0.1" - -registry-url@^3.0.3: - version "3.1.0" - resolved "http://registry.npm.taobao.org/registry-url/download/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" - integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= - dependencies: - rc "^1.0.1" - -regjsgen@^0.2.0: - version "0.2.0" - resolved "http://registry.npm.taobao.org/regjsgen/download/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= - -regjsgen@^0.5.0: - version "0.5.0" - resolved "http://registry.npm.taobao.org/regjsgen/download/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" - integrity sha1-p2NNwI+JIJwgSa3aNSVxH7lyZd0= - -regjsparser@^0.1.4: - version "0.1.5" - resolved "http://registry.npm.taobao.org/regjsparser/download/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= - dependencies: - jsesc "~0.5.0" - -regjsparser@^0.6.0: - version "0.6.0" - resolved "http://registry.npm.taobao.org/regjsparser/download/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" - integrity sha1-8eaui32iuulsmTmbhozWyTOiupw= - dependencies: - jsesc "~0.5.0" - -relateurl@0.2.x: - version "0.2.7" - resolved "http://registry.npm.taobao.org/relateurl/download/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= - -remove-array-items@^1.0.0: - version "1.1.1" - resolved "http://registry.npm.taobao.org/remove-array-items/download/remove-array-items-1.1.1.tgz#fd745ff73d0822e561ea910bf1b401fc7843e693" - integrity sha1-/XRf9z0IIuVh6pEL8bQB/HhD5pM= - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "http://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -renderkid@^2.0.1: - version "2.0.2" - resolved "http://registry.npm.taobao.org/renderkid/download/renderkid-2.0.2.tgz#12d310f255360c07ad8fde253f6c9e9de372d2aa" - integrity sha1-EtMQ8lU2DAetj94lP2yeneNy0qo= - dependencies: - css-select "^1.1.0" - dom-converter "~0.2" - htmlparser2 "~3.3.0" - strip-ansi "^3.0.0" - utila "^0.4.0" - -repeat-element@^1.1.2: - version "1.1.3" - resolved "http://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4= - -repeat-string@^1.5.2, repeat-string@^1.6.1: - version "1.6.1" - resolved "http://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -request@^2.87.0: - version "2.88.0" - resolved "http://registry.npm.taobao.org/request/download/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" - integrity sha1-nC/KT301tZLv5Xx/ClXoEFIST+8= - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.0" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.4.3" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-from-string@^2.0.1: - version "2.0.2" - resolved "http://registry.npm.taobao.org/require-from-string/download/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha1-iaf92TgmEmcxjq/hT5wy5ZjDaQk= - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/resolve-cwd/download/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= - dependencies: - resolve-from "^3.0.0" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - -resolve-path@^1.3.3, resolve-path@^1.4.0: - version "1.4.0" - resolved "http://registry.npm.taobao.org/resolve-path/download/resolve-path-1.4.0.tgz#c4bda9f5efb2fce65247873ab36bb4d834fe16f7" - integrity sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc= - dependencies: - http-errors "~1.6.2" - path-is-absolute "1.0.1" - -resolve-url@^0.2.1: - version "0.2.1" - resolved "http://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@^1.2.0, resolve@^1.3.2, resolve@^1.6.0: - version "1.8.1" - resolved "http://registry.npm.taobao.org/resolve/download/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" - integrity sha1-gvHsGaQjrB+9CAsLqwa6NuhKeiY= - dependencies: - path-parse "^1.0.5" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/restore-cursor/download/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "http://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w= - -rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: - version "2.6.2" - resolved "http://registry.npm.taobao.org/rimraf/download/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" - integrity sha1-LtgVDSShbqhlHm1u8PR8QVjOejY= - dependencies: - glob "^7.0.5" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "http://registry.npm.taobao.org/ripemd160/download/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw= - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "http://registry.npm.taobao.org/run-queue/download/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= - dependencies: - aproba "^1.1.1" - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha1-mR7GnSluAxN0fVm9/St0XDX4go0= - -safe-regex@^1.1.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "http://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo= - -sax@0.5.x: - version "0.5.8" - resolved "http://registry.npm.taobao.org/sax/download/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1" - integrity sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE= - -sax@^1.2.4, sax@~1.2.1: - version "1.2.4" - resolved "http://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha1-KBYjTiN4vdxOU1T6tcqold9xANk= - -schema-utils@^0.4.0, schema-utils@^0.4.2, schema-utils@^0.4.4, schema-utils@^0.4.5: - version "0.4.7" - resolved "http://registry.npm.taobao.org/schema-utils/download/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" - integrity sha1-unT1l9K+LqiAExdG7hfQoJPGgYc= - dependencies: - ajv "^6.1.0" - ajv-keywords "^3.1.0" - -schema-utils@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" - integrity sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A= - dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" - -section-matter@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/section-matter/download/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" - integrity sha1-6QQZU1BngOwB1Z8pKhnHuFC4QWc= - dependencies: - extend-shallow "^2.0.1" - kind-of "^6.0.0" - -select@^1.1.2: - version "1.1.2" - resolved "http://registry.npm.taobao.org/select/download/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" - integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= - -semver-diff@^2.0.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/semver-diff/download/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" - integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= - dependencies: - semver "^5.0.3" - -"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: - version "5.6.0" - resolved "http://registry.npm.taobao.org/semver/download/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" - integrity sha1-fnQlb7qknHWqfHogXMInmcrIAAQ= - -serialize-javascript@^1.3.0, serialize-javascript@^1.4.0: - version "1.5.0" - resolved "http://registry.npm.taobao.org/serialize-javascript/download/serialize-javascript-1.5.0.tgz#1aa336162c88a890ddad5384baebc93a655161fe" - integrity sha1-GqM2FiyIqJDdrVOEuuvJOmVRYf4= - -set-blocking@~2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-value@^0.4.3: - version "0.4.3" - resolved "http://registry.npm.taobao.org/set-value/download/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" - integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE= - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.1" - to-object-path "^0.3.0" - -set-value@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/set-value/download/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" - integrity sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ= - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.4: - version "1.0.5" - resolved "http://registry.npm.taobao.org/setimmediate/download/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - -setprototypeof@1.1.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY= - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "http://registry.npm.taobao.org/sha.js/download/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc= - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "http://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "http://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= - -slash@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= - -slice-ansi@1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/slice-ansi/download/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" - integrity sha1-BE8aSdiEL/MHqta1Be0Xi9lQE00= - dependencies: - is-fullwidth-code-point "^2.0.0" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "http://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha1-bBdfhv8UvbByRWPo88GwIaKGhTs= - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "http://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI= - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "http://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0= - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -sort-keys@^1.0.0: - version "1.1.2" - resolved "http://registry.npm.taobao.org/sort-keys/download/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= - dependencies: - is-plain-obj "^1.0.0" - -source-list-map@^2.0.0: - version "2.0.1" - resolved "http://registry.npm.taobao.org/source-list-map/download/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ= - -source-map-resolve@^0.5.0: - version "0.5.2" - resolved "http://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - integrity sha1-cuLMNAlVQ+Q7LGKyxMENSpBU8lk= - dependencies: - atob "^2.1.1" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@~0.5.6: - version "0.5.9" - resolved "http://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" - integrity sha1-QbyVOyU0Jn6i1gW8z6e/oxEc7V8= - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.0" - resolved "http://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= - -source-map@0.1.x: - version "0.1.43" - resolved "http://registry.npm.taobao.org/source-map/download/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" - integrity sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y= - dependencies: - amdefine ">=0.0.4" - -source-map@0.5.6: - version "0.5.6" - resolved "http://registry.npm.taobao.org/source-map/download/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" - integrity sha1-dc449SvwczxafwwRjYEzSiu19BI= - -source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6: - version "0.5.7" - resolved "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha1-dHIq8y6WFOnCh6jQu95IteLxomM= - -spdx-correct@^3.0.0: - version "3.1.0" - resolved "http://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - integrity sha1-+4PlBERSaPFUsHTiGMh8ADzTHfQ= - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "http://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - integrity sha1-LqRQrudPKom/uUUZwH/Nb0EyKXc= - -spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - integrity sha1-meEZt6XaAOBUkcn6M4t5BII7QdA= - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.2" - resolved "http://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-3.0.2.tgz#a59efc09784c2a5bada13cfeaf5c75dd214044d2" - integrity sha1-pZ78CXhMKlutoTz+r1x13SFARNI= - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "http://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha1-fLCd2jqGWFcFxks5pkZgOGguj+I= - dependencies: - extend-shallow "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "http://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -sshpk@^1.7.0: - version "1.15.2" - resolved "http://registry.npm.taobao.org/sshpk/download/sshpk-1.15.2.tgz#c946d6bd9b1a39d0e8635763f5242d6ed6dcb629" - integrity sha1-yUbWvZsaOdDoY1dj9SQtbtbctik= - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -ssri@^5.2.4: - version "5.3.0" - resolved "http://registry.npm.taobao.org/ssri/download/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06" - integrity sha1-ujhyycbTOgcEp9cf8EXl7EiZnQY= - dependencies: - safe-buffer "^5.1.1" - -ssri@^6.0.0: - version "6.0.1" - resolved "http://registry.npm.taobao.org/ssri/download/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" - integrity sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg= - dependencies: - figgy-pudding "^3.5.1" - -stack-utils@^1.0.1: - version "1.0.2" - resolved "http://registry.npm.taobao.org/stack-utils/download/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" - integrity sha1-M+ujiXeIVYvr/C2wWdwVjsNs67g= - -static-extend@^0.1.1: - version "0.1.2" - resolved "http://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@^1.5.0: - version "1.5.0" - resolved "http://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -std-env@^1.1.0, std-env@^1.3.1: - version "1.3.1" - resolved "http://registry.npm.taobao.org/std-env/download/std-env-1.3.1.tgz#4e1758412439e9ece1d437b1b098551911aa44ee" - integrity sha1-ThdYQSQ56ezh1DexsJhVGRGqRO4= - dependencies: - is-ci "^1.1.0" - -stream-browserify@^2.0.1: - version "2.0.1" - resolved "http://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" - integrity sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds= - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-each@^1.1.0: - version "1.2.3" - resolved "http://registry.npm.taobao.org/stream-each/download/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - integrity sha1-6+J6DDibBPvMIzZClS4Qcxr6m64= - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-http@^2.7.2: - version "2.8.3" - resolved "http://registry.npm.taobao.org/stream-http/download/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - integrity sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw= - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-shift@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" - integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= - -stream-slice@^0.1.2: - version "0.1.2" - resolved "http://registry.npm.taobao.org/stream-slice/download/stream-slice-0.1.2.tgz#2dc4f4e1b936fb13f3eb39a2def1932798d07a4b" - integrity sha1-LcT04bk2+xPz6zmi3vGTJ5jQeks= - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/strict-uri-encode/download/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= - -string-width@^1.0.1: - version "1.0.2" - resolved "http://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: - version "2.1.1" - resolved "http://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4= - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string_decoder@^1.0.0: - version "1.2.0" - resolved "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" - integrity sha1-/obnOLGVRK/nBGkkOyoe6SQOro0= - dependencies: - safe-buffer "~5.1.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "http://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= - -string_decoder@~1.1.1: - version "1.1.1" - resolved "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha1-nPFhG6YmhdcDCunkujQUnDrwP8g= - dependencies: - safe-buffer "~5.1.0" - -stringify-object@^3.2.2: - version "3.3.0" - resolved "http://registry.npm.taobao.org/stringify-object/download/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - integrity sha1-cDBlrvyhkwDTzoivT1s5VtdVZik= - dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-bom-string@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/strip-bom-string/download/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" - integrity sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI= - -strip-bom@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/strip-bom/download/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-comments@^1.0.2: - version "1.0.2" - resolved "http://registry.npm.taobao.org/strip-comments/download/strip-comments-1.0.2.tgz#82b9c45e7f05873bee53f37168af930aa368679d" - integrity sha1-grnEXn8FhzvuU/NxaK+TCqNoZ50= - dependencies: - babel-extract-comments "^1.0.0" - babel-plugin-transform-object-rest-spread "^6.26.0" - -strip-eof@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - -strip-indent@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/strip-indent/download/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "http://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -stylus-loader@^3.0.2: - version "3.0.2" - resolved "http://registry.npm.taobao.org/stylus-loader/download/stylus-loader-3.0.2.tgz#27a706420b05a38e038e7cacb153578d450513c6" - integrity sha1-J6cGQgsFo44DjnyssVNXjUUFE8Y= - dependencies: - loader-utils "^1.0.2" - lodash.clonedeep "^4.5.0" - when "~3.6.x" - -stylus@^0.54.5: - version "0.54.5" - resolved "http://registry.npm.taobao.org/stylus/download/stylus-0.54.5.tgz#42b9560931ca7090ce8515a798ba9e6aa3d6dc79" - integrity sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk= - dependencies: - css-parse "1.7.x" - debug "*" - glob "7.0.x" - mkdirp "0.5.x" - sax "0.5.x" - source-map "0.1.x" - -supports-color@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - -supports-color@^3.2.3: - version "3.2.3" - resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= - dependencies: - has-flag "^1.0.0" - -supports-color@^5.3.0, supports-color@^5.4.0: - version "5.5.0" - resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha1-4uaaRKyHcveKHsCzW2id9lMO/I8= - dependencies: - has-flag "^3.0.0" - -svgo@^0.7.0: - version "0.7.2" - resolved "http://registry.npm.taobao.org/svgo/download/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" - integrity sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U= - dependencies: - coa "~1.0.1" - colors "~1.1.2" - csso "~2.3.1" - js-yaml "~3.7.0" - mkdirp "~0.5.1" - sax "~1.2.1" - whet.extend "~0.9.9" - -table@^4.0.3: - version "4.0.3" - resolved "http://registry.npm.taobao.org/table/download/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc" - integrity sha1-ALXitgLxeUuayvnKkIp2OGp4E7w= - dependencies: - ajv "^6.0.1" - ajv-keywords "^3.0.0" - chalk "^2.1.0" - lodash "^4.17.4" - slice-ansi "1.0.0" - string-width "^2.1.1" - -tapable@^1.0.0, tapable@^1.1.0: - version "1.1.1" - resolved "http://registry.npm.taobao.org/tapable/download/tapable-1.1.1.tgz#4d297923c5a72a42360de2ab52dadfaaec00018e" - integrity sha1-TSl5I8WnKkI2DeKrUtrfquwAAY4= - -tar@^4: - version "4.4.8" - resolved "http://registry.npm.taobao.org/tar/download/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" - integrity sha1-sZ7sP94qluZGZt+f20DFyhvDdH0= - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.3.4" - minizlib "^1.1.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.2" - -term-size@^1.2.0: - version "1.2.0" - resolved "http://registry.npm.taobao.org/term-size/download/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" - integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= - dependencies: - execa "^0.7.0" - -terser-webpack-plugin@^1.1.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/terser-webpack-plugin/download/terser-webpack-plugin-1.1.0.tgz#cf7c25a1eee25bf121f4a587bb9e004e3f80e528" - integrity sha1-z3wloe7iW/Eh9KWHu54ATj+A5Sg= - dependencies: - cacache "^11.0.2" - find-cache-dir "^2.0.0" - schema-utils "^1.0.0" - serialize-javascript "^1.4.0" - source-map "^0.6.1" - terser "^3.8.1" - webpack-sources "^1.1.0" - worker-farm "^1.5.2" - -terser@^3.8.1: - version "3.11.0" - resolved "http://registry.npm.taobao.org/terser/download/terser-3.11.0.tgz#60782893e1f4d6788acc696351f40636d0e37af0" - integrity sha1-YHgok+H01niKzGljUfQGNtDjevA= - dependencies: - commander "~2.17.1" - source-map "~0.6.1" - source-map-support "~0.5.6" - -text-table@^0.2.0: - version "0.2.0" - resolved "http://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -thenify-all@^1.0.0: - version "1.6.0" - resolved "http://registry.npm.taobao.org/thenify-all/download/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.0" - resolved "http://registry.npm.taobao.org/thenify/download/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839" - integrity sha1-5p44obq+lpsBCCB5eLn2K4hgSDk= - dependencies: - any-promise "^1.0.0" - -through2@^2.0.0: - version "2.0.5" - resolved "http://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0= - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through@~2.3.4: - version "2.3.8" - resolved "http://registry.npm.taobao.org/through/download/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -time-fix-plugin@^2.0.0: - version "2.0.5" - resolved "http://registry.npm.taobao.org/time-fix-plugin/download/time-fix-plugin-2.0.5.tgz#41c76e734217cc91a08ea525fdde56de119fb683" - integrity sha1-Qcduc0IXzJGgjqUl/d5W3hGftoM= - -timed-out@^4.0.0: - version "4.0.1" - resolved "http://registry.npm.taobao.org/timed-out/download/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= - -timers-browserify@^2.0.4: - version "2.0.10" - resolved "http://registry.npm.taobao.org/timers-browserify/download/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" - integrity sha1-HSjj0qrfHVpZlsTp+VYBzQU0gK4= - dependencies: - setimmediate "^1.0.4" - -tiny-emitter@^2.0.0: - version "2.0.2" - resolved "http://registry.npm.taobao.org/tiny-emitter/download/tiny-emitter-2.0.2.tgz#82d27468aca5ade8e5fd1e6d22b57dd43ebdfb7c" - integrity sha1-gtJ0aKylrejl/R5tIrV91D69+3w= - -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "http://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= - -to-factory@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/to-factory/download/to-factory-1.0.0.tgz#8738af8bd97120ad1d4047972ada5563bf9479b1" - integrity sha1-hzivi9lxIK0dQEeXKtpVY7+UebE= - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-object-path@^0.3.0: - version "0.3.0" - resolved "http://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "http://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "http://registry.npm.taobao.org/to-regex/download/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4= - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -toidentifier@1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/toidentifier/download/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM= - -toml@^2.3.3: - version "2.3.3" - resolved "http://registry.npm.taobao.org/toml/download/toml-2.3.3.tgz#8d683d729577cb286231dfc7a8affe58d31728fb" - integrity sha1-jWg9cpV3yyhiMd/HqK/+WNMXKPs= - -topo@2.x.x: - version "2.0.2" - resolved "http://registry.npm.taobao.org/topo/download/topo-2.0.2.tgz#cd5615752539057c0dc0491a621c3bc6fbe1d182" - integrity sha1-zVYVdSU5BXwNwEkaYhw7xvvh0YI= - dependencies: - hoek "4.x.x" - -toposort@^1.0.0: - version "1.0.7" - resolved "http://registry.npm.taobao.org/toposort/download/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" - integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk= - -tough-cookie@~2.4.3: - version "2.4.3" - resolved "http://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - integrity sha1-U/Nto/R3g7CSWvoG/587FlKA94E= - dependencies: - psl "^1.1.24" - punycode "^1.4.1" - -trim-newlines@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/trim-newlines/download/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" - integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= - -trim-right@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/trim-right/download/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= - -tslib@^1.9.0: - version "1.9.3" - resolved "http://registry.npm.taobao.org/tslib/download/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" - integrity sha1-1+TdeSRdhUKMTX5IIqeZF5VMooY= - -tty-browserify@0.0.0: - version "0.0.0" - resolved "http://registry.npm.taobao.org/tty-browserify/download/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "http://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -type-is@^1.6.16: - version "1.6.16" - resolved "http://registry.npm.taobao.org/type-is/download/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" - integrity sha1-+JzjQVQcZysl7nrjxz3uOyvlAZQ= - dependencies: - media-typer "0.3.0" - mime-types "~2.1.18" - -typedarray@^0.0.6: - version "0.0.6" - resolved "http://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -uc.micro@^1.0.1, uc.micro@^1.0.5: - version "1.0.5" - resolved "http://registry.npm.taobao.org/uc.micro/download/uc.micro-1.0.5.tgz#0c65f15f815aa08b560a61ce8b4db7ffc3f45376" - integrity sha1-DGXxX4FaoItWCmHOi023/8P0U3Y= - -uglify-js@3.4.x: - version "3.4.9" - resolved "http://registry.npm.taobao.org/uglify-js/download/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3" - integrity sha1-rwLxgMEgfXZDLkc+0koo9KeCuuM= - dependencies: - commander "~2.17.1" - source-map "~0.6.1" - -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "http://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha1-JhmADEyCWADv3YNDr33Zkzy+KBg= - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "http://registry.npm.taobao.org/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha1-jtKjJWmWG86SJ9Cc0/+7j+1fAgw= - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.0.2: - version "1.0.2" - resolved "http://registry.npm.taobao.org/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-1.0.2.tgz#9f1dc76926d6ccf452310564fd834ace059663d4" - integrity sha1-nx3HaSbWzPRSMQVk/YNKzgWWY9Q= - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.0.4" - resolved "http://registry.npm.taobao.org/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-1.0.4.tgz#5a533f31b4317ea76f17d807fa0d116546111dd0" - integrity sha1-WlM/MbQxfqdvF9gH+g0RZUYRHdA= - -union-value@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/union-value/download/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" - integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^0.4.3" - -uniq@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/uniq/download/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= - -uniqs@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/uniqs/download/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= - -unique-filename@^1.1.0: - version "1.1.1" - resolved "http://registry.npm.taobao.org/unique-filename/download/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA= - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.1" - resolved "http://registry.npm.taobao.org/unique-slug/download/unique-slug-2.0.1.tgz#5e9edc6d1ce8fb264db18a507ef9bd8544451ca6" - integrity sha1-Xp7cbRzo+yZNsYpQfvm9hURFHKY= - dependencies: - imurmurhash "^0.1.4" - -unique-string@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/unique-string/download/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= - dependencies: - crypto-random-string "^1.0.0" - -universalify@^0.1.0: - version "0.1.2" - resolved "http://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY= - -unset-value@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -unzip-response@^2.0.1: - version "2.0.1" - resolved "http://registry.npm.taobao.org/unzip-response/download/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" - integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= - -upath@^1.0.5: - version "1.1.0" - resolved "http://registry.npm.taobao.org/upath/download/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" - integrity sha1-NSVll+RqWB20eT0M5H+prr/J+r0= - -update-notifier@^2.3.0: - version "2.5.0" - resolved "http://registry.npm.taobao.org/update-notifier/download/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" - integrity sha1-0HRFk+E/Fh5AassdlAi3LK0Ir/Y= - dependencies: - boxen "^1.2.1" - chalk "^2.0.1" - configstore "^3.0.0" - import-lazy "^2.1.0" - is-ci "^1.0.10" - is-installed-globally "^0.1.0" - is-npm "^1.0.0" - latest-version "^3.0.0" - semver-diff "^2.0.0" - xdg-basedir "^3.0.0" - -upper-case@^1.1.1: - version "1.1.3" - resolved "http://registry.npm.taobao.org/upper-case/download/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= - -uri-js@^4.2.2: - version "4.2.2" - resolved "http://registry.npm.taobao.org/uri-js/download/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha1-lMVA4f93KVbiKZUHwBCupsiDjrA= - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "http://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -url-join@3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/url-join/download/url-join-3.0.0.tgz#26e8113ace195ea30d0fc38186e45400f9cea672" - integrity sha1-JugROs4ZXqMND8OBhuRUAPnOpnI= - -url-loader@^1.0.1: - version "1.1.2" - resolved "http://registry.npm.taobao.org/url-loader/download/url-loader-1.1.2.tgz#b971d191b83af693c5e3fea4064be9e1f2d7f8d8" - integrity sha1-uXHRkbg69pPF4/6kBkvp4fLX+Ng= - dependencies: - loader-utils "^1.1.0" - mime "^2.0.3" - schema-utils "^1.0.0" - -url-parse-lax@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/url-parse-lax/download/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= - dependencies: - prepend-http "^1.0.1" - -url@^0.11.0: - version "0.11.0" - resolved "http://registry.npm.taobao.org/url/download/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use@^3.1.0: - version "3.1.1" - resolved "http://registry.npm.taobao.org/use/download/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8= - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -util.promisify@1.0.0, util.promisify@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - integrity sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA= - dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" - -util@0.10.3: - version "0.10.3" - resolved "http://registry.npm.taobao.org/util/download/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= - dependencies: - inherits "2.0.1" - -util@^0.10.3: - version "0.10.4" - resolved "http://registry.npm.taobao.org/util/download/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" - integrity sha1-OqASW/5mikZy3liFfTrOJ+y3aQE= - dependencies: - inherits "2.0.3" - -utila@^0.4.0, utila@~0.4: - version "0.4.0" - resolved "http://registry.npm.taobao.org/utila/download/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= - -uuid@^3.1.0, uuid@^3.3.2: - version "3.3.2" - resolved "http://registry.npm.taobao.org/uuid/download/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" - integrity sha1-G0r0lV6zB3xQHCOHL8ZROBFYcTE= - -v8-compile-cache@^2.0.0: - version "2.0.2" - resolved "http://registry.npm.taobao.org/v8-compile-cache/download/v8-compile-cache-2.0.2.tgz#a428b28bb26790734c4fc8bc9fa106fccebf6a6c" - integrity sha1-pCiyi7JnkHNMT8i8n6EG/M6/amw= - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "http://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha1-/JH2uce6FchX9MssXe/uw51PQQo= - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -vary@^1.1.2: - version "1.1.2" - resolved "http://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= - -vendors@^1.0.0: - version "1.0.2" - resolved "http://registry.npm.taobao.org/vendors/download/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801" - integrity sha1-f8te759WI7FWvOqJ7DfWNnbyGAE= - -verror@1.10.0: - version "1.10.0" - resolved "http://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vm-browserify@0.0.4: - version "0.0.4" - resolved "http://registry.npm.taobao.org/vm-browserify/download/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" - integrity sha1-XX6kW7755Kb/ZflUOOCofDV9WnM= - dependencies: - indexof "0.0.1" - -vue-hot-reload-api@^2.3.0: - version "2.3.1" - resolved "http://registry.npm.taobao.org/vue-hot-reload-api/download/vue-hot-reload-api-2.3.1.tgz#b2d3d95402a811602380783ea4f566eb875569a2" - integrity sha1-stPZVAKoEWAjgHg+pPVm64dVaaI= - -vue-loader@^15.2.4: - version "15.4.2" - resolved "http://registry.npm.taobao.org/vue-loader/download/vue-loader-15.4.2.tgz#812bb26e447dd3b84c485eb634190d914ce125e2" - integrity sha1-gSuybkR907hMSF62NBkNkUzhJeI= - dependencies: - "@vue/component-compiler-utils" "^2.0.0" - hash-sum "^1.0.2" - loader-utils "^1.1.0" - vue-hot-reload-api "^2.3.0" - vue-style-loader "^4.1.0" - -vue-router@^3.0.1: - version "3.0.2" - resolved "http://registry.npm.taobao.org/vue-router/download/vue-router-3.0.2.tgz#dedc67afe6c4e2bc25682c8b1c2a8c0d7c7e56be" - integrity sha1-3txnr+bE4rwlaCyLHCqMDXx+Vr4= - -vue-server-renderer@^2.5.16: - version "2.5.21" - resolved "http://registry.npm.taobao.org/vue-server-renderer/download/vue-server-renderer-2.5.21.tgz#7c2b611d2e8558359cdb84dcd3080845c07121b4" - integrity sha1-fCthHS6FWDWc24Tc0wgIRcBxIbQ= - dependencies: - chalk "^1.1.3" - hash-sum "^1.0.2" - he "^1.1.0" - lodash.template "^4.4.0" - lodash.uniq "^4.5.0" - resolve "^1.2.0" - serialize-javascript "^1.3.0" - source-map "0.5.6" - -vue-style-loader@^4.1.0: - version "4.1.2" - resolved "http://registry.npm.taobao.org/vue-style-loader/download/vue-style-loader-4.1.2.tgz#dedf349806f25ceb4e64f3ad7c0a44fba735fcf8" - integrity sha1-3t80mAbyXOtOZPOtfApE+6c1/Pg= - dependencies: - hash-sum "^1.0.2" - loader-utils "^1.0.2" - -vue-template-compiler@^2.5.16: - version "2.5.21" - resolved "http://registry.npm.taobao.org/vue-template-compiler/download/vue-template-compiler-2.5.21.tgz#a57ceb903177e8f643560a8d639a0f8db647054a" - integrity sha1-pXzrkDF36PZDVgqNY5oPjbZHBUo= - dependencies: - de-indent "^1.0.2" - he "^1.1.0" - -vue-template-es2015-compiler@^1.6.0: - version "1.6.0" - resolved "http://registry.npm.taobao.org/vue-template-es2015-compiler/download/vue-template-es2015-compiler-1.6.0.tgz#dc42697133302ce3017524356a6c61b7b69b4a18" - integrity sha1-3EJpcTMwLOMBdSQ1amxht7abShg= - -vue@^2.5.16: - version "2.5.21" - resolved "http://registry.npm.taobao.org/vue/download/vue-2.5.21.tgz#3d33dcd03bb813912ce894a8303ab553699c4a85" - integrity sha1-PTPc0Du4E5Es6JSoMDq1U2mcSoU= - -vuepress-html-webpack-plugin@^3.2.0: - version "3.2.0" - resolved "http://registry.npm.taobao.org/vuepress-html-webpack-plugin/download/vuepress-html-webpack-plugin-3.2.0.tgz#219be272ad510faa8750d2d4e70fd028bfd1c16e" - integrity sha1-IZvicq1RD6qHUNLU5w/QKL/RwW4= - dependencies: - html-minifier "^3.2.3" - loader-utils "^0.2.16" - lodash "^4.17.3" - pretty-error "^2.0.2" - tapable "^1.0.0" - toposort "^1.0.0" - util.promisify "1.0.0" - -vuepress@^0.14.8: - version "0.14.8" - resolved "http://registry.npm.taobao.org/vuepress/download/vuepress-0.14.8.tgz#1e0a70a64c19e82e365eb7313b1ec88cc4ad7ab3" - integrity sha1-HgpwpkwZ6C42XrcxOx7IjMSterM= - dependencies: - "@babel/core" "7.0.0-beta.47" - "@vue/babel-preset-app" "3.0.0-beta.11" - autoprefixer "^8.2.0" - babel-loader "8.0.0-beta.3" - cache-loader "^1.2.2" - chalk "^2.3.2" - chokidar "^2.0.3" - commander "^2.15.1" - connect-history-api-fallback "^1.5.0" - copy-webpack-plugin "^4.5.1" - cross-spawn "^6.0.5" - css-loader "^0.28.11" - diacritics "^1.3.0" - docsearch.js "^2.5.2" - escape-html "^1.0.3" - file-loader "^1.1.11" - fs-extra "^5.0.0" - globby "^8.0.1" - gray-matter "^4.0.1" - js-yaml "^3.11.0" - koa-connect "^2.0.1" - koa-mount "^3.0.0" - koa-range "^0.3.0" - koa-static "^4.0.2" - loader-utils "^1.1.0" - lodash.throttle "^4.1.1" - lru-cache "^4.1.2" - markdown-it "^8.4.1" - markdown-it-anchor "^5.0.2" - markdown-it-container "^2.0.0" - markdown-it-emoji "^1.4.0" - markdown-it-table-of-contents "^0.4.0" - mini-css-extract-plugin "0.4.1" - nprogress "^0.2.0" - optimize-css-assets-webpack-plugin "^4.0.0" - portfinder "^1.0.13" - postcss-loader "^2.1.5" - prismjs "^1.13.0" - register-service-worker "^1.5.1" - semver "^5.5.0" - stylus "^0.54.5" - stylus-loader "^3.0.2" - toml "^2.3.3" - url-loader "^1.0.1" - vue "^2.5.16" - vue-loader "^15.2.4" - vue-router "^3.0.1" - vue-server-renderer "^2.5.16" - vue-template-compiler "^2.5.16" - vuepress-html-webpack-plugin "^3.2.0" - webpack "^4.8.1" - webpack-chain "^4.6.0" - webpack-merge "^4.1.2" - webpack-serve "^1.0.2" - webpackbar "^2.6.1" - workbox-build "^3.1.0" - -watchpack@^1.5.0: - version "1.6.0" - resolved "http://registry.npm.taobao.org/watchpack/download/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" - integrity sha1-S8EsLr6KonenHx0/FNaFx7RGzQA= - dependencies: - chokidar "^2.0.2" - graceful-fs "^4.1.2" - neo-async "^2.5.0" - -webpack-chain@^4.6.0: - version "4.12.1" - resolved "http://registry.npm.taobao.org/webpack-chain/download/webpack-chain-4.12.1.tgz#6c8439bbb2ab550952d60e1ea9319141906c02a6" - integrity sha1-bIQ5u7KrVQlS1g4eqTGRQZBsAqY= - dependencies: - deepmerge "^1.5.2" - javascript-stringify "^1.6.0" - -webpack-dev-middleware@^3.0.0: - version "3.4.0" - resolved "http://registry.npm.taobao.org/webpack-dev-middleware/download/webpack-dev-middleware-3.4.0.tgz#1132fecc9026fd90f0ecedac5cbff75d1fb45890" - integrity sha1-ETL+zJAm/ZDw7O2sXL/3XR+0WJA= - dependencies: - memory-fs "~0.4.1" - mime "^2.3.1" - range-parser "^1.0.3" - webpack-log "^2.0.0" - -webpack-hot-client@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/webpack-hot-client/download/webpack-hot-client-3.0.0.tgz#b714f257a264001275bc1491741685779cde12f2" - integrity sha1-txTyV6JkABJ1vBSRdBaFd5zeEvI= - dependencies: - json-stringify-safe "^5.0.1" - loglevelnext "^1.0.2" - strip-ansi "^4.0.0" - uuid "^3.1.0" - webpack-log "^1.1.1" - ws "^4.0.0" - -webpack-log@^1.1.1, webpack-log@^1.1.2: - version "1.2.0" - resolved "http://registry.npm.taobao.org/webpack-log/download/webpack-log-1.2.0.tgz#a4b34cda6b22b518dbb0ab32e567962d5c72a43d" - integrity sha1-pLNM2msitRjbsKsy5WeWLVxypD0= - dependencies: - chalk "^2.1.0" - log-symbols "^2.1.0" - loglevelnext "^1.0.1" - uuid "^3.1.0" - -webpack-log@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/webpack-log/download/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" - integrity sha1-W3ko4GN1k/EZ0y9iJ8HgrDHhtH8= - dependencies: - ansi-colors "^3.0.0" - uuid "^3.3.2" - -webpack-merge@^4.1.2: - version "4.1.5" - resolved "http://registry.npm.taobao.org/webpack-merge/download/webpack-merge-4.1.5.tgz#2be31e846c20767d1bef56bdca64c328a681190a" - integrity sha1-K+MehGwgdn0b71a9ymTDKKaBGQo= - dependencies: - lodash "^4.17.5" - -webpack-serve@^1.0.2: - version "1.0.4" - resolved "http://registry.npm.taobao.org/webpack-serve/download/webpack-serve-1.0.4.tgz#d1c83955926969ba195e5032f978da92ef07829c" - integrity sha1-0cg5VZJpaboZXlAy+Xjaku8Hgpw= - dependencies: - "@shellscape/koa-static" "^4.0.4" - "@webpack-contrib/config-loader" "^1.1.1" - chalk "^2.3.0" - clipboardy "^1.2.2" - cosmiconfig "^5.0.2" - debug "^3.1.0" - find-up "^2.1.0" - get-port "^3.2.0" - import-local "^1.0.0" - killable "^1.0.0" - koa "^2.4.1" - koa-webpack "^4.0.0" - lodash "^4.17.5" - loud-rejection "^1.6.0" - meow "^5.0.0" - nanobus "^4.3.1" - opn "^5.1.0" - resolve "^1.6.0" - time-fix-plugin "^2.0.0" - update-notifier "^2.3.0" - url-join "3.0.0" - v8-compile-cache "^2.0.0" - webpack-hot-client "^3.0.0" - webpack-log "^1.1.2" - -webpack-sources@^1.1.0, webpack-sources@^1.3.0: - version "1.3.0" - resolved "http://registry.npm.taobao.org/webpack-sources/download/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85" - integrity sha1-KijcufH0X+lg2PFJMlK17mUw+oU= - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack@^4.8.1: - version "4.27.1" - resolved "http://registry.npm.taobao.org/webpack/download/webpack-4.27.1.tgz#5f2e2db446d2266376fa15d7d2277a1a9c2e12bb" - integrity sha1-Xy4ttEbSJmN2+hXX0id6GpwuErs= - dependencies: - "@webassemblyjs/ast" "1.7.11" - "@webassemblyjs/helper-module-context" "1.7.11" - "@webassemblyjs/wasm-edit" "1.7.11" - "@webassemblyjs/wasm-parser" "1.7.11" - acorn "^5.6.2" - acorn-dynamic-import "^3.0.0" - ajv "^6.1.0" - ajv-keywords "^3.1.0" - chrome-trace-event "^1.0.0" - enhanced-resolve "^4.1.0" - eslint-scope "^4.0.0" - json-parse-better-errors "^1.0.2" - loader-runner "^2.3.0" - loader-utils "^1.1.0" - memory-fs "~0.4.1" - micromatch "^3.1.8" - mkdirp "~0.5.0" - neo-async "^2.5.0" - node-libs-browser "^2.0.0" - schema-utils "^0.4.4" - tapable "^1.1.0" - terser-webpack-plugin "^1.1.0" - watchpack "^1.5.0" - webpack-sources "^1.3.0" - -webpackbar@^2.6.1: - version "2.6.4" - resolved "http://registry.npm.taobao.org/webpackbar/download/webpackbar-2.6.4.tgz#9118dde6b8f513a2d50ce630952157bca9218c6f" - integrity sha1-kRjd5rj1E6LVDOYwlSFXvKkhjG8= - dependencies: - chalk "^2.4.1" - consola "^1.4.3" - figures "^2.0.0" - loader-utils "^1.1.0" - lodash "^4.17.10" - log-update "^2.3.0" - pretty-time "^1.1.0" - schema-utils "^1.0.0" - std-env "^1.3.1" - table "^4.0.3" - -when@~3.6.x: - version "3.6.4" - resolved "http://registry.npm.taobao.org/when/download/when-3.6.4.tgz#473b517ec159e2b85005497a13983f095412e34e" - integrity sha1-RztRfsFZ4rhQBUl6E5g/CVQS404= - -whet.extend@~0.9.9: - version "0.9.9" - resolved "http://registry.npm.taobao.org/whet.extend/download/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" - integrity sha1-+HfVv2SMl+WqVC+twW1qJZucEaE= - -which@^1.2.9: - version "1.3.1" - resolved "http://registry.npm.taobao.org/which/download/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo= - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.0: - version "1.1.3" - resolved "http://registry.npm.taobao.org/wide-align/download/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha1-rgdOa9wMFKQx6ATmJFScYzsABFc= - dependencies: - string-width "^1.0.2 || 2" - -widest-line@^2.0.0: - version "2.0.1" - resolved "http://registry.npm.taobao.org/widest-line/download/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" - integrity sha1-dDh2RzDsfvQ4HOTfgvuYpTFCo/w= - dependencies: - string-width "^2.1.1" - -workbox-background-sync@^3.6.3: - version "3.6.3" - resolved "http://registry.npm.taobao.org/workbox-background-sync/download/workbox-background-sync-3.6.3.tgz#6609a0fac9eda336a7c52e6aa227ba2ae532ad94" - integrity sha1-Zgmg+sntozanxS5qoie6KuUyrZQ= - dependencies: - workbox-core "^3.6.3" - -workbox-broadcast-cache-update@^3.6.3: - version "3.6.3" - resolved "http://registry.npm.taobao.org/workbox-broadcast-cache-update/download/workbox-broadcast-cache-update-3.6.3.tgz#3f5dff22ada8c93e397fb38c1dc100606a7b92da" - integrity sha1-P13/Iq2oyT45f7OMHcEAYGp7kto= - dependencies: - workbox-core "^3.6.3" - -workbox-build@^3.1.0: - version "3.6.3" - resolved "http://registry.npm.taobao.org/workbox-build/download/workbox-build-3.6.3.tgz#77110f9f52dc5d82fa6c1c384c6f5e2225adcbd8" - integrity sha1-dxEPn1LcXYL6bBw4TG9eIiWty9g= - dependencies: - babel-runtime "^6.26.0" - common-tags "^1.4.0" - fs-extra "^4.0.2" - glob "^7.1.2" - joi "^11.1.1" - lodash.template "^4.4.0" - pretty-bytes "^4.0.2" - stringify-object "^3.2.2" - strip-comments "^1.0.2" - workbox-background-sync "^3.6.3" - workbox-broadcast-cache-update "^3.6.3" - workbox-cache-expiration "^3.6.3" - workbox-cacheable-response "^3.6.3" - workbox-core "^3.6.3" - workbox-google-analytics "^3.6.3" - workbox-navigation-preload "^3.6.3" - workbox-precaching "^3.6.3" - workbox-range-requests "^3.6.3" - workbox-routing "^3.6.3" - workbox-strategies "^3.6.3" - workbox-streams "^3.6.3" - workbox-sw "^3.6.3" - -workbox-cache-expiration@^3.6.3: - version "3.6.3" - resolved "http://registry.npm.taobao.org/workbox-cache-expiration/download/workbox-cache-expiration-3.6.3.tgz#4819697254a72098a13f94b594325a28a1e90372" - integrity sha1-SBlpclSnIJihP5S1lDJaKKHpA3I= - dependencies: - workbox-core "^3.6.3" - -workbox-cacheable-response@^3.6.3: - version "3.6.3" - resolved "http://registry.npm.taobao.org/workbox-cacheable-response/download/workbox-cacheable-response-3.6.3.tgz#869f1a68fce9063f6869ddbf7fa0a2e0a868b3aa" - integrity sha1-hp8aaPzpBj9oad2/f6Ci4Khos6o= - dependencies: - workbox-core "^3.6.3" - -workbox-core@^3.6.3: - version "3.6.3" - resolved "http://registry.npm.taobao.org/workbox-core/download/workbox-core-3.6.3.tgz#69abba70a4f3f2a5c059295a6f3b7c62bd00e15c" - integrity sha1-aau6cKTz8qXAWSlabzt8Yr0A4Vw= - -workbox-google-analytics@^3.6.3: - version "3.6.3" - resolved "http://registry.npm.taobao.org/workbox-google-analytics/download/workbox-google-analytics-3.6.3.tgz#99df2a3d70d6e91961e18a6752bac12e91fbf727" - integrity sha1-md8qPXDW6Rlh4YpnUrrBLpH79yc= - dependencies: - workbox-background-sync "^3.6.3" - workbox-core "^3.6.3" - workbox-routing "^3.6.3" - workbox-strategies "^3.6.3" - -workbox-navigation-preload@^3.6.3: - version "3.6.3" - resolved "http://registry.npm.taobao.org/workbox-navigation-preload/download/workbox-navigation-preload-3.6.3.tgz#a2c34eb7c17e7485b795125091215f757b3c4964" - integrity sha1-osNOt8F+dIW3lRJQkSFfdXs8SWQ= - dependencies: - workbox-core "^3.6.3" - -workbox-precaching@^3.6.3: - version "3.6.3" - resolved "http://registry.npm.taobao.org/workbox-precaching/download/workbox-precaching-3.6.3.tgz#5341515e9d5872c58ede026a31e19bafafa4e1c1" - integrity sha1-U0FRXp1YcsWO3gJqMeGbr6+k4cE= - dependencies: - workbox-core "^3.6.3" - -workbox-range-requests@^3.6.3: - version "3.6.3" - resolved "http://registry.npm.taobao.org/workbox-range-requests/download/workbox-range-requests-3.6.3.tgz#3cc21cba31f2dd8c43c52a196bcc8f6cdbcde803" - integrity sha1-PMIcujHy3YxDxSoZa8yPbNvN6AM= - dependencies: - workbox-core "^3.6.3" - -workbox-routing@^3.6.3: - version "3.6.3" - resolved "http://registry.npm.taobao.org/workbox-routing/download/workbox-routing-3.6.3.tgz#659cd8f9274986cfa98fda0d050de6422075acf7" - integrity sha1-ZZzY+SdJhs+pj9oNBQ3mQiB1rPc= - dependencies: - workbox-core "^3.6.3" - -workbox-strategies@^3.6.3: - version "3.6.3" - resolved "http://registry.npm.taobao.org/workbox-strategies/download/workbox-strategies-3.6.3.tgz#11a0dc249a7bc23d3465ec1322d28fa6643d64a0" - integrity sha1-EaDcJJp7wj00ZewTItKPpmQ9ZKA= - dependencies: - workbox-core "^3.6.3" - -workbox-streams@^3.6.3: - version "3.6.3" - resolved "http://registry.npm.taobao.org/workbox-streams/download/workbox-streams-3.6.3.tgz#beaea5d5b230239836cc327b07d471aa6101955a" - integrity sha1-vq6l1bIwI5g2zDJ7B9RxqmEBlVo= - dependencies: - workbox-core "^3.6.3" - -workbox-sw@^3.6.3: - version "3.6.3" - resolved "http://registry.npm.taobao.org/workbox-sw/download/workbox-sw-3.6.3.tgz#278ea4c1831b92bbe2d420da8399176c4b2789ff" - integrity sha1-J46kwYMbkrvi1CDag5kXbEsnif8= - -worker-farm@^1.5.2: - version "1.6.0" - resolved "http://registry.npm.taobao.org/worker-farm/download/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" - integrity sha1-rsxAWXb6talVJhgIRvDboojzpKA= - dependencies: - errno "~0.1.7" - -wrap-ansi@^3.0.1: - version "3.0.1" - resolved "http://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" - integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - -wrappy@1: - version "1.0.2" - resolved "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@^2.0.0: - version "2.3.0" - resolved "http://registry.npm.taobao.org/write-file-atomic/download/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" - integrity sha1-H/YVdcLipOjlENb6TiQ8zhg5mas= - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -ws@^4.0.0: - version "4.1.0" - resolved "http://registry.npm.taobao.org/ws/download/ws-4.1.0.tgz#a979b5d7d4da68bf54efe0408967c324869a7289" - integrity sha1-qXm119TaaL9U7+BAiWfDJIaacok= - dependencies: - async-limiter "~1.0.0" - safe-buffer "~5.1.0" - -xdg-basedir@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/xdg-basedir/download/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" - integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= - -xtend@^4.0.0, xtend@~4.0.1: - version "4.0.1" - resolved "http://registry.npm.taobao.org/xtend/download/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= - -y18n@^4.0.0: - version "4.0.0" - resolved "http://registry.npm.taobao.org/y18n/download/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha1-le+U+F7MgdAHwmThkKEg8KPIVms= - -yallist@^2.1.2: - version "2.1.2" - resolved "http://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - -yallist@^3.0.0, yallist@^3.0.2: - version "3.0.3" - resolved "http://registry.npm.taobao.org/yallist/download/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" - integrity sha1-tLBJ4xS+VF486AIjbWzSLNkcPek= - -yargs-parser@^10.0.0: - version "10.1.0" - resolved "http://registry.npm.taobao.org/yargs-parser/download/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" - integrity sha1-cgImW4n36eny5XZeD+c1qQXtuqg= - dependencies: - camelcase "^4.1.0" - -ylru@^1.2.0: - version "1.2.1" - resolved "http://registry.npm.taobao.org/ylru/download/ylru-1.2.1.tgz#f576b63341547989c1de7ba288760923b27fe84f" - integrity sha1-9Xa2M0FUeYnB3nuiiHYJI7J/6E8= - -zepto@^1.2.0: - version "1.2.0" - resolved "http://registry.npm.taobao.org/zepto/download/zepto-1.2.0.tgz#e127bd9e66fd846be5eab48c1394882f7c0e4f98" - integrity sha1-4Se9nmb9hGvl6rSME5SIL3wOT5g=