├── .gitignore ├── LICENSE ├── README.md ├── dist ├── wxSocket.js └── wxSocket.min.js ├── index.ts ├── package.json ├── tsconfig.json ├── webpack.config.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.log 3 | npm-debug.log* 4 | .idea 5 | coverage -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2017 axetroy 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 用于微信小程序的socket库 2 | 3 | [![Greenkeeper badge](https://badges.greenkeeper.io/axetroy/wxapp-socket.svg)](https://greenkeeper.io/) 4 | 5 | 需要服务器配合,服务器需要返回一样的结构体 6 | 7 | ```typescript 8 | interface MessageConstructor{ 9 | type:string, // 默认返回 "ALL" 10 | payload?:any, // 要发送的数据体 11 | id?:string // 此id为消息发送者的消息id,如果有,则返回 12 | } 13 | ``` 14 | 15 | ## 特性 16 | 17 | - 简单易容的API 18 | - 使得每次发送数据,都可以得到一个Promise 19 | 20 | 21 | ## Usage 22 | 23 | ```bash 24 | yarn add @axetroy/wxapp-socket; 25 | ``` 26 | 27 | ```javascript 28 | const wxSocket = require('@axetroy/wxapp-socket'); 29 | 30 | new wxSocket({ 31 | url: 'ws://0.0.0.0:10086' 32 | }); 33 | 34 | wxSocket.on(function(msg) { 35 | // ... 36 | }); 37 | 38 | wxSocket.send('hello world') 39 | .then(function(res) { 40 | // ... 41 | }); 42 | 43 | ``` 44 | 45 | ## API 46 | 47 | ### new wxSocket(config); 48 | 49 | - *Arguments* 50 | - *config* 51 | ```typescript 52 | interface Config { 53 | url: string; 54 | data?: any; 55 | header?: any; 56 | method?: string; 57 | retryTimes?: number, // 重连次数,默认无限重连 58 | retryInterval?: number, // 重连间隔,默认3s,可以设置最低100ms 59 | success?: () => any; 60 | fail?: () => any; 61 | complete?: () => any; 62 | } 63 | ``` 64 | 65 | ### wxSocket.on([type:string], callback): () => any[] 66 | 67 | - *Arguments* 68 | - *type?string*,服务器返回的消息类型。当传入type时,指定监听某一类的消息,不传则接收所有消息 69 | - *callback:Function*,接收到消息后的回调函数 70 | - *Return* 71 | - {Function} 返回一个函数,用于取消监听 72 | 73 | ### wxSocket.send(msg: any, [config]) : Promise 74 | 75 | 发送消息至服务器,type指定类型,如果不指定,则type默认是message 76 | 77 | - *Arguments* 78 | - *msg?any*,发送的消息 79 | - *config:Object*,配置 80 | ```typescript 81 | interface SendMessageConfig { 82 | noResponse?: boolean, // 无需等待服务器响应,只要数据发送成功,则resolve 83 | timeout?: number // 超时,数据发出之后,xx毫秒没有相应则算超时,reject 84 | } 85 | ``` 86 | - *Return* 87 | - {Promise} 返回一个promise 88 | - *Example* 89 | 90 | ```javascript 91 | wxSocket.send('hello world'); 92 | /* 93 | 实际发送 94 | { 95 | "type": "MESSAGE", 96 | "payload": "hello world", 97 | "id": "1484540236270908" // 每一条信息都产生不同的id 98 | } 99 | */ 100 | wxSocket.send({type:'LOGIN',payload:{name:"axe",age:100}}); 101 | /* 102 | 实际发送 103 | { 104 | "type": "LOGIN", 105 | "payload": { 106 | name: "axe", 107 | age: 100 108 | }, 109 | "id": "1484540236270908" 110 | } 111 | */ 112 | ``` 113 | 114 | ### wxSocket.socketOpen:boolean 115 | 116 | 当前socket是否正在链接 117 | 118 | ### wxSocket.messageQueue:array 119 | 120 | 当前的消息队列,只要在socket未连接,然后又使用wxSocket.send方法的情况下,会把消息放入队列 121 | 122 | 当socket重新连上之后,会重新发送消息 123 | 124 | ## License 125 | 126 | The MIT License (MIT) 127 | 128 | Copyright (c) 2017 axetroy 129 | 130 | Permission is hereby granted, free of charge, to any person obtaining a copy 131 | of this software and associated documentation files (the "Software"), to deal 132 | in the Software without restriction, including without limitation the rights 133 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 134 | copies of the Software, and to permit persons to whom the Software is 135 | furnished to do so, subject to the following conditions: 136 | 137 | The above copyright notice and this permission notice shall be included in all 138 | copies or substantial portions of the Software. 139 | 140 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 141 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 142 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 143 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 144 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 145 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 146 | SOFTWARE. 147 | -------------------------------------------------------------------------------- /dist/wxSocket.js: -------------------------------------------------------------------------------- 1 | (function webpackUniversalModuleDefinition(root, factory) { 2 | if(typeof exports === 'object' && typeof module === 'object') 3 | module.exports = factory(); 4 | else if(typeof define === 'function' && define.amd) 5 | define([], factory); 6 | else { 7 | var a = factory(); 8 | for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; 9 | } 10 | })(this, function() { 11 | return /******/ (function(modules) { // webpackBootstrap 12 | /******/ // The module cache 13 | /******/ var installedModules = {}; 14 | 15 | /******/ // The require function 16 | /******/ function __webpack_require__(moduleId) { 17 | 18 | /******/ // Check if module is in cache 19 | /******/ if(installedModules[moduleId]) 20 | /******/ return installedModules[moduleId].exports; 21 | 22 | /******/ // Create a new module (and put it into the cache) 23 | /******/ var module = installedModules[moduleId] = { 24 | /******/ i: moduleId, 25 | /******/ l: false, 26 | /******/ exports: {} 27 | /******/ }; 28 | 29 | /******/ // Execute the module function 30 | /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 31 | 32 | /******/ // Flag the module as loaded 33 | /******/ module.l = true; 34 | 35 | /******/ // Return the exports of the module 36 | /******/ return module.exports; 37 | /******/ } 38 | 39 | 40 | /******/ // expose the modules object (__webpack_modules__) 41 | /******/ __webpack_require__.m = modules; 42 | 43 | /******/ // expose the module cache 44 | /******/ __webpack_require__.c = installedModules; 45 | 46 | /******/ // identity function for calling harmony imports with the correct context 47 | /******/ __webpack_require__.i = function(value) { return value; }; 48 | 49 | /******/ // define getter function for harmony exports 50 | /******/ __webpack_require__.d = function(exports, name, getter) { 51 | /******/ if(!__webpack_require__.o(exports, name)) { 52 | /******/ Object.defineProperty(exports, name, { 53 | /******/ configurable: false, 54 | /******/ enumerable: true, 55 | /******/ get: getter 56 | /******/ }); 57 | /******/ } 58 | /******/ }; 59 | 60 | /******/ // getDefaultExport function for compatibility with non-harmony modules 61 | /******/ __webpack_require__.n = function(module) { 62 | /******/ var getter = module && module.__esModule ? 63 | /******/ function getDefault() { return module['default']; } : 64 | /******/ function getModuleExports() { return module; }; 65 | /******/ __webpack_require__.d(getter, 'a', getter); 66 | /******/ return getter; 67 | /******/ }; 68 | 69 | /******/ // Object.prototype.hasOwnProperty.call 70 | /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; 71 | 72 | /******/ // __webpack_public_path__ 73 | /******/ __webpack_require__.p = ""; 74 | 75 | /******/ // Load entry module and return exports 76 | /******/ return __webpack_require__(__webpack_require__.s = 0); 77 | /******/ }) 78 | /************************************************************************/ 79 | /******/ ([ 80 | /* 0 */ 81 | /***/ (function(module, exports, __webpack_require__) { 82 | 83 | "use strict"; 84 | 85 | var WxSocket = (function () { 86 | function WxSocket(config) { 87 | this.config = config; 88 | this.ALL = 'ALL'; 89 | this.retryCount = 0; 90 | this.listener = {}; 91 | this.promiseMaps = {}; 92 | this.socketOpen = false; 93 | this.messageQueue = []; 94 | this.config.retryInterval = this.config.retryInterval && this.config.retryInterval > 100 ? this.config.retryInterval : 3000; 95 | this.listen().connect().afterConnect(); 96 | } 97 | /** 98 | * 发送消息 99 | * @param msg {*} 100 | * @param [config] {*} 101 | * @returns {Promise} 102 | */ 103 | WxSocket.prototype.send = function (msg, config) { 104 | var content = this.wrapMsg(msg); 105 | config = config || {}; 106 | var WxSocket = this; 107 | return new Promise(function (resolve, reject) { 108 | WxSocket.promiseMaps[content.id] = { 109 | resolve: resolve, 110 | reject: reject, 111 | promise: this 112 | }; 113 | // socket未连接上,先放到消息队列里面 114 | if (!WxSocket.socketOpen) { 115 | WxSocket.messageQueue.push({ 116 | content: content, 117 | config: config, 118 | timestamp: new Date().getTime() 119 | }); 120 | } 121 | else { 122 | try { 123 | wx.sendSocketMessage({ 124 | data: JSON.stringify(content), 125 | success: function () { 126 | if (config.noResponse) { 127 | WxSocket.finishRequest(content.id); 128 | resolve(); 129 | } 130 | }, 131 | fail: function () { 132 | WxSocket.finishRequest(content.id); 133 | reject(); 134 | } 135 | }); 136 | } 137 | catch (err) { 138 | reject(err); 139 | WxSocket.finishRequest(content.id); 140 | } 141 | } 142 | }); 143 | }; 144 | /** 145 | * 监听消息 146 | * @param typeOrCallBack 147 | * @param callback 148 | * @returns {()=>T[]} 149 | */ 150 | WxSocket.prototype.on = function (typeOrCallBack, callback) { 151 | var _this = this; 152 | var type; 153 | switch (arguments.length) { 154 | case 1: 155 | type = this.ALL; 156 | callback = arguments[0]; 157 | break; 158 | case 2: 159 | type = arguments[0]; 160 | callback = arguments[1]; 161 | break; 162 | default: 163 | throw new Error('Invalid argument'); 164 | } 165 | if (!WxSocket.helper.isString(type)) 166 | throw new Error('type argument must be a string'); 167 | if (!WxSocket.helper.isFunction(callback)) 168 | throw new Error('callback argument must be a function'); 169 | this.listener[type] = this.listener[type] || []; 170 | this.listener[type].push(callback); 171 | var index = this.listener[type].length - 1; 172 | return function () { 173 | return _this.listener[type].splice(index, 1); 174 | }; 175 | }; 176 | WxSocket.prototype.listen = function () { 177 | var _this = this; 178 | wx.onSocketOpen(function () { 179 | console.info('WebSocket已连接'); 180 | _this.retryCount = 0; 181 | _this.socketOpen = true; 182 | _this.messageQueue.forEach(function (queue) { return _this.send(queue.content, queue.config); }); 183 | _this.messageQueue = []; 184 | }); 185 | wx.onSocketError(function () { 186 | console.error('WebSocket连接打开失败,请检查!'); 187 | _this.socketOpen = false; 188 | }); 189 | return this; 190 | }; 191 | WxSocket.prototype.connect = function () { 192 | wx.connectSocket({ 193 | url: this.config.url, 194 | header: { 195 | 'content-type': 'application/json' 196 | } 197 | }); 198 | return this; 199 | }; 200 | WxSocket.prototype.afterConnect = function () { 201 | var _this = this; 202 | wx.onSocketClose(function () { 203 | _this.socketOpen = false; 204 | setTimeout(function () { return _this.retry(); }, _this.config.retryInterval); 205 | }); 206 | wx.onSocketMessage(function (_a) { 207 | var data = _a.data; 208 | try { 209 | data = JSON.parse(data); 210 | } 211 | catch (err) { 212 | } 213 | // resolve the request promise 214 | var deferred = _this.promiseMaps[data.id]; 215 | if (data.id && deferred) { 216 | _this.finishRequest(data.id); 217 | deferred.resolve.call(deferred.promise, data); 218 | } 219 | var callbacks = []; 220 | for (var type in _this.listener) { 221 | if (_this.listener.hasOwnProperty(type)) { 222 | data.type === type && (callbacks = _this.listener[type]); 223 | } 224 | } 225 | callbacks = (_this.listener[_this.ALL] || []).concat(callbacks); 226 | callbacks.forEach(function (func) { return WxSocket.helper.isFunction(func) && func(data); }); 227 | }); 228 | return this; 229 | }; 230 | /** 231 | * 包装消息 232 | * @param msg 233 | * @returns {*} 234 | * @private 235 | */ 236 | WxSocket.prototype.wrapMsg = function (msg) { 237 | if (WxSocket.helper.isPlainObject(msg)) { 238 | if (msg.type) { 239 | !msg.id ? msg.id = WxSocket.helper.id : void 0; 240 | return msg; 241 | } 242 | else { 243 | return this.wrapMsg({ type: 'message', msg: msg, id: WxSocket.helper.id }); 244 | } 245 | } 246 | else { 247 | return this.wrapMsg({ type: 'message', msg: msg, id: WxSocket.helper.id }); 248 | } 249 | }; 250 | WxSocket.prototype.finishRequest = function (requestID) { 251 | this.promiseMaps[requestID] = null; 252 | delete this.promiseMaps[requestID]; 253 | return this; 254 | }; 255 | /** 256 | * 断线重连 257 | * @returns {WxSocket} 258 | */ 259 | WxSocket.prototype.retry = function () { 260 | // 服务器已经连上,或者超出了最大重连次数 261 | if (this.socketOpen || this.config.retryTimes > 0 && this.config.retryTimes <= this.retryCount) 262 | return; 263 | this.retryCount += 1; 264 | console.warn("\u7B2C[ " + this.retryCount + " ]\u6B21\u5C1D\u8BD5\u91CD\u8FDEWebSocket"); 265 | this.connect(); 266 | return this; 267 | }; 268 | return WxSocket; 269 | }()); 270 | WxSocket.helper = { 271 | messageIndex: 0, 272 | isFunction: function (any) { 273 | return typeof any === 'function'; 274 | }, 275 | isString: function (any) { 276 | return Object.prototype.toString.call(any) === '[object String]'; 277 | }, 278 | isObject: function (any) { 279 | return typeof any === 'object' && any !== null; 280 | }, 281 | isPlainObject: function (any) { 282 | return Object.prototype.toString.call(any) === '[object Object]'; 283 | }, 284 | get nextId() { 285 | return this.messageIndex++; 286 | }, 287 | get id() { 288 | return Date.now() + '.' + this.nextId; 289 | } 290 | }; 291 | Object.defineProperty(exports, "__esModule", { value: true }); 292 | exports.default = WxSocket; 293 | 294 | 295 | /***/ }) 296 | /******/ ]); 297 | }); -------------------------------------------------------------------------------- /dist/wxSocket.min.js: -------------------------------------------------------------------------------- 1 | !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var r in n)("object"==typeof exports?exports:e)[r]=n[r]}}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=0)}([function(e,t,n){"use strict";var r=function(){function e(e){this.config=e,this.ALL="ALL",this.retryCount=0,this.listener={},this.promiseMaps={},this.socketOpen=!1,this.messageQueue=[],this.config.retryInterval=this.config.retryInterval&&this.config.retryInterval>100?this.config.retryInterval:3e3,this.listen().connect().afterConnect()}return e.prototype.send=function(e,t){var n=this.wrapMsg(e);t=t||{};var r=this;return new Promise(function(e,i){if(r.promiseMaps[n.id]={resolve:e,reject:i,promise:this},r.socketOpen)try{wx.sendSocketMessage({data:JSON.stringify(n),success:function(){t.noResponse&&(r.finishRequest(n.id),e())},fail:function(){r.finishRequest(n.id),i()}})}catch(e){i(e),r.finishRequest(n.id)}else r.messageQueue.push({content:n,config:t,timestamp:(new Date).getTime()})})},e.prototype.on=function(t,n){var r,i=this;switch(arguments.length){case 1:r=this.ALL,n=arguments[0];break;case 2:r=arguments[0],n=arguments[1];break;default:throw new Error("Invalid argument")}if(!e.helper.isString(r))throw new Error("type argument must be a string");if(!e.helper.isFunction(n))throw new Error("callback argument must be a function");this.listener[r]=this.listener[r]||[],this.listener[r].push(n);var o=this.listener[r].length-1;return function(){return i.listener[r].splice(o,1)}},e.prototype.listen=function(){var e=this;return wx.onSocketOpen(function(){console.info("WebSocket已连接"),e.retryCount=0,e.socketOpen=!0,e.messageQueue.forEach(function(t){return e.send(t.content,t.config)}),e.messageQueue=[]}),wx.onSocketError(function(){console.error("WebSocket连接打开失败,请检查!"),e.socketOpen=!1}),this},e.prototype.connect=function(){return wx.connectSocket({url:this.config.url,header:{"content-type":"application/json"}}),this},e.prototype.afterConnect=function(){var t=this;return wx.onSocketClose(function(){t.socketOpen=!1,setTimeout(function(){return t.retry()},t.config.retryInterval)}),wx.onSocketMessage(function(n){var r=n.data;try{r=JSON.parse(r)}catch(e){}var i=t.promiseMaps[r.id];r.id&&i&&(t.finishRequest(r.id),i.resolve.call(i.promise,r));var o=[];for(var s in t.listener)t.listener.hasOwnProperty(s)&&r.type===s&&(o=t.listener[s]);o=(t.listener[t.ALL]||[]).concat(o),o.forEach(function(t){return e.helper.isFunction(t)&&t(r)})}),this},e.prototype.wrapMsg=function(t){return e.helper.isPlainObject(t)&&t.type?(t.id?void 0:t.id=e.helper.id,t):this.wrapMsg({type:"message",msg:t,id:e.helper.id})},e.prototype.finishRequest=function(e){return this.promiseMaps[e]=null,delete this.promiseMaps[e],this},e.prototype.retry=function(){if(!(this.socketOpen||this.config.retryTimes>0&&this.config.retryTimes<=this.retryCount))return this.retryCount+=1,console.warn("第[ "+this.retryCount+" ]次尝试重连WebSocket"),this.connect(),this},e}();r.helper={messageIndex:0,isFunction:function(e){return"function"==typeof e},isString:function(e){return"[object String]"===Object.prototype.toString.call(e)},isObject:function(e){return"object"==typeof e&&null!==e},isPlainObject:function(e){return"[object Object]"===Object.prototype.toString.call(e)},get nextId(){return this.messageIndex++},get id(){return Date.now()+"."+this.nextId}},Object.defineProperty(t,"__esModule",{value:!0}),t.default=r}])}); -------------------------------------------------------------------------------- /index.ts: -------------------------------------------------------------------------------- 1 | declare const wx: any; 2 | 3 | interface MessageQueueItem { 4 | config: any, 5 | content: any, 6 | timestamp: number 7 | } 8 | 9 | interface Config { 10 | url: string; 11 | data?: any; 12 | header?: any; 13 | method?: string; 14 | retryTimes?: number, // 重连次数,默认无限重连 15 | retryInterval?: number, // 重连间隔,默认3s,可以设置最低100ms 16 | success?: () => any; 17 | fail?: () => any; 18 | complete?: () => any; 19 | } 20 | 21 | interface SendMessageConfig { 22 | noResponse?: boolean, // 无需等待服务器响应,只要数据发送成功,则resolve 23 | timeout?: number // 超时,数据发出之后,xx毫秒没有相应则算超时,reject 24 | } 25 | 26 | class WxSocket { 27 | 28 | private ALL: string = 'ALL'; 29 | private retryCount: number = 0; 30 | private listener: any = {}; 31 | private promiseMaps: any = {}; 32 | public socketOpen: boolean = false; 33 | public messageQueue: any[] = []; 34 | 35 | constructor(private config: Config) { 36 | this.config.retryInterval = this.config.retryInterval && this.config.retryInterval > 100 ? this.config.retryInterval : 3000; 37 | this.listen().connect().afterConnect(); 38 | } 39 | 40 | /** 41 | * 发送消息 42 | * @param msg {*} 43 | * @param [config] {*} 44 | * @returns {Promise} 45 | */ 46 | public send(msg: any, config?: SendMessageConfig): Promise { 47 | let content: any = this.wrapMsg(msg); 48 | config = config || {}; 49 | const WxSocket: WxSocket = this; 50 | return new Promise(function (resolve, reject) { 51 | WxSocket.promiseMaps[content.id] = { 52 | resolve, 53 | reject, 54 | promise: this 55 | }; 56 | 57 | // socket未连接上,先放到消息队列里面 58 | if (!WxSocket.socketOpen) { 59 | WxSocket.messageQueue.push({ 60 | content, 61 | config, 62 | timestamp: new Date().getTime() 63 | }); 64 | } 65 | // socket已连接,尝试发送消息 66 | else { 67 | try { 68 | wx.sendSocketMessage({ 69 | data: JSON.stringify(content), 70 | success(){ 71 | if (config.noResponse) { 72 | WxSocket.finishRequest(content.id); 73 | resolve(); 74 | } 75 | }, 76 | fail(){ 77 | WxSocket.finishRequest(content.id); 78 | reject(); 79 | } 80 | }); 81 | } catch (err) { 82 | reject(err); 83 | WxSocket.finishRequest(content.id); 84 | } 85 | } 86 | }); 87 | } 88 | 89 | /** 90 | * 监听消息 91 | * @param typeOrCallBack 92 | * @param callback 93 | * @returns {()=>T[]} 94 | */ 95 | public on(typeOrCallBack: string | (() => any), callback?: () => any): () => any[] { 96 | let type; 97 | 98 | switch (arguments.length) { 99 | case 1: 100 | type = this.ALL; 101 | callback = arguments[0]; 102 | break; 103 | case 2: 104 | type = arguments[0]; 105 | callback = arguments[1]; 106 | break; 107 | default: 108 | throw new Error('Invalid argument'); 109 | } 110 | 111 | if (!WxSocket.helper.isString(type)) throw new Error('type argument must be a string'); 112 | if (!WxSocket.helper.isFunction(callback)) throw new Error('callback argument must be a function'); 113 | 114 | this.listener[type] = this.listener[type] || []; 115 | 116 | this.listener[type].push(callback); 117 | 118 | let index = this.listener[type].length - 1; 119 | 120 | return () => { 121 | return this.listener[type].splice(index, 1); 122 | }; 123 | } 124 | 125 | static helper = { 126 | messageIndex: 0, 127 | isFunction(any: any): boolean{ 128 | return typeof any === 'function'; 129 | }, 130 | isString(any: any): boolean{ 131 | return Object.prototype.toString.call(any) === '[object String]'; 132 | }, 133 | isObject(any){ 134 | return typeof any === 'object' && any !== null; 135 | }, 136 | isPlainObject(any){ 137 | return Object.prototype.toString.call(any) === '[object Object]'; 138 | }, 139 | get nextId() { 140 | return this.messageIndex++; 141 | }, 142 | get id(): string { 143 | return Date.now() + '.' + this.nextId; 144 | } 145 | }; 146 | 147 | private listen(): WxSocket { 148 | wx.onSocketOpen(() => { 149 | console.info('WebSocket已连接'); 150 | this.retryCount = 0; 151 | this.socketOpen = true; 152 | this.messageQueue.forEach((queue: MessageQueueItem) => this.send(queue.content, queue.config)); 153 | this.messageQueue = [] 154 | }); 155 | wx.onSocketError(() => { 156 | console.error('WebSocket连接打开失败,请检查!'); 157 | this.socketOpen = false; 158 | }); 159 | return this; 160 | } 161 | 162 | private connect(): WxSocket { 163 | wx.connectSocket({ 164 | url: this.config.url, 165 | header: { 166 | 'content-type': 'application/json' 167 | } 168 | }); 169 | return this; 170 | } 171 | 172 | private afterConnect(): WxSocket { 173 | wx.onSocketClose(() => { 174 | this.socketOpen = false; 175 | setTimeout(() => this.retry(), this.config.retryInterval); 176 | }); 177 | wx.onSocketMessage(({data}) => { 178 | try { 179 | data = JSON.parse(data); 180 | } catch (err) { 181 | } 182 | 183 | // resolve the request promise 184 | let deferred = this.promiseMaps[data.id]; 185 | if (data.id && deferred) { 186 | this.finishRequest(data.id); 187 | deferred.resolve.call(deferred.promise, data); 188 | } 189 | 190 | let callbacks = []; 191 | 192 | for (let type in this.listener) { 193 | if (this.listener.hasOwnProperty(type)) { 194 | data.type === type && (callbacks = this.listener[type]); 195 | } 196 | } 197 | 198 | callbacks = (this.listener[this.ALL] || []).concat(callbacks); 199 | 200 | callbacks.forEach(func => WxSocket.helper.isFunction(func) && func(data)); 201 | 202 | }); 203 | return this; 204 | } 205 | 206 | /** 207 | * 包装消息 208 | * @param msg 209 | * @returns {*} 210 | * @private 211 | */ 212 | private wrapMsg(msg): string { 213 | if (WxSocket.helper.isPlainObject(msg)) { 214 | if (msg.type) { 215 | !msg.id ? msg.id = WxSocket.helper.id : void 0; 216 | return msg; 217 | } else { 218 | return this.wrapMsg({type: 'message', msg: msg, id: WxSocket.helper.id}); 219 | } 220 | } else { 221 | return this.wrapMsg({type: 'message', msg: msg, id: WxSocket.helper.id}); 222 | } 223 | } 224 | 225 | private finishRequest(requestID: number): WxSocket { 226 | this.promiseMaps[requestID] = null; 227 | delete this.promiseMaps[requestID]; 228 | return this; 229 | } 230 | 231 | /** 232 | * 断线重连 233 | * @returns {WxSocket} 234 | */ 235 | private retry(): WxSocket { 236 | // 服务器已经连上,或者超出了最大重连次数 237 | if (this.socketOpen || this.config.retryTimes > 0 && this.config.retryTimes <= this.retryCount) return; 238 | this.retryCount += 1; 239 | console.warn(`第[ ${this.retryCount} ]次尝试重连WebSocket`); 240 | this.connect(); 241 | return this; 242 | } 243 | 244 | } 245 | 246 | export default WxSocket; -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@axetroy/wxapp-socket", 3 | "version": "1.0.3", 4 | "description": "", 5 | "main": "dist/wxSocket.js", 6 | "scripts": { 7 | "test": "mocha ./test/*.test.ts -r ts-node/register --color", 8 | "test:watch": "gulp test:watch", 9 | "build": "webpack --display-error-details --progress --colors", 10 | "watch": "webpack --display-error-details --progress --colors --watch", 11 | "coverage": "istanbul cover ./**/*.js", 12 | "contributor": "./node_modules/.bin/contributors-stat" 13 | }, 14 | "author": "axetroy", 15 | "license": "ISC", 16 | "devDependencies": { 17 | "ts-loader": "^3.0.0", 18 | "typescript": "^2.1.5", 19 | "webpack": "3.11.0" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es5", 5 | "sourceMap": true, 6 | "moduleResolution": "node", 7 | "lib": [ 8 | "es6", 9 | "dom" 10 | ], 11 | "typeRoots": [ 12 | "node_modules/@types" 13 | ] 14 | }, 15 | "exclude": [ 16 | "node_modules" 17 | ] 18 | } -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | const webpack = require('webpack'); 2 | const path = require('path'); 3 | 4 | // webpack.config.js 5 | module.exports = { 6 | entry: { 7 | "wxSocket": path.join(__dirname, 'index.ts'), 8 | "wxSocket.min": path.join(__dirname, 'index.ts') 9 | }, 10 | output: { 11 | path: path.join(__dirname, '/dist'), 12 | filename: '[name].js', 13 | libraryTarget: 'umd' 14 | }, 15 | resolve: { 16 | modules: ['node_modules'], 17 | extensions: ['.coffee', '.js', '.ts'] 18 | }, 19 | module: { 20 | loaders: [ 21 | {test: /\.tsx?$/, loader: 'ts-loader'} 22 | ] 23 | }, 24 | plugins: [ 25 | new webpack.LoaderOptionsPlugin({ 26 | minimize: true, 27 | debug: false 28 | }), 29 | new webpack.optimize.UglifyJsPlugin({ 30 | compress: {warnings: false}, 31 | sourceMap: false, 32 | test: /\.min\.js$/ 33 | }) 34 | ] 35 | }; -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | abbrev@1: 6 | version "1.0.9" 7 | resolved "http://registry.npm.taobao.org/abbrev/download/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" 8 | 9 | acorn-dynamic-import@^2.0.0: 10 | version "2.0.1" 11 | resolved "http://registry.npm.taobao.org/acorn-dynamic-import/download/acorn-dynamic-import-2.0.1.tgz#23f671eb6e650dab277fef477c321b1178a8cca2" 12 | dependencies: 13 | acorn "^4.0.3" 14 | 15 | acorn@^4.0.3, acorn@^4.0.4: 16 | version "4.0.4" 17 | resolved "http://registry.npm.taobao.org/acorn/download/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a" 18 | 19 | ajv-keywords@^1.1.1: 20 | version "1.5.0" 21 | resolved "http://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-1.5.0.tgz#c11e6859eafff83e0dafc416929472eca946aa2c" 22 | 23 | ajv@^4.7.0: 24 | version "4.10.4" 25 | resolved "http://registry.npm.taobao.org/ajv/download/ajv-4.10.4.tgz#c0974dd00b3464984892d6010aa9c2c945933254" 26 | dependencies: 27 | co "^4.6.0" 28 | json-stable-stringify "^1.0.1" 29 | 30 | align-text@^0.1.1, align-text@^0.1.3: 31 | version "0.1.4" 32 | resolved "http://registry.npm.taobao.org/align-text/download/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" 33 | dependencies: 34 | kind-of "^3.0.2" 35 | longest "^1.0.1" 36 | repeat-string "^1.5.2" 37 | 38 | ansi-regex@^2.0.0: 39 | version "2.1.1" 40 | resolved "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 41 | 42 | ansi-styles@^2.2.1: 43 | version "2.2.1" 44 | resolved "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 45 | 46 | anymatch@^1.3.0: 47 | version "1.3.0" 48 | resolved "http://registry.npm.taobao.org/anymatch/download/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" 49 | dependencies: 50 | arrify "^1.0.0" 51 | micromatch "^2.1.5" 52 | 53 | aproba@^1.0.3: 54 | version "1.0.4" 55 | resolved "http://registry.npm.taobao.org/aproba/download/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0" 56 | 57 | are-we-there-yet@~1.1.2: 58 | version "1.1.2" 59 | resolved "http://registry.npm.taobao.org/are-we-there-yet/download/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3" 60 | dependencies: 61 | delegates "^1.0.0" 62 | readable-stream "^2.0.0 || ^1.1.13" 63 | 64 | arr-diff@^2.0.0: 65 | version "2.0.0" 66 | resolved "http://registry.npm.taobao.org/arr-diff/download/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" 67 | dependencies: 68 | arr-flatten "^1.0.1" 69 | 70 | arr-flatten@^1.0.1: 71 | version "1.0.1" 72 | resolved "http://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b" 73 | 74 | array-unique@^0.2.1: 75 | version "0.2.1" 76 | resolved "http://registry.npm.taobao.org/array-unique/download/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" 77 | 78 | arrify@^1.0.0: 79 | version "1.0.1" 80 | resolved "http://registry.npm.taobao.org/arrify/download/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 81 | 82 | asn1.js@^4.0.0: 83 | version "4.9.1" 84 | resolved "http://registry.npm.taobao.org/asn1.js/download/asn1.js-4.9.1.tgz#48ba240b45a9280e94748990ba597d216617fd40" 85 | dependencies: 86 | bn.js "^4.0.0" 87 | inherits "^2.0.1" 88 | minimalistic-assert "^1.0.0" 89 | 90 | asn1@~0.2.3: 91 | version "0.2.3" 92 | resolved "http://registry.npm.taobao.org/asn1/download/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" 93 | 94 | assert-plus@^0.2.0: 95 | version "0.2.0" 96 | resolved "http://registry.npm.taobao.org/assert-plus/download/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" 97 | 98 | assert-plus@^1.0.0: 99 | version "1.0.0" 100 | resolved "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 101 | 102 | assert@^1.1.1: 103 | version "1.4.1" 104 | resolved "http://registry.npm.taobao.org/assert/download/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" 105 | dependencies: 106 | util "0.10.3" 107 | 108 | async-each@^1.0.0: 109 | version "1.0.1" 110 | resolved "http://registry.npm.taobao.org/async-each/download/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" 111 | 112 | async@^2.1.2: 113 | version "2.1.4" 114 | resolved "http://registry.npm.taobao.org/async/download/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4" 115 | dependencies: 116 | lodash "^4.14.0" 117 | 118 | async@~0.2.6: 119 | version "0.2.10" 120 | resolved "http://registry.npm.taobao.org/async/download/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" 121 | 122 | asynckit@^0.4.0: 123 | version "0.4.0" 124 | resolved "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 125 | 126 | aws-sign2@~0.6.0: 127 | version "0.6.0" 128 | resolved "http://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" 129 | 130 | aws4@^1.2.1: 131 | version "1.5.0" 132 | resolved "http://registry.npm.taobao.org/aws4/download/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755" 133 | 134 | balanced-match@^0.4.1: 135 | version "0.4.2" 136 | resolved "http://registry.npm.taobao.org/balanced-match/download/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" 137 | 138 | base64-js@^1.0.2: 139 | version "1.2.0" 140 | resolved "http://registry.npm.taobao.org/base64-js/download/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" 141 | 142 | bcrypt-pbkdf@^1.0.0: 143 | version "1.0.0" 144 | resolved "http://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4" 145 | dependencies: 146 | tweetnacl "^0.14.3" 147 | 148 | big.js@^3.1.3: 149 | version "3.1.3" 150 | resolved "http://registry.npm.taobao.org/big.js/download/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978" 151 | 152 | binary-extensions@^1.0.0: 153 | version "1.8.0" 154 | resolved "http://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" 155 | 156 | block-stream@*: 157 | version "0.0.9" 158 | resolved "http://registry.npm.taobao.org/block-stream/download/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" 159 | dependencies: 160 | inherits "~2.0.0" 161 | 162 | bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: 163 | version "4.11.6" 164 | resolved "http://registry.npm.taobao.org/bn.js/download/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" 165 | 166 | boom@2.x.x: 167 | version "2.10.1" 168 | resolved "http://registry.npm.taobao.org/boom/download/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" 169 | dependencies: 170 | hoek "2.x.x" 171 | 172 | brace-expansion@^1.0.0: 173 | version "1.1.6" 174 | resolved "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" 175 | dependencies: 176 | balanced-match "^0.4.1" 177 | concat-map "0.0.1" 178 | 179 | braces@^1.8.2: 180 | version "1.8.5" 181 | resolved "http://registry.npm.taobao.org/braces/download/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" 182 | dependencies: 183 | expand-range "^1.8.1" 184 | preserve "^0.2.0" 185 | repeat-element "^1.1.2" 186 | 187 | brorand@^1.0.1: 188 | version "1.0.6" 189 | resolved "http://registry.npm.taobao.org/brorand/download/brorand-1.0.6.tgz#4028706b915f91f7b349a2e0bf3c376039d216e5" 190 | 191 | browserify-aes@^1.0.0, browserify-aes@^1.0.4: 192 | version "1.0.6" 193 | resolved "http://registry.npm.taobao.org/browserify-aes/download/browserify-aes-1.0.6.tgz#5e7725dbdef1fd5930d4ebab48567ce451c48a0a" 194 | dependencies: 195 | buffer-xor "^1.0.2" 196 | cipher-base "^1.0.0" 197 | create-hash "^1.1.0" 198 | evp_bytestokey "^1.0.0" 199 | inherits "^2.0.1" 200 | 201 | browserify-cipher@^1.0.0: 202 | version "1.0.0" 203 | resolved "http://registry.npm.taobao.org/browserify-cipher/download/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" 204 | dependencies: 205 | browserify-aes "^1.0.4" 206 | browserify-des "^1.0.0" 207 | evp_bytestokey "^1.0.0" 208 | 209 | browserify-des@^1.0.0: 210 | version "1.0.0" 211 | resolved "http://registry.npm.taobao.org/browserify-des/download/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" 212 | dependencies: 213 | cipher-base "^1.0.1" 214 | des.js "^1.0.0" 215 | inherits "^2.0.1" 216 | 217 | browserify-rsa@^4.0.0: 218 | version "4.0.1" 219 | resolved "http://registry.npm.taobao.org/browserify-rsa/download/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" 220 | dependencies: 221 | bn.js "^4.1.0" 222 | randombytes "^2.0.1" 223 | 224 | browserify-sign@^4.0.0: 225 | version "4.0.0" 226 | resolved "http://registry.npm.taobao.org/browserify-sign/download/browserify-sign-4.0.0.tgz#10773910c3c206d5420a46aad8694f820b85968f" 227 | dependencies: 228 | bn.js "^4.1.1" 229 | browserify-rsa "^4.0.0" 230 | create-hash "^1.1.0" 231 | create-hmac "^1.1.2" 232 | elliptic "^6.0.0" 233 | inherits "^2.0.1" 234 | parse-asn1 "^5.0.0" 235 | 236 | browserify-zlib@^0.1.4: 237 | version "0.1.4" 238 | resolved "http://registry.npm.taobao.org/browserify-zlib/download/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" 239 | dependencies: 240 | pako "~0.2.0" 241 | 242 | buffer-shims@^1.0.0: 243 | version "1.0.0" 244 | resolved "http://registry.npm.taobao.org/buffer-shims/download/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" 245 | 246 | buffer-xor@^1.0.2: 247 | version "1.0.3" 248 | resolved "http://registry.npm.taobao.org/buffer-xor/download/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" 249 | 250 | buffer@^4.3.0: 251 | version "4.9.1" 252 | resolved "http://registry.npm.taobao.org/buffer/download/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" 253 | dependencies: 254 | base64-js "^1.0.2" 255 | ieee754 "^1.1.4" 256 | isarray "^1.0.0" 257 | 258 | builtin-modules@^1.0.0: 259 | version "1.1.1" 260 | resolved "http://registry.npm.taobao.org/builtin-modules/download/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 261 | 262 | builtin-status-codes@^3.0.0: 263 | version "3.0.0" 264 | resolved "http://registry.npm.taobao.org/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" 265 | 266 | camelcase@^1.0.2: 267 | version "1.2.1" 268 | resolved "http://registry.npm.taobao.org/camelcase/download/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" 269 | 270 | camelcase@^3.0.0: 271 | version "3.0.0" 272 | resolved "http://registry.npm.taobao.org/camelcase/download/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" 273 | 274 | caseless@~0.11.0: 275 | version "0.11.0" 276 | resolved "http://registry.npm.taobao.org/caseless/download/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" 277 | 278 | center-align@^0.1.1: 279 | version "0.1.3" 280 | resolved "http://registry.npm.taobao.org/center-align/download/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" 281 | dependencies: 282 | align-text "^0.1.3" 283 | lazy-cache "^1.0.3" 284 | 285 | chalk@^1.1.1: 286 | version "1.1.3" 287 | resolved "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 288 | dependencies: 289 | ansi-styles "^2.2.1" 290 | escape-string-regexp "^1.0.2" 291 | has-ansi "^2.0.0" 292 | strip-ansi "^3.0.0" 293 | supports-color "^2.0.0" 294 | 295 | chokidar@^1.4.3: 296 | version "1.6.1" 297 | resolved "http://registry.npm.taobao.org/chokidar/download/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" 298 | dependencies: 299 | anymatch "^1.3.0" 300 | async-each "^1.0.0" 301 | glob-parent "^2.0.0" 302 | inherits "^2.0.1" 303 | is-binary-path "^1.0.0" 304 | is-glob "^2.0.0" 305 | path-is-absolute "^1.0.0" 306 | readdirp "^2.0.0" 307 | optionalDependencies: 308 | fsevents "^1.0.0" 309 | 310 | cipher-base@^1.0.0, cipher-base@^1.0.1: 311 | version "1.0.3" 312 | resolved "http://registry.npm.taobao.org/cipher-base/download/cipher-base-1.0.3.tgz#eeabf194419ce900da3018c207d212f2a6df0a07" 313 | dependencies: 314 | inherits "^2.0.1" 315 | 316 | cliui@^2.1.0: 317 | version "2.1.0" 318 | resolved "http://registry.npm.taobao.org/cliui/download/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" 319 | dependencies: 320 | center-align "^0.1.1" 321 | right-align "^0.1.1" 322 | wordwrap "0.0.2" 323 | 324 | cliui@^3.2.0: 325 | version "3.2.0" 326 | resolved "http://registry.npm.taobao.org/cliui/download/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" 327 | dependencies: 328 | string-width "^1.0.1" 329 | strip-ansi "^3.0.1" 330 | wrap-ansi "^2.0.0" 331 | 332 | co@^4.6.0: 333 | version "4.6.0" 334 | resolved "http://registry.npm.taobao.org/co/download/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 335 | 336 | code-point-at@^1.0.0: 337 | version "1.1.0" 338 | resolved "http://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 339 | 340 | colors@^1.0.3: 341 | version "1.1.2" 342 | resolved "http://registry.npm.taobao.org/colors/download/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" 343 | 344 | combined-stream@^1.0.5, combined-stream@~1.0.5: 345 | version "1.0.5" 346 | resolved "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" 347 | dependencies: 348 | delayed-stream "~1.0.0" 349 | 350 | commander@^2.9.0: 351 | version "2.9.0" 352 | resolved "http://registry.npm.taobao.org/commander/download/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" 353 | dependencies: 354 | graceful-readlink ">= 1.0.0" 355 | 356 | concat-map@0.0.1: 357 | version "0.0.1" 358 | resolved "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 359 | 360 | console-browserify@^1.1.0: 361 | version "1.1.0" 362 | resolved "http://registry.npm.taobao.org/console-browserify/download/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" 363 | dependencies: 364 | date-now "^0.1.4" 365 | 366 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 367 | version "1.1.0" 368 | resolved "http://registry.npm.taobao.org/console-control-strings/download/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 369 | 370 | constants-browserify@^1.0.0: 371 | version "1.0.0" 372 | resolved "http://registry.npm.taobao.org/constants-browserify/download/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" 373 | 374 | core-util-is@~1.0.0: 375 | version "1.0.2" 376 | resolved "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 377 | 378 | create-ecdh@^4.0.0: 379 | version "4.0.0" 380 | resolved "http://registry.npm.taobao.org/create-ecdh/download/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" 381 | dependencies: 382 | bn.js "^4.1.0" 383 | elliptic "^6.0.0" 384 | 385 | create-hash@^1.1.0, create-hash@^1.1.1: 386 | version "1.1.2" 387 | resolved "http://registry.npm.taobao.org/create-hash/download/create-hash-1.1.2.tgz#51210062d7bb7479f6c65bb41a92208b1d61abad" 388 | dependencies: 389 | cipher-base "^1.0.1" 390 | inherits "^2.0.1" 391 | ripemd160 "^1.0.0" 392 | sha.js "^2.3.6" 393 | 394 | create-hmac@^1.1.0, create-hmac@^1.1.2: 395 | version "1.1.4" 396 | resolved "http://registry.npm.taobao.org/create-hmac/download/create-hmac-1.1.4.tgz#d3fb4ba253eb8b3f56e39ea2fbcb8af747bd3170" 397 | dependencies: 398 | create-hash "^1.1.0" 399 | inherits "^2.0.1" 400 | 401 | cryptiles@2.x.x: 402 | version "2.0.5" 403 | resolved "http://registry.npm.taobao.org/cryptiles/download/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" 404 | dependencies: 405 | boom "2.x.x" 406 | 407 | crypto-browserify@^3.11.0: 408 | version "3.11.0" 409 | resolved "http://registry.npm.taobao.org/crypto-browserify/download/crypto-browserify-3.11.0.tgz#3652a0906ab9b2a7e0c3ce66a408e957a2485522" 410 | dependencies: 411 | browserify-cipher "^1.0.0" 412 | browserify-sign "^4.0.0" 413 | create-ecdh "^4.0.0" 414 | create-hash "^1.1.0" 415 | create-hmac "^1.1.0" 416 | diffie-hellman "^5.0.0" 417 | inherits "^2.0.1" 418 | pbkdf2 "^3.0.3" 419 | public-encrypt "^4.0.0" 420 | randombytes "^2.0.0" 421 | 422 | dashdash@^1.12.0: 423 | version "1.14.1" 424 | resolved "http://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 425 | dependencies: 426 | assert-plus "^1.0.0" 427 | 428 | date-now@^0.1.4: 429 | version "0.1.4" 430 | resolved "http://registry.npm.taobao.org/date-now/download/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" 431 | 432 | debug@~2.2.0: 433 | version "2.2.0" 434 | resolved "http://registry.npm.taobao.org/debug/download/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" 435 | dependencies: 436 | ms "0.7.1" 437 | 438 | decamelize@^1.0.0, decamelize@^1.1.1: 439 | version "1.2.0" 440 | resolved "http://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 441 | 442 | deep-extend@~0.4.0: 443 | version "0.4.1" 444 | resolved "http://registry.npm.taobao.org/deep-extend/download/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" 445 | 446 | delayed-stream@~1.0.0: 447 | version "1.0.0" 448 | resolved "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 449 | 450 | delegates@^1.0.0: 451 | version "1.0.0" 452 | resolved "http://registry.npm.taobao.org/delegates/download/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 453 | 454 | des.js@^1.0.0: 455 | version "1.0.0" 456 | resolved "http://registry.npm.taobao.org/des.js/download/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" 457 | dependencies: 458 | inherits "^2.0.1" 459 | minimalistic-assert "^1.0.0" 460 | 461 | diffie-hellman@^5.0.0: 462 | version "5.0.2" 463 | resolved "http://registry.npm.taobao.org/diffie-hellman/download/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" 464 | dependencies: 465 | bn.js "^4.1.0" 466 | miller-rabin "^4.0.0" 467 | randombytes "^2.0.0" 468 | 469 | domain-browser@^1.1.1: 470 | version "1.1.7" 471 | resolved "http://registry.npm.taobao.org/domain-browser/download/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" 472 | 473 | ecc-jsbn@~0.1.1: 474 | version "0.1.1" 475 | resolved "http://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" 476 | dependencies: 477 | jsbn "~0.1.0" 478 | 479 | elliptic@^6.0.0: 480 | version "6.3.2" 481 | resolved "http://registry.npm.taobao.org/elliptic/download/elliptic-6.3.2.tgz#e4c81e0829cf0a65ab70e998b8232723b5c1bc48" 482 | dependencies: 483 | bn.js "^4.4.0" 484 | brorand "^1.0.1" 485 | hash.js "^1.0.0" 486 | inherits "^2.0.1" 487 | 488 | emojis-list@^2.0.0: 489 | version "2.1.0" 490 | resolved "http://registry.npm.taobao.org/emojis-list/download/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" 491 | 492 | enhanced-resolve@^3.0.0: 493 | version "3.0.3" 494 | resolved "http://registry.npm.taobao.org/enhanced-resolve/download/enhanced-resolve-3.0.3.tgz#df14c06b5fc5eecade1094c9c5a12b4b3edc0b62" 495 | dependencies: 496 | graceful-fs "^4.1.2" 497 | memory-fs "^0.4.0" 498 | object-assign "^4.0.1" 499 | tapable "^0.2.5" 500 | 501 | errno@^0.1.3: 502 | version "0.1.4" 503 | resolved "http://registry.npm.taobao.org/errno/download/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" 504 | dependencies: 505 | prr "~0.0.0" 506 | 507 | error-ex@^1.2.0: 508 | version "1.3.0" 509 | resolved "http://registry.npm.taobao.org/error-ex/download/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9" 510 | dependencies: 511 | is-arrayish "^0.2.1" 512 | 513 | escape-string-regexp@^1.0.2: 514 | version "1.0.5" 515 | resolved "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 516 | 517 | events@^1.0.0: 518 | version "1.1.1" 519 | resolved "http://registry.npm.taobao.org/events/download/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" 520 | 521 | evp_bytestokey@^1.0.0: 522 | version "1.0.0" 523 | resolved "http://registry.npm.taobao.org/evp_bytestokey/download/evp_bytestokey-1.0.0.tgz#497b66ad9fef65cd7c08a6180824ba1476b66e53" 524 | dependencies: 525 | create-hash "^1.1.1" 526 | 527 | expand-brackets@^0.1.4: 528 | version "0.1.5" 529 | resolved "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" 530 | dependencies: 531 | is-posix-bracket "^0.1.0" 532 | 533 | expand-range@^1.8.1: 534 | version "1.8.2" 535 | resolved "http://registry.npm.taobao.org/expand-range/download/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" 536 | dependencies: 537 | fill-range "^2.1.0" 538 | 539 | extend@~3.0.0: 540 | version "3.0.0" 541 | resolved "http://registry.npm.taobao.org/extend/download/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" 542 | 543 | extglob@^0.3.1: 544 | version "0.3.2" 545 | resolved "http://registry.npm.taobao.org/extglob/download/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" 546 | dependencies: 547 | is-extglob "^1.0.0" 548 | 549 | extsprintf@1.0.2: 550 | version "1.0.2" 551 | resolved "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" 552 | 553 | filename-regex@^2.0.0: 554 | version "2.0.0" 555 | resolved "http://registry.npm.taobao.org/filename-regex/download/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" 556 | 557 | fill-range@^2.1.0: 558 | version "2.2.3" 559 | resolved "http://registry.npm.taobao.org/fill-range/download/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" 560 | dependencies: 561 | is-number "^2.1.0" 562 | isobject "^2.0.0" 563 | randomatic "^1.1.3" 564 | repeat-element "^1.1.2" 565 | repeat-string "^1.5.2" 566 | 567 | find-up@^1.0.0: 568 | version "1.1.2" 569 | resolved "http://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" 570 | dependencies: 571 | path-exists "^2.0.0" 572 | pinkie-promise "^2.0.0" 573 | 574 | for-in@^0.1.5: 575 | version "0.1.6" 576 | resolved "http://registry.npm.taobao.org/for-in/download/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8" 577 | 578 | for-own@^0.1.4: 579 | version "0.1.4" 580 | resolved "http://registry.npm.taobao.org/for-own/download/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072" 581 | dependencies: 582 | for-in "^0.1.5" 583 | 584 | forever-agent@~0.6.1: 585 | version "0.6.1" 586 | resolved "http://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 587 | 588 | form-data@~2.1.1: 589 | version "2.1.2" 590 | resolved "http://registry.npm.taobao.org/form-data/download/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4" 591 | dependencies: 592 | asynckit "^0.4.0" 593 | combined-stream "^1.0.5" 594 | mime-types "^2.1.12" 595 | 596 | fs.realpath@^1.0.0: 597 | version "1.0.0" 598 | resolved "http://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 599 | 600 | fsevents@^1.0.0: 601 | version "1.0.17" 602 | resolved "http://registry.npm.taobao.org/fsevents/download/fsevents-1.0.17.tgz#8537f3f12272678765b4fd6528c0f1f66f8f4558" 603 | dependencies: 604 | nan "^2.3.0" 605 | node-pre-gyp "^0.6.29" 606 | 607 | fstream-ignore@~1.0.5: 608 | version "1.0.5" 609 | resolved "http://registry.npm.taobao.org/fstream-ignore/download/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" 610 | dependencies: 611 | fstream "^1.0.0" 612 | inherits "2" 613 | minimatch "^3.0.0" 614 | 615 | fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10: 616 | version "1.0.10" 617 | resolved "http://registry.npm.taobao.org/fstream/download/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822" 618 | dependencies: 619 | graceful-fs "^4.1.2" 620 | inherits "~2.0.0" 621 | mkdirp ">=0.5 0" 622 | rimraf "2" 623 | 624 | gauge@~2.7.1: 625 | version "2.7.2" 626 | resolved "http://registry.npm.taobao.org/gauge/download/gauge-2.7.2.tgz#15cecc31b02d05345a5d6b0e171cdb3ad2307774" 627 | dependencies: 628 | aproba "^1.0.3" 629 | console-control-strings "^1.0.0" 630 | has-unicode "^2.0.0" 631 | object-assign "^4.1.0" 632 | signal-exit "^3.0.0" 633 | string-width "^1.0.1" 634 | strip-ansi "^3.0.1" 635 | supports-color "^0.2.0" 636 | wide-align "^1.1.0" 637 | 638 | generate-function@^2.0.0: 639 | version "2.0.0" 640 | resolved "http://registry.npm.taobao.org/generate-function/download/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" 641 | 642 | generate-object-property@^1.1.0: 643 | version "1.2.0" 644 | resolved "http://registry.npm.taobao.org/generate-object-property/download/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" 645 | dependencies: 646 | is-property "^1.0.0" 647 | 648 | get-caller-file@^1.0.1: 649 | version "1.0.2" 650 | resolved "http://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" 651 | 652 | getpass@^0.1.1: 653 | version "0.1.6" 654 | resolved "http://registry.npm.taobao.org/getpass/download/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" 655 | dependencies: 656 | assert-plus "^1.0.0" 657 | 658 | glob-base@^0.3.0: 659 | version "0.3.0" 660 | resolved "http://registry.npm.taobao.org/glob-base/download/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" 661 | dependencies: 662 | glob-parent "^2.0.0" 663 | is-glob "^2.0.0" 664 | 665 | glob-parent@^2.0.0: 666 | version "2.0.0" 667 | resolved "http://registry.npm.taobao.org/glob-parent/download/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" 668 | dependencies: 669 | is-glob "^2.0.0" 670 | 671 | glob@^7.0.5: 672 | version "7.1.1" 673 | resolved "http://registry.npm.taobao.org/glob/download/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" 674 | dependencies: 675 | fs.realpath "^1.0.0" 676 | inflight "^1.0.4" 677 | inherits "2" 678 | minimatch "^3.0.2" 679 | once "^1.3.0" 680 | path-is-absolute "^1.0.0" 681 | 682 | graceful-fs@^4.1.2: 683 | version "4.1.11" 684 | resolved "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 685 | 686 | "graceful-readlink@>= 1.0.0": 687 | version "1.0.1" 688 | resolved "http://registry.npm.taobao.org/graceful-readlink/download/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" 689 | 690 | har-validator@~2.0.6: 691 | version "2.0.6" 692 | resolved "http://registry.npm.taobao.org/har-validator/download/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" 693 | dependencies: 694 | chalk "^1.1.1" 695 | commander "^2.9.0" 696 | is-my-json-valid "^2.12.4" 697 | pinkie-promise "^2.0.0" 698 | 699 | has-ansi@^2.0.0: 700 | version "2.0.0" 701 | resolved "http://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 702 | dependencies: 703 | ansi-regex "^2.0.0" 704 | 705 | has-flag@^1.0.0: 706 | version "1.0.0" 707 | resolved "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" 708 | 709 | has-unicode@^2.0.0: 710 | version "2.0.1" 711 | resolved "http://registry.npm.taobao.org/has-unicode/download/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 712 | 713 | hash.js@^1.0.0: 714 | version "1.0.3" 715 | resolved "http://registry.npm.taobao.org/hash.js/download/hash.js-1.0.3.tgz#1332ff00156c0a0ffdd8236013d07b77a0451573" 716 | dependencies: 717 | inherits "^2.0.1" 718 | 719 | hawk@~3.1.3: 720 | version "3.1.3" 721 | resolved "http://registry.npm.taobao.org/hawk/download/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" 722 | dependencies: 723 | boom "2.x.x" 724 | cryptiles "2.x.x" 725 | hoek "2.x.x" 726 | sntp "1.x.x" 727 | 728 | hoek@2.x.x: 729 | version "2.16.3" 730 | resolved "http://registry.npm.taobao.org/hoek/download/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" 731 | 732 | hosted-git-info@^2.1.4: 733 | version "2.1.5" 734 | resolved "http://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b" 735 | 736 | http-signature@~1.1.0: 737 | version "1.1.1" 738 | resolved "http://registry.npm.taobao.org/http-signature/download/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" 739 | dependencies: 740 | assert-plus "^0.2.0" 741 | jsprim "^1.2.2" 742 | sshpk "^1.7.0" 743 | 744 | https-browserify@0.0.1: 745 | version "0.0.1" 746 | resolved "http://registry.npm.taobao.org/https-browserify/download/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" 747 | 748 | ieee754@^1.1.4: 749 | version "1.1.8" 750 | resolved "http://registry.npm.taobao.org/ieee754/download/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" 751 | 752 | indexof@0.0.1: 753 | version "0.0.1" 754 | resolved "http://registry.npm.taobao.org/indexof/download/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" 755 | 756 | inflight@^1.0.4: 757 | version "1.0.6" 758 | resolved "http://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 759 | dependencies: 760 | once "^1.3.0" 761 | wrappy "1" 762 | 763 | inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1: 764 | version "2.0.3" 765 | resolved "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 766 | 767 | inherits@2.0.1: 768 | version "2.0.1" 769 | resolved "http://registry.npm.taobao.org/inherits/download/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" 770 | 771 | ini@~1.3.0: 772 | version "1.3.4" 773 | resolved "http://registry.npm.taobao.org/ini/download/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" 774 | 775 | interpret@^1.0.0: 776 | version "1.0.1" 777 | resolved "http://registry.npm.taobao.org/interpret/download/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c" 778 | 779 | invert-kv@^1.0.0: 780 | version "1.0.0" 781 | resolved "http://registry.npm.taobao.org/invert-kv/download/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" 782 | 783 | is-arrayish@^0.2.1: 784 | version "0.2.1" 785 | resolved "http://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 786 | 787 | is-binary-path@^1.0.0: 788 | version "1.0.1" 789 | resolved "http://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" 790 | dependencies: 791 | binary-extensions "^1.0.0" 792 | 793 | is-buffer@^1.0.2: 794 | version "1.1.4" 795 | resolved "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b" 796 | 797 | is-builtin-module@^1.0.0: 798 | version "1.0.0" 799 | resolved "http://registry.npm.taobao.org/is-builtin-module/download/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" 800 | dependencies: 801 | builtin-modules "^1.0.0" 802 | 803 | is-dotfile@^1.0.0: 804 | version "1.0.2" 805 | resolved "http://registry.npm.taobao.org/is-dotfile/download/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" 806 | 807 | is-equal-shallow@^0.1.3: 808 | version "0.1.3" 809 | resolved "http://registry.npm.taobao.org/is-equal-shallow/download/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" 810 | dependencies: 811 | is-primitive "^2.0.0" 812 | 813 | is-extendable@^0.1.1: 814 | version "0.1.1" 815 | resolved "http://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 816 | 817 | is-extglob@^1.0.0: 818 | version "1.0.0" 819 | resolved "http://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" 820 | 821 | is-fullwidth-code-point@^1.0.0: 822 | version "1.0.0" 823 | resolved "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 824 | dependencies: 825 | number-is-nan "^1.0.0" 826 | 827 | is-glob@^2.0.0, is-glob@^2.0.1: 828 | version "2.0.1" 829 | resolved "http://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" 830 | dependencies: 831 | is-extglob "^1.0.0" 832 | 833 | is-my-json-valid@^2.12.4: 834 | version "2.15.0" 835 | resolved "http://registry.npm.taobao.org/is-my-json-valid/download/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b" 836 | dependencies: 837 | generate-function "^2.0.0" 838 | generate-object-property "^1.1.0" 839 | jsonpointer "^4.0.0" 840 | xtend "^4.0.0" 841 | 842 | is-number@^2.0.2, is-number@^2.1.0: 843 | version "2.1.0" 844 | resolved "http://registry.npm.taobao.org/is-number/download/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" 845 | dependencies: 846 | kind-of "^3.0.2" 847 | 848 | is-posix-bracket@^0.1.0: 849 | version "0.1.1" 850 | resolved "http://registry.npm.taobao.org/is-posix-bracket/download/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" 851 | 852 | is-primitive@^2.0.0: 853 | version "2.0.0" 854 | resolved "http://registry.npm.taobao.org/is-primitive/download/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" 855 | 856 | is-property@^1.0.0: 857 | version "1.0.2" 858 | resolved "http://registry.npm.taobao.org/is-property/download/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" 859 | 860 | is-typedarray@~1.0.0: 861 | version "1.0.0" 862 | resolved "http://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 863 | 864 | is-utf8@^0.2.0: 865 | version "0.2.1" 866 | resolved "http://registry.npm.taobao.org/is-utf8/download/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" 867 | 868 | isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: 869 | version "1.0.0" 870 | resolved "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 871 | 872 | isobject@^2.0.0: 873 | version "2.1.0" 874 | resolved "http://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 875 | dependencies: 876 | isarray "1.0.0" 877 | 878 | isstream@~0.1.2: 879 | version "0.1.2" 880 | resolved "http://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 881 | 882 | jodid25519@^1.0.0: 883 | version "1.0.2" 884 | resolved "http://registry.npm.taobao.org/jodid25519/download/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" 885 | dependencies: 886 | jsbn "~0.1.0" 887 | 888 | jsbn@~0.1.0: 889 | version "0.1.0" 890 | resolved "http://registry.npm.taobao.org/jsbn/download/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" 891 | 892 | json-loader@^0.5.4: 893 | version "0.5.4" 894 | resolved "http://registry.npm.taobao.org/json-loader/download/json-loader-0.5.4.tgz#8baa1365a632f58a3c46d20175fc6002c96e37de" 895 | 896 | json-schema@0.2.3: 897 | version "0.2.3" 898 | resolved "http://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 899 | 900 | json-stable-stringify@^1.0.1: 901 | version "1.0.1" 902 | resolved "http://registry.npm.taobao.org/json-stable-stringify/download/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" 903 | dependencies: 904 | jsonify "~0.0.0" 905 | 906 | json-stringify-safe@~5.0.1: 907 | version "5.0.1" 908 | resolved "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 909 | 910 | json5@^0.5.0: 911 | version "0.5.1" 912 | resolved "http://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" 913 | 914 | jsonify@~0.0.0: 915 | version "0.0.0" 916 | resolved "http://registry.npm.taobao.org/jsonify/download/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 917 | 918 | jsonpointer@^4.0.0: 919 | version "4.0.1" 920 | resolved "http://registry.npm.taobao.org/jsonpointer/download/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" 921 | 922 | jsprim@^1.2.2: 923 | version "1.3.1" 924 | resolved "http://registry.npm.taobao.org/jsprim/download/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252" 925 | dependencies: 926 | extsprintf "1.0.2" 927 | json-schema "0.2.3" 928 | verror "1.3.6" 929 | 930 | kind-of@^3.0.2: 931 | version "3.1.0" 932 | resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" 933 | dependencies: 934 | is-buffer "^1.0.2" 935 | 936 | lazy-cache@^1.0.3: 937 | version "1.0.4" 938 | resolved "http://registry.npm.taobao.org/lazy-cache/download/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" 939 | 940 | lcid@^1.0.0: 941 | version "1.0.0" 942 | resolved "http://registry.npm.taobao.org/lcid/download/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" 943 | dependencies: 944 | invert-kv "^1.0.0" 945 | 946 | load-json-file@^1.0.0: 947 | version "1.1.0" 948 | resolved "http://registry.npm.taobao.org/load-json-file/download/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" 949 | dependencies: 950 | graceful-fs "^4.1.2" 951 | parse-json "^2.2.0" 952 | pify "^2.0.0" 953 | pinkie-promise "^2.0.0" 954 | strip-bom "^2.0.0" 955 | 956 | loader-runner@^2.2.0: 957 | version "2.2.0" 958 | resolved "http://registry.npm.taobao.org/loader-runner/download/loader-runner-2.2.0.tgz#824c1b699c4e7a2b6501b85902d5b862bf45b3fa" 959 | 960 | loader-utils@^0.2.16, loader-utils@^0.2.6: 961 | version "0.2.16" 962 | resolved "http://registry.npm.taobao.org/loader-utils/download/loader-utils-0.2.16.tgz#f08632066ed8282835dff88dfb52704765adee6d" 963 | dependencies: 964 | big.js "^3.1.3" 965 | emojis-list "^2.0.0" 966 | json5 "^0.5.0" 967 | object-assign "^4.0.1" 968 | 969 | lodash@^4.14.0: 970 | version "4.17.4" 971 | resolved "http://registry.npm.taobao.org/lodash/download/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" 972 | 973 | longest@^1.0.1: 974 | version "1.0.1" 975 | resolved "http://registry.npm.taobao.org/longest/download/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" 976 | 977 | memory-fs@^0.4.0, memory-fs@~0.4.1: 978 | version "0.4.1" 979 | resolved "http://registry.npm.taobao.org/memory-fs/download/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" 980 | dependencies: 981 | errno "^0.1.3" 982 | readable-stream "^2.0.1" 983 | 984 | micromatch@^2.1.5: 985 | version "2.3.11" 986 | resolved "http://registry.npm.taobao.org/micromatch/download/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" 987 | dependencies: 988 | arr-diff "^2.0.0" 989 | array-unique "^0.2.1" 990 | braces "^1.8.2" 991 | expand-brackets "^0.1.4" 992 | extglob "^0.3.1" 993 | filename-regex "^2.0.0" 994 | is-extglob "^1.0.0" 995 | is-glob "^2.0.1" 996 | kind-of "^3.0.2" 997 | normalize-path "^2.0.1" 998 | object.omit "^2.0.0" 999 | parse-glob "^3.0.4" 1000 | regex-cache "^0.4.2" 1001 | 1002 | miller-rabin@^4.0.0: 1003 | version "4.0.0" 1004 | resolved "http://registry.npm.taobao.org/miller-rabin/download/miller-rabin-4.0.0.tgz#4a62fb1d42933c05583982f4c716f6fb9e6c6d3d" 1005 | dependencies: 1006 | bn.js "^4.0.0" 1007 | brorand "^1.0.1" 1008 | 1009 | mime-db@~1.26.0: 1010 | version "1.26.0" 1011 | resolved "http://registry.npm.taobao.org/mime-db/download/mime-db-1.26.0.tgz#eaffcd0e4fc6935cf8134da246e2e6c35305adff" 1012 | 1013 | mime-types@^2.1.12, mime-types@~2.1.7: 1014 | version "2.1.14" 1015 | resolved "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.14.tgz#f7ef7d97583fcaf3b7d282b6f8b5679dab1e94ee" 1016 | dependencies: 1017 | mime-db "~1.26.0" 1018 | 1019 | minimalistic-assert@^1.0.0: 1020 | version "1.0.0" 1021 | resolved "http://registry.npm.taobao.org/minimalistic-assert/download/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" 1022 | 1023 | minimatch@^3.0.0, minimatch@^3.0.2: 1024 | version "3.0.3" 1025 | resolved "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" 1026 | dependencies: 1027 | brace-expansion "^1.0.0" 1028 | 1029 | minimist@0.0.8: 1030 | version "0.0.8" 1031 | resolved "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1032 | 1033 | minimist@^1.2.0: 1034 | version "1.2.0" 1035 | resolved "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 1036 | 1037 | "mkdirp@>=0.5 0", mkdirp@~0.5.0, mkdirp@~0.5.1: 1038 | version "0.5.1" 1039 | resolved "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1040 | dependencies: 1041 | minimist "0.0.8" 1042 | 1043 | ms@0.7.1: 1044 | version "0.7.1" 1045 | resolved "http://registry.npm.taobao.org/ms/download/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" 1046 | 1047 | nan@^2.3.0: 1048 | version "2.5.0" 1049 | resolved "http://registry.npm.taobao.org/nan/download/nan-2.5.0.tgz#aa8f1e34531d807e9e27755b234b4a6ec0c152a8" 1050 | 1051 | node-libs-browser@^2.0.0: 1052 | version "2.0.0" 1053 | resolved "http://registry.npm.taobao.org/node-libs-browser/download/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646" 1054 | dependencies: 1055 | assert "^1.1.1" 1056 | browserify-zlib "^0.1.4" 1057 | buffer "^4.3.0" 1058 | console-browserify "^1.1.0" 1059 | constants-browserify "^1.0.0" 1060 | crypto-browserify "^3.11.0" 1061 | domain-browser "^1.1.1" 1062 | events "^1.0.0" 1063 | https-browserify "0.0.1" 1064 | os-browserify "^0.2.0" 1065 | path-browserify "0.0.0" 1066 | process "^0.11.0" 1067 | punycode "^1.2.4" 1068 | querystring-es3 "^0.2.0" 1069 | readable-stream "^2.0.5" 1070 | stream-browserify "^2.0.1" 1071 | stream-http "^2.3.1" 1072 | string_decoder "^0.10.25" 1073 | timers-browserify "^2.0.2" 1074 | tty-browserify "0.0.0" 1075 | url "^0.11.0" 1076 | util "^0.10.3" 1077 | vm-browserify "0.0.4" 1078 | 1079 | node-pre-gyp@^0.6.29: 1080 | version "0.6.32" 1081 | resolved "http://registry.npm.taobao.org/node-pre-gyp/download/node-pre-gyp-0.6.32.tgz#fc452b376e7319b3d255f5f34853ef6fd8fe1fd5" 1082 | dependencies: 1083 | mkdirp "~0.5.1" 1084 | nopt "~3.0.6" 1085 | npmlog "^4.0.1" 1086 | rc "~1.1.6" 1087 | request "^2.79.0" 1088 | rimraf "~2.5.4" 1089 | semver "~5.3.0" 1090 | tar "~2.2.1" 1091 | tar-pack "~3.3.0" 1092 | 1093 | nopt@~3.0.6: 1094 | version "3.0.6" 1095 | resolved "http://registry.npm.taobao.org/nopt/download/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" 1096 | dependencies: 1097 | abbrev "1" 1098 | 1099 | normalize-package-data@^2.3.2: 1100 | version "2.3.5" 1101 | resolved "http://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df" 1102 | dependencies: 1103 | hosted-git-info "^2.1.4" 1104 | is-builtin-module "^1.0.0" 1105 | semver "2 || 3 || 4 || 5" 1106 | validate-npm-package-license "^3.0.1" 1107 | 1108 | normalize-path@^2.0.1: 1109 | version "2.0.1" 1110 | resolved "http://registry.npm.taobao.org/normalize-path/download/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" 1111 | 1112 | npmlog@^4.0.1: 1113 | version "4.0.2" 1114 | resolved "http://registry.npm.taobao.org/npmlog/download/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" 1115 | dependencies: 1116 | are-we-there-yet "~1.1.2" 1117 | console-control-strings "~1.1.0" 1118 | gauge "~2.7.1" 1119 | set-blocking "~2.0.0" 1120 | 1121 | number-is-nan@^1.0.0: 1122 | version "1.0.1" 1123 | resolved "http://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1124 | 1125 | oauth-sign@~0.8.1: 1126 | version "0.8.2" 1127 | resolved "http://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" 1128 | 1129 | object-assign@^4.0.1, object-assign@^4.1.0: 1130 | version "4.1.0" 1131 | resolved "http://registry.npm.taobao.org/object-assign/download/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" 1132 | 1133 | object.omit@^2.0.0: 1134 | version "2.0.1" 1135 | resolved "http://registry.npm.taobao.org/object.omit/download/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" 1136 | dependencies: 1137 | for-own "^0.1.4" 1138 | is-extendable "^0.1.1" 1139 | 1140 | once@^1.3.0, once@~1.3.3: 1141 | version "1.3.3" 1142 | resolved "http://registry.npm.taobao.org/once/download/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" 1143 | dependencies: 1144 | wrappy "1" 1145 | 1146 | os-browserify@^0.2.0: 1147 | version "0.2.1" 1148 | resolved "http://registry.npm.taobao.org/os-browserify/download/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f" 1149 | 1150 | os-locale@^1.4.0: 1151 | version "1.4.0" 1152 | resolved "http://registry.npm.taobao.org/os-locale/download/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" 1153 | dependencies: 1154 | lcid "^1.0.0" 1155 | 1156 | pako@~0.2.0: 1157 | version "0.2.9" 1158 | resolved "http://registry.npm.taobao.org/pako/download/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" 1159 | 1160 | parse-asn1@^5.0.0: 1161 | version "5.0.0" 1162 | resolved "http://registry.npm.taobao.org/parse-asn1/download/parse-asn1-5.0.0.tgz#35060f6d5015d37628c770f4e091a0b5a278bc23" 1163 | dependencies: 1164 | asn1.js "^4.0.0" 1165 | browserify-aes "^1.0.0" 1166 | create-hash "^1.1.0" 1167 | evp_bytestokey "^1.0.0" 1168 | pbkdf2 "^3.0.3" 1169 | 1170 | parse-glob@^3.0.4: 1171 | version "3.0.4" 1172 | resolved "http://registry.npm.taobao.org/parse-glob/download/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" 1173 | dependencies: 1174 | glob-base "^0.3.0" 1175 | is-dotfile "^1.0.0" 1176 | is-extglob "^1.0.0" 1177 | is-glob "^2.0.0" 1178 | 1179 | parse-json@^2.2.0: 1180 | version "2.2.0" 1181 | resolved "http://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 1182 | dependencies: 1183 | error-ex "^1.2.0" 1184 | 1185 | path-browserify@0.0.0: 1186 | version "0.0.0" 1187 | resolved "http://registry.npm.taobao.org/path-browserify/download/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" 1188 | 1189 | path-exists@^2.0.0: 1190 | version "2.1.0" 1191 | resolved "http://registry.npm.taobao.org/path-exists/download/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" 1192 | dependencies: 1193 | pinkie-promise "^2.0.0" 1194 | 1195 | path-is-absolute@^1.0.0: 1196 | version "1.0.1" 1197 | resolved "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1198 | 1199 | path-type@^1.0.0: 1200 | version "1.1.0" 1201 | resolved "http://registry.npm.taobao.org/path-type/download/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" 1202 | dependencies: 1203 | graceful-fs "^4.1.2" 1204 | pify "^2.0.0" 1205 | pinkie-promise "^2.0.0" 1206 | 1207 | pbkdf2@^3.0.3: 1208 | version "3.0.9" 1209 | resolved "http://registry.npm.taobao.org/pbkdf2/download/pbkdf2-3.0.9.tgz#f2c4b25a600058b3c3773c086c37dbbee1ffe693" 1210 | dependencies: 1211 | create-hmac "^1.1.2" 1212 | 1213 | pify@^2.0.0: 1214 | version "2.3.0" 1215 | resolved "http://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 1216 | 1217 | pinkie-promise@^2.0.0: 1218 | version "2.0.1" 1219 | resolved "http://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 1220 | dependencies: 1221 | pinkie "^2.0.0" 1222 | 1223 | pinkie@^2.0.0: 1224 | version "2.0.4" 1225 | resolved "http://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 1226 | 1227 | preserve@^0.2.0: 1228 | version "0.2.0" 1229 | resolved "http://registry.npm.taobao.org/preserve/download/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" 1230 | 1231 | process-nextick-args@~1.0.6: 1232 | version "1.0.7" 1233 | resolved "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 1234 | 1235 | process@^0.11.0: 1236 | version "0.11.9" 1237 | resolved "http://registry.npm.taobao.org/process/download/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1" 1238 | 1239 | prr@~0.0.0: 1240 | version "0.0.0" 1241 | resolved "http://registry.npm.taobao.org/prr/download/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" 1242 | 1243 | public-encrypt@^4.0.0: 1244 | version "4.0.0" 1245 | resolved "http://registry.npm.taobao.org/public-encrypt/download/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" 1246 | dependencies: 1247 | bn.js "^4.1.0" 1248 | browserify-rsa "^4.0.0" 1249 | create-hash "^1.1.0" 1250 | parse-asn1 "^5.0.0" 1251 | randombytes "^2.0.1" 1252 | 1253 | punycode@1.3.2: 1254 | version "1.3.2" 1255 | resolved "http://registry.npm.taobao.org/punycode/download/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" 1256 | 1257 | punycode@^1.2.4, punycode@^1.4.1: 1258 | version "1.4.1" 1259 | resolved "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 1260 | 1261 | qs@~6.3.0: 1262 | version "6.3.0" 1263 | resolved "http://registry.npm.taobao.org/qs/download/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" 1264 | 1265 | querystring-es3@^0.2.0: 1266 | version "0.2.1" 1267 | resolved "http://registry.npm.taobao.org/querystring-es3/download/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" 1268 | 1269 | querystring@0.2.0: 1270 | version "0.2.0" 1271 | resolved "http://registry.npm.taobao.org/querystring/download/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" 1272 | 1273 | randomatic@^1.1.3: 1274 | version "1.1.6" 1275 | resolved "http://registry.npm.taobao.org/randomatic/download/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" 1276 | dependencies: 1277 | is-number "^2.0.2" 1278 | kind-of "^3.0.2" 1279 | 1280 | randombytes@^2.0.0, randombytes@^2.0.1: 1281 | version "2.0.3" 1282 | resolved "http://registry.npm.taobao.org/randombytes/download/randombytes-2.0.3.tgz#674c99760901c3c4112771a31e521dc349cc09ec" 1283 | 1284 | rc@~1.1.6: 1285 | version "1.1.6" 1286 | resolved "http://registry.npm.taobao.org/rc/download/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9" 1287 | dependencies: 1288 | deep-extend "~0.4.0" 1289 | ini "~1.3.0" 1290 | minimist "^1.2.0" 1291 | strip-json-comments "~1.0.4" 1292 | 1293 | read-pkg-up@^1.0.1: 1294 | version "1.0.1" 1295 | resolved "http://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" 1296 | dependencies: 1297 | find-up "^1.0.0" 1298 | read-pkg "^1.0.0" 1299 | 1300 | read-pkg@^1.0.0: 1301 | version "1.1.0" 1302 | resolved "http://registry.npm.taobao.org/read-pkg/download/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" 1303 | dependencies: 1304 | load-json-file "^1.0.0" 1305 | normalize-package-data "^2.3.2" 1306 | path-type "^1.0.0" 1307 | 1308 | "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.0: 1309 | version "2.2.2" 1310 | resolved "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e" 1311 | dependencies: 1312 | buffer-shims "^1.0.0" 1313 | core-util-is "~1.0.0" 1314 | inherits "~2.0.1" 1315 | isarray "~1.0.0" 1316 | process-nextick-args "~1.0.6" 1317 | string_decoder "~0.10.x" 1318 | util-deprecate "~1.0.1" 1319 | 1320 | readable-stream@~2.1.4: 1321 | version "2.1.5" 1322 | resolved "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" 1323 | dependencies: 1324 | buffer-shims "^1.0.0" 1325 | core-util-is "~1.0.0" 1326 | inherits "~2.0.1" 1327 | isarray "~1.0.0" 1328 | process-nextick-args "~1.0.6" 1329 | string_decoder "~0.10.x" 1330 | util-deprecate "~1.0.1" 1331 | 1332 | readdirp@^2.0.0: 1333 | version "2.1.0" 1334 | resolved "http://registry.npm.taobao.org/readdirp/download/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" 1335 | dependencies: 1336 | graceful-fs "^4.1.2" 1337 | minimatch "^3.0.2" 1338 | readable-stream "^2.0.2" 1339 | set-immediate-shim "^1.0.1" 1340 | 1341 | regex-cache@^0.4.2: 1342 | version "0.4.3" 1343 | resolved "http://registry.npm.taobao.org/regex-cache/download/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" 1344 | dependencies: 1345 | is-equal-shallow "^0.1.3" 1346 | is-primitive "^2.0.0" 1347 | 1348 | repeat-element@^1.1.2: 1349 | version "1.1.2" 1350 | resolved "http://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" 1351 | 1352 | repeat-string@^1.5.2: 1353 | version "1.6.1" 1354 | resolved "http://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 1355 | 1356 | request@^2.79.0: 1357 | version "2.79.0" 1358 | resolved "http://registry.npm.taobao.org/request/download/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" 1359 | dependencies: 1360 | aws-sign2 "~0.6.0" 1361 | aws4 "^1.2.1" 1362 | caseless "~0.11.0" 1363 | combined-stream "~1.0.5" 1364 | extend "~3.0.0" 1365 | forever-agent "~0.6.1" 1366 | form-data "~2.1.1" 1367 | har-validator "~2.0.6" 1368 | hawk "~3.1.3" 1369 | http-signature "~1.1.0" 1370 | is-typedarray "~1.0.0" 1371 | isstream "~0.1.2" 1372 | json-stringify-safe "~5.0.1" 1373 | mime-types "~2.1.7" 1374 | oauth-sign "~0.8.1" 1375 | qs "~6.3.0" 1376 | stringstream "~0.0.4" 1377 | tough-cookie "~2.3.0" 1378 | tunnel-agent "~0.4.1" 1379 | uuid "^3.0.0" 1380 | 1381 | require-directory@^2.1.1: 1382 | version "2.1.1" 1383 | resolved "http://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1384 | 1385 | require-main-filename@^1.0.1: 1386 | version "1.0.1" 1387 | resolved "http://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" 1388 | 1389 | right-align@^0.1.1: 1390 | version "0.1.3" 1391 | resolved "http://registry.npm.taobao.org/right-align/download/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" 1392 | dependencies: 1393 | align-text "^0.1.1" 1394 | 1395 | rimraf@2, rimraf@~2.5.1, rimraf@~2.5.4: 1396 | version "2.5.4" 1397 | resolved "http://registry.npm.taobao.org/rimraf/download/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" 1398 | dependencies: 1399 | glob "^7.0.5" 1400 | 1401 | ripemd160@^1.0.0: 1402 | version "1.0.1" 1403 | resolved "http://registry.npm.taobao.org/ripemd160/download/ripemd160-1.0.1.tgz#93a4bbd4942bc574b69a8fa57c71de10ecca7d6e" 1404 | 1405 | "semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@~5.3.0: 1406 | version "5.3.0" 1407 | resolved "http://registry.npm.taobao.org/semver/download/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" 1408 | 1409 | set-blocking@^2.0.0, set-blocking@~2.0.0: 1410 | version "2.0.0" 1411 | resolved "http://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1412 | 1413 | set-immediate-shim@^1.0.1: 1414 | version "1.0.1" 1415 | resolved "http://registry.npm.taobao.org/set-immediate-shim/download/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" 1416 | 1417 | setimmediate@^1.0.4: 1418 | version "1.0.5" 1419 | resolved "http://registry.npm.taobao.org/setimmediate/download/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" 1420 | 1421 | sha.js@^2.3.6: 1422 | version "2.4.8" 1423 | resolved "http://registry.npm.taobao.org/sha.js/download/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f" 1424 | dependencies: 1425 | inherits "^2.0.1" 1426 | 1427 | signal-exit@^3.0.0: 1428 | version "3.0.2" 1429 | resolved "http://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 1430 | 1431 | sntp@1.x.x: 1432 | version "1.0.9" 1433 | resolved "http://registry.npm.taobao.org/sntp/download/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" 1434 | dependencies: 1435 | hoek "2.x.x" 1436 | 1437 | source-list-map@~0.1.7: 1438 | version "0.1.8" 1439 | resolved "http://registry.npm.taobao.org/source-list-map/download/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" 1440 | 1441 | source-map@^0.5.3, source-map@~0.5.1, source-map@~0.5.3: 1442 | version "0.5.6" 1443 | resolved "http://registry.npm.taobao.org/source-map/download/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" 1444 | 1445 | spdx-correct@~1.0.0: 1446 | version "1.0.2" 1447 | resolved "http://registry.npm.taobao.org/spdx-correct/download/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" 1448 | dependencies: 1449 | spdx-license-ids "^1.0.2" 1450 | 1451 | spdx-expression-parse@~1.0.0: 1452 | version "1.0.4" 1453 | resolved "http://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" 1454 | 1455 | spdx-license-ids@^1.0.2: 1456 | version "1.2.2" 1457 | resolved "http://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" 1458 | 1459 | sshpk@^1.7.0: 1460 | version "1.10.2" 1461 | resolved "http://registry.npm.taobao.org/sshpk/download/sshpk-1.10.2.tgz#d5a804ce22695515638e798dbe23273de070a5fa" 1462 | dependencies: 1463 | asn1 "~0.2.3" 1464 | assert-plus "^1.0.0" 1465 | dashdash "^1.12.0" 1466 | getpass "^0.1.1" 1467 | optionalDependencies: 1468 | bcrypt-pbkdf "^1.0.0" 1469 | ecc-jsbn "~0.1.1" 1470 | jodid25519 "^1.0.0" 1471 | jsbn "~0.1.0" 1472 | tweetnacl "~0.14.0" 1473 | 1474 | stream-browserify@^2.0.1: 1475 | version "2.0.1" 1476 | resolved "http://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" 1477 | dependencies: 1478 | inherits "~2.0.1" 1479 | readable-stream "^2.0.2" 1480 | 1481 | stream-http@^2.3.1: 1482 | version "2.6.1" 1483 | resolved "http://registry.npm.taobao.org/stream-http/download/stream-http-2.6.1.tgz#7d20fcdfebc16b16e4174e31dd94cd9c70f10e89" 1484 | dependencies: 1485 | builtin-status-codes "^3.0.0" 1486 | inherits "^2.0.1" 1487 | readable-stream "^2.1.0" 1488 | to-arraybuffer "^1.0.0" 1489 | xtend "^4.0.0" 1490 | 1491 | string-width@^1.0.1, string-width@^1.0.2: 1492 | version "1.0.2" 1493 | resolved "http://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 1494 | dependencies: 1495 | code-point-at "^1.0.0" 1496 | is-fullwidth-code-point "^1.0.0" 1497 | strip-ansi "^3.0.0" 1498 | 1499 | string_decoder@^0.10.25, string_decoder@~0.10.x: 1500 | version "0.10.31" 1501 | resolved "http://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 1502 | 1503 | stringstream@~0.0.4: 1504 | version "0.0.5" 1505 | resolved "http://registry.npm.taobao.org/stringstream/download/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" 1506 | 1507 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 1508 | version "3.0.1" 1509 | resolved "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1510 | dependencies: 1511 | ansi-regex "^2.0.0" 1512 | 1513 | strip-bom@^2.0.0: 1514 | version "2.0.0" 1515 | resolved "http://registry.npm.taobao.org/strip-bom/download/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" 1516 | dependencies: 1517 | is-utf8 "^0.2.0" 1518 | 1519 | strip-json-comments@~1.0.4: 1520 | version "1.0.4" 1521 | resolved "http://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" 1522 | 1523 | supports-color@^0.2.0: 1524 | version "0.2.0" 1525 | resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a" 1526 | 1527 | supports-color@^2.0.0: 1528 | version "2.0.0" 1529 | resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 1530 | 1531 | supports-color@^3.1.0: 1532 | version "3.2.3" 1533 | resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" 1534 | dependencies: 1535 | has-flag "^1.0.0" 1536 | 1537 | tapable@^0.2.5, tapable@~0.2.5: 1538 | version "0.2.6" 1539 | resolved "http://registry.npm.taobao.org/tapable/download/tapable-0.2.6.tgz#206be8e188860b514425375e6f1ae89bfb01fd8d" 1540 | 1541 | tar-pack@~3.3.0: 1542 | version "3.3.0" 1543 | resolved "http://registry.npm.taobao.org/tar-pack/download/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae" 1544 | dependencies: 1545 | debug "~2.2.0" 1546 | fstream "~1.0.10" 1547 | fstream-ignore "~1.0.5" 1548 | once "~1.3.3" 1549 | readable-stream "~2.1.4" 1550 | rimraf "~2.5.1" 1551 | tar "~2.2.1" 1552 | uid-number "~0.0.6" 1553 | 1554 | tar@~2.2.1: 1555 | version "2.2.1" 1556 | resolved "http://registry.npm.taobao.org/tar/download/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" 1557 | dependencies: 1558 | block-stream "*" 1559 | fstream "^1.0.2" 1560 | inherits "2" 1561 | 1562 | timers-browserify@^2.0.2: 1563 | version "2.0.2" 1564 | resolved "http://registry.npm.taobao.org/timers-browserify/download/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86" 1565 | dependencies: 1566 | setimmediate "^1.0.4" 1567 | 1568 | to-arraybuffer@^1.0.0: 1569 | version "1.0.1" 1570 | resolved "http://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" 1571 | 1572 | tough-cookie@~2.3.0: 1573 | version "2.3.2" 1574 | resolved "http://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" 1575 | dependencies: 1576 | punycode "^1.4.1" 1577 | 1578 | ts-loader@^1.3.3: 1579 | version "1.3.3" 1580 | resolved "http://registry.npm.taobao.org/ts-loader/download/ts-loader-1.3.3.tgz#30c6203e1e66b841a88701ed8858f1725d94b026" 1581 | dependencies: 1582 | colors "^1.0.3" 1583 | enhanced-resolve "^3.0.0" 1584 | loader-utils "^0.2.6" 1585 | object-assign "^4.1.0" 1586 | semver "^5.0.1" 1587 | 1588 | tty-browserify@0.0.0: 1589 | version "0.0.0" 1590 | resolved "http://registry.npm.taobao.org/tty-browserify/download/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" 1591 | 1592 | tunnel-agent@~0.4.1: 1593 | version "0.4.3" 1594 | resolved "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" 1595 | 1596 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 1597 | version "0.14.5" 1598 | resolved "http://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 1599 | 1600 | typescript@^2.1.5: 1601 | version "2.1.5" 1602 | resolved "http://registry.npm.taobao.org/typescript/download/typescript-2.1.5.tgz#6fe9479e00e01855247cea216e7561bafcdbcd4a" 1603 | 1604 | uglify-js@^2.7.5: 1605 | version "2.7.5" 1606 | resolved "http://registry.npm.taobao.org/uglify-js/download/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" 1607 | dependencies: 1608 | async "~0.2.6" 1609 | source-map "~0.5.1" 1610 | uglify-to-browserify "~1.0.0" 1611 | yargs "~3.10.0" 1612 | 1613 | uglify-to-browserify@~1.0.0: 1614 | version "1.0.2" 1615 | resolved "http://registry.npm.taobao.org/uglify-to-browserify/download/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" 1616 | 1617 | uid-number@~0.0.6: 1618 | version "0.0.6" 1619 | resolved "http://registry.npm.taobao.org/uid-number/download/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" 1620 | 1621 | url@^0.11.0: 1622 | version "0.11.0" 1623 | resolved "http://registry.npm.taobao.org/url/download/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" 1624 | dependencies: 1625 | punycode "1.3.2" 1626 | querystring "0.2.0" 1627 | 1628 | util-deprecate@~1.0.1: 1629 | version "1.0.2" 1630 | resolved "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1631 | 1632 | util@0.10.3, util@^0.10.3: 1633 | version "0.10.3" 1634 | resolved "http://registry.npm.taobao.org/util/download/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" 1635 | dependencies: 1636 | inherits "2.0.1" 1637 | 1638 | uuid@^3.0.0: 1639 | version "3.0.1" 1640 | resolved "http://registry.npm.taobao.org/uuid/download/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" 1641 | 1642 | validate-npm-package-license@^3.0.1: 1643 | version "3.0.1" 1644 | resolved "http://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" 1645 | dependencies: 1646 | spdx-correct "~1.0.0" 1647 | spdx-expression-parse "~1.0.0" 1648 | 1649 | verror@1.3.6: 1650 | version "1.3.6" 1651 | resolved "http://registry.npm.taobao.org/verror/download/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" 1652 | dependencies: 1653 | extsprintf "1.0.2" 1654 | 1655 | vm-browserify@0.0.4: 1656 | version "0.0.4" 1657 | resolved "http://registry.npm.taobao.org/vm-browserify/download/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" 1658 | dependencies: 1659 | indexof "0.0.1" 1660 | 1661 | watchpack@^1.2.0: 1662 | version "1.2.0" 1663 | resolved "http://registry.npm.taobao.org/watchpack/download/watchpack-1.2.0.tgz#15d4620f1e7471f13fcb551d5c030d2c3eb42dbb" 1664 | dependencies: 1665 | async "^2.1.2" 1666 | chokidar "^1.4.3" 1667 | graceful-fs "^4.1.2" 1668 | 1669 | webpack-sources@^0.1.4: 1670 | version "0.1.4" 1671 | resolved "http://registry.npm.taobao.org/webpack-sources/download/webpack-sources-0.1.4.tgz#ccc2c817e08e5fa393239412690bb481821393cd" 1672 | dependencies: 1673 | source-list-map "~0.1.7" 1674 | source-map "~0.5.3" 1675 | 1676 | webpack@v2.2.0-rc.5: 1677 | version "2.2.0-rc.5" 1678 | resolved "http://registry.npm.taobao.org/webpack/download/webpack-2.2.0-rc.5.tgz#ab471ea69b4e21d2dd5f1ba868dbcc4483aac3a0" 1679 | dependencies: 1680 | acorn "^4.0.4" 1681 | acorn-dynamic-import "^2.0.0" 1682 | ajv "^4.7.0" 1683 | ajv-keywords "^1.1.1" 1684 | async "^2.1.2" 1685 | enhanced-resolve "^3.0.0" 1686 | interpret "^1.0.0" 1687 | json-loader "^0.5.4" 1688 | loader-runner "^2.2.0" 1689 | loader-utils "^0.2.16" 1690 | memory-fs "~0.4.1" 1691 | mkdirp "~0.5.0" 1692 | node-libs-browser "^2.0.0" 1693 | source-map "^0.5.3" 1694 | supports-color "^3.1.0" 1695 | tapable "~0.2.5" 1696 | uglify-js "^2.7.5" 1697 | watchpack "^1.2.0" 1698 | webpack-sources "^0.1.4" 1699 | yargs "^6.0.0" 1700 | 1701 | which-module@^1.0.0: 1702 | version "1.0.0" 1703 | resolved "http://registry.npm.taobao.org/which-module/download/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" 1704 | 1705 | wide-align@^1.1.0: 1706 | version "1.1.0" 1707 | resolved "http://registry.npm.taobao.org/wide-align/download/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" 1708 | dependencies: 1709 | string-width "^1.0.1" 1710 | 1711 | window-size@0.1.0: 1712 | version "0.1.0" 1713 | resolved "http://registry.npm.taobao.org/window-size/download/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" 1714 | 1715 | wordwrap@0.0.2: 1716 | version "0.0.2" 1717 | resolved "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" 1718 | 1719 | wrap-ansi@^2.0.0: 1720 | version "2.1.0" 1721 | resolved "http://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" 1722 | dependencies: 1723 | string-width "^1.0.1" 1724 | strip-ansi "^3.0.1" 1725 | 1726 | wrappy@1: 1727 | version "1.0.2" 1728 | resolved "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1729 | 1730 | xtend@^4.0.0: 1731 | version "4.0.1" 1732 | resolved "http://registry.npm.taobao.org/xtend/download/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 1733 | 1734 | y18n@^3.2.1: 1735 | version "3.2.1" 1736 | resolved "http://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" 1737 | 1738 | yargs-parser@^4.2.0: 1739 | version "4.2.1" 1740 | resolved "http://registry.npm.taobao.org/yargs-parser/download/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" 1741 | dependencies: 1742 | camelcase "^3.0.0" 1743 | 1744 | yargs@^6.0.0: 1745 | version "6.6.0" 1746 | resolved "http://registry.npm.taobao.org/yargs/download/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" 1747 | dependencies: 1748 | camelcase "^3.0.0" 1749 | cliui "^3.2.0" 1750 | decamelize "^1.1.1" 1751 | get-caller-file "^1.0.1" 1752 | os-locale "^1.4.0" 1753 | read-pkg-up "^1.0.1" 1754 | require-directory "^2.1.1" 1755 | require-main-filename "^1.0.1" 1756 | set-blocking "^2.0.0" 1757 | string-width "^1.0.2" 1758 | which-module "^1.0.0" 1759 | y18n "^3.2.1" 1760 | yargs-parser "^4.2.0" 1761 | 1762 | yargs@~3.10.0: 1763 | version "3.10.0" 1764 | resolved "http://registry.npm.taobao.org/yargs/download/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" 1765 | dependencies: 1766 | camelcase "^1.0.2" 1767 | cliui "^2.1.0" 1768 | decamelize "^1.0.0" 1769 | window-size "0.1.0" 1770 | --------------------------------------------------------------------------------