├── .gitignore ├── README.md ├── app.js ├── assets ├── image-20181031132924452.png └── image-20181031133039856.png ├── config └── config.default.js ├── db_data └── test │ ├── cats.bson │ ├── cats.metadata.json │ ├── comments.bson │ ├── comments.metadata.json │ ├── educations.bson │ ├── educations.metadata.json │ ├── posts.bson │ ├── posts.metadata.json │ ├── tags.bson │ ├── tags.metadata.json │ ├── topics.bson │ ├── topics.metadata.json │ ├── users.bson │ ├── users.metadata.json │ ├── votes.bson │ ├── votes.metadata.json │ ├── works.bson │ └── works.metadata.json ├── models ├── comment.js ├── education.js ├── index.js ├── post.js ├── tag.js ├── user.js ├── vote.js └── work.js ├── package-lock.json ├── package.json ├── plugins ├── README.md ├── config.js └── database.js ├── public ├── img │ ├── 13bb4fc08d6130454d7478da6dd1406b.jpg │ ├── 1b6493b6c82e7c76c4c882bbdbe87e57.png │ ├── 1dc025a226834abbc8609461c6a7fce7.png │ ├── 258448bf846cc06af88db12e0822e325.jpg │ ├── 4ab6c07d850b841035006b7ebba8e642.png │ ├── 61823b0c6e2fc26ec0ff04ba817cebc1.png │ ├── 760884f1db9abcf1f5af5845c264de81.jpg │ ├── 7948fe91f8ce085e5ad7773d15213df6.png │ ├── 7d3443e0adb1604a14eda3616ec399a1.png │ ├── 99c44ec4560d78c6df3aa00a915e0d5d.png │ ├── 9c080b68d23ebb07c69c6706924d4fff.png │ ├── a2877f44bfa7e447b269b966f2df5fe3.jpg │ ├── a55779797d22bb2325489f1146fc81cb.png │ ├── a677ab59dbf8bb5e098ac0fc77a65830.png │ ├── af6e102cadd667cb8da1b3287ceb893c.png │ ├── b0de1c10468e7417d001a8c3e9494e61.png │ ├── b56dafef07f2b8c80115762d0150d18a.png │ ├── bad1a84d5875dcb5b3b7776b3a184135.png │ ├── c90dc1c5c90943b7a24a11bd4463e5b6.png │ ├── dd36c9466d11157140ef7e9b18ce7d49.png │ └── e04c36bbb685fe36f04123821dc1177a.png └── template │ ├── 0b416f97b86e0b227f14f73eb1b4c700.jpg │ ├── 0f8fb5060d3dd791e54f39413503ac84.png │ ├── 166eff043dfe79e11ecc717ce0369996.png │ ├── 16af65871d2398da8551cbed6547bfd9.ico │ ├── 1877d0d3c5f5ad63615ff8cb44a3d89f.jpg │ ├── 1eff516212bea7d9142efc5211f80598.jpg │ ├── 2010d5bf224ccd0a6d3342b068e45f34.jpg │ ├── 258448bf846cc06af88db12e0822e325.jpg │ ├── 25ed842e6f4fc1d9080245d23ab3c465.png │ ├── 43c95669043791478a243dc4fe05b5ef.png │ ├── 4cb20e44eb58719cd768c1d5d72cfd1c.jpg │ ├── 59050bba351829495817812cc3e5ed7a.jpg │ ├── 6d843d90d0517b798dd8a513711d1aa8.jpg │ ├── 6f3a493f1580b023cb9c13d20b0bbf1e.png │ ├── 760884f1db9abcf1f5af5845c264de81.jpg │ ├── 776501b4e1fc389f19e5ed44e66d0ddd.jpg │ ├── 7d3443e0adb1604a14eda3616ec399a1.png │ ├── 9c080b68d23ebb07c69c6706924d4fff.png │ ├── 9dc563561e8bb3351418ca30c3338fe9.jpg │ ├── a2877f44bfa7e447b269b966f2df5fe3.jpg │ ├── a4fd649e6ca6c0af30ef8acb1c1cb9e2.png │ ├── c0043e0a6ce49e23d419d259f402e569.jpg │ ├── dfa8033ebda3fbb0c593136fafcc16fc.png │ ├── e278686e58dcf63bc50037e9c5cebd77.jpg │ ├── ee4d3dc785e78e4481686f7f4307c28e.png │ └── f53873eb7547786c2c512afbe8c55de1.jpg ├── services ├── README.md ├── comments.js ├── educations.js ├── index.js ├── posts.js ├── root.js ├── tags.js ├── users.js ├── votes.js └── works.js ├── test ├── helper.js ├── plugins │ └── support.test.js └── services │ ├── example.test.js │ └── root.test.js ├── utils └── md5.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | .DS_Store 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 十次方 API 接口文档 2 | 3 | ## 接口部署 4 | 5 | ### 安装 mongodb 6 | 7 | - 下载 mongodb 8 | + 下载地址:https://www.mongodb.com/download-center/community 9 | - 安装方式 10 | + [在 Linux 上安装 mongodb](https://docs.mongodb.com/manual/administration/install-on-linux/) 11 | + [在 macOS 上安装 mongodb](https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/) 12 | + [在 Windows 上安装 mongodb](https://docs.mongodb.com/manual/tutorial/install-mongodb-on-windows/) 13 | - 安装好以后在终端中执行 `mongod` 命令启动 mongodb 数据库 14 | 15 | > 不明白的也可以参考这篇安装配置教程:http://www.runoob.com/mongodb/mongodb-window-install.html 16 | 17 | ### 安装接口项目依赖 18 | 19 | 在终端中进入接口项目目录并执行以下命令 20 | 21 | ```bash 22 | npm install 23 | ``` 24 | 25 | ### 启动接口服务 26 | 27 | ```bash 28 | npm run dev 29 | ``` 30 | 31 | > 注意: 32 | > 33 | > - 启动服务之前务必保证先启动 mongodb 数据库 34 | 35 | 36 | 37 | 接口服务默认占用 8000 端口,如果 8000 端口被占用,解决方式如下: 38 | 39 | 方式一:关闭其他占用 8000 端口的服务 40 | 41 | 方式二:修改项目中的 `package.json` 文件中的端口号配置(见下图) 42 | 43 | ![image-20181031133039856](assets/image-20181031133039856.png) 44 | 45 | --- 46 | 47 | ## 接口说明 48 | 49 | ### 基准路径 50 | 51 | > `http://localhost:8000/api/v1/` 52 | 53 | --- 54 | 55 | ## 用户 56 | 57 | ### 创建用户 58 | 59 | > `POST` /users 60 | 61 | BODY 62 | 63 | ```json 64 | { 65 | "username": "xxx", 66 | "password": "xxx", 67 | "nickname": "xxx" 68 | } 69 | ``` 70 | 71 | ### 根据用户 id 查询用户信息 72 | 73 | > `GET` /users/:userId 74 | 75 | ### 根据用户名查询用户 76 | 77 | > `GET` /users?username=xxx 78 | 79 | ### 根据昵称查询用户 80 | 81 | > `GET` /users?nickname=xxx 82 | 83 | ### 根据 url_token 查询用户 84 | 85 | > `GET` /users/url_token/:xxx 86 | 87 | ### 更新用户的 urlToken 88 | 89 | > `PATCH` /users/:userId/url_token 90 | 91 | BODY 92 | 93 | ```json 94 | { 95 | "urlToken": "xxx" 96 | } 97 | ``` 98 | 99 | ### 更新用户头像 100 | 101 | > `PATCH` /users/:userId/avatar 102 | 103 | BODY 104 | 105 | ```json 106 | { 107 | "file": "xxx", 108 | "x": "xxx", 109 | "y": "xxx", 110 | "width": "xxx", 111 | "height": "xxx" 112 | } 113 | ``` 114 | 115 | ### 用户注册 116 | 117 | > `POST` /users/signup 118 | 119 | BODY 120 | 121 | ```json 122 | { 123 | "email": "xxx", 124 | "password": "xxx", 125 | "nickname": "xxx" 126 | } 127 | ``` 128 | 129 | ### 用户登录 130 | 131 | > `POST` /users/signin 132 | 133 | BODY 134 | 135 | ```json 136 | { 137 | "email": "xxx", 138 | "password": "xxx" 139 | } 140 | ``` 141 | 142 | ### 更新用户基本信息 143 | 144 | > `PATCH` /users/:userId/profile 145 | 146 | BODY 147 | 148 | ```json 149 | { 150 | "name": "xxx", 151 | "birthday": "xxx", 152 | "cellphone": "xxx", 153 | "location": "xxx", 154 | "skills": "xxx", 155 | "gender": "xxx", 156 | "website": "xxx", 157 | "bio": "xxx" 158 | } 159 | ``` 160 | 161 | ### 更新用户密码 162 | 163 | > `PATCH` /users/:userId/password 164 | 165 | BODY 166 | 167 | ```json 168 | { 169 | "password": "xxx", 170 | "newPassword": "xxx" 171 | } 172 | ``` 173 | 174 | ### 删除用户 175 | 176 | > `DELETE` /users/:userId 177 | 178 | --- 179 | 180 | ## 问题 181 | 182 | ### 创建问题 183 | 184 | > `POST` /posts 185 | 186 | BODY 187 | 188 | ```json 189 | { 190 | "title": "xxx", 191 | "body": "xxx", 192 | "tags": "xxx", 193 | "userId": "xxx" 194 | } 195 | ``` 196 | 197 | ### 根据问题id获取问题 198 | 199 | > `GET` /posts/:postId 200 | 201 | ### 获取问题列表 202 | 203 | > `GET` /posts 204 | > 205 | > 注:默认获取最新发布的问题 206 | 207 | PARAMS 208 | 209 | - `_page` 页码 210 | - `_limit` 每页大小 211 | - `filter` 筛选条件 212 | - hot 热门 213 | - unresponsive 等待回复 214 | - `tags` 标签 215 | 216 | ### 获取某个用户发布的问题 217 | 218 | > `GET` /posts?userId=xxx 219 | 220 | ### 获取某个用户回复过的问题 221 | 222 | > `GET` /users/:userId/comments/questions 223 | 224 | ### 更新问题 225 | 226 | > `PATCH` /posts/:postId 227 | 228 | BODY 229 | 230 | ```json 231 | { 232 | "title": "xxx", 233 | "body": "xxx", 234 | "tags": "xxx" 235 | } 236 | ``` 237 | 238 | ### 删除问题 239 | 240 | > `DELETE` /posts/:postId 241 | 242 | --- 243 | 244 | ## 回复 245 | 246 | ### 创建回复 247 | 248 | > `POST` /comments 249 | 250 | BODY 251 | 252 | ```json 253 | { 254 | "body": "xxx", 255 | "userId": "xxx", 256 | "postId": "xxx" 257 | } 258 | ``` 259 | 260 | 261 | 262 | ### 获取某个问题的回复数量 263 | 264 | > `GET` /comments/count?postId=xxx 265 | 266 | ### 获取某个问题的所有回复 267 | 268 | > `GET` /comments?postId=xxx 269 | 270 | ### 删除回复 271 | 272 | > `DELETE` /comments/:commentId 273 | 274 | ### 更新回复 275 | 276 | > `PATCH` /comments/:commentId 277 | 278 | BODY 279 | 280 | ```json 281 | { 282 | "body": "" 283 | } 284 | ``` 285 | 286 | 287 | 288 | --- 289 | 290 | ## 标签 291 | 292 | ### 获取标签列表 293 | 294 | > `GET` /tags 295 | 296 | PARAMS 297 | 298 | - `_page` 页码 299 | - `_limit` 每页大小 300 | 301 | 302 | 303 | ### 获取某个用户关注的标签 304 | 305 | > `GET` /tags/followers/:userId 306 | 307 | ### 根据标签名获取标签 308 | 309 | > `GET` /tags/:tagName 310 | 311 | ### 关注标签 312 | 313 | > `POST` /tags/:tagName/followers 314 | 315 | BODY 316 | 317 | ```json 318 | { 319 | "userId": "xxx" 320 | } 321 | ``` 322 | 323 | 324 | 325 | --- 326 | 327 | ## 投票 328 | 329 | ### 查询投票信息 330 | 331 | > `GET` /votes 332 | 333 | PARAMS 334 | 335 | - type 336 | - 所属类型 337 | - typeId 338 | - 类型id 339 | - userId 340 | - 用户id 341 | 342 | 343 | 344 | ### 创建投票 345 | 346 | > `POST` /votes 347 | 348 | BODY 349 | 350 | ```json 351 | { 352 | "type": "xxx", 353 | "typeId": "xxx", 354 | "value": "xxx", 355 | "userId": "xxx" 356 | } 357 | ``` 358 | 359 | > 注: 360 | > 361 | > - type 值为 `posts` 或者 `comments` 362 | > - typeId 为 type 类型的 id 363 | > - value 可取的值为 `0`、`1`、`-1` 364 | 365 | --- 366 | 367 | ## 用户工作经历 368 | 369 | ### 创建工作经历 370 | 371 | > `POST` /works 372 | 373 | BODY 374 | 375 | ```json 376 | { 377 | "user": "xxx", 378 | "company": "xxx", 379 | "position": "xxx", 380 | "startDate": "xxx", 381 | "endDate": "xxx", 382 | "city": "xxx", 383 | "skills": "xxx", 384 | "description": "xxx" 385 | } 386 | ``` 387 | 388 | 389 | 390 | ### 查询某个用户的工作经历 391 | 392 | > `GET` `/users/:userId/works` 393 | 394 | ### 更新工作经历 395 | 396 | > `PATCH` /works/:wordId 397 | 398 | BODY 399 | 400 | ```json 401 | { 402 | "company": "xxx", 403 | "position": "xxx", 404 | "startDate": "xxx", 405 | "endDate": "xxx", 406 | "city": "xxx", 407 | "skills": "xxx", 408 | "description": "xxx" 409 | } 410 | ``` 411 | 412 | 413 | 414 | ### 删除工作经历 415 | 416 | > `DELETE` /works/:workId 417 | 418 | ## 公共 419 | 420 | ### 文件上传 421 | 422 | > `POST` /upload 423 | 424 | 425 | 426 | -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | const AutoLoad = require('fastify-autoload') 3 | 4 | module.exports = function (fastify, opts, next) { 5 | fastify.register(require('fastify-cors'), {}) 6 | 7 | fastify.register(require('fastify-formbody')) 8 | 9 | fastify.register(require('fastify-static'), { 10 | root: path.join(__dirname, 'public'), 11 | prefix: '/public/', // optional: default '/' 12 | }) 13 | 14 | fastify.register(require('fastify-jwt'), { 15 | secret: 'lipengzhou' 16 | }) 17 | 18 | fastify.register(require('fastify-file-upload'), { 19 | limits: { fileSize: 50 * 1024 * 1024 } 20 | }) 21 | 22 | // Do not touch the following lines 23 | 24 | // This loads all plugins defined in plugins 25 | // those should be support plugins that are reused 26 | // through your application 27 | fastify.register(AutoLoad, { 28 | dir: path.join(__dirname, 'plugins'), 29 | options: Object.assign({}, opts) 30 | }) 31 | 32 | // This loads all plugins defined in services 33 | // define your routes in one of these 34 | fastify.register(AutoLoad, { 35 | dir: path.join(__dirname, 'services'), 36 | options: Object.assign({ 37 | prefix: '/api/v1/' 38 | }, opts) 39 | }) 40 | 41 | fastify.ready(() => { 42 | console.log(fastify.printRoutes()) 43 | // └── / 44 | // ├── test (GET) 45 | // │ └── /hello (GET) 46 | // └── hello/world (GET) 47 | }) 48 | 49 | // Make sure to call next when done 50 | next() 51 | } 52 | -------------------------------------------------------------------------------- /assets/image-20181031132924452.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/assets/image-20181031132924452.png -------------------------------------------------------------------------------- /assets/image-20181031133039856.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/assets/image-20181031133039856.png -------------------------------------------------------------------------------- /config/config.default.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | 3 | module.exports = { 4 | uploadPath: resolve('../public/template/'), 5 | imgPath: resolve('../public/img/') 6 | } 7 | 8 | function resolve(filename) { 9 | return path.join(__dirname, filename) 10 | } 11 | -------------------------------------------------------------------------------- /db_data/test/cats.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/db_data/test/cats.bson -------------------------------------------------------------------------------- /db_data/test/cats.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"test.cats"}],"uuid":"ece22886d6234114ad911a93659810ae"} -------------------------------------------------------------------------------- /db_data/test/comments.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/db_data/test/comments.bson -------------------------------------------------------------------------------- /db_data/test/comments.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"test.comments"}],"uuid":"4f8cc16ea2fc4c67971b3429f23a5b4a"} -------------------------------------------------------------------------------- /db_data/test/educations.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/db_data/test/educations.bson -------------------------------------------------------------------------------- /db_data/test/educations.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"test.educations"}],"uuid":"046da90c533047a3ae3fee7ae9eacbbf"} -------------------------------------------------------------------------------- /db_data/test/posts.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/db_data/test/posts.bson -------------------------------------------------------------------------------- /db_data/test/posts.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"test.posts"}],"uuid":"53ed8f9d974049e982d794680c30d6ee"} -------------------------------------------------------------------------------- /db_data/test/tags.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/db_data/test/tags.bson -------------------------------------------------------------------------------- /db_data/test/tags.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"test.tags"}],"uuid":"cd099fdfac784fc0869aec26d545b6af"} -------------------------------------------------------------------------------- /db_data/test/topics.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/db_data/test/topics.bson -------------------------------------------------------------------------------- /db_data/test/topics.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"test.topics"}],"uuid":"24606ca27c1046ecae49fdc5d1340bce"} -------------------------------------------------------------------------------- /db_data/test/users.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/db_data/test/users.bson -------------------------------------------------------------------------------- /db_data/test/users.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"test.users"}],"uuid":"6ee5462fc191433ebc83ebb5b5e39c29"} -------------------------------------------------------------------------------- /db_data/test/votes.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/db_data/test/votes.bson -------------------------------------------------------------------------------- /db_data/test/votes.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"test.votes"}],"uuid":"06c7751ee84b4165b47ccedc04f2ee48"} -------------------------------------------------------------------------------- /db_data/test/works.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/db_data/test/works.bson -------------------------------------------------------------------------------- /db_data/test/works.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"test.works"}],"uuid":"13117f3a078a4372806358c81d9f4a28"} -------------------------------------------------------------------------------- /models/comment.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose') 2 | const Schema = mongoose.Schema 3 | 4 | const commentSchema = new Schema({ 5 | body: { // 内容 6 | type: String, 7 | required: true 8 | }, 9 | userId: { // 用户id 10 | type: Schema.Types.ObjectId, 11 | required: true, 12 | ref: 'User' 13 | }, 14 | postId: { // 文章id 15 | type: Schema.Types.ObjectId, 16 | required: true, 17 | ref: 'Post' 18 | }, 19 | voteCount: { // 投票数 20 | type: Number, 21 | default: 0 22 | }, 23 | createdAt: { // 创建时间 24 | type: Number, 25 | default: Date.now 26 | }, 27 | updatedAt: { // 更新时间 28 | type: Number, 29 | default: Date.now 30 | } 31 | }) 32 | 33 | module.exports = commentSchema 34 | -------------------------------------------------------------------------------- /models/education.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose') 2 | const Schema = mongoose.Schema 3 | 4 | const eduSchema = new mongoose.Schema({ 5 | user: { 6 | type: Schema.Types.ObjectId, 7 | ref: 'User', 8 | required: true 9 | }, 10 | school: { // 学校名称 11 | type: String, 12 | required: true 13 | }, 14 | major: { // 专业方向 15 | type: String, 16 | default: '' 17 | }, 18 | education: { // 学历 19 | type: String, 20 | required: true 21 | }, 22 | startDate: { // 开始时间 23 | type: String, 24 | required: true 25 | }, 26 | endDate: { // 结束时间 27 | type: String, 28 | required: true 29 | }, 30 | description: { // 其他描述 31 | type: String, 32 | default: '' 33 | }, 34 | createdAt: { // 创建时间 35 | type: Number, 36 | default: Date.now 37 | }, 38 | updatedAt: { // 更新时间 39 | type: Number, 40 | default: Date.now 41 | } 42 | }) 43 | 44 | module.exports = eduSchema 45 | -------------------------------------------------------------------------------- /models/index.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose') 2 | 3 | module.exports = { 4 | User: mongoose.model('User', require('./user')), 5 | Post: mongoose.model('Post', require('./post')), 6 | Comment: mongoose.model('Comment', require('./comment')), 7 | Vote: mongoose.model('Vote', require('./vote')), 8 | Tag: mongoose.model('Tag', require('./tag')), 9 | Work: mongoose.model('Work', require('./work')), 10 | Education: mongoose.model('Education', require('./education')) 11 | } 12 | -------------------------------------------------------------------------------- /models/post.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose') 2 | const Schema = mongoose.Schema 3 | 4 | const postSchema = new Schema({ 5 | title: { // 标题 6 | type: String, 7 | required: true 8 | }, 9 | body: { // 内容 10 | type: String, 11 | required: true 12 | }, 13 | tags: { // 标签 14 | type: [String], 15 | required: true 16 | }, 17 | userId: { // 用户id 18 | type: Schema.Types.ObjectId, 19 | ref: 'User', 20 | required: true 21 | }, 22 | voteCount: { // 投票数 23 | type: Number, 24 | default: 0 25 | }, 26 | pv: { // 浏览量 27 | type: Number, 28 | default: 0 29 | }, 30 | commentCount: { 31 | type: Number, 32 | default: 0 33 | }, 34 | createdAt: { // 创建时间 35 | type: Number, 36 | default: Date.now 37 | }, 38 | updatedAt: { // 更新时间 39 | type: Number, 40 | default: Date.now 41 | } 42 | }) 43 | 44 | module.exports = postSchema 45 | -------------------------------------------------------------------------------- /models/tag.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose') 2 | const Schema = mongoose.Schema 3 | 4 | const tagSchema = new Schema({ 5 | name: { // 标签名称 6 | type: String, 7 | required: true 8 | }, 9 | postCount: { // 内容数量 10 | type: Number, 11 | default: 0 12 | }, 13 | createdAt: { // 创建时间 14 | type: Number, 15 | default: Date.now 16 | }, 17 | followers: { 18 | type: [Schema.Types.ObjectId], 19 | ref: 'User', 20 | required: true 21 | }, 22 | updatedAt: { // 更新时间 23 | type: Number, 24 | default: Date.now 25 | } 26 | }) 27 | 28 | module.exports = tagSchema 29 | -------------------------------------------------------------------------------- /models/user.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose') 2 | 3 | const userSchema = new mongoose.Schema({ 4 | email: { // 邮箱 5 | type: String 6 | }, 7 | password: { // 密码 8 | type: String, 9 | required: true 10 | }, 11 | urlToken: { // 个性网址,默认和 nickname 一致 12 | type: String, 13 | default: '' 14 | }, 15 | nickname: { // 昵称 16 | type: String, 17 | required: true 18 | }, 19 | username: { // 用户名 20 | type: String, 21 | default: '' 22 | }, 23 | birthday: { // 生日 24 | type: String, 25 | default: '' 26 | }, 27 | website: { 28 | type: String, 29 | default: '' 30 | }, 31 | cellphone: { // 电话 32 | type: String, 33 | default: '' 34 | }, 35 | name: { // 真实姓名 36 | type: String, 37 | default: '' 38 | }, 39 | gender: { // 性别 40 | type: String, 41 | enum: ['男', '女', '保密'], 42 | default: '保密' 43 | }, 44 | avatar: { // 头像 45 | type: String, 46 | default: '' 47 | }, 48 | location: { // 位置 49 | type: String, 50 | default: '' 51 | }, 52 | bio: { // 简介 53 | type: String, 54 | default: '' 55 | }, 56 | skills: { // 技术栈 57 | type: String, 58 | default: '' 59 | }, 60 | createdAt: { // 创建时间 61 | type: Number, 62 | default: Date.now 63 | }, 64 | updatedAt: { // 更新时间 65 | type: Number, 66 | default: Date.now 67 | } 68 | }) 69 | 70 | module.exports = userSchema 71 | -------------------------------------------------------------------------------- /models/vote.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose') 2 | const Schema = mongoose.Schema 3 | 4 | const voteSchema = new Schema({ 5 | type: { // 类型 6 | type: String, 7 | required: true, 8 | enum: ['posts', 'comments'] 9 | }, 10 | typeId: { // 类型id 11 | type: Schema.Types.ObjectId, 12 | required: true 13 | }, 14 | userId: { // 用户id 15 | type: Schema.Types.ObjectId, 16 | ref: 'User', 17 | required: true 18 | }, 19 | value: { // 分值 20 | type: Number, 21 | enum: [0, 1, -1] 22 | }, 23 | createdAt: { // 创建时间 24 | type: Number, 25 | default: Date.now 26 | }, 27 | updatedAt: { // 更新时间 28 | type: Number, 29 | default: Date.now 30 | } 31 | }) 32 | 33 | voteSchema.statics.getValidCount = async function (type, typeId) { 34 | const Vote = this 35 | const votes = await Vote.count({ 36 | type, 37 | typeId 38 | }) 39 | 40 | return votes.reduce((prev, curr) => prev + curr.value, 0) 41 | } 42 | 43 | module.exports = voteSchema 44 | -------------------------------------------------------------------------------- /models/work.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose') 2 | const Schema = mongoose.Schema 3 | 4 | const workSchema = new mongoose.Schema({ 5 | user: { 6 | type: Schema.Types.ObjectId, 7 | ref: 'User', 8 | required: true 9 | }, 10 | company: { // 公司/组织名称 11 | type: String, 12 | required: true 13 | }, 14 | position: { // 职位 15 | type: String, 16 | required: true 17 | }, 18 | startDate: { // 开始时间 19 | type: String, 20 | required: true 21 | }, 22 | endDate: { // 结束时间 23 | type: String, 24 | required: true 25 | }, 26 | city: { // 工作城市 27 | type: String, 28 | default: '' 29 | }, 30 | skills: { // 相关技术 31 | type: String, 32 | default: '' 33 | }, 34 | description: { // 职位描述 35 | type: String, 36 | default: '' 37 | }, 38 | createdAt: { // 创建时间 39 | type: Number, 40 | default: Date.now 41 | }, 42 | updatedAt: { // 更新时间 43 | type: Number, 44 | default: Date.now 45 | } 46 | }) 47 | 48 | module.exports = workSchema 49 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "api", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "license": "MIT", 6 | "scripts": { 7 | "test": "tap test/*.test.js test/*/*.test.js test/*/*/*.test.js", 8 | "start": "fastify start --port 8000 --address 0.0.0.0 -l info app.js", 9 | "dev": "fastify start --port 8000 --address 0.0.0.0 -l info --pretty-logs --watch app.js", 10 | "db:back": "mongodump -d test -o db_data/", 11 | "db:restore": "mongorestore -d test --dir db_data/test" 12 | }, 13 | "dependencies": { 14 | "fastify": "^1.11.0", 15 | "fastify-autoload": "^0.5.0", 16 | "fastify-cli": "^0.22.1", 17 | "fastify-cors": "^0.1.0", 18 | "fastify-file-upload": "^0.1.1", 19 | "fastify-formbody": "^2.0.1", 20 | "fastify-jwt": "^0.3.0", 21 | "fastify-plugin": "^1.2.0", 22 | "fastify-static": "^0.14.0", 23 | "gm": "^1.23.1", 24 | "mongoose": "^5.2.14" 25 | }, 26 | "devDependencies": { 27 | "tap": "^12.0.0" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /plugins/README.md: -------------------------------------------------------------------------------- 1 | # Plugins Folder 2 | 3 | Plugins define behavior that is common to all the routes in your 4 | application. Authentication, caching, templates, and all the other cross 5 | cutting concerns should be handled by plugins placed in this folder. 6 | 7 | Files in this folder are typically defined through the 8 | [`fastify-plugin`](https://github.com/fastify/fastify-plugin) module, 9 | making them non-encapsulated. They can define decorators and set hooks 10 | that will then be used in the rest of your application. 11 | 12 | Check out: 13 | 14 | * [The hitchhiker's guide to plugins](https://github.com/fastify/fastify/blob/master/docs/Plugins-Guide.md) 15 | * [Fastify decorators](https://www.fastify.io/docs/latest/Decorators/). 16 | * [Fastify lifecycle](https://www.fastify.io/docs/latest/Lifecycle/). 17 | -------------------------------------------------------------------------------- /plugins/config.js: -------------------------------------------------------------------------------- 1 | const fp = require('fastify-plugin') 2 | 3 | module.exports = fp(async (fastify, options, next) => { 4 | fastify.decorate('config', require('../config/config.default')) 5 | next() 6 | }) 7 | -------------------------------------------------------------------------------- /plugins/database.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose') 2 | const models = require('../models/') 3 | const fp = require('fastify-plugin') 4 | 5 | module.exports = fp(async(fastify, options, next) => { 6 | mongoose.connect('mongodb://localhost/test', { 7 | useNewUrlParser: true 8 | }) 9 | 10 | const db = mongoose.connection 11 | 12 | db.on('error', (err) => { 13 | console.error('数据库连接失败', err) 14 | }) 15 | 16 | db.once('open', () => { 17 | console.log('数据库连接成功') 18 | }) 19 | 20 | fastify.decorate('db', models) 21 | 22 | next() 23 | }) 24 | -------------------------------------------------------------------------------- /public/img/13bb4fc08d6130454d7478da6dd1406b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/img/13bb4fc08d6130454d7478da6dd1406b.jpg -------------------------------------------------------------------------------- /public/img/1b6493b6c82e7c76c4c882bbdbe87e57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/img/1b6493b6c82e7c76c4c882bbdbe87e57.png -------------------------------------------------------------------------------- /public/img/1dc025a226834abbc8609461c6a7fce7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/img/1dc025a226834abbc8609461c6a7fce7.png -------------------------------------------------------------------------------- /public/img/258448bf846cc06af88db12e0822e325.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/img/258448bf846cc06af88db12e0822e325.jpg -------------------------------------------------------------------------------- /public/img/4ab6c07d850b841035006b7ebba8e642.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/img/4ab6c07d850b841035006b7ebba8e642.png -------------------------------------------------------------------------------- /public/img/61823b0c6e2fc26ec0ff04ba817cebc1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/img/61823b0c6e2fc26ec0ff04ba817cebc1.png -------------------------------------------------------------------------------- /public/img/760884f1db9abcf1f5af5845c264de81.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/img/760884f1db9abcf1f5af5845c264de81.jpg -------------------------------------------------------------------------------- /public/img/7948fe91f8ce085e5ad7773d15213df6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/img/7948fe91f8ce085e5ad7773d15213df6.png -------------------------------------------------------------------------------- /public/img/7d3443e0adb1604a14eda3616ec399a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/img/7d3443e0adb1604a14eda3616ec399a1.png -------------------------------------------------------------------------------- /public/img/99c44ec4560d78c6df3aa00a915e0d5d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/img/99c44ec4560d78c6df3aa00a915e0d5d.png -------------------------------------------------------------------------------- /public/img/9c080b68d23ebb07c69c6706924d4fff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/img/9c080b68d23ebb07c69c6706924d4fff.png -------------------------------------------------------------------------------- /public/img/a2877f44bfa7e447b269b966f2df5fe3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/img/a2877f44bfa7e447b269b966f2df5fe3.jpg -------------------------------------------------------------------------------- /public/img/a55779797d22bb2325489f1146fc81cb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/img/a55779797d22bb2325489f1146fc81cb.png -------------------------------------------------------------------------------- /public/img/a677ab59dbf8bb5e098ac0fc77a65830.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/img/a677ab59dbf8bb5e098ac0fc77a65830.png -------------------------------------------------------------------------------- /public/img/af6e102cadd667cb8da1b3287ceb893c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/img/af6e102cadd667cb8da1b3287ceb893c.png -------------------------------------------------------------------------------- /public/img/b0de1c10468e7417d001a8c3e9494e61.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/img/b0de1c10468e7417d001a8c3e9494e61.png -------------------------------------------------------------------------------- /public/img/b56dafef07f2b8c80115762d0150d18a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/img/b56dafef07f2b8c80115762d0150d18a.png -------------------------------------------------------------------------------- /public/img/bad1a84d5875dcb5b3b7776b3a184135.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/img/bad1a84d5875dcb5b3b7776b3a184135.png -------------------------------------------------------------------------------- /public/img/c90dc1c5c90943b7a24a11bd4463e5b6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/img/c90dc1c5c90943b7a24a11bd4463e5b6.png -------------------------------------------------------------------------------- /public/img/dd36c9466d11157140ef7e9b18ce7d49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/img/dd36c9466d11157140ef7e9b18ce7d49.png -------------------------------------------------------------------------------- /public/img/e04c36bbb685fe36f04123821dc1177a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/img/e04c36bbb685fe36f04123821dc1177a.png -------------------------------------------------------------------------------- /public/template/0b416f97b86e0b227f14f73eb1b4c700.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/template/0b416f97b86e0b227f14f73eb1b4c700.jpg -------------------------------------------------------------------------------- /public/template/0f8fb5060d3dd791e54f39413503ac84.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/template/0f8fb5060d3dd791e54f39413503ac84.png -------------------------------------------------------------------------------- /public/template/166eff043dfe79e11ecc717ce0369996.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/template/166eff043dfe79e11ecc717ce0369996.png -------------------------------------------------------------------------------- /public/template/16af65871d2398da8551cbed6547bfd9.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/template/16af65871d2398da8551cbed6547bfd9.ico -------------------------------------------------------------------------------- /public/template/1877d0d3c5f5ad63615ff8cb44a3d89f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/template/1877d0d3c5f5ad63615ff8cb44a3d89f.jpg -------------------------------------------------------------------------------- /public/template/1eff516212bea7d9142efc5211f80598.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/template/1eff516212bea7d9142efc5211f80598.jpg -------------------------------------------------------------------------------- /public/template/2010d5bf224ccd0a6d3342b068e45f34.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/template/2010d5bf224ccd0a6d3342b068e45f34.jpg -------------------------------------------------------------------------------- /public/template/258448bf846cc06af88db12e0822e325.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/template/258448bf846cc06af88db12e0822e325.jpg -------------------------------------------------------------------------------- /public/template/25ed842e6f4fc1d9080245d23ab3c465.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/template/25ed842e6f4fc1d9080245d23ab3c465.png -------------------------------------------------------------------------------- /public/template/43c95669043791478a243dc4fe05b5ef.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/template/43c95669043791478a243dc4fe05b5ef.png -------------------------------------------------------------------------------- /public/template/4cb20e44eb58719cd768c1d5d72cfd1c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/template/4cb20e44eb58719cd768c1d5d72cfd1c.jpg -------------------------------------------------------------------------------- /public/template/59050bba351829495817812cc3e5ed7a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/template/59050bba351829495817812cc3e5ed7a.jpg -------------------------------------------------------------------------------- /public/template/6d843d90d0517b798dd8a513711d1aa8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/template/6d843d90d0517b798dd8a513711d1aa8.jpg -------------------------------------------------------------------------------- /public/template/6f3a493f1580b023cb9c13d20b0bbf1e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/template/6f3a493f1580b023cb9c13d20b0bbf1e.png -------------------------------------------------------------------------------- /public/template/760884f1db9abcf1f5af5845c264de81.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/template/760884f1db9abcf1f5af5845c264de81.jpg -------------------------------------------------------------------------------- /public/template/776501b4e1fc389f19e5ed44e66d0ddd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/template/776501b4e1fc389f19e5ed44e66d0ddd.jpg -------------------------------------------------------------------------------- /public/template/7d3443e0adb1604a14eda3616ec399a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/template/7d3443e0adb1604a14eda3616ec399a1.png -------------------------------------------------------------------------------- /public/template/9c080b68d23ebb07c69c6706924d4fff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/template/9c080b68d23ebb07c69c6706924d4fff.png -------------------------------------------------------------------------------- /public/template/9dc563561e8bb3351418ca30c3338fe9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/template/9dc563561e8bb3351418ca30c3338fe9.jpg -------------------------------------------------------------------------------- /public/template/a2877f44bfa7e447b269b966f2df5fe3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/template/a2877f44bfa7e447b269b966f2df5fe3.jpg -------------------------------------------------------------------------------- /public/template/a4fd649e6ca6c0af30ef8acb1c1cb9e2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/template/a4fd649e6ca6c0af30ef8acb1c1cb9e2.png -------------------------------------------------------------------------------- /public/template/c0043e0a6ce49e23d419d259f402e569.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/template/c0043e0a6ce49e23d419d259f402e569.jpg -------------------------------------------------------------------------------- /public/template/dfa8033ebda3fbb0c593136fafcc16fc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/template/dfa8033ebda3fbb0c593136fafcc16fc.png -------------------------------------------------------------------------------- /public/template/e278686e58dcf63bc50037e9c5cebd77.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/template/e278686e58dcf63bc50037e9c5cebd77.jpg -------------------------------------------------------------------------------- /public/template/ee4d3dc785e78e4481686f7f4307c28e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/template/ee4d3dc785e78e4481686f7f4307c28e.png -------------------------------------------------------------------------------- /public/template/f53873eb7547786c2c512afbe8c55de1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipengzhou/shicifang-api/293f075fa6df67cc6f2fb5fcac668b7610562da1/public/template/f53873eb7547786c2c512afbe8c55de1.jpg -------------------------------------------------------------------------------- /services/README.md: -------------------------------------------------------------------------------- 1 | # Services Folder 2 | 3 | Services define routes within your application. Fastify provides an 4 | easy path to a microservice architecture, in the future you might want 5 | to independently deploy some of those. 6 | 7 | In this folder you should define all the services that define the routes 8 | of your web application. 9 | Each service is a [Fastify 10 | plugin](https://www.fastify.io/docs/latest/Plugins/), it is 11 | encapsulated (it can have its own independent plugins) and it is 12 | typically stored in a file; be careful to group your routes logically, 13 | e.g. all `/users` routes in a `users.js` file. We have added 14 | a `root.js` file for you with a '/' root added. 15 | 16 | If a single file become too large, create a folder and add a `index.js` file there: 17 | this file must be a Fastify plugin, and it will be loaded automatically 18 | by the application. You can now add as many files as you want inside that folder. 19 | In this way you can create complex services within a single monolith, 20 | and eventually extract them. 21 | 22 | If you need to share functionality between services, place that 23 | functionality into the `plugins` folder, and share it via 24 | [decorators](https://www.fastify.io/docs/latest/Decorators/). 25 | -------------------------------------------------------------------------------- /services/comments.js: -------------------------------------------------------------------------------- 1 | module.exports = async (fastify, opts, next) => { 2 | const { Comment, Post } = fastify.db 3 | 4 | /** 5 | * 获取回复列表 6 | */ 7 | fastify.get('/comments', { 8 | schema: { 9 | querystring: { 10 | _page: { type: 'number', default: 1 }, 11 | _limit: { type: 'number', default: 20 }, 12 | postId: { type: 'string' } 13 | } 14 | } 15 | }, async (req, res) => { 16 | const { postId, _page, _limit } = req.query 17 | const condition = {} 18 | postId && (condition.postId = postId) 19 | const ret = await Comment 20 | .find(condition) 21 | .skip((_page - 1) * _limit) 22 | .limit(_limit) 23 | const totalCount = await Comment.count() 24 | res.header('X-Total-Count', totalCount) 25 | res.code(200).send(ret) 26 | }) 27 | 28 | fastify.get('/comments/count', async (req, res) => { 29 | const { postId } = req.query 30 | const condition = {} 31 | postId && (condition.postId = postId) 32 | const ret = await Comment.count(condition) 33 | console.log(ret) 34 | res.code(200).send(ret) 35 | }) 36 | 37 | /* 38 | * 获取单个 39 | */ 40 | fastify.get('/comments/:id', async (req, res) => { 41 | const { id } = req.params 42 | const ret = await Comment.findById(id) 43 | res.code(200).send(ret) 44 | }) 45 | 46 | /* 47 | * 创建 48 | */ 49 | fastify.post('/comments', { 50 | schema: { 51 | body: { 52 | type: 'object', 53 | properties: { 54 | body: { type: 'string' }, 55 | userId: { type: 'string' }, 56 | postId: { type: 'string' } 57 | }, 58 | required: ['body', 'userId', 'postId'] 59 | } 60 | } 61 | }, async (req, res) => { 62 | const { body, userId, postId } = req.body 63 | const ret = await new Comment({ 64 | body, 65 | userId, 66 | postId 67 | }).save() 68 | 69 | // 更新内容的回复数量 70 | await Post.findOneAndUpdate({ _id: postId }, { 71 | commentCount: await Comment.countDocuments({ postId }) 72 | }) 73 | 74 | res.code(201).send(ret) 75 | }) 76 | 77 | /* 78 | * 更新 79 | */ 80 | fastify.patch('/comments/:id', async (req, res) => { 81 | const { id } = req.params 82 | const { body } = req.body 83 | const ret = await Comment.findByIdAndUpdate(id, { 84 | body 85 | }, { new: true }) 86 | res.code(201).send(ret) 87 | }) 88 | 89 | /** 90 | * 删除 91 | */ 92 | fastify.delete('/comments/:commentId', async (req, res) => { 93 | const { commentId } = req.params 94 | const comment = await Comment.findById(commentId) 95 | const postId = comment.postId 96 | await comment.remove() 97 | await Post.findOneAndUpdate({ _id: postId }, { 98 | commentCount: await Comment.countDocuments({ postId }) 99 | }) 100 | res.code(204).send({}) 101 | }) 102 | 103 | next() 104 | } 105 | -------------------------------------------------------------------------------- /services/educations.js: -------------------------------------------------------------------------------- 1 | module.exports = async(fastify, opts, next) => { 2 | const { Education } = fastify.db 3 | 4 | /** 5 | * 创建 6 | */ 7 | fastify.post('/educations', async(req, res) => { 8 | const body = req.body 9 | const ret = await new Education({ 10 | user: body.user, 11 | school: body.school, 12 | major: body.major, 13 | education: body.education, 14 | startDate: body.startDate, 15 | endDate: body.endDate, 16 | description: body.description 17 | }).save() 18 | res.code(201).send(ret) 19 | }) 20 | 21 | /** 22 | * 获取单个 23 | */ 24 | fastify.get('/educations/:id', async(req, res) => { 25 | const ret = await Education.findOne({ _id: req.params.id }) 26 | res.code(200).send(ret) 27 | }) 28 | 29 | /** 30 | * 获取所有 31 | */ 32 | fastify.get('/educations', async(req, res) => { 33 | const ret = await Education.find() 34 | res.code(200).send(ret) 35 | }) 36 | 37 | /** 38 | * 获取指定用户内容 39 | */ 40 | fastify.get('/users/:userId/educations', async(req, res) => { 41 | const ret = await Education.find({ 42 | user: req.params.userId 43 | }) 44 | res.code(200).send(ret) 45 | }) 46 | 47 | /** 48 | * 删除 49 | */ 50 | fastify.delete('/educations/:id', async(req, res) => { 51 | const ret = await Education.findOneAndRemove({ 52 | _id: req.params.id 53 | }) 54 | res.code(204).send(ret) 55 | }) 56 | 57 | /** 58 | * 更新 59 | */ 60 | fastify.patch('/educations/:id', async(req, res) => { 61 | const ret = await Education.findOneAndUpdate({ 62 | _id: req.params.id 63 | }, req.body) 64 | res.code(204).send(ret) 65 | }) 66 | 67 | next() 68 | } 69 | -------------------------------------------------------------------------------- /services/index.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const util = require('util') 3 | const path = require('path') 4 | 5 | const writeFile = util.promisify(fs.writeFile) 6 | 7 | module.exports = async (fastify, opts, next) => { 8 | /* 9 | * 文件上传 10 | */ 11 | fastify.post('/upload', async (req, res) => { 12 | const files = req.raw.files 13 | let fileArr = [] 14 | for(let key in files) { 15 | const item = files[key] 16 | const fileName = `${item.md5}${path.parse(item.name).ext}` 17 | const filePath = path.join(__dirname, '../public/template/', fileName) 18 | await writeFile(filePath, item.data) 19 | fileArr.push({ 20 | name: item.name, 21 | url: `/public/template/${fileName}` 22 | }) 23 | } 24 | res.code(201).send(fileArr) 25 | }) 26 | next() 27 | } 28 | -------------------------------------------------------------------------------- /services/posts.js: -------------------------------------------------------------------------------- 1 | module.exports = async(fastify, opts, next) => { 2 | const { Post, Vote, Comment, Tag, User } = fastify.db 3 | 4 | // fastify.get('/generate', async(req, res, next) => { 5 | // for (let i = 0; i < 100; i++) { 6 | // await new Post({ 7 | // title: 'title' + i, 8 | // body: 'body' + i, 9 | // tags: 'tag' + i, 10 | // userId: '5b9be3c29ac8a01c7ade7262' 11 | // }).save() 12 | // } 13 | // res.send('写入成功') 14 | // }) 15 | 16 | // fastify.get('/clear', async(req, res, next) => { 17 | // for (let i = 0; i < 100; i++) { 18 | // await new Post({ 19 | // title: '测试标题' + i, 20 | // body: '测试内容' + i, 21 | // tags: '测试标签' + i, 22 | // userId: '5b9be3c29ac8a01c7ade7262' 23 | // }).save() 24 | // } 25 | // res.send('写入成功') 26 | // }) 27 | 28 | /* 29 | * 获取列表 30 | */ 31 | fastify.get('/posts', { 32 | schema: { 33 | querystring: { 34 | _page: { type: 'number', default: 1 }, 35 | _limit: { type: 'number', default: 20 }, 36 | filter: { type: 'string', enum: ['hot', 'unresponsive', ''] }, 37 | userId: { type: 'string' }, 38 | tags: { type: 'string', default: '' } 39 | } 40 | } 41 | }, async(req, res) => { 42 | const { userId, filter, _page, _limit, tags } = req.query 43 | const condition = {} 44 | if (tags.length) { 45 | condition.tags = tags 46 | } 47 | const sortCondition = {} 48 | userId && (condition.userId = userId) 49 | switch (filter) { 50 | case 'hot': // 热门 51 | condition.commentCount = { $gte: 1 } 52 | sortCondition.commentCount = -1 // 热门,按照回复数量倒序排序 53 | break 54 | case 'unresponsive': // 等待回复,所有回复数为0内容,按照创建时间倒序排序 55 | condition.commentCount = 0 56 | sortCondition.createdAt = -1 57 | break 58 | default: 59 | sortCondition.createdAt = -1 // 最新,按照创建时间倒叙排序 60 | break 61 | } 62 | const ret = await Post 63 | .find(condition) 64 | .sort(sortCondition) 65 | .skip((_page - 1) * _limit) 66 | .limit(_limit) 67 | res.header('X-Total-Count', await Post.count(condition)) 68 | res.code(200).send(ret) 69 | }) 70 | 71 | /* 72 | * 获取单个 73 | */ 74 | fastify.get('/posts/:postId', async(req, res) => { 75 | const { postId } = req.params 76 | const ret = await Post 77 | .findOne({ _id: postId }) 78 | res.code(200).send(ret) 79 | }) 80 | 81 | /* 82 | * 创建 83 | */ 84 | fastify.post('/posts', { 85 | schema: { 86 | body: { 87 | type: 'object', 88 | properties: { 89 | title: { type: 'string' }, 90 | body: { type: 'string' }, 91 | userId: { type: 'string' }, 92 | tags: { type: 'string' } 93 | }, 94 | required: ['title', 'body', 'userId', 'tags'] 95 | } 96 | } 97 | }, async(req, res) => { 98 | const { title, body, userId } = req.body 99 | let { tags } = req.body 100 | 101 | tags = tags.split(',').reduce((prev, curr) => { 102 | prev.push(curr.trim().toLowerCase()) 103 | return prev 104 | }, []) 105 | 106 | // 创建 tags 107 | for (let i = 0; i < tags.length; i++) { 108 | const item = tags[i] 109 | let tag = await Tag.findOne({ 110 | name: item 111 | }) 112 | if (!tag) { 113 | tag = new Tag({ 114 | name: item, 115 | postCount: 1 116 | }) 117 | } else { 118 | tag.postCount++ 119 | } 120 | await tag.save() 121 | } 122 | 123 | const ret = await new Post({ 124 | title, 125 | body, 126 | tags, 127 | userId 128 | }).save() 129 | 130 | res.code(201).send(ret) 131 | }) 132 | 133 | /* 134 | * 更新 135 | */ 136 | fastify.patch('/posts/:postId', async(req, res) => { 137 | const { postId } = req.params 138 | const { title, body, tags } = req.body 139 | const ret = await Post.findByIdAndUpdate(postId, { 140 | title, 141 | body, 142 | tags, 143 | updatedAt: Date.now() 144 | }, { new: true }) 145 | res.code(201).send(ret) 146 | }) 147 | 148 | /** 149 | * 删除 150 | */ 151 | fastify.delete('/posts/:postId', async(req, res) => { 152 | const { postId } = req.params 153 | const post = await Post.findOneAndDelete({ _id: postId }) 154 | res.code(204).send() 155 | }) 156 | 157 | next() 158 | } 159 | -------------------------------------------------------------------------------- /services/root.js: -------------------------------------------------------------------------------- 1 | module.exports = async (fastify, opts, next) => { 2 | const { db, jwt } = fastify 3 | const { User } = db 4 | 5 | fastify.get('/', async (request, res) => { 6 | res.send('hello world') 7 | }) 8 | 9 | next() 10 | } 11 | -------------------------------------------------------------------------------- /services/tags.js: -------------------------------------------------------------------------------- 1 | module.exports = async (fastify, opts, next) => { 2 | const { Tag } = fastify.db 3 | 4 | /** 5 | * 创建 6 | */ 7 | fastify.post('/tags', { 8 | schema: { 9 | body: { 10 | type: 'object', 11 | properties: { 12 | name: { type: 'string' } 13 | }, 14 | required: ['name'] 15 | } 16 | } 17 | }, async(req, res) => { 18 | const { name } = req.body 19 | const tag = await new Tag({ 20 | name 21 | }).save() 22 | res.code(201).send(tag) 23 | }) 24 | 25 | /** 26 | * 关注|取消标签 27 | */ 28 | fastify.post('tags/:tagName/followers', async (req, res, next) => { 29 | const { tagName } = req.params 30 | const { userId } = req.body 31 | const tag = await Tag.findOne({ name: tagName, followers: userId }) 32 | if (tag) { 33 | // 移除关注者 34 | await Tag.findOneAndUpdate({ name: tagName }, { 35 | $pull: { 36 | followers: userId 37 | } 38 | }) 39 | } else { 40 | // 添加关注者 41 | await Tag.findOneAndUpdate({ 42 | name: tagName 43 | }, { 44 | $push: { 45 | followers: userId 46 | } 47 | }) 48 | } 49 | 50 | const ret = await Tag.findOne({ name: tagName }) 51 | res.send(ret) 52 | }) 53 | 54 | fastify.get('/tags/followers/:userId', async (req, res) => { 55 | const { userId } = req.params 56 | const tags = await Tag.find({ 57 | followers: userId 58 | }) 59 | res.code(200).send(tags) 60 | }) 61 | 62 | /** 63 | * 获取标签列表 64 | */ 65 | fastify.get('/tags', { 66 | schema: { 67 | querystring: { 68 | _page: { type: 'number', default: 1 }, 69 | _limit: { type: 'number', default: 20 } 70 | } 71 | } 72 | }, async (req, res) => { 73 | const { _page, _limit } = req.query 74 | // 获取热门标签 75 | 76 | const tags = await Tag 77 | .find() 78 | .sort({ postCount: -1 }) 79 | .skip((_page - 1) * _limit) 80 | .limit(_limit) 81 | res.header('X-Total-Count', await Tag.count()) 82 | res.code(200).send(tags) 83 | }) 84 | 85 | /** 86 | * 查询标签内容 87 | */ 88 | fastify.get('/tags/:tagName', async (req, res) => { 89 | const { tagName } = req.params 90 | 91 | const ret = await Tag 92 | .findOne({ 93 | name: tagName 94 | }) 95 | res.code(200).send(ret) 96 | }) 97 | 98 | /** 99 | * 删除 100 | */ 101 | fastify.delete('/tags/:tagId', async(req, res) => { 102 | const { tagId } = req.params 103 | await Tag.findOneAndDelete({ _id: tagId }) 104 | res.code(204).send() 105 | }) 106 | 107 | next() 108 | } 109 | -------------------------------------------------------------------------------- /services/users.js: -------------------------------------------------------------------------------- 1 | const md5 = require('../utils/md5') 2 | const url = require('url') 3 | const fs = require('fs') 4 | const util = require('util') 5 | const path = require('path') 6 | const gm = require('gm') 7 | 8 | const readFile = util.promisify(fs.readFile) 9 | const writeFile = util.promisify(fs.writeFile) 10 | 11 | module.exports = async (fastify, opts, next) => { 12 | const { User, Comment, Post, Work, Education } = fastify.db 13 | 14 | /* 15 | * 获取用户列表 16 | */ 17 | fastify.get('/users', async (req, res) => { 18 | const { nickname, username } = req.query 19 | const condition = {} 20 | nickname && (condition.nickname = nickname) 21 | username && (condition.username = username) 22 | const ret = await User.find(condition) 23 | res.code(200).send(ret) 24 | }) 25 | 26 | /** 27 | * 创建用户 28 | */ 29 | fastify.post('/users', async (req, res) => { 30 | const { username, password, nickname } = req.body 31 | const ret = await new User({ 32 | username, 33 | password, 34 | nickname 35 | }).save() 36 | res.code(201).send(ret) 37 | }) 38 | 39 | /** 40 | * 获取用户评论过的内容 41 | */ 42 | fastify.get('/users/:userId/comments/questions', async (req, res) => { 43 | const { userId } = req.params 44 | const ret = await Comment.distinct('postId', { 45 | userId 46 | }) 47 | 48 | const posts = await Post.find({ 49 | _id: { 50 | $in: ret 51 | } 52 | }) 53 | 54 | res.code(200).send(posts) 55 | }) 56 | 57 | /** 58 | * 更新用户基本信息 59 | */ 60 | fastify.patch('/users/:userId/profile', { 61 | body: { 62 | type: 'object', 63 | properties: { 64 | name: { type: 'string', default: '' }, 65 | birthday: { type: 'string', default: '' }, 66 | cellphone: { type: 'string', default: '' }, 67 | location: { type: 'string', default: '' }, 68 | skills: { type: 'string', default: '' }, 69 | gender: { type: 'string', default: '保密' }, 70 | website: { type: 'string', default: '' }, 71 | bio: { type: 'string', default: '' } 72 | }, 73 | } 74 | }, async (req, res) => { 75 | const { userId } = req.params 76 | const { 77 | name, 78 | birthday, 79 | cellphone, 80 | location, 81 | skills, 82 | gender, 83 | website, 84 | bio 85 | } = req.body 86 | const ret = await User.findOneAndUpdate({ 87 | _id: userId 88 | }, { 89 | name, 90 | birthday, 91 | cellphone, 92 | location, 93 | skills, 94 | gender, 95 | website, 96 | bio 97 | }, { new: true }) 98 | res.code(201).send(ret) 99 | }) 100 | 101 | /** 102 | * 更新用户头像 103 | */ 104 | fastify.patch('/users/:userId/avatar', { 105 | schema: { 106 | body: { 107 | type: 'object', 108 | properties: { 109 | file: { type: 'string' }, 110 | x: { type: 'number' }, 111 | y: { type: 'number' }, 112 | width: { type: 'number' }, 113 | height: { type: 'number' } 114 | }, 115 | required: ['file', 'x', 'y', 'width', 'height'] 116 | } 117 | } 118 | }, async (req, res) => { 119 | const { userId } = req.params 120 | const { 121 | file, 122 | x, 123 | y, 124 | width, 125 | height 126 | } = req.body 127 | // 1. 读取 template 中要裁切的图片 128 | const { pathname } = url.parse(file) 129 | // 2. 裁切 130 | gm(`.${pathname}`) 131 | .crop(width, height, x, y) 132 | .resize(160, 160) 133 | .toBuffer((err, buffer) => { 134 | if (err) { 135 | throw err 136 | } 137 | const fileName = `${md5(buffer)}${path.parse(pathname).ext}` 138 | const distPath = path.join(__dirname, '../public/img/', fileName) 139 | fs.writeFile(distPath, buffer, err => { 140 | if (err) { 141 | throw err 142 | } 143 | User.findOneAndUpdate({ 144 | _id: userId 145 | }, { 146 | avatar: `/public/img/${fileName}` 147 | }, { 148 | new: true 149 | }).then(data => { 150 | res.code(201).send(data) 151 | }) 152 | }) 153 | }) 154 | }) 155 | 156 | /* 157 | * 获取单个用户 158 | */ 159 | fastify.get('/users/:userId', async (req, res) => { 160 | const { userId } = req.params 161 | const ret = await User.findById(userId) 162 | res.code(200).send(ret) 163 | }) 164 | 165 | /* 166 | * 根据 urlToken 获取用户 167 | */ 168 | fastify.get('/users/url_token/:urlToken', async (req, res) => { 169 | const { urlToken } = req.params 170 | const ret = await User.findOne({ urlToken }) 171 | res.code(200).send(ret) 172 | }) 173 | 174 | /* 175 | * 修改 urlToken 176 | */ 177 | fastify.patch('/users/:userId/url_token', async (req, res) => { 178 | const { userId } = req.params 179 | const { urlToken } = req.body 180 | const user = await User.findOne({ urlToken }) 181 | if (user) { 182 | return res.code(409).send({ 183 | error: 'body.urlToken' 184 | }) 185 | } 186 | const ret = await User.findOneAndUpdate({ 187 | _id: userId 188 | }, { 189 | urlToken 190 | }, { new: true }) 191 | res.code(200).send(ret) 192 | }) 193 | 194 | /** 195 | * 用户注册 196 | */ 197 | fastify.post('/users/signup', { 198 | schema: { 199 | body: { 200 | type: 'object', 201 | properties: { 202 | email: { 203 | type: 'string', 204 | pattern: '^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$', 205 | // format: 'email' 206 | }, 207 | password: { 208 | type: 'string', 209 | pattern: '^[a-zA-Z]\\w{5,17}$' 210 | }, 211 | nickname: { type: 'string' } 212 | }, 213 | required: ['email', 'password', 'nickname'] 214 | } 215 | } 216 | }, async (req, res) => { 217 | const { email, password, nickname } = req.body 218 | if (await User.findOne({ email })) { 219 | res.code(409).send({ 220 | error: 'body.email' 221 | }) 222 | } 223 | 224 | if (await User.findOne({ nickname })) { 225 | res.code(409).send({ 226 | error: 'body.nickname' 227 | }) 228 | } 229 | 230 | const user = await new User({ 231 | email, 232 | password: md5(password), 233 | nickname, 234 | urlToken: nickname // 个性网址默认和昵称一致 235 | }).save() 236 | 237 | res.code(201).send(user) 238 | }) 239 | 240 | /** 241 | * 用户登录 242 | */ 243 | fastify.post('/users/signin', { 244 | schema: { 245 | body: { 246 | type: 'object', 247 | properties: { 248 | email: { 249 | type: 'string' 250 | }, 251 | password: { 252 | type: 'string' 253 | } 254 | }, 255 | required: ['email', 'password'] 256 | } 257 | } 258 | }, async (req, res) => { 259 | console.log(req.body) 260 | const { email, password } = req.body 261 | const user = await User.findOne({ email }) 262 | 263 | if (!user) { 264 | res.code(401).send({ 265 | error: 'body.email' 266 | }) 267 | } 268 | 269 | if (md5(password) !== user.password) { 270 | res.code(401).send({ 271 | error: 'body.password' 272 | }) 273 | } 274 | 275 | res.code(200).send(user) 276 | }) 277 | 278 | /* 279 | * 更新 280 | */ 281 | fastify.patch('/users/:id', async (req, res) => { 282 | const { id } = req.params 283 | const body = req.body 284 | const user = await User.findByIdAndUpdate(id, body, { new: true }) 285 | res.code(200).send(user) 286 | }) 287 | 288 | /** 289 | * 删除用户 290 | */ 291 | fastify.delete('/users/:id', async (req, res) => { 292 | await User.findOneAndRemove({ _id: req.params.id }) 293 | res.code(200).send({}) 294 | }) 295 | 296 | /** 297 | * 修改密码 298 | */ 299 | fastify.patch('/users/:userId/password', { 300 | schema: { 301 | body: { 302 | type: 'object', 303 | properties: { 304 | password: { 305 | type: 'string' 306 | }, 307 | newPassword: { 308 | type: 'string' 309 | } 310 | }, 311 | required: ['password', 'newPassword'] 312 | } 313 | } 314 | }, async (req, res) => { 315 | const { userId } = req.params 316 | const { password, newPassword } = req.body 317 | 318 | const user = await User.findOne({ _id: userId }) 319 | 320 | if (!user) { 321 | return res.code(400).send({ 322 | error: 'params.userId' 323 | }) 324 | } 325 | 326 | if (md5(password) !== user.password) { 327 | return res.code(400).send({ 328 | error: 'body.password' 329 | }) 330 | } 331 | 332 | user.password = md5(newPassword) 333 | 334 | await user.save() 335 | 336 | return res.code(201).send({ 337 | msg: 'OK' 338 | }) 339 | }) 340 | 341 | next() 342 | } 343 | -------------------------------------------------------------------------------- /services/votes.js: -------------------------------------------------------------------------------- 1 | module.exports = async (fastify, opts, next) => { 2 | const { db } = fastify 3 | const { Vote, Post, Comment } = db 4 | 5 | /** 6 | * 获取用户对 post|comment 的投票信息 7 | */ 8 | fastify.get('/votes', async (req, res) => { 9 | const { type, typeId, userId } = req.query 10 | console.log(req.query) 11 | const condition = {} 12 | type && (condition.type = type) 13 | typeId && (condition.typeId = typeId) 14 | userId && (condition.userId = userId) 15 | const ret = await Vote.find(condition) 16 | res.code(200).send(ret) 17 | }) 18 | 19 | /** 20 | * 创建|更新投票 21 | */ 22 | fastify.post('/votes', { 23 | schema: { 24 | body: { 25 | type: 'object', 26 | properties: { 27 | userId: { type: 'string' }, 28 | value: { type: 'number' }, 29 | type: { type: 'string', enum: ['posts', 'comments'] }, 30 | typeId: { type: 'string' } 31 | }, 32 | required: ['userId', 'value', 'type', 'typeId'] 33 | } 34 | } 35 | }, async (req, res) => { 36 | const { userId, value, type, typeId } = req.body 37 | 38 | let vote = await Vote.findOne({ 39 | type, 40 | typeId, 41 | userId 42 | }) 43 | 44 | if (vote) { 45 | vote.value = value === vote.value ? 0 : value 46 | await vote.save() 47 | } else { 48 | vote = await new Vote({ 49 | type, 50 | typeId, 51 | userId, 52 | value 53 | }).save() 54 | } 55 | 56 | const voteCount = await Vote.getValidCount(type, typeId) 57 | 58 | // 更新 Post 或者 Comment 的 vote 数量 59 | if (type === 'posts') { 60 | await Post.findByIdAndUpdate(typeId, { 61 | voteCount 62 | }) 63 | } else if (type === 'comments') { 64 | await Comment.findByIdAndUpdate(typeId, { 65 | voteCount 66 | }) 67 | } 68 | 69 | res.header('X-Vote-Count', voteCount) 70 | 71 | res.code(201).send(vote) 72 | }) 73 | 74 | next() 75 | } 76 | -------------------------------------------------------------------------------- /services/works.js: -------------------------------------------------------------------------------- 1 | module.exports = async(fastify, opts, next) => { 2 | const { Work } = fastify.db 3 | 4 | /** 5 | * 创建 6 | */ 7 | fastify.post('/works', async(req, res) => { 8 | const body = req.body 9 | const ret = await new Work({ 10 | user: body.user, 11 | company: body.company, 12 | position: body.position, 13 | startDate: body.startDate, 14 | endDate: body.endDate, 15 | city: body.city, 16 | skills: body.skills, 17 | description: body.description 18 | }).save() 19 | res.code(201).send(ret) 20 | }) 21 | 22 | /** 23 | * 获取单个 24 | */ 25 | fastify.get('/works/:id', async(req, res) => { 26 | const ret = await Work.findOne({ _id: req.params.id }) 27 | res.code(200).send(ret) 28 | }) 29 | 30 | /** 31 | * 获取所有 32 | */ 33 | fastify.get('/works', async(req, res) => { 34 | const ret = await Work.find() 35 | res.code(200).send(ret) 36 | }) 37 | 38 | /** 39 | * 获取指定用户内容 40 | */ 41 | fastify.get('/users/:userId/works', async(req, res) => { 42 | const ret = await Work.find({ 43 | user: req.params.userId 44 | }) 45 | res.code(200).send(ret) 46 | }) 47 | 48 | /** 49 | * 删除 50 | */ 51 | fastify.delete('/works/:id', async(req, res) => { 52 | const ret = await Work.findOneAndRemove({ 53 | _id: req.params.id 54 | }) 55 | res.code(204).send(ret) 56 | }) 57 | 58 | /** 59 | * 更新 60 | */ 61 | fastify.patch('/works/:id', async(req, res) => { 62 | const ret = await Work.findOneAndUpdate({ 63 | _id: req.params.id 64 | }, req.body) 65 | res.code(204).send(ret) 66 | }) 67 | 68 | next() 69 | } 70 | -------------------------------------------------------------------------------- /test/helper.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | // This file contains code that we reuse 4 | // between our tests. 5 | 6 | const Fastify = require('fastify') 7 | const fp = require('fastify-plugin') 8 | const App = require('../app') 9 | 10 | // Fill in this config with all the configurations 11 | // needed for testing the application 12 | function config () { 13 | return {} 14 | } 15 | 16 | // automatically build and tear down our instance 17 | function build (t) { 18 | const app = Fastify() 19 | 20 | // fastify-plugin ensures that all decorators 21 | // are exposed for testing purposes, this is 22 | // different from the production setup 23 | app.register(fp(App), config()) 24 | 25 | // tear down our app after we are done 26 | t.tearDown(app.close.bind(app)) 27 | 28 | return app 29 | } 30 | 31 | module.exports = { 32 | config, 33 | build 34 | } 35 | -------------------------------------------------------------------------------- /test/plugins/support.test.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | const { test } = require('tap') 4 | const Fastify = require('fastify') 5 | const Support = require('../../plugins/support') 6 | 7 | test('support works standalone', (t) => { 8 | t.plan(2) 9 | const fastify = Fastify() 10 | fastify.register(Support) 11 | 12 | fastify.ready((err) => { 13 | t.error(err) 14 | t.equal(fastify.someSupport(), 'hugs') 15 | }) 16 | }) 17 | 18 | // It you prefer async/await, use the following 19 | // 20 | // test('support works standalone', async (t) => { 21 | // const fastify = Fastify() 22 | // fastify.register(Support) 23 | // 24 | // await fastify.ready() 25 | // t.equal(fastify.someSupport(), 'hugs') 26 | // }) 27 | -------------------------------------------------------------------------------- /test/services/example.test.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | const { test } = require('tap') 4 | const { build } = require('../helper') 5 | 6 | test('example is loaded', (t) => { 7 | t.plan(2) 8 | const app = build(t) 9 | 10 | app.inject({ 11 | url: '/example' 12 | }, (err, res) => { 13 | t.error(err) 14 | t.equal(res.payload, 'this is an example') 15 | }) 16 | }) 17 | 18 | // It you prefer async/await, use the following 19 | // 20 | // test('example is loaded', async (t) => { 21 | // const app = build(t) 22 | // 23 | // const res = await app.inject({ 24 | // url: '/example' 25 | // }) 26 | // t.equal(res.payload, 'this is an example') 27 | // }) 28 | -------------------------------------------------------------------------------- /test/services/root.test.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | const { test } = require('tap') 4 | const { build } = require('../helper') 5 | 6 | test('default root route', (t) => { 7 | t.plan(2) 8 | const app = build(t) 9 | 10 | app.inject({ 11 | url: '/' 12 | }, (err, res) => { 13 | t.error(err) 14 | t.deepEqual(JSON.parse(res.payload), { root: true }) 15 | }) 16 | }) 17 | 18 | // It you prefer async/await, use the following 19 | // 20 | // test('default root route', async (t) => { 21 | // const app = build(t) 22 | // 23 | // const res = await app.inject({ 24 | // url: '/' 25 | // }) 26 | // t.deepEqual(JSON.parse(res.payload), { root: true }) 27 | // }) 28 | -------------------------------------------------------------------------------- /utils/md5.js: -------------------------------------------------------------------------------- 1 | const crypto = require('crypto') 2 | 3 | module.exports = function (str) { 4 | const hash = crypto.createHash('md5') 5 | hash.update(str) 6 | return hash.digest('hex') 7 | } 8 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/events@*": 6 | version "1.2.0" 7 | resolved "http://registry.npm.taobao.org/@types/events/download/@types/events-1.2.0.tgz#81a6731ce4df43619e5c8c945383b3e62a89ea86" 8 | 9 | "@types/node@*": 10 | version "10.9.4" 11 | resolved "http://registry.npm.taobao.org/@types/node/download/@types/node-10.9.4.tgz#0f4cb2dc7c1de6096055357f70179043c33e9897" 12 | 13 | "@types/pino@^4.16.0": 14 | version "4.16.1" 15 | resolved "http://registry.npm.taobao.org/@types/pino/download/@types/pino-4.16.1.tgz#3b4b36e707cb364dcf0903503a7f44df67294b1c" 16 | dependencies: 17 | "@types/events" "*" 18 | "@types/node" "*" 19 | 20 | abbrev@1: 21 | version "1.1.1" 22 | resolved "http://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 23 | 24 | abstract-logging@^1.0.0: 25 | version "1.0.0" 26 | resolved "http://registry.npm.taobao.org/abstract-logging/download/abstract-logging-1.0.0.tgz#8b7deafd310559bc28f77724dd1bb30177278c1b" 27 | 28 | ajv@^5.3.0: 29 | version "5.5.2" 30 | resolved "http://registry.npm.taobao.org/ajv/download/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" 31 | dependencies: 32 | co "^4.6.0" 33 | fast-deep-equal "^1.0.0" 34 | fast-json-stable-stringify "^2.0.0" 35 | json-schema-traverse "^0.3.0" 36 | 37 | ajv@^6.0.0, ajv@^6.5.2, ajv@^6.5.3: 38 | version "6.5.3" 39 | resolved "http://registry.npm.taobao.org/ajv/download/ajv-6.5.3.tgz#71a569d189ecf4f4f321224fecb166f071dd90f9" 40 | dependencies: 41 | fast-deep-equal "^2.0.1" 42 | fast-json-stable-stringify "^2.0.0" 43 | json-schema-traverse "^0.4.1" 44 | uri-js "^4.2.2" 45 | 46 | ansi-align@^2.0.0: 47 | version "2.0.0" 48 | resolved "http://registry.npm.taobao.org/ansi-align/download/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" 49 | dependencies: 50 | string-width "^2.0.0" 51 | 52 | ansi-regex@^2.0.0: 53 | version "2.1.1" 54 | resolved "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 55 | 56 | ansi-regex@^3.0.0: 57 | version "3.0.0" 58 | resolved "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 59 | 60 | ansi-styles@^2.2.1: 61 | version "2.2.1" 62 | resolved "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 63 | 64 | ansi-styles@^3.2.1: 65 | version "3.2.1" 66 | resolved "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 67 | dependencies: 68 | color-convert "^1.9.0" 69 | 70 | anymatch@^2.0.0: 71 | version "2.0.0" 72 | resolved "http://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" 73 | dependencies: 74 | micromatch "^3.1.4" 75 | normalize-path "^2.1.1" 76 | 77 | append-transform@^0.4.0: 78 | version "0.4.0" 79 | resolved "http://registry.npm.taobao.org/append-transform/download/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" 80 | dependencies: 81 | default-require-extensions "^1.0.0" 82 | 83 | aproba@^1.0.3: 84 | version "1.2.0" 85 | resolved "http://registry.npm.taobao.org/aproba/download/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" 86 | 87 | archy@^1.0.0: 88 | version "1.0.0" 89 | resolved "http://registry.npm.taobao.org/archy/download/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" 90 | 91 | are-we-there-yet@~1.1.2: 92 | version "1.1.5" 93 | resolved "http://registry.npm.taobao.org/are-we-there-yet/download/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" 94 | dependencies: 95 | delegates "^1.0.0" 96 | readable-stream "^2.0.6" 97 | 98 | argparse@^1.0.7: 99 | version "1.0.10" 100 | resolved "http://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 101 | dependencies: 102 | sprintf-js "~1.0.2" 103 | 104 | arr-diff@^2.0.0: 105 | version "2.0.0" 106 | resolved "http://registry.npm.taobao.org/arr-diff/download/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" 107 | dependencies: 108 | arr-flatten "^1.0.1" 109 | 110 | arr-diff@^4.0.0: 111 | version "4.0.0" 112 | resolved "http://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" 113 | 114 | arr-flatten@^1.0.1, arr-flatten@^1.1.0: 115 | version "1.1.0" 116 | resolved "http://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" 117 | 118 | arr-union@^3.1.0: 119 | version "3.1.0" 120 | resolved "http://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" 121 | 122 | array-parallel@~0.1.3: 123 | version "0.1.3" 124 | resolved "http://registry.npm.taobao.org/array-parallel/download/array-parallel-0.1.3.tgz#8f785308926ed5aa478c47e64d1b334b6c0c947d" 125 | 126 | array-series@~0.1.5: 127 | version "0.1.5" 128 | resolved "http://registry.npm.taobao.org/array-series/download/array-series-0.1.5.tgz#df5d37bfc5c2ef0755e2aa4f92feae7d4b5a972f" 129 | 130 | array-unique@^0.2.1: 131 | version "0.2.1" 132 | resolved "http://registry.npm.taobao.org/array-unique/download/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" 133 | 134 | array-unique@^0.3.2: 135 | version "0.3.2" 136 | resolved "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" 137 | 138 | arrify@^1.0.1: 139 | version "1.0.1" 140 | resolved "http://registry.npm.taobao.org/arrify/download/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 141 | 142 | asn1@~0.2.3: 143 | version "0.2.4" 144 | resolved "http://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" 145 | dependencies: 146 | safer-buffer "~2.1.0" 147 | 148 | assert-plus@1.0.0, assert-plus@^1.0.0: 149 | version "1.0.0" 150 | resolved "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 151 | 152 | assign-symbols@^1.0.0: 153 | version "1.0.0" 154 | resolved "http://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" 155 | 156 | async-each@^1.0.0: 157 | version "1.0.1" 158 | resolved "http://registry.npm.taobao.org/async-each/download/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" 159 | 160 | async@2.6.1, async@^2.5.0: 161 | version "2.6.1" 162 | resolved "http://registry.npm.taobao.org/async/download/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" 163 | dependencies: 164 | lodash "^4.17.10" 165 | 166 | asynckit@^0.4.0: 167 | version "0.4.0" 168 | resolved "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 169 | 170 | atob@^2.1.1: 171 | version "2.1.2" 172 | resolved "http://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" 173 | 174 | avvio@^5.8.0: 175 | version "5.9.0" 176 | resolved "http://registry.npm.taobao.org/avvio/download/avvio-5.9.0.tgz#3513709b7d6a2bd93cb20252a13a875ae54d0b0a" 177 | dependencies: 178 | debug "^3.1.0" 179 | fastq "^1.6.0" 180 | 181 | aws-sign2@~0.7.0: 182 | version "0.7.0" 183 | resolved "http://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 184 | 185 | aws4@^1.8.0: 186 | version "1.8.0" 187 | resolved "http://registry.npm.taobao.org/aws4/download/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" 188 | 189 | babel-code-frame@^6.26.0: 190 | version "6.26.0" 191 | resolved "http://registry.npm.taobao.org/babel-code-frame/download/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" 192 | dependencies: 193 | chalk "^1.1.3" 194 | esutils "^2.0.2" 195 | js-tokens "^3.0.2" 196 | 197 | babel-generator@^6.18.0: 198 | version "6.26.1" 199 | resolved "http://registry.npm.taobao.org/babel-generator/download/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" 200 | dependencies: 201 | babel-messages "^6.23.0" 202 | babel-runtime "^6.26.0" 203 | babel-types "^6.26.0" 204 | detect-indent "^4.0.0" 205 | jsesc "^1.3.0" 206 | lodash "^4.17.4" 207 | source-map "^0.5.7" 208 | trim-right "^1.0.1" 209 | 210 | babel-messages@^6.23.0: 211 | version "6.23.0" 212 | resolved "http://registry.npm.taobao.org/babel-messages/download/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" 213 | dependencies: 214 | babel-runtime "^6.22.0" 215 | 216 | babel-runtime@^6.22.0, babel-runtime@^6.26.0: 217 | version "6.26.0" 218 | resolved "http://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" 219 | dependencies: 220 | core-js "^2.4.0" 221 | regenerator-runtime "^0.11.0" 222 | 223 | babel-template@^6.16.0: 224 | version "6.26.0" 225 | resolved "http://registry.npm.taobao.org/babel-template/download/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" 226 | dependencies: 227 | babel-runtime "^6.26.0" 228 | babel-traverse "^6.26.0" 229 | babel-types "^6.26.0" 230 | babylon "^6.18.0" 231 | lodash "^4.17.4" 232 | 233 | babel-traverse@^6.18.0, babel-traverse@^6.26.0: 234 | version "6.26.0" 235 | resolved "http://registry.npm.taobao.org/babel-traverse/download/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" 236 | dependencies: 237 | babel-code-frame "^6.26.0" 238 | babel-messages "^6.23.0" 239 | babel-runtime "^6.26.0" 240 | babel-types "^6.26.0" 241 | babylon "^6.18.0" 242 | debug "^2.6.8" 243 | globals "^9.18.0" 244 | invariant "^2.2.2" 245 | lodash "^4.17.4" 246 | 247 | babel-types@^6.18.0, babel-types@^6.26.0: 248 | version "6.26.0" 249 | resolved "http://registry.npm.taobao.org/babel-types/download/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" 250 | dependencies: 251 | babel-runtime "^6.26.0" 252 | esutils "^2.0.2" 253 | lodash "^4.17.4" 254 | to-fast-properties "^1.0.3" 255 | 256 | babylon@^6.18.0: 257 | version "6.18.0" 258 | resolved "http://registry.npm.taobao.org/babylon/download/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" 259 | 260 | balanced-match@^1.0.0: 261 | version "1.0.0" 262 | resolved "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 263 | 264 | base@^0.11.1: 265 | version "0.11.2" 266 | resolved "http://registry.npm.taobao.org/base/download/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" 267 | dependencies: 268 | cache-base "^1.0.1" 269 | class-utils "^0.3.5" 270 | component-emitter "^1.2.1" 271 | define-property "^1.0.0" 272 | isobject "^3.0.1" 273 | mixin-deep "^1.2.0" 274 | pascalcase "^0.1.1" 275 | 276 | bcrypt-pbkdf@^1.0.0: 277 | version "1.0.2" 278 | resolved "http://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" 279 | dependencies: 280 | tweetnacl "^0.14.3" 281 | 282 | binary-extensions@^1.0.0: 283 | version "1.11.0" 284 | resolved "http://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" 285 | 286 | bind-obj-methods@^2.0.0: 287 | version "2.0.0" 288 | resolved "http://registry.npm.taobao.org/bind-obj-methods/download/bind-obj-methods-2.0.0.tgz#0178140dbe7b7bb67dc74892ace59bc0247f06f0" 289 | 290 | bluebird@3.5.1: 291 | version "3.5.1" 292 | resolved "http://registry.npm.taobao.org/bluebird/download/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" 293 | 294 | bluebird@^3.5.1: 295 | version "3.5.2" 296 | resolved "http://registry.npm.taobao.org/bluebird/download/bluebird-3.5.2.tgz#1be0908e054a751754549c270489c1505d4ab15a" 297 | 298 | boxen@^1.2.1: 299 | version "1.3.0" 300 | resolved "http://registry.npm.taobao.org/boxen/download/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" 301 | dependencies: 302 | ansi-align "^2.0.0" 303 | camelcase "^4.0.0" 304 | chalk "^2.0.1" 305 | cli-boxes "^1.0.0" 306 | string-width "^2.0.0" 307 | term-size "^1.2.0" 308 | widest-line "^2.0.0" 309 | 310 | brace-expansion@^1.1.7: 311 | version "1.1.11" 312 | resolved "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 313 | dependencies: 314 | balanced-match "^1.0.0" 315 | concat-map "0.0.1" 316 | 317 | braces@^1.8.2: 318 | version "1.8.5" 319 | resolved "http://registry.npm.taobao.org/braces/download/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" 320 | dependencies: 321 | expand-range "^1.8.1" 322 | preserve "^0.2.0" 323 | repeat-element "^1.1.2" 324 | 325 | braces@^2.3.0, braces@^2.3.1: 326 | version "2.3.2" 327 | resolved "http://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" 328 | dependencies: 329 | arr-flatten "^1.1.0" 330 | array-unique "^0.3.2" 331 | extend-shallow "^2.0.1" 332 | fill-range "^4.0.0" 333 | isobject "^3.0.1" 334 | repeat-element "^1.1.2" 335 | snapdragon "^0.8.1" 336 | snapdragon-node "^2.0.1" 337 | split-string "^3.0.2" 338 | to-regex "^3.0.1" 339 | 340 | bson@^1.1.0: 341 | version "1.1.0" 342 | resolved "http://registry.npm.taobao.org/bson/download/bson-1.1.0.tgz#bee57d1fb6a87713471af4e32bcae36de814b5b0" 343 | 344 | bson@~1.0.5: 345 | version "1.0.9" 346 | resolved "http://registry.npm.taobao.org/bson/download/bson-1.0.9.tgz#12319f8323b1254739b7c6bef8d3e89ae05a2f57" 347 | 348 | buffer-equal-constant-time@1.0.1: 349 | version "1.0.1" 350 | resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" 351 | 352 | buffer-from@^1.0.0: 353 | version "1.1.1" 354 | resolved "http://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 355 | 356 | builtin-modules@^1.0.0: 357 | version "1.1.1" 358 | resolved "http://registry.npm.taobao.org/builtin-modules/download/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 359 | 360 | busboy@^0.2.14: 361 | version "0.2.14" 362 | resolved "http://registry.npm.taobao.org/busboy/download/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453" 363 | dependencies: 364 | dicer "0.2.5" 365 | readable-stream "1.1.x" 366 | 367 | cache-base@^1.0.1: 368 | version "1.0.1" 369 | resolved "http://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" 370 | dependencies: 371 | collection-visit "^1.0.0" 372 | component-emitter "^1.2.1" 373 | get-value "^2.0.6" 374 | has-value "^1.0.0" 375 | isobject "^3.0.1" 376 | set-value "^2.0.0" 377 | to-object-path "^0.3.0" 378 | union-value "^1.0.0" 379 | unset-value "^1.0.0" 380 | 381 | caching-transform@^1.0.0: 382 | version "1.0.1" 383 | resolved "http://registry.npm.taobao.org/caching-transform/download/caching-transform-1.0.1.tgz#6dbdb2f20f8d8fbce79f3e94e9d1742dcdf5c0a1" 384 | dependencies: 385 | md5-hex "^1.2.0" 386 | mkdirp "^0.5.1" 387 | write-file-atomic "^1.1.4" 388 | 389 | callback-stream@^1.0.2: 390 | version "1.1.0" 391 | resolved "http://registry.npm.taobao.org/callback-stream/download/callback-stream-1.1.0.tgz#4701a51266f06e06eaa71fc17233822d875f4908" 392 | dependencies: 393 | inherits "^2.0.1" 394 | readable-stream "> 1.0.0 < 3.0.0" 395 | 396 | camelcase@^4.0.0, camelcase@^4.1.0: 397 | version "4.1.0" 398 | resolved "http://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" 399 | 400 | capture-stack-trace@^1.0.0: 401 | version "1.0.1" 402 | resolved "http://registry.npm.taobao.org/capture-stack-trace/download/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" 403 | 404 | caseless@~0.12.0: 405 | version "0.12.0" 406 | resolved "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 407 | 408 | chalk@^1.1.3: 409 | version "1.1.3" 410 | resolved "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 411 | dependencies: 412 | ansi-styles "^2.2.1" 413 | escape-string-regexp "^1.0.2" 414 | has-ansi "^2.0.0" 415 | strip-ansi "^3.0.0" 416 | supports-color "^2.0.0" 417 | 418 | chalk@^2.0.1, chalk@^2.4.1: 419 | version "2.4.1" 420 | resolved "http://registry.npm.taobao.org/chalk/download/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" 421 | dependencies: 422 | ansi-styles "^3.2.1" 423 | escape-string-regexp "^1.0.5" 424 | supports-color "^5.3.0" 425 | 426 | charenc@~0.0.1: 427 | version "0.0.2" 428 | resolved "http://registry.npm.taobao.org/charenc/download/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" 429 | 430 | chokidar@^2.0.4: 431 | version "2.0.4" 432 | resolved "http://registry.npm.taobao.org/chokidar/download/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" 433 | dependencies: 434 | anymatch "^2.0.0" 435 | async-each "^1.0.0" 436 | braces "^2.3.0" 437 | glob-parent "^3.1.0" 438 | inherits "^2.0.1" 439 | is-binary-path "^1.0.0" 440 | is-glob "^4.0.0" 441 | lodash.debounce "^4.0.8" 442 | normalize-path "^2.1.1" 443 | path-is-absolute "^1.0.0" 444 | readdirp "^2.0.0" 445 | upath "^1.0.5" 446 | optionalDependencies: 447 | fsevents "^1.2.2" 448 | 449 | chownr@^1.0.1: 450 | version "1.0.1" 451 | resolved "http://registry.npm.taobao.org/chownr/download/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" 452 | 453 | ci-info@^1.5.0: 454 | version "1.5.1" 455 | resolved "http://registry.npm.taobao.org/ci-info/download/ci-info-1.5.1.tgz#17e8eb5de6f8b2b6038f0cbb714d410bfa9f3030" 456 | 457 | class-utils@^0.3.5: 458 | version "0.3.6" 459 | resolved "http://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" 460 | dependencies: 461 | arr-union "^3.1.0" 462 | define-property "^0.2.5" 463 | isobject "^3.0.0" 464 | static-extend "^0.1.1" 465 | 466 | clean-yaml-object@^0.1.0: 467 | version "0.1.0" 468 | resolved "http://registry.npm.taobao.org/clean-yaml-object/download/clean-yaml-object-0.1.0.tgz#63fb110dc2ce1a84dc21f6d9334876d010ae8b68" 469 | 470 | cli-boxes@^1.0.0: 471 | version "1.0.0" 472 | resolved "http://registry.npm.taobao.org/cli-boxes/download/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" 473 | 474 | cliui@^4.0.0: 475 | version "4.1.0" 476 | resolved "http://registry.npm.taobao.org/cliui/download/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" 477 | dependencies: 478 | string-width "^2.1.1" 479 | strip-ansi "^4.0.0" 480 | wrap-ansi "^2.0.0" 481 | 482 | co@^4.6.0: 483 | version "4.6.0" 484 | resolved "http://registry.npm.taobao.org/co/download/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 485 | 486 | code-point-at@^1.0.0: 487 | version "1.1.0" 488 | resolved "http://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 489 | 490 | collection-visit@^1.0.0: 491 | version "1.0.0" 492 | resolved "http://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" 493 | dependencies: 494 | map-visit "^1.0.0" 495 | object-visit "^1.0.0" 496 | 497 | color-convert@^1.9.0: 498 | version "1.9.3" 499 | resolved "http://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 500 | dependencies: 501 | color-name "1.1.3" 502 | 503 | color-name@1.1.3: 504 | version "1.1.3" 505 | resolved "http://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 506 | 507 | color-support@^1.1.0: 508 | version "1.1.3" 509 | resolved "http://registry.npm.taobao.org/color-support/download/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" 510 | 511 | combined-stream@1.0.6, combined-stream@~1.0.6: 512 | version "1.0.6" 513 | resolved "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" 514 | dependencies: 515 | delayed-stream "~1.0.0" 516 | 517 | commander@~2.17.1: 518 | version "2.17.1" 519 | resolved "http://registry.npm.taobao.org/commander/download/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" 520 | 521 | commist@^1.0.0: 522 | version "1.0.0" 523 | resolved "http://registry.npm.taobao.org/commist/download/commist-1.0.0.tgz#c0c352501cf6f52e9124e3ef89c9806e2022ebef" 524 | dependencies: 525 | leven "^1.0.0" 526 | minimist "^1.1.0" 527 | 528 | commondir@^1.0.1: 529 | version "1.0.1" 530 | resolved "http://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" 531 | 532 | component-emitter@^1.2.1: 533 | version "1.2.1" 534 | resolved "http://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" 535 | 536 | concat-map@0.0.1: 537 | version "0.0.1" 538 | resolved "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 539 | 540 | configstore@^3.0.0: 541 | version "3.1.2" 542 | resolved "http://registry.npm.taobao.org/configstore/download/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" 543 | dependencies: 544 | dot-prop "^4.1.0" 545 | graceful-fs "^4.1.2" 546 | make-dir "^1.0.0" 547 | unique-string "^1.0.0" 548 | write-file-atomic "^2.0.0" 549 | xdg-basedir "^3.0.0" 550 | 551 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 552 | version "1.1.0" 553 | resolved "http://registry.npm.taobao.org/console-control-strings/download/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 554 | 555 | convert-source-map@^1.5.1: 556 | version "1.6.0" 557 | resolved "http://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" 558 | dependencies: 559 | safe-buffer "~5.1.1" 560 | 561 | copy-descriptor@^0.1.0: 562 | version "0.1.1" 563 | resolved "http://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" 564 | 565 | core-js@^2.4.0: 566 | version "2.5.7" 567 | resolved "http://registry.npm.taobao.org/core-js/download/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" 568 | 569 | core-util-is@1.0.2, core-util-is@~1.0.0: 570 | version "1.0.2" 571 | resolved "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 572 | 573 | coveralls@^3.0.1: 574 | version "3.0.2" 575 | resolved "http://registry.npm.taobao.org/coveralls/download/coveralls-3.0.2.tgz#f5a0bcd90ca4e64e088b710fa8dda640aea4884f" 576 | dependencies: 577 | growl "~> 1.10.0" 578 | js-yaml "^3.11.0" 579 | lcov-parse "^0.0.10" 580 | log-driver "^1.2.7" 581 | minimist "^1.2.0" 582 | request "^2.85.0" 583 | 584 | create-error-class@^3.0.0: 585 | version "3.0.2" 586 | resolved "http://registry.npm.taobao.org/create-error-class/download/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" 587 | dependencies: 588 | capture-stack-trace "^1.0.0" 589 | 590 | cross-spawn@^4, cross-spawn@^4.0.0: 591 | version "4.0.2" 592 | resolved "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" 593 | dependencies: 594 | lru-cache "^4.0.1" 595 | which "^1.2.9" 596 | 597 | cross-spawn@^5.0.1: 598 | version "5.1.0" 599 | resolved "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" 600 | dependencies: 601 | lru-cache "^4.0.1" 602 | shebang-command "^1.2.0" 603 | which "^1.2.9" 604 | 605 | crypt@~0.0.1: 606 | version "0.0.2" 607 | resolved "http://registry.npm.taobao.org/crypt/download/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" 608 | 609 | crypto-random-string@^1.0.0: 610 | version "1.0.0" 611 | resolved "http://registry.npm.taobao.org/crypto-random-string/download/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" 612 | 613 | dashdash@^1.12.0: 614 | version "1.14.1" 615 | resolved "http://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 616 | dependencies: 617 | assert-plus "^1.0.0" 618 | 619 | debug-log@^1.0.1: 620 | version "1.0.1" 621 | resolved "http://registry.npm.taobao.org/debug-log/download/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f" 622 | 623 | debug@2.6.9, debug@^2.1.2, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: 624 | version "2.6.9" 625 | resolved "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 626 | dependencies: 627 | ms "2.0.0" 628 | 629 | debug@3.1.0: 630 | version "3.1.0" 631 | resolved "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" 632 | dependencies: 633 | ms "2.0.0" 634 | 635 | debug@^3.1.0: 636 | version "3.2.4" 637 | resolved "http://registry.npm.taobao.org/debug/download/debug-3.2.4.tgz#82123737c51afbe9609a2b5dfe9664e7487171f0" 638 | dependencies: 639 | ms "^2.1.1" 640 | 641 | decamelize@^1.1.1: 642 | version "1.2.0" 643 | resolved "http://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 644 | 645 | decode-uri-component@^0.2.0: 646 | version "0.2.0" 647 | resolved "http://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" 648 | 649 | deep-extend@^0.6.0: 650 | version "0.6.0" 651 | resolved "http://registry.npm.taobao.org/deep-extend/download/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 652 | 653 | deepmerge@^2.1.1: 654 | version "2.1.1" 655 | resolved "http://registry.npm.taobao.org/deepmerge/download/deepmerge-2.1.1.tgz#e862b4e45ea0555072bf51e7fd0d9845170ae768" 656 | 657 | default-require-extensions@^1.0.0: 658 | version "1.0.0" 659 | resolved "http://registry.npm.taobao.org/default-require-extensions/download/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" 660 | dependencies: 661 | strip-bom "^2.0.0" 662 | 663 | define-property@^0.2.5: 664 | version "0.2.5" 665 | resolved "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" 666 | dependencies: 667 | is-descriptor "^0.1.0" 668 | 669 | define-property@^1.0.0: 670 | version "1.0.0" 671 | resolved "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" 672 | dependencies: 673 | is-descriptor "^1.0.0" 674 | 675 | define-property@^2.0.2: 676 | version "2.0.2" 677 | resolved "http://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" 678 | dependencies: 679 | is-descriptor "^1.0.2" 680 | isobject "^3.0.1" 681 | 682 | delayed-stream@~1.0.0: 683 | version "1.0.0" 684 | resolved "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 685 | 686 | delegates@^1.0.0: 687 | version "1.0.0" 688 | resolved "http://registry.npm.taobao.org/delegates/download/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 689 | 690 | depd@~1.1.2: 691 | version "1.1.2" 692 | resolved "http://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 693 | 694 | destroy@~1.0.4: 695 | version "1.0.4" 696 | resolved "http://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 697 | 698 | detect-indent@^4.0.0: 699 | version "4.0.0" 700 | resolved "http://registry.npm.taobao.org/detect-indent/download/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" 701 | dependencies: 702 | repeating "^2.0.0" 703 | 704 | detect-libc@^1.0.2: 705 | version "1.0.3" 706 | resolved "http://registry.npm.taobao.org/detect-libc/download/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" 707 | 708 | dicer@0.2.5: 709 | version "0.2.5" 710 | resolved "http://registry.npm.taobao.org/dicer/download/dicer-0.2.5.tgz#5996c086bb33218c812c090bddc09cd12facb70f" 711 | dependencies: 712 | readable-stream "1.1.x" 713 | streamsearch "0.1.2" 714 | 715 | diff@^1.3.2: 716 | version "1.4.0" 717 | resolved "http://registry.npm.taobao.org/diff/download/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" 718 | 719 | dot-prop@^4.1.0: 720 | version "4.2.0" 721 | resolved "http://registry.npm.taobao.org/dot-prop/download/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" 722 | dependencies: 723 | is-obj "^1.0.0" 724 | 725 | dotenv@^6.0.0: 726 | version "6.0.0" 727 | resolved "http://registry.npm.taobao.org/dotenv/download/dotenv-6.0.0.tgz#24e37c041741c5f4b25324958ebbc34bca965935" 728 | 729 | duplexer3@^0.1.4: 730 | version "0.1.4" 731 | resolved "http://registry.npm.taobao.org/duplexer3/download/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" 732 | 733 | duplexify@^3.6.0: 734 | version "3.6.0" 735 | resolved "http://registry.npm.taobao.org/duplexify/download/duplexify-3.6.0.tgz#592903f5d80b38d037220541264d69a198fb3410" 736 | dependencies: 737 | end-of-stream "^1.0.0" 738 | inherits "^2.0.1" 739 | readable-stream "^2.0.0" 740 | stream-shift "^1.0.0" 741 | 742 | ecc-jsbn@~0.1.1: 743 | version "0.1.2" 744 | resolved "http://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" 745 | dependencies: 746 | jsbn "~0.1.0" 747 | safer-buffer "^2.1.0" 748 | 749 | ecdsa-sig-formatter@1.0.10: 750 | version "1.0.10" 751 | resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.10.tgz#1c595000f04a8897dfb85000892a0f4c33af86c3" 752 | dependencies: 753 | safe-buffer "^5.0.1" 754 | 755 | ee-first@1.1.1: 756 | version "1.1.1" 757 | resolved "http://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 758 | 759 | encodeurl@~1.0.2: 760 | version "1.0.2" 761 | resolved "http://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 762 | 763 | end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: 764 | version "1.4.1" 765 | resolved "http://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" 766 | dependencies: 767 | once "^1.4.0" 768 | 769 | error-ex@^1.2.0: 770 | version "1.3.2" 771 | resolved "http://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 772 | dependencies: 773 | is-arrayish "^0.2.1" 774 | 775 | escape-html@~1.0.3: 776 | version "1.0.3" 777 | resolved "http://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 778 | 779 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.3, escape-string-regexp@^1.0.5: 780 | version "1.0.5" 781 | resolved "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 782 | 783 | esprima@^4.0.0: 784 | version "4.0.1" 785 | resolved "http://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 786 | 787 | esutils@^2.0.2: 788 | version "2.0.2" 789 | resolved "http://registry.npm.taobao.org/esutils/download/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 790 | 791 | etag@~1.8.1: 792 | version "1.8.1" 793 | resolved "http://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 794 | 795 | events-to-array@^1.0.1: 796 | version "1.1.2" 797 | resolved "http://registry.npm.taobao.org/events-to-array/download/events-to-array-1.1.2.tgz#2d41f563e1fe400ed4962fe1a4d5c6a7539df7f6" 798 | 799 | execa@^0.7.0: 800 | version "0.7.0" 801 | resolved "http://registry.npm.taobao.org/execa/download/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" 802 | dependencies: 803 | cross-spawn "^5.0.1" 804 | get-stream "^3.0.0" 805 | is-stream "^1.1.0" 806 | npm-run-path "^2.0.0" 807 | p-finally "^1.0.0" 808 | signal-exit "^3.0.0" 809 | strip-eof "^1.0.0" 810 | 811 | expand-brackets@^0.1.4: 812 | version "0.1.5" 813 | resolved "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" 814 | dependencies: 815 | is-posix-bracket "^0.1.0" 816 | 817 | expand-brackets@^2.1.4: 818 | version "2.1.4" 819 | resolved "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" 820 | dependencies: 821 | debug "^2.3.3" 822 | define-property "^0.2.5" 823 | extend-shallow "^2.0.1" 824 | posix-character-classes "^0.1.0" 825 | regex-not "^1.0.0" 826 | snapdragon "^0.8.1" 827 | to-regex "^3.0.1" 828 | 829 | expand-range@^1.8.1: 830 | version "1.8.2" 831 | resolved "http://registry.npm.taobao.org/expand-range/download/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" 832 | dependencies: 833 | fill-range "^2.1.0" 834 | 835 | express-fileupload@^0.4.0: 836 | version "0.4.0" 837 | resolved "http://registry.npm.taobao.org/express-fileupload/download/express-fileupload-0.4.0.tgz#de6d1dbe3122732c416f6965aa88bbf70721ad84" 838 | dependencies: 839 | busboy "^0.2.14" 840 | fs-extra "^4.0.1" 841 | md5 "^2.2.1" 842 | streamifier "^0.1.1" 843 | 844 | extend-shallow@^2.0.1: 845 | version "2.0.1" 846 | resolved "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" 847 | dependencies: 848 | is-extendable "^0.1.0" 849 | 850 | extend-shallow@^3.0.0, extend-shallow@^3.0.2: 851 | version "3.0.2" 852 | resolved "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" 853 | dependencies: 854 | assign-symbols "^1.0.0" 855 | is-extendable "^1.0.1" 856 | 857 | extend@^3.0.0, extend@~3.0.2: 858 | version "3.0.2" 859 | resolved "http://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 860 | 861 | extglob@^0.3.1: 862 | version "0.3.2" 863 | resolved "http://registry.npm.taobao.org/extglob/download/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" 864 | dependencies: 865 | is-extglob "^1.0.0" 866 | 867 | extglob@^2.0.4: 868 | version "2.0.4" 869 | resolved "http://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" 870 | dependencies: 871 | array-unique "^0.3.2" 872 | define-property "^1.0.0" 873 | expand-brackets "^2.1.4" 874 | extend-shallow "^2.0.1" 875 | fragment-cache "^0.2.1" 876 | regex-not "^1.0.0" 877 | snapdragon "^0.8.1" 878 | to-regex "^3.0.1" 879 | 880 | extsprintf@1.3.0: 881 | version "1.3.0" 882 | resolved "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 883 | 884 | extsprintf@^1.2.0: 885 | version "1.4.0" 886 | resolved "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" 887 | 888 | fast-decode-uri-component@^1.0.0: 889 | version "1.0.0" 890 | resolved "http://registry.npm.taobao.org/fast-decode-uri-component/download/fast-decode-uri-component-1.0.0.tgz#7ce10336aa4b26286fee93d71e6785ff0f596a33" 891 | 892 | fast-deep-equal@^1.0.0: 893 | version "1.1.0" 894 | resolved "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" 895 | 896 | fast-deep-equal@^2.0.1: 897 | version "2.0.1" 898 | resolved "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" 899 | 900 | fast-json-parse@^1.0.2, fast-json-parse@^1.0.3: 901 | version "1.0.3" 902 | resolved "http://registry.npm.taobao.org/fast-json-parse/download/fast-json-parse-1.0.3.tgz#43e5c61ee4efa9265633046b770fb682a7577c4d" 903 | 904 | fast-json-stable-stringify@^2.0.0: 905 | version "2.0.0" 906 | resolved "http://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 907 | 908 | fast-json-stringify@^1.5.4: 909 | version "1.7.2" 910 | resolved "http://registry.npm.taobao.org/fast-json-stringify/download/fast-json-stringify-1.7.2.tgz#363b49fda714de0c672ad879a07dfc3aba41d216" 911 | dependencies: 912 | ajv "^6.5.3" 913 | deepmerge "^2.1.1" 914 | 915 | fast-safe-stringify@^1.0.8, fast-safe-stringify@^1.2.3: 916 | version "1.2.3" 917 | resolved "http://registry.npm.taobao.org/fast-safe-stringify/download/fast-safe-stringify-1.2.3.tgz#9fe22c37fb2f7f86f06b8f004377dbf8f1ee7bc1" 918 | 919 | fastfall@^1.5.0: 920 | version "1.5.1" 921 | resolved "http://registry.npm.taobao.org/fastfall/download/fastfall-1.5.1.tgz#3fee03331a49d1d39b3cdf7a5e9cd66f475e7b94" 922 | dependencies: 923 | reusify "^1.0.0" 924 | 925 | fastify-autoload@^0.5.0: 926 | version "0.5.0" 927 | resolved "http://registry.npm.taobao.org/fastify-autoload/download/fastify-autoload-0.5.0.tgz#c1aa5edc6de611ed9f2e6bb7341265f94848d19f" 928 | dependencies: 929 | steed "^1.1.3" 930 | 931 | fastify-cli@^0.22.1: 932 | version "0.22.1" 933 | resolved "http://registry.npm.taobao.org/fastify-cli/download/fastify-cli-0.22.1.tgz#6a4be32cadc935419075bbe515d5400a8b7f4f55" 934 | dependencies: 935 | chalk "^2.4.1" 936 | chokidar "^2.0.4" 937 | commist "^1.0.0" 938 | dotenv "^6.0.0" 939 | fastify "^1.11.0" 940 | fastify-plugin "^1.2.0" 941 | generify "^3.0.0" 942 | help-me "^1.1.0" 943 | is-docker "^1.1.0" 944 | make-promises-safe "^1.1.0" 945 | minimist "^1.2.0" 946 | pino-colada "^1.4.4" 947 | pump "^3.0.0" 948 | resolve-from "^4.0.0" 949 | update-notifier "^2.4.0" 950 | 951 | fastify-cors@^0.1.0: 952 | version "0.1.0" 953 | resolved "http://registry.npm.taobao.org/fastify-cors/download/fastify-cors-0.1.0.tgz#58b04b056eb42a3d4ef7f916f376016ca9088c7f" 954 | dependencies: 955 | fastify-plugin "^1.2.0" 956 | vary "^1.1.2" 957 | 958 | fastify-file-upload@^0.1.1: 959 | version "0.1.1" 960 | resolved "http://registry.npm.taobao.org/fastify-file-upload/download/fastify-file-upload-0.1.1.tgz#c3b043745586a7d86a26922c10eec9d576c43507" 961 | dependencies: 962 | express-fileupload "^0.4.0" 963 | fastify-plugin "^0.2.2" 964 | 965 | fastify-formbody@^2.0.1: 966 | version "2.0.1" 967 | resolved "http://registry.npm.taobao.org/fastify-formbody/download/fastify-formbody-2.0.1.tgz#9c5921326122f4f02aaa41346bf8ef58386bdfd3" 968 | dependencies: 969 | fastify-plugin "^1.0.0" 970 | qs "^6.5.1" 971 | 972 | fastify-jwt@^0.3.0: 973 | version "0.3.0" 974 | resolved "https://registry.yarnpkg.com/fastify-jwt/-/fastify-jwt-0.3.0.tgz#24bb37dc120de34220a1d9ac54c3621dd8387f4b" 975 | dependencies: 976 | fastify-plugin "^1.0.1" 977 | jsonwebtoken "^8.2.0" 978 | steed "^1.1.3" 979 | 980 | fastify-plugin@^0.2.2: 981 | version "0.2.2" 982 | resolved "http://registry.npm.taobao.org/fastify-plugin/download/fastify-plugin-0.2.2.tgz#e01b67685fd02e87edc98670ce2acfe251a2c715" 983 | dependencies: 984 | semver "^5.4.1" 985 | 986 | fastify-plugin@^1.0.0: 987 | version "1.2.1" 988 | resolved "http://registry.npm.taobao.org/fastify-plugin/download/fastify-plugin-1.2.1.tgz#77bd6c517de0096bf26deb28d1b7c87080c1ba59" 989 | dependencies: 990 | semver "^5.5.0" 991 | 992 | fastify-plugin@^1.0.1, fastify-plugin@^1.2.0: 993 | version "1.2.0" 994 | resolved "http://registry.npm.taobao.org/fastify-plugin/download/fastify-plugin-1.2.0.tgz#b87274ad9d14e41efcd3240c64f5dee4c39b2154" 995 | dependencies: 996 | semver "^5.5.0" 997 | 998 | fastify-static@^0.14.0: 999 | version "0.14.0" 1000 | resolved "http://registry.npm.taobao.org/fastify-static/download/fastify-static-0.14.0.tgz#e8f914cce72a8d6e40abfeb896c07458d4eaa3fe" 1001 | dependencies: 1002 | fastify-plugin "^1.2.0" 1003 | readable-stream "^3.0.0" 1004 | send "^0.16.0" 1005 | 1006 | fastify@^1.11.0: 1007 | version "1.11.2" 1008 | resolved "http://registry.npm.taobao.org/fastify/download/fastify-1.11.2.tgz#7495c8134e21e13dccd6bc6b5d036f187faa276e" 1009 | dependencies: 1010 | "@types/pino" "^4.16.0" 1011 | abstract-logging "^1.0.0" 1012 | ajv "^6.5.2" 1013 | avvio "^5.8.0" 1014 | end-of-stream "^1.4.1" 1015 | fast-json-stringify "^1.5.4" 1016 | find-my-way "^1.15.0" 1017 | flatstr "^1.0.8" 1018 | light-my-request "^3.0.0" 1019 | middie "^3.1.0" 1020 | pino "^4.17.3" 1021 | proxy-addr "^2.0.3" 1022 | tiny-lru "^1.6.1" 1023 | 1024 | fastparallel@^2.2.0: 1025 | version "2.3.0" 1026 | resolved "http://registry.npm.taobao.org/fastparallel/download/fastparallel-2.3.0.tgz#1e709bfb6a03993f3857e3ce7f01311ce7602613" 1027 | dependencies: 1028 | reusify "^1.0.0" 1029 | xtend "^4.0.1" 1030 | 1031 | fastq@^1.3.0, fastq@^1.6.0: 1032 | version "1.6.0" 1033 | resolved "http://registry.npm.taobao.org/fastq/download/fastq-1.6.0.tgz#4ec8a38f4ac25f21492673adb7eae9cfef47d1c2" 1034 | dependencies: 1035 | reusify "^1.0.0" 1036 | 1037 | fastseries@^1.7.0: 1038 | version "1.7.2" 1039 | resolved "http://registry.npm.taobao.org/fastseries/download/fastseries-1.7.2.tgz#d22ce13b9433dff3388d91dbd6b8bda9b21a0f4b" 1040 | dependencies: 1041 | reusify "^1.0.0" 1042 | xtend "^4.0.0" 1043 | 1044 | filename-regex@^2.0.0: 1045 | version "2.0.1" 1046 | resolved "http://registry.npm.taobao.org/filename-regex/download/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" 1047 | 1048 | fill-range@^2.1.0: 1049 | version "2.2.4" 1050 | resolved "http://registry.npm.taobao.org/fill-range/download/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" 1051 | dependencies: 1052 | is-number "^2.1.0" 1053 | isobject "^2.0.0" 1054 | randomatic "^3.0.0" 1055 | repeat-element "^1.1.2" 1056 | repeat-string "^1.5.2" 1057 | 1058 | fill-range@^4.0.0: 1059 | version "4.0.0" 1060 | resolved "http://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" 1061 | dependencies: 1062 | extend-shallow "^2.0.1" 1063 | is-number "^3.0.0" 1064 | repeat-string "^1.6.1" 1065 | to-regex-range "^2.1.0" 1066 | 1067 | find-cache-dir@^0.1.1: 1068 | version "0.1.1" 1069 | resolved "http://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" 1070 | dependencies: 1071 | commondir "^1.0.1" 1072 | mkdirp "^0.5.1" 1073 | pkg-dir "^1.0.0" 1074 | 1075 | find-my-way@^1.15.0: 1076 | version "1.15.2" 1077 | resolved "http://registry.npm.taobao.org/find-my-way/download/find-my-way-1.15.2.tgz#7e9a0627de03ad7a41959f37c9086ceb9a5f5090" 1078 | dependencies: 1079 | fast-decode-uri-component "^1.0.0" 1080 | safe-regex "^1.1.0" 1081 | semver-store "^0.3.0" 1082 | 1083 | find-up@^1.0.0: 1084 | version "1.1.2" 1085 | resolved "http://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" 1086 | dependencies: 1087 | path-exists "^2.0.0" 1088 | pinkie-promise "^2.0.0" 1089 | 1090 | find-up@^2.1.0: 1091 | version "2.1.0" 1092 | resolved "http://registry.npm.taobao.org/find-up/download/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" 1093 | dependencies: 1094 | locate-path "^2.0.0" 1095 | 1096 | flatstr@^1.0.5, flatstr@^1.0.8: 1097 | version "1.0.8" 1098 | resolved "http://registry.npm.taobao.org/flatstr/download/flatstr-1.0.8.tgz#0e849229751f2b9f6a0919f8e81e1229e84ba901" 1099 | 1100 | for-in@^1.0.1, for-in@^1.0.2: 1101 | version "1.0.2" 1102 | resolved "http://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 1103 | 1104 | for-own@^0.1.4: 1105 | version "0.1.5" 1106 | resolved "http://registry.npm.taobao.org/for-own/download/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" 1107 | dependencies: 1108 | for-in "^1.0.1" 1109 | 1110 | foreground-child@^1.3.3, foreground-child@^1.5.3, foreground-child@^1.5.6: 1111 | version "1.5.6" 1112 | resolved "http://registry.npm.taobao.org/foreground-child/download/foreground-child-1.5.6.tgz#4fd71ad2dfde96789b980a5c0a295937cb2f5ce9" 1113 | dependencies: 1114 | cross-spawn "^4" 1115 | signal-exit "^3.0.0" 1116 | 1117 | forever-agent@~0.6.1: 1118 | version "0.6.1" 1119 | resolved "http://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 1120 | 1121 | form-data@~2.3.2: 1122 | version "2.3.2" 1123 | resolved "http://registry.npm.taobao.org/form-data/download/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" 1124 | dependencies: 1125 | asynckit "^0.4.0" 1126 | combined-stream "1.0.6" 1127 | mime-types "^2.1.12" 1128 | 1129 | forwarded@~0.1.2: 1130 | version "0.1.2" 1131 | resolved "http://registry.npm.taobao.org/forwarded/download/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" 1132 | 1133 | fragment-cache@^0.2.1: 1134 | version "0.2.1" 1135 | resolved "http://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" 1136 | dependencies: 1137 | map-cache "^0.2.2" 1138 | 1139 | fresh@0.5.2: 1140 | version "0.5.2" 1141 | resolved "http://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 1142 | 1143 | fs-exists-cached@^1.0.0: 1144 | version "1.0.0" 1145 | resolved "http://registry.npm.taobao.org/fs-exists-cached/download/fs-exists-cached-1.0.0.tgz#cf25554ca050dc49ae6656b41de42258989dcbce" 1146 | 1147 | fs-extra@^4.0.1: 1148 | version "4.0.3" 1149 | resolved "http://registry.npm.taobao.org/fs-extra/download/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" 1150 | dependencies: 1151 | graceful-fs "^4.1.2" 1152 | jsonfile "^4.0.0" 1153 | universalify "^0.1.0" 1154 | 1155 | fs-minipass@^1.2.5: 1156 | version "1.2.5" 1157 | resolved "http://registry.npm.taobao.org/fs-minipass/download/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" 1158 | dependencies: 1159 | minipass "^2.2.1" 1160 | 1161 | fs.realpath@^1.0.0: 1162 | version "1.0.0" 1163 | resolved "http://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1164 | 1165 | fsevents@^1.2.2: 1166 | version "1.2.4" 1167 | resolved "http://registry.npm.taobao.org/fsevents/download/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" 1168 | dependencies: 1169 | nan "^2.9.2" 1170 | node-pre-gyp "^0.10.0" 1171 | 1172 | function-loop@^1.0.1: 1173 | version "1.0.1" 1174 | resolved "http://registry.npm.taobao.org/function-loop/download/function-loop-1.0.1.tgz#8076bb305e8e6a3cceee2920765f330d190f340c" 1175 | 1176 | gauge@~2.7.3: 1177 | version "2.7.4" 1178 | resolved "http://registry.npm.taobao.org/gauge/download/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 1179 | dependencies: 1180 | aproba "^1.0.3" 1181 | console-control-strings "^1.0.0" 1182 | has-unicode "^2.0.0" 1183 | object-assign "^4.1.0" 1184 | signal-exit "^3.0.0" 1185 | string-width "^1.0.1" 1186 | strip-ansi "^3.0.1" 1187 | wide-align "^1.1.0" 1188 | 1189 | generify@^3.0.0: 1190 | version "3.0.1" 1191 | resolved "http://registry.npm.taobao.org/generify/download/generify-3.0.1.tgz#39b480099b0a6f22200e05d05df3fc1a0daf977e" 1192 | dependencies: 1193 | mkdirp "^0.5.0" 1194 | pump "^3.0.0" 1195 | split2 "^2.0.0" 1196 | walker "^1.0.6" 1197 | 1198 | get-caller-file@^1.0.1: 1199 | version "1.0.3" 1200 | resolved "http://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" 1201 | 1202 | get-stream@^3.0.0: 1203 | version "3.0.0" 1204 | resolved "http://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" 1205 | 1206 | get-value@^2.0.3, get-value@^2.0.6: 1207 | version "2.0.6" 1208 | resolved "http://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" 1209 | 1210 | getpass@^0.1.1: 1211 | version "0.1.7" 1212 | resolved "http://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 1213 | dependencies: 1214 | assert-plus "^1.0.0" 1215 | 1216 | glob-base@^0.3.0: 1217 | version "0.3.0" 1218 | resolved "http://registry.npm.taobao.org/glob-base/download/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" 1219 | dependencies: 1220 | glob-parent "^2.0.0" 1221 | is-glob "^2.0.0" 1222 | 1223 | glob-parent@^2.0.0: 1224 | version "2.0.0" 1225 | resolved "http://registry.npm.taobao.org/glob-parent/download/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" 1226 | dependencies: 1227 | is-glob "^2.0.0" 1228 | 1229 | glob-parent@^3.1.0: 1230 | version "3.1.0" 1231 | resolved "http://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" 1232 | dependencies: 1233 | is-glob "^3.1.0" 1234 | path-dirname "^1.0.0" 1235 | 1236 | glob-stream@^6.1.0: 1237 | version "6.1.0" 1238 | resolved "http://registry.npm.taobao.org/glob-stream/download/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" 1239 | dependencies: 1240 | extend "^3.0.0" 1241 | glob "^7.1.1" 1242 | glob-parent "^3.1.0" 1243 | is-negated-glob "^1.0.0" 1244 | ordered-read-streams "^1.0.0" 1245 | pumpify "^1.3.5" 1246 | readable-stream "^2.1.5" 1247 | remove-trailing-separator "^1.0.1" 1248 | to-absolute-glob "^2.0.0" 1249 | unique-stream "^2.0.2" 1250 | 1251 | glob@^7.0.0, glob@^7.0.5, glob@^7.0.6, glob@^7.1.1: 1252 | version "7.1.3" 1253 | resolved "http://registry.npm.taobao.org/glob/download/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" 1254 | dependencies: 1255 | fs.realpath "^1.0.0" 1256 | inflight "^1.0.4" 1257 | inherits "2" 1258 | minimatch "^3.0.4" 1259 | once "^1.3.0" 1260 | path-is-absolute "^1.0.0" 1261 | 1262 | global-dirs@^0.1.0: 1263 | version "0.1.1" 1264 | resolved "http://registry.npm.taobao.org/global-dirs/download/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" 1265 | dependencies: 1266 | ini "^1.3.4" 1267 | 1268 | globals@^9.18.0: 1269 | version "9.18.0" 1270 | resolved "http://registry.npm.taobao.org/globals/download/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" 1271 | 1272 | gm@^1.23.1: 1273 | version "1.23.1" 1274 | resolved "http://registry.npm.taobao.org/gm/download/gm-1.23.1.tgz#2edeeb958084d0f8ea7988e5d995b1c7dfc14777" 1275 | dependencies: 1276 | array-parallel "~0.1.3" 1277 | array-series "~0.1.5" 1278 | cross-spawn "^4.0.0" 1279 | debug "^3.1.0" 1280 | 1281 | got@^6.7.1: 1282 | version "6.7.1" 1283 | resolved "http://registry.npm.taobao.org/got/download/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" 1284 | dependencies: 1285 | create-error-class "^3.0.0" 1286 | duplexer3 "^0.1.4" 1287 | get-stream "^3.0.0" 1288 | is-redirect "^1.0.0" 1289 | is-retry-allowed "^1.0.0" 1290 | is-stream "^1.0.0" 1291 | lowercase-keys "^1.0.0" 1292 | safe-buffer "^5.0.1" 1293 | timed-out "^4.0.0" 1294 | unzip-response "^2.0.1" 1295 | url-parse-lax "^1.0.0" 1296 | 1297 | graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: 1298 | version "4.1.11" 1299 | resolved "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 1300 | 1301 | "growl@~> 1.10.0": 1302 | version "1.10.5" 1303 | resolved "http://registry.npm.taobao.org/growl/download/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 1304 | 1305 | handlebars@^4.0.3: 1306 | version "4.0.12" 1307 | resolved "http://registry.npm.taobao.org/handlebars/download/handlebars-4.0.12.tgz#2c15c8a96d46da5e266700518ba8cb8d919d5bc5" 1308 | dependencies: 1309 | async "^2.5.0" 1310 | optimist "^0.6.1" 1311 | source-map "^0.6.1" 1312 | optionalDependencies: 1313 | uglify-js "^3.1.4" 1314 | 1315 | har-schema@^2.0.0: 1316 | version "2.0.0" 1317 | resolved "http://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 1318 | 1319 | har-validator@~5.1.0: 1320 | version "5.1.0" 1321 | resolved "http://registry.npm.taobao.org/har-validator/download/har-validator-5.1.0.tgz#44657f5688a22cfd4b72486e81b3a3fb11742c29" 1322 | dependencies: 1323 | ajv "^5.3.0" 1324 | har-schema "^2.0.0" 1325 | 1326 | has-ansi@^2.0.0: 1327 | version "2.0.0" 1328 | resolved "http://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 1329 | dependencies: 1330 | ansi-regex "^2.0.0" 1331 | 1332 | has-flag@^1.0.0: 1333 | version "1.0.0" 1334 | resolved "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" 1335 | 1336 | has-flag@^3.0.0: 1337 | version "3.0.0" 1338 | resolved "http://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1339 | 1340 | has-unicode@^2.0.0: 1341 | version "2.0.1" 1342 | resolved "http://registry.npm.taobao.org/has-unicode/download/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 1343 | 1344 | has-value@^0.3.1: 1345 | version "0.3.1" 1346 | resolved "http://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" 1347 | dependencies: 1348 | get-value "^2.0.3" 1349 | has-values "^0.1.4" 1350 | isobject "^2.0.0" 1351 | 1352 | has-value@^1.0.0: 1353 | version "1.0.0" 1354 | resolved "http://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" 1355 | dependencies: 1356 | get-value "^2.0.6" 1357 | has-values "^1.0.0" 1358 | isobject "^3.0.0" 1359 | 1360 | has-values@^0.1.4: 1361 | version "0.1.4" 1362 | resolved "http://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" 1363 | 1364 | has-values@^1.0.0: 1365 | version "1.0.0" 1366 | resolved "http://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" 1367 | dependencies: 1368 | is-number "^3.0.0" 1369 | kind-of "^4.0.0" 1370 | 1371 | help-me@^1.1.0: 1372 | version "1.1.0" 1373 | resolved "http://registry.npm.taobao.org/help-me/download/help-me-1.1.0.tgz#8f2d508d0600b4a456da2f086556e7e5c056a3c6" 1374 | dependencies: 1375 | callback-stream "^1.0.2" 1376 | glob-stream "^6.1.0" 1377 | through2 "^2.0.1" 1378 | xtend "^4.0.0" 1379 | 1380 | hosted-git-info@^2.1.4: 1381 | version "2.7.1" 1382 | resolved "http://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" 1383 | 1384 | http-errors@~1.6.2: 1385 | version "1.6.3" 1386 | resolved "http://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" 1387 | dependencies: 1388 | depd "~1.1.2" 1389 | inherits "2.0.3" 1390 | setprototypeof "1.1.0" 1391 | statuses ">= 1.4.0 < 2" 1392 | 1393 | http-signature@~1.2.0: 1394 | version "1.2.0" 1395 | resolved "http://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" 1396 | dependencies: 1397 | assert-plus "^1.0.0" 1398 | jsprim "^1.2.2" 1399 | sshpk "^1.7.0" 1400 | 1401 | iconv-lite@^0.4.4: 1402 | version "0.4.24" 1403 | resolved "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 1404 | dependencies: 1405 | safer-buffer ">= 2.1.2 < 3" 1406 | 1407 | ignore-walk@^3.0.1: 1408 | version "3.0.1" 1409 | resolved "http://registry.npm.taobao.org/ignore-walk/download/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" 1410 | dependencies: 1411 | minimatch "^3.0.4" 1412 | 1413 | import-lazy@^2.1.0: 1414 | version "2.1.0" 1415 | resolved "http://registry.npm.taobao.org/import-lazy/download/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" 1416 | 1417 | imurmurhash@^0.1.4: 1418 | version "0.1.4" 1419 | resolved "http://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1420 | 1421 | inflight@^1.0.4: 1422 | version "1.0.6" 1423 | resolved "http://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1424 | dependencies: 1425 | once "^1.3.0" 1426 | wrappy "1" 1427 | 1428 | inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: 1429 | version "2.0.3" 1430 | resolved "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1431 | 1432 | ini@^1.3.4, ini@~1.3.0: 1433 | version "1.3.5" 1434 | resolved "http://registry.npm.taobao.org/ini/download/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" 1435 | 1436 | invariant@^2.2.2: 1437 | version "2.2.4" 1438 | resolved "http://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" 1439 | dependencies: 1440 | loose-envify "^1.0.0" 1441 | 1442 | invert-kv@^1.0.0: 1443 | version "1.0.0" 1444 | resolved "http://registry.npm.taobao.org/invert-kv/download/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" 1445 | 1446 | ipaddr.js@1.8.0: 1447 | version "1.8.0" 1448 | resolved "http://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" 1449 | 1450 | is-absolute@^1.0.0: 1451 | version "1.0.0" 1452 | resolved "http://registry.npm.taobao.org/is-absolute/download/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" 1453 | dependencies: 1454 | is-relative "^1.0.0" 1455 | is-windows "^1.0.1" 1456 | 1457 | is-accessor-descriptor@^0.1.6: 1458 | version "0.1.6" 1459 | resolved "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" 1460 | dependencies: 1461 | kind-of "^3.0.2" 1462 | 1463 | is-accessor-descriptor@^1.0.0: 1464 | version "1.0.0" 1465 | resolved "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" 1466 | dependencies: 1467 | kind-of "^6.0.0" 1468 | 1469 | is-arrayish@^0.2.1: 1470 | version "0.2.1" 1471 | resolved "http://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1472 | 1473 | is-binary-path@^1.0.0: 1474 | version "1.0.1" 1475 | resolved "http://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" 1476 | dependencies: 1477 | binary-extensions "^1.0.0" 1478 | 1479 | is-buffer@^1.1.5, is-buffer@~1.1.1: 1480 | version "1.1.6" 1481 | resolved "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 1482 | 1483 | is-builtin-module@^1.0.0: 1484 | version "1.0.0" 1485 | resolved "http://registry.npm.taobao.org/is-builtin-module/download/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" 1486 | dependencies: 1487 | builtin-modules "^1.0.0" 1488 | 1489 | is-ci@^1.0.10: 1490 | version "1.2.1" 1491 | resolved "http://registry.npm.taobao.org/is-ci/download/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" 1492 | dependencies: 1493 | ci-info "^1.5.0" 1494 | 1495 | is-data-descriptor@^0.1.4: 1496 | version "0.1.4" 1497 | resolved "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" 1498 | dependencies: 1499 | kind-of "^3.0.2" 1500 | 1501 | is-data-descriptor@^1.0.0: 1502 | version "1.0.0" 1503 | resolved "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" 1504 | dependencies: 1505 | kind-of "^6.0.0" 1506 | 1507 | is-descriptor@^0.1.0: 1508 | version "0.1.6" 1509 | resolved "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" 1510 | dependencies: 1511 | is-accessor-descriptor "^0.1.6" 1512 | is-data-descriptor "^0.1.4" 1513 | kind-of "^5.0.0" 1514 | 1515 | is-descriptor@^1.0.0, is-descriptor@^1.0.2: 1516 | version "1.0.2" 1517 | resolved "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" 1518 | dependencies: 1519 | is-accessor-descriptor "^1.0.0" 1520 | is-data-descriptor "^1.0.0" 1521 | kind-of "^6.0.2" 1522 | 1523 | is-docker@^1.1.0: 1524 | version "1.1.0" 1525 | resolved "http://registry.npm.taobao.org/is-docker/download/is-docker-1.1.0.tgz#f04374d4eee5310e9a8e113bf1495411e46176a1" 1526 | 1527 | is-dotfile@^1.0.0: 1528 | version "1.0.3" 1529 | resolved "http://registry.npm.taobao.org/is-dotfile/download/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" 1530 | 1531 | is-equal-shallow@^0.1.3: 1532 | version "0.1.3" 1533 | resolved "http://registry.npm.taobao.org/is-equal-shallow/download/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" 1534 | dependencies: 1535 | is-primitive "^2.0.0" 1536 | 1537 | is-extendable@^0.1.0, is-extendable@^0.1.1: 1538 | version "0.1.1" 1539 | resolved "http://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 1540 | 1541 | is-extendable@^1.0.1: 1542 | version "1.0.1" 1543 | resolved "http://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" 1544 | dependencies: 1545 | is-plain-object "^2.0.4" 1546 | 1547 | is-extglob@^1.0.0: 1548 | version "1.0.0" 1549 | resolved "http://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" 1550 | 1551 | is-extglob@^2.1.0, is-extglob@^2.1.1: 1552 | version "2.1.1" 1553 | resolved "http://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1554 | 1555 | is-finite@^1.0.0, is-finite@^1.0.1: 1556 | version "1.0.2" 1557 | resolved "http://registry.npm.taobao.org/is-finite/download/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 1558 | dependencies: 1559 | number-is-nan "^1.0.0" 1560 | 1561 | is-fullwidth-code-point@^1.0.0: 1562 | version "1.0.0" 1563 | resolved "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 1564 | dependencies: 1565 | number-is-nan "^1.0.0" 1566 | 1567 | is-fullwidth-code-point@^2.0.0: 1568 | version "2.0.0" 1569 | resolved "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1570 | 1571 | is-glob@^2.0.0, is-glob@^2.0.1: 1572 | version "2.0.1" 1573 | resolved "http://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" 1574 | dependencies: 1575 | is-extglob "^1.0.0" 1576 | 1577 | is-glob@^3.1.0: 1578 | version "3.1.0" 1579 | resolved "http://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" 1580 | dependencies: 1581 | is-extglob "^2.1.0" 1582 | 1583 | is-glob@^4.0.0: 1584 | version "4.0.0" 1585 | resolved "http://registry.npm.taobao.org/is-glob/download/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" 1586 | dependencies: 1587 | is-extglob "^2.1.1" 1588 | 1589 | is-installed-globally@^0.1.0: 1590 | version "0.1.0" 1591 | resolved "http://registry.npm.taobao.org/is-installed-globally/download/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" 1592 | dependencies: 1593 | global-dirs "^0.1.0" 1594 | is-path-inside "^1.0.0" 1595 | 1596 | is-negated-glob@^1.0.0: 1597 | version "1.0.0" 1598 | resolved "http://registry.npm.taobao.org/is-negated-glob/download/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" 1599 | 1600 | is-npm@^1.0.0: 1601 | version "1.0.0" 1602 | resolved "http://registry.npm.taobao.org/is-npm/download/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" 1603 | 1604 | is-number@^2.1.0: 1605 | version "2.1.0" 1606 | resolved "http://registry.npm.taobao.org/is-number/download/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" 1607 | dependencies: 1608 | kind-of "^3.0.2" 1609 | 1610 | is-number@^3.0.0: 1611 | version "3.0.0" 1612 | resolved "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" 1613 | dependencies: 1614 | kind-of "^3.0.2" 1615 | 1616 | is-number@^4.0.0: 1617 | version "4.0.0" 1618 | resolved "http://registry.npm.taobao.org/is-number/download/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" 1619 | 1620 | is-obj@^1.0.0: 1621 | version "1.0.1" 1622 | resolved "http://registry.npm.taobao.org/is-obj/download/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" 1623 | 1624 | is-path-inside@^1.0.0: 1625 | version "1.0.1" 1626 | resolved "http://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" 1627 | dependencies: 1628 | path-is-inside "^1.0.1" 1629 | 1630 | is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: 1631 | version "2.0.4" 1632 | resolved "http://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" 1633 | dependencies: 1634 | isobject "^3.0.1" 1635 | 1636 | is-posix-bracket@^0.1.0: 1637 | version "0.1.1" 1638 | resolved "http://registry.npm.taobao.org/is-posix-bracket/download/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" 1639 | 1640 | is-primitive@^2.0.0: 1641 | version "2.0.0" 1642 | resolved "http://registry.npm.taobao.org/is-primitive/download/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" 1643 | 1644 | is-redirect@^1.0.0: 1645 | version "1.0.0" 1646 | resolved "http://registry.npm.taobao.org/is-redirect/download/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" 1647 | 1648 | is-relative@^1.0.0: 1649 | version "1.0.0" 1650 | resolved "http://registry.npm.taobao.org/is-relative/download/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" 1651 | dependencies: 1652 | is-unc-path "^1.0.0" 1653 | 1654 | is-retry-allowed@^1.0.0: 1655 | version "1.1.0" 1656 | resolved "http://registry.npm.taobao.org/is-retry-allowed/download/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" 1657 | 1658 | is-stream@^1.0.0, is-stream@^1.1.0: 1659 | version "1.1.0" 1660 | resolved "http://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 1661 | 1662 | is-typedarray@~1.0.0: 1663 | version "1.0.0" 1664 | resolved "http://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 1665 | 1666 | is-unc-path@^1.0.0: 1667 | version "1.0.0" 1668 | resolved "http://registry.npm.taobao.org/is-unc-path/download/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" 1669 | dependencies: 1670 | unc-path-regex "^0.1.2" 1671 | 1672 | is-utf8@^0.2.0: 1673 | version "0.2.1" 1674 | resolved "http://registry.npm.taobao.org/is-utf8/download/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" 1675 | 1676 | is-windows@^1.0.1, is-windows@^1.0.2: 1677 | version "1.0.2" 1678 | resolved "http://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" 1679 | 1680 | isarray@0.0.1: 1681 | version "0.0.1" 1682 | resolved "http://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 1683 | 1684 | isarray@1.0.0, isarray@~1.0.0: 1685 | version "1.0.0" 1686 | resolved "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1687 | 1688 | isexe@^2.0.0: 1689 | version "2.0.0" 1690 | resolved "http://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1691 | 1692 | isobject@^2.0.0: 1693 | version "2.1.0" 1694 | resolved "http://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 1695 | dependencies: 1696 | isarray "1.0.0" 1697 | 1698 | isobject@^3.0.0, isobject@^3.0.1: 1699 | version "3.0.1" 1700 | resolved "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" 1701 | 1702 | isstream@~0.1.2: 1703 | version "0.1.2" 1704 | resolved "http://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 1705 | 1706 | istanbul-lib-coverage@^1.1.2, istanbul-lib-coverage@^1.2.1: 1707 | version "1.2.1" 1708 | resolved "http://registry.npm.taobao.org/istanbul-lib-coverage/download/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0" 1709 | 1710 | istanbul-lib-hook@^1.1.0: 1711 | version "1.2.2" 1712 | resolved "http://registry.npm.taobao.org/istanbul-lib-hook/download/istanbul-lib-hook-1.2.2.tgz#bc6bf07f12a641fbf1c85391d0daa8f0aea6bf86" 1713 | dependencies: 1714 | append-transform "^0.4.0" 1715 | 1716 | istanbul-lib-instrument@^1.10.0: 1717 | version "1.10.2" 1718 | resolved "http://registry.npm.taobao.org/istanbul-lib-instrument/download/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca" 1719 | dependencies: 1720 | babel-generator "^6.18.0" 1721 | babel-template "^6.16.0" 1722 | babel-traverse "^6.18.0" 1723 | babel-types "^6.18.0" 1724 | babylon "^6.18.0" 1725 | istanbul-lib-coverage "^1.2.1" 1726 | semver "^5.3.0" 1727 | 1728 | istanbul-lib-report@^1.1.3: 1729 | version "1.1.5" 1730 | resolved "http://registry.npm.taobao.org/istanbul-lib-report/download/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c" 1731 | dependencies: 1732 | istanbul-lib-coverage "^1.2.1" 1733 | mkdirp "^0.5.1" 1734 | path-parse "^1.0.5" 1735 | supports-color "^3.1.2" 1736 | 1737 | istanbul-lib-source-maps@^1.2.3: 1738 | version "1.2.6" 1739 | resolved "http://registry.npm.taobao.org/istanbul-lib-source-maps/download/istanbul-lib-source-maps-1.2.6.tgz#37b9ff661580f8fca11232752ee42e08c6675d8f" 1740 | dependencies: 1741 | debug "^3.1.0" 1742 | istanbul-lib-coverage "^1.2.1" 1743 | mkdirp "^0.5.1" 1744 | rimraf "^2.6.1" 1745 | source-map "^0.5.3" 1746 | 1747 | istanbul-reports@^1.4.0: 1748 | version "1.5.1" 1749 | resolved "http://registry.npm.taobao.org/istanbul-reports/download/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a" 1750 | dependencies: 1751 | handlebars "^4.0.3" 1752 | 1753 | "js-tokens@^3.0.0 || ^4.0.0": 1754 | version "4.0.0" 1755 | resolved "http://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1756 | 1757 | js-tokens@^3.0.2: 1758 | version "3.0.2" 1759 | resolved "http://registry.npm.taobao.org/js-tokens/download/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" 1760 | 1761 | js-yaml@^3.11.0, js-yaml@^3.2.7, js-yaml@^3.3.1: 1762 | version "3.12.0" 1763 | resolved "http://registry.npm.taobao.org/js-yaml/download/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" 1764 | dependencies: 1765 | argparse "^1.0.7" 1766 | esprima "^4.0.0" 1767 | 1768 | jsbn@~0.1.0: 1769 | version "0.1.1" 1770 | resolved "http://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 1771 | 1772 | jsesc@^1.3.0: 1773 | version "1.3.0" 1774 | resolved "http://registry.npm.taobao.org/jsesc/download/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" 1775 | 1776 | json-schema-traverse@^0.3.0: 1777 | version "0.3.1" 1778 | resolved "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" 1779 | 1780 | json-schema-traverse@^0.4.1: 1781 | version "0.4.1" 1782 | resolved "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1783 | 1784 | json-schema@0.2.3: 1785 | version "0.2.3" 1786 | resolved "http://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 1787 | 1788 | json-stable-stringify@^1.0.0: 1789 | version "1.0.1" 1790 | resolved "http://registry.npm.taobao.org/json-stable-stringify/download/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" 1791 | dependencies: 1792 | jsonify "~0.0.0" 1793 | 1794 | json-stringify-safe@~5.0.1: 1795 | version "5.0.1" 1796 | resolved "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 1797 | 1798 | jsonfile@^4.0.0: 1799 | version "4.0.0" 1800 | resolved "http://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" 1801 | optionalDependencies: 1802 | graceful-fs "^4.1.6" 1803 | 1804 | jsonify@~0.0.0: 1805 | version "0.0.0" 1806 | resolved "http://registry.npm.taobao.org/jsonify/download/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 1807 | 1808 | jsonwebtoken@^8.2.0: 1809 | version "8.3.0" 1810 | resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.3.0.tgz#056c90eee9a65ed6e6c72ddb0a1d325109aaf643" 1811 | dependencies: 1812 | jws "^3.1.5" 1813 | lodash.includes "^4.3.0" 1814 | lodash.isboolean "^3.0.3" 1815 | lodash.isinteger "^4.0.4" 1816 | lodash.isnumber "^3.0.3" 1817 | lodash.isplainobject "^4.0.6" 1818 | lodash.isstring "^4.0.1" 1819 | lodash.once "^4.0.0" 1820 | ms "^2.1.1" 1821 | 1822 | jsprim@^1.2.2: 1823 | version "1.4.1" 1824 | resolved "http://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 1825 | dependencies: 1826 | assert-plus "1.0.0" 1827 | extsprintf "1.3.0" 1828 | json-schema "0.2.3" 1829 | verror "1.10.0" 1830 | 1831 | jwa@^1.1.5: 1832 | version "1.1.6" 1833 | resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.1.6.tgz#87240e76c9808dbde18783cf2264ef4929ee50e6" 1834 | dependencies: 1835 | buffer-equal-constant-time "1.0.1" 1836 | ecdsa-sig-formatter "1.0.10" 1837 | safe-buffer "^5.0.1" 1838 | 1839 | jws@^3.1.5: 1840 | version "3.1.5" 1841 | resolved "https://registry.yarnpkg.com/jws/-/jws-3.1.5.tgz#80d12d05b293d1e841e7cb8b4e69e561adcf834f" 1842 | dependencies: 1843 | jwa "^1.1.5" 1844 | safe-buffer "^5.0.1" 1845 | 1846 | kareem@2.2.1: 1847 | version "2.2.1" 1848 | resolved "http://registry.npm.taobao.org/kareem/download/kareem-2.2.1.tgz#9950809415aa3cde62ab43b4f7b919d99816e015" 1849 | 1850 | kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: 1851 | version "3.2.2" 1852 | resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" 1853 | dependencies: 1854 | is-buffer "^1.1.5" 1855 | 1856 | kind-of@^4.0.0: 1857 | version "4.0.0" 1858 | resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" 1859 | dependencies: 1860 | is-buffer "^1.1.5" 1861 | 1862 | kind-of@^5.0.0: 1863 | version "5.1.0" 1864 | resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" 1865 | 1866 | kind-of@^6.0.0, kind-of@^6.0.2: 1867 | version "6.0.2" 1868 | resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" 1869 | 1870 | latest-version@^3.0.0: 1871 | version "3.1.0" 1872 | resolved "http://registry.npm.taobao.org/latest-version/download/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" 1873 | dependencies: 1874 | package-json "^4.0.0" 1875 | 1876 | lcid@^1.0.0: 1877 | version "1.0.0" 1878 | resolved "http://registry.npm.taobao.org/lcid/download/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" 1879 | dependencies: 1880 | invert-kv "^1.0.0" 1881 | 1882 | lcov-parse@^0.0.10: 1883 | version "0.0.10" 1884 | resolved "http://registry.npm.taobao.org/lcov-parse/download/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" 1885 | 1886 | leven@^1.0.0: 1887 | version "1.0.2" 1888 | resolved "http://registry.npm.taobao.org/leven/download/leven-1.0.2.tgz#9144b6eebca5f1d0680169f1a6770dcea60b75c3" 1889 | 1890 | light-my-request@^3.0.0: 1891 | version "3.1.0" 1892 | resolved "http://registry.npm.taobao.org/light-my-request/download/light-my-request-3.1.0.tgz#c2bc47c329622d4282cd34764f6f4dfbcbe73144" 1893 | dependencies: 1894 | ajv "^6.0.0" 1895 | readable-stream "^3.0.0" 1896 | 1897 | load-json-file@^1.0.0: 1898 | version "1.1.0" 1899 | resolved "http://registry.npm.taobao.org/load-json-file/download/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" 1900 | dependencies: 1901 | graceful-fs "^4.1.2" 1902 | parse-json "^2.2.0" 1903 | pify "^2.0.0" 1904 | pinkie-promise "^2.0.0" 1905 | strip-bom "^2.0.0" 1906 | 1907 | locate-path@^2.0.0: 1908 | version "2.0.0" 1909 | resolved "http://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" 1910 | dependencies: 1911 | p-locate "^2.0.0" 1912 | path-exists "^3.0.0" 1913 | 1914 | lodash.debounce@^4.0.8: 1915 | version "4.0.8" 1916 | resolved "http://registry.npm.taobao.org/lodash.debounce/download/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" 1917 | 1918 | lodash.get@4.4.2: 1919 | version "4.4.2" 1920 | resolved "http://registry.npm.taobao.org/lodash.get/download/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" 1921 | 1922 | lodash.includes@^4.3.0: 1923 | version "4.3.0" 1924 | resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" 1925 | 1926 | lodash.isboolean@^3.0.3: 1927 | version "3.0.3" 1928 | resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" 1929 | 1930 | lodash.isinteger@^4.0.4: 1931 | version "4.0.4" 1932 | resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" 1933 | 1934 | lodash.isnumber@^3.0.3: 1935 | version "3.0.3" 1936 | resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" 1937 | 1938 | lodash.isplainobject@^4.0.6: 1939 | version "4.0.6" 1940 | resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" 1941 | 1942 | lodash.isstring@^4.0.1: 1943 | version "4.0.1" 1944 | resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" 1945 | 1946 | lodash.once@^4.0.0: 1947 | version "4.1.1" 1948 | resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" 1949 | 1950 | lodash@^4.17.10, lodash@^4.17.4: 1951 | version "4.17.10" 1952 | resolved "http://registry.npm.taobao.org/lodash/download/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" 1953 | 1954 | log-driver@^1.2.7: 1955 | version "1.2.7" 1956 | resolved "http://registry.npm.taobao.org/log-driver/download/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" 1957 | 1958 | loose-envify@^1.0.0: 1959 | version "1.4.0" 1960 | resolved "http://registry.npm.taobao.org/loose-envify/download/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 1961 | dependencies: 1962 | js-tokens "^3.0.0 || ^4.0.0" 1963 | 1964 | lowercase-keys@^1.0.0: 1965 | version "1.0.1" 1966 | resolved "http://registry.npm.taobao.org/lowercase-keys/download/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" 1967 | 1968 | lru-cache@^4.0.1: 1969 | version "4.1.3" 1970 | resolved "http://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" 1971 | dependencies: 1972 | pseudomap "^1.0.2" 1973 | yallist "^2.1.2" 1974 | 1975 | make-dir@^1.0.0: 1976 | version "1.3.0" 1977 | resolved "http://registry.npm.taobao.org/make-dir/download/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" 1978 | dependencies: 1979 | pify "^3.0.0" 1980 | 1981 | make-promises-safe@^1.1.0: 1982 | version "1.1.0" 1983 | resolved "http://registry.npm.taobao.org/make-promises-safe/download/make-promises-safe-1.1.0.tgz#b4d28c61ef8ad5502f38dbb3a0ee89627f76ad61" 1984 | 1985 | makeerror@1.0.x: 1986 | version "1.0.11" 1987 | resolved "http://registry.npm.taobao.org/makeerror/download/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" 1988 | dependencies: 1989 | tmpl "1.0.x" 1990 | 1991 | map-cache@^0.2.2: 1992 | version "0.2.2" 1993 | resolved "http://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" 1994 | 1995 | map-visit@^1.0.0: 1996 | version "1.0.0" 1997 | resolved "http://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" 1998 | dependencies: 1999 | object-visit "^1.0.0" 2000 | 2001 | math-random@^1.0.1: 2002 | version "1.0.1" 2003 | resolved "http://registry.npm.taobao.org/math-random/download/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" 2004 | 2005 | md5-hex@^1.2.0: 2006 | version "1.3.0" 2007 | resolved "http://registry.npm.taobao.org/md5-hex/download/md5-hex-1.3.0.tgz#d2c4afe983c4370662179b8cad145219135046c4" 2008 | dependencies: 2009 | md5-o-matic "^0.1.1" 2010 | 2011 | md5-o-matic@^0.1.1: 2012 | version "0.1.1" 2013 | resolved "http://registry.npm.taobao.org/md5-o-matic/download/md5-o-matic-0.1.1.tgz#822bccd65e117c514fab176b25945d54100a03c3" 2014 | 2015 | md5@^2.2.1: 2016 | version "2.2.1" 2017 | resolved "http://registry.npm.taobao.org/md5/download/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9" 2018 | dependencies: 2019 | charenc "~0.0.1" 2020 | crypt "~0.0.1" 2021 | is-buffer "~1.1.1" 2022 | 2023 | mem@^1.1.0: 2024 | version "1.1.0" 2025 | resolved "http://registry.npm.taobao.org/mem/download/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" 2026 | dependencies: 2027 | mimic-fn "^1.0.0" 2028 | 2029 | merge-source-map@^1.1.0: 2030 | version "1.1.0" 2031 | resolved "http://registry.npm.taobao.org/merge-source-map/download/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" 2032 | dependencies: 2033 | source-map "^0.6.1" 2034 | 2035 | micromatch@^2.3.11: 2036 | version "2.3.11" 2037 | resolved "http://registry.npm.taobao.org/micromatch/download/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" 2038 | dependencies: 2039 | arr-diff "^2.0.0" 2040 | array-unique "^0.2.1" 2041 | braces "^1.8.2" 2042 | expand-brackets "^0.1.4" 2043 | extglob "^0.3.1" 2044 | filename-regex "^2.0.0" 2045 | is-extglob "^1.0.0" 2046 | is-glob "^2.0.1" 2047 | kind-of "^3.0.2" 2048 | normalize-path "^2.0.1" 2049 | object.omit "^2.0.0" 2050 | parse-glob "^3.0.4" 2051 | regex-cache "^0.4.2" 2052 | 2053 | micromatch@^3.1.10, micromatch@^3.1.4: 2054 | version "3.1.10" 2055 | resolved "http://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" 2056 | dependencies: 2057 | arr-diff "^4.0.0" 2058 | array-unique "^0.3.2" 2059 | braces "^2.3.1" 2060 | define-property "^2.0.2" 2061 | extend-shallow "^3.0.2" 2062 | extglob "^2.0.4" 2063 | fragment-cache "^0.2.1" 2064 | kind-of "^6.0.2" 2065 | nanomatch "^1.2.9" 2066 | object.pick "^1.3.0" 2067 | regex-not "^1.0.0" 2068 | snapdragon "^0.8.1" 2069 | to-regex "^3.0.2" 2070 | 2071 | middie@^3.1.0: 2072 | version "3.1.0" 2073 | resolved "http://registry.npm.taobao.org/middie/download/middie-3.1.0.tgz#99986a166e827fd0b0c8fa55f5ee28e7b6c23d9f" 2074 | dependencies: 2075 | path-to-regexp "^2.0.0" 2076 | reusify "^1.0.2" 2077 | 2078 | mime-db@~1.36.0: 2079 | version "1.36.0" 2080 | resolved "http://registry.npm.taobao.org/mime-db/download/mime-db-1.36.0.tgz#5020478db3c7fe93aad7bbcc4dcf869c43363397" 2081 | 2082 | mime-types@^2.1.12, mime-types@~2.1.19: 2083 | version "2.1.20" 2084 | resolved "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.20.tgz#930cb719d571e903738520f8470911548ca2cc19" 2085 | dependencies: 2086 | mime-db "~1.36.0" 2087 | 2088 | mime@1.4.1: 2089 | version "1.4.1" 2090 | resolved "http://registry.npm.taobao.org/mime/download/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" 2091 | 2092 | mimic-fn@^1.0.0: 2093 | version "1.2.0" 2094 | resolved "http://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" 2095 | 2096 | minimatch@^3.0.2, minimatch@^3.0.4: 2097 | version "3.0.4" 2098 | resolved "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 2099 | dependencies: 2100 | brace-expansion "^1.1.7" 2101 | 2102 | minimist@0.0.8: 2103 | version "0.0.8" 2104 | resolved "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 2105 | 2106 | minimist@^1.1.0, minimist@^1.2.0: 2107 | version "1.2.0" 2108 | resolved "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 2109 | 2110 | minimist@~0.0.1: 2111 | version "0.0.10" 2112 | resolved "http://registry.npm.taobao.org/minimist/download/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" 2113 | 2114 | minipass@^2.2.0, minipass@^2.2.1, minipass@^2.3.0, minipass@^2.3.3: 2115 | version "2.3.4" 2116 | resolved "http://registry.npm.taobao.org/minipass/download/minipass-2.3.4.tgz#4768d7605ed6194d6d576169b9e12ef71e9d9957" 2117 | dependencies: 2118 | safe-buffer "^5.1.2" 2119 | yallist "^3.0.0" 2120 | 2121 | minizlib@^1.1.0: 2122 | version "1.1.0" 2123 | resolved "http://registry.npm.taobao.org/minizlib/download/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb" 2124 | dependencies: 2125 | minipass "^2.2.1" 2126 | 2127 | mixin-deep@^1.2.0: 2128 | version "1.3.1" 2129 | resolved "http://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" 2130 | dependencies: 2131 | for-in "^1.0.2" 2132 | is-extendable "^1.0.1" 2133 | 2134 | mkdirp@^0.5.0, mkdirp@^0.5.1: 2135 | version "0.5.1" 2136 | resolved "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 2137 | dependencies: 2138 | minimist "0.0.8" 2139 | 2140 | mongodb-core@3.1.3: 2141 | version "3.1.3" 2142 | resolved "http://registry.npm.taobao.org/mongodb-core/download/mongodb-core-3.1.3.tgz#b036bce5290b383fe507238965bef748dd8adb75" 2143 | dependencies: 2144 | bson "^1.1.0" 2145 | require_optional "^1.0.1" 2146 | safe-buffer "^5.1.2" 2147 | optionalDependencies: 2148 | saslprep "^1.0.0" 2149 | 2150 | mongodb@3.1.4: 2151 | version "3.1.4" 2152 | resolved "http://registry.npm.taobao.org/mongodb/download/mongodb-3.1.4.tgz#0ff07a7409a4edf05e71f9ff8df3633bd278ed53" 2153 | dependencies: 2154 | mongodb-core "3.1.3" 2155 | safe-buffer "^5.1.2" 2156 | 2157 | mongoose-legacy-pluralize@1.0.2: 2158 | version "1.0.2" 2159 | resolved "http://registry.npm.taobao.org/mongoose-legacy-pluralize/download/mongoose-legacy-pluralize-1.0.2.tgz#3ba9f91fa507b5186d399fb40854bff18fb563e4" 2160 | 2161 | mongoose@^5.2.14: 2162 | version "5.2.14" 2163 | resolved "http://registry.npm.taobao.org/mongoose/download/mongoose-5.2.14.tgz#ce149749a17fffb324a9ff3bd2fa50701e75743a" 2164 | dependencies: 2165 | async "2.6.1" 2166 | bson "~1.0.5" 2167 | kareem "2.2.1" 2168 | lodash.get "4.4.2" 2169 | mongodb "3.1.4" 2170 | mongodb-core "3.1.3" 2171 | mongoose-legacy-pluralize "1.0.2" 2172 | mpath "0.5.1" 2173 | mquery "3.2.0" 2174 | ms "2.0.0" 2175 | regexp-clone "0.0.1" 2176 | safe-buffer "5.1.2" 2177 | sliced "1.0.1" 2178 | 2179 | mpath@0.5.1: 2180 | version "0.5.1" 2181 | resolved "http://registry.npm.taobao.org/mpath/download/mpath-0.5.1.tgz#17131501f1ff9e6e4fbc8ffa875aa7065b5775ab" 2182 | 2183 | mquery@3.2.0: 2184 | version "3.2.0" 2185 | resolved "http://registry.npm.taobao.org/mquery/download/mquery-3.2.0.tgz#e276472abd5109686a15eb2a8e0761db813c81cc" 2186 | dependencies: 2187 | bluebird "3.5.1" 2188 | debug "3.1.0" 2189 | regexp-clone "0.0.1" 2190 | safe-buffer "5.1.2" 2191 | sliced "1.0.1" 2192 | 2193 | ms@2.0.0: 2194 | version "2.0.0" 2195 | resolved "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 2196 | 2197 | ms@^2.1.1: 2198 | version "2.1.1" 2199 | resolved "http://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 2200 | 2201 | nan@^2.9.2: 2202 | version "2.11.0" 2203 | resolved "http://registry.npm.taobao.org/nan/download/nan-2.11.0.tgz#574e360e4d954ab16966ec102c0c049fd961a099" 2204 | 2205 | nanomatch@^1.2.9: 2206 | version "1.2.13" 2207 | resolved "http://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" 2208 | dependencies: 2209 | arr-diff "^4.0.0" 2210 | array-unique "^0.3.2" 2211 | define-property "^2.0.2" 2212 | extend-shallow "^3.0.2" 2213 | fragment-cache "^0.2.1" 2214 | is-windows "^1.0.2" 2215 | kind-of "^6.0.2" 2216 | object.pick "^1.3.0" 2217 | regex-not "^1.0.0" 2218 | snapdragon "^0.8.1" 2219 | to-regex "^3.0.1" 2220 | 2221 | needle@^2.2.1: 2222 | version "2.2.3" 2223 | resolved "http://registry.npm.taobao.org/needle/download/needle-2.2.3.tgz#c1b04da378cd634d8befe2de965dc2cfb0fd65ca" 2224 | dependencies: 2225 | debug "^2.1.2" 2226 | iconv-lite "^0.4.4" 2227 | sax "^1.2.4" 2228 | 2229 | node-pre-gyp@^0.10.0: 2230 | version "0.10.3" 2231 | resolved "http://registry.npm.taobao.org/node-pre-gyp/download/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" 2232 | dependencies: 2233 | detect-libc "^1.0.2" 2234 | mkdirp "^0.5.1" 2235 | needle "^2.2.1" 2236 | nopt "^4.0.1" 2237 | npm-packlist "^1.1.6" 2238 | npmlog "^4.0.2" 2239 | rc "^1.2.7" 2240 | rimraf "^2.6.1" 2241 | semver "^5.3.0" 2242 | tar "^4" 2243 | 2244 | nopt@^4.0.1: 2245 | version "4.0.1" 2246 | resolved "http://registry.npm.taobao.org/nopt/download/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" 2247 | dependencies: 2248 | abbrev "1" 2249 | osenv "^0.1.4" 2250 | 2251 | normalize-package-data@^2.3.2: 2252 | version "2.4.0" 2253 | resolved "http://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" 2254 | dependencies: 2255 | hosted-git-info "^2.1.4" 2256 | is-builtin-module "^1.0.0" 2257 | semver "2 || 3 || 4 || 5" 2258 | validate-npm-package-license "^3.0.1" 2259 | 2260 | normalize-path@^2.0.1, normalize-path@^2.1.1: 2261 | version "2.1.1" 2262 | resolved "http://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" 2263 | dependencies: 2264 | remove-trailing-separator "^1.0.1" 2265 | 2266 | npm-bundled@^1.0.1: 2267 | version "1.0.5" 2268 | resolved "http://registry.npm.taobao.org/npm-bundled/download/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979" 2269 | 2270 | npm-packlist@^1.1.6: 2271 | version "1.1.11" 2272 | resolved "http://registry.npm.taobao.org/npm-packlist/download/npm-packlist-1.1.11.tgz#84e8c683cbe7867d34b1d357d893ce29e28a02de" 2273 | dependencies: 2274 | ignore-walk "^3.0.1" 2275 | npm-bundled "^1.0.1" 2276 | 2277 | npm-run-path@^2.0.0: 2278 | version "2.0.2" 2279 | resolved "http://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 2280 | dependencies: 2281 | path-key "^2.0.0" 2282 | 2283 | npmlog@^4.0.2: 2284 | version "4.1.2" 2285 | resolved "http://registry.npm.taobao.org/npmlog/download/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" 2286 | dependencies: 2287 | are-we-there-yet "~1.1.2" 2288 | console-control-strings "~1.1.0" 2289 | gauge "~2.7.3" 2290 | set-blocking "~2.0.0" 2291 | 2292 | number-is-nan@^1.0.0: 2293 | version "1.0.1" 2294 | resolved "http://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 2295 | 2296 | nyc@^11.8.0: 2297 | version "11.9.0" 2298 | resolved "http://registry.npm.taobao.org/nyc/download/nyc-11.9.0.tgz#4106e89e8fbe73623a1fc8b6ecb7abaa271ae1e4" 2299 | dependencies: 2300 | archy "^1.0.0" 2301 | arrify "^1.0.1" 2302 | caching-transform "^1.0.0" 2303 | convert-source-map "^1.5.1" 2304 | debug-log "^1.0.1" 2305 | default-require-extensions "^1.0.0" 2306 | find-cache-dir "^0.1.1" 2307 | find-up "^2.1.0" 2308 | foreground-child "^1.5.3" 2309 | glob "^7.0.6" 2310 | istanbul-lib-coverage "^1.1.2" 2311 | istanbul-lib-hook "^1.1.0" 2312 | istanbul-lib-instrument "^1.10.0" 2313 | istanbul-lib-report "^1.1.3" 2314 | istanbul-lib-source-maps "^1.2.3" 2315 | istanbul-reports "^1.4.0" 2316 | md5-hex "^1.2.0" 2317 | merge-source-map "^1.1.0" 2318 | micromatch "^3.1.10" 2319 | mkdirp "^0.5.0" 2320 | resolve-from "^2.0.0" 2321 | rimraf "^2.6.2" 2322 | signal-exit "^3.0.1" 2323 | spawn-wrap "^1.4.2" 2324 | test-exclude "^4.2.0" 2325 | yargs "11.1.0" 2326 | yargs-parser "^8.0.0" 2327 | 2328 | oauth-sign@~0.9.0: 2329 | version "0.9.0" 2330 | resolved "http://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" 2331 | 2332 | object-assign@^4.1.0: 2333 | version "4.1.1" 2334 | resolved "http://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 2335 | 2336 | object-copy@^0.1.0: 2337 | version "0.1.0" 2338 | resolved "http://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" 2339 | dependencies: 2340 | copy-descriptor "^0.1.0" 2341 | define-property "^0.2.5" 2342 | kind-of "^3.0.3" 2343 | 2344 | object-visit@^1.0.0: 2345 | version "1.0.1" 2346 | resolved "http://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" 2347 | dependencies: 2348 | isobject "^3.0.0" 2349 | 2350 | object.omit@^2.0.0: 2351 | version "2.0.1" 2352 | resolved "http://registry.npm.taobao.org/object.omit/download/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" 2353 | dependencies: 2354 | for-own "^0.1.4" 2355 | is-extendable "^0.1.1" 2356 | 2357 | object.pick@^1.3.0: 2358 | version "1.3.0" 2359 | resolved "http://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" 2360 | dependencies: 2361 | isobject "^3.0.1" 2362 | 2363 | on-finished@~2.3.0: 2364 | version "2.3.0" 2365 | resolved "http://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 2366 | dependencies: 2367 | ee-first "1.1.1" 2368 | 2369 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 2370 | version "1.4.0" 2371 | resolved "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 2372 | dependencies: 2373 | wrappy "1" 2374 | 2375 | opener@^1.4.1: 2376 | version "1.5.1" 2377 | resolved "http://registry.npm.taobao.org/opener/download/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed" 2378 | 2379 | optimist@^0.6.1: 2380 | version "0.6.1" 2381 | resolved "http://registry.npm.taobao.org/optimist/download/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" 2382 | dependencies: 2383 | minimist "~0.0.1" 2384 | wordwrap "~0.0.2" 2385 | 2386 | ordered-read-streams@^1.0.0: 2387 | version "1.0.1" 2388 | resolved "http://registry.npm.taobao.org/ordered-read-streams/download/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" 2389 | dependencies: 2390 | readable-stream "^2.0.1" 2391 | 2392 | os-homedir@^1.0.0, os-homedir@^1.0.1, os-homedir@^1.0.2: 2393 | version "1.0.2" 2394 | resolved "http://registry.npm.taobao.org/os-homedir/download/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 2395 | 2396 | os-locale@^2.0.0: 2397 | version "2.1.0" 2398 | resolved "http://registry.npm.taobao.org/os-locale/download/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" 2399 | dependencies: 2400 | execa "^0.7.0" 2401 | lcid "^1.0.0" 2402 | mem "^1.1.0" 2403 | 2404 | os-tmpdir@^1.0.0: 2405 | version "1.0.2" 2406 | resolved "http://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 2407 | 2408 | osenv@^0.1.4: 2409 | version "0.1.5" 2410 | resolved "http://registry.npm.taobao.org/osenv/download/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" 2411 | dependencies: 2412 | os-homedir "^1.0.0" 2413 | os-tmpdir "^1.0.0" 2414 | 2415 | own-or-env@^1.0.1: 2416 | version "1.0.1" 2417 | resolved "http://registry.npm.taobao.org/own-or-env/download/own-or-env-1.0.1.tgz#54ce601d3bf78236c5c65633aa1c8ec03f8007e4" 2418 | dependencies: 2419 | own-or "^1.0.0" 2420 | 2421 | own-or@^1.0.0: 2422 | version "1.0.0" 2423 | resolved "http://registry.npm.taobao.org/own-or/download/own-or-1.0.0.tgz#4e877fbeda9a2ec8000fbc0bcae39645ee8bf8dc" 2424 | 2425 | p-finally@^1.0.0: 2426 | version "1.0.0" 2427 | resolved "http://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 2428 | 2429 | p-limit@^1.1.0: 2430 | version "1.3.0" 2431 | resolved "http://registry.npm.taobao.org/p-limit/download/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" 2432 | dependencies: 2433 | p-try "^1.0.0" 2434 | 2435 | p-locate@^2.0.0: 2436 | version "2.0.0" 2437 | resolved "http://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" 2438 | dependencies: 2439 | p-limit "^1.1.0" 2440 | 2441 | p-try@^1.0.0: 2442 | version "1.0.0" 2443 | resolved "http://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" 2444 | 2445 | package-json@^4.0.0: 2446 | version "4.0.1" 2447 | resolved "http://registry.npm.taobao.org/package-json/download/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" 2448 | dependencies: 2449 | got "^6.7.1" 2450 | registry-auth-token "^3.0.1" 2451 | registry-url "^3.0.3" 2452 | semver "^5.1.0" 2453 | 2454 | pad-left@^2.1.0: 2455 | version "2.1.0" 2456 | resolved "http://registry.npm.taobao.org/pad-left/download/pad-left-2.1.0.tgz#16e6a3b2d44a8e138cb0838cc7cb403a4fc9e994" 2457 | dependencies: 2458 | repeat-string "^1.5.4" 2459 | 2460 | pad-right@^0.2.2: 2461 | version "0.2.2" 2462 | resolved "http://registry.npm.taobao.org/pad-right/download/pad-right-0.2.2.tgz#6fbc924045d244f2a2a244503060d3bfc6009774" 2463 | dependencies: 2464 | repeat-string "^1.5.2" 2465 | 2466 | parse-glob@^3.0.4: 2467 | version "3.0.4" 2468 | resolved "http://registry.npm.taobao.org/parse-glob/download/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" 2469 | dependencies: 2470 | glob-base "^0.3.0" 2471 | is-dotfile "^1.0.0" 2472 | is-extglob "^1.0.0" 2473 | is-glob "^2.0.0" 2474 | 2475 | parse-json@^2.2.0: 2476 | version "2.2.0" 2477 | resolved "http://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 2478 | dependencies: 2479 | error-ex "^1.2.0" 2480 | 2481 | parse-ms@^1.0.0: 2482 | version "1.0.1" 2483 | resolved "http://registry.npm.taobao.org/parse-ms/download/parse-ms-1.0.1.tgz#56346d4749d78f23430ca0c713850aef91aa361d" 2484 | 2485 | pascalcase@^0.1.1: 2486 | version "0.1.1" 2487 | resolved "http://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" 2488 | 2489 | path-dirname@^1.0.0: 2490 | version "1.0.2" 2491 | resolved "http://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" 2492 | 2493 | path-exists@^2.0.0: 2494 | version "2.1.0" 2495 | resolved "http://registry.npm.taobao.org/path-exists/download/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" 2496 | dependencies: 2497 | pinkie-promise "^2.0.0" 2498 | 2499 | path-exists@^3.0.0: 2500 | version "3.0.0" 2501 | resolved "http://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 2502 | 2503 | path-is-absolute@^1.0.0: 2504 | version "1.0.1" 2505 | resolved "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 2506 | 2507 | path-is-inside@^1.0.1: 2508 | version "1.0.2" 2509 | resolved "http://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 2510 | 2511 | path-key@^2.0.0: 2512 | version "2.0.1" 2513 | resolved "http://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 2514 | 2515 | path-parse@^1.0.5: 2516 | version "1.0.6" 2517 | resolved "http://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 2518 | 2519 | path-to-regexp@^2.0.0: 2520 | version "2.4.0" 2521 | resolved "http://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-2.4.0.tgz#35ce7f333d5616f1c1e1bfe266c3aba2e5b2e704" 2522 | 2523 | path-type@^1.0.0: 2524 | version "1.1.0" 2525 | resolved "http://registry.npm.taobao.org/path-type/download/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" 2526 | dependencies: 2527 | graceful-fs "^4.1.2" 2528 | pify "^2.0.0" 2529 | pinkie-promise "^2.0.0" 2530 | 2531 | performance-now@^2.1.0: 2532 | version "2.1.0" 2533 | resolved "http://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 2534 | 2535 | pify@^2.0.0: 2536 | version "2.3.0" 2537 | resolved "http://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 2538 | 2539 | pify@^3.0.0: 2540 | version "3.0.0" 2541 | resolved "http://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" 2542 | 2543 | pinkie-promise@^2.0.0: 2544 | version "2.0.1" 2545 | resolved "http://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 2546 | dependencies: 2547 | pinkie "^2.0.0" 2548 | 2549 | pinkie@^2.0.0: 2550 | version "2.0.4" 2551 | resolved "http://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 2552 | 2553 | pino-colada@^1.4.4: 2554 | version "1.4.4" 2555 | resolved "http://registry.npm.taobao.org/pino-colada/download/pino-colada-1.4.4.tgz#d24931ee6481131c3406c7ba9e62e69158fc166b" 2556 | dependencies: 2557 | chalk "^2.0.1" 2558 | fast-json-parse "^1.0.2" 2559 | pad-left "^2.1.0" 2560 | pad-right "^0.2.2" 2561 | prettier-bytes "^1.0.3" 2562 | pretty-ms "^2.1.0" 2563 | split2 "^2.1.1" 2564 | 2565 | pino-std-serializers@^2.0.0: 2566 | version "2.2.1" 2567 | resolved "http://registry.npm.taobao.org/pino-std-serializers/download/pino-std-serializers-2.2.1.tgz#ceb583374358c75949e9c4ddbdd690428c15958e" 2568 | 2569 | pino@^4.17.3: 2570 | version "4.17.6" 2571 | resolved "http://registry.npm.taobao.org/pino/download/pino-4.17.6.tgz#8c237f3a29f4104f89321c25037deab6a7998fb4" 2572 | dependencies: 2573 | chalk "^2.4.1" 2574 | fast-json-parse "^1.0.3" 2575 | fast-safe-stringify "^1.2.3" 2576 | flatstr "^1.0.5" 2577 | pino-std-serializers "^2.0.0" 2578 | pump "^3.0.0" 2579 | quick-format-unescaped "^1.1.2" 2580 | split2 "^2.2.0" 2581 | 2582 | pkg-dir@^1.0.0: 2583 | version "1.0.0" 2584 | resolved "http://registry.npm.taobao.org/pkg-dir/download/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" 2585 | dependencies: 2586 | find-up "^1.0.0" 2587 | 2588 | plur@^1.0.0: 2589 | version "1.0.0" 2590 | resolved "http://registry.npm.taobao.org/plur/download/plur-1.0.0.tgz#db85c6814f5e5e5a3b49efc28d604fec62975156" 2591 | 2592 | posix-character-classes@^0.1.0: 2593 | version "0.1.1" 2594 | resolved "http://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" 2595 | 2596 | prepend-http@^1.0.1: 2597 | version "1.0.4" 2598 | resolved "http://registry.npm.taobao.org/prepend-http/download/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" 2599 | 2600 | preserve@^0.2.0: 2601 | version "0.2.0" 2602 | resolved "http://registry.npm.taobao.org/preserve/download/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" 2603 | 2604 | prettier-bytes@^1.0.3: 2605 | version "1.0.4" 2606 | resolved "http://registry.npm.taobao.org/prettier-bytes/download/prettier-bytes-1.0.4.tgz#994b02aa46f699c50b6257b5faaa7fe2557e62d6" 2607 | 2608 | pretty-ms@^2.1.0: 2609 | version "2.1.0" 2610 | resolved "http://registry.npm.taobao.org/pretty-ms/download/pretty-ms-2.1.0.tgz#4257c256df3fb0b451d6affaab021884126981dc" 2611 | dependencies: 2612 | is-finite "^1.0.1" 2613 | parse-ms "^1.0.0" 2614 | plur "^1.0.0" 2615 | 2616 | process-nextick-args@~2.0.0: 2617 | version "2.0.0" 2618 | resolved "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" 2619 | 2620 | proxy-addr@^2.0.3: 2621 | version "2.0.4" 2622 | resolved "http://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" 2623 | dependencies: 2624 | forwarded "~0.1.2" 2625 | ipaddr.js "1.8.0" 2626 | 2627 | pseudomap@^1.0.2: 2628 | version "1.0.2" 2629 | resolved "http://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 2630 | 2631 | psl@^1.1.24: 2632 | version "1.1.29" 2633 | resolved "http://registry.npm.taobao.org/psl/download/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67" 2634 | 2635 | pump@^2.0.0: 2636 | version "2.0.1" 2637 | resolved "http://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" 2638 | dependencies: 2639 | end-of-stream "^1.1.0" 2640 | once "^1.3.1" 2641 | 2642 | pump@^3.0.0: 2643 | version "3.0.0" 2644 | resolved "http://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 2645 | dependencies: 2646 | end-of-stream "^1.1.0" 2647 | once "^1.3.1" 2648 | 2649 | pumpify@^1.3.5: 2650 | version "1.5.1" 2651 | resolved "http://registry.npm.taobao.org/pumpify/download/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" 2652 | dependencies: 2653 | duplexify "^3.6.0" 2654 | inherits "^2.0.3" 2655 | pump "^2.0.0" 2656 | 2657 | punycode@^1.3.2, punycode@^1.4.1: 2658 | version "1.4.1" 2659 | resolved "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 2660 | 2661 | punycode@^2.1.0: 2662 | version "2.1.1" 2663 | resolved "http://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 2664 | 2665 | qs@^6.5.1, qs@~6.5.2: 2666 | version "6.5.2" 2667 | resolved "http://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 2668 | 2669 | quick-format-unescaped@^1.1.2: 2670 | version "1.1.2" 2671 | resolved "http://registry.npm.taobao.org/quick-format-unescaped/download/quick-format-unescaped-1.1.2.tgz#0ca581de3174becef25ac3c2e8956342381db698" 2672 | dependencies: 2673 | fast-safe-stringify "^1.0.8" 2674 | 2675 | randomatic@^3.0.0: 2676 | version "3.1.0" 2677 | resolved "http://registry.npm.taobao.org/randomatic/download/randomatic-3.1.0.tgz#36f2ca708e9e567f5ed2ec01949026d50aa10116" 2678 | dependencies: 2679 | is-number "^4.0.0" 2680 | kind-of "^6.0.0" 2681 | math-random "^1.0.1" 2682 | 2683 | range-parser@~1.2.0: 2684 | version "1.2.0" 2685 | resolved "http://registry.npm.taobao.org/range-parser/download/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" 2686 | 2687 | rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: 2688 | version "1.2.8" 2689 | resolved "http://registry.npm.taobao.org/rc/download/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" 2690 | dependencies: 2691 | deep-extend "^0.6.0" 2692 | ini "~1.3.0" 2693 | minimist "^1.2.0" 2694 | strip-json-comments "~2.0.1" 2695 | 2696 | read-pkg-up@^1.0.1: 2697 | version "1.0.1" 2698 | resolved "http://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" 2699 | dependencies: 2700 | find-up "^1.0.0" 2701 | read-pkg "^1.0.0" 2702 | 2703 | read-pkg@^1.0.0: 2704 | version "1.1.0" 2705 | resolved "http://registry.npm.taobao.org/read-pkg/download/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" 2706 | dependencies: 2707 | load-json-file "^1.0.0" 2708 | normalize-package-data "^2.3.2" 2709 | path-type "^1.0.0" 2710 | 2711 | readable-stream@1.1.x: 2712 | version "1.1.14" 2713 | resolved "http://registry.npm.taobao.org/readable-stream/download/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" 2714 | dependencies: 2715 | core-util-is "~1.0.0" 2716 | inherits "~2.0.1" 2717 | isarray "0.0.1" 2718 | string_decoder "~0.10.x" 2719 | 2720 | "readable-stream@> 1.0.0 < 3.0.0", readable-stream@^2, readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5: 2721 | version "2.3.6" 2722 | resolved "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 2723 | dependencies: 2724 | core-util-is "~1.0.0" 2725 | inherits "~2.0.3" 2726 | isarray "~1.0.0" 2727 | process-nextick-args "~2.0.0" 2728 | safe-buffer "~5.1.1" 2729 | string_decoder "~1.1.1" 2730 | util-deprecate "~1.0.1" 2731 | 2732 | readable-stream@^3.0.0: 2733 | version "3.0.3" 2734 | resolved "http://registry.npm.taobao.org/readable-stream/download/readable-stream-3.0.3.tgz#a4db8813e3e0b87abdc01d5d5dbae828e59744b5" 2735 | dependencies: 2736 | inherits "^2.0.3" 2737 | string_decoder "^1.1.1" 2738 | util-deprecate "^1.0.1" 2739 | 2740 | readdirp@^2.0.0: 2741 | version "2.1.0" 2742 | resolved "http://registry.npm.taobao.org/readdirp/download/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" 2743 | dependencies: 2744 | graceful-fs "^4.1.2" 2745 | minimatch "^3.0.2" 2746 | readable-stream "^2.0.2" 2747 | set-immediate-shim "^1.0.1" 2748 | 2749 | regenerator-runtime@^0.11.0: 2750 | version "0.11.1" 2751 | resolved "http://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" 2752 | 2753 | regex-cache@^0.4.2: 2754 | version "0.4.4" 2755 | resolved "http://registry.npm.taobao.org/regex-cache/download/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" 2756 | dependencies: 2757 | is-equal-shallow "^0.1.3" 2758 | 2759 | regex-not@^1.0.0, regex-not@^1.0.2: 2760 | version "1.0.2" 2761 | resolved "http://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" 2762 | dependencies: 2763 | extend-shallow "^3.0.2" 2764 | safe-regex "^1.1.0" 2765 | 2766 | regexp-clone@0.0.1: 2767 | version "0.0.1" 2768 | resolved "http://registry.npm.taobao.org/regexp-clone/download/regexp-clone-0.0.1.tgz#a7c2e09891fdbf38fbb10d376fb73003e68ac589" 2769 | 2770 | registry-auth-token@^3.0.1: 2771 | version "3.3.2" 2772 | resolved "http://registry.npm.taobao.org/registry-auth-token/download/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" 2773 | dependencies: 2774 | rc "^1.1.6" 2775 | safe-buffer "^5.0.1" 2776 | 2777 | registry-url@^3.0.3: 2778 | version "3.1.0" 2779 | resolved "http://registry.npm.taobao.org/registry-url/download/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" 2780 | dependencies: 2781 | rc "^1.0.1" 2782 | 2783 | remove-trailing-separator@^1.0.1: 2784 | version "1.1.0" 2785 | resolved "http://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" 2786 | 2787 | repeat-element@^1.1.2: 2788 | version "1.1.3" 2789 | resolved "http://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" 2790 | 2791 | repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: 2792 | version "1.6.1" 2793 | resolved "http://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 2794 | 2795 | repeating@^2.0.0: 2796 | version "2.0.1" 2797 | resolved "http://registry.npm.taobao.org/repeating/download/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" 2798 | dependencies: 2799 | is-finite "^1.0.0" 2800 | 2801 | request@^2.85.0: 2802 | version "2.88.0" 2803 | resolved "http://registry.npm.taobao.org/request/download/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" 2804 | dependencies: 2805 | aws-sign2 "~0.7.0" 2806 | aws4 "^1.8.0" 2807 | caseless "~0.12.0" 2808 | combined-stream "~1.0.6" 2809 | extend "~3.0.2" 2810 | forever-agent "~0.6.1" 2811 | form-data "~2.3.2" 2812 | har-validator "~5.1.0" 2813 | http-signature "~1.2.0" 2814 | is-typedarray "~1.0.0" 2815 | isstream "~0.1.2" 2816 | json-stringify-safe "~5.0.1" 2817 | mime-types "~2.1.19" 2818 | oauth-sign "~0.9.0" 2819 | performance-now "^2.1.0" 2820 | qs "~6.5.2" 2821 | safe-buffer "^5.1.2" 2822 | tough-cookie "~2.4.3" 2823 | tunnel-agent "^0.6.0" 2824 | uuid "^3.3.2" 2825 | 2826 | require-directory@^2.1.1: 2827 | version "2.1.1" 2828 | resolved "http://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 2829 | 2830 | require-main-filename@^1.0.1: 2831 | version "1.0.1" 2832 | resolved "http://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" 2833 | 2834 | require_optional@^1.0.1: 2835 | version "1.0.1" 2836 | resolved "http://registry.npm.taobao.org/require_optional/download/require_optional-1.0.1.tgz#4cf35a4247f64ca3df8c2ef208cc494b1ca8fc2e" 2837 | dependencies: 2838 | resolve-from "^2.0.0" 2839 | semver "^5.1.0" 2840 | 2841 | resolve-from@^2.0.0: 2842 | version "2.0.0" 2843 | resolved "http://registry.npm.taobao.org/resolve-from/download/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" 2844 | 2845 | resolve-from@^4.0.0: 2846 | version "4.0.0" 2847 | resolved "http://registry.npm.taobao.org/resolve-from/download/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 2848 | 2849 | resolve-url@^0.2.1: 2850 | version "0.2.1" 2851 | resolved "http://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" 2852 | 2853 | ret@~0.1.10: 2854 | version "0.1.15" 2855 | resolved "http://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" 2856 | 2857 | reusify@^1.0.0, reusify@^1.0.2: 2858 | version "1.0.4" 2859 | resolved "http://registry.npm.taobao.org/reusify/download/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 2860 | 2861 | rimraf@^2.6.1, rimraf@^2.6.2: 2862 | version "2.6.2" 2863 | resolved "http://registry.npm.taobao.org/rimraf/download/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 2864 | dependencies: 2865 | glob "^7.0.5" 2866 | 2867 | safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 2868 | version "5.1.2" 2869 | resolved "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 2870 | 2871 | safe-regex@^1.1.0: 2872 | version "1.1.0" 2873 | resolved "http://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" 2874 | dependencies: 2875 | ret "~0.1.10" 2876 | 2877 | "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: 2878 | version "2.1.2" 2879 | resolved "http://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 2880 | 2881 | saslprep@^1.0.0: 2882 | version "1.0.1" 2883 | resolved "http://registry.npm.taobao.org/saslprep/download/saslprep-1.0.1.tgz#b644e0ba25b156b652f3cb90df7542f896049ba6" 2884 | 2885 | sax@^1.2.4: 2886 | version "1.2.4" 2887 | resolved "http://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" 2888 | 2889 | semver-diff@^2.0.0: 2890 | version "2.1.0" 2891 | resolved "http://registry.npm.taobao.org/semver-diff/download/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" 2892 | dependencies: 2893 | semver "^5.0.3" 2894 | 2895 | semver-store@^0.3.0: 2896 | version "0.3.0" 2897 | resolved "http://registry.npm.taobao.org/semver-store/download/semver-store-0.3.0.tgz#ce602ff07df37080ec9f4fb40b29576547befbe9" 2898 | 2899 | "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: 2900 | version "5.5.1" 2901 | resolved "http://registry.npm.taobao.org/semver/download/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477" 2902 | 2903 | send@^0.16.0: 2904 | version "0.16.2" 2905 | resolved "http://registry.npm.taobao.org/send/download/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" 2906 | dependencies: 2907 | debug "2.6.9" 2908 | depd "~1.1.2" 2909 | destroy "~1.0.4" 2910 | encodeurl "~1.0.2" 2911 | escape-html "~1.0.3" 2912 | etag "~1.8.1" 2913 | fresh "0.5.2" 2914 | http-errors "~1.6.2" 2915 | mime "1.4.1" 2916 | ms "2.0.0" 2917 | on-finished "~2.3.0" 2918 | range-parser "~1.2.0" 2919 | statuses "~1.4.0" 2920 | 2921 | set-blocking@^2.0.0, set-blocking@~2.0.0: 2922 | version "2.0.0" 2923 | resolved "http://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 2924 | 2925 | set-immediate-shim@^1.0.1: 2926 | version "1.0.1" 2927 | resolved "http://registry.npm.taobao.org/set-immediate-shim/download/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" 2928 | 2929 | set-value@^0.4.3: 2930 | version "0.4.3" 2931 | resolved "http://registry.npm.taobao.org/set-value/download/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" 2932 | dependencies: 2933 | extend-shallow "^2.0.1" 2934 | is-extendable "^0.1.1" 2935 | is-plain-object "^2.0.1" 2936 | to-object-path "^0.3.0" 2937 | 2938 | set-value@^2.0.0: 2939 | version "2.0.0" 2940 | resolved "http://registry.npm.taobao.org/set-value/download/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" 2941 | dependencies: 2942 | extend-shallow "^2.0.1" 2943 | is-extendable "^0.1.1" 2944 | is-plain-object "^2.0.3" 2945 | split-string "^3.0.1" 2946 | 2947 | setprototypeof@1.1.0: 2948 | version "1.1.0" 2949 | resolved "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" 2950 | 2951 | shebang-command@^1.2.0: 2952 | version "1.2.0" 2953 | resolved "http://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 2954 | dependencies: 2955 | shebang-regex "^1.0.0" 2956 | 2957 | shebang-regex@^1.0.0: 2958 | version "1.0.0" 2959 | resolved "http://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 2960 | 2961 | signal-exit@^3.0.0, signal-exit@^3.0.1, signal-exit@^3.0.2: 2962 | version "3.0.2" 2963 | resolved "http://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 2964 | 2965 | sliced@1.0.1: 2966 | version "1.0.1" 2967 | resolved "http://registry.npm.taobao.org/sliced/download/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41" 2968 | 2969 | slide@^1.1.5: 2970 | version "1.1.6" 2971 | resolved "http://registry.npm.taobao.org/slide/download/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" 2972 | 2973 | snapdragon-node@^2.0.1: 2974 | version "2.1.1" 2975 | resolved "http://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" 2976 | dependencies: 2977 | define-property "^1.0.0" 2978 | isobject "^3.0.0" 2979 | snapdragon-util "^3.0.1" 2980 | 2981 | snapdragon-util@^3.0.1: 2982 | version "3.0.1" 2983 | resolved "http://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" 2984 | dependencies: 2985 | kind-of "^3.2.0" 2986 | 2987 | snapdragon@^0.8.1: 2988 | version "0.8.2" 2989 | resolved "http://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" 2990 | dependencies: 2991 | base "^0.11.1" 2992 | debug "^2.2.0" 2993 | define-property "^0.2.5" 2994 | extend-shallow "^2.0.1" 2995 | map-cache "^0.2.2" 2996 | source-map "^0.5.6" 2997 | source-map-resolve "^0.5.0" 2998 | use "^3.1.0" 2999 | 3000 | source-map-resolve@^0.5.0: 3001 | version "0.5.2" 3002 | resolved "http://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" 3003 | dependencies: 3004 | atob "^2.1.1" 3005 | decode-uri-component "^0.2.0" 3006 | resolve-url "^0.2.1" 3007 | source-map-url "^0.4.0" 3008 | urix "^0.1.0" 3009 | 3010 | source-map-support@^0.5.6: 3011 | version "0.5.9" 3012 | resolved "http://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" 3013 | dependencies: 3014 | buffer-from "^1.0.0" 3015 | source-map "^0.6.0" 3016 | 3017 | source-map-url@^0.4.0: 3018 | version "0.4.0" 3019 | resolved "http://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" 3020 | 3021 | source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7: 3022 | version "0.5.7" 3023 | resolved "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 3024 | 3025 | source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: 3026 | version "0.6.1" 3027 | resolved "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 3028 | 3029 | spawn-wrap@^1.4.2: 3030 | version "1.4.2" 3031 | resolved "http://registry.npm.taobao.org/spawn-wrap/download/spawn-wrap-1.4.2.tgz#cff58e73a8224617b6561abdc32586ea0c82248c" 3032 | dependencies: 3033 | foreground-child "^1.5.6" 3034 | mkdirp "^0.5.0" 3035 | os-homedir "^1.0.1" 3036 | rimraf "^2.6.2" 3037 | signal-exit "^3.0.2" 3038 | which "^1.3.0" 3039 | 3040 | spdx-correct@^3.0.0: 3041 | version "3.0.0" 3042 | resolved "http://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" 3043 | dependencies: 3044 | spdx-expression-parse "^3.0.0" 3045 | spdx-license-ids "^3.0.0" 3046 | 3047 | spdx-exceptions@^2.1.0: 3048 | version "2.1.0" 3049 | resolved "http://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" 3050 | 3051 | spdx-expression-parse@^3.0.0: 3052 | version "3.0.0" 3053 | resolved "http://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" 3054 | dependencies: 3055 | spdx-exceptions "^2.1.0" 3056 | spdx-license-ids "^3.0.0" 3057 | 3058 | spdx-license-ids@^3.0.0: 3059 | version "3.0.1" 3060 | resolved "http://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-3.0.1.tgz#e2a303236cac54b04031fa7a5a79c7e701df852f" 3061 | 3062 | split-string@^3.0.1, split-string@^3.0.2: 3063 | version "3.1.0" 3064 | resolved "http://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" 3065 | dependencies: 3066 | extend-shallow "^3.0.0" 3067 | 3068 | split2@^2.0.0, split2@^2.1.1, split2@^2.2.0: 3069 | version "2.2.0" 3070 | resolved "http://registry.npm.taobao.org/split2/download/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" 3071 | dependencies: 3072 | through2 "^2.0.2" 3073 | 3074 | sprintf-js@~1.0.2: 3075 | version "1.0.3" 3076 | resolved "http://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 3077 | 3078 | sshpk@^1.7.0: 3079 | version "1.14.2" 3080 | resolved "http://registry.npm.taobao.org/sshpk/download/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98" 3081 | dependencies: 3082 | asn1 "~0.2.3" 3083 | assert-plus "^1.0.0" 3084 | dashdash "^1.12.0" 3085 | getpass "^0.1.1" 3086 | safer-buffer "^2.0.2" 3087 | optionalDependencies: 3088 | bcrypt-pbkdf "^1.0.0" 3089 | ecc-jsbn "~0.1.1" 3090 | jsbn "~0.1.0" 3091 | tweetnacl "~0.14.0" 3092 | 3093 | stack-utils@^1.0.0: 3094 | version "1.0.1" 3095 | resolved "http://registry.npm.taobao.org/stack-utils/download/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" 3096 | 3097 | static-extend@^0.1.1: 3098 | version "0.1.2" 3099 | resolved "http://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" 3100 | dependencies: 3101 | define-property "^0.2.5" 3102 | object-copy "^0.1.0" 3103 | 3104 | "statuses@>= 1.4.0 < 2": 3105 | version "1.5.0" 3106 | resolved "http://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 3107 | 3108 | statuses@~1.4.0: 3109 | version "1.4.0" 3110 | resolved "http://registry.npm.taobao.org/statuses/download/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" 3111 | 3112 | steed@^1.1.3: 3113 | version "1.1.3" 3114 | resolved "http://registry.npm.taobao.org/steed/download/steed-1.1.3.tgz#f1525dd5adb12eb21bf74749537668d625b9abc5" 3115 | dependencies: 3116 | fastfall "^1.5.0" 3117 | fastparallel "^2.2.0" 3118 | fastq "^1.3.0" 3119 | fastseries "^1.7.0" 3120 | reusify "^1.0.0" 3121 | 3122 | stream-shift@^1.0.0: 3123 | version "1.0.0" 3124 | resolved "http://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" 3125 | 3126 | streamifier@^0.1.1: 3127 | version "0.1.1" 3128 | resolved "http://registry.npm.taobao.org/streamifier/download/streamifier-0.1.1.tgz#97e98d8fa4d105d62a2691d1dc07e820db8dfc4f" 3129 | 3130 | streamsearch@0.1.2: 3131 | version "0.1.2" 3132 | resolved "http://registry.npm.taobao.org/streamsearch/download/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" 3133 | 3134 | string-width@^1.0.1: 3135 | version "1.0.2" 3136 | resolved "http://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 3137 | dependencies: 3138 | code-point-at "^1.0.0" 3139 | is-fullwidth-code-point "^1.0.0" 3140 | strip-ansi "^3.0.0" 3141 | 3142 | "string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: 3143 | version "2.1.1" 3144 | resolved "http://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 3145 | dependencies: 3146 | is-fullwidth-code-point "^2.0.0" 3147 | strip-ansi "^4.0.0" 3148 | 3149 | string_decoder@^1.1.1, string_decoder@~1.1.1: 3150 | version "1.1.1" 3151 | resolved "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 3152 | dependencies: 3153 | safe-buffer "~5.1.0" 3154 | 3155 | string_decoder@~0.10.x: 3156 | version "0.10.31" 3157 | resolved "http://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 3158 | 3159 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 3160 | version "3.0.1" 3161 | resolved "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 3162 | dependencies: 3163 | ansi-regex "^2.0.0" 3164 | 3165 | strip-ansi@^4.0.0: 3166 | version "4.0.0" 3167 | resolved "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 3168 | dependencies: 3169 | ansi-regex "^3.0.0" 3170 | 3171 | strip-bom@^2.0.0: 3172 | version "2.0.0" 3173 | resolved "http://registry.npm.taobao.org/strip-bom/download/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" 3174 | dependencies: 3175 | is-utf8 "^0.2.0" 3176 | 3177 | strip-eof@^1.0.0: 3178 | version "1.0.0" 3179 | resolved "http://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 3180 | 3181 | strip-json-comments@~2.0.1: 3182 | version "2.0.1" 3183 | resolved "http://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 3184 | 3185 | supports-color@^2.0.0: 3186 | version "2.0.0" 3187 | resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 3188 | 3189 | supports-color@^3.1.2: 3190 | version "3.2.3" 3191 | resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" 3192 | dependencies: 3193 | has-flag "^1.0.0" 3194 | 3195 | supports-color@^5.3.0: 3196 | version "5.5.0" 3197 | resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 3198 | dependencies: 3199 | has-flag "^3.0.0" 3200 | 3201 | tap-mocha-reporter@^3.0.7: 3202 | version "3.0.7" 3203 | resolved "http://registry.npm.taobao.org/tap-mocha-reporter/download/tap-mocha-reporter-3.0.7.tgz#235e57893b500861ea5d0924965dadfb2f05eaa7" 3204 | dependencies: 3205 | color-support "^1.1.0" 3206 | debug "^2.1.3" 3207 | diff "^1.3.2" 3208 | escape-string-regexp "^1.0.3" 3209 | glob "^7.0.5" 3210 | js-yaml "^3.3.1" 3211 | tap-parser "^5.1.0" 3212 | unicode-length "^1.0.0" 3213 | optionalDependencies: 3214 | readable-stream "^2.1.5" 3215 | 3216 | tap-parser@^5.1.0: 3217 | version "5.4.0" 3218 | resolved "http://registry.npm.taobao.org/tap-parser/download/tap-parser-5.4.0.tgz#6907e89725d7b7fa6ae41ee2c464c3db43188aec" 3219 | dependencies: 3220 | events-to-array "^1.0.1" 3221 | js-yaml "^3.2.7" 3222 | optionalDependencies: 3223 | readable-stream "^2" 3224 | 3225 | tap-parser@^7.0.0: 3226 | version "7.0.0" 3227 | resolved "http://registry.npm.taobao.org/tap-parser/download/tap-parser-7.0.0.tgz#54db35302fda2c2ccc21954ad3be22b2cba42721" 3228 | dependencies: 3229 | events-to-array "^1.0.1" 3230 | js-yaml "^3.2.7" 3231 | minipass "^2.2.0" 3232 | 3233 | tap@^12.0.0: 3234 | version "12.0.1" 3235 | resolved "http://registry.npm.taobao.org/tap/download/tap-12.0.1.tgz#748f103d3ae84dce21e555b7112ec5a19adeb6d0" 3236 | dependencies: 3237 | bind-obj-methods "^2.0.0" 3238 | bluebird "^3.5.1" 3239 | clean-yaml-object "^0.1.0" 3240 | color-support "^1.1.0" 3241 | coveralls "^3.0.1" 3242 | foreground-child "^1.3.3" 3243 | fs-exists-cached "^1.0.0" 3244 | function-loop "^1.0.1" 3245 | glob "^7.0.0" 3246 | isexe "^2.0.0" 3247 | js-yaml "^3.11.0" 3248 | minipass "^2.3.0" 3249 | mkdirp "^0.5.1" 3250 | nyc "^11.8.0" 3251 | opener "^1.4.1" 3252 | os-homedir "^1.0.2" 3253 | own-or "^1.0.0" 3254 | own-or-env "^1.0.1" 3255 | rimraf "^2.6.2" 3256 | signal-exit "^3.0.0" 3257 | source-map-support "^0.5.6" 3258 | stack-utils "^1.0.0" 3259 | tap-mocha-reporter "^3.0.7" 3260 | tap-parser "^7.0.0" 3261 | tmatch "^4.0.0" 3262 | trivial-deferred "^1.0.1" 3263 | tsame "^2.0.0" 3264 | write-file-atomic "^2.3.0" 3265 | yapool "^1.0.0" 3266 | 3267 | tar@^4: 3268 | version "4.4.6" 3269 | resolved "http://registry.npm.taobao.org/tar/download/tar-4.4.6.tgz#63110f09c00b4e60ac8bcfe1bf3c8660235fbc9b" 3270 | dependencies: 3271 | chownr "^1.0.1" 3272 | fs-minipass "^1.2.5" 3273 | minipass "^2.3.3" 3274 | minizlib "^1.1.0" 3275 | mkdirp "^0.5.0" 3276 | safe-buffer "^5.1.2" 3277 | yallist "^3.0.2" 3278 | 3279 | term-size@^1.2.0: 3280 | version "1.2.0" 3281 | resolved "http://registry.npm.taobao.org/term-size/download/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" 3282 | dependencies: 3283 | execa "^0.7.0" 3284 | 3285 | test-exclude@^4.2.0: 3286 | version "4.2.3" 3287 | resolved "http://registry.npm.taobao.org/test-exclude/download/test-exclude-4.2.3.tgz#a9a5e64474e4398339245a0a769ad7c2f4a97c20" 3288 | dependencies: 3289 | arrify "^1.0.1" 3290 | micromatch "^2.3.11" 3291 | object-assign "^4.1.0" 3292 | read-pkg-up "^1.0.1" 3293 | require-main-filename "^1.0.1" 3294 | 3295 | through2-filter@^2.0.0: 3296 | version "2.0.0" 3297 | resolved "http://registry.npm.taobao.org/through2-filter/download/through2-filter-2.0.0.tgz#60bc55a0dacb76085db1f9dae99ab43f83d622ec" 3298 | dependencies: 3299 | through2 "~2.0.0" 3300 | xtend "~4.0.0" 3301 | 3302 | through2@^2.0.1, through2@^2.0.2, through2@~2.0.0: 3303 | version "2.0.3" 3304 | resolved "http://registry.npm.taobao.org/through2/download/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" 3305 | dependencies: 3306 | readable-stream "^2.1.5" 3307 | xtend "~4.0.1" 3308 | 3309 | timed-out@^4.0.0: 3310 | version "4.0.1" 3311 | resolved "http://registry.npm.taobao.org/timed-out/download/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" 3312 | 3313 | tiny-lru@^1.6.1: 3314 | version "1.6.1" 3315 | resolved "http://registry.npm.taobao.org/tiny-lru/download/tiny-lru-1.6.1.tgz#addb5c043311d1f07cd3a81d706ae739b8efebb1" 3316 | 3317 | tmatch@^4.0.0: 3318 | version "4.0.0" 3319 | resolved "http://registry.npm.taobao.org/tmatch/download/tmatch-4.0.0.tgz#ba178007f30bf6a70f37c643fca5045fb2f8c448" 3320 | 3321 | tmpl@1.0.x: 3322 | version "1.0.4" 3323 | resolved "http://registry.npm.taobao.org/tmpl/download/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" 3324 | 3325 | to-absolute-glob@^2.0.0: 3326 | version "2.0.2" 3327 | resolved "http://registry.npm.taobao.org/to-absolute-glob/download/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" 3328 | dependencies: 3329 | is-absolute "^1.0.0" 3330 | is-negated-glob "^1.0.0" 3331 | 3332 | to-fast-properties@^1.0.3: 3333 | version "1.0.3" 3334 | resolved "http://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" 3335 | 3336 | to-object-path@^0.3.0: 3337 | version "0.3.0" 3338 | resolved "http://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" 3339 | dependencies: 3340 | kind-of "^3.0.2" 3341 | 3342 | to-regex-range@^2.1.0: 3343 | version "2.1.1" 3344 | resolved "http://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" 3345 | dependencies: 3346 | is-number "^3.0.0" 3347 | repeat-string "^1.6.1" 3348 | 3349 | to-regex@^3.0.1, to-regex@^3.0.2: 3350 | version "3.0.2" 3351 | resolved "http://registry.npm.taobao.org/to-regex/download/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" 3352 | dependencies: 3353 | define-property "^2.0.2" 3354 | extend-shallow "^3.0.2" 3355 | regex-not "^1.0.2" 3356 | safe-regex "^1.1.0" 3357 | 3358 | tough-cookie@~2.4.3: 3359 | version "2.4.3" 3360 | resolved "http://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" 3361 | dependencies: 3362 | psl "^1.1.24" 3363 | punycode "^1.4.1" 3364 | 3365 | trim-right@^1.0.1: 3366 | version "1.0.1" 3367 | resolved "http://registry.npm.taobao.org/trim-right/download/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" 3368 | 3369 | trivial-deferred@^1.0.1: 3370 | version "1.0.1" 3371 | resolved "http://registry.npm.taobao.org/trivial-deferred/download/trivial-deferred-1.0.1.tgz#376d4d29d951d6368a6f7a0ae85c2f4d5e0658f3" 3372 | 3373 | tsame@^2.0.0: 3374 | version "2.0.0" 3375 | resolved "http://registry.npm.taobao.org/tsame/download/tsame-2.0.0.tgz#4923c805cbd789775eca33b9d0c67b358a7d86a8" 3376 | 3377 | tunnel-agent@^0.6.0: 3378 | version "0.6.0" 3379 | resolved "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 3380 | dependencies: 3381 | safe-buffer "^5.0.1" 3382 | 3383 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 3384 | version "0.14.5" 3385 | resolved "http://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 3386 | 3387 | uglify-js@^3.1.4: 3388 | version "3.4.9" 3389 | resolved "http://registry.npm.taobao.org/uglify-js/download/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3" 3390 | dependencies: 3391 | commander "~2.17.1" 3392 | source-map "~0.6.1" 3393 | 3394 | unc-path-regex@^0.1.2: 3395 | version "0.1.2" 3396 | resolved "http://registry.npm.taobao.org/unc-path-regex/download/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" 3397 | 3398 | unicode-length@^1.0.0: 3399 | version "1.0.3" 3400 | resolved "http://registry.npm.taobao.org/unicode-length/download/unicode-length-1.0.3.tgz#5ada7a7fed51841a418a328cf149478ac8358abb" 3401 | dependencies: 3402 | punycode "^1.3.2" 3403 | strip-ansi "^3.0.1" 3404 | 3405 | union-value@^1.0.0: 3406 | version "1.0.0" 3407 | resolved "http://registry.npm.taobao.org/union-value/download/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" 3408 | dependencies: 3409 | arr-union "^3.1.0" 3410 | get-value "^2.0.6" 3411 | is-extendable "^0.1.1" 3412 | set-value "^0.4.3" 3413 | 3414 | unique-stream@^2.0.2: 3415 | version "2.2.1" 3416 | resolved "http://registry.npm.taobao.org/unique-stream/download/unique-stream-2.2.1.tgz#5aa003cfbe94c5ff866c4e7d668bb1c4dbadb369" 3417 | dependencies: 3418 | json-stable-stringify "^1.0.0" 3419 | through2-filter "^2.0.0" 3420 | 3421 | unique-string@^1.0.0: 3422 | version "1.0.0" 3423 | resolved "http://registry.npm.taobao.org/unique-string/download/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" 3424 | dependencies: 3425 | crypto-random-string "^1.0.0" 3426 | 3427 | universalify@^0.1.0: 3428 | version "0.1.2" 3429 | resolved "http://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" 3430 | 3431 | unset-value@^1.0.0: 3432 | version "1.0.0" 3433 | resolved "http://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" 3434 | dependencies: 3435 | has-value "^0.3.1" 3436 | isobject "^3.0.0" 3437 | 3438 | unzip-response@^2.0.1: 3439 | version "2.0.1" 3440 | resolved "http://registry.npm.taobao.org/unzip-response/download/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" 3441 | 3442 | upath@^1.0.5: 3443 | version "1.1.0" 3444 | resolved "http://registry.npm.taobao.org/upath/download/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" 3445 | 3446 | update-notifier@^2.4.0: 3447 | version "2.5.0" 3448 | resolved "http://registry.npm.taobao.org/update-notifier/download/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" 3449 | dependencies: 3450 | boxen "^1.2.1" 3451 | chalk "^2.0.1" 3452 | configstore "^3.0.0" 3453 | import-lazy "^2.1.0" 3454 | is-ci "^1.0.10" 3455 | is-installed-globally "^0.1.0" 3456 | is-npm "^1.0.0" 3457 | latest-version "^3.0.0" 3458 | semver-diff "^2.0.0" 3459 | xdg-basedir "^3.0.0" 3460 | 3461 | uri-js@^4.2.2: 3462 | version "4.2.2" 3463 | resolved "http://registry.npm.taobao.org/uri-js/download/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" 3464 | dependencies: 3465 | punycode "^2.1.0" 3466 | 3467 | urix@^0.1.0: 3468 | version "0.1.0" 3469 | resolved "http://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" 3470 | 3471 | url-parse-lax@^1.0.0: 3472 | version "1.0.0" 3473 | resolved "http://registry.npm.taobao.org/url-parse-lax/download/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" 3474 | dependencies: 3475 | prepend-http "^1.0.1" 3476 | 3477 | use@^3.1.0: 3478 | version "3.1.1" 3479 | resolved "http://registry.npm.taobao.org/use/download/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" 3480 | 3481 | util-deprecate@^1.0.1, util-deprecate@~1.0.1: 3482 | version "1.0.2" 3483 | resolved "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 3484 | 3485 | uuid@^3.3.2: 3486 | version "3.3.2" 3487 | resolved "http://registry.npm.taobao.org/uuid/download/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" 3488 | 3489 | validate-npm-package-license@^3.0.1: 3490 | version "3.0.4" 3491 | resolved "http://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" 3492 | dependencies: 3493 | spdx-correct "^3.0.0" 3494 | spdx-expression-parse "^3.0.0" 3495 | 3496 | vary@^1.1.2: 3497 | version "1.1.2" 3498 | resolved "http://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 3499 | 3500 | verror@1.10.0: 3501 | version "1.10.0" 3502 | resolved "http://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 3503 | dependencies: 3504 | assert-plus "^1.0.0" 3505 | core-util-is "1.0.2" 3506 | extsprintf "^1.2.0" 3507 | 3508 | walker@^1.0.6: 3509 | version "1.0.7" 3510 | resolved "http://registry.npm.taobao.org/walker/download/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" 3511 | dependencies: 3512 | makeerror "1.0.x" 3513 | 3514 | which-module@^2.0.0: 3515 | version "2.0.0" 3516 | resolved "http://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 3517 | 3518 | which@^1.2.9, which@^1.3.0: 3519 | version "1.3.1" 3520 | resolved "http://registry.npm.taobao.org/which/download/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 3521 | dependencies: 3522 | isexe "^2.0.0" 3523 | 3524 | wide-align@^1.1.0: 3525 | version "1.1.3" 3526 | resolved "http://registry.npm.taobao.org/wide-align/download/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 3527 | dependencies: 3528 | string-width "^1.0.2 || 2" 3529 | 3530 | widest-line@^2.0.0: 3531 | version "2.0.0" 3532 | resolved "http://registry.npm.taobao.org/widest-line/download/widest-line-2.0.0.tgz#0142a4e8a243f8882c0233aa0e0281aa76152273" 3533 | dependencies: 3534 | string-width "^2.1.1" 3535 | 3536 | wordwrap@~0.0.2: 3537 | version "0.0.3" 3538 | resolved "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" 3539 | 3540 | wrap-ansi@^2.0.0: 3541 | version "2.1.0" 3542 | resolved "http://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" 3543 | dependencies: 3544 | string-width "^1.0.1" 3545 | strip-ansi "^3.0.1" 3546 | 3547 | wrappy@1: 3548 | version "1.0.2" 3549 | resolved "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 3550 | 3551 | write-file-atomic@^1.1.4: 3552 | version "1.3.4" 3553 | resolved "http://registry.npm.taobao.org/write-file-atomic/download/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f" 3554 | dependencies: 3555 | graceful-fs "^4.1.11" 3556 | imurmurhash "^0.1.4" 3557 | slide "^1.1.5" 3558 | 3559 | write-file-atomic@^2.0.0, write-file-atomic@^2.3.0: 3560 | version "2.3.0" 3561 | resolved "http://registry.npm.taobao.org/write-file-atomic/download/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" 3562 | dependencies: 3563 | graceful-fs "^4.1.11" 3564 | imurmurhash "^0.1.4" 3565 | signal-exit "^3.0.2" 3566 | 3567 | xdg-basedir@^3.0.0: 3568 | version "3.0.0" 3569 | resolved "http://registry.npm.taobao.org/xdg-basedir/download/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" 3570 | 3571 | xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: 3572 | version "4.0.1" 3573 | resolved "http://registry.npm.taobao.org/xtend/download/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 3574 | 3575 | y18n@^3.2.1: 3576 | version "3.2.1" 3577 | resolved "http://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" 3578 | 3579 | yallist@^2.1.2: 3580 | version "2.1.2" 3581 | resolved "http://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 3582 | 3583 | yallist@^3.0.0, yallist@^3.0.2: 3584 | version "3.0.2" 3585 | resolved "http://registry.npm.taobao.org/yallist/download/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" 3586 | 3587 | yapool@^1.0.0: 3588 | version "1.0.0" 3589 | resolved "http://registry.npm.taobao.org/yapool/download/yapool-1.0.0.tgz#f693f29a315b50d9a9da2646a7a6645c96985b6a" 3590 | 3591 | yargs-parser@^8.0.0: 3592 | version "8.1.0" 3593 | resolved "http://registry.npm.taobao.org/yargs-parser/download/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" 3594 | dependencies: 3595 | camelcase "^4.1.0" 3596 | 3597 | yargs-parser@^9.0.2: 3598 | version "9.0.2" 3599 | resolved "http://registry.npm.taobao.org/yargs-parser/download/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" 3600 | dependencies: 3601 | camelcase "^4.1.0" 3602 | 3603 | yargs@11.1.0: 3604 | version "11.1.0" 3605 | resolved "http://registry.npm.taobao.org/yargs/download/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" 3606 | dependencies: 3607 | cliui "^4.0.0" 3608 | decamelize "^1.1.1" 3609 | find-up "^2.1.0" 3610 | get-caller-file "^1.0.1" 3611 | os-locale "^2.0.0" 3612 | require-directory "^2.1.1" 3613 | require-main-filename "^1.0.1" 3614 | set-blocking "^2.0.0" 3615 | string-width "^2.0.0" 3616 | which-module "^2.0.0" 3617 | y18n "^3.2.1" 3618 | yargs-parser "^9.0.2" 3619 | --------------------------------------------------------------------------------