├── readme.md
├── package.json
├── .gitignore
├── public
├── images
│ ├── go.svg
│ ├── back.svg
│ ├── pen.svg
│ ├── ok.svg
│ ├── account.svg
│ ├── close.svg
│ ├── eraser.svg
│ ├── clear.svg
│ ├── submit.svg
│ ├── new.svg
│ ├── size.svg
│ ├── send.svg
│ ├── wait.svg
│ ├── newroom.svg
│ ├── draw.svg
│ ├── drap.svg
│ ├── chat.svg
│ ├── color.svg
│ └── home.svg
├── index.css
└── index.html
├── server.js
└── yarn.lock
/readme.md:
--------------------------------------------------------------------------------
1 | # webrtc+socket.io+canvas实现的你画我猜小游戏
2 | ### [项目掘金文章](https://juejin.im/post/5cd3c94d6fb9a03214377acb)
3 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "dependencies": {
3 | "koa": "^2.7.0",
4 | "koa-socket": "^4.4.0",
5 | "koa-static": "^5.0.0",
6 | "path": "^0.12.7",
7 | "socket.io": "^2.2.0"
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/public/images/go.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/images/back.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/images/pen.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/images/ok.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/images/account.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/images/close.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/images/eraser.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/images/clear.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/images/submit.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/images/new.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/images/size.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/images/send.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/images/wait.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/images/newroom.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/images/draw.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/images/drap.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/images/chat.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/images/color.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/images/home.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/server.js:
--------------------------------------------------------------------------------
1 | import Koa from 'koa'
2 | import { join } from 'path'
3 | import Static from 'koa-static'
4 | import Socket from 'socket.io'
5 |
6 | // 保存user
7 | const users = {}
8 | // 保存房间
9 | const rooms = {}
10 | // 保存socket
11 | const sockets = {}
12 |
13 | // 题目
14 | const question = ['花','对牛弹琴', '冰糖葫芦', '刻舟求剑', '口红', '七上八下', '放风筝', '台灯',"理发师", "雷人", "不入虎穴焉得虎子", "仙人掌", "耳机", "打火机", "汉堡", "画饼充饥", "虎头蛇尾", "泪流满面", "捧腹大笑", "画蛇添足", "一手遮天", "掩耳盗铃", "布娃娃", "娃哈哈", "CD", "落地灯", "内裤", "烟斗", "鹦鹉", "钻戒", "网址", "牛肉面"]
15 |
16 | // 用户类
17 | class User {
18 | constructor(name, socre = 0, state=false, isoption=false) {
19 | this.name = name
20 | this.socre = socre
21 | this.state = state
22 | this.isoption = isoption
23 | }
24 | addSocre() {
25 | this.socre += 2
26 | }
27 | }
28 | // 房间类
29 | class Room {
30 | constructor(name) {
31 | this.name = name
32 | this.users = []
33 | this.index = 0
34 | this.question = ''
35 | }
36 | addUser(user) {
37 | this.users.push(user)
38 | }
39 | deleteUser(user) {
40 | this.users.splice(this.users.indexOf(user), 1)
41 | }
42 | init() {
43 | this.index = 0
44 | for (let user of this.users) {
45 | user.state = false
46 | user.socre = 0
47 | user.isoption = false
48 | }
49 | this.question = ''
50 | }
51 | }
52 | // 创建一个socket.io
53 | const io = new Socket({
54 | options : {
55 | pingTimeout: 10000,
56 | pingInterval: 5000
57 | }
58 | })
59 | // 创建koa
60 | const app = new Koa()
61 | // socket注入app
62 | io.attach(app)
63 |
64 | // 添加指定静态web文件的Static路径
65 | // Static(root, opts) 这里将public作为根路径
66 | app.use(Static(
67 | // join 拼接路径
68 | // __dirname返回被执行文件夹的绝对路径
69 | join( __dirname, './public')
70 | ))
71 |
72 | function getRoomList(rooms) {
73 | let r = Object.keys(rooms)
74 | let room = r.map(room => {
75 | return {room: room, length: rooms[room].users.length}
76 | })
77 | return room
78 | }
79 | function getRoomUsers(data) {
80 | let roomusers
81 | if (data.room && Object.keys(rooms).length) {
82 | roomusers = rooms[data.room].users
83 | }
84 | return roomusers || []
85 | }
86 |
87 | io.on('connection', socket => {
88 | // 初始化
89 | socket.on('init', (data) => {
90 | socket.emit('init', {room: getRoomList(rooms), roomusers: getRoomUsers(data)})
91 | })
92 | // 创建账户
93 | socket.on('createUser', data => {
94 | let user = new User(data)
95 | users[data] = user
96 | sockets[data] = socket
97 | })
98 | // 创建房间
99 | socket.on('createRoom', data => {
100 | socket.join(data.room, () => {
101 | let room = new Room(data.room)
102 | rooms[data.room] = room
103 | })
104 | })
105 | // 加入房间
106 | socket.on('joinRoom', data => {
107 | // socket api 加入房间 (房间名字, 回调)
108 | socket.join(data.room, () => {
109 | let user = new User(data.user)
110 | rooms[data.room].addUser(user)
111 | socket.emit('broadcast', {msg: '你已经加入了房间'})
112 | socket.to(data.room).emit('broadcast', {msg: `${data.user}已经加入了房间`})
113 | io.in(data.room).emit('joinedRoom', {roomusers: getRoomUsers(data), joinUser: data.user})
114 | io.emit('roomChange', {room: getRoomList(rooms)})
115 | })
116 | })
117 | // 离开房间
118 | socket.on('leaveRoom', data => {
119 | socket.leave(data.room, () => {
120 | rooms[data.room].deleteUser(data.user)
121 | if (!rooms[data.room].users.length) {
122 | delete rooms[data.room]
123 | }
124 | socket.emit('broadcast', {msg: '你已经离开了房间'})
125 | socket.to(data.room).emit('broadcast', {msg: `${data.user}已经离开了房间`})
126 | io.emit('roomChange', {room: getRoomList(rooms)})
127 | socket.to(data.room).emit('leaveRoom', {roomusers: getRoomUsers(data), leaveUser: data.user})
128 | })
129 | })
130 | // 准备
131 | socket.on('stateChange', (data) => {
132 | let users = rooms[data.room].users
133 | let index = users.findIndex((user) => {
134 | return user.name === data.user
135 | })
136 | users[index].state = data.state
137 | let allStated = users.every((user) => {
138 | return user.state === true
139 | })
140 | if (allStated && rooms[data.room].users.length === 2) {
141 | let room = data.room
142 | let index = rooms[room].index
143 | let users = rooms[room].users
144 | let random = Math.floor(Math.random() * 32)
145 | users[index].isoption = true
146 | rooms[room].question = question[random]
147 | sockets[users[index].name].to(room).emit('broadcast', {msg: `游戏已经开始,本轮你为猜题者`})
148 | sockets[users[index].name].emit('broadcast', {msg: `游戏已经开始,本轮你为画手`})
149 | io.to(room).emit('gameStart', {roomusers: getRoomUsers(data)})
150 | sockets[users[index].name].to(room).emit('guessPage', {question: rooms[room].question.length})
151 | sockets[users[index].name].emit('paintStart', {index: index, room: room, question: rooms[room].question})
152 | } else {
153 | io.to(data.room).emit('stateChanged', {roomusers: getRoomUsers(data)})
154 | }
155 | })
156 | socket.on('paintEnd', data => {
157 | socket.to(data.room).emit('guessStart')
158 | socket.to(data.room).emit('broadcast', {msg: '已经绘画完成,请开始猜吧'})
159 | })
160 | socket.on('submitAnswer', data => {
161 | let users = rooms[data.room].users
162 | let index = users.findIndex((user) => {
163 | return user.name === data.user
164 | })
165 | users[index].isoption = true
166 | if (data.answer === rooms[data.room].question) {
167 | users[index].addSocre()
168 | }
169 | let allOptioned = users.every((user) => {
170 | return user.isoption === true
171 | })
172 | console.log(allOptioned)
173 | if (allOptioned) {
174 | if (rooms[data.room].index === 1) {
175 | console.log('gameEnd')
176 | io.to(data.room).emit('gameEnd', {roomusers: getRoomUsers(data)})
177 | io.to(data.room).emit('broadcast', {msg: `本次游戏已经结束,请观看积分`})
178 | rooms[data.room].init()
179 | } else {
180 | rooms[data.room].index++
181 | io.to(data.room).emit('guessEnd', {roomusers: getRoomUsers(data)})
182 | io.to(data.room).emit('broadcast', {msg: `第${rooms[data.room].index}轮已经结束,答案已经公布`})
183 | }
184 | sockets[users[index].name].to(data.room).emit('showAnswer', {answer: rooms[data.room].question})
185 | }
186 | })
187 |
188 | // 关于房间nat穿透
189 | // 转发offer
190 | socket.on('offer', data => {
191 | socket.to(sockets[data.toUser].id).emit('offer', data)
192 | })
193 | // 转发answer
194 | socket.on('answer', data => {
195 | socket.to(sockets[data.toUser].id).emit('answer', data)
196 | })
197 | // 转发iceCandidate
198 | socket.on('ice', data => {
199 | socket.to(sockets[data.toUser].id).emit('ice', data)
200 | })
201 |
202 | })
203 | // 断开连接
204 | io.on('disconnect', socket => {
205 | // 当该io断开,将user在users中去除
206 | users.splice(users.indexOf(socket[socket.id]), 1)
207 | // 删除socket
208 | delete sockets[socket.id]
209 | })
210 | io.listen(app.listen(3000, () => {
211 | console.log('server start at port: ' + 3000)
212 | }))
--------------------------------------------------------------------------------
/public/index.css:
--------------------------------------------------------------------------------
1 | /* 基本配置 */
2 | * {
3 | margin: 0;
4 | padding: 0;
5 | }
6 |
7 | ul li {
8 | list-style: none
9 | }
10 |
11 | html, body {
12 | background-color: #f7f7f7;
13 | position: relative;
14 | }
15 | /* 基本配置 */
16 |
17 |
18 | /* 布局 */
19 | .container {
20 | display: flex;
21 | margin: 0 auto;
22 | width: 1200px;
23 | height: 600px;
24 | border: 2px solid #f7f7f7;
25 | background-color: #fff;
26 | border-radius: 5px;
27 | }
28 |
29 | .left {
30 | width: 200px;
31 | height: 100%;
32 | position: relative;
33 | overflow: hidden;
34 | }
35 |
36 | .right {
37 | width: 350px;
38 | height: 100%;
39 | position: relative;
40 | overflow: hidden;
41 | }
42 |
43 | .center {
44 | flex: 1;
45 | background-color: #f7f7f7;
46 | position: relative;
47 | overflow: hidden;
48 | display: none;
49 | }
50 | .shade {
51 | position: fixed;
52 | display: none;
53 | width: 100vw;
54 | height: 100vh;
55 | left: 0;
56 | top: 0;
57 | z-index: 100;
58 | background-color: rgba(0, 0, 0, 0.5);
59 | }
60 | .new {
61 | margin-top: 200px;
62 | margin-left: 550px;
63 | }
64 | .new input {
65 | width: 200px;
66 | height: 30px;
67 | padding: 3px 0 3px 10px;
68 | box-sizing: border-box;
69 | position: relative;
70 | outline: none;
71 | border: 1px solid #707070;
72 | top: -10px;
73 | left: 5px;
74 | color: #707070;
75 | border-radius: 5px;
76 | }
77 | .new input + span {
78 | content: url(./images/submit.svg);
79 | width: 30px;
80 | height: 30px;
81 | margin-top: 5px;
82 | margin-left: 20px;
83 | cursor: pointer;
84 | }
85 | .shade i {
86 | content: url(./images/close.svg);
87 | width: 30px;
88 | height: 30px;
89 | margin-left: 90%;
90 | margin-top: 4%;
91 | cursor: pointer;
92 | }
93 | /* 布局 */
94 |
95 | /* 头部 */
96 | .header {
97 | width: 1200px;
98 | margin: 50px auto 0;
99 | height: 50px;
100 | border: 1px solid #fff;
101 | border-bottom: 0;
102 | overflow: hidden;
103 | text-align: right;
104 | position: relative;
105 | }
106 | .header .createUser {
107 | float: left;
108 | content: url(./images/new.svg);
109 | width: 40px;
110 | height: 40px;
111 | margin-top: 5px;
112 | margin-left: 30px;
113 | cursor: pointer;
114 | }
115 | .createUser:hover + P{
116 | top: 50%;
117 | }
118 | .createUser + p {
119 | position: absolute;
120 | top: -100%;
121 | left: 11%;
122 | transform: translate(-50%,-50%);
123 | color: #707070;
124 | font-size: 20px;
125 | transition: all 0.3s;
126 | }
127 |
128 | .user {
129 | content: url(./images/account.svg);
130 | right: 13%;
131 | width: 40px;
132 | height: 40px;
133 | margin-right: 10px;
134 | margin-top: 5px;
135 | float: right;
136 | }
137 | .user + p {
138 | font-size: 26px;
139 | height: 40px;
140 | line-height: 40px;
141 | width: 500px;
142 | float: right;
143 | text-align: right;
144 | padding-right: 20px;
145 | color: #707070;
146 | position: relative;
147 | top: 5px;
148 | }
149 | /* 头部 */
150 |
151 |
152 | /* 左侧房间列表 */
153 | .home {
154 | content: url(./images/home.svg);
155 | margin-top: 10px;
156 | margin-left: 10px;
157 | width: 35px;
158 | height: 35px;
159 | }
160 | .home:hover + span {
161 | top: 3%;
162 | }
163 | .left span {
164 | position: absolute;
165 | top: -20%;
166 | left: 30%;
167 | height: 30px;
168 | color: #707070;
169 | line-height: 30px;
170 | transform: translate(-10%, 0%);
171 | transition: all 0.3s;
172 | }
173 |
174 | .list {
175 | text-align: center;
176 | }
177 | .userList {
178 | height: 160px;
179 | }
180 | .list p {
181 | height: 40px;
182 | line-height: 40px;
183 | cursor: pointer;
184 | position: relative;
185 | }
186 |
187 | .list p:first-child {
188 | margin-top: 10px;
189 | }
190 |
191 | .list p:nth-of-type(n) {
192 | background-color: #f7f7f7;
193 | }
194 |
195 | .list p:nth-of-type(2n) {
196 | background-color: #ffffff;
197 | }
198 |
199 | .list p span {
200 | position: absolute;
201 | top: 50%;
202 | left: 80%;
203 | transform: translate(-50%, -50%);
204 | display: inline-block;
205 | border: 1px solid #707070;
206 | color: #707070;
207 | font-size: 11px;
208 | text-align: center;
209 | line-height: 20px;
210 | border-radius: 2px;
211 | height: 20px;
212 | width: 40px;
213 | }
214 | .userList p{
215 | cursor: default;
216 | }
217 | .left-bottom {
218 | position: absolute;
219 | bottom: 10px;
220 | width: 100%;
221 | height: 100px;
222 | }
223 | .roomops {
224 | float: left;
225 | width: 100%;
226 | height: 50px;
227 | position: relative;
228 | overflow: hidden;
229 | }
230 | .roomop {
231 | margin-top: 5px;
232 | cursor: pointer;
233 | }
234 | .roomop:hover + p{
235 | top: 0%;
236 | }
237 | .roomop + p {
238 | position: absolute;
239 | width: 100px;
240 | top: -100%;
241 | left: 30%;
242 | transition: all 0.3s;
243 | transform: translateY(-30%,0%);
244 | line-height: 50px;
245 | text-align: center;
246 | color: #707070;
247 | font-size: 16px;
248 | }
249 | .createRoom {
250 | margin-left: 20px;
251 | width: 40px;
252 | height: 40px;
253 | content: url(./images/newroom.svg);
254 | }
255 | .drap {
256 | width: 35px;
257 | height: 35px;
258 | margin-left: 25px;
259 | content: url(./images/drap.svg);
260 | }
261 | /* 左侧房间列表 */
262 |
263 | /* 画板区域 */
264 |
265 | .draw {
266 | content: url(./images/draw.svg);
267 | width: 35px;
268 | height: 35px;
269 | margin-top: 10px;
270 | margin-left: 50px;
271 | position: relative;
272 | }
273 |
274 | .center head {
275 | height: 55px;
276 | position: relative;
277 | overflow: hidden;
278 | }
279 | .draw:hover + p {
280 | top: 3%;
281 | }
282 |
283 | .head p {
284 | position: absolute;
285 | top: -20%;
286 | left: 15%;
287 | height: 35px;
288 | line-height: 35px;
289 | color: #707070;
290 | transition: top 0.3s;
291 | }
292 |
293 | .center ul {
294 | width: 450px;
295 | float: right;
296 | height: 40px;
297 | margin-top: 10px;
298 | }
299 |
300 | ul li {
301 | position: relative;
302 | cursor: pointer;
303 | float: left;
304 | width: 35px;
305 | height: 35px;
306 | margin-left: 15px;
307 | border-radius: 5px;
308 | border: 2px solid #707070;
309 | text-align: center;
310 | overflow: hidden;
311 | }
312 |
313 | ul li:hover {
314 | box-shadow: 1px 0px 5px #707070;
315 | }
316 | .center .head ul li:hover span {
317 | top: 50%;
318 | }
319 | .center .head ul li:nth-of-type(6):hover + .weight-select{
320 | display: inline-block;
321 | }
322 | ul li img {
323 | position: absolute;
324 | top: 50%;
325 | left: 50%;
326 | transform: translate(-50%, -50%);
327 | width: 80%;
328 | height: 80%;
329 | }
330 | .center .head ul li span {
331 | background-color: #fff;
332 | width: 30px;
333 | height: 30px;
334 | color: #707070;
335 | text-align: center;
336 | line-height: 30px;
337 | position: absolute;
338 | top: 150%;
339 | left: 50%;
340 | transform: translate(-50%,-50%);
341 | font-size: 14px;
342 | z-index: 10;
343 | transition: top 0.3s;
344 | }
345 |
346 | .weight-select {
347 | width: 40px;
348 | height: 100px;
349 | position: absolute;
350 | top: 7%;
351 | left: 74.5%;
352 | display: none;
353 | transition: all 0.3s;
354 | }
355 | .weight-select:hover {
356 | display: inline-block;
357 | }
358 | .weight-select p{
359 | position: relative;
360 | top: 0;
361 | left: 0;
362 | width: 40px;
363 | height: 20px;
364 | margin-bottom: 3px;
365 | line-height: 20px;
366 | text-align: center;
367 | background-color: #fff;
368 | cursor: pointer;
369 | }
370 | .weight-select p:first-child {
371 | margin-top: 10px;
372 | }
373 | .weight-select p:hover {
374 | background-color: #707070;
375 | color: #f7f7f7;
376 | }
377 | .center-footer {
378 | position: absolute;
379 | bottom: 5px;
380 | right: 0;
381 | width: 300px;
382 | margin-left: 10px;
383 | height: 100px;
384 | }
385 | .questionTip {
386 | font-size: 20px;
387 | color: #707070;
388 | text-align: center;
389 | /* display: inline-block; */
390 | width: 250px;
391 | height: 50px;
392 | line-height: 50px;
393 | /* position: relative; */
394 | /* top: 20px; */
395 | }
396 | .answer {
397 | outline: none;
398 | border: 1px solid#bfbfbf;
399 | border-radius: 5px;
400 | height: 25px;
401 | line-height: 25px;
402 | box-sizing: border-box;
403 | padding-left: 10px;
404 | }
405 | .answerBtn {
406 | width: 25px;
407 | height: 25px;
408 | content: url(./images/ok.svg);
409 | cursor: pointer;
410 | position: relative;
411 | margin-left: 20px;
412 | top: 8px;
413 | }
414 | .paintEnd {
415 | width: 35px;
416 | height: 35px;
417 | content: url(./images/ok.svg);
418 | cursor: pointer;
419 | margin-left: 120px;
420 | }
421 | /* 画板区域 */
422 |
423 | /* 右侧房间信息 */
424 | .right {
425 | display: none;
426 | }
427 | .right .head {
428 | vertical-align: center;
429 | }
430 | .right .head i {
431 | content: url(./images/wait.svg);
432 | width: 45px;
433 | height: 45px;
434 | margin-top: 10px;
435 | margin-left: 10px;
436 | }
437 | .right .head i:hover + p {
438 | top: 3%;
439 | }
440 | .right .head p {
441 | position: absolute;
442 | top: -20%;
443 | left: 15%;
444 | color: #707070;
445 | transition: top 0.3s;
446 | }
447 |
448 | .chat {
449 | position: relative;
450 | overflow: hidden;
451 | }
452 | .chat i {
453 | content: url(./images/chat.svg);
454 | width: 35px;
455 | height: 35px;
456 | margin-left: 20px;
457 | }
458 | .chat i:hover + p {
459 | top: 3%;
460 | }
461 | .chat i + p {
462 | position: absolute;
463 | top: -100%;
464 | left: 18%;
465 | color: #707070;
466 | transition: top 0.3s;
467 | }
468 | .chatList {
469 | margin: 0 auto;
470 | width: 310px;
471 | height: 280px;
472 | background-color: #f7f7f7;
473 | overflow:auto;
474 | }
475 | .chatList p {
476 | width: 95%;
477 | box-sizing: border-box;
478 | padding-left: 15px;
479 | display: inline-block;
480 | color: #707070;
481 | font-size: 14px;
482 | line-height: 1;
483 | word-break: normal;
484 | word-wrap: break-word;
485 | }
486 | .submit i {
487 | content: url(./images/send.svg);
488 | width: 25px;
489 | height: 25px;
490 | cursor: pointer;
491 | margin-left: 50px;
492 | }
493 | .submit {
494 | margin: 0 auto;
495 | width: 310px;
496 | height: 40px;
497 | background-color: #f7f7f7;
498 | position: relative;
499 | }
500 | .submit input {
501 | width: 200px;
502 | height: 25px;
503 | padding: 3px 0 3px 10px;
504 | color: #bfbfbf;
505 | box-sizing: border-box;
506 | position: relative;
507 | outline: none;
508 | border-radius: 5px;
509 | border: 1px solid #bfbfbf;
510 | top: -5px;
511 | left: 30px;
512 | }
513 | /* 右侧房间信息 */
514 | /* 广播 */
515 | .broadcast {
516 | position: fixed;
517 | top: 0;
518 | height: 50px;
519 | line-height: 50px;
520 | font-size: 25px;
521 | color: #707070;
522 | background-color: #f7f7f7;
523 | border-radius: 5px;
524 | text-align: right;
525 | z-index: 10;
526 | animation: broadcast 3s forwards ease-in-out;
527 | transition: all 3s;
528 | }
529 | @keyframes broadcast {
530 | 0% {
531 | right: 0;
532 | opacity: 0;
533 | }
534 | 50% {
535 | right: 50px;
536 | opacity: 1;
537 | }
538 | 75% {
539 | right: 50px;
540 | opacity: 1;
541 | }
542 | 100% {
543 | right: 0;
544 | opacity: 0;
545 | }
546 | }
547 | /* 广播 */
548 | /* video */
549 | .video {
550 | position: absolute;
551 | background-color: #fff;
552 | width: 600px;
553 | height: 400px;
554 | left: 25px;
555 | top: 70px;
556 | }
557 | /* video */
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | 你画我猜
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
27 |
28 |
29 |
主页
30 |
房间列表...
31 |
32 |
33 |
34 |
退出房间
35 |
退出房间...
36 |
37 |
38 |
创建房间
39 |
创建房间...
40 |
41 |
42 |
43 |
44 |
45 |
46 |
画板...
47 |
48 | -
49 | 画笔
50 |
51 |
52 | -
53 | 橡皮
54 |
55 |
56 | -
57 | 撤退
58 |
59 |
60 | -
61 | 前进
62 |
63 |
64 | -
65 | 清屏
66 |
67 |
68 | -
69 | 粗细
70 |
71 |
72 |
73 |
1px
74 |
5px
75 |
10px
76 |
30px
77 |
78 | -
79 | 颜色
80 |
81 |
82 |
83 |
84 |
85 |
86 |
88 |
89 |
90 |
95 |
96 |
97 |
98 |
99 |
等待
100 |
准备中...
101 |
102 |
103 |
104 |
聊天
105 |
聊天室...
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
930 |
931 |
932 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | accepts@1.1.4:
6 | version "1.1.4"
7 | resolved "https://registry.npm.taobao.org/accepts/download/accepts-1.1.4.tgz#d71c96f7d41d0feda2c38cd14e8a27c04158df4a"
8 | integrity sha1-1xyW99QdD+2iw4zRToonwEFY30o=
9 | dependencies:
10 | mime-types "~2.0.4"
11 | negotiator "0.4.9"
12 |
13 | accepts@^1.3.5, accepts@~1.3.4:
14 | version "1.3.5"
15 | resolved "https://registry.npm.taobao.org/accepts/download/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2"
16 | integrity sha1-63d99gEXI6OxTopywIBcjoZ0a9I=
17 | dependencies:
18 | mime-types "~2.1.18"
19 | negotiator "0.6.1"
20 |
21 | after@0.8.1:
22 | version "0.8.1"
23 | resolved "https://registry.npm.taobao.org/after/download/after-0.8.1.tgz#ab5d4fb883f596816d3515f8f791c0af486dd627"
24 | integrity sha1-q11PuIP1loFtNRX495HAr0ht1ic=
25 |
26 | after@0.8.2:
27 | version "0.8.2"
28 | resolved "https://registry.npm.taobao.org/after/download/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f"
29 | integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=
30 |
31 | any-promise@^1.0.0, any-promise@^1.1.0:
32 | version "1.3.0"
33 | resolved "https://registry.npm.taobao.org/any-promise/download/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
34 | integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
35 |
36 | arraybuffer.slice@0.0.6:
37 | version "0.0.6"
38 | resolved "https://registry.npm.taobao.org/arraybuffer.slice/download/arraybuffer.slice-0.0.6.tgz#f33b2159f0532a3f3107a272c0ccfbd1ad2979ca"
39 | integrity sha1-8zshWfBTKj8xB6JywMz70a0peco=
40 |
41 | arraybuffer.slice@~0.0.7:
42 | version "0.0.7"
43 | resolved "https://registry.npm.taobao.org/arraybuffer.slice/download/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675"
44 | integrity sha1-O7xCdd1YTMGxCAm4nU6LY6aednU=
45 |
46 | async-limiter@~1.0.0:
47 | version "1.0.0"
48 | resolved "https://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8"
49 | integrity sha1-ePrtjD0HSrgfIrTphdeehzj3IPg=
50 |
51 | backo2@1.0.2:
52 | version "1.0.2"
53 | resolved "https://registry.npm.taobao.org/backo2/download/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
54 | integrity sha1-MasayLEpNjRj41s+u2n038+6eUc=
55 |
56 | base64-arraybuffer@0.1.2:
57 | version "0.1.2"
58 | resolved "https://registry.npm.taobao.org/base64-arraybuffer/download/base64-arraybuffer-0.1.2.tgz#474df4a9f2da24e05df3158c3b1db3c3cd46a154"
59 | integrity sha1-R030qfLaJOBd8xWMOx2zw81GoVQ=
60 |
61 | base64-arraybuffer@0.1.5:
62 | version "0.1.5"
63 | resolved "https://registry.npm.taobao.org/base64-arraybuffer/download/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8"
64 | integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg=
65 |
66 | base64id@0.1.0:
67 | version "0.1.0"
68 | resolved "https://registry.npm.taobao.org/base64id/download/base64id-0.1.0.tgz#02ce0fdeee0cef4f40080e1e73e834f0b1bfce3f"
69 | integrity sha1-As4P3u4M709ACA4ec+g08LG/zj8=
70 |
71 | base64id@1.0.0:
72 | version "1.0.0"
73 | resolved "https://registry.npm.taobao.org/base64id/download/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6"
74 | integrity sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=
75 |
76 | benchmark@1.0.0:
77 | version "1.0.0"
78 | resolved "https://registry.npm.taobao.org/benchmark/download/benchmark-1.0.0.tgz#2f1e2fa4c359f11122aa183082218e957e390c73"
79 | integrity sha1-Lx4vpMNZ8REiqhgwgiGOlX45DHM=
80 |
81 | better-assert@~1.0.0:
82 | version "1.0.2"
83 | resolved "https://registry.npm.taobao.org/better-assert/download/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522"
84 | integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=
85 | dependencies:
86 | callsite "1.0.0"
87 |
88 | blob@0.0.4:
89 | version "0.0.4"
90 | resolved "https://registry.npm.taobao.org/blob/download/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921"
91 | integrity sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=
92 |
93 | blob@0.0.5:
94 | version "0.0.5"
95 | resolved "https://registry.npm.taobao.org/blob/download/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683"
96 | integrity sha1-1oDu7yX4zZGtUz9bAe7UjmTK9oM=
97 |
98 | cache-content-type@^1.0.0:
99 | version "1.0.1"
100 | resolved "https://registry.npm.taobao.org/cache-content-type/download/cache-content-type-1.0.1.tgz#035cde2b08ee2129f4a8315ea8f00a00dba1453c"
101 | integrity sha1-A1zeKwjuISn0qDFeqPAKANuhRTw=
102 | dependencies:
103 | mime-types "^2.1.18"
104 | ylru "^1.2.0"
105 |
106 | callsite@1.0.0:
107 | version "1.0.0"
108 | resolved "https://registry.npm.taobao.org/callsite/download/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20"
109 | integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA=
110 |
111 | co@^4.6.0:
112 | version "4.6.0"
113 | resolved "https://registry.npm.taobao.org/co/download/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
114 | integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
115 |
116 | component-bind@1.0.0:
117 | version "1.0.0"
118 | resolved "https://registry.npm.taobao.org/component-bind/download/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1"
119 | integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=
120 |
121 | component-emitter@1.1.2:
122 | version "1.1.2"
123 | resolved "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.1.2.tgz#296594f2753daa63996d2af08d15a95116c9aec3"
124 | integrity sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=
125 |
126 | component-emitter@1.2.0:
127 | version "1.2.0"
128 | resolved "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.0.tgz#ccd113a86388d06482d03de3fc7df98526ba8efe"
129 | integrity sha1-zNETqGOI0GSC0D3j/H35hSa6jv4=
130 |
131 | component-emitter@1.2.1:
132 | version "1.2.1"
133 | resolved "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
134 | integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=
135 |
136 | component-inherit@0.0.3:
137 | version "0.0.3"
138 | resolved "https://registry.npm.taobao.org/component-inherit/download/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143"
139 | integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=
140 |
141 | content-disposition@~0.5.2:
142 | version "0.5.3"
143 | resolved "https://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
144 | integrity sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70=
145 | dependencies:
146 | safe-buffer "5.1.2"
147 |
148 | content-type@^1.0.4:
149 | version "1.0.4"
150 | resolved "https://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
151 | integrity sha1-4TjMdeBAxyexlm/l5fjJruJW/js=
152 |
153 | cookie@0.3.1:
154 | version "0.3.1"
155 | resolved "https://registry.npm.taobao.org/cookie/download/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
156 | integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=
157 |
158 | cookies@~0.7.1:
159 | version "0.7.3"
160 | resolved "https://registry.npm.taobao.org/cookies/download/cookies-0.7.3.tgz#7912ce21fbf2e8c2da70cf1c3f351aecf59dadfa"
161 | integrity sha1-eRLOIfvy6MLacM8cPzUa7PWdrfo=
162 | dependencies:
163 | depd "~1.1.2"
164 | keygrip "~1.0.3"
165 |
166 | debug@0.7.4:
167 | version "0.7.4"
168 | resolved "https://registry.npm.taobao.org/debug/download/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39"
169 | integrity sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=
170 |
171 | debug@2.2.0:
172 | version "2.2.0"
173 | resolved "https://registry.npm.taobao.org/debug/download/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
174 | integrity sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=
175 | dependencies:
176 | ms "0.7.1"
177 |
178 | debug@^3.1.0:
179 | version "3.2.6"
180 | resolved "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
181 | integrity sha1-6D0X3hbYp++3cX7b5fsQE17uYps=
182 | dependencies:
183 | ms "^2.1.1"
184 |
185 | debug@~3.1.0:
186 | version "3.1.0"
187 | resolved "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
188 | integrity sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=
189 | dependencies:
190 | ms "2.0.0"
191 |
192 | debug@~4.1.0:
193 | version "4.1.1"
194 | resolved "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
195 | integrity sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=
196 | dependencies:
197 | ms "^2.1.1"
198 |
199 | deep-equal@~1.0.1:
200 | version "1.0.1"
201 | resolved "https://registry.npm.taobao.org/deep-equal/download/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
202 | integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=
203 |
204 | delegates@^1.0.0:
205 | version "1.0.0"
206 | resolved "https://registry.npm.taobao.org/delegates/download/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
207 | integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
208 |
209 | depd@^1.1.2, depd@~1.1.2:
210 | version "1.1.2"
211 | resolved "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
212 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
213 |
214 | destroy@^1.0.4:
215 | version "1.0.4"
216 | resolved "https://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
217 | integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
218 |
219 | ee-first@1.1.1:
220 | version "1.1.1"
221 | resolved "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
222 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
223 |
224 | engine.io-client@1.6.8:
225 | version "1.6.8"
226 | resolved "https://registry.npm.taobao.org/engine.io-client/download/engine.io-client-1.6.8.tgz#6e2db11648b45e405c46b172ea3e3dac37cc0ceb"
227 | integrity sha1-bi2xFki0XkBcRrFy6j49rDfMDOs=
228 | dependencies:
229 | component-emitter "1.1.2"
230 | component-inherit "0.0.3"
231 | debug "2.2.0"
232 | engine.io-parser "1.2.4"
233 | has-cors "1.1.0"
234 | indexof "0.0.1"
235 | parsejson "0.0.1"
236 | parseqs "0.0.2"
237 | parseuri "0.0.4"
238 | ws "1.0.1"
239 | xmlhttprequest-ssl "1.5.1"
240 | yeast "0.1.2"
241 |
242 | engine.io-client@~3.3.1:
243 | version "3.3.2"
244 | resolved "https://registry.npm.taobao.org/engine.io-client/download/engine.io-client-3.3.2.tgz#04e068798d75beda14375a264bb3d742d7bc33aa"
245 | integrity sha1-BOBoeY11vtoUN1omS7PXQte8M6o=
246 | dependencies:
247 | component-emitter "1.2.1"
248 | component-inherit "0.0.3"
249 | debug "~3.1.0"
250 | engine.io-parser "~2.1.1"
251 | has-cors "1.1.0"
252 | indexof "0.0.1"
253 | parseqs "0.0.5"
254 | parseuri "0.0.5"
255 | ws "~6.1.0"
256 | xmlhttprequest-ssl "~1.5.4"
257 | yeast "0.1.2"
258 |
259 | engine.io-parser@1.2.4:
260 | version "1.2.4"
261 | resolved "https://registry.npm.taobao.org/engine.io-parser/download/engine.io-parser-1.2.4.tgz#e0897b0bf14e792d4cd2a5950553919c56948c42"
262 | integrity sha1-4Il7C/FOeS1M0qWVBVORnFaUjEI=
263 | dependencies:
264 | after "0.8.1"
265 | arraybuffer.slice "0.0.6"
266 | base64-arraybuffer "0.1.2"
267 | blob "0.0.4"
268 | has-binary "0.1.6"
269 | utf8 "2.1.0"
270 |
271 | engine.io-parser@~2.1.0, engine.io-parser@~2.1.1:
272 | version "2.1.3"
273 | resolved "https://registry.npm.taobao.org/engine.io-parser/download/engine.io-parser-2.1.3.tgz#757ab970fbf2dfb32c7b74b033216d5739ef79a6"
274 | integrity sha1-dXq5cPvy37Mse3SwMyFtVznveaY=
275 | dependencies:
276 | after "0.8.2"
277 | arraybuffer.slice "~0.0.7"
278 | base64-arraybuffer "0.1.5"
279 | blob "0.0.5"
280 | has-binary2 "~1.0.2"
281 |
282 | engine.io@1.6.8:
283 | version "1.6.8"
284 | resolved "https://registry.npm.taobao.org/engine.io/download/engine.io-1.6.8.tgz#de05a06b757e7517695e088c7b051c47819f511b"
285 | integrity sha1-3gWga3V+dRdpXgiMewUcR4GfURs=
286 | dependencies:
287 | accepts "1.1.4"
288 | base64id "0.1.0"
289 | debug "2.2.0"
290 | engine.io-parser "1.2.4"
291 | ws "1.0.1"
292 |
293 | engine.io@~3.3.1:
294 | version "3.3.2"
295 | resolved "https://registry.npm.taobao.org/engine.io/download/engine.io-3.3.2.tgz#18cbc8b6f36e9461c5c0f81df2b830de16058a59"
296 | integrity sha1-GMvItvNulGHFwPgd8rgw3hYFilk=
297 | dependencies:
298 | accepts "~1.3.4"
299 | base64id "1.0.0"
300 | cookie "0.3.1"
301 | debug "~3.1.0"
302 | engine.io-parser "~2.1.0"
303 | ws "~6.1.0"
304 |
305 | error-inject@^1.0.0:
306 | version "1.0.0"
307 | resolved "https://registry.npm.taobao.org/error-inject/download/error-inject-1.0.0.tgz#e2b3d91b54aed672f309d950d154850fa11d4f37"
308 | integrity sha1-4rPZG1Su1nLzCdlQ0VSFD6EdTzc=
309 |
310 | escape-html@^1.0.3:
311 | version "1.0.3"
312 | resolved "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
313 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
314 |
315 | fresh@~0.5.2:
316 | version "0.5.2"
317 | resolved "https://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
318 | integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
319 |
320 | has-binary2@~1.0.2:
321 | version "1.0.3"
322 | resolved "https://registry.npm.taobao.org/has-binary2/download/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d"
323 | integrity sha1-d3asYn8+p3JQz8My2rfd9eT10R0=
324 | dependencies:
325 | isarray "2.0.1"
326 |
327 | has-binary@0.1.6:
328 | version "0.1.6"
329 | resolved "https://registry.npm.taobao.org/has-binary/download/has-binary-0.1.6.tgz#25326f39cfa4f616ad8787894e3af2cfbc7b6e10"
330 | integrity sha1-JTJvOc+k9hath4eJTjryz7x7bhA=
331 | dependencies:
332 | isarray "0.0.1"
333 |
334 | has-binary@0.1.7:
335 | version "0.1.7"
336 | resolved "https://registry.npm.taobao.org/has-binary/download/has-binary-0.1.7.tgz#68e61eb16210c9545a0a5cce06a873912fe1e68c"
337 | integrity sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=
338 | dependencies:
339 | isarray "0.0.1"
340 |
341 | has-cors@1.1.0:
342 | version "1.1.0"
343 | resolved "https://registry.npm.taobao.org/has-cors/download/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39"
344 | integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=
345 |
346 | http-assert@^1.3.0:
347 | version "1.4.0"
348 | resolved "https://registry.npm.taobao.org/http-assert/download/http-assert-1.4.0.tgz#0e550b4fca6adf121bbeed83248c17e62f593a9a"
349 | integrity sha1-DlULT8pq3xIbvu2DJIwX5i9ZOpo=
350 | dependencies:
351 | deep-equal "~1.0.1"
352 | http-errors "~1.7.1"
353 |
354 | http-errors@^1.6.3, http-errors@~1.7.1:
355 | version "1.7.2"
356 | resolved "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"
357 | integrity sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=
358 | dependencies:
359 | depd "~1.1.2"
360 | inherits "2.0.3"
361 | setprototypeof "1.1.1"
362 | statuses ">= 1.5.0 < 2"
363 | toidentifier "1.0.0"
364 |
365 | http-errors@~1.6.2:
366 | version "1.6.3"
367 | resolved "https://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
368 | integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=
369 | dependencies:
370 | depd "~1.1.2"
371 | inherits "2.0.3"
372 | setprototypeof "1.1.0"
373 | statuses ">= 1.4.0 < 2"
374 |
375 | indexof@0.0.1:
376 | version "0.0.1"
377 | resolved "https://registry.npm.taobao.org/indexof/download/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
378 | integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=
379 |
380 | inherits@2.0.3:
381 | version "2.0.3"
382 | resolved "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
383 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
384 |
385 | is-generator-function@^1.0.7:
386 | version "1.0.7"
387 | resolved "https://registry.npm.taobao.org/is-generator-function/download/is-generator-function-1.0.7.tgz#d2132e529bb0000a7f80794d4bdf5cd5e5813522"
388 | integrity sha1-0hMuUpuwAAp/gHlNS99c1eWBNSI=
389 |
390 | isarray@0.0.1:
391 | version "0.0.1"
392 | resolved "https://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
393 | integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
394 |
395 | isarray@2.0.1:
396 | version "2.0.1"
397 | resolved "https://registry.npm.taobao.org/isarray/download/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e"
398 | integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=
399 |
400 | json3@3.2.6:
401 | version "3.2.6"
402 | resolved "https://registry.npm.taobao.org/json3/download/json3-3.2.6.tgz#f6efc93c06a04de9aec53053df2559bb19e2038b"
403 | integrity sha1-9u/JPAagTemuxTBT3yVZuxniA4s=
404 |
405 | json3@3.3.2:
406 | version "3.3.2"
407 | resolved "https://registry.npm.taobao.org/json3/download/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1"
408 | integrity sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=
409 |
410 | keygrip@~1.0.3:
411 | version "1.0.3"
412 | resolved "https://registry.npm.taobao.org/keygrip/download/keygrip-1.0.3.tgz#399d709f0aed2bab0a059e0cdd3a5023a053e1dc"
413 | integrity sha1-OZ1wnwrtK6sKBZ4M3TpQI6BT4dw=
414 |
415 | koa-compose@3.1.0:
416 | version "3.1.0"
417 | resolved "https://registry.npm.taobao.org/koa-compose/download/koa-compose-3.1.0.tgz#f6e32f1b8953f7c87b97fc10c208fed334da76f4"
418 | integrity sha1-9uMvG4lT98h7l/wQwgj+0zTadvQ=
419 | dependencies:
420 | any-promise "^1.1.0"
421 |
422 | koa-compose@^3.0.0:
423 | version "3.2.1"
424 | resolved "https://registry.npm.taobao.org/koa-compose/download/koa-compose-3.2.1.tgz#a85ccb40b7d986d8e5a345b3a1ace8eabcf54de7"
425 | integrity sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=
426 | dependencies:
427 | any-promise "^1.1.0"
428 |
429 | koa-compose@^4.1.0:
430 | version "4.1.0"
431 | resolved "https://registry.npm.taobao.org/koa-compose/download/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877"
432 | integrity sha1-UHMGuTcZAdtBEhyBLpI9DWfT6Hc=
433 |
434 | koa-convert@^1.2.0:
435 | version "1.2.0"
436 | resolved "https://registry.npm.taobao.org/koa-convert/download/koa-convert-1.2.0.tgz#da40875df49de0539098d1700b50820cebcd21d0"
437 | integrity sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=
438 | dependencies:
439 | co "^4.6.0"
440 | koa-compose "^3.0.0"
441 |
442 | koa-is-json@^1.0.0:
443 | version "1.0.0"
444 | resolved "https://registry.npm.taobao.org/koa-is-json/download/koa-is-json-1.0.0.tgz#273c07edcdcb8df6a2c1ab7d59ee76491451ec14"
445 | integrity sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ=
446 |
447 | koa-send@^5.0.0:
448 | version "5.0.0"
449 | resolved "https://registry.npm.taobao.org/koa-send/download/koa-send-5.0.0.tgz#5e8441e07ef55737734d7ced25b842e50646e7eb"
450 | integrity sha1-XoRB4H71VzdzTXztJbhC5QZG5+s=
451 | dependencies:
452 | debug "^3.1.0"
453 | http-errors "^1.6.3"
454 | mz "^2.7.0"
455 | resolve-path "^1.4.0"
456 |
457 | koa-socket@^4.4.0:
458 | version "4.4.0"
459 | resolved "https://registry.npm.taobao.org/koa-socket/download/koa-socket-4.4.0.tgz#e651a003980d96d96fce3955116dfbc563665097"
460 | integrity sha1-5lGgA5gNltlvzjlVEW37xWNmUJc=
461 | dependencies:
462 | koa-compose "3.1.0"
463 | socket.io "1.4.5"
464 |
465 | koa-static@^5.0.0:
466 | version "5.0.0"
467 | resolved "https://registry.npm.taobao.org/koa-static/download/koa-static-5.0.0.tgz#5e92fc96b537ad5219f425319c95b64772776943"
468 | integrity sha1-XpL8lrU3rVIZ9CUxnJW2R3J3aUM=
469 | dependencies:
470 | debug "^3.1.0"
471 | koa-send "^5.0.0"
472 |
473 | koa@^2.7.0:
474 | version "2.7.0"
475 | resolved "https://registry.npm.taobao.org/koa/download/koa-2.7.0.tgz#7e00843506942b9d82c6cc33749f657c6e5e7adf"
476 | integrity sha1-fgCENQaUK52CxswzdJ9lfG5eet8=
477 | dependencies:
478 | accepts "^1.3.5"
479 | cache-content-type "^1.0.0"
480 | content-disposition "~0.5.2"
481 | content-type "^1.0.4"
482 | cookies "~0.7.1"
483 | debug "~3.1.0"
484 | delegates "^1.0.0"
485 | depd "^1.1.2"
486 | destroy "^1.0.4"
487 | error-inject "^1.0.0"
488 | escape-html "^1.0.3"
489 | fresh "~0.5.2"
490 | http-assert "^1.3.0"
491 | http-errors "^1.6.3"
492 | is-generator-function "^1.0.7"
493 | koa-compose "^4.1.0"
494 | koa-convert "^1.2.0"
495 | koa-is-json "^1.0.0"
496 | on-finished "^2.3.0"
497 | only "~0.0.2"
498 | parseurl "^1.3.2"
499 | statuses "^1.5.0"
500 | type-is "^1.6.16"
501 | vary "^1.1.2"
502 |
503 | media-typer@0.3.0:
504 | version "0.3.0"
505 | resolved "https://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
506 | integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
507 |
508 | mime-db@1.40.0:
509 | version "1.40.0"
510 | resolved "https://registry.npm.taobao.org/mime-db/download/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32"
511 | integrity sha1-plBX6ZjbCQ9zKmj2wnbTh9QSbDI=
512 |
513 | mime-db@~1.12.0:
514 | version "1.12.0"
515 | resolved "https://registry.npm.taobao.org/mime-db/download/mime-db-1.12.0.tgz#3d0c63180f458eb10d325aaa37d7c58ae312e9d7"
516 | integrity sha1-PQxjGA9FjrENMlqqN9fFiuMS6dc=
517 |
518 | mime-types@^2.1.18, mime-types@~2.1.18:
519 | version "2.1.24"
520 | resolved "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81"
521 | integrity sha1-tvjQs+lR77d97eyhlM/20W9nb4E=
522 | dependencies:
523 | mime-db "1.40.0"
524 |
525 | mime-types@~2.0.4:
526 | version "2.0.14"
527 | resolved "https://registry.npm.taobao.org/mime-types/download/mime-types-2.0.14.tgz#310e159db23e077f8bb22b748dabfa4957140aa6"
528 | integrity sha1-MQ4VnbI+B3+Lsit0jav6SVcUCqY=
529 | dependencies:
530 | mime-db "~1.12.0"
531 |
532 | ms@0.7.1:
533 | version "0.7.1"
534 | resolved "https://registry.npm.taobao.org/ms/download/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
535 | integrity sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=
536 |
537 | ms@2.0.0:
538 | version "2.0.0"
539 | resolved "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
540 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
541 |
542 | ms@^2.1.1:
543 | version "2.1.1"
544 | resolved "https://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
545 | integrity sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=
546 |
547 | mz@^2.7.0:
548 | version "2.7.0"
549 | resolved "https://registry.npm.taobao.org/mz/download/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
550 | integrity sha1-lQCAV6Vsr63CvGPd5/n/aVWUjjI=
551 | dependencies:
552 | any-promise "^1.0.0"
553 | object-assign "^4.0.1"
554 | thenify-all "^1.0.0"
555 |
556 | negotiator@0.4.9:
557 | version "0.4.9"
558 | resolved "https://registry.npm.taobao.org/negotiator/download/negotiator-0.4.9.tgz#92e46b6db53c7e421ed64a2bc94f08be7630df3f"
559 | integrity sha1-kuRrbbU8fkIe1koryU8IvnYw3z8=
560 |
561 | negotiator@0.6.1:
562 | version "0.6.1"
563 | resolved "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
564 | integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=
565 |
566 | object-assign@^4.0.1:
567 | version "4.1.1"
568 | resolved "https://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
569 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
570 |
571 | object-component@0.0.3:
572 | version "0.0.3"
573 | resolved "https://registry.npm.taobao.org/object-component/download/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291"
574 | integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=
575 |
576 | on-finished@^2.3.0:
577 | version "2.3.0"
578 | resolved "https://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
579 | integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
580 | dependencies:
581 | ee-first "1.1.1"
582 |
583 | only@~0.0.2:
584 | version "0.0.2"
585 | resolved "https://registry.npm.taobao.org/only/download/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4"
586 | integrity sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=
587 |
588 | options@>=0.0.5:
589 | version "0.0.6"
590 | resolved "https://registry.npm.taobao.org/options/download/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f"
591 | integrity sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=
592 |
593 | parsejson@0.0.1:
594 | version "0.0.1"
595 | resolved "https://registry.npm.taobao.org/parsejson/download/parsejson-0.0.1.tgz#9b10c6c0d825ab589e685153826de0a3ba278bcc"
596 | integrity sha1-mxDGwNglq1ieaFFTgm3go7oni8w=
597 | dependencies:
598 | better-assert "~1.0.0"
599 |
600 | parseqs@0.0.2:
601 | version "0.0.2"
602 | resolved "https://registry.npm.taobao.org/parseqs/download/parseqs-0.0.2.tgz#9dfe70b2cddac388bde4f35b1f240fa58adbe6c7"
603 | integrity sha1-nf5wss3aw4i95PNbHyQPpYrb5sc=
604 | dependencies:
605 | better-assert "~1.0.0"
606 |
607 | parseqs@0.0.5:
608 | version "0.0.5"
609 | resolved "https://registry.npm.taobao.org/parseqs/download/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d"
610 | integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=
611 | dependencies:
612 | better-assert "~1.0.0"
613 |
614 | parseuri@0.0.4:
615 | version "0.0.4"
616 | resolved "https://registry.npm.taobao.org/parseuri/download/parseuri-0.0.4.tgz#806582a39887e1ea18dd5e2fe0e01902268e9350"
617 | integrity sha1-gGWCo5iH4eoY3V4v4OAZAiaOk1A=
618 | dependencies:
619 | better-assert "~1.0.0"
620 |
621 | parseuri@0.0.5:
622 | version "0.0.5"
623 | resolved "https://registry.npm.taobao.org/parseuri/download/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a"
624 | integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=
625 | dependencies:
626 | better-assert "~1.0.0"
627 |
628 | parseurl@^1.3.2:
629 | version "1.3.3"
630 | resolved "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
631 | integrity sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=
632 |
633 | path-is-absolute@1.0.1:
634 | version "1.0.1"
635 | resolved "https://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
636 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
637 |
638 | path@^0.12.7:
639 | version "0.12.7"
640 | resolved "https://registry.npm.taobao.org/path/download/path-0.12.7.tgz#d4dc2a506c4ce2197eb481ebfcd5b36c0140b10f"
641 | integrity sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=
642 | dependencies:
643 | process "^0.11.1"
644 | util "^0.10.3"
645 |
646 | process@^0.11.1:
647 | version "0.11.10"
648 | resolved "https://registry.npm.taobao.org/process/download/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
649 | integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
650 |
651 | resolve-path@^1.4.0:
652 | version "1.4.0"
653 | resolved "https://registry.npm.taobao.org/resolve-path/download/resolve-path-1.4.0.tgz#c4bda9f5efb2fce65247873ab36bb4d834fe16f7"
654 | integrity sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=
655 | dependencies:
656 | http-errors "~1.6.2"
657 | path-is-absolute "1.0.1"
658 |
659 | safe-buffer@5.1.2:
660 | version "5.1.2"
661 | resolved "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
662 | integrity sha1-mR7GnSluAxN0fVm9/St0XDX4go0=
663 |
664 | setprototypeof@1.1.0:
665 | version "1.1.0"
666 | resolved "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
667 | integrity sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=
668 |
669 | setprototypeof@1.1.1:
670 | version "1.1.1"
671 | resolved "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
672 | integrity sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM=
673 |
674 | socket.io-adapter@0.4.0:
675 | version "0.4.0"
676 | resolved "https://registry.npm.taobao.org/socket.io-adapter/download/socket.io-adapter-0.4.0.tgz#fb9f82ab1aa65290bf72c3657955b930a991a24f"
677 | integrity sha1-+5+CqxqmUpC/csNleVW5MKmRok8=
678 | dependencies:
679 | debug "2.2.0"
680 | socket.io-parser "2.2.2"
681 |
682 | socket.io-adapter@~1.1.0:
683 | version "1.1.1"
684 | resolved "https://registry.npm.taobao.org/socket.io-adapter/download/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b"
685 | integrity sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=
686 |
687 | socket.io-client@1.4.5:
688 | version "1.4.5"
689 | resolved "https://registry.npm.taobao.org/socket.io-client/download/socket.io-client-1.4.5.tgz#400d630c31e7c9579e45173f977e4f5bd8dc7d2e"
690 | integrity sha1-QA1jDDHnyVeeRRc/l35PW9jcfS4=
691 | dependencies:
692 | backo2 "1.0.2"
693 | component-bind "1.0.0"
694 | component-emitter "1.2.0"
695 | debug "2.2.0"
696 | engine.io-client "1.6.8"
697 | has-binary "0.1.7"
698 | indexof "0.0.1"
699 | object-component "0.0.3"
700 | parseuri "0.0.4"
701 | socket.io-parser "2.2.6"
702 | to-array "0.1.4"
703 |
704 | socket.io-client@2.2.0:
705 | version "2.2.0"
706 | resolved "https://registry.npm.taobao.org/socket.io-client/download/socket.io-client-2.2.0.tgz#84e73ee3c43d5020ccc1a258faeeb9aec2723af7"
707 | integrity sha1-hOc+48Q9UCDMwaJY+u65rsJyOvc=
708 | dependencies:
709 | backo2 "1.0.2"
710 | base64-arraybuffer "0.1.5"
711 | component-bind "1.0.0"
712 | component-emitter "1.2.1"
713 | debug "~3.1.0"
714 | engine.io-client "~3.3.1"
715 | has-binary2 "~1.0.2"
716 | has-cors "1.1.0"
717 | indexof "0.0.1"
718 | object-component "0.0.3"
719 | parseqs "0.0.5"
720 | parseuri "0.0.5"
721 | socket.io-parser "~3.3.0"
722 | to-array "0.1.4"
723 |
724 | socket.io-parser@2.2.2:
725 | version "2.2.2"
726 | resolved "https://registry.npm.taobao.org/socket.io-parser/download/socket.io-parser-2.2.2.tgz#3d7af6b64497e956b7d9fe775f999716027f9417"
727 | integrity sha1-PXr2tkSX6Va32f53X5mXFgJ/lBc=
728 | dependencies:
729 | benchmark "1.0.0"
730 | component-emitter "1.1.2"
731 | debug "0.7.4"
732 | isarray "0.0.1"
733 | json3 "3.2.6"
734 |
735 | socket.io-parser@2.2.6:
736 | version "2.2.6"
737 | resolved "https://registry.npm.taobao.org/socket.io-parser/download/socket.io-parser-2.2.6.tgz#38dfd61df50dcf8ab1d9e2091322bf902ba28b99"
738 | integrity sha1-ON/WHfUNz4qx2eIJEyK/kCuii5k=
739 | dependencies:
740 | benchmark "1.0.0"
741 | component-emitter "1.1.2"
742 | debug "2.2.0"
743 | isarray "0.0.1"
744 | json3 "3.3.2"
745 |
746 | socket.io-parser@~3.3.0:
747 | version "3.3.0"
748 | resolved "https://registry.npm.taobao.org/socket.io-parser/download/socket.io-parser-3.3.0.tgz#2b52a96a509fdf31440ba40fed6094c7d4f1262f"
749 | integrity sha1-K1KpalCf3zFEC6QP7WCUx9TxJi8=
750 | dependencies:
751 | component-emitter "1.2.1"
752 | debug "~3.1.0"
753 | isarray "2.0.1"
754 |
755 | socket.io@1.4.5:
756 | version "1.4.5"
757 | resolved "https://registry.npm.taobao.org/socket.io/download/socket.io-1.4.5.tgz#f202f49eeb9cf7cf6c0971ad75d8d96d451ea4f7"
758 | integrity sha1-8gL0nuuc989sCXGtddjZbUUepPc=
759 | dependencies:
760 | debug "2.2.0"
761 | engine.io "1.6.8"
762 | has-binary "0.1.7"
763 | socket.io-adapter "0.4.0"
764 | socket.io-client "1.4.5"
765 | socket.io-parser "2.2.6"
766 |
767 | socket.io@^2.2.0:
768 | version "2.2.0"
769 | resolved "https://registry.npm.taobao.org/socket.io/download/socket.io-2.2.0.tgz#f0f633161ef6712c972b307598ecd08c9b1b4d5b"
770 | integrity sha1-8PYzFh72cSyXKzB1mOzQjJsbTVs=
771 | dependencies:
772 | debug "~4.1.0"
773 | engine.io "~3.3.1"
774 | has-binary2 "~1.0.2"
775 | socket.io-adapter "~1.1.0"
776 | socket.io-client "2.2.0"
777 | socket.io-parser "~3.3.0"
778 |
779 | "statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@^1.5.0:
780 | version "1.5.0"
781 | resolved "https://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
782 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
783 |
784 | thenify-all@^1.0.0:
785 | version "1.6.0"
786 | resolved "https://registry.npm.taobao.org/thenify-all/download/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
787 | integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=
788 | dependencies:
789 | thenify ">= 3.1.0 < 4"
790 |
791 | "thenify@>= 3.1.0 < 4":
792 | version "3.3.0"
793 | resolved "https://registry.npm.taobao.org/thenify/download/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839"
794 | integrity sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=
795 | dependencies:
796 | any-promise "^1.0.0"
797 |
798 | to-array@0.1.4:
799 | version "0.1.4"
800 | resolved "https://registry.npm.taobao.org/to-array/download/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890"
801 | integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA=
802 |
803 | toidentifier@1.0.0:
804 | version "1.0.0"
805 | resolved "https://registry.npm.taobao.org/toidentifier/download/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
806 | integrity sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM=
807 |
808 | type-is@^1.6.16:
809 | version "1.6.16"
810 | resolved "https://registry.npm.taobao.org/type-is/download/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194"
811 | integrity sha1-+JzjQVQcZysl7nrjxz3uOyvlAZQ=
812 | dependencies:
813 | media-typer "0.3.0"
814 | mime-types "~2.1.18"
815 |
816 | ultron@1.0.x:
817 | version "1.0.2"
818 | resolved "https://registry.npm.taobao.org/ultron/download/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa"
819 | integrity sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=
820 |
821 | utf8@2.1.0:
822 | version "2.1.0"
823 | resolved "https://registry.npm.taobao.org/utf8/download/utf8-2.1.0.tgz#0cfec5c8052d44a23e3aaa908104e8075f95dfd5"
824 | integrity sha1-DP7FyAUtRKI+OqqQgQToB1+V39U=
825 |
826 | util@^0.10.3:
827 | version "0.10.4"
828 | resolved "https://registry.npm.taobao.org/util/download/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901"
829 | integrity sha1-OqASW/5mikZy3liFfTrOJ+y3aQE=
830 | dependencies:
831 | inherits "2.0.3"
832 |
833 | vary@^1.1.2:
834 | version "1.1.2"
835 | resolved "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
836 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
837 |
838 | ws@1.0.1:
839 | version "1.0.1"
840 | resolved "https://registry.npm.taobao.org/ws/download/ws-1.0.1.tgz#7d0b2a2e58cddd819039c29c9de65045e1b310e9"
841 | integrity sha1-fQsqLljN3YGQOcKcneZQReGzEOk=
842 | dependencies:
843 | options ">=0.0.5"
844 | ultron "1.0.x"
845 |
846 | ws@~6.1.0:
847 | version "6.1.4"
848 | resolved "https://registry.npm.taobao.org/ws/download/ws-6.1.4.tgz#5b5c8800afab925e94ccb29d153c8d02c1776ef9"
849 | integrity sha1-W1yIAK+rkl6UzLKdFTyNAsF3bvk=
850 | dependencies:
851 | async-limiter "~1.0.0"
852 |
853 | xmlhttprequest-ssl@1.5.1:
854 | version "1.5.1"
855 | resolved "https://registry.npm.taobao.org/xmlhttprequest-ssl/download/xmlhttprequest-ssl-1.5.1.tgz#3b7741fea4a86675976e908d296d4445961faa67"
856 | integrity sha1-O3dB/qSoZnWXbpCNKW1ERZYfqmc=
857 |
858 | xmlhttprequest-ssl@~1.5.4:
859 | version "1.5.5"
860 | resolved "https://registry.npm.taobao.org/xmlhttprequest-ssl/download/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e"
861 | integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=
862 |
863 | yeast@0.1.2:
864 | version "0.1.2"
865 | resolved "https://registry.npm.taobao.org/yeast/download/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"
866 | integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk=
867 |
868 | ylru@^1.2.0:
869 | version "1.2.1"
870 | resolved "https://registry.npm.taobao.org/ylru/download/ylru-1.2.1.tgz#f576b63341547989c1de7ba288760923b27fe84f"
871 | integrity sha1-9Xa2M0FUeYnB3nuiiHYJI7J/6E8=
872 |
--------------------------------------------------------------------------------