├── .gitignore
├── LICENSE
├── README.md
├── build.js
├── dist
└── .keep
├── package-lock.json
├── package.json
├── scripts
├── config.js
└── deploy.js
└── src
├── config
├── columns.js
├── prod.js
└── test.js
├── function
├── addr.js
├── userAgent.js
└── uuid.js
├── handler
├── event.js
└── user.js
└── utils
├── console.js
├── cookie.js
└── jsonp.js
/.gitignore:
--------------------------------------------------------------------------------
1 | src/config/index.js
2 | node_modules
3 | dist/*
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) BillionChen and other contributors.
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 | # bigDataH5SDK
2 |
3 | ## 需求描述
4 |
5 | 当前系统需求为`采集 h5 开发应用的用户行为数据`
6 | 包括但不限于以下几点:
7 |
8 | 1. 可灵活配置,根据不同项目生成代码
9 | 2. 可多维拓展,预留增加用户行为方式等维度接口
10 | 3. 支持模块化
11 | 4. 项目内自我测试
12 | 5. 规范化的接入方式
13 | 6. 完善的使用手册
14 | 7. 支持debug模式
15 |
16 | * 传入经纬度直接jsonp调用百度api接口
17 | * 刷新sdk-uuid接口,用于进入页面/登录/退出登录
18 | * 获取userAgent接口,进入页面自动调用并存储
19 | * cookie操作类
20 | * 触发阶段监听点击事件
21 | * 监听事件配置属性
22 |
23 | ## 总体方案
24 |
25 | 1. 用新的模块化代码分别编写整个流程的各个小功能,分别编写便于维护,`src`文件夹
26 | 2. 根据不同项目的不同配置用`browserify`分别打包,`build.js`文件
27 | 3. 在本项目内编写对应的测试例子,`example`文件夹
28 |
29 | ## 详细设计
30 |
31 | H5数据采集分为以下几个阶段:
32 |
33 | 1. 获取userAgent,获取地址等一次性的操作
34 | 2. 生成唯一编码,记录用户
35 | 3. 捕获事件,或者用户传入自定义动作
36 | 4. 发送数据到服务器
37 |
38 | * 所有发送到服务器的数据配置在`./src/config/columns.js`里面
39 | * 生产环境的配置在`./src/config/prod.js`里面,测试环境继承生产环境的配置并覆盖部分配置
40 | * 打包时,会根据不同的命令,将生产或者测试环境的文件复制成`./src/config/index.js`文件用于加载,此文件不必修改
41 | * `./src/function/`文件夹包含了地址/ua/uuid等功能,处理主流程以外的系统数据用户数据
42 | * `./src/handler/user.js`实现了记录用户列表/登录状态并修改等操作,并向外提供用户信息
43 | * `./src/handler/event.js`实现了点击事件的捕抓,页面跳转事件,自定义事件等上报逻辑,是主流程逻辑
44 | * 数据传送时会自动组合 `./src/function/addr.js`, `./src/function/userAgent.js`, `./src/handler/user.js` 中提供的数据一并发送无需手动操作
45 | * 这些数据均是单例模式,若非修改只会执行一次
46 | * `./src/index.js`是入口文件,将所有小型功能组合导出到`window.__AE__`下
47 |
48 | ```javascript
49 | // __AE__ 的内部结构
50 | {
51 | setAddress,// 设置地址,传入经度/纬度,自动调用百度的jsonp接口获取地址
52 | login, // 告诉大数据sdk这个用户登录,新建一个uuid以存储操作
53 | logout, // 告诉大数据sdk这个用户退出,还原到原来的游客uuid
54 | // 登录和退出方法目前均没有调用发送数据到后台方法
55 | pageView, // 进入页面会自动采集一次pv,但单页应用需要跳转时手动调用此方法
56 | customEvent, // 用户自定义事件/数据上传,传入一维数据json
57 | clickEvent, // 点击事件或者其他html事件上报(点击事件已自动捕获,不需要另行捕获)传入事件e
58 | // 默认button标签、a标签、有点击类名 DSJ__click 的标签需要采集并发送数据
59 | // 采集上报的按钮名称默认先取 DSJ_text 属性的内容,若无,则采集按钮的中文内容
60 | setOption // 初始化时调用,传入系统/平台名称等,也可以在加载js的script上写,后面介绍
61 | }
62 | ```
63 |
64 | ## sdk打包流程
65 |
66 | ```bash
67 | npm run build # 生产环境
68 | npm run build-test # 测试环境
69 | ```
70 |
71 | ## sdk接入
72 |
73 | ```html
74 |
75 | 测试失败
76 | 测试成功一
77 |
78 | 测试成功三
79 |
80 |
81 |
82 | ```
83 |
84 | ```javascript
85 | let __AE__ = require('./dist/bigdata-sdk.min.js');
86 | __AE__.init({
87 | platform: '你的系统名',//你的系统名称
88 | username_key: 'userCode',// 登录时获取的唯一用户名字段
89 | // auto_pv: true, // 自动执行一次pv事件捕获,适合多页面应用
90 | });
91 | ```
92 |
93 | ---
94 |
95 | ## License
96 |
97 | [MIT](LICENSE)
98 |
99 | ## 贡献者
100 |
101 | [陈炜标](mailto:980669507@qq.com)
102 |
103 | ## 资源包介绍
104 |
105 | * [browserify](https://www.npmjs.com/package/browserify):用于打包
106 | * [babelify](https://www.npmjs.com/package/babelify):用于es6转换
107 | * [UglifyJS](https://gitee.com/virjar/UglifyJS3):用于压缩代码
108 |
109 | ## 参考
110 |
111 | * [阿里文件对象存储SDK](https://github.com/ali-sdk/ali-oss)
112 | * [大数据之数据采集](https://www.jianshu.com/p/a8a7ee412688)
113 | * [神策分析SDK](https://www.sensorsdata.cn/manual/js_sdk.html) 别家公司开发的sdk文档
114 | * [[].slice.call(arguments,1)](https://blog.csdn.net/crper/article/details/51396063) 用于获取第二个开始的参数
115 | * [navigator](http://www.w3school.com.cn/jsref/dom_obj_navigator.asp) 对象包含的属性描述了正在使用的浏览器。
116 | * [babel7教程](https://blog.zfanw.com/babel-js/)
117 | * [微信小程序无埋点数据收集方案-简书](https://www.jianshu.com/p/6c884b613c4c) 实际上在进行集成SDK的过程中开发者仍然要引入代码,并没有实现完全的无埋点,并且在进行点击等事件采集的时候,仍然需要开发者手动调用SDK统计接口。
118 | * [微信小程序无埋点数据采集方案-掘金](https://juejin.im/post/5a3787626fb9a0451c3a7ef6)
119 | * [揭开JS无埋点技术的神秘面纱](http://unclechen.github.io/2018/06/24/%E6%8F%AD%E5%BC%80JS%E6%97%A0%E5%9F%8B%E7%82%B9%E6%8A%80%E6%9C%AF%E7%9A%84%E7%A5%9E%E7%A7%98%E9%9D%A2%E7%BA%B1/)
120 |
--------------------------------------------------------------------------------
/build.js:
--------------------------------------------------------------------------------
1 | #! /usr/bin/env node
2 |
3 | var path = require('path');
4 | var pkg = require('./package.json');
5 |
6 | var license = [
7 | '// bigdata SDK for JavaScript v' + pkg.version,
8 | '// Copyright BillionChen, Inc. or its affiliates. All Rights Reserved.',
9 | '// License at https://github.com/BillionChen/bigDataH5SDK/master/LICENSE'
10 | ].join('\n') + '\n';
11 |
12 | function build(options, callback) {
13 | if (arguments.length === 1) {
14 | callback = options;
15 | options = {};
16 | }
17 |
18 | console.error('Building with options: %j', options);
19 |
20 | var browserify = require('browserify');
21 | // var aliasify = require('aliasify');
22 | var babelify = require('babelify');
23 |
24 |
25 | browserify({
26 | // debug: true,
27 | insertGlobals: true,
28 | basedir: path.resolve(__dirname, '.'),
29 | fullPaths: false,
30 | standalone: '__AE__'
31 | })
32 | .add('./src/index.js')
33 | .transform(babelify, {
34 | "global": true,
35 | "presets": ["@babel/preset-env"],
36 | "plugins": [
37 | "@babel/plugin-transform-object-assign",
38 | // "@babel/plugin-transform-runtime"
39 | ],
40 | "only": ['src/*'],
41 | })
42 | // .transform(aliasify, {
43 | // global: true,
44 | // aliases: {
45 | // 'zlib': false,
46 | // 'iconv-lite': false,
47 | // 'crypto': './shims/crypto.js',
48 | // },
49 | // verbose: false
50 | // })
51 | .bundle(function (err, data) {
52 | if (err) return callback(err);
53 | var code = (data || '').toString();
54 | if (options.minify) {
55 | var uglify = require('uglify-js');
56 | var minified = uglify.minify(code, {
57 | // fromString: true // 新版本没有这个属性
58 | });
59 | // console.error(JSON.stringify(minified));
60 | code = minified.code;
61 | }
62 | code = license + code;
63 | callback(null, code);
64 | });
65 | }
66 |
67 | // run if we called this tool directly
68 | if (require.main === module) {
69 | var opts = {
70 | minify: process.env.MINIFY ? true : false
71 | };
72 |
73 | build(opts, function (err, code) {
74 | if (err) console.error(err.message);
75 | else console.log(code);
76 | });
77 | }
78 |
79 | module.exports = build;
--------------------------------------------------------------------------------
/dist/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BillionChen/bigDataH5SDK/3eb68a598345674122c142d66b55e539f415946f/dist/.keep
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "bigdata-sdk",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@babel/code-frame": {
8 | "version": "7.0.0",
9 | "resolved": "http://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.0.0.tgz",
10 | "integrity": "sha1-BuKrGb21NThVWaq7W6WXKUgoAPg=",
11 | "dev": true,
12 | "requires": {
13 | "@babel/highlight": "^7.0.0"
14 | }
15 | },
16 | "@babel/core": {
17 | "version": "7.1.6",
18 | "resolved": "http://registry.npm.taobao.org/@babel/core/download/@babel/core-7.1.6.tgz",
19 | "integrity": "sha1-NzPL7kMXQpvIfGKynPhYfbp7rrM=",
20 | "dev": true,
21 | "requires": {
22 | "@babel/code-frame": "^7.0.0",
23 | "@babel/generator": "^7.1.6",
24 | "@babel/helpers": "^7.1.5",
25 | "@babel/parser": "^7.1.6",
26 | "@babel/template": "^7.1.2",
27 | "@babel/traverse": "^7.1.6",
28 | "@babel/types": "^7.1.6",
29 | "convert-source-map": "^1.1.0",
30 | "debug": "^4.1.0",
31 | "json5": "^2.1.0",
32 | "lodash": "^4.17.10",
33 | "resolve": "^1.3.2",
34 | "semver": "^5.4.1",
35 | "source-map": "^0.5.0"
36 | }
37 | },
38 | "@babel/generator": {
39 | "version": "7.1.6",
40 | "resolved": "http://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.1.6.tgz",
41 | "integrity": "sha1-ABMDz4eludCTSUpL8lHXtdA9OZk=",
42 | "dev": true,
43 | "requires": {
44 | "@babel/types": "^7.1.6",
45 | "jsesc": "^2.5.1",
46 | "lodash": "^4.17.10",
47 | "source-map": "^0.5.0",
48 | "trim-right": "^1.0.1"
49 | }
50 | },
51 | "@babel/helper-annotate-as-pure": {
52 | "version": "7.0.0",
53 | "resolved": "http://registry.npm.taobao.org/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.0.0.tgz",
54 | "integrity": "sha1-Mj053QtQ4Qx8Bsp9djjmhk2MXDI=",
55 | "dev": true,
56 | "requires": {
57 | "@babel/types": "^7.0.0"
58 | }
59 | },
60 | "@babel/helper-builder-binary-assignment-operator-visitor": {
61 | "version": "7.1.0",
62 | "resolved": "http://registry.npm.taobao.org/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz",
63 | "integrity": "sha1-a2lijf5Ah3mODE7Zjj1Kay+9L18=",
64 | "dev": true,
65 | "requires": {
66 | "@babel/helper-explode-assignable-expression": "^7.1.0",
67 | "@babel/types": "^7.0.0"
68 | }
69 | },
70 | "@babel/helper-call-delegate": {
71 | "version": "7.1.0",
72 | "resolved": "http://registry.npm.taobao.org/@babel/helper-call-delegate/download/@babel/helper-call-delegate-7.1.0.tgz",
73 | "integrity": "sha1-apV/EF83dV6GRTQ9MDiiLhRJzEo=",
74 | "dev": true,
75 | "requires": {
76 | "@babel/helper-hoist-variables": "^7.0.0",
77 | "@babel/traverse": "^7.1.0",
78 | "@babel/types": "^7.0.0"
79 | }
80 | },
81 | "@babel/helper-define-map": {
82 | "version": "7.1.0",
83 | "resolved": "http://registry.npm.taobao.org/@babel/helper-define-map/download/@babel/helper-define-map-7.1.0.tgz",
84 | "integrity": "sha1-O3TK7DKbPIDBFikIh8DdmuRowgw=",
85 | "dev": true,
86 | "requires": {
87 | "@babel/helper-function-name": "^7.1.0",
88 | "@babel/types": "^7.0.0",
89 | "lodash": "^4.17.10"
90 | }
91 | },
92 | "@babel/helper-explode-assignable-expression": {
93 | "version": "7.1.0",
94 | "resolved": "http://registry.npm.taobao.org/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.1.0.tgz",
95 | "integrity": "sha1-U3+hP28WdN90WwwA7I/k6ZaByPY=",
96 | "dev": true,
97 | "requires": {
98 | "@babel/traverse": "^7.1.0",
99 | "@babel/types": "^7.0.0"
100 | }
101 | },
102 | "@babel/helper-function-name": {
103 | "version": "7.1.0",
104 | "resolved": "http://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.1.0.tgz",
105 | "integrity": "sha1-oM6wFoX3M1XUNgwSR/WCv6/I/1M=",
106 | "dev": true,
107 | "requires": {
108 | "@babel/helper-get-function-arity": "^7.0.0",
109 | "@babel/template": "^7.1.0",
110 | "@babel/types": "^7.0.0"
111 | }
112 | },
113 | "@babel/helper-get-function-arity": {
114 | "version": "7.0.0",
115 | "resolved": "http://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.0.0.tgz",
116 | "integrity": "sha1-g1ctQyDipGVyY3NBE8QoaLZOScM=",
117 | "dev": true,
118 | "requires": {
119 | "@babel/types": "^7.0.0"
120 | }
121 | },
122 | "@babel/helper-hoist-variables": {
123 | "version": "7.0.0",
124 | "resolved": "http://registry.npm.taobao.org/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.0.0.tgz",
125 | "integrity": "sha1-Rq3ExedYZFrnpF3rkrqwkYwju4g=",
126 | "dev": true,
127 | "requires": {
128 | "@babel/types": "^7.0.0"
129 | }
130 | },
131 | "@babel/helper-member-expression-to-functions": {
132 | "version": "7.0.0",
133 | "resolved": "http://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.0.0.tgz",
134 | "integrity": "sha1-jNFLCg33/wDwCefXpDaUX0fHoW8=",
135 | "dev": true,
136 | "requires": {
137 | "@babel/types": "^7.0.0"
138 | }
139 | },
140 | "@babel/helper-module-imports": {
141 | "version": "7.0.0",
142 | "resolved": "http://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.0.0.tgz",
143 | "integrity": "sha1-lggbcRHkhtpNLNlxrRpP4hbMLj0=",
144 | "dev": true,
145 | "requires": {
146 | "@babel/types": "^7.0.0"
147 | }
148 | },
149 | "@babel/helper-module-transforms": {
150 | "version": "7.1.0",
151 | "resolved": "http://registry.npm.taobao.org/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.1.0.tgz",
152 | "integrity": "sha1-Rw1PlnbZ+tULMkzczl+6u8PaV4c=",
153 | "dev": true,
154 | "requires": {
155 | "@babel/helper-module-imports": "^7.0.0",
156 | "@babel/helper-simple-access": "^7.1.0",
157 | "@babel/helper-split-export-declaration": "^7.0.0",
158 | "@babel/template": "^7.1.0",
159 | "@babel/types": "^7.0.0",
160 | "lodash": "^4.17.10"
161 | }
162 | },
163 | "@babel/helper-optimise-call-expression": {
164 | "version": "7.0.0",
165 | "resolved": "http://registry.npm.taobao.org/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.0.0.tgz",
166 | "integrity": "sha1-opIMVwKwc8Fd5REGIAqoytIEl9U=",
167 | "dev": true,
168 | "requires": {
169 | "@babel/types": "^7.0.0"
170 | }
171 | },
172 | "@babel/helper-plugin-utils": {
173 | "version": "7.0.0",
174 | "resolved": "http://registry.npm.taobao.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.0.0.tgz",
175 | "integrity": "sha1-u7P77phmHFaQNCN8wDlnupm08lA=",
176 | "dev": true
177 | },
178 | "@babel/helper-regex": {
179 | "version": "7.0.0",
180 | "resolved": "http://registry.npm.taobao.org/@babel/helper-regex/download/@babel/helper-regex-7.0.0.tgz",
181 | "integrity": "sha1-LBcYkjtX+bvmRwX/5WQKxk2b2yc=",
182 | "dev": true,
183 | "requires": {
184 | "lodash": "^4.17.10"
185 | }
186 | },
187 | "@babel/helper-remap-async-to-generator": {
188 | "version": "7.1.0",
189 | "resolved": "http://registry.npm.taobao.org/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.1.0.tgz",
190 | "integrity": "sha1-Nh2AghtvONp1vT8HheziCojF/n8=",
191 | "dev": true,
192 | "requires": {
193 | "@babel/helper-annotate-as-pure": "^7.0.0",
194 | "@babel/helper-wrap-function": "^7.1.0",
195 | "@babel/template": "^7.1.0",
196 | "@babel/traverse": "^7.1.0",
197 | "@babel/types": "^7.0.0"
198 | }
199 | },
200 | "@babel/helper-replace-supers": {
201 | "version": "7.1.0",
202 | "resolved": "http://registry.npm.taobao.org/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.1.0.tgz",
203 | "integrity": "sha1-X8Md5SLsDvCJncmz589qXdZV82I=",
204 | "dev": true,
205 | "requires": {
206 | "@babel/helper-member-expression-to-functions": "^7.0.0",
207 | "@babel/helper-optimise-call-expression": "^7.0.0",
208 | "@babel/traverse": "^7.1.0",
209 | "@babel/types": "^7.0.0"
210 | }
211 | },
212 | "@babel/helper-simple-access": {
213 | "version": "7.1.0",
214 | "resolved": "http://registry.npm.taobao.org/@babel/helper-simple-access/download/@babel/helper-simple-access-7.1.0.tgz",
215 | "integrity": "sha1-Ze65VMjCRb6qToWdphiPOdceWFw=",
216 | "dev": true,
217 | "requires": {
218 | "@babel/template": "^7.1.0",
219 | "@babel/types": "^7.0.0"
220 | }
221 | },
222 | "@babel/helper-split-export-declaration": {
223 | "version": "7.0.0",
224 | "resolved": "http://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.0.0.tgz",
225 | "integrity": "sha1-Oq4oXAMRwqsJXZl7jJqUytVH2BM=",
226 | "dev": true,
227 | "requires": {
228 | "@babel/types": "^7.0.0"
229 | }
230 | },
231 | "@babel/helper-wrap-function": {
232 | "version": "7.1.0",
233 | "resolved": "http://registry.npm.taobao.org/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.1.0.tgz",
234 | "integrity": "sha1-jPVOkZBwYGfwFq+Pdcs9+CnMjGY=",
235 | "dev": true,
236 | "requires": {
237 | "@babel/helper-function-name": "^7.1.0",
238 | "@babel/template": "^7.1.0",
239 | "@babel/traverse": "^7.1.0",
240 | "@babel/types": "^7.0.0"
241 | }
242 | },
243 | "@babel/helpers": {
244 | "version": "7.1.5",
245 | "resolved": "http://registry.npm.taobao.org/@babel/helpers/download/@babel/helpers-7.1.5.tgz",
246 | "integrity": "sha1-aL/BiV1oXyuPGZXniNv+H2zLGZY=",
247 | "dev": true,
248 | "requires": {
249 | "@babel/template": "^7.1.2",
250 | "@babel/traverse": "^7.1.5",
251 | "@babel/types": "^7.1.5"
252 | }
253 | },
254 | "@babel/highlight": {
255 | "version": "7.0.0",
256 | "resolved": "http://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.0.0.tgz",
257 | "integrity": "sha1-9xDDjI1Fjm3ZogGvtjf8t4HOmeQ=",
258 | "dev": true,
259 | "requires": {
260 | "chalk": "^2.0.0",
261 | "esutils": "^2.0.2",
262 | "js-tokens": "^4.0.0"
263 | }
264 | },
265 | "@babel/parser": {
266 | "version": "7.1.6",
267 | "resolved": "http://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.1.6.tgz",
268 | "integrity": "sha1-Ful6yh7BBiMkoBxaan0N+N0YmFQ=",
269 | "dev": true
270 | },
271 | "@babel/plugin-proposal-async-generator-functions": {
272 | "version": "7.1.0",
273 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.1.0.tgz",
274 | "integrity": "sha1-QcGnAuEAgUVuI6e3TYkZIt0bts4=",
275 | "dev": true,
276 | "requires": {
277 | "@babel/helper-plugin-utils": "^7.0.0",
278 | "@babel/helper-remap-async-to-generator": "^7.1.0",
279 | "@babel/plugin-syntax-async-generators": "^7.0.0"
280 | }
281 | },
282 | "@babel/plugin-proposal-json-strings": {
283 | "version": "7.0.0",
284 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.0.0.tgz",
285 | "integrity": "sha1-O017XPUeHy5w9SNR0o1E/Clw0B4=",
286 | "dev": true,
287 | "requires": {
288 | "@babel/helper-plugin-utils": "^7.0.0",
289 | "@babel/plugin-syntax-json-strings": "^7.0.0"
290 | }
291 | },
292 | "@babel/plugin-proposal-object-rest-spread": {
293 | "version": "7.0.0",
294 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.0.0.tgz",
295 | "integrity": "sha1-mhe1R/ZNBna2yc7NTt90qCq4Xn4=",
296 | "dev": true,
297 | "requires": {
298 | "@babel/helper-plugin-utils": "^7.0.0",
299 | "@babel/plugin-syntax-object-rest-spread": "^7.0.0"
300 | }
301 | },
302 | "@babel/plugin-proposal-optional-catch-binding": {
303 | "version": "7.0.0",
304 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.0.0.tgz",
305 | "integrity": "sha1-thDZKP5VH/cRfULIu0EO7DEqZCU=",
306 | "dev": true,
307 | "requires": {
308 | "@babel/helper-plugin-utils": "^7.0.0",
309 | "@babel/plugin-syntax-optional-catch-binding": "^7.0.0"
310 | }
311 | },
312 | "@babel/plugin-proposal-unicode-property-regex": {
313 | "version": "7.0.0",
314 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.0.0.tgz",
315 | "integrity": "sha1-SYs5zXJTbNfEsmF30DAibroIzTM=",
316 | "dev": true,
317 | "requires": {
318 | "@babel/helper-plugin-utils": "^7.0.0",
319 | "@babel/helper-regex": "^7.0.0",
320 | "regexpu-core": "^4.2.0"
321 | }
322 | },
323 | "@babel/plugin-syntax-async-generators": {
324 | "version": "7.0.0",
325 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-syntax-async-generators/download/@babel/plugin-syntax-async-generators-7.0.0.tgz",
326 | "integrity": "sha1-vwiR3Nv1lVg1nQxib9yUkOILwTw=",
327 | "dev": true,
328 | "requires": {
329 | "@babel/helper-plugin-utils": "^7.0.0"
330 | }
331 | },
332 | "@babel/plugin-syntax-json-strings": {
333 | "version": "7.0.0",
334 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-syntax-json-strings/download/@babel/plugin-syntax-json-strings-7.0.0.tgz",
335 | "integrity": "sha1-DSWaaAkOFbODzjcQ4B1bI/N3DL0=",
336 | "dev": true,
337 | "requires": {
338 | "@babel/helper-plugin-utils": "^7.0.0"
339 | }
340 | },
341 | "@babel/plugin-syntax-object-rest-spread": {
342 | "version": "7.0.0",
343 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.0.0.tgz",
344 | "integrity": "sha1-N9j7yvIWvWWOoa6764t16I68VJs=",
345 | "dev": true,
346 | "requires": {
347 | "@babel/helper-plugin-utils": "^7.0.0"
348 | }
349 | },
350 | "@babel/plugin-syntax-optional-catch-binding": {
351 | "version": "7.0.0",
352 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.0.0.tgz",
353 | "integrity": "sha1-iG9yAIs6ixhZd/fLcHE7ReUe5HU=",
354 | "dev": true,
355 | "requires": {
356 | "@babel/helper-plugin-utils": "^7.0.0"
357 | }
358 | },
359 | "@babel/plugin-transform-arrow-functions": {
360 | "version": "7.0.0",
361 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.0.0.tgz",
362 | "integrity": "sha1-psFIdYSMaKO0sxY6SGU17yXH50k=",
363 | "dev": true,
364 | "requires": {
365 | "@babel/helper-plugin-utils": "^7.0.0"
366 | }
367 | },
368 | "@babel/plugin-transform-async-to-generator": {
369 | "version": "7.1.0",
370 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.1.0.tgz",
371 | "integrity": "sha1-EJ4DZJbFHdZYV+FqyrO6/fPFeBE=",
372 | "dev": true,
373 | "requires": {
374 | "@babel/helper-module-imports": "^7.0.0",
375 | "@babel/helper-plugin-utils": "^7.0.0",
376 | "@babel/helper-remap-async-to-generator": "^7.1.0"
377 | }
378 | },
379 | "@babel/plugin-transform-block-scoped-functions": {
380 | "version": "7.0.0",
381 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.0.0.tgz",
382 | "integrity": "sha1-SCs/dRA5J+NyiLO2e2X4SOKqDQc=",
383 | "dev": true,
384 | "requires": {
385 | "@babel/helper-plugin-utils": "^7.0.0"
386 | }
387 | },
388 | "@babel/plugin-transform-block-scoping": {
389 | "version": "7.1.5",
390 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.1.5.tgz",
391 | "integrity": "sha1-Po4LyaUQRRmSMwKiT3SPcvL2Hzc=",
392 | "dev": true,
393 | "requires": {
394 | "@babel/helper-plugin-utils": "^7.0.0",
395 | "lodash": "^4.17.10"
396 | }
397 | },
398 | "@babel/plugin-transform-classes": {
399 | "version": "7.1.0",
400 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.1.0.tgz",
401 | "integrity": "sha1-qz+KVkNhgAy8irHKbyEQgDhDIkk=",
402 | "dev": true,
403 | "requires": {
404 | "@babel/helper-annotate-as-pure": "^7.0.0",
405 | "@babel/helper-define-map": "^7.1.0",
406 | "@babel/helper-function-name": "^7.1.0",
407 | "@babel/helper-optimise-call-expression": "^7.0.0",
408 | "@babel/helper-plugin-utils": "^7.0.0",
409 | "@babel/helper-replace-supers": "^7.1.0",
410 | "@babel/helper-split-export-declaration": "^7.0.0",
411 | "globals": "^11.1.0"
412 | }
413 | },
414 | "@babel/plugin-transform-computed-properties": {
415 | "version": "7.0.0",
416 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.0.0.tgz",
417 | "integrity": "sha1-L7uJAM0+gljyou3pCbkOdVYYXjE=",
418 | "dev": true,
419 | "requires": {
420 | "@babel/helper-plugin-utils": "^7.0.0"
421 | }
422 | },
423 | "@babel/plugin-transform-destructuring": {
424 | "version": "7.1.3",
425 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.1.3.tgz",
426 | "integrity": "sha1-5p/1DKAfrGy3KGPFROUWwrGTAS8=",
427 | "dev": true,
428 | "requires": {
429 | "@babel/helper-plugin-utils": "^7.0.0"
430 | }
431 | },
432 | "@babel/plugin-transform-dotall-regex": {
433 | "version": "7.0.0",
434 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.0.0.tgz",
435 | "integrity": "sha1-c6JNppvDw3AlH0Oj0EgZhUYRXlg=",
436 | "dev": true,
437 | "requires": {
438 | "@babel/helper-plugin-utils": "^7.0.0",
439 | "@babel/helper-regex": "^7.0.0",
440 | "regexpu-core": "^4.1.3"
441 | }
442 | },
443 | "@babel/plugin-transform-duplicate-keys": {
444 | "version": "7.0.0",
445 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.0.0.tgz",
446 | "integrity": "sha1-oGAeWAmR58rOCA5M+RnP1Y2nToY=",
447 | "dev": true,
448 | "requires": {
449 | "@babel/helper-plugin-utils": "^7.0.0"
450 | }
451 | },
452 | "@babel/plugin-transform-exponentiation-operator": {
453 | "version": "7.1.0",
454 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.1.0.tgz",
455 | "integrity": "sha1-nDTC7n/XfgJ3nPo35AOi4QA8zHM=",
456 | "dev": true,
457 | "requires": {
458 | "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0",
459 | "@babel/helper-plugin-utils": "^7.0.0"
460 | }
461 | },
462 | "@babel/plugin-transform-for-of": {
463 | "version": "7.0.0",
464 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.0.0.tgz",
465 | "integrity": "sha1-8rpOrbg70X3Dx+mzD0cHNl4cPjk=",
466 | "dev": true,
467 | "requires": {
468 | "@babel/helper-plugin-utils": "^7.0.0"
469 | }
470 | },
471 | "@babel/plugin-transform-function-name": {
472 | "version": "7.1.0",
473 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.1.0.tgz",
474 | "integrity": "sha1-KcVVDVxGII5/cwUW1B7t3Ur/rbs=",
475 | "dev": true,
476 | "requires": {
477 | "@babel/helper-function-name": "^7.1.0",
478 | "@babel/helper-plugin-utils": "^7.0.0"
479 | }
480 | },
481 | "@babel/plugin-transform-literals": {
482 | "version": "7.0.0",
483 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.0.0.tgz",
484 | "integrity": "sha1-KuwdKc3STEBzWckwzdiekU7o/4Y=",
485 | "dev": true,
486 | "requires": {
487 | "@babel/helper-plugin-utils": "^7.0.0"
488 | }
489 | },
490 | "@babel/plugin-transform-modules-amd": {
491 | "version": "7.1.0",
492 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.1.0.tgz",
493 | "integrity": "sha1-+eCnBywS4pYHm1pZ9Aj/W5e/hqg=",
494 | "dev": true,
495 | "requires": {
496 | "@babel/helper-module-transforms": "^7.1.0",
497 | "@babel/helper-plugin-utils": "^7.0.0"
498 | }
499 | },
500 | "@babel/plugin-transform-modules-commonjs": {
501 | "version": "7.1.0",
502 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.1.0.tgz",
503 | "integrity": "sha1-Cp2GRRy7+ym9FRhjBol8Z/b5oFw=",
504 | "dev": true,
505 | "requires": {
506 | "@babel/helper-module-transforms": "^7.1.0",
507 | "@babel/helper-plugin-utils": "^7.0.0",
508 | "@babel/helper-simple-access": "^7.1.0"
509 | }
510 | },
511 | "@babel/plugin-transform-modules-systemjs": {
512 | "version": "7.1.3",
513 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.1.3.tgz",
514 | "integrity": "sha1-IRmj49thL9dKGdiGUu+/6WE6XbA=",
515 | "dev": true,
516 | "requires": {
517 | "@babel/helper-hoist-variables": "^7.0.0",
518 | "@babel/helper-plugin-utils": "^7.0.0"
519 | }
520 | },
521 | "@babel/plugin-transform-modules-umd": {
522 | "version": "7.1.0",
523 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.1.0.tgz",
524 | "integrity": "sha1-opp9hdbyjDVhwzlkRCJXzGoh8qg=",
525 | "dev": true,
526 | "requires": {
527 | "@babel/helper-module-transforms": "^7.1.0",
528 | "@babel/helper-plugin-utils": "^7.0.0"
529 | }
530 | },
531 | "@babel/plugin-transform-new-target": {
532 | "version": "7.0.0",
533 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.0.0.tgz",
534 | "integrity": "sha1-ro+9iVF/p4ktIOZWTmQeh3DDqko=",
535 | "dev": true,
536 | "requires": {
537 | "@babel/helper-plugin-utils": "^7.0.0"
538 | }
539 | },
540 | "@babel/plugin-transform-object-assign": {
541 | "version": "7.0.0",
542 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-object-assign/download/@babel/plugin-transform-object-assign-7.0.0.tgz",
543 | "integrity": "sha1-/KbXUA2WdcQoaLjziCl5IBuaWtg=",
544 | "dev": true,
545 | "requires": {
546 | "@babel/helper-plugin-utils": "^7.0.0"
547 | }
548 | },
549 | "@babel/plugin-transform-object-super": {
550 | "version": "7.1.0",
551 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.1.0.tgz",
552 | "integrity": "sha1-sa4ZSgVLgm2NS6fKkUhtStoPkbs=",
553 | "dev": true,
554 | "requires": {
555 | "@babel/helper-plugin-utils": "^7.0.0",
556 | "@babel/helper-replace-supers": "^7.1.0"
557 | }
558 | },
559 | "@babel/plugin-transform-parameters": {
560 | "version": "7.1.0",
561 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.1.0.tgz",
562 | "integrity": "sha1-RPSS+dYYyRJAJuYjAcKWv2Bqeu0=",
563 | "dev": true,
564 | "requires": {
565 | "@babel/helper-call-delegate": "^7.1.0",
566 | "@babel/helper-get-function-arity": "^7.0.0",
567 | "@babel/helper-plugin-utils": "^7.0.0"
568 | }
569 | },
570 | "@babel/plugin-transform-regenerator": {
571 | "version": "7.0.0",
572 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.0.0.tgz",
573 | "integrity": "sha1-W0Foa07UC++HTX7WqEvdhJwT4ME=",
574 | "dev": true,
575 | "requires": {
576 | "regenerator-transform": "^0.13.3"
577 | }
578 | },
579 | "@babel/plugin-transform-runtime": {
580 | "version": "7.1.0",
581 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.1.0.tgz",
582 | "integrity": "sha1-n3aSDUJVG7V34txZTfIptfdiS2M=",
583 | "dev": true,
584 | "requires": {
585 | "@babel/helper-module-imports": "^7.0.0",
586 | "@babel/helper-plugin-utils": "^7.0.0",
587 | "resolve": "^1.8.1",
588 | "semver": "^5.5.1"
589 | }
590 | },
591 | "@babel/plugin-transform-shorthand-properties": {
592 | "version": "7.0.0",
593 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.0.0.tgz",
594 | "integrity": "sha1-hfivWS3MB2R1QaA1DoyVx79BnRU=",
595 | "dev": true,
596 | "requires": {
597 | "@babel/helper-plugin-utils": "^7.0.0"
598 | }
599 | },
600 | "@babel/plugin-transform-spread": {
601 | "version": "7.0.0",
602 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.0.0.tgz",
603 | "integrity": "sha1-k1g85I3YyF5T86RgVshW5K8wtJs=",
604 | "dev": true,
605 | "requires": {
606 | "@babel/helper-plugin-utils": "^7.0.0"
607 | }
608 | },
609 | "@babel/plugin-transform-sticky-regex": {
610 | "version": "7.0.0",
611 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.0.0.tgz",
612 | "integrity": "sha1-MKnWSsKrRu7Ah7hTBTW+zZDnM2Y=",
613 | "dev": true,
614 | "requires": {
615 | "@babel/helper-plugin-utils": "^7.0.0",
616 | "@babel/helper-regex": "^7.0.0"
617 | }
618 | },
619 | "@babel/plugin-transform-template-literals": {
620 | "version": "7.0.0",
621 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.0.0.tgz",
622 | "integrity": "sha1-CE8ZUu/lsVPdrmnriUX4gsepfGU=",
623 | "dev": true,
624 | "requires": {
625 | "@babel/helper-annotate-as-pure": "^7.0.0",
626 | "@babel/helper-plugin-utils": "^7.0.0"
627 | }
628 | },
629 | "@babel/plugin-transform-typeof-symbol": {
630 | "version": "7.0.0",
631 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.0.0.tgz",
632 | "integrity": "sha1-Tc8eUulD5SZ7cxO/80f9vg+Bzsk=",
633 | "dev": true,
634 | "requires": {
635 | "@babel/helper-plugin-utils": "^7.0.0"
636 | }
637 | },
638 | "@babel/plugin-transform-unicode-regex": {
639 | "version": "7.0.0",
640 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.0.0.tgz",
641 | "integrity": "sha1-xngOWxhjp2/nktkO3tn81bUdaPw=",
642 | "dev": true,
643 | "requires": {
644 | "@babel/helper-plugin-utils": "^7.0.0",
645 | "@babel/helper-regex": "^7.0.0",
646 | "regexpu-core": "^4.1.3"
647 | }
648 | },
649 | "@babel/preset-env": {
650 | "version": "7.1.6",
651 | "resolved": "http://registry.npm.taobao.org/@babel/preset-env/download/@babel/preset-env-7.1.6.tgz",
652 | "integrity": "sha1-oL9Llra/z24ACvxbcrSr58wTrpc=",
653 | "dev": true,
654 | "requires": {
655 | "@babel/helper-module-imports": "^7.0.0",
656 | "@babel/helper-plugin-utils": "^7.0.0",
657 | "@babel/plugin-proposal-async-generator-functions": "^7.1.0",
658 | "@babel/plugin-proposal-json-strings": "^7.0.0",
659 | "@babel/plugin-proposal-object-rest-spread": "^7.0.0",
660 | "@babel/plugin-proposal-optional-catch-binding": "^7.0.0",
661 | "@babel/plugin-proposal-unicode-property-regex": "^7.0.0",
662 | "@babel/plugin-syntax-async-generators": "^7.0.0",
663 | "@babel/plugin-syntax-object-rest-spread": "^7.0.0",
664 | "@babel/plugin-syntax-optional-catch-binding": "^7.0.0",
665 | "@babel/plugin-transform-arrow-functions": "^7.0.0",
666 | "@babel/plugin-transform-async-to-generator": "^7.1.0",
667 | "@babel/plugin-transform-block-scoped-functions": "^7.0.0",
668 | "@babel/plugin-transform-block-scoping": "^7.1.5",
669 | "@babel/plugin-transform-classes": "^7.1.0",
670 | "@babel/plugin-transform-computed-properties": "^7.0.0",
671 | "@babel/plugin-transform-destructuring": "^7.0.0",
672 | "@babel/plugin-transform-dotall-regex": "^7.0.0",
673 | "@babel/plugin-transform-duplicate-keys": "^7.0.0",
674 | "@babel/plugin-transform-exponentiation-operator": "^7.1.0",
675 | "@babel/plugin-transform-for-of": "^7.0.0",
676 | "@babel/plugin-transform-function-name": "^7.1.0",
677 | "@babel/plugin-transform-literals": "^7.0.0",
678 | "@babel/plugin-transform-modules-amd": "^7.1.0",
679 | "@babel/plugin-transform-modules-commonjs": "^7.1.0",
680 | "@babel/plugin-transform-modules-systemjs": "^7.0.0",
681 | "@babel/plugin-transform-modules-umd": "^7.1.0",
682 | "@babel/plugin-transform-new-target": "^7.0.0",
683 | "@babel/plugin-transform-object-super": "^7.1.0",
684 | "@babel/plugin-transform-parameters": "^7.1.0",
685 | "@babel/plugin-transform-regenerator": "^7.0.0",
686 | "@babel/plugin-transform-shorthand-properties": "^7.0.0",
687 | "@babel/plugin-transform-spread": "^7.0.0",
688 | "@babel/plugin-transform-sticky-regex": "^7.0.0",
689 | "@babel/plugin-transform-template-literals": "^7.0.0",
690 | "@babel/plugin-transform-typeof-symbol": "^7.0.0",
691 | "@babel/plugin-transform-unicode-regex": "^7.0.0",
692 | "browserslist": "^4.1.0",
693 | "invariant": "^2.2.2",
694 | "js-levenshtein": "^1.1.3",
695 | "semver": "^5.3.0"
696 | }
697 | },
698 | "@babel/runtime": {
699 | "version": "7.1.5",
700 | "resolved": "http://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.1.5.tgz",
701 | "integrity": "sha1-QXCQdkHPH2FQj1Y+zjclFQzG/jk=",
702 | "dev": true,
703 | "requires": {
704 | "regenerator-runtime": "^0.12.0"
705 | }
706 | },
707 | "@babel/template": {
708 | "version": "7.1.2",
709 | "resolved": "http://registry.npm.taobao.org/@babel/template/download/@babel/template-7.1.2.tgz",
710 | "integrity": "sha1-CQSEpXT+9aLS13JqZ07O2lxbVkQ=",
711 | "dev": true,
712 | "requires": {
713 | "@babel/code-frame": "^7.0.0",
714 | "@babel/parser": "^7.1.2",
715 | "@babel/types": "^7.1.2"
716 | }
717 | },
718 | "@babel/traverse": {
719 | "version": "7.1.6",
720 | "resolved": "http://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.1.6.tgz",
721 | "integrity": "sha1-yNuZY6tM5biUIiQ1SCvY6oVLe1w=",
722 | "dev": true,
723 | "requires": {
724 | "@babel/code-frame": "^7.0.0",
725 | "@babel/generator": "^7.1.6",
726 | "@babel/helper-function-name": "^7.1.0",
727 | "@babel/helper-split-export-declaration": "^7.0.0",
728 | "@babel/parser": "^7.1.6",
729 | "@babel/types": "^7.1.6",
730 | "debug": "^4.1.0",
731 | "globals": "^11.1.0",
732 | "lodash": "^4.17.10"
733 | }
734 | },
735 | "@babel/types": {
736 | "version": "7.1.6",
737 | "resolved": "http://registry.npm.taobao.org/@babel/types/download/@babel/types-7.1.6.tgz",
738 | "integrity": "sha1-CtszDDooE0ihkCY6zrVA4Q8EvM4=",
739 | "dev": true,
740 | "requires": {
741 | "esutils": "^2.0.2",
742 | "lodash": "^4.17.10",
743 | "to-fast-properties": "^2.0.0"
744 | }
745 | },
746 | "JSONStream": {
747 | "version": "1.3.5",
748 | "resolved": "http://registry.npm.taobao.org/JSONStream/download/JSONStream-1.3.5.tgz",
749 | "integrity": "sha1-MgjB8I06TZkmGrZPkjArwV4RHKA=",
750 | "dev": true,
751 | "requires": {
752 | "jsonparse": "^1.2.0",
753 | "through": ">=2.2.7 <3"
754 | }
755 | },
756 | "acorn": {
757 | "version": "6.0.4",
758 | "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-6.0.4.tgz",
759 | "integrity": "sha1-dzd+c1O3LsUQRVCqLSCXov1At1Q=",
760 | "dev": true
761 | },
762 | "acorn-dynamic-import": {
763 | "version": "4.0.0",
764 | "resolved": "http://registry.npm.taobao.org/acorn-dynamic-import/download/acorn-dynamic-import-4.0.0.tgz",
765 | "integrity": "sha1-SCIQFAWCo2uDw+NC4c/ryqkkCUg=",
766 | "dev": true
767 | },
768 | "acorn-node": {
769 | "version": "1.6.2",
770 | "resolved": "http://registry.npm.taobao.org/acorn-node/download/acorn-node-1.6.2.tgz",
771 | "integrity": "sha1-t9fOym8i5kF6+TOmLK1N4BBI1dI=",
772 | "dev": true,
773 | "requires": {
774 | "acorn": "^6.0.2",
775 | "acorn-dynamic-import": "^4.0.0",
776 | "acorn-walk": "^6.1.0",
777 | "xtend": "^4.0.1"
778 | }
779 | },
780 | "acorn-walk": {
781 | "version": "6.1.1",
782 | "resolved": "http://registry.npm.taobao.org/acorn-walk/download/acorn-walk-6.1.1.tgz",
783 | "integrity": "sha1-02O2b1+sXwGP+cOh57b44xDMORM=",
784 | "dev": true
785 | },
786 | "ansi-regex": {
787 | "version": "3.0.0",
788 | "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz",
789 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
790 | "dev": true
791 | },
792 | "ansi-styles": {
793 | "version": "3.2.1",
794 | "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz",
795 | "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
796 | "dev": true,
797 | "requires": {
798 | "color-convert": "^1.9.0"
799 | }
800 | },
801 | "array-filter": {
802 | "version": "0.0.1",
803 | "resolved": "http://registry.npm.taobao.org/array-filter/download/array-filter-0.0.1.tgz",
804 | "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=",
805 | "dev": true
806 | },
807 | "array-map": {
808 | "version": "0.0.0",
809 | "resolved": "http://registry.npm.taobao.org/array-map/download/array-map-0.0.0.tgz",
810 | "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=",
811 | "dev": true
812 | },
813 | "array-reduce": {
814 | "version": "0.0.0",
815 | "resolved": "http://registry.npm.taobao.org/array-reduce/download/array-reduce-0.0.0.tgz",
816 | "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=",
817 | "dev": true
818 | },
819 | "asn1": {
820 | "version": "0.2.4",
821 | "resolved": "http://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz",
822 | "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=",
823 | "dev": true,
824 | "requires": {
825 | "safer-buffer": "~2.1.0"
826 | }
827 | },
828 | "asn1.js": {
829 | "version": "4.10.1",
830 | "resolved": "http://registry.npm.taobao.org/asn1.js/download/asn1.js-4.10.1.tgz",
831 | "integrity": "sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA=",
832 | "dev": true,
833 | "requires": {
834 | "bn.js": "^4.0.0",
835 | "inherits": "^2.0.1",
836 | "minimalistic-assert": "^1.0.0"
837 | }
838 | },
839 | "assert": {
840 | "version": "1.4.1",
841 | "resolved": "http://registry.npm.taobao.org/assert/download/assert-1.4.1.tgz",
842 | "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
843 | "dev": true,
844 | "requires": {
845 | "util": "0.10.3"
846 | },
847 | "dependencies": {
848 | "inherits": {
849 | "version": "2.0.1",
850 | "resolved": "http://registry.npm.taobao.org/inherits/download/inherits-2.0.1.tgz",
851 | "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
852 | "dev": true
853 | },
854 | "util": {
855 | "version": "0.10.3",
856 | "resolved": "http://registry.npm.taobao.org/util/download/util-0.10.3.tgz",
857 | "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
858 | "dev": true,
859 | "requires": {
860 | "inherits": "2.0.1"
861 | }
862 | }
863 | }
864 | },
865 | "babelify": {
866 | "version": "10.0.0",
867 | "resolved": "http://registry.npm.taobao.org/babelify/download/babelify-10.0.0.tgz",
868 | "integrity": "sha1-/nOxoiWD8GaA2NBy4loeDR0df7U=",
869 | "dev": true
870 | },
871 | "balanced-match": {
872 | "version": "1.0.0",
873 | "resolved": "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz",
874 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
875 | "dev": true
876 | },
877 | "base64-js": {
878 | "version": "1.3.0",
879 | "resolved": "http://registry.npm.taobao.org/base64-js/download/base64-js-1.3.0.tgz",
880 | "integrity": "sha1-yrHmEY8FEJXli1KBrqjBzSK/wOM=",
881 | "dev": true
882 | },
883 | "bn.js": {
884 | "version": "4.11.8",
885 | "resolved": "http://registry.npm.taobao.org/bn.js/download/bn.js-4.11.8.tgz",
886 | "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=",
887 | "dev": true
888 | },
889 | "brace-expansion": {
890 | "version": "1.1.11",
891 | "resolved": "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz",
892 | "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=",
893 | "dev": true,
894 | "requires": {
895 | "balanced-match": "^1.0.0",
896 | "concat-map": "0.0.1"
897 | }
898 | },
899 | "brorand": {
900 | "version": "1.1.0",
901 | "resolved": "http://registry.npm.taobao.org/brorand/download/brorand-1.1.0.tgz",
902 | "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
903 | "dev": true
904 | },
905 | "browser-pack": {
906 | "version": "6.1.0",
907 | "resolved": "http://registry.npm.taobao.org/browser-pack/download/browser-pack-6.1.0.tgz",
908 | "integrity": "sha1-w0uhDQuc4WK1ryJ8cTHJLC7NV3Q=",
909 | "dev": true,
910 | "requires": {
911 | "JSONStream": "^1.0.3",
912 | "combine-source-map": "~0.8.0",
913 | "defined": "^1.0.0",
914 | "safe-buffer": "^5.1.1",
915 | "through2": "^2.0.0",
916 | "umd": "^3.0.0"
917 | }
918 | },
919 | "browser-resolve": {
920 | "version": "1.11.3",
921 | "resolved": "http://registry.npm.taobao.org/browser-resolve/download/browser-resolve-1.11.3.tgz",
922 | "integrity": "sha1-m3y7PQ9RDky4a9vXlhJNKLWJCvY=",
923 | "dev": true,
924 | "requires": {
925 | "resolve": "1.1.7"
926 | },
927 | "dependencies": {
928 | "resolve": {
929 | "version": "1.1.7",
930 | "resolved": "http://registry.npm.taobao.org/resolve/download/resolve-1.1.7.tgz",
931 | "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
932 | "dev": true
933 | }
934 | }
935 | },
936 | "browserify": {
937 | "version": "16.2.3",
938 | "resolved": "http://registry.npm.taobao.org/browserify/download/browserify-16.2.3.tgz",
939 | "integrity": "sha1-fubmVLpPkrzmqzWZw0hbHMegrQs=",
940 | "dev": true,
941 | "requires": {
942 | "JSONStream": "^1.0.3",
943 | "assert": "^1.4.0",
944 | "browser-pack": "^6.0.1",
945 | "browser-resolve": "^1.11.0",
946 | "browserify-zlib": "~0.2.0",
947 | "buffer": "^5.0.2",
948 | "cached-path-relative": "^1.0.0",
949 | "concat-stream": "^1.6.0",
950 | "console-browserify": "^1.1.0",
951 | "constants-browserify": "~1.0.0",
952 | "crypto-browserify": "^3.0.0",
953 | "defined": "^1.0.0",
954 | "deps-sort": "^2.0.0",
955 | "domain-browser": "^1.2.0",
956 | "duplexer2": "~0.1.2",
957 | "events": "^2.0.0",
958 | "glob": "^7.1.0",
959 | "has": "^1.0.0",
960 | "htmlescape": "^1.1.0",
961 | "https-browserify": "^1.0.0",
962 | "inherits": "~2.0.1",
963 | "insert-module-globals": "^7.0.0",
964 | "labeled-stream-splicer": "^2.0.0",
965 | "mkdirp": "^0.5.0",
966 | "module-deps": "^6.0.0",
967 | "os-browserify": "~0.3.0",
968 | "parents": "^1.0.1",
969 | "path-browserify": "~0.0.0",
970 | "process": "~0.11.0",
971 | "punycode": "^1.3.2",
972 | "querystring-es3": "~0.2.0",
973 | "read-only-stream": "^2.0.0",
974 | "readable-stream": "^2.0.2",
975 | "resolve": "^1.1.4",
976 | "shasum": "^1.0.0",
977 | "shell-quote": "^1.6.1",
978 | "stream-browserify": "^2.0.0",
979 | "stream-http": "^2.0.0",
980 | "string_decoder": "^1.1.1",
981 | "subarg": "^1.0.0",
982 | "syntax-error": "^1.1.1",
983 | "through2": "^2.0.0",
984 | "timers-browserify": "^1.0.1",
985 | "tty-browserify": "0.0.1",
986 | "url": "~0.11.0",
987 | "util": "~0.10.1",
988 | "vm-browserify": "^1.0.0",
989 | "xtend": "^4.0.0"
990 | }
991 | },
992 | "browserify-aes": {
993 | "version": "1.2.0",
994 | "resolved": "http://registry.npm.taobao.org/browserify-aes/download/browserify-aes-1.2.0.tgz",
995 | "integrity": "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g=",
996 | "dev": true,
997 | "requires": {
998 | "buffer-xor": "^1.0.3",
999 | "cipher-base": "^1.0.0",
1000 | "create-hash": "^1.1.0",
1001 | "evp_bytestokey": "^1.0.3",
1002 | "inherits": "^2.0.1",
1003 | "safe-buffer": "^5.0.1"
1004 | }
1005 | },
1006 | "browserify-cipher": {
1007 | "version": "1.0.1",
1008 | "resolved": "http://registry.npm.taobao.org/browserify-cipher/download/browserify-cipher-1.0.1.tgz",
1009 | "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=",
1010 | "dev": true,
1011 | "requires": {
1012 | "browserify-aes": "^1.0.4",
1013 | "browserify-des": "^1.0.0",
1014 | "evp_bytestokey": "^1.0.0"
1015 | }
1016 | },
1017 | "browserify-des": {
1018 | "version": "1.0.2",
1019 | "resolved": "http://registry.npm.taobao.org/browserify-des/download/browserify-des-1.0.2.tgz",
1020 | "integrity": "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw=",
1021 | "dev": true,
1022 | "requires": {
1023 | "cipher-base": "^1.0.1",
1024 | "des.js": "^1.0.0",
1025 | "inherits": "^2.0.1",
1026 | "safe-buffer": "^5.1.2"
1027 | }
1028 | },
1029 | "browserify-rsa": {
1030 | "version": "4.0.1",
1031 | "resolved": "http://registry.npm.taobao.org/browserify-rsa/download/browserify-rsa-4.0.1.tgz",
1032 | "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
1033 | "dev": true,
1034 | "requires": {
1035 | "bn.js": "^4.1.0",
1036 | "randombytes": "^2.0.1"
1037 | }
1038 | },
1039 | "browserify-sign": {
1040 | "version": "4.0.4",
1041 | "resolved": "http://registry.npm.taobao.org/browserify-sign/download/browserify-sign-4.0.4.tgz",
1042 | "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
1043 | "dev": true,
1044 | "requires": {
1045 | "bn.js": "^4.1.1",
1046 | "browserify-rsa": "^4.0.0",
1047 | "create-hash": "^1.1.0",
1048 | "create-hmac": "^1.1.2",
1049 | "elliptic": "^6.0.0",
1050 | "inherits": "^2.0.1",
1051 | "parse-asn1": "^5.0.0"
1052 | }
1053 | },
1054 | "browserify-zlib": {
1055 | "version": "0.2.0",
1056 | "resolved": "http://registry.npm.taobao.org/browserify-zlib/download/browserify-zlib-0.2.0.tgz",
1057 | "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=",
1058 | "dev": true,
1059 | "requires": {
1060 | "pako": "~1.0.5"
1061 | }
1062 | },
1063 | "browserslist": {
1064 | "version": "4.3.4",
1065 | "resolved": "http://registry.npm.taobao.org/browserslist/download/browserslist-4.3.4.tgz",
1066 | "integrity": "sha1-RHe3N9tqGwcHcnWyR5HmgNQwBCU=",
1067 | "dev": true,
1068 | "requires": {
1069 | "caniuse-lite": "^1.0.30000899",
1070 | "electron-to-chromium": "^1.3.82",
1071 | "node-releases": "^1.0.1"
1072 | }
1073 | },
1074 | "buffer": {
1075 | "version": "5.2.1",
1076 | "resolved": "http://registry.npm.taobao.org/buffer/download/buffer-5.2.1.tgz",
1077 | "integrity": "sha1-3Vf6DxCaxZxgJHkETcp7iz0LcdY=",
1078 | "dev": true,
1079 | "requires": {
1080 | "base64-js": "^1.0.2",
1081 | "ieee754": "^1.1.4"
1082 | }
1083 | },
1084 | "buffer-from": {
1085 | "version": "1.1.1",
1086 | "resolved": "http://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz",
1087 | "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=",
1088 | "dev": true
1089 | },
1090 | "buffer-xor": {
1091 | "version": "1.0.3",
1092 | "resolved": "http://registry.npm.taobao.org/buffer-xor/download/buffer-xor-1.0.3.tgz",
1093 | "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
1094 | "dev": true
1095 | },
1096 | "builtin-status-codes": {
1097 | "version": "3.0.0",
1098 | "resolved": "http://registry.npm.taobao.org/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz",
1099 | "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
1100 | "dev": true
1101 | },
1102 | "cached-path-relative": {
1103 | "version": "1.0.2",
1104 | "resolved": "http://registry.npm.taobao.org/cached-path-relative/download/cached-path-relative-1.0.2.tgz",
1105 | "integrity": "sha1-oT30GW0md2IgzDNW6xR6Utuixts=",
1106 | "dev": true
1107 | },
1108 | "caniuse-lite": {
1109 | "version": "1.0.30000907",
1110 | "resolved": "http://registry.npm.taobao.org/caniuse-lite/download/caniuse-lite-1.0.30000907.tgz",
1111 | "integrity": "sha1-C5iZveU/scMOIU+xJAI2HgL/XEI=",
1112 | "dev": true
1113 | },
1114 | "chalk": {
1115 | "version": "2.4.1",
1116 | "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-2.4.1.tgz",
1117 | "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=",
1118 | "dev": true,
1119 | "requires": {
1120 | "ansi-styles": "^3.2.1",
1121 | "escape-string-regexp": "^1.0.5",
1122 | "supports-color": "^5.3.0"
1123 | }
1124 | },
1125 | "cipher-base": {
1126 | "version": "1.0.4",
1127 | "resolved": "http://registry.npm.taobao.org/cipher-base/download/cipher-base-1.0.4.tgz",
1128 | "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=",
1129 | "dev": true,
1130 | "requires": {
1131 | "inherits": "^2.0.1",
1132 | "safe-buffer": "^5.0.1"
1133 | }
1134 | },
1135 | "cli-cursor": {
1136 | "version": "2.1.0",
1137 | "resolved": "http://registry.npm.taobao.org/cli-cursor/download/cli-cursor-2.1.0.tgz",
1138 | "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
1139 | "dev": true,
1140 | "requires": {
1141 | "restore-cursor": "^2.0.0"
1142 | }
1143 | },
1144 | "cli-spinners": {
1145 | "version": "1.3.1",
1146 | "resolved": "http://registry.npm.taobao.org/cli-spinners/download/cli-spinners-1.3.1.tgz",
1147 | "integrity": "sha1-ACwZkJEtDVlYDJO9NsBW3pnkJZo=",
1148 | "dev": true
1149 | },
1150 | "clone": {
1151 | "version": "1.0.4",
1152 | "resolved": "http://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz",
1153 | "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
1154 | "dev": true
1155 | },
1156 | "color-convert": {
1157 | "version": "1.9.3",
1158 | "resolved": "http://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz",
1159 | "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
1160 | "dev": true,
1161 | "requires": {
1162 | "color-name": "1.1.3"
1163 | }
1164 | },
1165 | "color-name": {
1166 | "version": "1.1.3",
1167 | "resolved": "http://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz",
1168 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
1169 | "dev": true
1170 | },
1171 | "combine-source-map": {
1172 | "version": "0.8.0",
1173 | "resolved": "http://registry.npm.taobao.org/combine-source-map/download/combine-source-map-0.8.0.tgz",
1174 | "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=",
1175 | "dev": true,
1176 | "requires": {
1177 | "convert-source-map": "~1.1.0",
1178 | "inline-source-map": "~0.6.0",
1179 | "lodash.memoize": "~3.0.3",
1180 | "source-map": "~0.5.3"
1181 | },
1182 | "dependencies": {
1183 | "convert-source-map": {
1184 | "version": "1.1.3",
1185 | "resolved": "http://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.1.3.tgz",
1186 | "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=",
1187 | "dev": true
1188 | }
1189 | }
1190 | },
1191 | "commander": {
1192 | "version": "2.17.1",
1193 | "resolved": "http://registry.npm.taobao.org/commander/download/commander-2.17.1.tgz",
1194 | "integrity": "sha1-vXerfebelCBc6sxy8XFtKfIKd78=",
1195 | "dev": true
1196 | },
1197 | "concat-map": {
1198 | "version": "0.0.1",
1199 | "resolved": "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz",
1200 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
1201 | "dev": true
1202 | },
1203 | "concat-stream": {
1204 | "version": "1.6.2",
1205 | "resolved": "http://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz",
1206 | "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=",
1207 | "dev": true,
1208 | "requires": {
1209 | "buffer-from": "^1.0.0",
1210 | "inherits": "^2.0.3",
1211 | "readable-stream": "^2.2.2",
1212 | "typedarray": "^0.0.6"
1213 | }
1214 | },
1215 | "console-browserify": {
1216 | "version": "1.1.0",
1217 | "resolved": "http://registry.npm.taobao.org/console-browserify/download/console-browserify-1.1.0.tgz",
1218 | "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
1219 | "dev": true,
1220 | "requires": {
1221 | "date-now": "^0.1.4"
1222 | }
1223 | },
1224 | "constants-browserify": {
1225 | "version": "1.0.0",
1226 | "resolved": "http://registry.npm.taobao.org/constants-browserify/download/constants-browserify-1.0.0.tgz",
1227 | "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
1228 | "dev": true
1229 | },
1230 | "convert-source-map": {
1231 | "version": "1.6.0",
1232 | "resolved": "http://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.6.0.tgz",
1233 | "integrity": "sha1-UbU3qMQ+DwTewZk7/83VBOdYrCA=",
1234 | "dev": true,
1235 | "requires": {
1236 | "safe-buffer": "~5.1.1"
1237 | }
1238 | },
1239 | "core-util-is": {
1240 | "version": "1.0.2",
1241 | "resolved": "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz",
1242 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
1243 | "dev": true
1244 | },
1245 | "create-ecdh": {
1246 | "version": "4.0.3",
1247 | "resolved": "http://registry.npm.taobao.org/create-ecdh/download/create-ecdh-4.0.3.tgz",
1248 | "integrity": "sha1-yREbbzMEXEaX8UR4f5JUzcd8Rf8=",
1249 | "dev": true,
1250 | "requires": {
1251 | "bn.js": "^4.1.0",
1252 | "elliptic": "^6.0.0"
1253 | }
1254 | },
1255 | "create-hash": {
1256 | "version": "1.2.0",
1257 | "resolved": "http://registry.npm.taobao.org/create-hash/download/create-hash-1.2.0.tgz",
1258 | "integrity": "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY=",
1259 | "dev": true,
1260 | "requires": {
1261 | "cipher-base": "^1.0.1",
1262 | "inherits": "^2.0.1",
1263 | "md5.js": "^1.3.4",
1264 | "ripemd160": "^2.0.1",
1265 | "sha.js": "^2.4.0"
1266 | }
1267 | },
1268 | "create-hmac": {
1269 | "version": "1.1.7",
1270 | "resolved": "http://registry.npm.taobao.org/create-hmac/download/create-hmac-1.1.7.tgz",
1271 | "integrity": "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8=",
1272 | "dev": true,
1273 | "requires": {
1274 | "cipher-base": "^1.0.3",
1275 | "create-hash": "^1.1.0",
1276 | "inherits": "^2.0.1",
1277 | "ripemd160": "^2.0.0",
1278 | "safe-buffer": "^5.0.1",
1279 | "sha.js": "^2.4.8"
1280 | }
1281 | },
1282 | "cross-env": {
1283 | "version": "5.2.0",
1284 | "resolved": "http://registry.npm.taobao.org/cross-env/download/cross-env-5.2.0.tgz",
1285 | "integrity": "sha1-bs1MAV1Xc+YUA57lKQdmabnRJvI=",
1286 | "dev": true,
1287 | "requires": {
1288 | "cross-spawn": "^6.0.5",
1289 | "is-windows": "^1.0.0"
1290 | }
1291 | },
1292 | "cross-spawn": {
1293 | "version": "6.0.5",
1294 | "resolved": "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz",
1295 | "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=",
1296 | "dev": true,
1297 | "requires": {
1298 | "nice-try": "^1.0.4",
1299 | "path-key": "^2.0.1",
1300 | "semver": "^5.5.0",
1301 | "shebang-command": "^1.2.0",
1302 | "which": "^1.2.9"
1303 | }
1304 | },
1305 | "crypto-browserify": {
1306 | "version": "3.12.0",
1307 | "resolved": "http://registry.npm.taobao.org/crypto-browserify/download/crypto-browserify-3.12.0.tgz",
1308 | "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=",
1309 | "dev": true,
1310 | "requires": {
1311 | "browserify-cipher": "^1.0.0",
1312 | "browserify-sign": "^4.0.0",
1313 | "create-ecdh": "^4.0.0",
1314 | "create-hash": "^1.1.0",
1315 | "create-hmac": "^1.1.0",
1316 | "diffie-hellman": "^5.0.0",
1317 | "inherits": "^2.0.1",
1318 | "pbkdf2": "^3.0.3",
1319 | "public-encrypt": "^4.0.0",
1320 | "randombytes": "^2.0.0",
1321 | "randomfill": "^1.0.3"
1322 | }
1323 | },
1324 | "date-now": {
1325 | "version": "0.1.4",
1326 | "resolved": "http://registry.npm.taobao.org/date-now/download/date-now-0.1.4.tgz",
1327 | "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
1328 | "dev": true
1329 | },
1330 | "debug": {
1331 | "version": "4.1.0",
1332 | "resolved": "http://registry.npm.taobao.org/debug/download/debug-4.1.0.tgz",
1333 | "integrity": "sha1-NzaHv/pnizixzZH4YbY4UANd3Ic=",
1334 | "dev": true,
1335 | "requires": {
1336 | "ms": "^2.1.1"
1337 | }
1338 | },
1339 | "defaults": {
1340 | "version": "1.0.3",
1341 | "resolved": "http://registry.npm.taobao.org/defaults/download/defaults-1.0.3.tgz",
1342 | "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
1343 | "dev": true,
1344 | "requires": {
1345 | "clone": "^1.0.2"
1346 | }
1347 | },
1348 | "defined": {
1349 | "version": "1.0.0",
1350 | "resolved": "http://registry.npm.taobao.org/defined/download/defined-1.0.0.tgz",
1351 | "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
1352 | "dev": true
1353 | },
1354 | "deps-sort": {
1355 | "version": "2.0.0",
1356 | "resolved": "http://registry.npm.taobao.org/deps-sort/download/deps-sort-2.0.0.tgz",
1357 | "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=",
1358 | "dev": true,
1359 | "requires": {
1360 | "JSONStream": "^1.0.3",
1361 | "shasum": "^1.0.0",
1362 | "subarg": "^1.0.0",
1363 | "through2": "^2.0.0"
1364 | }
1365 | },
1366 | "des.js": {
1367 | "version": "1.0.0",
1368 | "resolved": "http://registry.npm.taobao.org/des.js/download/des.js-1.0.0.tgz",
1369 | "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
1370 | "dev": true,
1371 | "requires": {
1372 | "inherits": "^2.0.1",
1373 | "minimalistic-assert": "^1.0.0"
1374 | }
1375 | },
1376 | "detective": {
1377 | "version": "5.1.0",
1378 | "resolved": "http://registry.npm.taobao.org/detective/download/detective-5.1.0.tgz",
1379 | "integrity": "sha1-eiDYkjbXszHM6mWDLnEjtVUbt8s=",
1380 | "dev": true,
1381 | "requires": {
1382 | "acorn-node": "^1.3.0",
1383 | "defined": "^1.0.0",
1384 | "minimist": "^1.1.1"
1385 | }
1386 | },
1387 | "diffie-hellman": {
1388 | "version": "5.0.3",
1389 | "resolved": "http://registry.npm.taobao.org/diffie-hellman/download/diffie-hellman-5.0.3.tgz",
1390 | "integrity": "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU=",
1391 | "dev": true,
1392 | "requires": {
1393 | "bn.js": "^4.1.0",
1394 | "miller-rabin": "^4.0.0",
1395 | "randombytes": "^2.0.0"
1396 | }
1397 | },
1398 | "domain-browser": {
1399 | "version": "1.2.0",
1400 | "resolved": "http://registry.npm.taobao.org/domain-browser/download/domain-browser-1.2.0.tgz",
1401 | "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=",
1402 | "dev": true
1403 | },
1404 | "duplexer2": {
1405 | "version": "0.1.4",
1406 | "resolved": "http://registry.npm.taobao.org/duplexer2/download/duplexer2-0.1.4.tgz",
1407 | "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
1408 | "dev": true,
1409 | "requires": {
1410 | "readable-stream": "^2.0.2"
1411 | }
1412 | },
1413 | "electron-to-chromium": {
1414 | "version": "1.3.84",
1415 | "resolved": "http://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.84.tgz",
1416 | "integrity": "sha1-LlXfWegY8VCp9htTRx6/Tw/uzGU=",
1417 | "dev": true
1418 | },
1419 | "elliptic": {
1420 | "version": "6.4.1",
1421 | "resolved": "http://registry.npm.taobao.org/elliptic/download/elliptic-6.4.1.tgz",
1422 | "integrity": "sha1-wtC3d2kRuGcixjLDwGxg8vgZk5o=",
1423 | "dev": true,
1424 | "requires": {
1425 | "bn.js": "^4.4.0",
1426 | "brorand": "^1.0.1",
1427 | "hash.js": "^1.0.0",
1428 | "hmac-drbg": "^1.0.0",
1429 | "inherits": "^2.0.1",
1430 | "minimalistic-assert": "^1.0.0",
1431 | "minimalistic-crypto-utils": "^1.0.0"
1432 | }
1433 | },
1434 | "escape-string-regexp": {
1435 | "version": "1.0.5",
1436 | "resolved": "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz",
1437 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
1438 | "dev": true
1439 | },
1440 | "esutils": {
1441 | "version": "2.0.2",
1442 | "resolved": "http://registry.npm.taobao.org/esutils/download/esutils-2.0.2.tgz",
1443 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
1444 | "dev": true
1445 | },
1446 | "events": {
1447 | "version": "2.1.0",
1448 | "resolved": "http://registry.npm.taobao.org/events/download/events-2.1.0.tgz",
1449 | "integrity": "sha1-KpoeGOYQbg6BKqnr1KgZs8KcC6U=",
1450 | "dev": true
1451 | },
1452 | "evp_bytestokey": {
1453 | "version": "1.0.3",
1454 | "resolved": "http://registry.npm.taobao.org/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz",
1455 | "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=",
1456 | "dev": true,
1457 | "requires": {
1458 | "md5.js": "^1.3.4",
1459 | "safe-buffer": "^5.1.1"
1460 | }
1461 | },
1462 | "fs.realpath": {
1463 | "version": "1.0.0",
1464 | "resolved": "http://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz",
1465 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
1466 | "dev": true
1467 | },
1468 | "function-bind": {
1469 | "version": "1.1.1",
1470 | "resolved": "http://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz",
1471 | "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=",
1472 | "dev": true
1473 | },
1474 | "get-assigned-identifiers": {
1475 | "version": "1.2.0",
1476 | "resolved": "http://registry.npm.taobao.org/get-assigned-identifiers/download/get-assigned-identifiers-1.2.0.tgz",
1477 | "integrity": "sha1-bb9BHeZIy6+NkWnrsNLVdhkeL/E=",
1478 | "dev": true
1479 | },
1480 | "glob": {
1481 | "version": "7.1.3",
1482 | "resolved": "http://registry.npm.taobao.org/glob/download/glob-7.1.3.tgz",
1483 | "integrity": "sha1-OWCDLT8VdBCDQtr9OmezMsCWnfE=",
1484 | "dev": true,
1485 | "requires": {
1486 | "fs.realpath": "^1.0.0",
1487 | "inflight": "^1.0.4",
1488 | "inherits": "2",
1489 | "minimatch": "^3.0.4",
1490 | "once": "^1.3.0",
1491 | "path-is-absolute": "^1.0.0"
1492 | }
1493 | },
1494 | "globals": {
1495 | "version": "11.9.0",
1496 | "resolved": "http://registry.npm.taobao.org/globals/download/globals-11.9.0.tgz",
1497 | "integrity": "sha1-veI2gI6YfykHaKk9BlBg145qskk=",
1498 | "dev": true
1499 | },
1500 | "has": {
1501 | "version": "1.0.3",
1502 | "resolved": "http://registry.npm.taobao.org/has/download/has-1.0.3.tgz",
1503 | "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=",
1504 | "dev": true,
1505 | "requires": {
1506 | "function-bind": "^1.1.1"
1507 | }
1508 | },
1509 | "has-flag": {
1510 | "version": "3.0.0",
1511 | "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz",
1512 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
1513 | "dev": true
1514 | },
1515 | "hash-base": {
1516 | "version": "3.0.4",
1517 | "resolved": "http://registry.npm.taobao.org/hash-base/download/hash-base-3.0.4.tgz",
1518 | "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
1519 | "dev": true,
1520 | "requires": {
1521 | "inherits": "^2.0.1",
1522 | "safe-buffer": "^5.0.1"
1523 | }
1524 | },
1525 | "hash.js": {
1526 | "version": "1.1.5",
1527 | "resolved": "http://registry.npm.taobao.org/hash.js/download/hash.js-1.1.5.tgz",
1528 | "integrity": "sha1-44q0uF37HgxA/pJlwOm1SFTCOBI=",
1529 | "dev": true,
1530 | "requires": {
1531 | "inherits": "^2.0.3",
1532 | "minimalistic-assert": "^1.0.1"
1533 | }
1534 | },
1535 | "hmac-drbg": {
1536 | "version": "1.0.1",
1537 | "resolved": "http://registry.npm.taobao.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz",
1538 | "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
1539 | "dev": true,
1540 | "requires": {
1541 | "hash.js": "^1.0.3",
1542 | "minimalistic-assert": "^1.0.0",
1543 | "minimalistic-crypto-utils": "^1.0.1"
1544 | }
1545 | },
1546 | "htmlescape": {
1547 | "version": "1.1.1",
1548 | "resolved": "http://registry.npm.taobao.org/htmlescape/download/htmlescape-1.1.1.tgz",
1549 | "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=",
1550 | "dev": true
1551 | },
1552 | "https-browserify": {
1553 | "version": "1.0.0",
1554 | "resolved": "http://registry.npm.taobao.org/https-browserify/download/https-browserify-1.0.0.tgz",
1555 | "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
1556 | "dev": true
1557 | },
1558 | "ieee754": {
1559 | "version": "1.1.12",
1560 | "resolved": "http://registry.npm.taobao.org/ieee754/download/ieee754-1.1.12.tgz",
1561 | "integrity": "sha1-UL8k5bnIu5ivSWTJQc2wkY2ntgs=",
1562 | "dev": true
1563 | },
1564 | "inflight": {
1565 | "version": "1.0.6",
1566 | "resolved": "http://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz",
1567 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
1568 | "dev": true,
1569 | "requires": {
1570 | "once": "^1.3.0",
1571 | "wrappy": "1"
1572 | }
1573 | },
1574 | "inherits": {
1575 | "version": "2.0.3",
1576 | "resolved": "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz",
1577 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
1578 | "dev": true
1579 | },
1580 | "inline-source-map": {
1581 | "version": "0.6.2",
1582 | "resolved": "http://registry.npm.taobao.org/inline-source-map/download/inline-source-map-0.6.2.tgz",
1583 | "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=",
1584 | "dev": true,
1585 | "requires": {
1586 | "source-map": "~0.5.3"
1587 | }
1588 | },
1589 | "insert-module-globals": {
1590 | "version": "7.2.0",
1591 | "resolved": "http://registry.npm.taobao.org/insert-module-globals/download/insert-module-globals-7.2.0.tgz",
1592 | "integrity": "sha1-7IfltCcoR54ye9XFxxYR3ftHUro=",
1593 | "dev": true,
1594 | "requires": {
1595 | "JSONStream": "^1.0.3",
1596 | "acorn-node": "^1.5.2",
1597 | "combine-source-map": "^0.8.0",
1598 | "concat-stream": "^1.6.1",
1599 | "is-buffer": "^1.1.0",
1600 | "path-is-absolute": "^1.0.1",
1601 | "process": "~0.11.0",
1602 | "through2": "^2.0.0",
1603 | "undeclared-identifiers": "^1.1.2",
1604 | "xtend": "^4.0.0"
1605 | }
1606 | },
1607 | "invariant": {
1608 | "version": "2.2.4",
1609 | "resolved": "http://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz",
1610 | "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=",
1611 | "dev": true,
1612 | "requires": {
1613 | "loose-envify": "^1.0.0"
1614 | }
1615 | },
1616 | "is-buffer": {
1617 | "version": "1.1.6",
1618 | "resolved": "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz",
1619 | "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
1620 | "dev": true
1621 | },
1622 | "is-windows": {
1623 | "version": "1.0.2",
1624 | "resolved": "http://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz",
1625 | "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=",
1626 | "dev": true
1627 | },
1628 | "isarray": {
1629 | "version": "1.0.0",
1630 | "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz",
1631 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
1632 | "dev": true
1633 | },
1634 | "isexe": {
1635 | "version": "2.0.0",
1636 | "resolved": "http://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz",
1637 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
1638 | "dev": true
1639 | },
1640 | "js-levenshtein": {
1641 | "version": "1.1.4",
1642 | "resolved": "http://registry.npm.taobao.org/js-levenshtein/download/js-levenshtein-1.1.4.tgz",
1643 | "integrity": "sha1-Olbjy/WJygCB6yLNm6CxKQoW0m4=",
1644 | "dev": true
1645 | },
1646 | "js-tokens": {
1647 | "version": "4.0.0",
1648 | "resolved": "http://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz",
1649 | "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=",
1650 | "dev": true
1651 | },
1652 | "jsesc": {
1653 | "version": "2.5.2",
1654 | "resolved": "http://registry.npm.taobao.org/jsesc/download/jsesc-2.5.2.tgz",
1655 | "integrity": "sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q=",
1656 | "dev": true
1657 | },
1658 | "json-stable-stringify": {
1659 | "version": "0.0.1",
1660 | "resolved": "http://registry.npm.taobao.org/json-stable-stringify/download/json-stable-stringify-0.0.1.tgz",
1661 | "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=",
1662 | "dev": true,
1663 | "requires": {
1664 | "jsonify": "~0.0.0"
1665 | }
1666 | },
1667 | "json5": {
1668 | "version": "2.1.0",
1669 | "resolved": "http://registry.npm.taobao.org/json5/download/json5-2.1.0.tgz",
1670 | "integrity": "sha1-56DGLEgoXGKNIKELhcibuAfDKFA=",
1671 | "dev": true,
1672 | "requires": {
1673 | "minimist": "^1.2.0"
1674 | }
1675 | },
1676 | "jsonify": {
1677 | "version": "0.0.0",
1678 | "resolved": "http://registry.npm.taobao.org/jsonify/download/jsonify-0.0.0.tgz",
1679 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
1680 | "dev": true
1681 | },
1682 | "jsonparse": {
1683 | "version": "1.3.1",
1684 | "resolved": "http://registry.npm.taobao.org/jsonparse/download/jsonparse-1.3.1.tgz",
1685 | "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
1686 | "dev": true
1687 | },
1688 | "labeled-stream-splicer": {
1689 | "version": "2.0.1",
1690 | "resolved": "http://registry.npm.taobao.org/labeled-stream-splicer/download/labeled-stream-splicer-2.0.1.tgz",
1691 | "integrity": "sha1-nP+jL9meFhL9HYao25YkFtUpKSY=",
1692 | "dev": true,
1693 | "requires": {
1694 | "inherits": "^2.0.1",
1695 | "isarray": "^2.0.4",
1696 | "stream-splicer": "^2.0.0"
1697 | },
1698 | "dependencies": {
1699 | "isarray": {
1700 | "version": "2.0.4",
1701 | "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-2.0.4.tgz",
1702 | "integrity": "sha1-OOe8uw87obeTPIa6GJTd/DeBu7c=",
1703 | "dev": true
1704 | }
1705 | }
1706 | },
1707 | "lodash": {
1708 | "version": "4.17.11",
1709 | "resolved": "http://registry.npm.taobao.org/lodash/download/lodash-4.17.11.tgz",
1710 | "integrity": "sha1-s56mIp72B+zYniyN8SU2iRysm40=",
1711 | "dev": true
1712 | },
1713 | "lodash.memoize": {
1714 | "version": "3.0.4",
1715 | "resolved": "http://registry.npm.taobao.org/lodash.memoize/download/lodash.memoize-3.0.4.tgz",
1716 | "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=",
1717 | "dev": true
1718 | },
1719 | "log-symbols": {
1720 | "version": "2.2.0",
1721 | "resolved": "http://registry.npm.taobao.org/log-symbols/download/log-symbols-2.2.0.tgz",
1722 | "integrity": "sha1-V0Dhxdbw39pK2TI7UzIQfva0xAo=",
1723 | "dev": true,
1724 | "requires": {
1725 | "chalk": "^2.0.1"
1726 | }
1727 | },
1728 | "loose-envify": {
1729 | "version": "1.4.0",
1730 | "resolved": "http://registry.npm.taobao.org/loose-envify/download/loose-envify-1.4.0.tgz",
1731 | "integrity": "sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=",
1732 | "dev": true,
1733 | "requires": {
1734 | "js-tokens": "^3.0.0 || ^4.0.0"
1735 | }
1736 | },
1737 | "md5.js": {
1738 | "version": "1.3.5",
1739 | "resolved": "http://registry.npm.taobao.org/md5.js/download/md5.js-1.3.5.tgz",
1740 | "integrity": "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8=",
1741 | "dev": true,
1742 | "requires": {
1743 | "hash-base": "^3.0.0",
1744 | "inherits": "^2.0.1",
1745 | "safe-buffer": "^5.1.2"
1746 | }
1747 | },
1748 | "miller-rabin": {
1749 | "version": "4.0.1",
1750 | "resolved": "http://registry.npm.taobao.org/miller-rabin/download/miller-rabin-4.0.1.tgz",
1751 | "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=",
1752 | "dev": true,
1753 | "requires": {
1754 | "bn.js": "^4.0.0",
1755 | "brorand": "^1.0.1"
1756 | }
1757 | },
1758 | "mimic-fn": {
1759 | "version": "1.2.0",
1760 | "resolved": "http://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz",
1761 | "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=",
1762 | "dev": true
1763 | },
1764 | "minimalistic-assert": {
1765 | "version": "1.0.1",
1766 | "resolved": "http://registry.npm.taobao.org/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz",
1767 | "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=",
1768 | "dev": true
1769 | },
1770 | "minimalistic-crypto-utils": {
1771 | "version": "1.0.1",
1772 | "resolved": "http://registry.npm.taobao.org/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz",
1773 | "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
1774 | "dev": true
1775 | },
1776 | "minimatch": {
1777 | "version": "3.0.4",
1778 | "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz",
1779 | "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
1780 | "dev": true,
1781 | "requires": {
1782 | "brace-expansion": "^1.1.7"
1783 | }
1784 | },
1785 | "minimist": {
1786 | "version": "1.2.0",
1787 | "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz",
1788 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
1789 | "dev": true
1790 | },
1791 | "mkdirp": {
1792 | "version": "0.5.1",
1793 | "resolved": "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz",
1794 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
1795 | "dev": true,
1796 | "requires": {
1797 | "minimist": "0.0.8"
1798 | },
1799 | "dependencies": {
1800 | "minimist": {
1801 | "version": "0.0.8",
1802 | "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz",
1803 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
1804 | "dev": true
1805 | }
1806 | }
1807 | },
1808 | "module-deps": {
1809 | "version": "6.2.0",
1810 | "resolved": "http://registry.npm.taobao.org/module-deps/download/module-deps-6.2.0.tgz",
1811 | "integrity": "sha1-1BoueQJFzjGRceTnxNjHOZO6PNU=",
1812 | "dev": true,
1813 | "requires": {
1814 | "JSONStream": "^1.0.3",
1815 | "browser-resolve": "^1.7.0",
1816 | "cached-path-relative": "^1.0.0",
1817 | "concat-stream": "~1.6.0",
1818 | "defined": "^1.0.0",
1819 | "detective": "^5.0.2",
1820 | "duplexer2": "^0.1.2",
1821 | "inherits": "^2.0.1",
1822 | "parents": "^1.0.0",
1823 | "readable-stream": "^2.0.2",
1824 | "resolve": "^1.4.0",
1825 | "stream-combiner2": "^1.1.1",
1826 | "subarg": "^1.0.0",
1827 | "through2": "^2.0.0",
1828 | "xtend": "^4.0.0"
1829 | }
1830 | },
1831 | "ms": {
1832 | "version": "2.1.1",
1833 | "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz",
1834 | "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=",
1835 | "dev": true
1836 | },
1837 | "nice-try": {
1838 | "version": "1.0.5",
1839 | "resolved": "http://registry.npm.taobao.org/nice-try/download/nice-try-1.0.5.tgz",
1840 | "integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=",
1841 | "dev": true
1842 | },
1843 | "node-releases": {
1844 | "version": "1.0.3",
1845 | "resolved": "http://registry.npm.taobao.org/node-releases/download/node-releases-1.0.3.tgz",
1846 | "integrity": "sha1-NBTthFlQlkWcJRaZv8tH2IMkqeQ=",
1847 | "dev": true,
1848 | "requires": {
1849 | "semver": "^5.3.0"
1850 | }
1851 | },
1852 | "once": {
1853 | "version": "1.4.0",
1854 | "resolved": "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz",
1855 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
1856 | "dev": true,
1857 | "requires": {
1858 | "wrappy": "1"
1859 | }
1860 | },
1861 | "onetime": {
1862 | "version": "2.0.1",
1863 | "resolved": "http://registry.npm.taobao.org/onetime/download/onetime-2.0.1.tgz",
1864 | "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
1865 | "dev": true,
1866 | "requires": {
1867 | "mimic-fn": "^1.0.0"
1868 | }
1869 | },
1870 | "ora": {
1871 | "version": "3.0.0",
1872 | "resolved": "http://registry.npm.taobao.org/ora/download/ora-3.0.0.tgz",
1873 | "integrity": "sha1-gXnjUluar9mSQtY8wgb9ZHMnQdA=",
1874 | "dev": true,
1875 | "requires": {
1876 | "chalk": "^2.3.1",
1877 | "cli-cursor": "^2.1.0",
1878 | "cli-spinners": "^1.1.0",
1879 | "log-symbols": "^2.2.0",
1880 | "strip-ansi": "^4.0.0",
1881 | "wcwidth": "^1.0.1"
1882 | }
1883 | },
1884 | "os-browserify": {
1885 | "version": "0.3.0",
1886 | "resolved": "http://registry.npm.taobao.org/os-browserify/download/os-browserify-0.3.0.tgz",
1887 | "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
1888 | "dev": true
1889 | },
1890 | "pako": {
1891 | "version": "1.0.6",
1892 | "resolved": "http://registry.npm.taobao.org/pako/download/pako-1.0.6.tgz",
1893 | "integrity": "sha1-AQEhG6pwxLykoPY/Igbpe3368lg=",
1894 | "dev": true
1895 | },
1896 | "parents": {
1897 | "version": "1.0.1",
1898 | "resolved": "http://registry.npm.taobao.org/parents/download/parents-1.0.1.tgz",
1899 | "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=",
1900 | "dev": true,
1901 | "requires": {
1902 | "path-platform": "~0.11.15"
1903 | }
1904 | },
1905 | "parse-asn1": {
1906 | "version": "5.1.1",
1907 | "resolved": "http://registry.npm.taobao.org/parse-asn1/download/parse-asn1-5.1.1.tgz",
1908 | "integrity": "sha1-9r8pOBgzK9DatU77Fgh3JHRebKg=",
1909 | "dev": true,
1910 | "requires": {
1911 | "asn1.js": "^4.0.0",
1912 | "browserify-aes": "^1.0.0",
1913 | "create-hash": "^1.1.0",
1914 | "evp_bytestokey": "^1.0.0",
1915 | "pbkdf2": "^3.0.3"
1916 | }
1917 | },
1918 | "path-browserify": {
1919 | "version": "0.0.1",
1920 | "resolved": "http://registry.npm.taobao.org/path-browserify/download/path-browserify-0.0.1.tgz",
1921 | "integrity": "sha1-5sTd1+06onxoogzE5Q4aTug7vEo=",
1922 | "dev": true
1923 | },
1924 | "path-is-absolute": {
1925 | "version": "1.0.1",
1926 | "resolved": "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz",
1927 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
1928 | "dev": true
1929 | },
1930 | "path-key": {
1931 | "version": "2.0.1",
1932 | "resolved": "http://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz",
1933 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
1934 | "dev": true
1935 | },
1936 | "path-parse": {
1937 | "version": "1.0.6",
1938 | "resolved": "http://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz",
1939 | "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=",
1940 | "dev": true
1941 | },
1942 | "path-platform": {
1943 | "version": "0.11.15",
1944 | "resolved": "http://registry.npm.taobao.org/path-platform/download/path-platform-0.11.15.tgz",
1945 | "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=",
1946 | "dev": true
1947 | },
1948 | "pbkdf2": {
1949 | "version": "3.0.17",
1950 | "resolved": "http://registry.npm.taobao.org/pbkdf2/download/pbkdf2-3.0.17.tgz",
1951 | "integrity": "sha1-l2wgZTBhexTrsyEUI597CTNuk6Y=",
1952 | "dev": true,
1953 | "requires": {
1954 | "create-hash": "^1.1.2",
1955 | "create-hmac": "^1.1.4",
1956 | "ripemd160": "^2.0.1",
1957 | "safe-buffer": "^5.0.1",
1958 | "sha.js": "^2.4.8"
1959 | }
1960 | },
1961 | "private": {
1962 | "version": "0.1.8",
1963 | "resolved": "http://registry.npm.taobao.org/private/download/private-0.1.8.tgz",
1964 | "integrity": "sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8=",
1965 | "dev": true
1966 | },
1967 | "process": {
1968 | "version": "0.11.10",
1969 | "resolved": "http://registry.npm.taobao.org/process/download/process-0.11.10.tgz",
1970 | "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
1971 | "dev": true
1972 | },
1973 | "process-nextick-args": {
1974 | "version": "2.0.0",
1975 | "resolved": "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.0.tgz",
1976 | "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=",
1977 | "dev": true
1978 | },
1979 | "public-encrypt": {
1980 | "version": "4.0.3",
1981 | "resolved": "http://registry.npm.taobao.org/public-encrypt/download/public-encrypt-4.0.3.tgz",
1982 | "integrity": "sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA=",
1983 | "dev": true,
1984 | "requires": {
1985 | "bn.js": "^4.1.0",
1986 | "browserify-rsa": "^4.0.0",
1987 | "create-hash": "^1.1.0",
1988 | "parse-asn1": "^5.0.0",
1989 | "randombytes": "^2.0.1",
1990 | "safe-buffer": "^5.1.2"
1991 | }
1992 | },
1993 | "punycode": {
1994 | "version": "1.4.1",
1995 | "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz",
1996 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
1997 | "dev": true
1998 | },
1999 | "querystring": {
2000 | "version": "0.2.0",
2001 | "resolved": "http://registry.npm.taobao.org/querystring/download/querystring-0.2.0.tgz",
2002 | "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
2003 | "dev": true
2004 | },
2005 | "querystring-es3": {
2006 | "version": "0.2.1",
2007 | "resolved": "http://registry.npm.taobao.org/querystring-es3/download/querystring-es3-0.2.1.tgz",
2008 | "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
2009 | "dev": true
2010 | },
2011 | "randombytes": {
2012 | "version": "2.0.6",
2013 | "resolved": "http://registry.npm.taobao.org/randombytes/download/randombytes-2.0.6.tgz",
2014 | "integrity": "sha1-0wLFIpSFiISKjTAMkytEwkIx2oA=",
2015 | "dev": true,
2016 | "requires": {
2017 | "safe-buffer": "^5.1.0"
2018 | }
2019 | },
2020 | "randomfill": {
2021 | "version": "1.0.4",
2022 | "resolved": "http://registry.npm.taobao.org/randomfill/download/randomfill-1.0.4.tgz",
2023 | "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=",
2024 | "dev": true,
2025 | "requires": {
2026 | "randombytes": "^2.0.5",
2027 | "safe-buffer": "^5.1.0"
2028 | }
2029 | },
2030 | "read-only-stream": {
2031 | "version": "2.0.0",
2032 | "resolved": "http://registry.npm.taobao.org/read-only-stream/download/read-only-stream-2.0.0.tgz",
2033 | "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=",
2034 | "dev": true,
2035 | "requires": {
2036 | "readable-stream": "^2.0.2"
2037 | }
2038 | },
2039 | "readable-stream": {
2040 | "version": "2.3.6",
2041 | "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.6.tgz",
2042 | "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=",
2043 | "dev": true,
2044 | "requires": {
2045 | "core-util-is": "~1.0.0",
2046 | "inherits": "~2.0.3",
2047 | "isarray": "~1.0.0",
2048 | "process-nextick-args": "~2.0.0",
2049 | "safe-buffer": "~5.1.1",
2050 | "string_decoder": "~1.1.1",
2051 | "util-deprecate": "~1.0.1"
2052 | }
2053 | },
2054 | "regenerate": {
2055 | "version": "1.4.0",
2056 | "resolved": "http://registry.npm.taobao.org/regenerate/download/regenerate-1.4.0.tgz",
2057 | "integrity": "sha1-SoVuxLVuQHfFV1icroXnpMiGmhE=",
2058 | "dev": true
2059 | },
2060 | "regenerate-unicode-properties": {
2061 | "version": "7.0.0",
2062 | "resolved": "http://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-7.0.0.tgz",
2063 | "integrity": "sha1-EHQFr8xKGQ7F7UUOyqAO0Mr6ekw=",
2064 | "dev": true,
2065 | "requires": {
2066 | "regenerate": "^1.4.0"
2067 | }
2068 | },
2069 | "regenerator-runtime": {
2070 | "version": "0.12.1",
2071 | "resolved": "http://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.12.1.tgz",
2072 | "integrity": "sha1-+hpxVEdkwDb4xJsToIsllMn4oN4=",
2073 | "dev": true
2074 | },
2075 | "regenerator-transform": {
2076 | "version": "0.13.3",
2077 | "resolved": "http://registry.npm.taobao.org/regenerator-transform/download/regenerator-transform-0.13.3.tgz",
2078 | "integrity": "sha1-JkvZ/zioziSwbgY2SWsshWtXvLs=",
2079 | "dev": true,
2080 | "requires": {
2081 | "private": "^0.1.6"
2082 | }
2083 | },
2084 | "regexpu-core": {
2085 | "version": "4.2.0",
2086 | "resolved": "http://registry.npm.taobao.org/regexpu-core/download/regexpu-core-4.2.0.tgz",
2087 | "integrity": "sha1-o3RPoDgGz/4UbepEIaPnO9zEex0=",
2088 | "dev": true,
2089 | "requires": {
2090 | "regenerate": "^1.4.0",
2091 | "regenerate-unicode-properties": "^7.0.0",
2092 | "regjsgen": "^0.4.0",
2093 | "regjsparser": "^0.3.0",
2094 | "unicode-match-property-ecmascript": "^1.0.4",
2095 | "unicode-match-property-value-ecmascript": "^1.0.2"
2096 | }
2097 | },
2098 | "regjsgen": {
2099 | "version": "0.4.0",
2100 | "resolved": "http://registry.npm.taobao.org/regjsgen/download/regjsgen-0.4.0.tgz",
2101 | "integrity": "sha1-wetMiaIJJj+HF8eCWRUjkT7eJWE=",
2102 | "dev": true
2103 | },
2104 | "regjsparser": {
2105 | "version": "0.3.0",
2106 | "resolved": "http://registry.npm.taobao.org/regjsparser/download/regjsparser-0.3.0.tgz",
2107 | "integrity": "sha1-PDJtp/z9afoNMyV1pByMDN9YjJY=",
2108 | "dev": true,
2109 | "requires": {
2110 | "jsesc": "~0.5.0"
2111 | },
2112 | "dependencies": {
2113 | "jsesc": {
2114 | "version": "0.5.0",
2115 | "resolved": "http://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz",
2116 | "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
2117 | "dev": true
2118 | }
2119 | }
2120 | },
2121 | "resolve": {
2122 | "version": "1.8.1",
2123 | "resolved": "http://registry.npm.taobao.org/resolve/download/resolve-1.8.1.tgz",
2124 | "integrity": "sha1-gvHsGaQjrB+9CAsLqwa6NuhKeiY=",
2125 | "dev": true,
2126 | "requires": {
2127 | "path-parse": "^1.0.5"
2128 | }
2129 | },
2130 | "restore-cursor": {
2131 | "version": "2.0.0",
2132 | "resolved": "http://registry.npm.taobao.org/restore-cursor/download/restore-cursor-2.0.0.tgz",
2133 | "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
2134 | "dev": true,
2135 | "requires": {
2136 | "onetime": "^2.0.0",
2137 | "signal-exit": "^3.0.2"
2138 | }
2139 | },
2140 | "ripemd160": {
2141 | "version": "2.0.2",
2142 | "resolved": "http://registry.npm.taobao.org/ripemd160/download/ripemd160-2.0.2.tgz",
2143 | "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=",
2144 | "dev": true,
2145 | "requires": {
2146 | "hash-base": "^3.0.0",
2147 | "inherits": "^2.0.1"
2148 | }
2149 | },
2150 | "safe-buffer": {
2151 | "version": "5.1.2",
2152 | "resolved": "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz",
2153 | "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=",
2154 | "dev": true
2155 | },
2156 | "safer-buffer": {
2157 | "version": "2.1.2",
2158 | "resolved": "http://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz",
2159 | "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=",
2160 | "dev": true
2161 | },
2162 | "semver": {
2163 | "version": "5.6.0",
2164 | "resolved": "http://registry.npm.taobao.org/semver/download/semver-5.6.0.tgz",
2165 | "integrity": "sha1-fnQlb7qknHWqfHogXMInmcrIAAQ=",
2166 | "dev": true
2167 | },
2168 | "sha.js": {
2169 | "version": "2.4.11",
2170 | "resolved": "http://registry.npm.taobao.org/sha.js/download/sha.js-2.4.11.tgz",
2171 | "integrity": "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc=",
2172 | "dev": true,
2173 | "requires": {
2174 | "inherits": "^2.0.1",
2175 | "safe-buffer": "^5.0.1"
2176 | }
2177 | },
2178 | "shasum": {
2179 | "version": "1.0.2",
2180 | "resolved": "http://registry.npm.taobao.org/shasum/download/shasum-1.0.2.tgz",
2181 | "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=",
2182 | "dev": true,
2183 | "requires": {
2184 | "json-stable-stringify": "~0.0.0",
2185 | "sha.js": "~2.4.4"
2186 | }
2187 | },
2188 | "shebang-command": {
2189 | "version": "1.2.0",
2190 | "resolved": "http://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz",
2191 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
2192 | "dev": true,
2193 | "requires": {
2194 | "shebang-regex": "^1.0.0"
2195 | }
2196 | },
2197 | "shebang-regex": {
2198 | "version": "1.0.0",
2199 | "resolved": "http://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz",
2200 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
2201 | "dev": true
2202 | },
2203 | "shell-quote": {
2204 | "version": "1.6.1",
2205 | "resolved": "http://registry.npm.taobao.org/shell-quote/download/shell-quote-1.6.1.tgz",
2206 | "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=",
2207 | "dev": true,
2208 | "requires": {
2209 | "array-filter": "~0.0.0",
2210 | "array-map": "~0.0.0",
2211 | "array-reduce": "~0.0.0",
2212 | "jsonify": "~0.0.0"
2213 | }
2214 | },
2215 | "signal-exit": {
2216 | "version": "3.0.2",
2217 | "resolved": "http://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz",
2218 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
2219 | "dev": true
2220 | },
2221 | "simple-concat": {
2222 | "version": "1.0.0",
2223 | "resolved": "http://registry.npm.taobao.org/simple-concat/download/simple-concat-1.0.0.tgz",
2224 | "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=",
2225 | "dev": true
2226 | },
2227 | "source-map": {
2228 | "version": "0.5.7",
2229 | "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
2230 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
2231 | "dev": true
2232 | },
2233 | "ssh2": {
2234 | "version": "0.6.1",
2235 | "resolved": "http://registry.npm.taobao.org/ssh2/download/ssh2-0.6.1.tgz",
2236 | "integrity": "sha1-Xd4ac5S7l4sfnC8BSv/uL1STvUA=",
2237 | "dev": true,
2238 | "requires": {
2239 | "ssh2-streams": "~0.2.0"
2240 | }
2241 | },
2242 | "ssh2-streams": {
2243 | "version": "0.2.1",
2244 | "resolved": "http://registry.npm.taobao.org/ssh2-streams/download/ssh2-streams-0.2.1.tgz",
2245 | "integrity": "sha1-nJyZZL5g6WRFda8yhnf2Sx5cvXk=",
2246 | "dev": true,
2247 | "requires": {
2248 | "asn1": "~0.2.0",
2249 | "semver": "^5.1.0",
2250 | "streamsearch": "~0.1.2"
2251 | }
2252 | },
2253 | "stream-browserify": {
2254 | "version": "2.0.1",
2255 | "resolved": "http://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.1.tgz",
2256 | "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
2257 | "dev": true,
2258 | "requires": {
2259 | "inherits": "~2.0.1",
2260 | "readable-stream": "^2.0.2"
2261 | }
2262 | },
2263 | "stream-combiner2": {
2264 | "version": "1.1.1",
2265 | "resolved": "http://registry.npm.taobao.org/stream-combiner2/download/stream-combiner2-1.1.1.tgz",
2266 | "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=",
2267 | "dev": true,
2268 | "requires": {
2269 | "duplexer2": "~0.1.0",
2270 | "readable-stream": "^2.0.2"
2271 | }
2272 | },
2273 | "stream-http": {
2274 | "version": "2.8.3",
2275 | "resolved": "http://registry.npm.taobao.org/stream-http/download/stream-http-2.8.3.tgz",
2276 | "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=",
2277 | "dev": true,
2278 | "requires": {
2279 | "builtin-status-codes": "^3.0.0",
2280 | "inherits": "^2.0.1",
2281 | "readable-stream": "^2.3.6",
2282 | "to-arraybuffer": "^1.0.0",
2283 | "xtend": "^4.0.0"
2284 | }
2285 | },
2286 | "stream-splicer": {
2287 | "version": "2.0.0",
2288 | "resolved": "http://registry.npm.taobao.org/stream-splicer/download/stream-splicer-2.0.0.tgz",
2289 | "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=",
2290 | "dev": true,
2291 | "requires": {
2292 | "inherits": "^2.0.1",
2293 | "readable-stream": "^2.0.2"
2294 | }
2295 | },
2296 | "streamsearch": {
2297 | "version": "0.1.2",
2298 | "resolved": "http://registry.npm.taobao.org/streamsearch/download/streamsearch-0.1.2.tgz",
2299 | "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=",
2300 | "dev": true
2301 | },
2302 | "string_decoder": {
2303 | "version": "1.1.1",
2304 | "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz",
2305 | "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=",
2306 | "dev": true,
2307 | "requires": {
2308 | "safe-buffer": "~5.1.0"
2309 | }
2310 | },
2311 | "strip-ansi": {
2312 | "version": "4.0.0",
2313 | "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz",
2314 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
2315 | "dev": true,
2316 | "requires": {
2317 | "ansi-regex": "^3.0.0"
2318 | }
2319 | },
2320 | "subarg": {
2321 | "version": "1.0.0",
2322 | "resolved": "http://registry.npm.taobao.org/subarg/download/subarg-1.0.0.tgz",
2323 | "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=",
2324 | "dev": true,
2325 | "requires": {
2326 | "minimist": "^1.1.0"
2327 | }
2328 | },
2329 | "supports-color": {
2330 | "version": "5.5.0",
2331 | "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz",
2332 | "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
2333 | "dev": true,
2334 | "requires": {
2335 | "has-flag": "^3.0.0"
2336 | }
2337 | },
2338 | "syntax-error": {
2339 | "version": "1.4.0",
2340 | "resolved": "http://registry.npm.taobao.org/syntax-error/download/syntax-error-1.4.0.tgz",
2341 | "integrity": "sha1-LZ1P9cBkrLcRWUo+O5UFStUdkHw=",
2342 | "dev": true,
2343 | "requires": {
2344 | "acorn-node": "^1.2.0"
2345 | }
2346 | },
2347 | "through": {
2348 | "version": "2.3.8",
2349 | "resolved": "http://registry.npm.taobao.org/through/download/through-2.3.8.tgz",
2350 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
2351 | "dev": true
2352 | },
2353 | "through2": {
2354 | "version": "2.0.5",
2355 | "resolved": "http://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz",
2356 | "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=",
2357 | "dev": true,
2358 | "requires": {
2359 | "readable-stream": "~2.3.6",
2360 | "xtend": "~4.0.1"
2361 | }
2362 | },
2363 | "timers-browserify": {
2364 | "version": "1.4.2",
2365 | "resolved": "http://registry.npm.taobao.org/timers-browserify/download/timers-browserify-1.4.2.tgz",
2366 | "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=",
2367 | "dev": true,
2368 | "requires": {
2369 | "process": "~0.11.0"
2370 | }
2371 | },
2372 | "to-arraybuffer": {
2373 | "version": "1.0.1",
2374 | "resolved": "http://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz",
2375 | "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
2376 | "dev": true
2377 | },
2378 | "to-fast-properties": {
2379 | "version": "2.0.0",
2380 | "resolved": "http://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz",
2381 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
2382 | "dev": true
2383 | },
2384 | "trim-right": {
2385 | "version": "1.0.1",
2386 | "resolved": "http://registry.npm.taobao.org/trim-right/download/trim-right-1.0.1.tgz",
2387 | "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
2388 | "dev": true
2389 | },
2390 | "tty-browserify": {
2391 | "version": "0.0.1",
2392 | "resolved": "http://registry.npm.taobao.org/tty-browserify/download/tty-browserify-0.0.1.tgz",
2393 | "integrity": "sha1-PwUlHuF5BN/QZ3VGZw25ZRaCuBE=",
2394 | "dev": true
2395 | },
2396 | "typedarray": {
2397 | "version": "0.0.6",
2398 | "resolved": "http://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz",
2399 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
2400 | "dev": true
2401 | },
2402 | "uglify-js": {
2403 | "version": "3.4.9",
2404 | "resolved": "http://registry.npm.taobao.org/uglify-js/download/uglify-js-3.4.9.tgz",
2405 | "integrity": "sha1-rwLxgMEgfXZDLkc+0koo9KeCuuM=",
2406 | "dev": true,
2407 | "requires": {
2408 | "commander": "~2.17.1",
2409 | "source-map": "~0.6.1"
2410 | },
2411 | "dependencies": {
2412 | "source-map": {
2413 | "version": "0.6.1",
2414 | "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
2415 | "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
2416 | "dev": true
2417 | }
2418 | }
2419 | },
2420 | "umd": {
2421 | "version": "3.0.3",
2422 | "resolved": "http://registry.npm.taobao.org/umd/download/umd-3.0.3.tgz",
2423 | "integrity": "sha1-qp/mU8QrkJdnhInAEACstp8LJs8=",
2424 | "dev": true
2425 | },
2426 | "undeclared-identifiers": {
2427 | "version": "1.1.2",
2428 | "resolved": "http://registry.npm.taobao.org/undeclared-identifiers/download/undeclared-identifiers-1.1.2.tgz",
2429 | "integrity": "sha1-fYUKmIh8/0vQv2SZnAFNCO1tGsw=",
2430 | "dev": true,
2431 | "requires": {
2432 | "acorn-node": "^1.3.0",
2433 | "get-assigned-identifiers": "^1.2.0",
2434 | "simple-concat": "^1.0.0",
2435 | "xtend": "^4.0.1"
2436 | }
2437 | },
2438 | "unicode-canonical-property-names-ecmascript": {
2439 | "version": "1.0.4",
2440 | "resolved": "http://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
2441 | "integrity": "sha1-JhmADEyCWADv3YNDr33Zkzy+KBg=",
2442 | "dev": true
2443 | },
2444 | "unicode-match-property-ecmascript": {
2445 | "version": "1.0.4",
2446 | "resolved": "http://registry.npm.taobao.org/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-1.0.4.tgz",
2447 | "integrity": "sha1-jtKjJWmWG86SJ9Cc0/+7j+1fAgw=",
2448 | "dev": true,
2449 | "requires": {
2450 | "unicode-canonical-property-names-ecmascript": "^1.0.4",
2451 | "unicode-property-aliases-ecmascript": "^1.0.4"
2452 | }
2453 | },
2454 | "unicode-match-property-value-ecmascript": {
2455 | "version": "1.0.2",
2456 | "resolved": "http://registry.npm.taobao.org/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-1.0.2.tgz",
2457 | "integrity": "sha1-nx3HaSbWzPRSMQVk/YNKzgWWY9Q=",
2458 | "dev": true
2459 | },
2460 | "unicode-property-aliases-ecmascript": {
2461 | "version": "1.0.4",
2462 | "resolved": "http://registry.npm.taobao.org/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-1.0.4.tgz",
2463 | "integrity": "sha1-WlM/MbQxfqdvF9gH+g0RZUYRHdA=",
2464 | "dev": true
2465 | },
2466 | "url": {
2467 | "version": "0.11.0",
2468 | "resolved": "http://registry.npm.taobao.org/url/download/url-0.11.0.tgz",
2469 | "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
2470 | "dev": true,
2471 | "requires": {
2472 | "punycode": "1.3.2",
2473 | "querystring": "0.2.0"
2474 | },
2475 | "dependencies": {
2476 | "punycode": {
2477 | "version": "1.3.2",
2478 | "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-1.3.2.tgz",
2479 | "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
2480 | "dev": true
2481 | }
2482 | }
2483 | },
2484 | "util": {
2485 | "version": "0.10.4",
2486 | "resolved": "http://registry.npm.taobao.org/util/download/util-0.10.4.tgz",
2487 | "integrity": "sha1-OqASW/5mikZy3liFfTrOJ+y3aQE=",
2488 | "dev": true,
2489 | "requires": {
2490 | "inherits": "2.0.3"
2491 | }
2492 | },
2493 | "util-deprecate": {
2494 | "version": "1.0.2",
2495 | "resolved": "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz",
2496 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
2497 | "dev": true
2498 | },
2499 | "vm-browserify": {
2500 | "version": "1.1.0",
2501 | "resolved": "http://registry.npm.taobao.org/vm-browserify/download/vm-browserify-1.1.0.tgz",
2502 | "integrity": "sha1-vXbWojMj4sqP+hICjcBFWcdfkBk=",
2503 | "dev": true
2504 | },
2505 | "wcwidth": {
2506 | "version": "1.0.1",
2507 | "resolved": "http://registry.npm.taobao.org/wcwidth/download/wcwidth-1.0.1.tgz",
2508 | "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
2509 | "dev": true,
2510 | "requires": {
2511 | "defaults": "^1.0.3"
2512 | }
2513 | },
2514 | "which": {
2515 | "version": "1.3.1",
2516 | "resolved": "http://registry.npm.taobao.org/which/download/which-1.3.1.tgz",
2517 | "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=",
2518 | "dev": true,
2519 | "requires": {
2520 | "isexe": "^2.0.0"
2521 | }
2522 | },
2523 | "wrappy": {
2524 | "version": "1.0.2",
2525 | "resolved": "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz",
2526 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
2527 | "dev": true
2528 | },
2529 | "xtend": {
2530 | "version": "4.0.1",
2531 | "resolved": "http://registry.npm.taobao.org/xtend/download/xtend-4.0.1.tgz",
2532 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
2533 | "dev": true
2534 | }
2535 | }
2536 | }
2537 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "bigdata-sdk",
3 | "version": "1.0.0",
4 | "description": "大数据h5采集sdk",
5 | "main": "./dist/bigdata-sdk.min.js",
6 | "scripts": {
7 | "build-test": "cp -f ./src/config/test.js ./src/config/index.js && node ./build.js > ./dist/bigdata-sdk.test.js && cross-env MINIFY=1 node ./build.js > ./dist/bigdata-sdk.test.min.js",
8 | "build": "cp -f ./src/config/prod.js ./src/config/index.js && node ./build.js > ./dist/bigdata-sdk.js && cross-env MINIFY=1 node ./build.js > ./dist/bigdata-sdk.min.js",
9 | "deploySit": "node scripts/deploy.js --sit"
10 | },
11 | "keywords": [
12 | "bigdata",
13 | "sdk"
14 | ],
15 | "author": "BillionChen",
16 | "license": "MIT",
17 | "devDependencies": {
18 | "@babel/core": "^7.1.2",
19 | "@babel/plugin-transform-object-assign": "^7.0.0",
20 | "@babel/plugin-transform-runtime": "^7.1.0",
21 | "@babel/preset-env": "^7.1.0",
22 | "@babel/runtime": "^7.1.2",
23 | "babelify": "^10.0.0",
24 | "browserify": "^16.2.3",
25 | "cross-env": "^5.2.0",
26 | "cross-spawn": "^6.0.5",
27 | "glob": "^7.1.3",
28 | "ora": "^3.0.0",
29 | "ssh2": "^0.6.1",
30 | "uglify-js": "^3.4.9"
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/scripts/config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | sit: {
3 | // 服务器文件路径
4 | remotePath: '',
5 | username: '',
6 | password: '',
7 | host: '',
8 | port: 22
9 | },
10 | uat: {
11 | remotePath: '',
12 | username: '',
13 | password: '',
14 | host: '',
15 | port: 22
16 | },
17 | prod: {
18 | remotePath: '',
19 | username: '',
20 | password: '',
21 | host: '',
22 | port: 22
23 | }
24 | };
25 |
--------------------------------------------------------------------------------
/scripts/deploy.js:
--------------------------------------------------------------------------------
1 | const Client = require('ssh2').Client
2 | const spawn = require("cross-spawn")
3 | const path = require('path')
4 | const ora = require('ora');
5 | const glob = require("glob")
6 | const env = process.argv[process.argv.length - 1].replace('--', '')
7 | let config = require('./config.js')[env];
8 | if (!config) {
9 | console.log(`找不到${env}环境用户配置文件`)
10 | return
11 | }
12 | const cwd = path.dirname(__dirname)
13 |
14 | const spinner = ora('开始打包...').start();
15 | const remotePath = config.remotePath
16 |
17 | // const build = spawn('yarn', [`build:${env}`], {
18 | const build = spawn('yarn', [`build-test`], {
19 | cwd: cwd
20 | })
21 | build.on('close', function(code) {
22 | if (code !== 0) {
23 | console.log('打包失败')
24 | spinner.stop()
25 | return
26 | }
27 | spinner.text = "打包完成,开始上传..."
28 | const conn = new Client();
29 | conn.on('ready', function() {
30 | glob('**/*.*',{
31 | cwd: path.join(cwd, 'dist')
32 | }, function (err, files) {
33 | let length = files.length, index = 0
34 | conn.sftp((err, sftp) => {
35 | spinner.stop()
36 | const upload = () => {
37 | const currentFile = files[index++]
38 | if ( !currentFile || index > length ) {
39 | console.log('上传完毕')
40 | conn.end();
41 | return;
42 | }
43 | sftp.fastPut(path.join(cwd,'dist', currentFile), path.join(remotePath, currentFile).replace(/\\/g, '/'), function(err, result){
44 | if (err) {
45 | console.log(err, '出错了')
46 | return
47 | }
48 | console.log(`${currentFile}上传成功`)
49 | upload()
50 | });
51 | }
52 | upload()
53 | })
54 | })
55 |
56 | }).connect({
57 | host: config.host,
58 | port: config.port,
59 | username: config.username,
60 | password: config.password
61 | });
62 | });
--------------------------------------------------------------------------------
/src/config/columns.js:
--------------------------------------------------------------------------------
1 | export default {
2 | uname: "uname", //登陆成功后显示的用户名
3 | uid: "uuid", //登陆ID
4 | uID: "uID", //用户唯一标识
5 | sid: "sessionId",// 会话id
6 | ifLogin: "iflogin", //是否登陆
7 | uonly: "uonly", // 基于设备的唯一标识:由前端js生成,标识设备,不同的设备不一致
8 |
9 | deviceInformation: "deviceInformation", //设备信息
10 | usystem: "system_type", //操作系统
11 | uretion: "uvertion", //系统版本
12 | resolution: "resolution", //分辨率
13 | platform: "uusource", //来源
14 |
15 | eventName: "action_type_name", //事件名称
16 | eventDate: "action_time", //事件发生的时间
17 | userCname: "button_link_name", //按钮名称
18 |
19 | currentUrl: "curr_page_url", //当前页面URL
20 | title: "curr_page_title", //页面标题
21 | referrerUrl: "last_ref", //上一个页面url
22 | referrerTitlt: "last_title", //上一个页面标题
23 | interview: "interview_time", //进入页面的时间
24 |
25 | longitude: "longitude",//经度
26 | latitude: "latitude",//纬度
27 | addr: "addr",//详细地址信息
28 | country: "country",//获取国家
29 | province: "province",//获取省份
30 | city: "city",//获取城市
31 | district: "district",//获取县区
32 | town: "town",//获取镇
33 | street: "street"//获取街道信息
34 | }
--------------------------------------------------------------------------------
/src/config/prod.js:
--------------------------------------------------------------------------------
1 | export default {
2 | NODE_ENV: 'prod',// 环境名称
3 | BAIDU_MAP_AK: '',
4 | STORAGE_PREFIX: 'dsj_',// 存储变量命名空间/前缀
5 | STORAGE_ADDRESS: 'address_info',// 地址存储
6 | STORAGE_USER_AGENT: 'user_agent_info',// ua存储
7 | STORAGE_USERINFO: 'user_info',// 用户列表存储
8 | STORAGE_PAGE:'page_info',// 保存当前页面和之前页面的信息
9 |
10 | CONSOLE_DEBUG: false,
11 | CONSOLE_LOG: false,
12 | CONSOLE_INFO: true,
13 | CONSOLE_WARN: true,
14 |
15 | SERVER_URL: 'http://localhost:8080/dsj/',
16 |
17 | SESSION_TIMEOUT: 600,// 单位秒,默认 10分钟
18 |
19 | // 以下为配置项
20 | USERNAME_KEY: '',// 用户名取值字段
21 | PLATFORM: '',// 平台名称
22 | AUTO_PV: false,// 进入页面或者刷新时自动调用pageView开关
23 | }
--------------------------------------------------------------------------------
/src/config/test.js:
--------------------------------------------------------------------------------
1 | import config from './prod';
2 | export default Object.assign(config, {
3 | NODE_ENV: 'test',
4 | BAIDU_MAP_AK: '',
5 |
6 | CONSOLE_DEBUG: true,
7 | CONSOLE_LOG: true,
8 | CONSOLE_INFO: true,
9 | CONSOLE_WARN: true,
10 |
11 | SERVER_URL: 'http://localhost:8080/dsj/',
12 | });
--------------------------------------------------------------------------------
/src/function/addr.js:
--------------------------------------------------------------------------------
1 | // 大数据采集经纬度
2 | import jsonp from '../utils/jsonp';
3 | import config from '../config';
4 | import columns from '../config/columns';
5 | import console from '../utils/console';
6 | class Address {
7 | constructor() {
8 | this.value = sessionStorage.getItem(this.storageKey) && sessionStorage.getItem(this.storageKey) !== 'undefined' ?
9 | JSON.parse(sessionStorage.getItem(this.storageKey)) :
10 | null;
11 | }
12 |
13 | // ps: 百度地图和腾讯地图经纬度获取的值不一样
14 | setAddress (latitude, longitude) {
15 | return new Promise((resolve, reject) => {
16 | jsonp({
17 | url: 'https://api.map.baidu.com/geocoder/v2/',
18 | data: {
19 | coordtype: 'wgs84ll',
20 | ak: config.BAIDU_MAP_AK,
21 | location: latitude + ',' + longitude,
22 | output: 'json',
23 | extensions_town: 'true'
24 | },
25 | callbackName: 'baidumapGetLocation',
26 | time: 5000,
27 | success: data => {
28 | // console.log('jsonp getLocation success');
29 | this.value = {
30 | location: data.result.location,
31 | formatted_address: data.result.formatted_address,
32 | addressComponent: data.result.addressComponent
33 | };
34 | sessionStorage.setItem(this.storageKey, JSON.stringify(this.value));
35 | // 此处放成功后执行的代码
36 | resolve(this.value);
37 | },
38 | error: function (e) {
39 | reject(e || new Error('获取地理数据失败,请检查网络'));
40 | }
41 | });
42 | });
43 | }
44 |
45 | get storageKey () {
46 | return config.STORAGE_PREFIX + config.STORAGE_ADDRESS;
47 | }
48 |
49 | set value (e) {
50 | this._value = e;
51 | }
52 |
53 | get value () {
54 | return this._value || {};
55 | }
56 |
57 | get location () {
58 | return this.value.location || {};
59 | }
60 |
61 | get addressComponent () {
62 | return this.value.addressComponent || {};
63 | }
64 |
65 | // 给最后组合数据用的
66 | get data () {
67 | return {
68 | [columns.longitude]: this.location.lng || null, //获取经度
69 | [columns.latitude]: this.location.lat || null, //获取纬度
70 | [columns.addr]: this.value.formatted_address || null, //获取详细地址
71 | [columns.country]: this.addressComponent.country || null, //获取国家
72 | [columns.province]: this.addressComponent.province || null, //获取省份
73 | [columns.city]: this.addressComponent.city || null, //获取城市
74 | [columns.district]: this.addressComponent.district || null, //获取县区
75 | [columns.town]: this.addressComponent.town || null, //获取镇
76 | [columns.street]: this.addressComponent.street || null //获取街道信息
77 | };
78 | }
79 |
80 | }
81 | export default new Address();
82 |
83 | // 以下是jsonp接口返回结果格式
84 | /* {
85 | 'status': 0,
86 | 'result': {
87 | 'location': {
88 | 'lng': 113.25017872995559,
89 | 'lat': 22.9468554669509
90 | },
91 | 'formatted_address': '广东省佛山市顺德区G105(京珠线)',
92 | 'business': '陈村',
93 | 'addressComponent': {
94 | 'country': '中国',
95 | 'country_code': 0,
96 | 'country_code_iso': 'CHN',
97 | 'country_code_iso2': 'CN',
98 | 'province': '广东省',
99 | 'city': '佛山市',
100 | 'city_level': 2,
101 | 'district': '顺德区',
102 | 'town': '北滘镇',
103 | 'adcode': '440606',
104 | 'street': 'G105(京珠线)',
105 | 'street_number': '',
106 | 'direction': '',
107 | 'distance': ''
108 | },
109 | 'pois': [],
110 | 'roads': [],
111 | 'poiRegions': [],
112 | 'sematic_description': '物流大厦附近46米',
113 | 'cityCode': 138
114 | }
115 | } */
--------------------------------------------------------------------------------
/src/function/userAgent.js:
--------------------------------------------------------------------------------
1 | import console from '../utils/console';
2 | import columns from '../config/columns';
3 | import config from '../config';
4 | class UserAgent {
5 | constructor () {
6 | this.data = sessionStorage.getItem(this.storageKey) && sessionStorage.getItem(this.storageKey) !== 'undefined' ?
7 | JSON.parse(sessionStorage.getItem(this.storageKey)) :
8 | this._getUserAgent();
9 | // console.log('userAgent:', this.data);
10 | }
11 |
12 | // 获取并缓存ua
13 | _getUserAgent() {
14 | var deviceInformation = ""; //设备信息
15 | var usystem = ""; //操作系统
16 | // navigator 对象是浏览器自带的,可以直接调用获取信息
17 | var str = navigator.userAgent.toLowerCase();
18 | var uretion = ""; //系统版本
19 | if (/(iPhone|iPad|iPod|iOS|mac)/i.test(navigator.userAgent)) {
20 | var ver = str.match(/ os (.*?) like mac os/);
21 | var width = window.screen.width;
22 | // ubrand = "iphone";
23 | usystem = "ios";
24 | uretion = ver[1];
25 | //设备信息
26 | var i = str.match(/[(\b]/).index;
27 | var s = str.match(/[)\b]/).index + 1;
28 | deviceInformation = str.substring(i, s);
29 | //操作系统,PC端有系统版本
30 | } else if (/(Android)/i.test(navigator.userAgent)) {
31 | var ver = str.match(/android (.*?); (.*?)build/);
32 | usystem = "android";
33 | uretion = ver[1];
34 | //设备信息
35 | var i = str.match(/[(\b]/).index;
36 | var s = str.match(/[)\b]/).index + 1;
37 | deviceInformation = str.substring(i, s);
38 | } else {
39 | usystem = "window";
40 | //设备信息
41 | var i = str.match(/[(\b]/).index;
42 | var s = str.match(/[)\b]/).index + 1;
43 | deviceInformation = str.substring(i, s);
44 | var ver = deviceInformation.split(";");
45 |
46 | //根据nt版本判断操作系统
47 | if (deviceInformation.search("6.1")) {
48 | uretion = "win7";
49 | } else if (deviceInformation.search("6.2")) {
50 | uretion = "win8";
51 | } else if (deviceInformation.search("6.3")) {
52 | uretion = "win8.1";
53 | } else if (deviceInformation.search("10.0")) {
54 | uretion = "win10";
55 | } else {
56 | uretion = "win xp";
57 | }
58 | }
59 | let rs = {
60 | [columns.deviceInformation]: deviceInformation,//设备信息
61 | [columns.usystem]: usystem,//操作系统
62 | [columns.uretion]: uretion,//系统版本
63 | [columns.resolution]: window.screen.width * window.devicePixelRatio + "," + screen.height * window.devicePixelRatio, //获取屏幕实际分辨率
64 | };
65 | sessionStorage.setItem(this.storageKey, JSON.stringify(this.data));
66 | return rs;
67 | }
68 |
69 | get storageKey () {
70 | return config.STORAGE_PREFIX + config.STORAGE_USER_AGENT;
71 | }
72 |
73 | get data () {
74 | return this._data;
75 | }
76 |
77 | set data (v) {
78 | this._data = v;
79 | }
80 | }
81 |
82 | // 此处待定ua的storage的key
83 | export default new UserAgent();
--------------------------------------------------------------------------------
/src/function/uuid.js:
--------------------------------------------------------------------------------
1 | import console from '../utils/console';
2 | //产生随机用户ID
3 | class Uuid {
4 | constructor() {
5 | this.value = this._generateId();
6 | // console.log('生成了uuid:', this.value);
7 | }
8 |
9 | get value() {
10 | return this._value;
11 | }
12 |
13 | set value (v) {
14 | this._value = v;
15 | }
16 |
17 | _generateId() {
18 | var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
19 | var tmpid = [];
20 | var r;
21 | tmpid[8] = tmpid[13] = tmpid[18] = tmpid[23] = '-';
22 | tmpid[14] = '4';
23 | for (var i = 0; i < 36; i++) {
24 | if (!tmpid[i]) {
25 | r = 0 | Math.random() * 16;
26 | tmpid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
27 | }
28 | }
29 | return tmpid.join('');
30 | }
31 | }
32 |
33 | export default Uuid;
--------------------------------------------------------------------------------
/src/handler/event.js:
--------------------------------------------------------------------------------
1 | import config from '../config';
2 | import columns from '../config/columns';
3 | import user from './user';
4 | import userAgent from '../function/userAgent';
5 | import address from '../function/addr';
6 |
7 | let storageKey = config.STORAGE_PREFIX + config.STORAGE_PAGE;
8 |
9 | let pageObj = null;
10 |
11 | const setPageObj = function (last, current) {
12 | let lastPageObj = last || pageObj || sessionStorage.getItem(storageKey) &&
13 | sessionStorage.getItem(storageKey) !== 'undefined' ?
14 | JSON.parse(sessionStorage.getItem(storageKey)) : {
15 | interview: null,
16 | title: null,
17 | url: null
18 | };
19 | let currentPageObj = current || {
20 | title: document.title,
21 | url: window.location.href,
22 | interview: new Date().getTime(),
23 | };
24 | pageObj = {
25 | lastPageObj: {// 这里重新记录一下上个页面
26 | interview: lastPageObj.interview,
27 | title: lastPageObj.title,
28 | url: lastPageObj.url
29 | },
30 | ...currentPageObj
31 | };
32 | // ps: 这里好粗糙啊,只能兼容单页面应用;app新开webview需要另外一种写法,需要监听关闭webview
33 | // 如果刷新,则不保存
34 | if (pageObj.lastPageObj.url !== pageObj.url) {
35 | sessionStorage.setItem(storageKey, JSON.stringify(pageObj));
36 | }
37 | }
38 |
39 | const getPageObjData = function () {
40 | return pageObj ? {
41 | [columns.interview]: pageObj.interview,// 进入页面的时间
42 | [columns.currentUrl]: urlFilter(pageObj.url),//当前页面的URL
43 | [columns.title]: pageObj.title,// 当前页面的标题
44 | [columns.referrerUrl]: urlFilter(pageObj.lastPageObj.url),//上个页面的URL
45 | [columns.referrerTitlt]: pageObj.lastPageObj.title,//上一个页面的标题
46 | } : {
47 | [columns.title]: document.title,
48 | [columns.currentUrl]: window.location.href,
49 | [columns.interview]: new Date().getTime(),
50 | [columns.referrerUrl]:null,
51 | [columns.referrerTitlt]:null
52 | };
53 | }
54 |
55 | // 报告跳转事件
56 | export const pageView = function (last, current) {
57 | // 设置初次访问时间
58 | setTimeout(function() {
59 | setPageObj(last, current);
60 | user.updateLastVisitTime();
61 | let data = setUpData({
62 | [columns.eventName]: 'p_v', // 这里配置事件名称
63 | [columns.eventDate]: null,// 事件发生时的时间
64 | [columns.userCname]: null,// 按钮名称
65 | })
66 | send(data);
67 | });
68 | }
69 |
70 | // 报告点击事件
71 | export const clickEvent = function (e) {
72 | // console.log('点击');
73 | let tg = getClickTarget(e.target);
74 | // console.log('触发了点击', tg);
75 | user.updateLastVisitTime();
76 | if (tg) {
77 | let actionName = tg.getAttribute("DSJ_text") || tg.textContent.match(/[\u4e00-\u9fa5]/g).join("") || null;
78 | let data = setUpData({
79 | [columns.eventName]: 'e_e', // 这里配置事件名称
80 | [columns.eventDate]: new Date().getTime(),// 事件发生时的时间
81 | [columns.userCname]: actionName,// 按钮名称
82 | })
83 | send(data);
84 | user.updateLastVisitTime();
85 | }
86 | }
87 |
88 | const getClickTarget = function (node, lv) {
89 | // 默认button标签、a标签、有点击类的标签需要采集并发送数据
90 | // if (tg.nodeName === 'BUTTON' || tg.nodeName === 'A' || tg.classList.contains('DSJ__click')) {
91 | lv = lv || 1;
92 | if (node.classList.contains('DSJ__click') || node.getAttribute("DSJ") !== null) {
93 | return node;
94 | } else if (lv <= 3 && node.parentNode.nodeName !== 'BODY') {
95 | return getClickTarget(node.parentNode, lv++);
96 | } else {
97 | return null
98 | }
99 | }
100 |
101 | // 监听点击事件
102 | const clickWatch = function () {
103 | if(document.addEventListener){
104 | document.addEventListener("click", clickEvent, true);
105 | }else if(document.attachEvent){//兼容IE
106 | document.attachEvent("click", clickEvent);
107 | }
108 | }
109 |
110 | clickWatch();
111 |
112 | // 报告自定义事件
113 | export const customEvent = function (data) {
114 | user.updateLastVisitTime();
115 | let mydata = setUpData({
116 | [columns.eventName]: 'p_e', // 这里配置事件名称
117 | [columns.eventDate]: new Date().getTime(),// 事件发生时的时间
118 | [columns.userCname]: '自定义事件',// 按钮名称
119 | })
120 | for(let i in data){//遍历属性
121 | mydata["pm_"+i]=data[i];//防止冲突加上前缀pm
122 | }
123 | send(mydata);
124 | }
125 |
126 | function urlFilter (url) {
127 | return url
128 | }
129 |
130 | // 组合数据
131 | function setUpData (data) {
132 | return {
133 | [columns.platform]: config.PLATFORM,// 系统平台
134 | ...userAgent.data,// ua相关信息
135 | ...address.data,// 地址相关信息
136 | ...user.data,// 用户信息
137 | ...getPageObjData(),
138 | ...data // 传入的参数
139 | }
140 | }
141 |
142 | // 发送到服务器
143 | function send(data) {
144 | if (typeof data !== 'string') data = JSON.stringify(data);
145 | //创建一个图片对象,参数为宽度和高度
146 | var i2 = new Image(1, 1);
147 | //图片加载过程中发生错误时调用的事件句柄
148 | i2.onerror = function (error) {
149 | // 这里可以进行重试操作
150 | };
151 | //更改i2的src然后会访问所在位置,服务器会记录访问日志
152 | i2.src = config.SERVER_URL + "?data=" + encodeURIComponent(data);
153 | }
154 |
--------------------------------------------------------------------------------
/src/handler/user.js:
--------------------------------------------------------------------------------
1 | import Uuid from '../function/uuid';
2 | import config from '../config';
3 | import columns from '../config/columns';
4 |
5 | class User {
6 | // 构造方法,读取已有的用户列表信息,如果为空,则生成一个游客
7 | constructor () {
8 | this.userlist = sessionStorage.getItem(this.storageKey) && sessionStorage.getItem(this.storageKey) !== 'undefined' ?
9 | JSON.parse(sessionStorage.getItem(this.storageKey)) :
10 | [this._generateVisitorInfo()];
11 | }
12 |
13 | // 生成游客信息
14 | _generateVisitorInfo () {
15 | return {
16 | uuid: new Uuid().value,//生成uuid
17 | status: true,// 激活状态,标识当前用户
18 | login: false,// 登录状态,区分游客和用户
19 | info: { // 用户信息
20 | // username: '游客'
21 | },
22 | // 会话id,一个用户可能存在多个会话,会话超过超时时间后
23 | sessionId: new Uuid().value,
24 | lastVisitTime: new Date().getTime(),// 最后访问时间,用于划分会话
25 | }
26 | }
27 |
28 | updateLastVisitTime () {
29 | let info = this.userlist.find(x => x.status);
30 | let time = new Date().getTime();
31 | let lastVisitTime = info.lastVisitTime;
32 | // 会话时间超过十分钟,更新会话id
33 | if(time - lastVisitTime > config.SESSION_TIMEOUT * 1000) {
34 | info.sessionId = new Uuid().value;
35 | }
36 | info.lastVisitTime = time;
37 | }
38 |
39 | get info () {// 提供只读的用户信息
40 | return this.userlist.find(x => x.status)
41 | }
42 |
43 | // 提供只读的用户信息用于组合给后台记录操作
44 | get data () {
45 | return {
46 | [columns.uname]: this._getInfoKeyValue(this.info.info),
47 | [columns.uonly]: this.info.uuid,
48 | [columns.sid]: this.info.sessionId,
49 | [columns.ifLogin]: this.info.login,
50 | }
51 | }
52 | // item(uuid+状态+信息): {uuid: String, status: Bool, info: Object}
53 | // get userlist () {// userlist是一个Array
54 | // return this._userlist;
55 | // }
56 | // set userlist (v) {// 每次修改userlist时需要保存session
57 | // this._userlist = v;
58 | // }
59 |
60 | _cache () {// 缓存保存
61 | sessionStorage.setItem(this.storageKey, JSON.stringify(this.userlist));
62 | }
63 |
64 | // 获取用户信息关键值(唯一标识)
65 | // 有的用户信息里面可能不是username作为唯一标识,所以目前采用配置加降级获取信息
66 | _getInfoKeyValue (info) {
67 | return (config.USERNAME_KEY ?
68 | info[config.USERNAME_KEY] :
69 | (info.id || info.username)) || '游客'
70 | }
71 |
72 | /**
73 | * 登录操作需要把登录成功后的个人信息传入到此接口
74 | * @param {Object/String} info 登录返回的信息包含用户名手机号等
75 | * 必须包含username或者其他唯一编码赋值到username中
76 | */
77 | login (info) {
78 | if (!info) {
79 | console.error('调用大数据登录时需要带用户信息对象参数');
80 | return false;
81 | }
82 | if (typeof info === 'string') info = {username: info};
83 | // 判断是否曾经登录过
84 | let find = this.userlist.find(x => this._getInfoKeyValue(x.info) === this._getInfoKeyValue(info));
85 | this.userlist.find(x => x.status).status = false;// 将其他的激活状态改为false
86 | if (find) { // 登录过的重新激活登录状态
87 | find.status = true;
88 | this.updateLastVisitTime();
89 | } else {//未登录过的生成一个登录记录
90 | this.userlist.push({
91 | uuid: new Uuid().value,//生成uuid
92 | status: true,// 激活状态,标识当前用户
93 | login: true,// 登录状态,区分游客和用户
94 | info, // 用户信息
95 | sessionId: new Uuid().value,
96 | lastVisitTime: new Date().getTime(),
97 | })
98 | }
99 | this._cache();
100 | // ps:这里后面估计会增加发送到服务器操作
101 | }
102 |
103 | /**
104 | * 退出登录需要调用此接口以更改uuid标识不同的用户
105 | */
106 | logout () {
107 | let find = this.userlist.find(x => x.status);
108 | if (find) {
109 | find.status = false;
110 | find.lastVisitTime = new Date().getTime();
111 | }
112 | let visitor = this.userlist.find(x => !x.login);
113 | visitor.status = true;
114 | this.updateLastVisitTime();
115 | this._cache();
116 | // ps:这里后面估计会增加发送到服务器操作
117 | }
118 |
119 | get storageKey () {
120 | return config.STORAGE_PREFIX + config.STORAGE_USERINFO
121 | }
122 | }
123 |
124 | export default new User();
--------------------------------------------------------------------------------
/src/utils/console.js:
--------------------------------------------------------------------------------
1 | import config from '../config';
2 |
3 | // 调试模式下才显示每一步的步骤
4 | function debug () {
5 | if (config.CONSOLE_DEBUG) console.debug.apply(console, arguments);
6 | }
7 |
8 | // 普通的结果信息
9 | function log() {
10 | if (config.CONSOLE_LOG) console.log.apply(console, arguments);
11 | }
12 |
13 | // 比较重要的运行结果
14 | function info () {
15 | if (config.CONSOLE_INFO) console.info.apply(console, arguments);
16 | }
17 |
18 | // 运行出现的警告
19 | function warn () {
20 | if (config.CONSOLE_WARN) console.warn.apply(console, arguments);
21 | }
22 |
23 | // 运行抛出的错误必须显示,无需重写
24 |
25 | const myConsole = Object.assign({}, console, {
26 | debug,
27 | log,
28 | info,
29 | warn
30 | })
31 |
32 | export default myConsole;
--------------------------------------------------------------------------------
/src/utils/cookie.js:
--------------------------------------------------------------------------------
1 | export const CookieUtil = {
2 | // 设置cookie
3 | set : function (name, value, expires, domain, path, secure) {
4 | var cookieText = "";
5 | cookieText += encodeURIComponent(name) + "=" + encodeURIComponent(value);
6 | if (expires instanceof Date) {
7 | cookieText += "; expires=" + expires.toGMTString();
8 | }
9 | if (path) {
10 | cookieText += "; path=" + path;
11 | }
12 | if (domain) {
13 | cookieText += "; domain=" + domain;
14 | }
15 | if (secure) {
16 | cookieText += "; secure";
17 | }
18 | document.cookie = cookieText;
19 | },
20 | // name=value; expires=expiration_time; path=domain_path; domain=domain_name; secure
21 | // 获取cookie
22 | get : function (name) {
23 | var cookieName = encodeURIComponent(name) + "=",
24 | cookieStart = document.cookie.indexOf(cookieName),
25 | cookieValue = "";
26 | if (cookieStart > -1) {
27 | var cookieEnd = document.cookie.indexOf (";", cookieStart);
28 | if (cookieEnd == -1) {
29 | cookieEnd = document.cookie.length;
30 | }
31 | cookieValue = decodeURIComponent(document.cookie.substring(cookieStart + cookieName.length, cookieEnd));
32 | }
33 | return cookieValue;
34 | },
35 | // 删除cookie
36 | unset : function (name, domain, path, secure) {
37 | this.set(name, "", Date(0), domain, path, secure);
38 | },
39 |
40 | //将储存cookie
41 | setExt: function(name, value) {
42 | this.set(name, value, new Date().getTime() + 315360000000, "/");
43 | }
44 | };
45 | /*
46 | // 测试
47 | CookieUtil.set("name", "zhang");
48 | var name = CookieUtil.get("name");
49 | alert(name); // zhang
50 | CookieUtil.unset("name");
51 | alert(CookieUtil.get("name")); // 空
52 | */
53 | export const SubCookieUtil = {
54 | /** 设置一条完整的cookie
55 | * param name : 表示cookie的名称,必填
56 | * param subCookies : 表示cookie的值,为一个对象,必填
57 | * param expires : 表示cookie的过期时间,可以不填
58 | * param domain : 表示cookie的域名,可以不填
59 | * param path : 表示cookie的路径,可以不填
60 | * param secure : 表示cookie的安全标志,可以不填
61 | * eg : SubCookieUtil.setAll("info", { name : "zhang", age : 23});
62 | **/
63 | setAll : function (name, subCookies, expires, domain, path, secure) {
64 | var cookieText = "", subName, cookieParts = [];
65 | cookieText += encodeURIComponent(name) + "=";
66 | for(subName in subCookies) {
67 | cookieParts.push(encodeURIComponent(subName) + "=" + encodeURIComponent(subCookies[subName]));
68 | }
69 | if (cookieParts.length > 0) {
70 | cookieText += cookieParts.join("&");
71 | if (expires instanceof Date) {
72 | cookieText += "; expires=" + expires.toGMTString();
73 | }
74 | if (path) {
75 | cookieText += "; path=" + path;
76 | }
77 | if (domain) {
78 | cookieText += "; domain=" + domain;
79 | }
80 | if (secure) {
81 | cookieText += "; secure";
82 | }
83 | } else {
84 | cookieText += "; expires=" + Date(0).toGMTString();
85 | }
86 | document.cookie = cookieText;
87 | },
88 | /** 设置一条子cookie
89 | * param name : 表示cookie的名称,必填
90 | * param subName : 表示子cookie的名称,必填
91 | * param value : 表示子cookie的值,必填
92 | * param expires : 表示cookie的过期时间,可以不填
93 | * param domain : 表示cookie的域名,可以不填
94 | * param path : 表示cookie的路径,可以不填
95 | * param secure : 表示cookie的安全标志,可以不填
96 | * eg : SubCookieUtil.set("info", "sex", "boy");
97 | **/
98 | set : function (name, subName, value, expires, domain, path, secure) {
99 | var cookies = this.getAll(name) || {};
100 | cookies[subName] = value;
101 | this.setAll(name, cookies, expires, domain, path, secure);
102 | },
103 | /** 读取一条完整cookie
104 | * param name : 表示cookie的名称,必填
105 | * return : 一个cookie对象
106 | * eg : SubCookieUtil.getAll("info");
107 | **/
108 | getAll : function (name) {
109 | var cookieName = encodeURIComponent(name) + "=",
110 | cookieStart = document.cookie.indexOf(cookieName),
111 | cookieValue = "", i, len, subCookies, parts, result = {};
112 | if (cookieStart > -1) {
113 | var cookieEnd = document.cookie.indexOf (";", cookieStart);
114 | if (cookieEnd == -1) {
115 | cookieEnd = document.cookie.length;
116 | }
117 | cookieValue = decodeURIComponent(document.cookie.substring(cookieStart + cookieName.length, cookieEnd));
118 | if (cookieValue.length > 0) {
119 | subCookies = cookieValue.split("&");
120 | for (i = 0, len = subCookies.length; i < len; i++) {
121 | parts = subCookies[i].split("=");
122 | result[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]);
123 | }
124 | return result;
125 | }
126 | }
127 | return null;
128 | },
129 | /** 获取一条子cookie的值
130 | * param name : 表示cookie的名称,必填
131 | * param subName : 表示子cookie的名称
132 | * return : 一个子cookie的值
133 | * eg : SubCookieUtil.get("info", "name");
134 | **/
135 | get : function (name, subName) {
136 | var cookies = this.getAll(name);
137 | if (cookies) {
138 | return cookies[subName];
139 | } else {
140 | return null;
141 | }
142 | },
143 | /** 删除一条完整cookie
144 | * param name : 表示cookie的名称,必填
145 | * param domain : 表示cookie的域名,可以不填
146 | * param path : 表示cookie的路径,可以不填
147 | * param secure : 表示cookie的安全标志,可以不填
148 | * eg : SubCookieUtil.unsetAll("info");
149 | **/
150 | unsetAll : function (name, domain, path, secure) {
151 | this.setAll(name, "", Date(0).toGMTString(), domain, path, secure);
152 | },
153 | /** 删除一条子cookie
154 | * param name : 表示cookie的名称,必填
155 | * param subName : 表示子cookie的名称,必填
156 | * param domain : 表示cookie的域名,可以不填
157 | * param path : 表示cookie的路径,可以不填
158 | * param secure : 表示cookie的安全标志,可以不填
159 | * eg : SubCookieUtil.unset("info", "name");
160 | **/
161 | unset : function (name, subName, domain, path, secure) {
162 | var cookies = this.getAll(name);
163 | if (cookies) {
164 | delete cookies[subName];
165 | this.setAll(name, cookies, null, domain, path, secure);
166 | }
167 | }
168 | };
169 | /*
170 | // 测试:
171 | var zhang = {
172 | name : "zhang",
173 | age : 23,
174 | height : "178cm",
175 | weight : "66kg"
176 | }
177 | // 设置一条完整的cookie
178 | SubCookieUtil.setAll("zhang", zhang);
179 | // 获取一条完整的cookie
180 | var zhang = SubCookieUtil.getAll("zhang");
181 | alert(zhang.weight); // 66kg
182 | // 再为张添加一个子cookie
183 | SubCookieUtil.set("zhang", "sport", "basketball");
184 | // 获取子cookie
185 | alert(SubCookieUtil.get("zhang", "sport")); // basketball
186 | // 删除一条子cookie
187 | SubCookieUtil.unset("zhang", "age");
188 | alert(SubCookieUtil.get("zhang", "age")); // undefined
189 | // 删除一条完整的cookie
190 | SubCookieUtil.unsetAll("zhang");
191 | alert(SubCookieUtil.getAll("zhang")); // 报错,因为已经被删除
192 | */
--------------------------------------------------------------------------------
/src/utils/jsonp.js:
--------------------------------------------------------------------------------
1 | // 格式化参数
2 | function formatParams (data, needEncode) {
3 | var arr = [];
4 | for (var name in data) {
5 | arr.push(needEncode
6 | ? encodeURIComponent(name) + '=' + encodeURIComponent(data[name])
7 | : name + '=' + data[name]);
8 | }
9 | return arr.join('&');
10 | }
11 | /*
12 | options = {
13 | url,
14 | data,
15 | callbackName,
16 | needEncode,
17 | time,
18 | success
19 | error
20 | }
21 | */
22 |
23 | export default function jsonp (options = {}) {
24 | // jsonp必须带url, callback属性
25 | if (!options.url) throw new Error('参数不合法');
26 |
27 | // 如果url中指明了callback,则需要定义callbackName,否则自动生成
28 | var callbackName = options.callbackName || ('callback' + Math.random()).replace('.', '');
29 |
30 | // 赋值到data中
31 | if (options.data) options.data.callback = callbackName;
32 |
33 | // 根据data生成参数
34 | var params = formatParams(options.data, options.needEncode);
35 |
36 | // 创建 script 标签并加入到页面中
37 | var oHead = document.getElementsByTagName('head')[0];
38 | var oS = document.createElement('script');
39 | oHead.appendChild(oS);
40 |
41 | // 创建jsonp回调函数
42 | // callbackName = callbackName.split('0')[0];
43 | window[callbackName] = function (json) {
44 | oHead.removeChild(oS);
45 | clearTimeout(oS.timer);
46 | window[callbackName] = null;
47 | options.success && options.success(json);
48 | };
49 |
50 | // 发送请求, 如果没有参数,则直接用url
51 | oS.src = params ? options.url + '?' + params : options.url;
52 |
53 | // 超时处理
54 | if (options.time) {
55 | oS.timer = setTimeout(function () {
56 | window[callbackName] = null;
57 | oHead.removeChild(oS);
58 | options.error && options.error({ message: '超时' });
59 | }, options.time);
60 | }
61 | };;
62 | /* jsonp({
63 | url: 'http://localhost:8080/ac/test.php',
64 | data: { q: 1 },
65 | callbackName: 'foo',
66 | time: 1,
67 | success: function (json) {
68 | // 此处放成功后执行的代码
69 | console.log(json.name);
70 | },
71 | error: function (json) {
72 | console.log(json.message);
73 | }
74 | }); */
75 |
--------------------------------------------------------------------------------