├── .eslintrc.json
├── .gitignore
├── static
├── less
│ └── style.less
├── templates
│ ├── partials
│ │ └── sso-qq
│ │ │ ├── email.tpl
│ │ │ └── deauth.tpl
│ └── admin
│ │ └── plugins
│ │ └── sso-qq.tpl
└── lib
│ └── admin.js
├── .editorconfig
├── README.md
├── package.json
├── plugin.json
├── .npmignore
├── library.js
└── yarn.lock
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "standard"
3 | }
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .DS_Store
3 | .idea/
4 |
--------------------------------------------------------------------------------
/static/less/style.less:
--------------------------------------------------------------------------------
1 | .qq-token i{
2 | color:#03A9F4;
3 | }
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # 4 space indentation
2 | [*.js]
3 | indent_style = space
4 | indent_size = 2
--------------------------------------------------------------------------------
/static/templates/partials/sso-qq/email.tpl:
--------------------------------------------------------------------------------
1 |
2 | 社区管理员要求您必须完善 Email 地址。
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # NodeBB-插件 QQ登入
2 |
3 | 可以让你通过 QQ账户 登陆/注册 的NodeBB插件
4 |
5 | -----
6 | > ~~`1.4.x` 我们将会加入QQ头像的选择。(类似Gravatar)~~
7 | > `2.x.x` ~~我们加入QQ头像, 允许解绑操作。~~
8 | > `3.x.x` 我们将加入注册表单(我们不再直接新建用户,用户可以选择登录以绑定或者填写信息注册新用户)
9 |
10 |
11 | ## 安装
12 | ```
13 | npm install nodebb-plugin-sso-qq-fix
14 | ```
15 | 请在后台中配置您的QQ互联 ID 和 Key.
16 | > 请把在后台中显示的 Callback URL 填写在QQ互联中。
17 |
18 | ----
19 | > 该插件参考了:
20 | > `nodebb-plugin-sso-gihtub`
21 | > `nodebb-plugin-sso-qq`
22 | > `nodebb-plugin-sso-qq-new`
23 | > `nodebb-plugin-sso-twitter`
--------------------------------------------------------------------------------
/static/templates/partials/sso-qq/deauth.tpl:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
[[user:sso.dissociate-confirm-title]]
5 |
6 |
7 | [[user:sso.dissociate-confirm, {service}]]
8 |
9 |
10 |
11 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/static/lib/admin.js:
--------------------------------------------------------------------------------
1 | define('admin/plugins/sso-qq', ['settings'], function(Settings) {
2 | 'use strict';
3 | /* globals $, app, socket, require */
4 |
5 | var ACP = {};
6 |
7 | ACP.init = function() {
8 | Settings.load('sso-qq', $('.sso-qq-settings'));
9 |
10 | $('#save').on('click', function() {
11 | Settings.save('sso-qq', $('.sso-qq-settings'), function() {
12 | app.alert({
13 | type: 'success',
14 | alert_id: 'sso-qq-saved',
15 | title: '配置已保存',
16 | message: '请重载NodeBB以便使插件生效。',
17 | clickfn: function() {
18 | socket.emit('admin.reload');
19 | }
20 | });
21 | });
22 | });
23 | };
24 |
25 | return ACP;
26 | });
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "nodebb-plugin-sso-qq-fix",
3 | "version": "2.3.11",
4 | "description": "NodeBB Plugin that allows users to login/register via their QQ account.",
5 | "main": "library.js",
6 | "repository": {
7 | "type": "git",
8 | "url": "https://github.com/NodeBB-China/nodebb-plugin-sso-qq-fix"
9 | },
10 | "keywords": [
11 | "nodebb",
12 | "plugin",
13 | "qq",
14 | "sso",
15 | "single sign on",
16 | "registration"
17 | ],
18 | "author": {
19 | "name": "A632079",
20 | "email": "a632079@gmail.com"
21 | },
22 | "contributors": [
23 | {
24 | "name": "A632079",
25 | "email": "a632079@gmail.com",
26 | "url": "https://github.com/NodeBB-China/nodebb-plugin-sso-qq-fix"
27 | }
28 | ],
29 | "license": "BSD-2-Clause",
30 | "readme": "",
31 | "readmeFilename": "README.md",
32 | "bugs": {
33 | "url": "https://github.com/NodeBB-China/nodebb-plugin-sso-qq-fix/issues"
34 | },
35 | "dependencies": {
36 | "passport-qq2015-fix": "2.0.1"
37 | },
38 | "nbbpm": {
39 | "compatibility": "^1.11.0"
40 | },
41 | "devDependencies": {
42 | "eslint": "*",
43 | "eslint-config-standard": "^10.2.1",
44 | "eslint-plugin-import": "^2.8.0",
45 | "eslint-plugin-node": "^5.2.1",
46 | "eslint-plugin-promise": "^3.6.0",
47 | "eslint-plugin-standard": "^3.0.1"
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/plugin.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "nodebb-plugin-sso-qq-fix",
3 | "name": "NodeBB QQ SSO",
4 | "description": "NodeBB Plugin that allows users to login/register via their QQ account.",
5 | "url": "https://github.com/NodeBB-China/nodebb-plugin-sso-qq-fix",
6 | "library": "./library.js",
7 | "hooks": [
8 | {
9 | "hook": "static:app.load",
10 | "method": "init"
11 | },
12 | {
13 | "hook": "filter:auth.init",
14 | "method": "getStrategy"
15 | },
16 | {
17 | "hook": "static:user.delete",
18 | "method": "deleteUserData"
19 | },
20 | {
21 | "hook": "filter:auth.list",
22 | "method": "getAssociation"
23 | },
24 | {
25 | "hook": "filter:admin.header.build",
26 | "method": "addMenuItem"
27 | },
28 | {
29 | "hook": "filter:user.listPictures",
30 | "method": "list"
31 | },
32 | {
33 | "hook": "filter:user.getPicture",
34 | "method": "get"
35 | },
36 | {
37 | "hook": "filter:register.interstitial",
38 | "method": "prepareInterstitial"
39 | },
40 | {
41 | "hook": "filter:user.whitelistFields",
42 | "method": "appendUserHashWhitelist"
43 | }
44 | ],
45 | "staticDirs": {
46 | "static": "./static"
47 | },
48 | "templates": "static/templates",
49 | "less": [
50 | "static/less/style.less"
51 | ],
52 | "acpScripts": [
53 | "static/lib/admin.js"
54 | ]
55 | }
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | #################
2 | ## Eclipse
3 | #################
4 |
5 | *.pydevproject
6 | .project
7 | .metadata
8 | bin/
9 | tmp/
10 | *.tmp
11 | *.bak
12 | *.swp
13 | *~.nib
14 | local.properties
15 | .classpath
16 | .settings/
17 | .loadpath
18 |
19 | # External tool builders
20 | .externalToolBuilders/
21 |
22 | # Locally stored "Eclipse launch configurations"
23 | *.launch
24 |
25 | # CDT-specific
26 | .cproject
27 |
28 | # PDT-specific
29 | .buildpath
30 |
31 |
32 | #################
33 | ## Visual Studio
34 | #################
35 |
36 | ## Ignore Visual Studio temporary files, build results, and
37 | ## files generated by popular Visual Studio add-ons.
38 |
39 | # User-specific files
40 | *.suo
41 | *.user
42 | *.sln.docstates
43 |
44 | # Build results
45 |
46 | [Dd]ebug/
47 | [Rr]elease/
48 | x64/
49 | build/
50 | [Bb]in/
51 | [Oo]bj/
52 |
53 | # MSTest test Results
54 | [Tt]est[Rr]esult*/
55 | [Bb]uild[Ll]og.*
56 |
57 | *_i.c
58 | *_p.c
59 | *.ilk
60 | *.meta
61 | *.obj
62 | *.pch
63 | *.pdb
64 | *.pgc
65 | *.pgd
66 | *.rsp
67 | *.sbr
68 | *.tlb
69 | *.tli
70 | *.tlh
71 | *.tmp
72 | *.tmp_proj
73 | *.log
74 | *.vspscc
75 | *.vssscc
76 | .builds
77 | *.pidb
78 | *.log
79 | *.scc
80 |
81 | # Visual C++ cache files
82 | ipch/
83 | *.aps
84 | *.ncb
85 | *.opensdf
86 | *.sdf
87 | *.cachefile
88 |
89 | # Visual Studio profiler
90 | *.psess
91 | *.vsp
92 | *.vspx
93 |
94 | # Guidance Automation Toolkit
95 | *.gpState
96 |
97 | # ReSharper is a .NET coding add-in
98 | _ReSharper*/
99 | *.[Rr]e[Ss]harper
100 |
101 | # TeamCity is a build add-in
102 | _TeamCity*
103 |
104 | # DotCover is a Code Coverage Tool
105 | *.dotCover
106 |
107 | # NCrunch
108 | *.ncrunch*
109 | .*crunch*.local.xml
110 |
111 | # Installshield output folder
112 | [Ee]xpress/
113 |
114 | # DocProject is a documentation generator add-in
115 | DocProject/buildhelp/
116 | DocProject/Help/*.HxT
117 | DocProject/Help/*.HxC
118 | DocProject/Help/*.hhc
119 | DocProject/Help/*.hhk
120 | DocProject/Help/*.hhp
121 | DocProject/Help/Html2
122 | DocProject/Help/html
123 |
124 | # Click-Once directory
125 | publish/
126 |
127 | # Publish Web Output
128 | *.Publish.xml
129 | *.pubxml
130 |
131 | # NuGet Packages Directory
132 | ## TODO: If you have NuGet Package Restore enabled, uncomment the next line
133 | #packages/
134 |
135 | # Windows Azure Build Output
136 | csx
137 | *.build.csdef
138 |
139 | # Windows Store app package directory
140 | AppPackages/
141 |
142 | # Others
143 | sql/
144 | *.Cache
145 | ClientBin/
146 | [Ss]tyle[Cc]op.*
147 | ~$*
148 | *~
149 | *.dbmdl
150 | *.[Pp]ublish.xml
151 | *.pfx
152 | *.publishsettings
153 |
154 | # RIA/Silverlight projects
155 | Generated_Code/
156 |
157 | # Backup & report files from converting an old project file to a newer
158 | # Visual Studio version. Backup files are not needed, because we have git ;-)
159 | _UpgradeReport_Files/
160 | Backup*/
161 | UpgradeLog*.XML
162 | UpgradeLog*.htm
163 |
164 | # SQL Server files
165 | App_Data/*.mdf
166 | App_Data/*.ldf
167 |
168 | #############
169 | ## Windows detritus
170 | #############
171 |
172 | # Windows image file caches
173 | Thumbs.db
174 | ehthumbs.db
175 |
176 | # Folder config file
177 | Desktop.ini
178 |
179 | # Recycle Bin used on file shares
180 | $RECYCLE.BIN/
181 |
182 | # Mac crap
183 | .DS_Store
184 |
185 |
186 | #############
187 | ## Python
188 | #############
189 |
190 | *.py[co]
191 |
192 | # Packages
193 | *.egg
194 | *.egg-info
195 | dist/
196 | build/
197 | eggs/
198 | parts/
199 | var/
200 | sdist/
201 | develop-eggs/
202 | .installed.cfg
203 |
204 | # Installer logs
205 | pip-log.txt
206 |
207 | # Unit test / coverage reports
208 | .coverage
209 | .tox
210 |
211 | #Translations
212 | *.mo
213 |
214 | #Mr Developer
215 | .mr.developer.cfg
216 |
217 | sftp-config.json
218 | node_modules/
219 | .idea
220 |
221 | package-lock.json
222 | yarn.lock
223 |
--------------------------------------------------------------------------------
/static/templates/admin/plugins/sso-qq.tpl:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | 如果使用碰到问题(崩溃,删除/添加用户错误),请到我们的 issue 中反馈!
9 |
10 |
11 |
12 |
13 | 注册 QQ互联 ,然后把你的APP ID和APP Key复制到下面
14 |
15 |
16 |
17 |
35 |
36 |
37 |
38 |
41 |
42 |
75 |
95 |
96 |
--------------------------------------------------------------------------------
/library.js:
--------------------------------------------------------------------------------
1 | (function (module) {
2 | 'use strict'
3 | // 感谢各位的支持,如果可能,我以后会使用 es6/7 的技术重写本插件的
4 |
5 | // 声明所需的模块
6 | const User = require.main.require('./src/user')
7 | const db = require.main.require('./src/database')
8 | const meta = require.main.require('./src/meta')
9 | const async = require.main.require('async')
10 | const nconf = require.main.require('nconf')
11 | // const utils = require.main.require('./src/public/src/utils')
12 | const passport = require.main.require('passport')
13 | const QQStrategy = require('passport-qq2015-fix').Strategy
14 | // const fs = require.main.require('fs')
15 | const winston = require.main.require('winston')
16 | // const path = require.main.require('path')
17 | const authenticationController = require.main.require('./src/controllers/authentication')
18 |
19 | // 定义本插件的一些信息
20 | const constants = Object.freeze({
21 | 'name': 'QQ',
22 | 'admin': {
23 | 'icon': 'fa-qq',
24 | 'route': '/plugins/sso-qq'
25 | }
26 | })
27 |
28 | const QQ = {} // 初始化对象
29 |
30 | // 配置好QQ的passport验证器
31 | QQ.getStrategy = function (strategies, callback) {
32 | // 获取配置
33 | meta.settings.get('sso-qq', function (err, settings) {
34 | if (!err && settings['id'] && settings['secret']) {
35 | // 配置passort
36 | passport.use('qq-token', new QQStrategy({
37 | clientID: settings['id'],
38 | clientSecret: settings['secret'],
39 | callbackURL: nconf.get('url') + '/auth/qq/callback',
40 | passReqToCallback: true
41 | }, function (req, accessToken, refreshToken, profile, done) {
42 | try {
43 | profile = JSON.parse(profile)
44 | } catch (e) {
45 | done(e)
46 | }
47 | if (profile.ret === -1) { // Try Catch Error
48 | winston.error('[SSO-QQ]The Profile return -1,skipped.')
49 | return done(new Error("There's something wrong with your request or QQ Connect API.Please try again."))
50 | }
51 | // 存储头像信息
52 | let avatar = (profile.figureurl_qq_2 == null) ? profile.figureurl_qq_1 : profile.figureurl_qq_2 // Set avatar image
53 | avatar = avatar.replace('http://', 'https://')
54 | // 如果用户已经登录,那么我们就绑定他
55 | if (req.hasOwnProperty('user') && req.user.hasOwnProperty('uid') && req.user.uid > 0) {
56 | // 如果用户想重复绑定的话,我们就拒绝他。
57 | QQ.hasQQID(profile.id, function (err, res) {
58 | if (err) {
59 | winston.error(err)
60 | return done(err)
61 | } else {
62 | if (res) {
63 | winston.error('[sso-qq] qqid:' + profile.id + 'is binded.')
64 | // qqid is exist
65 | return done(new Error('[[error:sso-multiple-association]]'))
66 | } else {
67 | User.setUserField(req.user.uid, 'qqid', profile.id)
68 | db.setObjectField('qqid:uid', profile.id, req.user.uid)
69 | User.setUserField(req.user.uid, 'qqpic', avatar)
70 | winston.info('[sso-qq]user:' + req.user.uid + 'is binded.(openid is ' + profile.id + ' and nickname is ' + profile.nickname + ')')
71 | return done(null, req.user)
72 | }
73 | }
74 | })
75 | } else {
76 | // 登录方法
77 | var email = profile.id + '@noreply.qq.com'
78 | QQ.login(profile.id, profile.nickname, avatar, email, function (err, user) { // 3.29 add avatar
79 | if (err) {
80 | return done(err)
81 | } else {
82 | // Require collection of email
83 | if (email.endsWith('@norelpy.qq.com') || email.endsWith('@noreply.qq.com')) {
84 | req.session.registration = req.session.registration || {}
85 | req.session.registration.uid = user.uid
86 | req.session.registration.qqid = profile.id
87 | }
88 | authenticationController.onSuccessfulLogin(req, user.uid, function (err) {
89 | if (err) {
90 | return done(err)
91 | } else {
92 | return done(null, user)
93 | }
94 | })
95 | }
96 | })
97 | }
98 | }))
99 |
100 | // 定义本插件的一些信息
101 | strategies.push({
102 | name: 'qq-token',
103 | url: '/auth/qq',
104 | callbackURL: '/auth/qq/callback',
105 | icon: 'fa-qq',
106 | scope: 'get_user_info'
107 | })
108 | };
109 | callback(null, strategies)
110 | })
111 | }
112 |
113 | // 通过UID获取QQid
114 | QQ.hasQQID = function (qqid, callback) {
115 | db.isObjectField('qqid:uid', qqid, function (err, res) {
116 | if (err) {
117 | callback(err)
118 | } else {
119 | callback(null, res)
120 | }
121 | })
122 | }
123 |
124 | QQ.getAssociation = function (data, callback) {
125 | User.getUserField(data.uid, 'qqid', function (err, qqid) {
126 | if (err) {
127 | return callback(err, data)
128 | }
129 |
130 | if (qqid) {
131 | data.associations.push({
132 | associated: true,
133 | deauthUrl: nconf.get('url') + '/deauth/qq',
134 | name: constants.name,
135 | icon: constants.admin.icon
136 | })
137 | } else {
138 | data.associations.push({
139 | associated: false,
140 | url: nconf.get('url') + '/auth/qq',
141 | name: constants.name,
142 | icon: constants.admin.icon
143 | })
144 | }
145 |
146 | callback(null, data)
147 | })
148 | }
149 | QQ.login = function (qqID, username, avatar, email, callback) {
150 | QQ.getUidByQQID(qqID, function (err, uid) {
151 | if (err) {
152 | return callback(err)
153 | }
154 |
155 | // winston.verbose("[SSO-QQ]uid:" + uid);
156 | if (uid !== null) {
157 | // Existing User
158 | winston.info('[SSO-QQ]User:' + uid + ' is logged via sso-qq')
159 | User.setUserField(uid, 'qqpic', avatar) // 更新头像
160 | return callback(null, {
161 | uid: uid
162 | })
163 | } else {
164 | // 为了放置可能导致的修改用户数据,结果重新建立了一个账户的问题,所以我们给他一个默认邮箱
165 | winston.info("[SSO-QQ]User isn't Exist.Try to Creat a new account.")
166 | winston.info("[SSO-QQ]New Account's Username:" + username + ' and openid:' + qqID)
167 | // New User
168 | // From SSO-Twitter
169 | User.create({
170 | username: username,
171 | email: email
172 | }, function (err, uid) {
173 | if (err) {
174 | User.create({
175 | username: 'QQ-' + qqID,
176 | email: email
177 | }, function (err, uid) {
178 | if (err) {
179 | return callback(err)
180 | } else {
181 | // Save qq-specific information to the user
182 | User.setUserField(uid, 'qqid', qqID)
183 | db.setObjectField('qqid:uid', qqID, uid)
184 | // Save their photo, if present
185 | User.setUserField(uid, 'picture', avatar)
186 | User.setUserField(uid, 'qqpic', avatar)
187 | callback(null, {
188 | uid: uid
189 | })
190 | }
191 | })
192 | } else {
193 | // Save qq-specific information to the user
194 | User.setUserField(uid, 'qqid', qqID)
195 | db.setObjectField('qqid:uid', qqID, uid)
196 | // Save their photo, if present
197 | User.setUserField(uid, 'picture', avatar)
198 | User.setUserField(uid, 'qqpic', avatar)
199 | callback(null, {
200 | uid: uid
201 | })
202 | }
203 | })
204 | }
205 | })
206 | }
207 |
208 | QQ.getUidByQQID = function (qqID, callback) {
209 | db.getObjectField('qqid:uid', qqID, function (err, uid) {
210 | if (err) {
211 | callback(err)
212 | } else {
213 | callback(null, uid)
214 | }
215 | })
216 | }
217 |
218 | QQ.addMenuItem = function (header, callback) {
219 | header.authentication.push({
220 | 'route': constants.admin.route,
221 | 'icon': constants.admin.icon,
222 | 'name': 'QQ 社会化登陆'
223 | })
224 |
225 | callback(null, header)
226 | }
227 |
228 | QQ.init = function (data, callback) {
229 | var hostHelpers = require.main.require('./src/routes/helpers')
230 |
231 | function renderAdmin (req, res) {
232 | res.render('admin/plugins/sso-qq', {
233 | callbackURL: nconf.get('url') + '/auth/qq/callback'
234 | })
235 | }
236 | data.router.get('/admin/plugins/sso-qq', data.middleware.admin.buildHeader, renderAdmin)
237 | data.router.get('/api/admin/plugins/sso-qq', renderAdmin)
238 | hostHelpers.setupPageRoute(data.router, '/deauth/qq', data.middleware, [data.middleware.requireUser], function (req, res) {
239 | res.render('partials/sso-qq/deauth', {
240 | service: 'QQ'
241 | })
242 | })
243 | data.router.get('/auth/qq/callback', function (req, res, next) {
244 | // passport-qq checks that the oauth_token
245 | // parameter is the same as the one it generated.
246 | //
247 | // Twitter does not support OAuth2, so the "state"
248 | // query string argument is not present.
249 |
250 | req.query.state = req.session.ssoState
251 | // console.log(req.query)
252 | next()
253 | })
254 |
255 | data.router.post('/deauth/qq', [data.middleware.requireUser, data.middleware.applyCSRF], function (req, res, next) {
256 | QQ.deleteUserData({
257 | uid: req.user.uid
258 | }, function (err, uid) {
259 | if (err) {
260 | return next(err)
261 | }
262 | User.getUserField(uid, 'userslug', function (err, userslug) {
263 | if (err) {
264 | return next(err)
265 | }
266 | res.redirect(nconf.get('relative_path') + '/user/' + userslug + '/edit')
267 | })
268 | })
269 | })
270 | callback()
271 | }
272 |
273 | QQ.appendUserHashWhitelist = function (data, callback) {
274 | data.whitelist.push('qqid')
275 | data.whitelist.push('qqpic')
276 | return setImmediate(callback, null, data)
277 | }
278 |
279 | // 删除用户时触发的事件
280 | QQ.deleteUserData = function (data, callback) {
281 | const uid = data.uid
282 |
283 | async.waterfall([
284 | async.apply(User.getUserField, uid, 'qqid'),
285 | function (oAuthIdToDelete, next) {
286 | db.deleteObjectField('qqid:uid', oAuthIdToDelete, next)
287 | },
288 | function (next) {
289 | db.deleteObjectField('user:' + uid, 'qqid', next)
290 | }
291 | ], function (err) {
292 | if (err) {
293 | winston.error('[sso-qq] Could not remove OAuthId data for uid ' + uid + '. Error: ' + err)
294 | return callback(err)
295 | }
296 | callback(null, uid)
297 | })
298 | }
299 | QQ.prepareInterstitial = (data, callback) => {
300 | // Only execute if:
301 | // - uid and qqid are set in session
302 | // - email ends with "@noreply.qq.com"
303 | if (data.userData.hasOwnProperty('uid') && data.userData.hasOwnProperty('qqid')) {
304 | User.getUserField(data.userData.uid, 'email', function (err, email) {
305 | if (err) {
306 | return callback(err)
307 | }
308 | if (email && (email.endsWith('@noreply.qq.com') || email.endsWith('@norelpy.qq.com'))) {
309 | data.interstitials.push({
310 | template: 'partials/sso-qq/email.tpl',
311 | data: {},
312 | callback: QQ.storeAdditionalData
313 | })
314 | }
315 |
316 | callback(null, data)
317 | })
318 | } else {
319 | callback(null, data)
320 | }
321 | }
322 | QQ.get = (data, callback) => {
323 | if (data.type === 'qq') {
324 | QQ.getQQPicture(data.uid, function (err, QQPicture) {
325 | if (err) {
326 | winston.error(err)
327 | return callback(null, data)
328 | }
329 | if (QQPicture == null) {
330 | winston.error('[sso-qq]uid:' + data.uid + 'is invalid,skipping...')
331 | return callback(null, data)
332 | }
333 | data.picture = QQPicture
334 | callback(null, data)
335 | })
336 | } else {
337 | callback(null, data)
338 | }
339 | }
340 | QQ.list = (data, callback) => {
341 | QQ.getQQPicture(data.uid, function (err, QQPicture) {
342 | if (err) {
343 | winston.error(err)
344 | return callback(null, data)
345 | }
346 | if (QQPicture == null) {
347 | winston.error('[sso-qq]uid:' + data.uid + 'is invalid,skipping...')
348 | return callback(null, data)
349 | }
350 | data.pictures.push({
351 | type: 'qq',
352 | url: QQPicture,
353 | text: 'QQ头像'
354 | })
355 | callback(null, data)
356 | })
357 | }
358 | QQ.getQQPicture = function (uid, callback) {
359 | User.getUserField(uid, 'qqpic', function (err, pic) {
360 | if (err) {
361 | return callback(err)
362 | }
363 | callback(null, pic)
364 | })
365 | }
366 |
367 | QQ.storeAdditionalData = function (userData, data, callback) {
368 | async.waterfall([
369 | // Reset email confirm throttle
370 | async.apply(db.delete, 'uid:' + userData.uid + ':confirm:email:sent'),
371 | async.apply(User.getUserField, userData.uid, 'email'),
372 | function (email, next) {
373 | // Remove the old email from sorted set reference
374 | email = email.toLowerCase()
375 | db.sortedSetRemove('email:uid', email, next)
376 | },
377 | async.apply(User.setUserField, userData.uid, 'email', data.email),
378 | async.apply(User.email.sendValidationEmail, userData.uid, data.email)
379 | ], callback)
380 | }
381 | module.exports = QQ
382 | }(module))
383 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@babel/code-frame@^7.0.0":
6 | version "7.0.0"
7 | resolved "http://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8"
8 | integrity sha1-BuKrGb21NThVWaq7W6WXKUgoAPg=
9 | dependencies:
10 | "@babel/highlight" "^7.0.0"
11 |
12 | "@babel/highlight@^7.0.0":
13 | version "7.0.0"
14 | resolved "http://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4"
15 | integrity sha1-9xDDjI1Fjm3ZogGvtjf8t4HOmeQ=
16 | dependencies:
17 | chalk "^2.0.0"
18 | esutils "^2.0.2"
19 | js-tokens "^4.0.0"
20 |
21 | acorn-jsx@^5.0.0:
22 | version "5.0.1"
23 | resolved "http://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e"
24 | integrity sha1-MqBk/ZJUKSFqCbFBECv90YX65A4=
25 |
26 | acorn@^6.0.2:
27 | version "6.0.4"
28 | resolved "http://registry.npm.taobao.org/acorn/download/acorn-6.0.4.tgz#77377e7353b72ec5104550aa2d2097a2fd40b754"
29 | integrity sha1-dzd+c1O3LsUQRVCqLSCXov1At1Q=
30 |
31 | ajv@^6.5.3, ajv@^6.5.5, ajv@^6.6.1:
32 | version "6.6.1"
33 | resolved "http://registry.npm.taobao.org/ajv/download/ajv-6.6.1.tgz#6360f5ed0d80f232cc2b294c362d5dc2e538dd61"
34 | integrity sha1-Y2D17Q2A8jLMKylMNi1dwuU43WE=
35 | dependencies:
36 | fast-deep-equal "^2.0.1"
37 | fast-json-stable-stringify "^2.0.0"
38 | json-schema-traverse "^0.4.1"
39 | uri-js "^4.2.2"
40 |
41 | ansi-escapes@^3.0.0:
42 | version "3.1.0"
43 | resolved "http://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30"
44 | integrity sha1-9zIHu4EgfXX9bIPxJa8m7qN4yjA=
45 |
46 | ansi-regex@^3.0.0:
47 | version "3.0.0"
48 | resolved "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
49 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
50 |
51 | ansi-regex@^4.0.0:
52 | version "4.0.0"
53 | resolved "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.0.0.tgz#70de791edf021404c3fd615aa89118ae0432e5a9"
54 | integrity sha1-cN55Ht8CFATD/WFaqJEYrgQy5ak=
55 |
56 | ansi-styles@^3.2.0, ansi-styles@^3.2.1:
57 | version "3.2.1"
58 | resolved "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
59 | integrity sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=
60 | dependencies:
61 | color-convert "^1.9.0"
62 |
63 | argparse@^1.0.7:
64 | version "1.0.10"
65 | resolved "http://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
66 | integrity sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=
67 | dependencies:
68 | sprintf-js "~1.0.2"
69 |
70 | asn1@~0.2.3:
71 | version "0.2.4"
72 | resolved "http://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
73 | integrity sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=
74 | dependencies:
75 | safer-buffer "~2.1.0"
76 |
77 | assert-plus@1.0.0, assert-plus@^1.0.0:
78 | version "1.0.0"
79 | resolved "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
80 | integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
81 |
82 | astral-regex@^1.0.0:
83 | version "1.0.0"
84 | resolved "http://registry.npm.taobao.org/astral-regex/download/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
85 | integrity sha1-bIw/uCfdQ+45GPJ7gngqt2WKb9k=
86 |
87 | asynckit@^0.4.0:
88 | version "0.4.0"
89 | resolved "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
90 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
91 |
92 | aws-sign2@~0.7.0:
93 | version "0.7.0"
94 | resolved "http://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
95 | integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
96 |
97 | aws4@^1.8.0:
98 | version "1.8.0"
99 | resolved "http://registry.npm.taobao.org/aws4/download/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
100 | integrity sha1-8OAD2cqef1nHpQiUXXsu+aBKVC8=
101 |
102 | balanced-match@^1.0.0:
103 | version "1.0.0"
104 | resolved "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
105 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
106 |
107 | bcrypt-pbkdf@^1.0.0:
108 | version "1.0.2"
109 | resolved "http://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
110 | integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
111 | dependencies:
112 | tweetnacl "^0.14.3"
113 |
114 | brace-expansion@^1.1.7:
115 | version "1.1.11"
116 | resolved "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
117 | integrity sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=
118 | dependencies:
119 | balanced-match "^1.0.0"
120 | concat-map "0.0.1"
121 |
122 | builtin-modules@^1.0.0:
123 | version "1.1.1"
124 | resolved "http://registry.npm.taobao.org/builtin-modules/download/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
125 | integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
126 |
127 | caller-path@^0.1.0:
128 | version "0.1.0"
129 | resolved "http://registry.npm.taobao.org/caller-path/download/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
130 | integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=
131 | dependencies:
132 | callsites "^0.2.0"
133 |
134 | callsites@^0.2.0:
135 | version "0.2.0"
136 | resolved "http://registry.npm.taobao.org/callsites/download/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
137 | integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=
138 |
139 | caseless@~0.12.0:
140 | version "0.12.0"
141 | resolved "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
142 | integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
143 |
144 | chalk@^2.0.0, chalk@^2.1.0:
145 | version "2.4.1"
146 | resolved "http://registry.npm.taobao.org/chalk/download/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e"
147 | integrity sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=
148 | dependencies:
149 | ansi-styles "^3.2.1"
150 | escape-string-regexp "^1.0.5"
151 | supports-color "^5.3.0"
152 |
153 | chardet@^0.7.0:
154 | version "0.7.0"
155 | resolved "http://registry.npm.taobao.org/chardet/download/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
156 | integrity sha1-kAlISfCTfy7twkJdDSip5fDLrZ4=
157 |
158 | circular-json@^0.3.1:
159 | version "0.3.3"
160 | resolved "http://registry.npm.taobao.org/circular-json/download/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
161 | integrity sha1-gVyZ6oT2gJUp0vRXkb34JxE1LWY=
162 |
163 | cli-cursor@^2.1.0:
164 | version "2.1.0"
165 | resolved "http://registry.npm.taobao.org/cli-cursor/download/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
166 | integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
167 | dependencies:
168 | restore-cursor "^2.0.0"
169 |
170 | cli-width@^2.0.0:
171 | version "2.2.0"
172 | resolved "http://registry.npm.taobao.org/cli-width/download/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
173 | integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
174 |
175 | color-convert@^1.9.0:
176 | version "1.9.3"
177 | resolved "http://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
178 | integrity sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=
179 | dependencies:
180 | color-name "1.1.3"
181 |
182 | color-name@1.1.3:
183 | version "1.1.3"
184 | resolved "http://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
185 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
186 |
187 | combined-stream@^1.0.6, combined-stream@~1.0.6:
188 | version "1.0.7"
189 | resolved "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828"
190 | integrity sha1-LR0kMXr7ir6V1tLAsHtXgTU52Cg=
191 | dependencies:
192 | delayed-stream "~1.0.0"
193 |
194 | concat-map@0.0.1:
195 | version "0.0.1"
196 | resolved "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
197 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
198 |
199 | contains-path@^0.1.0:
200 | version "0.1.0"
201 | resolved "http://registry.npm.taobao.org/contains-path/download/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
202 | integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
203 |
204 | core-util-is@1.0.2:
205 | version "1.0.2"
206 | resolved "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
207 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
208 |
209 | cross-spawn@^6.0.5:
210 | version "6.0.5"
211 | resolved "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
212 | integrity sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=
213 | dependencies:
214 | nice-try "^1.0.4"
215 | path-key "^2.0.1"
216 | semver "^5.5.0"
217 | shebang-command "^1.2.0"
218 | which "^1.2.9"
219 |
220 | dashdash@^1.12.0:
221 | version "1.14.1"
222 | resolved "http://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
223 | integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
224 | dependencies:
225 | assert-plus "^1.0.0"
226 |
227 | debug@^2.6.8, debug@^2.6.9:
228 | version "2.6.9"
229 | resolved "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
230 | integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=
231 | dependencies:
232 | ms "2.0.0"
233 |
234 | debug@^4.0.1:
235 | version "4.1.0"
236 | resolved "http://registry.npm.taobao.org/debug/download/debug-4.1.0.tgz#373687bffa678b38b1cd91f861b63850035ddc87"
237 | integrity sha1-NzaHv/pnizixzZH4YbY4UANd3Ic=
238 | dependencies:
239 | ms "^2.1.1"
240 |
241 | deep-is@~0.1.3:
242 | version "0.1.3"
243 | resolved "http://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
244 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
245 |
246 | delayed-stream@~1.0.0:
247 | version "1.0.0"
248 | resolved "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
249 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
250 |
251 | doctrine@1.5.0:
252 | version "1.5.0"
253 | resolved "http://registry.npm.taobao.org/doctrine/download/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
254 | integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=
255 | dependencies:
256 | esutils "^2.0.2"
257 | isarray "^1.0.0"
258 |
259 | doctrine@^2.1.0:
260 | version "2.1.0"
261 | resolved "http://registry.npm.taobao.org/doctrine/download/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
262 | integrity sha1-XNAfwQFiG0LEzX9dGmYkNxbT850=
263 | dependencies:
264 | esutils "^2.0.2"
265 |
266 | ecc-jsbn@~0.1.1:
267 | version "0.1.2"
268 | resolved "http://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
269 | integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
270 | dependencies:
271 | jsbn "~0.1.0"
272 | safer-buffer "^2.1.0"
273 |
274 | error-ex@^1.2.0:
275 | version "1.3.2"
276 | resolved "http://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
277 | integrity sha1-tKxAZIEH/c3PriQvQovqihTU8b8=
278 | dependencies:
279 | is-arrayish "^0.2.1"
280 |
281 | escape-string-regexp@^1.0.5:
282 | version "1.0.5"
283 | resolved "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
284 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
285 |
286 | eslint-config-standard@^10.2.1:
287 | version "10.2.1"
288 | resolved "http://registry.npm.taobao.org/eslint-config-standard/download/eslint-config-standard-10.2.1.tgz#c061e4d066f379dc17cd562c64e819b4dd454591"
289 | integrity sha1-wGHk0GbzedwXzVYsZOgZtN1FRZE=
290 |
291 | eslint-import-resolver-node@^0.3.1:
292 | version "0.3.2"
293 | resolved "http://registry.npm.taobao.org/eslint-import-resolver-node/download/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a"
294 | integrity sha1-WPFfuDm40FdsqYBBNHaqskcttmo=
295 | dependencies:
296 | debug "^2.6.9"
297 | resolve "^1.5.0"
298 |
299 | eslint-module-utils@^2.2.0:
300 | version "2.2.0"
301 | resolved "http://registry.npm.taobao.org/eslint-module-utils/download/eslint-module-utils-2.2.0.tgz#b270362cd88b1a48ad308976ce7fa54e98411746"
302 | integrity sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=
303 | dependencies:
304 | debug "^2.6.8"
305 | pkg-dir "^1.0.0"
306 |
307 | eslint-plugin-import@^2.8.0:
308 | version "2.14.0"
309 | resolved "http://registry.npm.taobao.org/eslint-plugin-import/download/eslint-plugin-import-2.14.0.tgz#6b17626d2e3e6ad52cfce8807a845d15e22111a8"
310 | integrity sha1-axdibS4+atUs/OiAeoRdFeIhEag=
311 | dependencies:
312 | contains-path "^0.1.0"
313 | debug "^2.6.8"
314 | doctrine "1.5.0"
315 | eslint-import-resolver-node "^0.3.1"
316 | eslint-module-utils "^2.2.0"
317 | has "^1.0.1"
318 | lodash "^4.17.4"
319 | minimatch "^3.0.3"
320 | read-pkg-up "^2.0.0"
321 | resolve "^1.6.0"
322 |
323 | eslint-plugin-node@^5.2.1:
324 | version "5.2.1"
325 | resolved "http://registry.npm.taobao.org/eslint-plugin-node/download/eslint-plugin-node-5.2.1.tgz#80df3253c4d7901045ec87fa660a284e32bdca29"
326 | integrity sha1-gN8yU8TXkBBF7If6ZgooTjK9yik=
327 | dependencies:
328 | ignore "^3.3.6"
329 | minimatch "^3.0.4"
330 | resolve "^1.3.3"
331 | semver "5.3.0"
332 |
333 | eslint-plugin-promise@^3.6.0:
334 | version "3.8.0"
335 | resolved "http://registry.npm.taobao.org/eslint-plugin-promise/download/eslint-plugin-promise-3.8.0.tgz#65ebf27a845e3c1e9d6f6a5622ddd3801694b621"
336 | integrity sha1-ZevyeoRePB6db2pWIt3TgBaUtiE=
337 |
338 | eslint-plugin-standard@^3.0.1:
339 | version "3.1.0"
340 | resolved "http://registry.npm.taobao.org/eslint-plugin-standard/download/eslint-plugin-standard-3.1.0.tgz#2a9e21259ba4c47c02d53b2d0c9135d4b1022d47"
341 | integrity sha1-Kp4hJZukxHwC1TstDJE11LECLUc=
342 |
343 | eslint-scope@^4.0.0:
344 | version "4.0.0"
345 | resolved "http://registry.npm.taobao.org/eslint-scope/download/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172"
346 | integrity sha1-UL8wcekzi83EMzF5Sgy1M/ATYXI=
347 | dependencies:
348 | esrecurse "^4.1.0"
349 | estraverse "^4.1.1"
350 |
351 | eslint-utils@^1.3.1:
352 | version "1.3.1"
353 | resolved "http://registry.npm.taobao.org/eslint-utils/download/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512"
354 | integrity sha1-moUbqJ7nxGA0b5fPiTnHKYgn5RI=
355 |
356 | eslint-visitor-keys@^1.0.0:
357 | version "1.0.0"
358 | resolved "http://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"
359 | integrity sha1-PzGA+y4pEBdxastMnW1bXDSmqB0=
360 |
361 | eslint@*:
362 | version "5.9.0"
363 | resolved "http://registry.npm.taobao.org/eslint/download/eslint-5.9.0.tgz#b234b6d15ef84b5849c6de2af43195a2d59d408e"
364 | integrity sha1-sjS20V74S1hJxt4q9DGVotWdQI4=
365 | dependencies:
366 | "@babel/code-frame" "^7.0.0"
367 | ajv "^6.5.3"
368 | chalk "^2.1.0"
369 | cross-spawn "^6.0.5"
370 | debug "^4.0.1"
371 | doctrine "^2.1.0"
372 | eslint-scope "^4.0.0"
373 | eslint-utils "^1.3.1"
374 | eslint-visitor-keys "^1.0.0"
375 | espree "^4.0.0"
376 | esquery "^1.0.1"
377 | esutils "^2.0.2"
378 | file-entry-cache "^2.0.0"
379 | functional-red-black-tree "^1.0.1"
380 | glob "^7.1.2"
381 | globals "^11.7.0"
382 | ignore "^4.0.6"
383 | imurmurhash "^0.1.4"
384 | inquirer "^6.1.0"
385 | is-resolvable "^1.1.0"
386 | js-yaml "^3.12.0"
387 | json-stable-stringify-without-jsonify "^1.0.1"
388 | levn "^0.3.0"
389 | lodash "^4.17.5"
390 | minimatch "^3.0.4"
391 | mkdirp "^0.5.1"
392 | natural-compare "^1.4.0"
393 | optionator "^0.8.2"
394 | path-is-inside "^1.0.2"
395 | pluralize "^7.0.0"
396 | progress "^2.0.0"
397 | regexpp "^2.0.1"
398 | require-uncached "^1.0.3"
399 | semver "^5.5.1"
400 | strip-ansi "^4.0.0"
401 | strip-json-comments "^2.0.1"
402 | table "^5.0.2"
403 | text-table "^0.2.0"
404 |
405 | espree@^4.0.0:
406 | version "4.1.0"
407 | resolved "http://registry.npm.taobao.org/espree/download/espree-4.1.0.tgz#728d5451e0fd156c04384a7ad89ed51ff54eb25f"
408 | integrity sha1-co1UUeD9FWwEOEp62J7VH/VOsl8=
409 | dependencies:
410 | acorn "^6.0.2"
411 | acorn-jsx "^5.0.0"
412 | eslint-visitor-keys "^1.0.0"
413 |
414 | esprima@^4.0.0:
415 | version "4.0.1"
416 | resolved "http://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
417 | integrity sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=
418 |
419 | esquery@^1.0.1:
420 | version "1.0.1"
421 | resolved "http://registry.npm.taobao.org/esquery/download/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708"
422 | integrity sha1-QGxRZYsfWZGl+bYrHcJbAOPlxwg=
423 | dependencies:
424 | estraverse "^4.0.0"
425 |
426 | esrecurse@^4.1.0:
427 | version "4.2.1"
428 | resolved "http://registry.npm.taobao.org/esrecurse/download/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
429 | integrity sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=
430 | dependencies:
431 | estraverse "^4.1.0"
432 |
433 | estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1:
434 | version "4.2.0"
435 | resolved "http://registry.npm.taobao.org/estraverse/download/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
436 | integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=
437 |
438 | esutils@^2.0.2:
439 | version "2.0.2"
440 | resolved "http://registry.npm.taobao.org/esutils/download/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
441 | integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
442 |
443 | extend@~3.0.2:
444 | version "3.0.2"
445 | resolved "http://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
446 | integrity sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=
447 |
448 | external-editor@^3.0.0:
449 | version "3.0.3"
450 | resolved "http://registry.npm.taobao.org/external-editor/download/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27"
451 | integrity sha1-WGbbKal4Jtvkvzr9JAcOrZ6kOic=
452 | dependencies:
453 | chardet "^0.7.0"
454 | iconv-lite "^0.4.24"
455 | tmp "^0.0.33"
456 |
457 | extsprintf@1.3.0:
458 | version "1.3.0"
459 | resolved "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
460 | integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
461 |
462 | extsprintf@^1.2.0:
463 | version "1.4.0"
464 | resolved "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
465 | integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
466 |
467 | fast-deep-equal@^2.0.1:
468 | version "2.0.1"
469 | resolved "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
470 | integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
471 |
472 | fast-json-stable-stringify@^2.0.0:
473 | version "2.0.0"
474 | resolved "http://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
475 | integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
476 |
477 | fast-levenshtein@~2.0.4:
478 | version "2.0.6"
479 | resolved "http://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
480 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
481 |
482 | figures@^2.0.0:
483 | version "2.0.0"
484 | resolved "http://registry.npm.taobao.org/figures/download/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
485 | integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
486 | dependencies:
487 | escape-string-regexp "^1.0.5"
488 |
489 | file-entry-cache@^2.0.0:
490 | version "2.0.0"
491 | resolved "http://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
492 | integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=
493 | dependencies:
494 | flat-cache "^1.2.1"
495 | object-assign "^4.0.1"
496 |
497 | find-up@^1.0.0:
498 | version "1.1.2"
499 | resolved "http://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
500 | integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
501 | dependencies:
502 | path-exists "^2.0.0"
503 | pinkie-promise "^2.0.0"
504 |
505 | find-up@^2.0.0:
506 | version "2.1.0"
507 | resolved "http://registry.npm.taobao.org/find-up/download/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
508 | integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
509 | dependencies:
510 | locate-path "^2.0.0"
511 |
512 | flat-cache@^1.2.1:
513 | version "1.3.4"
514 | resolved "http://registry.npm.taobao.org/flat-cache/download/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f"
515 | integrity sha1-LC73dSXMKSkAff/6HdMUqpyd7m8=
516 | dependencies:
517 | circular-json "^0.3.1"
518 | graceful-fs "^4.1.2"
519 | rimraf "~2.6.2"
520 | write "^0.2.1"
521 |
522 | forever-agent@~0.6.1:
523 | version "0.6.1"
524 | resolved "http://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
525 | integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
526 |
527 | form-data@~2.3.2:
528 | version "2.3.3"
529 | resolved "http://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
530 | integrity sha1-3M5SwF9kTymManq5Nr1yTO/786Y=
531 | dependencies:
532 | asynckit "^0.4.0"
533 | combined-stream "^1.0.6"
534 | mime-types "^2.1.12"
535 |
536 | fs.realpath@^1.0.0:
537 | version "1.0.0"
538 | resolved "http://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
539 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
540 |
541 | function-bind@^1.1.1:
542 | version "1.1.1"
543 | resolved "http://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
544 | integrity sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=
545 |
546 | functional-red-black-tree@^1.0.1:
547 | version "1.0.1"
548 | resolved "http://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
549 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
550 |
551 | getpass@^0.1.1:
552 | version "0.1.7"
553 | resolved "http://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
554 | integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
555 | dependencies:
556 | assert-plus "^1.0.0"
557 |
558 | glob@^7.0.5, glob@^7.1.2:
559 | version "7.1.3"
560 | resolved "http://registry.npm.taobao.org/glob/download/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
561 | integrity sha1-OWCDLT8VdBCDQtr9OmezMsCWnfE=
562 | dependencies:
563 | fs.realpath "^1.0.0"
564 | inflight "^1.0.4"
565 | inherits "2"
566 | minimatch "^3.0.4"
567 | once "^1.3.0"
568 | path-is-absolute "^1.0.0"
569 |
570 | globals@^11.7.0:
571 | version "11.9.0"
572 | resolved "http://registry.npm.taobao.org/globals/download/globals-11.9.0.tgz#bde236808e987f290768a93d065060d78e6ab249"
573 | integrity sha1-veI2gI6YfykHaKk9BlBg145qskk=
574 |
575 | graceful-fs@^4.1.2:
576 | version "4.1.15"
577 | resolved "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
578 | integrity sha1-/7cD4QZuig7qpMi4C6klPu77+wA=
579 |
580 | har-schema@^2.0.0:
581 | version "2.0.0"
582 | resolved "http://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
583 | integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
584 |
585 | har-validator@~5.1.0:
586 | version "5.1.3"
587 | resolved "http://registry.npm.taobao.org/har-validator/download/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
588 | integrity sha1-HvievT5JllV2de7ZiTEQ3DUPoIA=
589 | dependencies:
590 | ajv "^6.5.5"
591 | har-schema "^2.0.0"
592 |
593 | has-flag@^3.0.0:
594 | version "3.0.0"
595 | resolved "http://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
596 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
597 |
598 | has@^1.0.1:
599 | version "1.0.3"
600 | resolved "http://registry.npm.taobao.org/has/download/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
601 | integrity sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=
602 | dependencies:
603 | function-bind "^1.1.1"
604 |
605 | hosted-git-info@^2.1.4:
606 | version "2.7.1"
607 | resolved "http://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047"
608 | integrity sha1-l/I2l3vW4SVAiTD/bePuxigewEc=
609 |
610 | http-signature@~1.2.0:
611 | version "1.2.0"
612 | resolved "http://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
613 | integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
614 | dependencies:
615 | assert-plus "^1.0.0"
616 | jsprim "^1.2.2"
617 | sshpk "^1.7.0"
618 |
619 | iconv-lite@^0.4.24:
620 | version "0.4.24"
621 | resolved "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
622 | integrity sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=
623 | dependencies:
624 | safer-buffer ">= 2.1.2 < 3"
625 |
626 | ignore@^3.3.6:
627 | version "3.3.10"
628 | resolved "http://registry.npm.taobao.org/ignore/download/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
629 | integrity sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM=
630 |
631 | ignore@^4.0.6:
632 | version "4.0.6"
633 | resolved "http://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
634 | integrity sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=
635 |
636 | imurmurhash@^0.1.4:
637 | version "0.1.4"
638 | resolved "http://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
639 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
640 |
641 | inflight@^1.0.4:
642 | version "1.0.6"
643 | resolved "http://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
644 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
645 | dependencies:
646 | once "^1.3.0"
647 | wrappy "1"
648 |
649 | inherits@2:
650 | version "2.0.3"
651 | resolved "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
652 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
653 |
654 | inquirer@^6.1.0:
655 | version "6.2.1"
656 | resolved "http://registry.npm.taobao.org/inquirer/download/inquirer-6.2.1.tgz#9943fc4882161bdb0b0c9276769c75b32dbfcd52"
657 | integrity sha1-mUP8SIIWG9sLDJJ2dpx1sy2/zVI=
658 | dependencies:
659 | ansi-escapes "^3.0.0"
660 | chalk "^2.0.0"
661 | cli-cursor "^2.1.0"
662 | cli-width "^2.0.0"
663 | external-editor "^3.0.0"
664 | figures "^2.0.0"
665 | lodash "^4.17.10"
666 | mute-stream "0.0.7"
667 | run-async "^2.2.0"
668 | rxjs "^6.1.0"
669 | string-width "^2.1.0"
670 | strip-ansi "^5.0.0"
671 | through "^2.3.6"
672 |
673 | is-arrayish@^0.2.1:
674 | version "0.2.1"
675 | resolved "http://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
676 | integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
677 |
678 | is-builtin-module@^1.0.0:
679 | version "1.0.0"
680 | resolved "http://registry.npm.taobao.org/is-builtin-module/download/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
681 | integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74=
682 | dependencies:
683 | builtin-modules "^1.0.0"
684 |
685 | is-fullwidth-code-point@^2.0.0:
686 | version "2.0.0"
687 | resolved "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
688 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
689 |
690 | is-promise@^2.1.0:
691 | version "2.1.0"
692 | resolved "http://registry.npm.taobao.org/is-promise/download/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
693 | integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=
694 |
695 | is-resolvable@^1.1.0:
696 | version "1.1.0"
697 | resolved "http://registry.npm.taobao.org/is-resolvable/download/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
698 | integrity sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg=
699 |
700 | is-typedarray@~1.0.0:
701 | version "1.0.0"
702 | resolved "http://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
703 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
704 |
705 | isarray@^1.0.0:
706 | version "1.0.0"
707 | resolved "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
708 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
709 |
710 | isexe@^2.0.0:
711 | version "2.0.0"
712 | resolved "http://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
713 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
714 |
715 | isstream@~0.1.2:
716 | version "0.1.2"
717 | resolved "http://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
718 | integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
719 |
720 | js-tokens@^4.0.0:
721 | version "4.0.0"
722 | resolved "http://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
723 | integrity sha1-GSA/tZmR35jjoocFDUZHzerzJJk=
724 |
725 | js-yaml@^3.12.0:
726 | version "3.12.0"
727 | resolved "http://registry.npm.taobao.org/js-yaml/download/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1"
728 | integrity sha1-6u1lbsg0TxD1J8a/obbiJE3hZ9E=
729 | dependencies:
730 | argparse "^1.0.7"
731 | esprima "^4.0.0"
732 |
733 | jsbn@~0.1.0:
734 | version "0.1.1"
735 | resolved "http://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
736 | integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
737 |
738 | json-schema-traverse@^0.4.1:
739 | version "0.4.1"
740 | resolved "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
741 | integrity sha1-afaofZUTq4u4/mO9sJecRI5oRmA=
742 |
743 | json-schema@0.2.3:
744 | version "0.2.3"
745 | resolved "http://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
746 | integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
747 |
748 | json-stable-stringify-without-jsonify@^1.0.1:
749 | version "1.0.1"
750 | resolved "http://registry.npm.taobao.org/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
751 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
752 |
753 | json-stringify-safe@~5.0.1:
754 | version "5.0.1"
755 | resolved "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
756 | integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
757 |
758 | jsprim@^1.2.2:
759 | version "1.4.1"
760 | resolved "http://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
761 | integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
762 | dependencies:
763 | assert-plus "1.0.0"
764 | extsprintf "1.3.0"
765 | json-schema "0.2.3"
766 | verror "1.10.0"
767 |
768 | levn@^0.3.0, levn@~0.3.0:
769 | version "0.3.0"
770 | resolved "http://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
771 | integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
772 | dependencies:
773 | prelude-ls "~1.1.2"
774 | type-check "~0.3.2"
775 |
776 | load-json-file@^2.0.0:
777 | version "2.0.0"
778 | resolved "http://registry.npm.taobao.org/load-json-file/download/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
779 | integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
780 | dependencies:
781 | graceful-fs "^4.1.2"
782 | parse-json "^2.2.0"
783 | pify "^2.0.0"
784 | strip-bom "^3.0.0"
785 |
786 | locate-path@^2.0.0:
787 | version "2.0.0"
788 | resolved "http://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
789 | integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
790 | dependencies:
791 | p-locate "^2.0.0"
792 | path-exists "^3.0.0"
793 |
794 | lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5:
795 | version "4.17.11"
796 | resolved "http://registry.npm.taobao.org/lodash/download/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
797 | integrity sha1-s56mIp72B+zYniyN8SU2iRysm40=
798 |
799 | mime-db@~1.37.0:
800 | version "1.37.0"
801 | resolved "http://registry.npm.taobao.org/mime-db/download/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8"
802 | integrity sha1-C2oM5v2+lXbiXx8tL96IMNwK0Ng=
803 |
804 | mime-types@^2.1.12, mime-types@~2.1.19:
805 | version "2.1.21"
806 | resolved "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96"
807 | integrity sha1-KJlaoey3cHQv5q5+WPkYHHRLP5Y=
808 | dependencies:
809 | mime-db "~1.37.0"
810 |
811 | mimic-fn@^1.0.0:
812 | version "1.2.0"
813 | resolved "http://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
814 | integrity sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=
815 |
816 | minimatch@^3.0.3, minimatch@^3.0.4:
817 | version "3.0.4"
818 | resolved "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
819 | integrity sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=
820 | dependencies:
821 | brace-expansion "^1.1.7"
822 |
823 | minimist@0.0.8:
824 | version "0.0.8"
825 | resolved "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
826 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
827 |
828 | mkdirp@^0.5.1:
829 | version "0.5.1"
830 | resolved "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
831 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
832 | dependencies:
833 | minimist "0.0.8"
834 |
835 | ms@2.0.0:
836 | version "2.0.0"
837 | resolved "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
838 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
839 |
840 | ms@^2.1.1:
841 | version "2.1.1"
842 | resolved "http://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
843 | integrity sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=
844 |
845 | mute-stream@0.0.7:
846 | version "0.0.7"
847 | resolved "http://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
848 | integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
849 |
850 | natural-compare@^1.4.0:
851 | version "1.4.0"
852 | resolved "http://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
853 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
854 |
855 | nice-try@^1.0.4:
856 | version "1.0.5"
857 | resolved "http://registry.npm.taobao.org/nice-try/download/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
858 | integrity sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=
859 |
860 | normalize-package-data@^2.3.2:
861 | version "2.4.0"
862 | resolved "http://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
863 | integrity sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=
864 | dependencies:
865 | hosted-git-info "^2.1.4"
866 | is-builtin-module "^1.0.0"
867 | semver "2 || 3 || 4 || 5"
868 | validate-npm-package-license "^3.0.1"
869 |
870 | oauth-sign@~0.9.0:
871 | version "0.9.0"
872 | resolved "http://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
873 | integrity sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=
874 |
875 | object-assign@^4.0.1:
876 | version "4.1.1"
877 | resolved "http://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
878 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
879 |
880 | once@^1.3.0:
881 | version "1.4.0"
882 | resolved "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
883 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
884 | dependencies:
885 | wrappy "1"
886 |
887 | onetime@^2.0.0:
888 | version "2.0.1"
889 | resolved "http://registry.npm.taobao.org/onetime/download/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
890 | integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
891 | dependencies:
892 | mimic-fn "^1.0.0"
893 |
894 | optionator@^0.8.2:
895 | version "0.8.2"
896 | resolved "http://registry.npm.taobao.org/optionator/download/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
897 | integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=
898 | dependencies:
899 | deep-is "~0.1.3"
900 | fast-levenshtein "~2.0.4"
901 | levn "~0.3.0"
902 | prelude-ls "~1.1.2"
903 | type-check "~0.3.2"
904 | wordwrap "~1.0.0"
905 |
906 | os-tmpdir@~1.0.2:
907 | version "1.0.2"
908 | resolved "http://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
909 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
910 |
911 | p-limit@^1.1.0:
912 | version "1.3.0"
913 | resolved "http://registry.npm.taobao.org/p-limit/download/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
914 | integrity sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=
915 | dependencies:
916 | p-try "^1.0.0"
917 |
918 | p-locate@^2.0.0:
919 | version "2.0.0"
920 | resolved "http://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
921 | integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
922 | dependencies:
923 | p-limit "^1.1.0"
924 |
925 | p-try@^1.0.0:
926 | version "1.0.0"
927 | resolved "http://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
928 | integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
929 |
930 | parse-json@^2.2.0:
931 | version "2.2.0"
932 | resolved "http://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
933 | integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
934 | dependencies:
935 | error-ex "^1.2.0"
936 |
937 | passport-qq2015-fix@2.0.1:
938 | version "2.0.1"
939 | resolved "http://registry.npm.taobao.org/passport-qq2015-fix/download/passport-qq2015-fix-2.0.1.tgz#487f0c813e617716b4dbbd6994dcbb9b84d59754"
940 | integrity sha1-SH8MgT5hdxa0271plNy7m4TVl1Q=
941 | dependencies:
942 | passport-strategy "1.x.x"
943 | request "^2.67.0"
944 |
945 | passport-strategy@1.x.x:
946 | version "1.0.0"
947 | resolved "http://registry.npm.taobao.org/passport-strategy/download/passport-strategy-1.0.0.tgz#b5539aa8fc225a3d1ad179476ddf236b440f52e4"
948 | integrity sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=
949 |
950 | path-exists@^2.0.0:
951 | version "2.1.0"
952 | resolved "http://registry.npm.taobao.org/path-exists/download/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
953 | integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
954 | dependencies:
955 | pinkie-promise "^2.0.0"
956 |
957 | path-exists@^3.0.0:
958 | version "3.0.0"
959 | resolved "http://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
960 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
961 |
962 | path-is-absolute@^1.0.0:
963 | version "1.0.1"
964 | resolved "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
965 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
966 |
967 | path-is-inside@^1.0.2:
968 | version "1.0.2"
969 | resolved "http://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
970 | integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
971 |
972 | path-key@^2.0.1:
973 | version "2.0.1"
974 | resolved "http://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
975 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
976 |
977 | path-parse@^1.0.5:
978 | version "1.0.6"
979 | resolved "http://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
980 | integrity sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=
981 |
982 | path-type@^2.0.0:
983 | version "2.0.0"
984 | resolved "http://registry.npm.taobao.org/path-type/download/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
985 | integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=
986 | dependencies:
987 | pify "^2.0.0"
988 |
989 | performance-now@^2.1.0:
990 | version "2.1.0"
991 | resolved "http://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
992 | integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
993 |
994 | pify@^2.0.0:
995 | version "2.3.0"
996 | resolved "http://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
997 | integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
998 |
999 | pinkie-promise@^2.0.0:
1000 | version "2.0.1"
1001 | resolved "http://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
1002 | integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
1003 | dependencies:
1004 | pinkie "^2.0.0"
1005 |
1006 | pinkie@^2.0.0:
1007 | version "2.0.4"
1008 | resolved "http://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
1009 | integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
1010 |
1011 | pkg-dir@^1.0.0:
1012 | version "1.0.0"
1013 | resolved "http://registry.npm.taobao.org/pkg-dir/download/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
1014 | integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q=
1015 | dependencies:
1016 | find-up "^1.0.0"
1017 |
1018 | pluralize@^7.0.0:
1019 | version "7.0.0"
1020 | resolved "http://registry.npm.taobao.org/pluralize/download/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
1021 | integrity sha1-KYuJ34uTsCIdv0Ia0rGx6iP8Z3c=
1022 |
1023 | prelude-ls@~1.1.2:
1024 | version "1.1.2"
1025 | resolved "http://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
1026 | integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
1027 |
1028 | progress@^2.0.0:
1029 | version "2.0.1"
1030 | resolved "http://registry.npm.taobao.org/progress/download/progress-2.0.1.tgz#c9242169342b1c29d275889c95734621b1952e31"
1031 | integrity sha1-ySQhaTQrHCnSdYiclXNGIbGVLjE=
1032 |
1033 | psl@^1.1.24:
1034 | version "1.1.29"
1035 | resolved "http://registry.npm.taobao.org/psl/download/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67"
1036 | integrity sha1-YPWA02AXC7cip5fMcEQR5tqFDGc=
1037 |
1038 | punycode@^1.4.1:
1039 | version "1.4.1"
1040 | resolved "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
1041 | integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
1042 |
1043 | punycode@^2.1.0:
1044 | version "2.1.1"
1045 | resolved "http://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
1046 | integrity sha1-tYsBCsQMIsVldhbI0sLALHv0eew=
1047 |
1048 | qs@~6.5.2:
1049 | version "6.5.2"
1050 | resolved "http://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
1051 | integrity sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=
1052 |
1053 | read-pkg-up@^2.0.0:
1054 | version "2.0.0"
1055 | resolved "http://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
1056 | integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
1057 | dependencies:
1058 | find-up "^2.0.0"
1059 | read-pkg "^2.0.0"
1060 |
1061 | read-pkg@^2.0.0:
1062 | version "2.0.0"
1063 | resolved "http://registry.npm.taobao.org/read-pkg/download/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
1064 | integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=
1065 | dependencies:
1066 | load-json-file "^2.0.0"
1067 | normalize-package-data "^2.3.2"
1068 | path-type "^2.0.0"
1069 |
1070 | regexpp@^2.0.1:
1071 | version "2.0.1"
1072 | resolved "http://registry.npm.taobao.org/regexpp/download/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
1073 | integrity sha1-jRnTHPYySCtYkEn4KB+T28uk0H8=
1074 |
1075 | request@^2.67.0:
1076 | version "2.88.0"
1077 | resolved "http://registry.npm.taobao.org/request/download/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
1078 | integrity sha1-nC/KT301tZLv5Xx/ClXoEFIST+8=
1079 | dependencies:
1080 | aws-sign2 "~0.7.0"
1081 | aws4 "^1.8.0"
1082 | caseless "~0.12.0"
1083 | combined-stream "~1.0.6"
1084 | extend "~3.0.2"
1085 | forever-agent "~0.6.1"
1086 | form-data "~2.3.2"
1087 | har-validator "~5.1.0"
1088 | http-signature "~1.2.0"
1089 | is-typedarray "~1.0.0"
1090 | isstream "~0.1.2"
1091 | json-stringify-safe "~5.0.1"
1092 | mime-types "~2.1.19"
1093 | oauth-sign "~0.9.0"
1094 | performance-now "^2.1.0"
1095 | qs "~6.5.2"
1096 | safe-buffer "^5.1.2"
1097 | tough-cookie "~2.4.3"
1098 | tunnel-agent "^0.6.0"
1099 | uuid "^3.3.2"
1100 |
1101 | require-uncached@^1.0.3:
1102 | version "1.0.3"
1103 | resolved "http://registry.npm.taobao.org/require-uncached/download/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
1104 | integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=
1105 | dependencies:
1106 | caller-path "^0.1.0"
1107 | resolve-from "^1.0.0"
1108 |
1109 | resolve-from@^1.0.0:
1110 | version "1.0.1"
1111 | resolved "http://registry.npm.taobao.org/resolve-from/download/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
1112 | integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=
1113 |
1114 | resolve@^1.3.3, resolve@^1.5.0, resolve@^1.6.0:
1115 | version "1.8.1"
1116 | resolved "http://registry.npm.taobao.org/resolve/download/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26"
1117 | integrity sha1-gvHsGaQjrB+9CAsLqwa6NuhKeiY=
1118 | dependencies:
1119 | path-parse "^1.0.5"
1120 |
1121 | restore-cursor@^2.0.0:
1122 | version "2.0.0"
1123 | resolved "http://registry.npm.taobao.org/restore-cursor/download/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
1124 | integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
1125 | dependencies:
1126 | onetime "^2.0.0"
1127 | signal-exit "^3.0.2"
1128 |
1129 | rimraf@~2.6.2:
1130 | version "2.6.2"
1131 | resolved "http://registry.npm.taobao.org/rimraf/download/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
1132 | integrity sha1-LtgVDSShbqhlHm1u8PR8QVjOejY=
1133 | dependencies:
1134 | glob "^7.0.5"
1135 |
1136 | run-async@^2.2.0:
1137 | version "2.3.0"
1138 | resolved "http://registry.npm.taobao.org/run-async/download/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
1139 | integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA=
1140 | dependencies:
1141 | is-promise "^2.1.0"
1142 |
1143 | rxjs@^6.1.0:
1144 | version "6.3.3"
1145 | resolved "http://registry.npm.taobao.org/rxjs/download/rxjs-6.3.3.tgz#3c6a7fa420e844a81390fb1158a9ec614f4bad55"
1146 | integrity sha1-PGp/pCDoRKgTkPsRWKnsYU9LrVU=
1147 | dependencies:
1148 | tslib "^1.9.0"
1149 |
1150 | safe-buffer@^5.0.1, safe-buffer@^5.1.2:
1151 | version "5.1.2"
1152 | resolved "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
1153 | integrity sha1-mR7GnSluAxN0fVm9/St0XDX4go0=
1154 |
1155 | "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
1156 | version "2.1.2"
1157 | resolved "http://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
1158 | integrity sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=
1159 |
1160 | "semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.5.1:
1161 | version "5.6.0"
1162 | resolved "http://registry.npm.taobao.org/semver/download/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
1163 | integrity sha1-fnQlb7qknHWqfHogXMInmcrIAAQ=
1164 |
1165 | semver@5.3.0:
1166 | version "5.3.0"
1167 | resolved "http://registry.npm.taobao.org/semver/download/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
1168 | integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8=
1169 |
1170 | shebang-command@^1.2.0:
1171 | version "1.2.0"
1172 | resolved "http://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
1173 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
1174 | dependencies:
1175 | shebang-regex "^1.0.0"
1176 |
1177 | shebang-regex@^1.0.0:
1178 | version "1.0.0"
1179 | resolved "http://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
1180 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
1181 |
1182 | signal-exit@^3.0.2:
1183 | version "3.0.2"
1184 | resolved "http://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
1185 | integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
1186 |
1187 | slice-ansi@2.0.0:
1188 | version "2.0.0"
1189 | resolved "http://registry.npm.taobao.org/slice-ansi/download/slice-ansi-2.0.0.tgz#5373bdb8559b45676e8541c66916cdd6251612e7"
1190 | integrity sha1-U3O9uFWbRWduhUHGaRbN1iUWEuc=
1191 | dependencies:
1192 | ansi-styles "^3.2.0"
1193 | astral-regex "^1.0.0"
1194 | is-fullwidth-code-point "^2.0.0"
1195 |
1196 | spdx-correct@^3.0.0:
1197 | version "3.0.2"
1198 | resolved "http://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.0.2.tgz#19bb409e91b47b1ad54159243f7312a858db3c2e"
1199 | integrity sha1-GbtAnpG0exrVQVkkP3MSqFjbPC4=
1200 | dependencies:
1201 | spdx-expression-parse "^3.0.0"
1202 | spdx-license-ids "^3.0.0"
1203 |
1204 | spdx-exceptions@^2.1.0:
1205 | version "2.2.0"
1206 | resolved "http://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977"
1207 | integrity sha1-LqRQrudPKom/uUUZwH/Nb0EyKXc=
1208 |
1209 | spdx-expression-parse@^3.0.0:
1210 | version "3.0.0"
1211 | resolved "http://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
1212 | integrity sha1-meEZt6XaAOBUkcn6M4t5BII7QdA=
1213 | dependencies:
1214 | spdx-exceptions "^2.1.0"
1215 | spdx-license-ids "^3.0.0"
1216 |
1217 | spdx-license-ids@^3.0.0:
1218 | version "3.0.2"
1219 | resolved "http://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-3.0.2.tgz#a59efc09784c2a5bada13cfeaf5c75dd214044d2"
1220 | integrity sha1-pZ78CXhMKlutoTz+r1x13SFARNI=
1221 |
1222 | sprintf-js@~1.0.2:
1223 | version "1.0.3"
1224 | resolved "http://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
1225 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
1226 |
1227 | sshpk@^1.7.0:
1228 | version "1.15.2"
1229 | resolved "http://registry.npm.taobao.org/sshpk/download/sshpk-1.15.2.tgz#c946d6bd9b1a39d0e8635763f5242d6ed6dcb629"
1230 | integrity sha1-yUbWvZsaOdDoY1dj9SQtbtbctik=
1231 | dependencies:
1232 | asn1 "~0.2.3"
1233 | assert-plus "^1.0.0"
1234 | bcrypt-pbkdf "^1.0.0"
1235 | dashdash "^1.12.0"
1236 | ecc-jsbn "~0.1.1"
1237 | getpass "^0.1.1"
1238 | jsbn "~0.1.0"
1239 | safer-buffer "^2.0.2"
1240 | tweetnacl "~0.14.0"
1241 |
1242 | string-width@^2.1.0, string-width@^2.1.1:
1243 | version "2.1.1"
1244 | resolved "http://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
1245 | integrity sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=
1246 | dependencies:
1247 | is-fullwidth-code-point "^2.0.0"
1248 | strip-ansi "^4.0.0"
1249 |
1250 | strip-ansi@^4.0.0:
1251 | version "4.0.0"
1252 | resolved "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
1253 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
1254 | dependencies:
1255 | ansi-regex "^3.0.0"
1256 |
1257 | strip-ansi@^5.0.0:
1258 | version "5.0.0"
1259 | resolved "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.0.0.tgz#f78f68b5d0866c20b2c9b8c61b5298508dc8756f"
1260 | integrity sha1-949otdCGbCCyybjGG1KYUI3IdW8=
1261 | dependencies:
1262 | ansi-regex "^4.0.0"
1263 |
1264 | strip-bom@^3.0.0:
1265 | version "3.0.0"
1266 | resolved "http://registry.npm.taobao.org/strip-bom/download/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
1267 | integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
1268 |
1269 | strip-json-comments@^2.0.1:
1270 | version "2.0.1"
1271 | resolved "http://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
1272 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
1273 |
1274 | supports-color@^5.3.0:
1275 | version "5.5.0"
1276 | resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
1277 | integrity sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=
1278 | dependencies:
1279 | has-flag "^3.0.0"
1280 |
1281 | table@^5.0.2:
1282 | version "5.1.1"
1283 | resolved "http://registry.npm.taobao.org/table/download/table-5.1.1.tgz#92030192f1b7b51b6eeab23ed416862e47b70837"
1284 | integrity sha1-kgMBkvG3tRtu6rI+1BaGLke3CDc=
1285 | dependencies:
1286 | ajv "^6.6.1"
1287 | lodash "^4.17.11"
1288 | slice-ansi "2.0.0"
1289 | string-width "^2.1.1"
1290 |
1291 | text-table@^0.2.0:
1292 | version "0.2.0"
1293 | resolved "http://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
1294 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
1295 |
1296 | through@^2.3.6:
1297 | version "2.3.8"
1298 | resolved "http://registry.npm.taobao.org/through/download/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
1299 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
1300 |
1301 | tmp@^0.0.33:
1302 | version "0.0.33"
1303 | resolved "http://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
1304 | integrity sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=
1305 | dependencies:
1306 | os-tmpdir "~1.0.2"
1307 |
1308 | tough-cookie@~2.4.3:
1309 | version "2.4.3"
1310 | resolved "http://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
1311 | integrity sha1-U/Nto/R3g7CSWvoG/587FlKA94E=
1312 | dependencies:
1313 | psl "^1.1.24"
1314 | punycode "^1.4.1"
1315 |
1316 | tslib@^1.9.0:
1317 | version "1.9.3"
1318 | resolved "http://registry.npm.taobao.org/tslib/download/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
1319 | integrity sha1-1+TdeSRdhUKMTX5IIqeZF5VMooY=
1320 |
1321 | tunnel-agent@^0.6.0:
1322 | version "0.6.0"
1323 | resolved "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
1324 | integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
1325 | dependencies:
1326 | safe-buffer "^5.0.1"
1327 |
1328 | tweetnacl@^0.14.3, tweetnacl@~0.14.0:
1329 | version "0.14.5"
1330 | resolved "http://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
1331 | integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
1332 |
1333 | type-check@~0.3.2:
1334 | version "0.3.2"
1335 | resolved "http://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
1336 | integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
1337 | dependencies:
1338 | prelude-ls "~1.1.2"
1339 |
1340 | uri-js@^4.2.2:
1341 | version "4.2.2"
1342 | resolved "http://registry.npm.taobao.org/uri-js/download/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
1343 | integrity sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=
1344 | dependencies:
1345 | punycode "^2.1.0"
1346 |
1347 | uuid@^3.3.2:
1348 | version "3.3.2"
1349 | resolved "http://registry.npm.taobao.org/uuid/download/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
1350 | integrity sha1-G0r0lV6zB3xQHCOHL8ZROBFYcTE=
1351 |
1352 | validate-npm-package-license@^3.0.1:
1353 | version "3.0.4"
1354 | resolved "http://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
1355 | integrity sha1-/JH2uce6FchX9MssXe/uw51PQQo=
1356 | dependencies:
1357 | spdx-correct "^3.0.0"
1358 | spdx-expression-parse "^3.0.0"
1359 |
1360 | verror@1.10.0:
1361 | version "1.10.0"
1362 | resolved "http://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
1363 | integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
1364 | dependencies:
1365 | assert-plus "^1.0.0"
1366 | core-util-is "1.0.2"
1367 | extsprintf "^1.2.0"
1368 |
1369 | which@^1.2.9:
1370 | version "1.3.1"
1371 | resolved "http://registry.npm.taobao.org/which/download/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
1372 | integrity sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=
1373 | dependencies:
1374 | isexe "^2.0.0"
1375 |
1376 | wordwrap@~1.0.0:
1377 | version "1.0.0"
1378 | resolved "http://registry.npm.taobao.org/wordwrap/download/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
1379 | integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
1380 |
1381 | wrappy@1:
1382 | version "1.0.2"
1383 | resolved "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1384 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
1385 |
1386 | write@^0.2.1:
1387 | version "0.2.1"
1388 | resolved "http://registry.npm.taobao.org/write/download/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
1389 | integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=
1390 | dependencies:
1391 | mkdirp "^0.5.1"
1392 |
--------------------------------------------------------------------------------