diff --git a/CHANGELOG.md b/CHANGELOG.md index dd7f8f77a68e..8991f761b0c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,144 @@ -# [](https://github.com/NervJS/taro/compare/v1.3.34...v) (2019-12-31) +# [](https://github.com/NervJS/taro/compare/v2.0.0-beta.13...v) (2019-12-31) + + + + +# [2.0.0-beta.13](https://github.com/NervJS/taro/compare/v1.3.34...v2.0.0-beta.13) (2019-12-31) + + +### Bug Fixes + +* **cli:** 2.0.0-beta.8. 编译RN报错 'babel' of undefined close [#5093](https://github.com/NervJS/taro/issues/5093) ([3a84775](https://github.com/NervJS/taro/commit/3a84775)) +* **cli:** 修正快应用依赖项安装命令在windows不兼容问题 ([#4954](https://github.com/NervJS/taro/issues/4954)) ([6e15d16](https://github.com/NervJS/taro/commit/6e15d16)) +* **cli:** 增加运行提示 ([ff7463d](https://github.com/NervJS/taro/commit/ff7463d)) +* **cli:** 插件编译失败,close [#5149](https://github.com/NervJS/taro/issues/5149) ([9267765](https://github.com/NervJS/taro/commit/9267765)) +* **cli:** 更新默认模板 ([a5cbb98](https://github.com/NervJS/taro/commit/a5cbb98)) +* **cli:** 解决 cli 编译时缺少 [@types](https://github.com/types)/react 依赖问题 ([#4997](https://github.com/NervJS/taro/issues/4997)) ([3649db5](https://github.com/NervJS/taro/commit/3649db5)) +* **components-qa:** 改进 button 动画效果展示,引入 css 属性描述文件 ([#4898](https://github.com/NervJS/taro/issues/4898)) ([9c336f5](https://github.com/NervJS/taro/commit/9c336f5)) +* **mini-runner:** 优化 watch 时文件编译速度 ([d8e180c](https://github.com/NervJS/taro/commit/d8e180c)) +* **mini-runner:** 修复 defineConstants 小程序表现与 H5 不一致问题 close [#5078](https://github.com/NervJS/taro/issues/5078) ([a560edb](https://github.com/NervJS/taro/commit/a560edb)) +* **mini-runner:** 修复 sass 变量失效的问题,close [#4893](https://github.com/NervJS/taro/issues/4893) ([e1e979d](https://github.com/NervJS/taro/commit/e1e979d)) +* **mini-runner:** 修复 watch 时修改页面导致组件无法及时更新的问题 ([b5394c7](https://github.com/NervJS/taro/commit/b5394c7)) +* **mini-runner:** 修复 watch 时增加组件文件的 bug,close [#5140](https://github.com/NervJS/taro/issues/5140) ([769ded0](https://github.com/NervJS/taro/commit/769ded0)) +* **mini-runner:** 修复 watch 时文件报错导致无法重新编译的问题,fix [#4949](https://github.com/NervJS/taro/issues/4949) ([70dde62](https://github.com/NervJS/taro/commit/70dde62)) +* **mini-runner:** 修复 windows 下编译后 taro 引用错误的问题 ([6798787](https://github.com/NervJS/taro/commit/6798787)) +* **mini-runner:** 修复使用 preval 报错的问题 ([24701e6](https://github.com/NervJS/taro/commit/24701e6)) +* **mini-runner:** 修复分包页面丢失的问题 ([98c82da](https://github.com/NervJS/taro/commit/98c82da)) +* **mini-runner:** 修复包未安装不报错的问题 ([09dd6b7](https://github.com/NervJS/taro/commit/09dd6b7)) +* **mini-runner:** 修复多端文件引用的问题,close [#5175](https://github.com/NervJS/taro/issues/5175) ([def32f5](https://github.com/NervJS/taro/commit/def32f5)) +* **mini-runner:** 修复小程序编译时样式中引用静态资源转换为 base64 ([955784f](https://github.com/NervJS/taro/commit/955784f)) +* **mini-runner:** 修复引用原生组件报错的问题 ([03967de](https://github.com/NervJS/taro/commit/03967de)) +* **mini-runner:** 修复引用原生组件编译后样式文件缺失的问题 ([9d58a87](https://github.com/NervJS/taro/commit/9d58a87)) +* **mini-runner:** 修复组件 watch 时改动不生效的问题 ([8cfd5bb](https://github.com/NervJS/taro/commit/8cfd5bb)) +* **mini-runner:** 修复静态资源引用的 bug ([a0ccc36](https://github.com/NervJS/taro/commit/a0ccc36)) +* **mini-runner:** 修复页面 hooks config 失效问题 ([4635bec](https://github.com/NervJS/taro/commit/4635bec)) +* **mini-runner:** 修正快应用pages中ux文件未正确生成问题 ([#4969](https://github.com/NervJS/taro/issues/4969)) ([2c61570](https://github.com/NervJS/taro/commit/2c61570)) +* **mini-runner:** 加入 preval 支持 ([b0c68cf](https://github.com/NervJS/taro/commit/b0c68cf)) +* **mini-runner:** 增加快应用公共属性的自动更新,优化button动画直接调用 ([#5044](https://github.com/NervJS/taro/issues/5044)) ([cca8c72](https://github.com/NervJS/taro/commit/cca8c72)) +* **mini-runner:** 快应用页面路径编译错误 ([52032dd](https://github.com/NervJS/taro/commit/52032dd)) +* **mini-runner:** 支持自定义 tabBar ([801bb80](https://github.com/NervJS/taro/commit/801bb80)) +* **mini-runner:** 暴露 commonChunks 配置以供自定义公共 chunks 生成 ([3d3118e](https://github.com/NervJS/taro/commit/3d3118e)) +* **mini-runner:** 更新编译时提示 ([174c7b2](https://github.com/NervJS/taro/commit/174c7b2)) +* **mini-runner:** 组件中 $componentPath 路径生成不对 ([4d4d080](https://github.com/NervJS/taro/commit/4d4d080)) +* **mini-runner:** 组件引入支持统一从一个入口文件中引入 ([d8898f1](https://github.com/NervJS/taro/commit/d8898f1)) +* **mini-runner:** 组件引用支持 import as 语法 ([e4616eb](https://github.com/NervJS/taro/commit/e4616eb)) +* **mini-runner:** 编译时移除组件文件引用,遗漏了 npm 包中组件,close [#5139](https://github.com/NervJS/taro/issues/5139) ([bf2af74](https://github.com/NervJS/taro/commit/bf2af74)) +* **mini-runner:** 编译时需要移除对组件文件的引用 ([03a7672](https://github.com/NervJS/taro/commit/03a7672)) +* **mini-runner:** 降低 babel-plugin-preval 版本以保证使用 async await 时不报错 ([e703bd6](https://github.com/NervJS/taro/commit/e703bd6)) +* **taro:** update getStorage return typings ([#5170](https://github.com/NervJS/taro/issues/5170)) ([38279ec](https://github.com/NervJS/taro/commit/38279ec)) +* **taro:** 增加递归查找中止条件,修正拼写错误 ([#5045](https://github.com/NervJS/taro/issues/5045)) ([7dac473](https://github.com/NervJS/taro/commit/7dac473)) +* **taro-cli:** update package list 新增 [@tarojs](https://github.com/tarojs)/mini-runner,对列表排序 ([cd264dd](https://github.com/NervJS/taro/commit/cd264dd)) +* **taro-runner-utils:** 优化代码,修复找不到类型定义的问题 ([765c8de](https://github.com/NervJS/taro/commit/765c8de)) +* **taro-webpack-runner:** 修复 sassLoaderOption 未定义的问题 ([60bfe5c](https://github.com/NervJS/taro/commit/60bfe5c)) +* **types:** add enableFlex to ScrollViewProps ([#5142](https://github.com/NervJS/taro/issues/5142)) ([c984109](https://github.com/NervJS/taro/commit/c984109)) +* for video objectFit ([cd36ca1](https://github.com/NervJS/taro/commit/cd36ca1)) +* **cli:** lerna 加入 taro-mini-runner && 接入 webpack 生成小程序文件 ([ed9e755](https://github.com/NervJS/taro/commit/ed9e755)) +* **cli:** 修复 doctor 对 config 的检测 ([127d6d2](https://github.com/NervJS/taro/commit/127d6d2)) +* **cli:** 修复 watch 时文件修改不对的问题 ([aa9f99e](https://github.com/NervJS/taro/commit/aa9f99e)) +* **cli:** 修复代码合并的问题 ([1a5a903](https://github.com/NervJS/taro/commit/1a5a903)) +* **cli:** 修复目录创建 ([9f19372](https://github.com/NervJS/taro/commit/9f19372)) +* **cli:** 修复配置文件中读取不到 process.env.TARO_ENV 的问题 ([121ba14](https://github.com/NervJS/taro/commit/121ba14)) +* **mini-runner:** 修复对 alias 的支持 ([2e09509](https://github.com/NervJS/taro/commit/2e09509)) +* **mini-runner:** 移除无用代码 ([931a208](https://github.com/NervJS/taro/commit/931a208)) +* somethings no need ([0598df6](https://github.com/NervJS/taro/commit/0598df6)) +* **cli:** 支持引用 node_modules 中组件 ([18bc2bc](https://github.com/NervJS/taro/commit/18bc2bc)) +* **cli:** 普通文件经过编译器编译必须传入 isNormal ([3bc5450](https://github.com/NervJS/taro/commit/3bc5450)) +* **cli:** 更新默认模板 ([d17a8c5](https://github.com/NervJS/taro/commit/d17a8c5)) +* **cli:** 清理代码 ([179be5c](https://github.com/NervJS/taro/commit/179be5c)) +* **cli:** 编译器参数调整 ([4771c21](https://github.com/NervJS/taro/commit/4771c21)) +* **components:** h5 image 删除无关代码 ([#4998](https://github.com/NervJS/taro/issues/4998)) ([1d17269](https://github.com/NervJS/taro/commit/1d17269)) +* **components:** 修复 Image 组件在 react 环境下报错的问题 ([ac039e8](https://github.com/NervJS/taro/commit/ac039e8)) +* **components-qa:** 修复页面 onReachBottom 事件不触发的问题 ([b3b21bf](https://github.com/NervJS/taro/commit/b3b21bf)) +* **jd:** 修复合并代码导致的京东小程序的编译问题 ([de78fe4](https://github.com/NervJS/taro/commit/de78fe4)) +* **mini-runner:** npm 中文件不会经过 taro 包替换操作 ([975efa2](https://github.com/NervJS/taro/commit/975efa2)) +* **mini-runner:** 优化 webpack 编译时样式处理 ([48ba4d8](https://github.com/NervJS/taro/commit/48ba4d8)) +* **mini-runner:** 修复 builder 的 hooks 调用 ([e9a25b8](https://github.com/NervJS/taro/commit/e9a25b8)) +* **mini-runner:** 修复 tabbar 编译及组件 watch 的问题 ([77d7aeb](https://github.com/NervJS/taro/commit/77d7aeb)) +* **mini-runner:** 修复 watch bug ([c84b683](https://github.com/NervJS/taro/commit/c84b683)) +* **mini-runner:** 修复对 css modules 的支持 ([5019023](https://github.com/NervJS/taro/commit/5019023)) +* **mini-runner:** 修复小程序编译报错 ([1e8aef1](https://github.com/NervJS/taro/commit/1e8aef1)) +* **mini-runner:** 修复快应用打包报错的问题 ([ca7bdb7](https://github.com/NervJS/taro/commit/ca7bdb7)) +* **mini-runner:** 修复快应用编译后页面标题展示不正确的问题 ([de5dc7b](https://github.com/NervJS/taro/commit/de5dc7b)) +* **mini-runner:** 修复普通小程序编译的问题 ([7251ea3](https://github.com/NervJS/taro/commit/7251ea3)) +* **mini-runner:** 只有 taro 的包不能经过依赖包名替换 ([c861872](https://github.com/NervJS/taro/commit/c861872)) +* **mini-runner:** 打包优化,引用自 npm 包中的组件不抽离至 vendors 中 ([6e8a4ff](https://github.com/NervJS/taro/commit/6e8a4ff)) +* **mini-runner:** 提前解析快应用页面 ([d469c84](https://github.com/NervJS/taro/commit/d469c84)) +* **mini-runner:** 支持快应用编译后模板与样式的检测 ([e38ebc7](https://github.com/NervJS/taro/commit/e38ebc7)) +* **quickapp:** pull-down-refresh page-scroll ([1c2fa60](https://github.com/NervJS/taro/commit/1c2fa60)) +* quickapp api upload from docs ([c263ee6](https://github.com/NervJS/taro/commit/c263ee6)) +* **taro:** 修复快应用下拉刷新问题 ([5a7638e](https://github.com/NervJS/taro/commit/5a7638e)) +* position linter for quickapp 1060+ ([42eb4c4](https://github.com/NervJS/taro/commit/42eb4c4)) +* use rimraf instead of rm to fixed Windows build error ([37af02e](https://github.com/NervJS/taro/commit/37af02e)) +* **mini-runner:** 修复引用 npm 中组件间存在依赖时依赖路径解析错误的问题 ([27612a3](https://github.com/NervJS/taro/commit/27612a3)) +* **mini-runner:** 加上文件编译提示 ([4597d1a](https://github.com/NervJS/taro/commit/4597d1a)) +* **taro:** 小程序 webpack 编译静态文件路径 ([2e13173](https://github.com/NervJS/taro/commit/2e13173)) +* **taro-quickapp:** 修复快应用事件绑定异常问题 ([3f1aa7d](https://github.com/NervJS/taro/commit/3f1aa7d)) +* **template:** 更新 Taro 2.0 的模版和下载地址 [#4837](https://github.com/NervJS/taro/issues/4837) ([71b34eb](https://github.com/NervJS/taro/commit/71b34eb)) +* pxtransform disable on quick-app ([2a26e20](https://github.com/NervJS/taro/commit/2a26e20)) +* **transformer:** 修复测试用例 ([5f78126](https://github.com/NervJS/taro/commit/5f78126)) +* **transformer:** 修复错误类型 ([f012d26](https://github.com/NervJS/taro/commit/f012d26)) +* **transformer:** 支持直接 import default ([62f71a5](https://github.com/NervJS/taro/commit/62f71a5)) +* **webpack:** 修复文件压缩的问题 ([a58909d](https://github.com/NervJS/taro/commit/a58909d)) + + +### Features + +* **taro-runner-utils:** 添加单元测试和优化注释 ([97a1642](https://github.com/NervJS/taro/commit/97a1642)) +* webpack-runner 和 mini-runner 代码优化 ([d799097](https://github.com/NervJS/taro/commit/d799097)) +* **cli:** cli 支持事件 && 小程序编译配置向 H5 看齐 ([13ab8b0](https://github.com/NervJS/taro/commit/13ab8b0)) +* **cli:** 借助 tapable 改造 ([b77f00a](https://github.com/NervJS/taro/commit/b77f00a)) +* **cli:** 增加 tapable 包 ([413f9f7](https://github.com/NervJS/taro/commit/413f9f7)) +* **cli:** 将 app/页面/组件 添加到入口文件进行编译 ([97cc0e1](https://github.com/NervJS/taro/commit/97cc0e1)) +* **cli:** 尝试接入 webpack 来编译各端小程序 ([338650a](https://github.com/NervJS/taro/commit/338650a)) +* **cli:** 拆分逻辑到 loader ([e5a9fca](https://github.com/NervJS/taro/commit/e5a9fca)) +* **cli:** 调整文件编译 ([f209936](https://github.com/NervJS/taro/commit/f209936)) +* **components-qa:** 增强快应用button组件,增加属性判断及点击变色等 ([#4882](https://github.com/NervJS/taro/issues/4882)) ([83322ec](https://github.com/NervJS/taro/commit/83322ec)) +* **docs:** 更新 2.0 版本使用 async-await 的文档 [#4837](https://github.com/NervJS/taro/issues/4837) ([6ccfe83](https://github.com/NervJS/taro/commit/6ccfe83)) +* **mini-runner:** 优化 watch ([07134d7](https://github.com/NervJS/taro/commit/07134d7)) +* **mini-runner:** 保证快应用文件生成正确 ([236ebaa](https://github.com/NervJS/taro/commit/236ebaa)) +* **mini-runner:** 加入 watch ([678ddd4](https://github.com/NervJS/taro/commit/678ddd4)) +* **mini-runner:** 增加 Taro 模块专有处理插件 ([2ea3205](https://github.com/NervJS/taro/commit/2ea3205)) +* **mini-runner:** 支持与原生小程序代码混写 ([56369d4](https://github.com/NervJS/taro/commit/56369d4)) +* **mini-runner:** 支持分包 ([6abb72b](https://github.com/NervJS/taro/commit/6abb72b)) +* **mini-runner:** 支持编译 tabBar 上引用的资源编译 ([43a129a](https://github.com/NervJS/taro/commit/43a129a)) +* **mini-runner:** 生成快应用页面及组件 ([4fd3152](https://github.com/NervJS/taro/commit/4fd3152)) +* **taro:** cli 配合 mini-runner 重构 && 支持使用 mini-runner 编译插件 ([f80016f](https://github.com/NervJS/taro/commit/f80016f)) +* **taro-cli:** 配置文件分开存放,优化 taro config 输出 ([860c3b9](https://github.com/NervJS/taro/commit/860c3b9)) +* **taro-runner-utils:** 添加 [@tarojs](https://github.com/tarojs)/runner-utils 包 ([201a991](https://github.com/NervJS/taro/commit/201a991)) +* audio context ([2796e46](https://github.com/NervJS/taro/commit/2796e46)) +* mock for quickapp ([a26c41a](https://github.com/NervJS/taro/commit/a26c41a)) +* stop trans asset for quickapp ([dbc27c5](https://github.com/NervJS/taro/commit/dbc27c5)) +* **taro:** 加入快应用编译支持 ([0d7e5c8](https://github.com/NervJS/taro/commit/0d7e5c8)) +* **taro:** 调整小程序和 H5 的编译配置 ([0b47af5](https://github.com/NervJS/taro/commit/0b47af5)) +* **taro-cli:** 调整 rn 编译配置 ([8578d17](https://github.com/NervJS/taro/commit/8578d17)) +* **taro-mini-runner:** 优化文件生成 ([65c699d](https://github.com/NervJS/taro/commit/65c699d)) +* **taro-mini-runner:** 如果是组件需要补充 component:true 配置 ([302e878](https://github.com/NervJS/taro/commit/302e878)) +* **taro-mini-runner:** 引入拆分的公共 chunks ([1041ffe](https://github.com/NervJS/taro/commit/1041ffe)) +* **taro-mini-runner:** 拆分文件编译成为 plugin ([8eb3d43](https://github.com/NervJS/taro/commit/8eb3d43)) +* **taro-mini-runner:** 生成多端类型文件 ([9029d25](https://github.com/NervJS/taro/commit/9029d25)) +* **taro-mini-runner:** 生成页面以及组件的 usingComponents 配置 ([15dede3](https://github.com/NervJS/taro/commit/15dede3)) +* checkout from auto-docs ([b0ec706](https://github.com/NervJS/taro/commit/b0ec706)) diff --git a/README.md b/README.md index 3e8f217b0a6f..2936addc1161 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,12 @@ > 👽 Taro['tɑ:roʊ],泰罗·奥特曼,宇宙警备队总教官,实力最强的奥特曼。 +## 版本 + +

当前 2.0 版本处在 beta 测试阶段,可能存在些许问题,若想稳定使用,请安装至 1.3.31 版本

+ +[1.x 版本文档](https://nervjs.github.io/taro/docs/1.3.29/README.html) + ## 简介 **Taro** 是一套遵循 [React](https://reactjs.org/) 语法规范的 **多端开发** 解决方案。现如今市面上端的形态多种多样,Web、React-Native、微信小程序等各种端大行其道,当业务同时在不同的端都要求有所表现的时候,针对不同的端编写多套代码的成本显然非常高,这时只编写一套代码就能适配到多端的能力就显得极为重要。 @@ -132,9 +138,9 @@ Taro 方案的初心就是为了打造一个多端开发的解决方案。目前 ## 特别鸣谢 -[![nanjingboy](https://avatars1.githubusercontent.com/u/1390888?s=100&v=4)](https://github.com/nanjingboy/) | [![jsNewbee](https://avatars3.githubusercontent.com/u/20449400?s=100&v=4)](https://github.com/js-newbee/) | [![Qiyu8](https://avatars2.githubusercontent.com/u/15245051?s=100&v=4)](https://github.com/Qiyu8/) -:---:|:---:|:---: -[nanjingboy](https://github.com/nanjingboy/) | [jsNewbee](https://github.com/js-newbee/) | [Qiyu8](https://github.com/Qiyu8/) +[![nanjingboy](https://avatars1.githubusercontent.com/u/1390888?s=100&v=4)](https://github.com/nanjingboy/) | [![jsNewbee](https://avatars3.githubusercontent.com/u/20449400?s=100&v=4)](https://github.com/js-newbee/) | [![Qiyu8](https://avatars2.githubusercontent.com/u/15245051?s=100&v=4)](https://github.com/Qiyu8/) | [![Hanqin](https://avatars3.githubusercontent.com/u/6348297?s=100&v=4)](https://github.com/shenghanqin/) +:---:|:---:|:---:|:---: +[nanjingboy](https://github.com/nanjingboy/) | [jsNewbee](https://github.com/js-newbee/) | [Qiyu8](https://github.com/Qiyu8/)| [Hanqin](https://github.com/shenghanqin/) ## 贡献者们 diff --git a/build/docs.js b/build/docs.js index 18929e5f8221..2247108f1378 100644 --- a/build/docs.js +++ b/build/docs.js @@ -3,8 +3,18 @@ const ghPages = require('gh-pages') const ora = require('ora') const spinner = ora('Publishing gitbooks...').start() -cp.exec('npm run docs', err => { - if (!err) { +const docs = cp.spawn('npm', ['run', 'docs']) + +docs.stdout.on('data', data => { + console.log(data) +}) + +docs.stderr.on('data', data => { + console.error(data) +}) + +docs.on('close', code => { + if (code === 0) { ghPages.publish('./website/build/taro', err => { if (!err) { spinner.succeed('Publish successfully.') @@ -13,6 +23,10 @@ cp.exec('npm run docs', err => { } }) } else { - spinner.fail(err) + spinner.fail(`文档站点编译出错,出错码 ${code}`) } }) + +docs.on('error', error => { + console.log(error) +}) diff --git a/docs/README.md b/docs/README.md index de3f9da5b5e4..5dff200eabbc 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,6 +2,8 @@ title: Taro 介绍 --- +> 这是 Taro 2.x 版本的文档,若要查看 1.x 版本的文档,请[点击这里选择版本](/taro/versions.html)。 + ## 简介 **Taro** 是一套遵循 [React](https://reactjs.org/) 语法规范的 **多端开发** 解决方案。 diff --git a/docs/async-await.md b/docs/async-await.md index 35e29fb50858..46df985322c6 100644 --- a/docs/async-await.md +++ b/docs/async-await.md @@ -2,19 +2,40 @@ title: 异步编程 --- -Taro 支持使用 `async functions` 来让开发者获得不错的异步编程体验,开启 `async functions` 支持需要安装包 `@tarojs/async-await` +> Taro 2.x 版本中使用 `async-await` 不再需要 `@tarojs/async-await`。 + +Taro 支持使用 `async functions` 来让开发者获得不错的异步编程体验,开启 `async functions` 支持需要安装包 `babel-plugin-transform-runtime` 和 `babel-runtime`。 ```bash -$ yarn add @tarojs/async-await -# 或者使用 npm -$ npm install --save @tarojs/async-await +$ yarn add babel-plugin-transform-runtime --dev +$ yarn add babel-runtime ``` -随后在项目入口文件 `app.js` 中直接 `import` ,就可以开始使用 `async functions` 功能了 +随后修改项目 [`babel` 配置](./config-detail.md#babel),增加插件 `babel-plugin-transform-runtime`。 -```javascript -// src/app.js -import '@tarojs/async-await' +```js +babel: { + sourceMap: true, + presets: [ + [ + 'env', + { + modules: false + } + ] + ], + plugins: [ + 'transform-decorators-legacy', + 'transform-class-properties', + 'transform-object-rest-spread', + ['transform-runtime', { + "helpers": false, + "polyfill": false, + "regenerator": true, + "moduleName": 'babel-runtime' + }] + ] +} ``` -> 值得注意的事,使用 `@tarojs/async-await` 一定要记得按照[开发前注意](./before-dev-remind.md)中提示的内容进行操作,否则会出现报错 +> 值得注意的事,使用 `async functions` 一定要记得按照[开发前注意](./before-dev-remind.md)中提示的内容进行操作,否则会出现报错 diff --git a/docs/components/forms/button.md b/docs/components/forms/button.md index d4c25a854391..4ee472c692f8 100755 --- a/docs/components/forms/button.md +++ b/docs/components/forms/button.md @@ -7,17 +7,17 @@ sidebar_label: Button > 属性及支持度 -| H5 | ReactNative| 属性名 | 类型 | 默认值 | 说明 | -| :-: | :-: | :- | :- | :- | :- | -| ✔ | ✔ | type | String | default | 按钮的样式类型 | -| ✔ | ✔ | size | String | default | 按钮的大小 px | -| ✔ | ✔ | plain | Boolean | false | 按钮是否镂空,背景色透明 | -| ✔ | ✔ | disabled | Boolean | false | 是否禁用 | -| ✔ | ✔ | loading | Boolean | false | 名称前是否带 loading 图标 | -| ✔ | X (支持 hoverStyle 属性,但框架未支持 hoverClass) | hoverClass | String | button-hover | 指定按钮按下去的样式类。当 hover-class='none' 时,没有点击态效果 | -| ✔ | ✔ | hoverStartTime | Number | 20 | 按住后多久出现点击态,单位毫秒 | -| ✔ | ✔ | hoverStayTime | Number | 70 | 手指松开后点击态保留时间,单位毫秒 | -| X | X | onGetUserInfo | Handler | | 微信小程序open-type='getUserInfo'时,用户点击该按钮,会返回获取到的用户信息,从返回参数的 detail 中获取到的值同 wx.getUserInfo | +| H5 | ReactNative| Quickapp| 属性名 | 类型 | 默认值 | 说明 | +| :-: | :-: | :-: | :- | :- | :- | :- | +| ✔ | ✔ | ✔ | type | String | default | 按钮的样式类型 | +| ✔ | ✔ | ✔ | size | String | default | 按钮的大小 px | +| ✔ | ✔ | ✔ | plain | Boolean | false | 按钮是否镂空,背景色透明 | +| ✔ | ✔ | ✔ | disabled | Boolean | false | 是否禁用 | +| ✔ | ✔ | ✔ | loading | Boolean | false | 名称前是否带 loading 图标 | +| ✔ | X (支持 hoverStyle 属性,但框架未支持 hoverClass) | X(支持 active 伪类状态变化) | hoverClass | String | button-hover | 指定按钮按下去的样式类。当 hover-class='none' 时,没有点击态效果 | +| ✔ | ✔ | X | hoverStartTime | Number | 20 | 按住后多久出现点击态,单位毫秒 | +| ✔ | ✔ | X | hoverStayTime | Number | 70 | 手指松开后点击态保留时间,单位毫秒 | +| X | X | X | onGetUserInfo | Handler | | 微信小程序open-type='getUserInfo'时,用户点击该按钮,会返回获取到的用户信息,从返回参数的 detail 中获取到的值同 wx.getUserInfo | >其他相关属性请看各小程序官方文档 diff --git a/docs/config-detail.md b/docs/config-detail.md index 8c42a588c205..32a7dc60416b 100644 --- a/docs/config-detail.md +++ b/docs/config-detail.md @@ -16,9 +16,41 @@ title: 编译配置详情 ## plugins -`plugins` 用来设置一些各个端通用的编译过程配置,例如 `babel` 配置,JS/CSS 压缩配置等。 +`plugins` 用来设置编译过程插件,插件机制基于 实现,目前暴露了两个钩子 `beforeBuild` 和 `afterBuild` -### plugins.babel +其中,`beforeBuild` 将在整体编译前触发,可以获取到编译的相关配置,同时也能进行修改 + +`afterBuild` 将在 webpack 编译完后执行,可以获取到编译后的结果 + +具体使用方式如下: + +首先定义一个插件 + +```js +class BuildPlugin { + apply (builder) { + builder.hooks.beforeBuild.tap('BuildPlugin', (config) => { + console.log(config) + }) + + builder.hooks.afterBuild.tap('BuildPlugin', (stats) => { + console.log(stats) + }) + } +} +``` + +接下来在 `plugins` 字段中进行配置 + +```js +{ + plugins: [ + new BuildPlugin() + ] +} +``` + +## babel 用来配置 `babel`,默认配置如下,可以自行添加自己需要的额外的 `presets` 及 `plugins`。 @@ -36,9 +68,9 @@ babel: { } ``` -### plugins.uglify +## uglify -用来配置 `UgligyJS` 工具,设置打包过程中的 JS 代码压缩。可以通过 `plugins.uglify.enable` 来设置是否开启压缩,若设置开启,则可以通过 `plugins.uglify.config` 来设置 `UgligyJS` 的配置项,具体配置方式如下: +用来配置 `UgligyJS` 工具,设置打包过程中的 JS 代码压缩。可以通过 `uglify.enable` 来设置是否开启压缩,若设置开启,则可以通过 `uglify.config` 来设置 `UgligyJS` 的配置项,具体配置方式如下: ```jsx uglify: { @@ -49,9 +81,9 @@ uglify: { } ``` -### plugins.csso +## csso -用来配置 `csso` 工具,设置打包过程中的 CSS 代码压缩。可以通过 `plugins.csso.enable` 来设置是否开启压缩,若设置开启,则可以通过 `plugins.csso.config` 来设置 `csso` 的配置项,具体配置方式如下: +用来配置 `csso` 工具,设置打包过程中的 CSS 代码压缩。可以通过 `csso.enable` 来设置是否开启压缩,若设置开启,则可以通过 `csso.config` 来设置 `csso` 的配置项,具体配置方式如下: ```jsx csso: { @@ -62,7 +94,8 @@ csso: { } ``` -### plugins.sass +## sass + 用来配置 `sass` 工具,设置打包过程中的 SCSS 代码编译。 具体配置可以参考[node-sass](https://www.npmjs.com/package/node-sass) 当需要全局注入scss文件时,可以添加三个额外参数:`resource` 、 `projectDirectory` (v1.2.25开始支持)、`data`(v1.3.0开始支持),具体配置方式如下: @@ -145,11 +178,11 @@ env: { ## defineConstants -用来配置一些全局变量供代码中进行使用,例如: +用来配置一些全局变量供代码中进行使用,配置方式与 [Webpack DefinePlugin](https://webpack.js.org/plugins/define-plugin/) 类似,例如: ```js defineConstants: { - A: '"a"' // JSON.stringify('a') + A: JSON.stringify('a') // '"a"' } ``` @@ -237,35 +270,200 @@ copy: { } ``` -## weapp +## mini 专属于小程序的配置。 -### weapp.compile +### mini.compile 小程序编译过程的相关配置。 -#### weapp.compile.compressTemplate +#### mini.compile.compressTemplate 决定小程序打包时是否需要压缩 wxml -#### weapp.compile.exclude +#### mini.compile.exclude 配置小程序编译过程中排除不需要经过 Taro 编译的文件,数组类型,写文件路径,文件路径必须以源码所在 `src` 目录开头: ```jsx -weapp: { +mini: { compile: { exclude: ['src/components/ec-canvas/echarts.js'] } } ``` -### weapp.module +### mini.webpackChain + +自定义 Webpack 配置,接受函数形式的配置。 + +这个函数会收到两个参数,第一个参数是 webpackChain 对象,可参考 [webpack-chain](https://github.com/neutrinojs/webpack-chain) 的 api 进行修改;第二个参数是 `webpack` 实例。例如: + +```jsx +// 这是一个添加 raw-loader 的例子,用于在项目中直接引用 md 文件 +{ + webpackChain (chain, webpack) { + chain.merge({ + module: { + rule: { + myloader: { + test: /\.md$/, + use: [{ + loader: 'raw-loader', + options: {} + }] + } + } + } + }) + } +} +``` + +```jsx +// 这是一个添加插件的例子 +{ + webpackChain (chain, webpack) { + chain.merge({ + plugin: { + install: { + plugin: require('npm-install-webpack-plugin'), + args: [{ + // Use --save or --save-dev + dev: false, + // Install missing peerDependencies + peerDependencies: true, + // Reduce amount of console logging + quiet: false, + // npm command used inside company, yarn is not supported yet + npm: 'cnpm' + }] + } + } + }) + } +} +``` + +#### mini.commonChunks + +配置打包时抽离的公共文件,如果是普通编译,则默认值为 `['runtime', 'vendors']`,如果是编译为微信小程序插件,则默认值为 `['plugin/runtime', 'plugin/vendors']`。 + +`commonChunks` 的配置值主要依据 webpack 配置 [`optimization.runtimeChunk`](https://webpack.js.org/configuration/optimization/#optimizationruntimechunk) 和 [`optimization.splitChunks`](https://webpack.js.org/plugins/split-chunks-plugin/),Taro 中默认的配置分别为 + + +```javascript +optimization: { + runtimeChunk: { + name: 'runtime' + }, + splitChunks: { + chunks: 'all', + maxInitialRequests: Infinity, + minSize: 0, + name: 'vendors', + cacheGroups: { + vendors: { + test (module) { + return /[\\/]node_modules[\\/]/.test(module.resource) && module.miniType !== PARSE_AST_TYPE.COMPONENT + } + } + } + } +} +``` + +如果有自行拆分公共文件的需求,请先通过 `webpackChain` 配置覆盖 `optimization.runtimeChunk` 与 `optimization.splitChunks` 配置,再通过 `commonChunks` 配置指定的公共入口文件。 + +### mini.cssLoaderOption + +css-loader 的附加配置。配置项参考[官方文档](https://github.com/webpack-contrib/css-loader),例如: + +```jsx +{ + cssLoaderOption: { + localIdentName: '[hash:base64]' + } +} +``` + +### mini.styleLoaderOption + +style-loader 的附加配置。配置项参考[官方文档](https://github.com/webpack-contrib/style-loader),例如: + +```jsx +{ + styleLoaderOption: { + insertAt: 'top' + } +} +``` + +### mini.sassLoaderOption + +sass-loader 的附加配置。配置项参考[官方文档](https://github.com/webpack-contrib/sass-loader),例如: + +```jsx +{ + sassLoaderOption: { + implementation: require("dart-sass") + } +} +``` + +### mini.lessLoaderOption + +less-loader 的附加配置。配置项参考[官方文档](https://github.com/webpack-contrib/less-loader),例如: + +```jsx +{ + lessLoaderOption: { + strictMath: true, + noIeCompat: true + } +} +``` + +### mini.stylusLoaderOption + +stylus-loader 的附加配置。配置项参考[官方文档](https://github.com/shama/stylus-loader)。 + +### mini.mediaUrlLoaderOption + +针对 `mp4 | webm | ogg | mp3 | wav | flac | aac` 文件的 url-loader 配置。配置项参考[官方文档](https://github.com/webpack-contrib/url-loader),例如: + +```jsx +{ + mediaUrlLoaderOption: { + limit: 8192 + } +} +``` + +### mini.fontUrlLoaderOption + +针对 `woff | woff2 | eot | ttf | otf` 文件的 url-loader 配置。配置项参考[官方文档](https://github.com/webpack-contrib/url-loader)。 + +### mini.imageUrlLoaderOption -配置一些小程序端用到的插件模块配置,例如 `postcss` 等。 +针对 `png | jpg | jpeg | gif | bpm | svg` 文件的 url-loader 配置。配置项参考[官方文档](https://github.com/webpack-contrib/url-loader)。 -#### weapp.module.postcss +### mini.miniCssExtractPluginOption + +`mini-css-extract-plugin` 的附加配置,在 `enableExtract` 为 `true` 的情况下生效。 +配置项参考[官方文档](https://github.com/webpack-contrib/mini-css-extract-plugin),例如: + +```jsx +{ + miniCssExtractPluginOption: { + filename: '[name].css', + chunkFilename: '[name].css' + } +} +``` + +### mini.postcss 配置 `postcss` 相关插件: @@ -399,36 +597,6 @@ h5 编译后的静态文件目录。 } ``` -### [DEPRECATED]h5.webpack - -自定义 Webpack 配置。这个配置项支持两种形式的配置: - -1. 如果该配置项以**对象**的形态呈现,Taro 将会使用 `webpack-merge` 将这个对象合并到默认的配置项中。 -例子: - -```jsx -webpack: { - resolve: { - alias: { - 'test': './test' - } - } -} -``` - -2. 如果该配置以**函数**的形态呈现,那这个函数将会接收到两个参数:默认配置(defaultConfig)和 Webpack 实例(webpack)。Taro 将会以该函数的返回值作为最终的 Webpack 配置。 - -例子: - -```jsx -webpack (defaultConfig, webpack) { - defaultConfig.plugins.push( - new webpack.EnvironmentPlugin(['NODE_ENV']) - ) - return defaultConfig -} -``` - ### h5.router 路由相关的配置,支持路由模式、路由基准路径以及自定义路由的配置。 @@ -634,11 +802,11 @@ stylus-loader 的附加配置。配置项参考[官方文档](https://github.com } ``` -### h5.module +### h5.postcss -配置一些 H5 端用到的插件模块配置,暂时只有 `postcss`。 +配置 H5 的 `postcss` 插件。 -#### h5.module.postcss.autoprefixer +#### h5.postcss.autoprefixer 可以进行 `autoprefixer` 的配置。配置项参考[官方文档](https://github.com/postcss/autoprefixer),例如: @@ -653,7 +821,7 @@ postcss: { } ``` -#### h5.module.postcss.pxtransform +#### h5.postcss.pxtransform 可以进行 `pxtransform` 的配置。配置项参考[官方文档](https://github.com/Pines-Cheng/postcss-pxtransform/),例如: @@ -668,7 +836,7 @@ postcss: { } ``` -#### h5.module.postcss.cssModules +#### h5.postcss.cssModules 可以进行 H5 端 CSS Modules 配置,配置如下: diff --git a/docs/config.md b/docs/config.md index da63b54c22d9..6b2d95cbb7fa 100644 --- a/docs/config.md +++ b/docs/config.md @@ -22,14 +22,14 @@ const config = { sourceRoot: 'src', // 项目产出目录 outputRoot: 'dist', - // 通用插件配置 - plugins: { - babel: { - sourceMap: true, - presets: ['env'], - plugins: ['transform-class-properties', 'transform-decorators-legacy', 'transform-object-rest-spread'] - } + // babel 编译配置 + babel: { + sourceMap: true, + presets: ['env'], + plugins: ['transform-class-properties', 'transform-decorators-legacy', 'transform-object-rest-spread'] }, + // 编译插件配置 + plugins: [], // 全局变量设置 defineConstants: {}, // 文件 copy 配置 @@ -40,18 +40,16 @@ const config = { } }, // 小程序端专用配置 - weapp: { - module: { - postcss: { - autoprefixer: { - enable: true - }, - // 小程序端样式引用本地资源内联配置 - url: { - enable: true, - config: { - limit: 10240 - } + mini: { + postcss: { + autoprefixer: { + enable: true + }, + // 小程序端样式引用本地资源内联配置 + url: { + enable: true, + config: { + limit: 10240 } } }, @@ -63,11 +61,9 @@ const config = { h5: { publicPath: '/', staticDirectory: 'static', - module: { - postcss: { - autoprefixer: { - enable: true - } + postcss: { + autoprefixer: { + enable: true } }, // 自定义 Webpack 配置 diff --git a/docs/debug-config.md b/docs/debug-config.md new file mode 100644 index 000000000000..238e792e9e7a --- /dev/null +++ b/docs/debug-config.md @@ -0,0 +1,99 @@ +--- +title: 单步调测配置 +--- + +> 通过本身 `VSCode` 提供的跨平台代码单步调测能力,能够极大提升基于 `Taro` 开发框架的应用开发速度,因其他平台已有比较成熟的工具可以使用,着重降低 Windows 平台配置复杂度。 + +## 一、开发环境搭建 + +首先准备 `Taro` 在 Windows 下的基础开发环境,详情如下(已有开发环境可略过): + +#### 1. 安装 Node.js +建议安装 `10.15` 以上版本,官方下载地址:[Node.js](https://nodejs.org/dist/v12.14.0/node-v12.14.0-x64.msi " node.js") + +#### 2. 安装 VSCode + +安装完最新 `VSCode` 后,建议安装如下插件: +- `ESlint` — 代码规范 +- `TSlint` — 语法检查 + +#### 3. Taro 源码下载 +下载地址:[Taro](https://github.com/NervJS/taro.git "Taro"),默认为 2.x 分支,如有需要,请切换到开发分支 + +#### 4. 全局安装 Node-sass 、Lerna 和 Rollup +```shell +npm i -g node-sass --sass_binary site=https://npm.taobao.org/mirrors/node_sass/ +yarn global add lerna +yarn global add rollup +``` +> Node-sass 比较特殊,建议提前进行安装,规避可能出现的各种异常错误。 + +#### 5. 源码依赖安装 +1.使用 `VSCode` 打开 `Taro` 源码目录,在根目录下执行 `yarn` ,安装项目所需依赖库(首次安装所花时间较长,请耐心等待) + +2.待 `yarn` 执行完毕后,执行 `yarn bootstrap` 解析子包之间的依赖关系 + +## 二、单步调试配置 + +#### 1. 拷贝测试项目 +进入 `taro cli` 目录,将需要调试的测试项目拷贝至根目录,以测试项目命名 `test` 为例 + +#### 2. 在测试项目中添加 `js` 入口 +进入测试项目根目录,新增 `debug.js` 调试入口文件,文件内容如下: +```javascript +const Builder = require('../dist/build').default +const appPath = process.cwd() +const builder = new Builder(appPath) + +builder.build({ + type: 'weapp', + watch: 'watch' + }) +``` +> 调试入口文件名可自定义设置 + +#### 3. 增加 VSCode 调试参数配置 +打开 `taro cli` 所在 Windows 文件夹,进入目录下的 `.vscode` 子目录,在 `lanuch.json` 文件中新增调试入口参数,设置如下: +```shell +{ + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "name": "debug.js", + "request": "launch", + "sourceMaps": true, + "args": [ + "--runInBand", + "-r", + "ts-node/register" + ], + "cwd": "${workspaceFolder}/packages/taro-cli/debug", + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen", + "program": "${workspaceFolder}/packages/taro-cli/test/debug.js" + } + ] +} +``` +> 若 `.vscode` 目录或 `lanuch.json` 文件不存在,需手动创建;同时 `name` 、`cwd` 、`program` 三个参数根据测试项目的实际名称、目录进行调整 + +#### 2. 编译子包 +在 `node.js` 调试过程中只能调用 `js` 文件,调试过程所依赖的 `taro` 子模块,需要进入子模块根目录,执行编译命令,将 `ts` 代码编译打包成 `js` 代码之后,才能进行调试,主要编译如下关键子包: + +| 模块名称 | 功能描述 | 编译方式 | +| :------------ |:---------------:| -----:| +| taro-cli | Taro开发工具转换总入口 | yarn dev | +| taroize | Taro小程序编译器,主要负责小程序转Taro | yarn dev | +| taro-mini-runner | Taro编译时,webpack插件化管理打包任务 | yarn dev | +| taro-transformer-wx | Taro解析模块,解析AST目录树 | yarn dev | + +#### 3.链接未发布的库 +为了测试代码更改效果,或依赖未正式发布的包,可通过软链接的方式,将最新代码链接到测试目录下进行测试,同时保持子模块的 `watch` 状态,可以实时更新修改代码,此处以 `taro-mini-runner` 举例: + +1.首先进入 `taro-mini-runner` 根目录,执行 `yarn link` 命令 + +2.进入测试项目 `test` 的根目录,执行 `Debug and Run` , `yarn link taro-mini-runner` 命令进行软链接 + +#### 4.启动调试 +在编译后的 `js` 文件中打断点,在 `VSCode` 左侧按钮列表中,选择启动调试 `Debug and Run` 按钮,在出现的选择框列表中,选择需要启动的测试项目,启动调试,即可开始单步调试。 \ No newline at end of file diff --git a/docs/react-native.md b/docs/react-native.md index 040317267b0a..e3dc17d6cec9 100644 --- a/docs/react-native.md +++ b/docs/react-native.md @@ -5,6 +5,8 @@ title: React Native 端开发流程 > 本篇主要讲解 Taro React Native 端 环境安装-开发-调试-打包-发布 原理及流程,React Native 开发前注意事项请看 [开发前注意](./before-dev-remind.html) > > 适配 RN 端可参考项目:[首个 Taro 多端统一实例 - 网易严选(小程序 + H5 + React Native) - By 趣店 FED](https://github.com/js-newbee/taro-yanxuan) +> +>Taro 从 2.0 开始,依赖的 React Native 版本由 0.55.4 升级为 0.59.9。 ## 简介 diff --git a/lerna.json b/lerna.json index 94f49f1b165e..829306494b29 100644 --- a/lerna.json +++ b/lerna.json @@ -30,7 +30,9 @@ "packages/taro-quickapp", "packages/taro-qq", "packages/taro-jd", + "packages/taro-runner-utils", "packages/taro-webpack-runner", + "packages/taro-mini-runner", "packages/postcss-plugin-constparse", "packages/eslint-config-taro", "packages/eslint-plugin-taro", @@ -54,6 +56,6 @@ "message": "chore(release): publish %s" } }, - "version": "1.3.34", + "version": "2.0.0-beta.13", "npmClient": "npm" } diff --git a/package.json b/package.json index 12839a36e0c5..c91f49309aaf 100644 --- a/package.json +++ b/package.json @@ -93,7 +93,7 @@ "rollup-plugin-buble": "^0.19.2", "rollup-plugin-commonjs": "^9.1.0", "rollup-plugin-node-resolve": "^3.3.0", - "rollup-plugin-postcss": "^1.6.1", + "rollup-plugin-postcss": "^2.0.3", "sass-loader": "^6.0.7", "shelljs": "^0.8.1", "style-loader": "^0.20.3", diff --git a/packages/babel-plugin-transform-jsx-to-stylesheet/package.json b/packages/babel-plugin-transform-jsx-to-stylesheet/package.json index e2e4cb8e2696..cd7f6bf18f3b 100644 --- a/packages/babel-plugin-transform-jsx-to-stylesheet/package.json +++ b/packages/babel-plugin-transform-jsx-to-stylesheet/package.json @@ -1,6 +1,6 @@ { "name": "babel-plugin-transform-jsx-to-stylesheet", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "Transform stylesheet selector to style in JSX Elements.", "license": "MIT", "main": "src/index.js", diff --git a/packages/babel-plugin-transform-taroapi/package.json b/packages/babel-plugin-transform-taroapi/package.json index 16b5059b0bbd..5b732bc56b03 100644 --- a/packages/babel-plugin-transform-taroapi/package.json +++ b/packages/babel-plugin-transform-taroapi/package.json @@ -1,6 +1,6 @@ { "name": "babel-plugin-transform-taroapi", - "version": "1.3.34", + "version": "2.0.0-beta.13", "main": "dist/index.js", "license": "MIT", "scripts": { @@ -10,7 +10,7 @@ "test": "jest" }, "devDependencies": { - "@tarojs/taro-h5": "1.3.34", + "@tarojs/taro-h5": "2.0.0-beta.13", "@types/babel-core": "^6.25.5", "@types/babel-traverse": "^6.25.4", "@types/babel-types": "^7.0.4", diff --git a/packages/css-to-react-native/package.json b/packages/css-to-react-native/package.json index 2c3a954b2aad..6017fb6db1d4 100644 --- a/packages/css-to-react-native/package.json +++ b/packages/css-to-react-native/package.json @@ -1,7 +1,7 @@ { "name": "taro-css-to-react-native", "description": "Convert CSS text to a React Native stylesheet object", - "version": "1.3.34", + "version": "2.0.0-beta.13", "main": "dist/index.js", "license": "MIT", "scripts": { diff --git a/packages/eslint-config-taro/package.json b/packages/eslint-config-taro/package.json index 450dedff6b49..2e9a16f56889 100644 --- a/packages/eslint-config-taro/package.json +++ b/packages/eslint-config-taro/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-taro", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "Taro specific linting rules for ESLint", "main": "index.js", "files": [ @@ -28,6 +28,6 @@ "author": "O2Team", "license": "MIT", "dependencies": { - "eslint-plugin-taro": "1.3.34" + "eslint-plugin-taro": "2.0.0-beta.13" } } diff --git a/packages/eslint-plugin-taro/package.json b/packages/eslint-plugin-taro/package.json index a5dca8573d70..82fef4280ccb 100644 --- a/packages/eslint-plugin-taro/package.json +++ b/packages/eslint-plugin-taro/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-taro", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "Taro specific linting plugin for ESLint", "main": "index.js", "files": [ diff --git a/packages/postcss-plugin-constparse/package.json b/packages/postcss-plugin-constparse/package.json index c61b7bc46a56..d491a52921be 100644 --- a/packages/postcss-plugin-constparse/package.json +++ b/packages/postcss-plugin-constparse/package.json @@ -1,6 +1,6 @@ { "name": "postcss-plugin-constparse", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "parse constants defined in config", "main": "index.js", "author": "Simba", diff --git a/packages/postcss-pxtransform/package.json b/packages/postcss-pxtransform/package.json index e06a3971dad4..873733b55641 100644 --- a/packages/postcss-pxtransform/package.json +++ b/packages/postcss-pxtransform/package.json @@ -1,6 +1,6 @@ { "name": "postcss-pxtransform", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "PostCSS plugin px 转小程序 rpx及h5 rem 单位", "keywords": [ "postcss", diff --git a/packages/postcss-unit-transform/package.json b/packages/postcss-unit-transform/package.json index 74357f25e1d4..97946ce6a6c9 100644 --- a/packages/postcss-unit-transform/package.json +++ b/packages/postcss-unit-transform/package.json @@ -1,6 +1,6 @@ { "name": "postcss-taro-unit-transform", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "小程序单位转换", "main": "index.js", "scripts": { diff --git a/packages/stylelint-config-taro-rn/package.json b/packages/stylelint-config-taro-rn/package.json index 4342c8990010..0e940ecced5a 100644 --- a/packages/stylelint-config-taro-rn/package.json +++ b/packages/stylelint-config-taro-rn/package.json @@ -1,6 +1,6 @@ { "name": "stylelint-config-taro-rn", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "Shareable stylelint config for React Native CSS modules", "main": "index.js", "files": [ @@ -28,6 +28,6 @@ "jest": "^23.6.0", "npmpub": "^4.1.0", "stylelint": "9.3.0", - "stylelint-taro-rn": "1.3.34" + "stylelint-taro-rn": "2.0.0-beta.13" } } diff --git a/packages/stylelint-taro-rn/package.json b/packages/stylelint-taro-rn/package.json index 7a6d038da441..58efc5afd704 100644 --- a/packages/stylelint-taro-rn/package.json +++ b/packages/stylelint-taro-rn/package.json @@ -1,7 +1,7 @@ { "name": "stylelint-taro-rn", "description": "A collection of React Native specific rules for stylelint", - "version": "1.3.34", + "version": "2.0.0-beta.13", "main": "dist/index.js", "babel": { "presets": [ @@ -84,7 +84,7 @@ "babel-core": "^6.26.3", "babel-plugin-istanbul": "^5.1.0", "babel-preset-es2015": "^6.24.1", - "babel-preset-jest": "23.2.0", + "babel-preset-jest": "25.0.0", "coveralls": "^3.0.2", "eslint": "^5.9.0", "eslint-config-stylelint": "^11.0.0", diff --git a/packages/taro-alipay/package.json b/packages/taro-alipay/package.json index 42b2d1684433..72a0cb1e5d40 100644 --- a/packages/taro-alipay/package.json +++ b/packages/taro-alipay/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/taro-alipay", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "Taro alipay framework", "main": "index.js", "files": [ @@ -24,8 +24,8 @@ "author": "O2Team", "license": "MIT", "dependencies": { - "@tarojs/taro": "1.3.34", - "@tarojs/utils": "1.3.34", + "@tarojs/taro": "2.0.0-beta.13", + "@tarojs/utils": "2.0.0-beta.13", "lodash": "^4.17.10", "prop-types": "^15.6.1" } diff --git a/packages/taro-async-await/package.json b/packages/taro-async-await/package.json index 523e17df6f84..1e1cd2dc9341 100644 --- a/packages/taro-async-await/package.json +++ b/packages/taro-async-await/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/async-await", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "taro async await", "main": "index.js", "scripts": { diff --git a/packages/taro-cli/bin/taro b/packages/taro-cli/bin/taro index abd2d2d4ddf4..3399b611dca0 100755 --- a/packages/taro-cli/bin/taro +++ b/packages/taro-cli/bin/taro @@ -1,9 +1,10 @@ #! /usr/bin/env node const program = require('commander') -const { getPkgVersion, printPkgVersion } = require('../dist/util') +const { getPkgVersion, printPkgVersion, printVersionTip } = require('../dist/util') printPkgVersion() +printVersionTip() program .version(getPkgVersion()) diff --git a/packages/taro-cli/bin/taro-build b/packages/taro-cli/bin/taro-build index 08d2ea63afc2..e08cc1e56841 100755 --- a/packages/taro-cli/bin/taro-build +++ b/packages/taro-cli/bin/taro-build @@ -5,7 +5,7 @@ const program = require('commander') const chalk = require('chalk') const _ = require('lodash') -const build = require('../dist/build').default +const Builder = require('../dist/build').default const { PROJECT_CONFIG, BUILD_TYPES } = require('../dist/util/constants') const appPath = process.cwd() const projectConfPath = path.join(appPath, PROJECT_CONFIG) @@ -37,10 +37,13 @@ if (env) { process.env.NODE_ENV = 'production' } } +process.env.TARO_ENV = type + +const builder = new Builder(appPath) if (ui) { console.log(chalk.green(`开始编译 UI 库`)) - build(appPath, { + builder.build({ type: 'ui', watch, uiIndex @@ -52,7 +55,7 @@ if (plugin) { if (typeof plugin === 'boolean') { plugin = BUILD_TYPES.WEAPP } - build(appPath, { + builder.build({ type: BUILD_TYPES.PLUGIN, platform: plugin, watch @@ -65,8 +68,6 @@ if (!fs.existsSync(projectConfPath)) { process.exit(1) } -process.env.TARO_ENV = type - const projectConf = require(projectConfPath)(_.merge) if (typeof page === 'string') { console.log(chalk.green(`开始编译页面 ${chalk.bold(page)}`)) @@ -76,7 +77,7 @@ if (typeof page === 'string') { console.log(chalk.green(`开始编译项目 ${chalk.bold(projectConf.projectName)}`)) } -build(appPath, { +builder.build({ type, watch, port: typeof port === 'string' ? port: undefined, diff --git a/packages/taro-cli/bin/taro-config b/packages/taro-cli/bin/taro-config index 79b19239901e..d81b6c0bf271 100755 --- a/packages/taro-cli/bin/taro-config +++ b/packages/taro-cli/bin/taro-config @@ -4,6 +4,8 @@ const program = require('commander') const helper = require('../dist/taro-config') program + .name('taro config') + .usage(' [options]') .option('--json', '以 JSON 形式输出') .on('--help', function () { console.log('') @@ -22,15 +24,15 @@ const [cmd, key, value] = args switch (cmd) { case 'get': - if (!key) return + if (!key) return console.log('Usage: taro config get foo') helper.get(key) break case 'set': - if (!key || !value) return + if (!key || !value) return console.log('Usage: taro config set foo bar') helper.set(key, value) break case 'delete': - if (!key) return + if (!key) return console.log('Usage: taro config delete foo') helper.deleteKey(key) break case 'list': @@ -38,5 +40,6 @@ switch (cmd) { helper.list(json) break default: + program.help() break } diff --git a/packages/taro-cli/package.json b/packages/taro-cli/package.json index e14b8e286a88..79edcb3c65ac 100644 --- a/packages/taro-cli/package.json +++ b/packages/taro-cli/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/cli", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "cli tool for taro", "main": "index.js", "scripts": { @@ -40,8 +40,8 @@ "author": "O2Team", "license": "MIT", "dependencies": { - "@tarojs/taroize": "1.3.34", - "@tarojs/transformer-wx": "1.3.34", + "@tarojs/taroize": "2.0.0-beta.13", + "@tarojs/transformer-wx": "2.0.0-beta.13", "@types/request": "^2.48.1", "@typescript-eslint/parser": "^2.0.0", "adm-zip": "^0.4.13", @@ -54,7 +54,7 @@ "babel-plugin-remove-dead-code": "^1.3.2", "babel-plugin-transform-decorators-legacy": "^1.3.4", "babel-plugin-transform-define": "^1.3.0", - "babel-plugin-transform-jsx-to-stylesheet": "1.3.34", + "babel-plugin-transform-jsx-to-stylesheet": "2.0.0-beta.13", "babel-plugin-transform-react-jsx": "^6.24.1", "babel-plugin-transform-taroapi": "1.3.15", "babel-template": "^6.26.0", @@ -70,21 +70,21 @@ "css-to-react-native-transform": "^1.4.0", "css-what": "^3.2.0", "download-git-repo": "^2.0.0", - "ejs": "^2.6.1", + "ejs": "^3.0.1", "envinfo": "^6.0.1", "eslint": "^6.1.0", - "eslint-config-taro": "1.3.34", + "eslint-config-taro": "2.0.0-beta.13", "eslint-plugin-import": "^2.8.0", "eslint-plugin-react": "^7.4.0", "eslint-plugin-react-hooks": "^1.6.1", - "eslint-plugin-taro": "1.3.34", + "eslint-plugin-taro": "2.0.0-beta.13", "eslint-plugin-typescript": "^0.12.0", "fbjs": "^1.0.0", "find-yarn-workspace-root": "1.2.1", "fs-extra": "^5.0.0", "generic-names": "^2.0.1", "glob": "^7.1.2", - "inquirer": "^7.0.0", + "inquirer": "^5.2.0", "joi": "^14.0.6", "klaw": "^3.0.0", "latest-version": "^4.0.0", @@ -96,11 +96,11 @@ "ora": "^2.0.0", "postcss": "^6.0.22", "postcss-modules-extract-imports": "^1.1.0", - "postcss-modules-local-by-default": "^3.0.2", + "postcss-modules-local-by-default": "^1.2.0", "postcss-modules-resolve-imports": "^1.3.0", "postcss-modules-scope": "^1.1.0", - "postcss-modules-values": "^3.0.0", - "postcss-pxtransform": "1.3.34", + "postcss-modules-values": "^1.3.0", + "postcss-pxtransform": "2.0.0-beta.13", "postcss-reporter": "^6.0.1", "postcss-taro-unit-transform": "1.2.15", "postcss-url": "^7.3.2", @@ -112,9 +112,10 @@ "semver": "^5.5.0", "shelljs": "^0.8.1", "stylelint": "9.3.0", - "stylelint-config-taro-rn": "1.3.34", - "stylelint-taro-rn": "1.3.34", - "taro-css-to-react-native": "1.3.34", + "stylelint-config-taro-rn": "2.0.0-beta.13", + "stylelint-taro-rn": "2.0.0-beta.13", + "tapable": "^1.1.3", + "taro-css-to-react-native": "2.0.0-beta.13", "through2": "^2.0.3", "vinyl": "^2.1.0", "vinyl-fs": "^3.0.2", @@ -123,7 +124,7 @@ "yauzl": "2.10.0" }, "devDependencies": { - "@tarojs/taro": "1.3.34", + "@tarojs/taro": "2.0.0-beta.13", "@types/autoprefixer": "^9.1.1", "@types/babel-core": "^6.25.5", "@types/babel-generator": "^6.25.2", @@ -135,7 +136,9 @@ "@types/klaw": "^3.0.0", "@types/lodash": "^4.14.119", "@types/node": "^10.12.18", + "@types/react": "^16.9.14", "@types/shelljs": "^0.8.5", + "@types/tapable": "^1.0.4", "babel-jest": "^23.6.0", "babel-plugin-transform-class-properties": "^6.24.1", "babel-preset-env": "^1.7.0", @@ -144,7 +147,7 @@ "jest": "^23.6.0", "jest-react-native": "^18.0.0", "npm-run-all": "^4.1.5", - "react-native": "^0.55.4", + "react-native": "^0.59.9", "tslint": "^5.12.0", "tslint-config-prettier": "^1.17.0", "tslint-config-standard": "^8.0.1", diff --git a/packages/taro-cli/src/build.ts b/packages/taro-cli/src/build.ts index a4b0bd36f0b0..b6bdc57f7a55 100644 --- a/packages/taro-cli/src/build.ts +++ b/packages/taro-cli/src/build.ts @@ -1,131 +1,121 @@ import * as path from 'path' import * as fs from 'fs-extra' -import chalk from 'chalk' +import { SyncHook, Hook } from 'tapable' import * as _ from 'lodash' +import chalk from 'chalk' +import { IProjectConfig, ICommonPlugin } from '@tarojs/taro/types/compile' -import * as Util from './util' -import CONFIG from './config' import { BUILD_TYPES, PROJECT_CONFIG } from './util/constants' -import { IBuildConfig } from './util/types' +import { IBuildOptions } from './util/types' +import { emptyDirectory } from './util' +import CONFIG from './config' -export default async function build (appPath, buildConfig: IBuildConfig) { - const { type, watch, platform, port, release, page, component, uiIndex } = buildConfig - const configDir = require(path.join(appPath, PROJECT_CONFIG))(_.merge) - const outputPath = path.join(appPath, configDir.outputRoot || CONFIG.OUTPUT_DIR) - if (!fs.existsSync(outputPath)) { - fs.ensureDirSync(outputPath) - } else if (type !== BUILD_TYPES.H5 && (type !== BUILD_TYPES.QUICKAPP || !watch)) { - Util.emptyDirectory(outputPath) - } - switch (type) { - case BUILD_TYPES.H5: - buildForH5(appPath, { watch, port }) - break - case BUILD_TYPES.WEAPP: - buildForWeapp(appPath, { watch, page, component }) - break - case BUILD_TYPES.SWAN: - buildForSwan(appPath, { watch, page, component }) - break - case BUILD_TYPES.ALIPAY: - buildForAlipay(appPath, { watch, page, component }) - break - case BUILD_TYPES.TT: - buildForTt(appPath, { watch, page, component }) - break - case BUILD_TYPES.RN: - buildForRN(appPath, { watch }) - break - case BUILD_TYPES.QUICKAPP: - buildForQuickApp(appPath, { watch, port, release }) - break - case BUILD_TYPES.QQ: - buildForQQ(appPath, { watch, page, component }) - break - case BUILD_TYPES.JD: - buildForJD(appPath, { watch }) - break - case BUILD_TYPES.UI: - buildForUILibrary(appPath, { watch, uiIndex }) - break - case BUILD_TYPES.PLUGIN: - buildForPlugin(appPath, { - watch, - platform - }) - break - default: - console.log(chalk.red('输入类型错误,目前只支持 weapp/swan/alipay/tt/h5/quickapp/rn 七端类型')) - } +interface IBuilderHooks { + beforeBuild: Hook, + afterBuild: Hook } -function buildForWeapp (appPath: string, buildConfig: IBuildConfig) { - require('./mini').build(appPath, Object.assign({ - adapter: BUILD_TYPES.WEAPP - }, buildConfig)) -} +export default class Builder { + hooks: IBuilderHooks + appPath: string + config: IProjectConfig + constructor (appPath: string) { + this.hooks = { + beforeBuild: new SyncHook(['config']), + afterBuild: new SyncHook(['builder']) + } -function buildForSwan (appPath: string, buildConfig: IBuildConfig) { - require('./mini').build(appPath, Object.assign({ - adapter: BUILD_TYPES.SWAN - }, buildConfig)) -} + this.appPath = appPath + this.init() + } -function buildForAlipay (appPath: string, buildConfig: IBuildConfig) { - require('./mini').build(appPath, Object.assign({ - adapter: BUILD_TYPES.ALIPAY - }, buildConfig)) -} + init () { + this.resolveConfig() + this.applyPlugins() + } -function buildForTt (appPath: string, buildConfig: IBuildConfig) { - require('./mini').build(appPath, Object.assign({ - adapter: BUILD_TYPES.TT - }, buildConfig)) -} + resolveConfig () { + this.config = require(path.join(this.appPath, PROJECT_CONFIG))(_.merge) + } -function buildForH5 (appPath: string, buildConfig: IBuildConfig) { - require('./h5').build(appPath, buildConfig) -} + applyPlugins () { + const plugins = this.config.plugins || [] + if (plugins.length) { + plugins.forEach((plugin: ICommonPlugin) => { + plugin.apply(this) + }) + } + } -function buildForRN (appPath: string, { watch }: IBuildConfig) { - require('./rn').build(appPath, { watch }) -} + emptyFirst ({ watch, type }) { + const outputPath = path.join(this.appPath, `${this.config.outputRoot || CONFIG.OUTPUT_DIR}`) + if (!fs.existsSync(outputPath)) { + fs.ensureDirSync(outputPath) + } else if (type !== BUILD_TYPES.H5 && (type !== BUILD_TYPES.QUICKAPP || !watch)) { + emptyDirectory(outputPath) + } + } -function buildForQuickApp (appPath: string, { watch, port, release }: IBuildConfig) { - require('./mini').build(appPath, { - watch, - adapter: BUILD_TYPES.QUICKAPP, - port, - release - }) -} + build (buildOptions: IBuildOptions) { + this.hooks.beforeBuild.call(this.config) + const { type, watch, platform, port, uiIndex } = buildOptions + this.emptyFirst({ type, watch }) + switch (type) { + case BUILD_TYPES.H5: + this.buildForH5(this.appPath, { watch, port }) + break + case BUILD_TYPES.WEAPP: + case BUILD_TYPES.SWAN: + case BUILD_TYPES.ALIPAY: + case BUILD_TYPES.TT: + case BUILD_TYPES.QUICKAPP: + case BUILD_TYPES.QQ: + case BUILD_TYPES.JD: + this.buildForMini(this.appPath, buildOptions) + break + case BUILD_TYPES.RN: + this.buildForRN(this.appPath, { watch }) + break + case BUILD_TYPES.UI: + this.buildForUILibrary(this.appPath, { watch, uiIndex }) + break + case BUILD_TYPES.PLUGIN: + this.buildForPlugin(this.appPath, { + watch, + platform + }) + break + default: + console.log(chalk.red('输入类型错误,目前只支持 weapp/swan/alipay/tt/qq/h5/quickapp/rn 八端类型')) + } + } -function buildForQQ (appPath: string, buildConfig: IBuildConfig) { - require('./mini').build(appPath, Object.assign({ - adapter: BUILD_TYPES.QQ - }, buildConfig)) -} + buildForH5 (appPath: string, buildOptions: IBuildOptions) { + require('./h5').build(appPath, buildOptions) + } -function buildForJD (appPath: string, { watch }: IBuildConfig) { - require('./mini').build(appPath, { - watch, - adapter: BUILD_TYPES.JD - }) -} + buildForMini (appPath: string, buildOptions: IBuildOptions) { + require('./mini').build(appPath, buildOptions, null, this) + } -function buildForUILibrary (appPath: string, { watch, uiIndex }: IBuildConfig) { - require('./ui/index').build(appPath, { watch, uiIndex }) -} + buildForRN (appPath: string, { watch }) { + require('./rn').build(appPath, { watch }) + } -function buildForPlugin (appPath: string, { watch, platform }) { - const typeMap = { - [BUILD_TYPES.WEAPP]: '微信', - [BUILD_TYPES.ALIPAY]: '支付宝' + buildForUILibrary (appPath: string, { watch, uiIndex }) { + require('./ui/index').build(appPath, { watch, uiIndex }) } - if (platform !== BUILD_TYPES.WEAPP && platform !== BUILD_TYPES.ALIPAY) { - console.log(chalk.red('目前插件编译仅支持 微信/支付宝 小程序!')) - return + + buildForPlugin (appPath: string, { watch, platform }) { + const typeMap = { + [BUILD_TYPES.WEAPP]: '微信', + [BUILD_TYPES.ALIPAY]: '支付宝' + } + if (platform !== BUILD_TYPES.WEAPP && platform !== BUILD_TYPES.ALIPAY) { + console.log(chalk.red('目前插件编译仅支持 微信/支付宝 小程序!')) + return + } + console.log(chalk.green(`开始编译${typeMap[platform]}小程序插件`)) + require('./plugin').build(appPath, { watch, platform }, this) } - console.log(chalk.green(`开始编译${typeMap[platform]}小程序插件`)) - require('./plugin').build(appPath, { watch, platform }) } diff --git a/packages/taro-cli/src/config/uglify.ts b/packages/taro-cli/src/config/uglify.ts deleted file mode 100644 index 43ea6b431bb8..000000000000 --- a/packages/taro-cli/src/config/uglify.ts +++ /dev/null @@ -1 +0,0 @@ -export default { } diff --git a/packages/taro-cli/src/convertor/index.ts b/packages/taro-cli/src/convertor/index.ts index 0f55b6c1d1dc..dc6d0147c07a 100644 --- a/packages/taro-cli/src/convertor/index.ts +++ b/packages/taro-cli/src/convertor/index.ts @@ -7,7 +7,7 @@ import * as prettier from 'prettier' import traverse, { NodePath } from 'babel-traverse' import * as t from 'babel-types' import * as taroize from '@tarojs/taroize' -import * as wxTransformer from '@tarojs/transformer-wx' +import wxTransformer from '@tarojs/transformer-wx' import * as postcss from 'postcss' import * as unitTransform from 'postcss-taro-unit-transform' @@ -407,7 +407,6 @@ export default class Convertor { const transformResult = wxTransformer({ code, sourcePath: file, - outputPath: outputFilePath, isNormal: true, isTyped: REG_TYPESCRIPT.test(file) }) diff --git a/packages/taro-cli/src/doctor/configSchema.ts b/packages/taro-cli/src/doctor/configSchema.ts index c7575888d2e2..94b657dcccdf 100644 --- a/packages/taro-cli/src/doctor/configSchema.ts +++ b/packages/taro-cli/src/doctor/configSchema.ts @@ -10,10 +10,7 @@ const schema = Joi.object().keys({ 'sourceRoot': Joi.string().required(), 'outputRoot': Joi.string().required(), - // NOTE: 考虑是否增加第三方模块的配置检查 - 'plugins': Joi.object().pattern( - Joi.string(), Joi.object() - ), + 'plugins': Joi.array().items(Joi.object()), 'env': Joi.object().pattern( Joi.string(), Joi.string() @@ -35,12 +32,29 @@ const schema = Joi.object().keys({ }) }), - 'weapp': Joi.object().keys({ + 'mini': Joi.object().keys({ 'compile': Joi.object().keys({ 'exclude': Joi.array().items(Joi.string()), 'include': Joi.array().items(Joi.string()) }), - 'module': Joi.object(), // 第三方配置 + 'customFilesTypes': Joi.object().keys({ + 'TEMPL': Joi.string(), + 'STYLE': Joi.string(), + 'SCRIPT': Joi.string(), + 'CONFIG': Joi.string() + }), + 'webpackChain': Joi.func(), + 'output': Joi.object(), + 'postcss': Joi.object(), // 第三方配置 + 'cssLoaderOption': Joi.object(), // 第三方配置 + 'styleLoaderOption': Joi.object(), // 第三方配置 + 'sassLoaderOption': Joi.object(), // 第三方配置 + 'lessLoaderOption': Joi.object(), // 第三方配置 + 'stylusLoaderOption': Joi.object(), // 第三方配置 + 'mediaUrlLoaderOption': Joi.object(), // 第三方配置 + 'fontUrlLoaderOption': Joi.object(), // 第三方配置 + 'imageUrlLoaderOption': Joi.object(), // 第三方配置 + 'miniCssExtractPluginOption': Joi.object(), // 第三方配置 'jsxAttributeNameReplace': Joi.object().pattern( Joi.string(), Joi.string() ) @@ -50,12 +64,27 @@ const schema = Joi.object().keys({ Joi.string(), Joi.string() ), + 'babel': Joi.object(), + 'csso': Joi.object().keys({ + 'enable': Joi.bool(), + 'config': Joi.object() + }), + 'uglify': Joi.object().keys({ + 'enable': Joi.bool(), + 'config': Joi.object() + }), + 'sass': Joi.object().keys({ + 'enable': Joi.bool(), + 'config': Joi.object() + }), + 'h5': Joi.object().keys({ 'devServer': Joi.object(), // 第三方配置 'publicPath': Joi.string(), 'staticDirectory': Joi.string(), 'chunkDirectory': Joi.string(), 'webpackChain': Joi.func(), + 'output': Joi.object(), 'esnextModules': Joi.array().items(Joi.string()), @@ -84,6 +113,7 @@ const schema = Joi.object().keys({ ), 'enableSourceMap': Joi.bool(), 'enableExtract': Joi.bool(), + 'transformOnly': Joi.bool(), 'cssLoaderOption': Joi.object(), // 第三方配置 'styleLoaderOption': Joi.object(), // 第三方配置 'sassLoaderOption': Joi.object(), // 第三方配置 @@ -94,15 +124,13 @@ const schema = Joi.object().keys({ 'imageUrlLoaderOption': Joi.object(), // 第三方配置 'miniCssExtractPluginOption': Joi.object(), // 第三方配置 - 'module': Joi.object().keys({ - 'postcss': Joi.object().pattern( - Joi.string(), - Joi.object().keys({ - 'enable': Joi.bool(), - 'config': Joi.object() // 第三方配置 - }) - ) - }) + 'postcss': Joi.object().pattern( + Joi.string(), + Joi.object().keys({ + 'enable': Joi.bool(), + 'config': Joi.object() // 第三方配置 + }) + ) }) }) diff --git a/packages/taro-cli/src/h5/index.ts b/packages/taro-cli/src/h5/index.ts index 92197c37f01e..3345e89a0de1 100644 --- a/packages/taro-cli/src/h5/index.ts +++ b/packages/taro-cli/src/h5/index.ts @@ -1,5 +1,6 @@ import { PageConfig } from '@tarojs/taro' -import * as wxTransformer from '@tarojs/transformer-wx' +import { IProjectConfig, IH5Config, IH5RouterConfig, IDeviceRatio } from '@tarojs/taro/types/compile' +import wxTransformer from '@tarojs/transformer-wx' import * as babel from 'babel-core' import traverse, { NodePath, TraverseOptions } from 'babel-traverse' import * as t from 'babel-types' @@ -31,7 +32,7 @@ import { } from '../util/astConvert' import { BUILD_TYPES, processTypeEnum, PROJECT_CONFIG, REG_SCRIPTS, REG_TYPESCRIPT } from '../util/constants' import * as npmProcess from '../util/npm' -import { IBuildConfig, IDeviceRatio, IH5Config, IH5RouterConfig, IOption, IProjectConfig } from '../util/types' +import { IBuildOptions, IOption } from '../util/types' import { APIS_NEED_TO_APPEND_THIS, deviceRatioConfigName, @@ -189,7 +190,7 @@ class Compiler { return Promise.all(readPromises) } - async buildDist ({ watch, port }: IBuildConfig) { + async buildDist ({ watch, port }: IBuildOptions) { const isMultiRouterMode = get(this.h5Config, 'router.mode') === 'multi' const entryFileName = this.entryFileName const projectConfig = this.projectConfig @@ -233,6 +234,10 @@ class Compiler { }, isWatch: !!watch, outputRoot: outputDir, + babel: projectConfig.babel, + csso: projectConfig.csso, + uglify: projectConfig.uglify, + sass: projectConfig.sass, plugins: projectConfig.plugins, port, sourceRoot @@ -1451,7 +1456,7 @@ class Compiler { export { Compiler } -export async function build (appPath: string, buildConfig: IBuildConfig) { +export async function build (appPath: string, buildConfig: IBuildOptions) { process.env.TARO_ENV = BUILD_TYPES.H5 await checkCliAndFrameworkVersion(appPath, BUILD_TYPES.H5) const compiler = new Compiler(appPath) diff --git a/packages/taro-cli/src/index.ts b/packages/taro-cli/src/index.ts index 3073694620dc..b99811b576ec 100644 --- a/packages/taro-cli/src/index.ts +++ b/packages/taro-cli/src/index.ts @@ -1,12 +1,12 @@ import Convertor from './convertor' -import build from './build' +import Builder from './build' import doctor from './doctor' import Project from './create/project' import { Compiler as H5Compiler } from './h5/index' export default { Convertor, - build, + Builder, doctor, Project, H5Compiler @@ -14,7 +14,7 @@ export default { export { Convertor, - build, + Builder, doctor, Project, H5Compiler diff --git a/packages/taro-cli/src/mini/astProcess.ts b/packages/taro-cli/src/mini/astProcess.ts deleted file mode 100644 index 5f91df8f3fc5..000000000000 --- a/packages/taro-cli/src/mini/astProcess.ts +++ /dev/null @@ -1,1085 +0,0 @@ -import * as fs from 'fs-extra' -import * as path from 'path' - -import * as babel from 'babel-core' -import * as t from 'babel-types' -import generate from 'babel-generator' -import traverse, { NodePath } from 'babel-traverse' -import * as _ from 'lodash' -import { Config as IConfig } from '@tarojs/taro' -import getHashName from '../util/hash' - -const template = require('babel-template') - -import { - REG_SCRIPT, - REG_TYPESCRIPT, - REG_JSON, - REG_FONT, - REG_IMAGE, - REG_MEDIA, - REG_STYLE, - CSS_EXT, - processTypeEnum, - BUILD_TYPES, - NODE_MODULES_REG, - PARSE_AST_TYPE, - taroJsComponents, - taroJsRedux, - taroJsFramework, - DEVICE_RATIO_NAME -} from '../util/constants' -import { - resolveScriptPath, - printLog, - promoteRelativePath, - isNpmPkg, - isAliasPath, - replaceAliasPath, - traverseObjectNode, - isQuickappPkg, - getBabelConfig, - extnameExpRegOf, - generateAlipayPath -} from '../util' -import { - convertObjectToAstExpression, - convertArrayToAstExpression, - convertSourceStringToAstExpression -} from '../util/astConvert' -import babylonConfig from '../config/babylon' -import { getExactedNpmFilePath, getNotExistNpmList } from '../util/npmExact' -import { excludeReplaceTaroFrameworkPkgs } from '../util/resolve_npm_files' - -import { IComponentObj } from './interface' -import { - getBuildData, - isFileToBePage -} from './helper' -import { processStyleUseCssModule } from './compileStyle' -import { QUICKAPP_SPECIAL_COMPONENTS } from './constants' - -function generateCssModuleMapFilename (styleFilePath) { - const { - sourceDir, - outputDir, - nodeModulesPath, - npmOutputDir - } = getBuildData() - const cssModuleMapFilename = path.basename(styleFilePath) + '.map.js' - let cssModuleMapFile - if (NODE_MODULES_REG.test(styleFilePath)) { - cssModuleMapFile = path.join(path.dirname(styleFilePath), cssModuleMapFilename).replace(nodeModulesPath, npmOutputDir) - } else { - cssModuleMapFile = path.join(path.dirname(styleFilePath), cssModuleMapFilename).replace(sourceDir, outputDir) - } - return cssModuleMapFile -} - -function createCssModuleMap (styleFilePath, tokens) { - const cssModuleMapFile = generateCssModuleMapFilename(styleFilePath) - printLog(processTypeEnum.GENERATE, 'CSS Modules map', cssModuleMapFile) - fs.ensureDirSync(path.dirname(cssModuleMapFile)) - fs.writeFileSync(cssModuleMapFile, `module.exports = ${JSON.stringify(tokens, null, 2)};\n`) -} - -interface IAnalyzeImportUrlOptions { - astPath: any, - value: string, - sourceFilePath: string, - filePath: string, - styleFiles: string[], - scriptFiles: string[], - jsonFiles: string[], - mediaFiles: string[] -} - -function analyzeImportUrl ({ - astPath, - value, - sourceFilePath, - filePath, - styleFiles, - scriptFiles, - jsonFiles, - mediaFiles -}: IAnalyzeImportUrlOptions): void { - const valueExtname = path.extname(value) - const node = astPath.node - const { - nodeModulesPath, - npmOutputDir, - sourceDir, - outputDir, - npmConfig, - projectConfig, - buildAdapter - } = getBuildData() - const publicPath = (projectConfig.weapp || ({} as any)).publicPath - if (value.indexOf('.') === 0) { - let importPath = path.resolve(path.dirname(sourceFilePath), value) - importPath = resolveScriptPath(importPath) - if (isFileToBePage(importPath)) { - astPath.remove() - } else { - if (REG_SCRIPT.test(valueExtname) || REG_TYPESCRIPT.test(valueExtname)) { - const vpath = path.resolve(sourceFilePath, '..', value) - let fPath = value - if (fs.existsSync(vpath) && vpath !== sourceFilePath) { - fPath = vpath - } - if (scriptFiles.indexOf(fPath) < 0) { - scriptFiles.push(fPath) - } - node.source.value = value.replace(valueExtname, '.js') - } else if (REG_JSON.test(valueExtname)) { - const vpath = path.resolve(sourceFilePath, '..', value) - if (jsonFiles.indexOf(vpath) < 0) { - jsonFiles.push(vpath) - } - if (fs.existsSync(vpath)) { - const obj = JSON.parse(fs.readFileSync(vpath).toString()) - const specifiers = node.specifiers - let defaultSpecifier = null - specifiers.forEach(item => { - if (item.type === 'ImportDefaultSpecifier') { - defaultSpecifier = item.local.name - } - }) - if (defaultSpecifier) { - let objArr: t.NullLiteral | t.Expression = t.nullLiteral() - if (Array.isArray(obj)) { - objArr = t.arrayExpression(convertArrayToAstExpression(obj)) - } else { - objArr = t.objectExpression(convertObjectToAstExpression(obj)) - } - astPath.replaceWith(t.variableDeclaration('const', [t.variableDeclarator(t.identifier(defaultSpecifier), objArr)])) - } - } - } else if (REG_FONT.test(valueExtname) || REG_IMAGE.test(valueExtname) || REG_MEDIA.test(valueExtname)) { - const vpath = path.resolve(sourceFilePath, '..', value) - if (!fs.existsSync(vpath)) { - printLog(processTypeEnum.ERROR, '引用文件', `文件 ${sourceFilePath} 中引用 ${value} 不存在!`) - return - } - if (mediaFiles.indexOf(vpath) < 0) { - mediaFiles.push(vpath) - } - const specifiers = node.specifiers - let defaultSpecifier = null - specifiers.forEach(item => { - if (item.type === 'ImportDefaultSpecifier') { - defaultSpecifier = item.local.name - } - }) - let showPath - if (NODE_MODULES_REG.test(vpath)) { - showPath = vpath.replace(nodeModulesPath, `/${npmConfig.name}`) - } else { - showPath = vpath.replace(sourceDir, '') - if (publicPath) { - const hashName = getHashName(vpath) - showPath = (/\/$/.test(publicPath) ? publicPath : publicPath + '/') + hashName - } - } - if (defaultSpecifier) { - astPath.replaceWith(t.variableDeclaration('const', [t.variableDeclarator(t.identifier(defaultSpecifier), t.stringLiteral(showPath.replace(/\\/g, '/')))])) - } else { - astPath.remove() - } - } else if (REG_STYLE.test(valueExtname)) { - const stylePath = path.resolve(path.dirname(sourceFilePath), value) - if (styleFiles.indexOf(stylePath) < 0) { - styleFiles.push(stylePath) - } - astPath.remove() - } else { - let vpath = resolveScriptPath(path.resolve(sourceFilePath, '..', value)) - let outputVpath - if (NODE_MODULES_REG.test(vpath)) { - outputVpath = vpath.replace(nodeModulesPath, npmOutputDir) - } else { - outputVpath = vpath.replace(sourceDir, outputDir) - } - if (buildAdapter === BUILD_TYPES.ALIPAY) { - outputVpath = generateAlipayPath(outputVpath) - } - let relativePath = path.relative(filePath, outputVpath) - if (vpath && vpath !== sourceFilePath) { - if (!fs.existsSync(vpath)) { - printLog(processTypeEnum.ERROR, '引用文件', `文件 ${sourceFilePath} 中引用 ${value} 不存在!`) - } else { - if (fs.lstatSync(vpath).isDirectory()) { - if (fs.existsSync(path.join(vpath, 'index.js'))) { - vpath = path.join(vpath, 'index.js') - relativePath = path.join(relativePath, 'index.js') - } else { - printLog(processTypeEnum.ERROR, '引用目录', `文件 ${sourceFilePath} 中引用了目录 ${value}!`) - return - } - } - if (scriptFiles.indexOf(vpath) < 0) { - scriptFiles.push(vpath) - } - relativePath = promoteRelativePath(relativePath) - relativePath = relativePath.replace(extnameExpRegOf(relativePath), '.js') - node.source.value = relativePath - } - } - } - } - } -} - -export interface IParseAstReturn { - code: string, - styleFiles: string[], - scriptFiles: string[], - jsonFiles: string[], - mediaFiles: string[] - configObj: IConfig, - componentClassName: string, - taroSelfComponents: Set, - hasEnablePageScroll: boolean -} - -export function parseAst ( - type: PARSE_AST_TYPE, - ast: t.File, - depComponents: IComponentObj[], - sourceFilePath: string, - filePath: string, - npmSkip: boolean = false -): IParseAstReturn { - const styleFiles: string[] = [] - const scriptFiles: string[] = [] - const jsonFiles: string[] = [] - const mediaFiles: string[] = [] - - const { - appPath, - nodeModulesPath, - npmOutputDir, - sourceDir, - outputDir, - buildAdapter, - constantsReplaceList, - isProduction, - npmConfig, - alias: pathAlias, - compileConfig, - projectConfig, - quickappManifest - } = getBuildData() - const publicPath = (projectConfig.weapp || {} as any).publicPath - const notExistNpmList = getNotExistNpmList() - const taroMiniAppFramework = `@tarojs/taro-${buildAdapter}` - let configObj: IConfig = {} - let componentClassName: string = '' - let taroJsReduxConnect: string = '' - let taroImportDefaultName - let needExportDefault = false - let exportTaroReduxConnected: string | null = null - const isQuickApp = buildAdapter === BUILD_TYPES.QUICKAPP - const cannotRemoves = [taroJsFramework, 'react', 'nervjs'] - let hasComponentDidHide - let hasComponentDidShow - let hasComponentWillMount - let hasEnablePageScroll - let needSetConfigFromHooks = false - let configFromHooks - if (isQuickApp) { - cannotRemoves.push(taroJsComponents) - } - const taroSelfComponents = new Set() - ast = babel.transformFromAst(ast, '', { - plugins: [ - [require('babel-plugin-preval')], - [require('babel-plugin-danger-remove-unused-import'), { ignore: cannotRemoves }], - [require('babel-plugin-transform-define').default, constantsReplaceList] - ] - }).ast as t.File - traverse(ast, { - ClassDeclaration (astPath) { - const node = astPath.node - let hasCreateData = false - if (node.superClass) { - astPath.traverse({ - ClassMethod (astPath) { - if (astPath.get('key').isIdentifier({ name: '_createData' })) { - hasCreateData = true - } - } - }) - if (hasCreateData) { - needExportDefault = true - astPath.traverse({ - ClassMethod (astPath) { - const node = astPath.node - if (node.kind === 'constructor') { - astPath.traverse({ - ExpressionStatement (astPath) { - const node = astPath.node - if (node.expression && - node.expression.type === 'AssignmentExpression' && - node.expression.operator === '=') { - const left = node.expression.left - if (left.type === 'MemberExpression' && - left.object.type === 'ThisExpression' && - left.property.type === 'Identifier' && - left.property.name === 'config') { - configObj = traverseObjectNode(node.expression.right, buildAdapter) - } - } - } - }) - } - } - }) - if (node.id === null) { - componentClassName = '_TaroComponentClass' - astPath.replaceWith( - t.classDeclaration( - t.identifier(componentClassName), - node.superClass as t.Expression, - node.body as t.ClassBody, - node.decorators as t.Decorator[] || [] - ) - ) - } else if (node.id.name === 'App') { - componentClassName = '_App' - astPath.replaceWith( - t.classDeclaration( - t.identifier(componentClassName), - node.superClass as t.Expression, - node.body as t.ClassBody, - node.decorators as t.Decorator[] || [] - ) - ) - } else { - componentClassName = node.id.name - } - } - } - }, - - ClassExpression (astPath) { - const node = astPath.node - if (node.superClass) { - let hasCreateData = false - astPath.traverse({ - ClassMethod (astPath) { - if (astPath.get('key').isIdentifier({ name: '_createData' })) { - hasCreateData = true - } - } - }) - if (hasCreateData) { - needExportDefault = true - if (node.id === null) { - const parentNode = astPath.parentPath.node as any - if (t.isVariableDeclarator(astPath.parentPath)) { - componentClassName = parentNode.id.name - } else { - componentClassName = '_TaroComponentClass' - } - astPath.replaceWith( - t.classExpression( - t.identifier(componentClassName), - node.superClass as t.Expression, - node.body as t.ClassBody, - node.decorators as t.Decorator[] || [] - ) - ) - } else if (node.id.name === 'App') { - componentClassName = '_App' - astPath.replaceWith( - t.classExpression( - t.identifier(componentClassName), - node.superClass as t.Expression, - node.body as t.ClassBody, - node.decorators as t.Decorator[] || [] - ) - ) - } else { - componentClassName = node.id.name - } - } - } - }, - - AssignmentExpression (astPath) { - const node = astPath.node - const left = node.left - if (t.isMemberExpression(left) && t.isIdentifier(left.object)) { - if (left.object.name === componentClassName - && t.isIdentifier(left.property) - && left.property.name === 'config') { - needSetConfigFromHooks = true - configFromHooks = node.right - configObj = traverseObjectNode(node.right, buildAdapter) - } - } - }, - - ClassMethod (astPath) { - const keyName = (astPath.get('key').node as t.Identifier).name - if (keyName === 'componentWillMount') { - hasComponentWillMount = true - } else if (keyName === 'componentDidShow') { - hasComponentDidShow = true - } else if (keyName === 'componentDidHide') { - hasComponentDidHide = true - } else if (keyName === 'onPageScroll' || keyName === 'onReachBottom') { - hasEnablePageScroll = true - } - }, - - ClassProperty (astPath) { - const node = astPath.node - const keyName = node.key.name - const valuePath = astPath.get('value') - if (keyName === 'config') { - configObj = traverseObjectNode(node, buildAdapter) - } else if (valuePath.isFunctionExpression() || valuePath.isArrowFunctionExpression()) { - if (keyName === 'componentWillMount') { - hasComponentWillMount = true - } else if (keyName === 'componentDidShow') { - hasComponentDidShow = true - } else if (keyName === 'componentDidHide') { - hasComponentDidHide = true - } - } - }, - - ImportDeclaration (astPath) { - const node = astPath.node - const source = node.source - let value = source.value - const specifiers = node.specifiers - // alias 替换 - if (isAliasPath(value, pathAlias)) { - value = replaceAliasPath(sourceFilePath, value, pathAlias) - source.value = value - } - - const quickappPkgs = quickappManifest ? quickappManifest.features : [] - if (isNpmPkg(value) && !(isQuickApp && isQuickappPkg(value, quickappPkgs)) && !notExistNpmList.has(value)) { - if (value === taroJsComponents) { - if (isQuickApp) { - specifiers.forEach(specifier => { - const name = specifier.local.name - if (!QUICKAPP_SPECIAL_COMPONENTS.has(name)) { - taroSelfComponents.add(_.kebabCase(name)) - } - }) - } - astPath.remove() - } else { - let isDepComponent = false - if (depComponents && depComponents.length) { - depComponents.forEach(item => { - if (item.path === value) { - isDepComponent = true - } - }) - } - if (isDepComponent) { - astPath.remove() - } else { - const specifiers = node.specifiers - if (value === taroJsFramework) { - let defaultSpecifier: string | null = null - specifiers.forEach(item => { - if (item.type === 'ImportDefaultSpecifier') { - defaultSpecifier = item.local.name - } - }) - if (defaultSpecifier) { - taroImportDefaultName = defaultSpecifier - } - excludeReplaceTaroFrameworkPkgs.add(taroMiniAppFramework) - if (!Array.from(excludeReplaceTaroFrameworkPkgs).some(item => sourceFilePath.replace(/\\/g, '/').indexOf(item) >= 0)) { - value = taroMiniAppFramework - } - } else if (value === taroJsRedux) { - specifiers.forEach(item => { - if (item.type === 'ImportSpecifier') { - const local = item.local - if (local.type === 'Identifier' && local.name === 'connect') { - taroJsReduxConnect = item.imported.name - } - } - }) - } - if (!npmSkip) { - source.value = getExactedNpmFilePath({ - npmName: value, - sourceFilePath, - filePath, - isProduction, - npmConfig, - buildAdapter, - root: appPath, - npmOutputDir, - compileConfig, - env: projectConfig.env || {}, - uglify: projectConfig!.plugins!.uglify || { enable: true }, - babelConfig: getBabelConfig(projectConfig!.plugins!.babel) || {}, - quickappManifest - }) - } else { - source.value = value - } - } - } - } else if (CSS_EXT.indexOf(path.extname(value)) !== -1 && specifiers.length > 0) { // 对 使用 import style from './style.css' 语法引入的做转化处理 - printLog(processTypeEnum.GENERATE, '替换代码', `为文件 ${sourceFilePath} 生成 css modules`) - const styleFilePath = path.join(path.dirname(sourceFilePath), value) - const styleCode = fs.readFileSync(styleFilePath).toString() - processStyleUseCssModule({ - css: styleCode, - filePath: styleFilePath - }).then(result => { - const tokens = result.root.exports || {} - createCssModuleMap(styleFilePath, tokens) - }) - const cssModuleMapFile = generateCssModuleMapFilename(styleFilePath) - astPath.node.source = t.stringLiteral(astPath.node.source.value.replace(path.basename(styleFilePath), path.basename(cssModuleMapFile))) - if (styleFiles.indexOf(styleFilePath) < 0) { // add this css file to queue - styleFiles.push(styleFilePath) - } - } else if (path.isAbsolute(value)) { - printLog(processTypeEnum.ERROR, '引用文件', `文件 ${sourceFilePath} 中引用 ${value} 是绝对路径!`) - } - }, - - CallExpression (astPath) { - const node = astPath.node - const callee = node.callee as (t.Identifier | t.MemberExpression) - if (t.isMemberExpression(callee)) { - if (taroImportDefaultName && (callee.object as t.Identifier).name === taroImportDefaultName && (callee.property as t.Identifier).name === 'render') { - astPath.remove() - } - } else if (callee.name === 'require') { - const args = node.arguments as t.StringLiteral[] - let value = args[0].value - const parentNode = astPath.parentPath.parentPath.node as t.VariableDeclaration - if (isAliasPath(value, pathAlias)) { - value = replaceAliasPath(sourceFilePath, value, pathAlias) - args[0].value = value - } - const quickappPkgs = quickappManifest ? quickappManifest.features : [] - if (isNpmPkg(value) && !(isQuickApp && isQuickappPkg(value, quickappPkgs)) && !notExistNpmList.has(value)) { - if (value === taroJsComponents) { - if (isQuickApp) { - if (parentNode.declarations.length === 1 && parentNode.declarations[0].init) { - const id = parentNode.declarations[0].id - if (id.type === 'ObjectPattern') { - const properties = id.properties as any - properties.forEach(p => { - if (p.type === 'ObjectProperty' && p.value.type === 'Identifier') { - taroSelfComponents.add(_.kebabCase(p.value.name)) - } - }) - } - } - } - astPath.remove() - } else { - let isDepComponent = false - if (depComponents && depComponents.length) { - depComponents.forEach(item => { - if (item.path === value) { - isDepComponent = true - } - }) - } - if (isDepComponent) { - astPath.remove() - } else { - if (t.isVariableDeclaration(astPath.parentPath.parentPath)) { - if (parentNode.declarations.length === 1 && parentNode.declarations[0].init) { - const id = parentNode.declarations[0].id - if (value === taroJsFramework && id.type === 'Identifier') { - taroImportDefaultName = id.name - excludeReplaceTaroFrameworkPkgs.add(taroMiniAppFramework) - if (!Array.from(excludeReplaceTaroFrameworkPkgs).some(item => sourceFilePath.replace(/\\/g, '/').indexOf(item) >= 0)) { - value = taroMiniAppFramework - } - } else if (value === taroJsRedux) { - const declarations = parentNode.declarations - declarations.forEach(item => { - const id = item.id - if (id.type === 'ObjectPattern') { - const properties = id.properties as any - properties.forEach(p => { - if (p.type === 'ObjectProperty') { - if (p.value.type === 'Identifier' && p.value.name === 'connect') { - taroJsReduxConnect = p.key.name - } - } - }) - } - }) - } - } - } - if (!npmSkip) { - args[0].value = getExactedNpmFilePath({ - npmName: value, - sourceFilePath, - filePath, - isProduction, - npmConfig, - buildAdapter, - root: appPath, - npmOutputDir, - compileConfig, - env: projectConfig.env || {}, - uglify: projectConfig!.plugins!.uglify || { enable: true }, - babelConfig: getBabelConfig(projectConfig!.plugins!.babel) || {}, - quickappManifest - }) - } else { - args[0].value = value - } - } - } - } else if (CSS_EXT.indexOf(path.extname(value)) !== -1 && t.isVariableDeclarator(astPath.parentPath)) { // 对 使用 const style = require('./style.css') 语法引入的做转化处理 - printLog(processTypeEnum.GENERATE, '替换代码', `为文件 ${sourceFilePath} 生成 css modules`) - const styleFilePath = path.join(path.dirname(sourceFilePath), value) - const styleCode = fs.readFileSync(styleFilePath).toString() - processStyleUseCssModule({ - css: styleCode, - filePath: styleFilePath - }).then(result => { - const tokens = result.root.exports || {} - createCssModuleMap(styleFilePath, tokens) - }) - const cssModuleMapFile = generateCssModuleMapFilename(styleFilePath) - args[0].value = args[0].value.replace(path.basename(styleFilePath), path.basename(cssModuleMapFile)) - if (styleFiles.indexOf(styleFilePath) < 0) { // add this css file to queue - styleFiles.push(styleFilePath) - } - } else if (path.isAbsolute(value)) { - printLog(processTypeEnum.ERROR, '引用文件', `文件 ${sourceFilePath} 中引用 ${value} 是绝对路径!`) - } - } - }, - - ExportDefaultDeclaration (astPath) { - const node = astPath.node - const declaration = node.declaration - needExportDefault = false - if ( - declaration && - (declaration.type === 'ClassDeclaration' || declaration.type === 'ClassExpression') - ) { - const superClass = declaration.superClass - if (superClass) { - let hasCreateData = false - astPath.traverse({ - ClassMethod (astPath) { - if (astPath.get('key').isIdentifier({ name: '_createData' })) { - hasCreateData = true - } - } - }) - if (hasCreateData) { - needExportDefault = true - if (declaration.id === null) { - componentClassName = '_TaroComponentClass' - } else if (declaration.id.name === 'App') { - componentClassName = '_App' - } else { - componentClassName = declaration.id.name - } - const isClassDcl = declaration.type === 'ClassDeclaration' - const classDclProps = [t.identifier(componentClassName), superClass, declaration.body, declaration.decorators || []] - astPath.replaceWith(isClassDcl ? t.classDeclaration.apply(null, classDclProps) : t.classExpression.apply(null, classDclProps)) - } - } - } else if (declaration.type === 'CallExpression') { - const callee = declaration.callee - if (callee && callee.type === 'CallExpression') { - const subCallee = callee.callee - if (subCallee.type === 'Identifier' && subCallee.name === taroJsReduxConnect) { - const args = declaration.arguments as t.Identifier[] - if (args.length === 1 && args[0].name === componentClassName) { - needExportDefault = true - exportTaroReduxConnected = `${componentClassName}__Connected` - astPath.replaceWith(t.variableDeclaration('const', [t.variableDeclarator(t.identifier(`${componentClassName}__Connected`), t.callExpression(declaration.callee as t.Expression, declaration.arguments as Array))])) - } - } - } - } else if (declaration.type === 'Identifier') { - const name = declaration.name - if (name === componentClassName || name === exportTaroReduxConnected) { - needExportDefault = true - astPath.remove() - } - } - }, - - ExportNamedDeclaration (astPath) { - const node = astPath.node - const source = node.source - if (source && source.type === 'StringLiteral') { - const value = source.value - analyzeImportUrl({ astPath, value, sourceFilePath, filePath, styleFiles, scriptFiles, jsonFiles, mediaFiles }) - } - }, - - ExportAllDeclaration (astPath) { - const node = astPath.node - const source = node.source - if (source && source.type === 'StringLiteral') { - const value = source.value - analyzeImportUrl({ astPath, value, sourceFilePath, filePath, styleFiles, scriptFiles, jsonFiles, mediaFiles }) - } - }, - - Program: { - exit (astPath) { - astPath.traverse({ - ClassBody (astPath) { - if (isQuickApp) { - const node = astPath.node - if (!hasComponentWillMount) { - node.body.push(t.classMethod( - 'method', t.identifier('hasComponentWillMount'), [], - t.blockStatement([]), false, false)) - } - if (!hasComponentDidShow) { - node.body.push(t.classMethod( - 'method', t.identifier('componentDidShow'), [], - t.blockStatement([]), false, false)) - } - if (!hasComponentDidHide) { - node.body.push(t.classMethod( - 'method', t.identifier('componentDidHide'), [], - t.blockStatement([]), false, false)) - } - node.body.push(t.classMethod( - 'method', t.identifier('__listenToSetNavigationBarEvent'), [], - t.blockStatement([convertSourceStringToAstExpression( - `if (!Taro.eventCenter.callbacks['TaroEvent:setNavigationBar']) { - Taro.eventCenter.on('TaroEvent:setNavigationBar', params => { - if (params.title) { - this.$scope.$page.setTitleBar({ text: params.title }) - } - if (params.frontColor) { - this.$scope.$page.setTitleBar({ textColor: params.frontColor }) - } - if (params.backgroundColor) { - this.$scope.$page.setTitleBar({ backgroundColor: params.backgroundColor }) - } - }) - }` - )]), false, false)) - node.body.push(t.classMethod( - 'method', t.identifier('__offListenToSetNavigationBarEvent'), [], - t.blockStatement([convertSourceStringToAstExpression( - `Taro.eventCenter.off('TaroEvent:setNavigationBar')` - )]), false, false)) - } - if (needSetConfigFromHooks) { - const classPath = astPath.findParent((p: NodePath) => p.isClassExpression() || p.isClassDeclaration()) as NodePath - classPath.node.body.body.unshift( - t.classProperty( - t.identifier('config'), - configFromHooks as t.ObjectExpression - ) - ) - } - }, - ClassMethod (astPath) { - if (isQuickApp) { - const node = astPath.node - const keyName = (node.key as t.Identifier).name - if (keyName === 'componentDidShow' || keyName === 'componentWillMount') { - node.body.body.unshift(convertSourceStringToAstExpression(`this.__listenToSetNavigationBarEvent()`)) - } else if (keyName === 'componentDidHide') { - node.body.body.unshift(convertSourceStringToAstExpression(`this.__offListenToSetNavigationBarEvent()`)) - } - } - }, - ImportDeclaration (astPath) { - const node = astPath.node - const source = node.source - const value = source.value - analyzeImportUrl({ astPath, value, sourceFilePath, filePath, styleFiles, scriptFiles, jsonFiles, mediaFiles }) - }, - CallExpression (astPath) { - const node = astPath.node - const callee = node.callee as t.Identifier - if (callee.name === 'require') { - const args = node.arguments as t.StringLiteral[] - const value = args[0].value - const valueExtname = path.extname(value) - if (value.indexOf('.') === 0) { - let importPath = path.resolve(path.dirname(sourceFilePath), value) - importPath = resolveScriptPath(importPath) - if (isFileToBePage(importPath)) { - if (astPath.parent.type === 'AssignmentExpression' || 'ExpressionStatement') { - astPath.parentPath.remove() - } else if (astPath.parent.type === 'VariableDeclarator') { - astPath.parentPath.parentPath.remove() - } else { - astPath.remove() - } - } else { - if (REG_STYLE.test(valueExtname)) { - const stylePath = path.resolve(path.dirname(sourceFilePath), value) - if (styleFiles.indexOf(stylePath) < 0) { - styleFiles.push(stylePath) - } - if (astPath.parent.type === 'AssignmentExpression' || 'ExpressionStatement') { - astPath.parentPath.remove() - } else if (astPath.parent.type === 'VariableDeclarator') { - astPath.parentPath.parentPath.remove() - } else { - astPath.remove() - } - } else if (REG_JSON.test(valueExtname)) { - const vpath = path.resolve(sourceFilePath, '..', value) - if (jsonFiles.indexOf(vpath) < 0) { - jsonFiles.push(vpath) - } - if (fs.existsSync(vpath)) { - const obj = JSON.parse(fs.readFileSync(vpath).toString()) - let objArr: t.NullLiteral | t.Expression | t.ObjectProperty[] = t.nullLiteral() - if (Array.isArray(obj)) { - objArr = t.arrayExpression(convertArrayToAstExpression(obj)) - } else { - objArr = convertObjectToAstExpression(obj) - } - astPath.replaceWith(t.objectExpression(objArr as any)) - } - } else if (REG_SCRIPT.test(valueExtname) || REG_TYPESCRIPT.test(valueExtname)) { - const vpath = path.resolve(sourceFilePath, '..', value) - let fPath = value - if (fs.existsSync(vpath) && vpath !== sourceFilePath) { - fPath = vpath - } - if (scriptFiles.indexOf(fPath) < 0) { - scriptFiles.push(fPath) - } - } else if (REG_FONT.test(valueExtname) || REG_IMAGE.test(valueExtname) || REG_MEDIA.test(valueExtname)) { - const vpath = path.resolve(sourceFilePath, '..', value) - if (mediaFiles.indexOf(vpath) < 0) { - mediaFiles.push(vpath) - } - let showPath - if (NODE_MODULES_REG.test(vpath)) { - showPath = vpath.replace(nodeModulesPath, `/${npmConfig.name}`) - } else { - showPath = vpath.replace(sourceDir, '') - if (publicPath) { - const hashName = getHashName(vpath) - showPath = (/\/$/.test(publicPath) ? publicPath : publicPath + '/') + hashName - } - } - astPath.replaceWith(t.stringLiteral(showPath.replace(/\\/g, '/'))) - } else { - let vpath = resolveScriptPath(path.resolve(sourceFilePath, '..', value)) - let outputVpath - if (NODE_MODULES_REG.test(vpath)) { - outputVpath = vpath.replace(nodeModulesPath, npmOutputDir) - } else { - outputVpath = vpath.replace(sourceDir, outputDir) - } - let relativePath = path.relative(filePath, outputVpath) - if (vpath) { - if (!fs.existsSync(vpath)) { - printLog(processTypeEnum.ERROR, '引用文件', `文件 ${sourceFilePath} 中引用 ${value} 不存在!`) - } else { - if (fs.lstatSync(vpath).isDirectory()) { - if (fs.existsSync(path.join(vpath, 'index.js'))) { - vpath = path.join(vpath, 'index.js') - relativePath = path.join(relativePath, 'index.js') - } else { - printLog(processTypeEnum.ERROR, '引用目录', `文件 ${sourceFilePath} 中引用了目录 ${value}!`) - return - } - } - if (scriptFiles.indexOf(vpath) < 0) { - scriptFiles.push(vpath) - } - relativePath = promoteRelativePath(relativePath) - relativePath = relativePath.replace(extnameExpRegOf(relativePath), '.js') - args[0].value = relativePath - } - } - } - } - } - } - } - }) - const node = astPath.node as t.Program - const exportVariableName = exportTaroReduxConnected || componentClassName - if (needExportDefault && !isQuickApp) { - const exportDefault = template(`export default ${exportVariableName}`, babylonConfig as any)() - node.body.push(exportDefault as any) - } - const taroMiniAppFrameworkPath = !npmSkip ? getExactedNpmFilePath({ - npmName: taroMiniAppFramework, - sourceFilePath, - filePath, - isProduction, - npmConfig, - buildAdapter, - root: appPath, - npmOutputDir, - compileConfig, - env: projectConfig.env || {}, - uglify: projectConfig!.plugins!.uglify || { enable: true }, - babelConfig: getBabelConfig(projectConfig!.plugins!.babel) || {}, - quickappManifest - }) : taroMiniAppFramework - switch (type) { - case PARSE_AST_TYPE.ENTRY: - const pxTransformConfig = { - designWidth: projectConfig.designWidth || 750 - } - if (projectConfig.hasOwnProperty(DEVICE_RATIO_NAME)) { - pxTransformConfig[DEVICE_RATIO_NAME] = projectConfig.deviceRatio - } - if (isQuickApp) { - if (!taroImportDefaultName) { - node.body.unshift( - template(`import Taro from '${taroMiniAppFrameworkPath}'`, babylonConfig as any)() as any - ) - } - node.body.push(template(`export default require('${taroMiniAppFrameworkPath}').default.createApp(${exportVariableName})`, babylonConfig as any)() as any) - } else { - node.body.push(template(`App(require('${taroMiniAppFrameworkPath}').default.createApp(${exportVariableName}))`, babylonConfig as any)() as any) - } - node.body.push(template(`Taro.initPxTransform(${JSON.stringify(pxTransformConfig)})`, babylonConfig as any)() as any) - break - case PARSE_AST_TYPE.PAGE: - if (buildAdapter === BUILD_TYPES.WEAPP || buildAdapter === BUILD_TYPES.QQ) { - node.body.push(template(`Component(require('${taroMiniAppFrameworkPath}').default.createComponent(${exportVariableName}, true))`, babylonConfig as any)() as any) - } else if (isQuickApp) { - const pagePath = sourceFilePath.replace(sourceDir, '').replace(/\\/g, '/').replace(extnameExpRegOf(sourceFilePath), '') - if (!taroImportDefaultName) { - node.body.unshift( - template(`import Taro from '${taroMiniAppFrameworkPath}'`, babylonConfig as any)() as any - ) - } - node.body.push(template(`export default require('${taroMiniAppFrameworkPath}').default.createComponent(${exportVariableName}, '${pagePath}')`, babylonConfig as any)() as any) - } else { - node.body.push(template(`Page(require('${taroMiniAppFrameworkPath}').default.createComponent(${exportVariableName}, true))`, babylonConfig as any)() as any) - } - break - case PARSE_AST_TYPE.COMPONENT: - if (isQuickApp) { - if (!taroImportDefaultName) { - node.body.unshift( - template(`import Taro from '${taroMiniAppFrameworkPath}'`, babylonConfig as any)() as any - ) - } - node.body.push(template(`export default require('${taroMiniAppFrameworkPath}').default.createComponent(${exportVariableName})`, babylonConfig as any)() as any) - } else { - node.body.push(template(`Component(require('${taroMiniAppFrameworkPath}').default.createComponent(${exportVariableName}))`, babylonConfig as any)() as any) - } - break - default: - break - } - } - } - }) - - if (isQuickApp && type === PARSE_AST_TYPE.PAGE) { - taroSelfComponents.add('taro-page') - } - - return { - code: generate(ast).code, - styleFiles, - scriptFiles, - jsonFiles, - configObj, - mediaFiles, - componentClassName, - taroSelfComponents, - hasEnablePageScroll - } -} - -export function parseComponentExportAst (ast: t.File, componentName: string, componentPath: string, componentType: string): string | null { - const { - constantsReplaceList - } = getBuildData() - let componentRealPath: string | null = null - let importExportName - ast = babel.transformFromAst(ast, '', { - plugins: [ - [require('babel-plugin-transform-define').default, constantsReplaceList] - ] - }).ast as t.File - componentName = componentName.split('|')[1] || componentName - traverse(ast, { - ExportNamedDeclaration (astPath) { - const node = astPath.node - const specifiers = node.specifiers - const source = node.source - if (source && source.type === 'StringLiteral') { - specifiers.forEach(specifier => { - const exported = specifier.exported - if (_.kebabCase(exported.name) === componentName) { - componentRealPath = resolveScriptPath(path.resolve(path.dirname(componentPath), source.value)) - } - }) - } else { - specifiers.forEach(specifier => { - const exported = specifier.exported - if (_.kebabCase(exported.name) === componentName) { - importExportName = exported.name - } - }) - } - }, - - ExportDefaultDeclaration (astPath) { - const node = astPath.node - const declaration = node.declaration as t.Identifier - if (componentType === 'default') { - importExportName = declaration.name - } - }, - - CallExpression (astPath) { - if (astPath.get('callee').isIdentifier({ name: 'require' })) { - const arg = astPath.get('arguments')[0] - if (t.isStringLiteral(arg.node)) { - componentRealPath = resolveScriptPath(path.resolve(path.dirname(componentPath), arg.node.value)) - } - } - }, - - Program: { - exit (astPath) { - astPath.traverse({ - ImportDeclaration (astPath) { - const node = astPath.node - const specifiers = node.specifiers - const source = node.source - if (importExportName) { - specifiers.forEach(specifier => { - const local = specifier.local - if (local.name === importExportName) { - componentRealPath = resolveScriptPath(path.resolve(path.dirname(componentPath), source.value)) - } - }) - } - } - }) - } - } - }) - return componentRealPath -} diff --git a/packages/taro-cli/src/mini/compileScript.ts b/packages/taro-cli/src/mini/compileScript.ts deleted file mode 100644 index cc37c99a9293..000000000000 --- a/packages/taro-cli/src/mini/compileScript.ts +++ /dev/null @@ -1,175 +0,0 @@ -import * as fs from 'fs-extra' -import * as path from 'path' - -import * as wxTransformer from '@tarojs/transformer-wx' - -import { - printLog, - isDifferentArray, - copyFileSync, - getBabelConfig, - uglifyJS, - extnameExpRegOf, - generateAlipayPath -} from '../util' -import { - BUILD_TYPES, - processTypeEnum, - REG_TYPESCRIPT, - NODE_MODULES_REG, - PARSE_AST_TYPE -} from '../util/constants' -import { callPlugin } from '../util/npm' -import { npmCodeHack } from '../util/resolve_npm_files' -import { IWxTransformResult, TogglableOptions } from '../util/types' - -import { - shouldTransformAgain, - getBuildData, - copyFilesFromSrcToOutput, - getDependencyTree -} from './helper' -import { parseAst } from './astProcess' -import { IDependency } from './interface' - -const isBuildingScripts: Map = new Map() - -export function initCompileScripts () { - isBuildingScripts.clear() -} - -export function compileDepScripts (scriptFiles: string[], needUseBabel?: boolean, buildDepSync?: boolean) { - const { - nodeModulesPath, - npmOutputDir, - projectConfig, - sourceDir, - outputDir, - appPath, - buildAdapter, - constantsReplaceList, - isProduction, - jsxAttributeNameReplace - } = getBuildData() - const dependencyTree = getDependencyTree() - return scriptFiles.map(async item => { - if (path.isAbsolute(item)) { - let outputItem - if (NODE_MODULES_REG.test(item)) { - outputItem = item.replace(nodeModulesPath, npmOutputDir).replace(extnameExpRegOf(item), '.js') - } else { - outputItem = item.replace(path.join(sourceDir), path.join(outputDir)).replace(extnameExpRegOf(item), '.js') - } - if (buildAdapter === BUILD_TYPES.ALIPAY) { - outputItem = generateAlipayPath(outputItem) - } - const weappConf = Object.assign({}, projectConfig.weapp) - const useCompileConf = Object.assign({}, weappConf.compile) - const compileExclude = (useCompileConf.exclude || []).filter(item => !/(?:\/|^)node_modules(\/|$)/.test(item)) - let isInCompileExclude = false - compileExclude.forEach(excludeItem => { - if (item.indexOf(path.join(appPath, excludeItem)) >= 0) { - isInCompileExclude = true - } - }) - if (isInCompileExclude) { - copyFileSync(item, outputItem) - return - } - if (!isBuildingScripts.get(outputItem)) { - isBuildingScripts.set(outputItem, true) - try { - const code = fs.readFileSync(item).toString() - const transformResult = wxTransformer({ - code, - sourcePath: item, - sourceDir, - outputPath: outputItem, - isNormal: true, - isTyped: REG_TYPESCRIPT.test(item), - adapter: buildAdapter, - env: constantsReplaceList, - jsxAttributeNameReplace - }) - const ast = transformResult.ast - const res = parseAst(PARSE_AST_TYPE.NORMAL, ast, [], item, outputItem) - const fileDep = dependencyTree.get(item) || {} as IDependency - let resCode = res.code - if (needUseBabel) { - resCode = await compileScriptFile(res.code, item, outputItem, buildAdapter) - } - fs.ensureDirSync(path.dirname(outputItem)) - if (isProduction && needUseBabel) { - resCode = uglifyJS(resCode, item, appPath, projectConfig!.plugins!.uglify as TogglableOptions) - } - if (NODE_MODULES_REG.test(item)) { - resCode = npmCodeHack(outputItem, resCode, buildAdapter) - } - fs.writeFileSync(outputItem, resCode) - let modifyOutput = outputItem.replace(appPath + path.sep, '') - modifyOutput = modifyOutput.split(path.sep).join('/') - printLog(processTypeEnum.GENERATE, '依赖文件', modifyOutput) - // 编译依赖的脚本文件 - if (isDifferentArray(fileDep['script'], res.scriptFiles)) { - if (buildDepSync) { - await Promise.all(compileDepScripts(res.scriptFiles, needUseBabel, buildDepSync)) - } else { - compileDepScripts(res.scriptFiles, needUseBabel, buildDepSync) - } - } - // 拷贝依赖文件 - if (isDifferentArray(fileDep['json'], res.jsonFiles)) { - copyFilesFromSrcToOutput(res.jsonFiles) - } - if (isDifferentArray(fileDep['media'], res.mediaFiles)) { - copyFilesFromSrcToOutput(res.mediaFiles) - } - fileDep['script'] = res.scriptFiles - fileDep['json'] = res.jsonFiles - fileDep['media'] = res.mediaFiles - dependencyTree.set(item, fileDep) - } catch (err) { - printLog(processTypeEnum.ERROR, '编译失败', item.replace(appPath + path.sep, '')) - console.log(err) - } - } - } - }) -} - -export async function compileScriptFile ( - content: string, - sourceFilePath: string, - outputFilePath: string, - adapter: BUILD_TYPES -): Promise { - const { - appPath, - sourceDir, - constantsReplaceList, - jsxAttributeNameReplace, - projectConfig - } = getBuildData() - if (NODE_MODULES_REG.test(sourceFilePath) && fs.existsSync(outputFilePath)) { - return fs.readFileSync(outputFilePath).toString() - } - const babelConfig = getBabelConfig(projectConfig!.plugins!.babel) - const compileScriptRes = await callPlugin('babel', content, sourceFilePath, babelConfig, appPath) - const code = compileScriptRes.code - if (!shouldTransformAgain()) { - return code - } - const transformResult: IWxTransformResult = wxTransformer({ - code, - sourcePath: sourceFilePath, - sourceDir, - outputPath: outputFilePath, - isNormal: true, - isTyped: false, - adapter, - env: constantsReplaceList, - jsxAttributeNameReplace - }) - const res = parseAst(PARSE_AST_TYPE.NORMAL, transformResult.ast, [], sourceFilePath, outputFilePath) - return res.code -} diff --git a/packages/taro-cli/src/mini/compileStyle.ts b/packages/taro-cli/src/mini/compileStyle.ts deleted file mode 100644 index 2b859e8a9fee..000000000000 --- a/packages/taro-cli/src/mini/compileStyle.ts +++ /dev/null @@ -1,324 +0,0 @@ -import * as fs from 'fs-extra' -import * as path from 'path' - -import * as autoprefixer from 'autoprefixer' -import * as postcss from 'postcss' -import * as pxtransform from 'postcss-pxtransform' -import rewriter from '../quickapp/style-rewriter' -import getHashName from '../util/hash' -import browserList from '../config/browser_list' -import { - resolveNpmPkgMainPath, - resolveNpmFilesPath -} from '../util/resolve_npm_files' -import { - callPlugin, callPluginSync -} from '../util/npm' -import { - isNpmPkg, - processStyleImports, - promoteRelativePath, - getBabelConfig -} from '../util' -import { CSS_EXT, FILE_PROCESSOR_MAP, DEVICE_RATIO_NAME, BUILD_TYPES } from '../util/constants' -import { IMiniAppConfig } from '../util/types' - -import { - getBuildData -} from './helper' - -const cssUrlParse = require('postcss-url') -const genericNames = require('generic-names') -const Scope = require('postcss-modules-scope') -const Values = require('postcss-modules-values') -const LocalByDefault = require('postcss-modules-local-by-default') -const ExtractImports = require('postcss-modules-extract-imports') -const ResolveImports = require('postcss-modules-resolve-imports') -interface IStyleObj { - css: string, - filePath: string -} - -const isBuildingStyles: Map = new Map() - -export function initCompileStyles () { - isBuildingStyles.clear() -} - -export interface ICSSModulesConf { - enable: boolean, - config: { - generateScopedName: string | ((localName: string, absoluteFilePath: string) => string), - namingPattern: 'global' | 'module' - } -} - -/** - * css module processor - * @param styleObj { css: string, filePath: '' } - * @returns postcss.process() - */ -export async function processStyleUseCssModule (styleObj: IStyleObj): Promise { - const { projectConfig, appPath } = getBuildData() - const weappConf = Object.assign({}, projectConfig.weapp) - const useModuleConf = weappConf.module || {} - const customPostcssConf = useModuleConf.postcss || {} - const customCssModulesConf = Object.assign({ - enable: false, - config: { - generateScopedName: '[name]__[local]___[hash:base64:5]', - namingPattern: 'global' - } - }, customPostcssConf.cssModules || {}) as ICSSModulesConf - if (!customCssModulesConf.enable) { - return styleObj - } - const namingPattern = customCssModulesConf.config.namingPattern - if (namingPattern === 'module') { - // 只对 xxx.module.[css|scss|less|styl] 等样式文件做处理 - const DO_USE_CSS_MODULE_REGEX = /^(.*\.module).*\.(css|scss|less|styl)$/ - if (!DO_USE_CSS_MODULE_REGEX.test(styleObj.filePath)) return styleObj - } else { - // 对 xxx.global.[css|scss|less|styl] 等样式文件不做处理 - const DO_NOT_USE_CSS_MODULE_REGEX = /^(.*\.global).*\.(css|scss|less|styl)$/ - if (DO_NOT_USE_CSS_MODULE_REGEX.test(styleObj.filePath)) return styleObj - } - const generateScopedName = customCssModulesConf.config.generateScopedName - const context = appPath - let scopedName - if (generateScopedName) { - scopedName = typeof generateScopedName === 'function' - ? (local, filename) => generateScopedName(local, filename) - : genericNames(generateScopedName, { context }) - } else { - scopedName = (local, filename) => Scope.generateScopedName(local, path.relative(context, filename)) - } - const postcssPlugins = [ - Values, - LocalByDefault, - ExtractImports, - new Scope({ generateScopedName: scopedName }), - new ResolveImports({ resolve: Object.assign({}, { extensions: CSS_EXT }) }) - ] - const runner = postcss(postcssPlugins) - const cssText = (await compileStyleWithPlugin(styleObj.filePath)).css - const result = runner.process(cssText, Object.assign({}, { from: styleObj.filePath })) - return result -} - -async function processStyleWithPostCSS (styleObj: IStyleObj): Promise { - const { appPath, outputDir,projectConfig, npmConfig, isProduction, buildAdapter } = getBuildData() - const weappConf = Object.assign({}, projectConfig.weapp) - const publicPath = weappConf.publicPath - const useModuleConf = weappConf.module || {} - const customPostcssConf = useModuleConf.postcss || {} - const customCssModulesConf = Object.assign({ - enable: false, - config: { - generateScopedName: '[name]__[local]___[hash:base64:5]' - } - }, customPostcssConf.cssModules || {}) - const customPxtransformConf = Object.assign({ - enable: true, - config: {} - }, customPostcssConf.pxtransform || {}) - const customUrlConf = { - enable: true, - config: { - limit: 10240 - } as any, - ...customPostcssConf.url - } - const customAutoprefixerConf = Object.assign({ - enable: true, - config: { - browsers: browserList - } - }, customPostcssConf.autoprefixer || {}) - const postcssPxtransformOption = { - designWidth: projectConfig.designWidth || 750, - platform: 'weapp' - } - - if (projectConfig.hasOwnProperty(DEVICE_RATIO_NAME)) { - postcssPxtransformOption[DEVICE_RATIO_NAME] = projectConfig.deviceRatio - } - - const maxSize = (customUrlConf.config.limit || 1024) / 1024 - const postcssPxtransformConf = Object.assign({}, postcssPxtransformOption, customPxtransformConf, customPxtransformConf.config) - const processors: any[] = [] - if (customAutoprefixerConf.enable) { - processors.push(autoprefixer(customAutoprefixerConf.config)) - } - if (customPxtransformConf.enable && buildAdapter !== BUILD_TYPES.QUICKAPP) { - processors.push(pxtransform(postcssPxtransformConf)) - } - if (customUrlConf.enable) { - let inlineOpts = {} - const url = customUrlConf.config.url || 'inline' - if (url === 'inline' && !publicPath) { - inlineOpts = { - encodeType: 'base64', - maxSize, - url - } - } - - - - /*** - * 修复小程序下css没有正确引用样式 - * 当前位置只进行了文件hash转换并没有做文件copy操作 - */ - if (publicPath && typeof url !== 'function') { - customUrlConf.config.url = (assets) => { - - // 本地文件路径 - if (/\./.test(assets.url)) { - const hashName = getHashName(assets.absolutePath); - assets.url = (/\/$/.test(publicPath) ? publicPath : publicPath + '/') + hashName; - - // 目前只在头条小程序复现,避免影响,只针对头条处理 - if(buildAdapter === BUILD_TYPES.TT){ - const outputFile = path.resolve(outputDir,`./${assets.url}`); - fs.ensureDirSync(path.dirname(outputFile)); - fs.copySync(assets.absolutePath,outputFile); - // 头条下不支持 / ,修正头条css background路径 - assets.url = assets.url.replace(/^[\/]/,''); - } - } - - return assets.url - } - - } - - const cssUrlParseConf = { - ...inlineOpts, - ...customUrlConf.config - } - processors.push(cssUrlParse(cssUrlParseConf)) - } - - const defaultPostCSSPluginNames = ['autoprefixer', 'pxtransform', 'url', 'cssModules'] - Object.keys(customPostcssConf).forEach(pluginName => { - if (defaultPostCSSPluginNames.indexOf(pluginName) < 0) { - const pluginConf = customPostcssConf[pluginName] - if (pluginConf && pluginConf.enable) { - if (!isNpmPkg(pluginName)) { // local plugin - pluginName = path.join(appPath, pluginName) - } - processors.push(require(resolveNpmPkgMainPath(pluginName, isProduction, npmConfig, buildAdapter, appPath))(pluginConf.config || {})) - } - } - }) - let css = styleObj.css - if (customCssModulesConf.enable) { - css = (await processStyleUseCssModule(styleObj)).css - } - const postcssResult = await postcss(processors).process(css, { - from: styleObj.filePath - }) - return postcssResult.css -} - -function compileImportStyles (filePath: string, importStyles: string[]) { - const { sourceDir, outputDir } = getBuildData() - if (importStyles.length) { - importStyles.forEach(async importItem => { - const importFilePath = path.resolve(filePath, '..', importItem) - if (fs.existsSync(importFilePath)) { - await compileDepStyles(importFilePath.replace(sourceDir, outputDir), [importFilePath]) - } - }) - } -} - -function compileStyleWithPlugin (filePath) { - const { appPath, npmOutputDir, nodeModulesPath, projectConfig, npmConfig, isProduction, buildAdapter, quickappManifest } = getBuildData() - const fileExt = path.extname(filePath) - const pluginName = FILE_PROCESSOR_MAP[fileExt] - const fileContent = fs.readFileSync(filePath).toString() - const pluginsConfig = projectConfig.plugins || {} - const weappConf = projectConfig.weapp || {} as IMiniAppConfig - const useCompileConf = Object.assign({}, weappConf.compile) - const cssImportsRes = processStyleImports(fileContent, buildAdapter, (str, stylePath) => { - if (stylePath.indexOf('~') === 0) { - let newStylePath = stylePath - newStylePath = stylePath.replace('~', '') - const npmInfo = resolveNpmFilesPath({ - pkgName: newStylePath, - isProduction, - npmConfig, - buildAdapter, - root: appPath, - rootNpm: nodeModulesPath, - npmOutputDir, - compileConfig: useCompileConf, - env: projectConfig.env || {}, - uglify: projectConfig!.plugins!.uglify || { enable: true }, - babelConfig: getBabelConfig(projectConfig!.plugins!.babel) || {}, - quickappManifest - }) - const importRelativePath = promoteRelativePath(path.relative(filePath, npmInfo.main)) - return str.replace(stylePath, importRelativePath) - } - return str - }) - compileImportStyles(filePath, cssImportsRes.imports) - if (pluginName) { - return callPlugin(pluginName, cssImportsRes.content, filePath, pluginsConfig[pluginName] || {}, appPath) - .then(res => ({ - css: cssImportsRes.style.join('\n') + '\n' + res.css, - filePath - })).catch(err => { - if (err) { - console.log(err) - if (isProduction) { - process.exit(0) - } - } - }) - } - return new Promise(resolve => { - resolve({ - css: cssImportsRes.style.join('\n') + '\n' + cssImportsRes.content, - filePath - }) - }) -} - -export function compileDepStyles (outputFilePath: string, styleFiles: string[]) { - if (isBuildingStyles.get(outputFilePath)) { - return Promise.resolve({}) - } - const { appPath, projectConfig, isProduction, buildAdapter } = getBuildData() - const isQuickApp = buildAdapter === BUILD_TYPES.QUICKAPP - const pluginsConfig = projectConfig.plugins || {} - isBuildingStyles.set(outputFilePath, true) - return Promise.all(styleFiles.map(async p => compileStyleWithPlugin(p))).then(async resList => { - await Promise.all(resList.map(res => processStyleWithPostCSS(res))) - .then(cssList => { - let resContent = cssList.map(res => res).join('\n') - // 非生产模式下用户 csso 配置不存在则默认 csso 为禁用 - let cssoPuginConfig = pluginsConfig.csso || { enable: false } - if (isProduction) { - cssoPuginConfig = pluginsConfig.csso || { enable: true } - } - if (cssoPuginConfig.enable) { - const cssoConfig = cssoPuginConfig.config || {} - const cssoResult = callPluginSync('csso', resContent, outputFilePath, cssoConfig, appPath) - resContent = cssoResult.css - } - if (isQuickApp) { - const transformStyle = rewriter(resContent, isProduction) - if(transformStyle) { - resContent = transformStyle - } - } - - fs.ensureDirSync(path.dirname(outputFilePath)) - fs.writeFileSync(outputFilePath, resContent) - }) - }) -} diff --git a/packages/taro-cli/src/mini/component.ts b/packages/taro-cli/src/mini/component.ts deleted file mode 100644 index 27f356461939..000000000000 --- a/packages/taro-cli/src/mini/component.ts +++ /dev/null @@ -1,376 +0,0 @@ -import * as fs from 'fs-extra' -import * as path from 'path' - -import { Config as IConfig } from '@tarojs/taro' -import * as wxTransformer from '@tarojs/transformer-wx' -import * as _ from 'lodash' -import traverse from 'babel-traverse' - -import { IWxTransformResult, TogglableOptions } from '../util/types' -import { - REG_TYPESCRIPT, - processTypeEnum, - NODE_MODULES_REG, - NODE_MODULES, - PARSE_AST_TYPE, - BUILD_TYPES -} from '../util/constants' -import { - printLog, - isEmptyObject, - promoteRelativePath, - isDifferentArray, - generateQuickAppUx, - uglifyJS, - extnameExpRegOf, - generateAlipayPath -} from '../util' - -import { parseComponentExportAst, parseAst } from './astProcess' -import { IComponentObj, IBuildResult } from './interface' -import { - setHasBeenBuiltComponents, - isComponentHasBeenBuilt, - getBuildData, - setComponentExportsMap, - getComponentExportsMap, - getRealComponentsPathList, - copyFilesFromSrcToOutput, - getDependencyTree, - buildUsingComponents, - getDepComponents, - getImportTaroSelfComponents -} from './helper' -import { compileScriptFile, compileDepScripts } from './compileScript' -import { compileDepStyles } from './compileStyle' -import { transfromNativeComponents, processNativeWxml } from './native' - -const notTaroComponents = new Set() -const componentsNamedMap = new Map() -const componentsBuildResult = new Map() - -export function getComponentsNamedMap () { - return componentsNamedMap -} - -export function isFileToBeTaroComponent ( - code: string, - sourcePath: string, - outputPath: string -) { - const { - buildAdapter, - sourceDir, - constantsReplaceList, - jsxAttributeNameReplace, - alias - } = getBuildData() - const transformResult: IWxTransformResult = wxTransformer({ - code, - sourcePath: sourcePath, - sourceDir, - outputPath: outputPath, - isNormal: true, - isTyped: REG_TYPESCRIPT.test(sourcePath), - adapter: buildAdapter, - env: constantsReplaceList, - jsxAttributeNameReplace, - alias - }) - const { ast }: IWxTransformResult = transformResult - let isTaroComponent = false - - traverse(ast, { - JSXElement () { - isTaroComponent = true - } - }) - - return { - isTaroComponent, - transformResult - } -} - -export interface IComponentBuildConfig { - outputDir?: string, - outputDirName?: string, - npmSkip?: boolean -} - -export function buildDepComponents ( - componentPathList: IComponentObj[], - buildConfig?: IComponentBuildConfig -): Promise { - return Promise.all(componentPathList.map(componentObj => buildSingleComponent(componentObj, buildConfig))) -} - -export async function buildSingleComponent ( - componentObj: IComponentObj, - buildConfig: IComponentBuildConfig = {} -): Promise { - - const { - appPath, - buildAdapter, - constantsReplaceList, - sourceDir, - outputDir, - sourceDirName, - outputDirName, - npmOutputDir, - nodeModulesPath, - outputFilesTypes, - isProduction, - jsxAttributeNameReplace, - projectConfig, - alias - } = getBuildData() - const isQuickApp = buildAdapter === BUILD_TYPES.QUICKAPP - - if (componentObj.path) { - componentsNamedMap.set(componentObj.path, { - name: componentObj.name, - type: componentObj.type - }) - } - const component = componentObj.path - if (!component) { - printLog(processTypeEnum.ERROR, '组件错误', `组件${_.upperFirst(_.camelCase(componentObj.name))}路径错误,请检查!(可能原因是导出的组件名不正确)`) - return { - js: '', - wxss: '', - wxml: '' - } - } - let componentShowPath = component.replace(appPath + path.sep, '') - componentShowPath = componentShowPath.split(path.sep).join('/') - if (buildAdapter === BUILD_TYPES.ALIPAY) { - componentShowPath = generateAlipayPath(componentShowPath) - } - let isComponentFromNodeModules = false - let sourceDirPath = sourceDir - let buildOutputDir = outputDir - // 来自 node_modules 的组件 - if (NODE_MODULES_REG.test(componentShowPath)) { - isComponentFromNodeModules = true - sourceDirPath = nodeModulesPath - buildOutputDir = npmOutputDir - } - let outputComponentShowPath = componentShowPath.replace(isComponentFromNodeModules ? NODE_MODULES : sourceDirName, buildConfig.outputDirName || outputDirName) - outputComponentShowPath = outputComponentShowPath.replace(extnameExpRegOf(outputComponentShowPath), '') - printLog(processTypeEnum.COMPILE, '组件文件', componentShowPath) - const componentContent = fs.readFileSync(component).toString() - let outputComponentJSPath = component.replace(sourceDirPath, buildConfig.outputDir || buildOutputDir).replace(extnameExpRegOf(component), outputFilesTypes.SCRIPT) - if (buildAdapter === BUILD_TYPES.ALIPAY) { - outputComponentJSPath = generateAlipayPath(outputComponentJSPath) - } - const outputComponentWXMLPath = outputComponentJSPath.replace(extnameExpRegOf(outputComponentJSPath), outputFilesTypes.TEMPL) - const outputComponentWXSSPath = outputComponentJSPath.replace(extnameExpRegOf(outputComponentJSPath), outputFilesTypes.STYLE) - const outputComponentJSONPath = outputComponentJSPath.replace(extnameExpRegOf(outputComponentJSPath), outputFilesTypes.CONFIG) - - try { - const isTaroComponentRes = isFileToBeTaroComponent(componentContent, component, outputComponentJSPath) - const componentExportsMap = getComponentExportsMap() - if (!isTaroComponentRes.isTaroComponent) { - const transformResult = isTaroComponentRes.transformResult - const componentRealPath = parseComponentExportAst(transformResult.ast, componentObj.name as string, component, componentObj.type as string) - const realComponentObj: IComponentObj = { - path: componentRealPath, - name: componentObj.name, - type: componentObj.type - } - let isInMap = false - notTaroComponents.add(component) - if (componentExportsMap.size) { - componentExportsMap.forEach(componentExports => { - componentExports.forEach(item => { - if (item.path === component) { - isInMap = true - item.path = componentRealPath - } - }) - }) - } - if (!isInMap) { - const componentExportsMapItem = componentExportsMap.get(component) || [] - componentExportsMapItem.push(realComponentObj) - setComponentExportsMap(component, componentExportsMapItem) - } - return await buildSingleComponent(realComponentObj, buildConfig) - } - if (isComponentHasBeenBuilt(componentObj.path as string) && componentsBuildResult.get(componentObj.path as string)) { - return componentsBuildResult.get(componentObj.path as string) as IBuildResult - } - const buildResult = { - js: outputComponentJSPath, - wxss: outputComponentWXSSPath, - wxml: outputComponentWXMLPath - } - componentsBuildResult.set(component, buildResult) - const transformResult: IWxTransformResult = wxTransformer({ - code: componentContent, - sourcePath: component, - sourceDir, - outputPath: outputComponentJSPath, - isRoot: false, - isTyped: REG_TYPESCRIPT.test(component), - isNormal: false, - adapter: buildAdapter, - env: constantsReplaceList, - jsxAttributeNameReplace, - alias - }) - const componentWXMLContent = isProduction ? transformResult.compressedTemplate : transformResult.template - const componentDepComponents = transformResult.components - const res = parseAst(PARSE_AST_TYPE.COMPONENT, transformResult.ast, componentDepComponents, component, outputComponentJSPath, buildConfig.npmSkip) - let resCode = res.code - fs.ensureDirSync(path.dirname(outputComponentJSPath)) - if (!isComponentHasBeenBuilt(component)) { - setHasBeenBuiltComponents(component) - } - // 解析原生组件 - const { usingComponents = {} }: IConfig = res.configObj - if (usingComponents && !isEmptyObject(usingComponents)) { - const keys = Object.keys(usingComponents) - keys.forEach(item => { - componentDepComponents.forEach(component => { - if (_.camelCase(item) === _.camelCase(component.name)) { - delete usingComponents[item] - } - }) - }) - transfromNativeComponents(outputComponentJSONPath.replace(buildConfig.outputDir || buildOutputDir, sourceDirPath), res.configObj) - } - let realComponentsPathList: IComponentObj[] = [] - realComponentsPathList = getRealComponentsPathList(component, componentDepComponents) - - if (!isQuickApp) { - resCode = await compileScriptFile(resCode, component, outputComponentJSPath, buildAdapter) - if (isProduction) { - resCode = uglifyJS(resCode, component, appPath, projectConfig!.plugins!.uglify as TogglableOptions) - } - } else { - // 快应用编译,搜集创建组件 ux 文件 - const importTaroSelfComponents = getImportTaroSelfComponents(outputComponentJSPath, res.taroSelfComponents) - const importCustomComponents = new Set(realComponentsPathList.map(item => { - return { - path: promoteRelativePath(path.relative(component, item.path as string)).replace(extnameExpRegOf(item.path as string), ''), - name: item.name as string - } - })) - const usingComponents = res.configObj.usingComponents - let importUsingComponent: any = new Set([]) - if (usingComponents) { - importUsingComponent = new Set(Object.keys(usingComponents).map(item => { - return { - name: item, - path: usingComponents[item] - } - })) - } - let styleRelativePath - if (res.styleFiles.length) { - styleRelativePath = promoteRelativePath(path.relative(outputComponentJSPath, outputComponentWXSSPath)) - } - const uxTxt = generateQuickAppUx({ - script: resCode, - style: styleRelativePath, - imports: new Set([...importTaroSelfComponents, ...importCustomComponents, ...importUsingComponent]), - template: componentWXMLContent - }) - fs.writeFileSync(outputComponentWXMLPath, uxTxt) - printLog(processTypeEnum.GENERATE, '组件文件', `${outputComponentShowPath}${outputFilesTypes.TEMPL}`) - } - - const dependencyTree = getDependencyTree() - const fileDep = dependencyTree.get(component) || { - style: [], - script: [], - json: [], - media: [] - } - // 编译依赖的组件文件 - if (realComponentsPathList.length) { - res.scriptFiles = res.scriptFiles.map(item => { - for (let i = 0; i < realComponentsPathList.length; i++) { - const componentObj = realComponentsPathList[i] - const componentPath = componentObj.path - if (item === componentPath) { - return '' - } - } - return item - }).filter(item => item) - realComponentsPathList = realComponentsPathList.filter(item => !isComponentHasBeenBuilt(item.path as string) || notTaroComponents.has(item.path as string)) - await buildDepComponents(realComponentsPathList, buildConfig) - } - if (componentExportsMap.size && realComponentsPathList.length) { - realComponentsPathList.forEach(componentObj => { - if (componentExportsMap.has(componentObj.path as string)) { - const componentMap = componentExportsMap.get(componentObj.path as string) - componentMap && componentMap.forEach(componentObj => { - componentDepComponents.forEach(depComponent => { - if (depComponent.name === componentObj.name) { - let componentPath = componentObj.path - let realPath - if (NODE_MODULES_REG.test(componentPath as string)) { - componentPath = (componentPath as string).replace(nodeModulesPath, npmOutputDir) - realPath = promoteRelativePath(path.relative(outputComponentJSPath, componentPath)) - } else { - realPath = promoteRelativePath(path.relative(component, (componentPath as string))) - } - depComponent.path = realPath.replace(extnameExpRegOf(realPath), '') - } - }) - }) - } - }) - } - if (!isQuickApp) { - fs.writeFileSync(outputComponentJSONPath, JSON.stringify(_.merge({}, buildUsingComponents(component, componentDepComponents, true), res.configObj), null, 2)) - printLog(processTypeEnum.GENERATE, '组件配置', `${outputDirName}/${outputComponentShowPath}${outputFilesTypes.CONFIG}`) - fs.writeFileSync(outputComponentJSPath, resCode) - printLog(processTypeEnum.GENERATE, '组件逻辑', `${outputDirName}/${outputComponentShowPath}${outputFilesTypes.SCRIPT}`) - fs.writeFileSync(outputComponentWXMLPath, componentWXMLContent) - processNativeWxml(outputComponentWXMLPath.replace(outputDir, sourceDir), componentWXMLContent, outputComponentWXMLPath) - printLog(processTypeEnum.GENERATE, '组件模板', `${outputDirName}/${outputComponentShowPath}${outputFilesTypes.TEMPL}`) - } - // 编译依赖的脚本文件 - if (isDifferentArray(fileDep['script'], res.scriptFiles)) { - await compileDepScripts(res.scriptFiles, !isQuickApp) - } - const depComponents = getDepComponents() - // 编译样式文件 - if (isDifferentArray(fileDep['style'], res.styleFiles) || isDifferentArray(depComponents.get(component) || [], componentDepComponents)) { - printLog(processTypeEnum.GENERATE, '组件样式', `${outputDirName}/${outputComponentShowPath}${outputFilesTypes.STYLE}`) - await compileDepStyles(outputComponentWXSSPath, res.styleFiles) - } - // 拷贝依赖文件 - if (isDifferentArray(fileDep['json'], res.jsonFiles)) { - copyFilesFromSrcToOutput(res.jsonFiles) - } - if (isDifferentArray(fileDep['media'], res.mediaFiles)) { - copyFilesFromSrcToOutput(res.mediaFiles) - } - fileDep['style'] = res.styleFiles - fileDep['script'] = res.scriptFiles - fileDep['json'] = res.jsonFiles - fileDep['media'] = res.mediaFiles - dependencyTree.set(component, fileDep) - depComponents.set(component, componentDepComponents) - - return buildResult - } catch (err) { - printLog(processTypeEnum.ERROR, '组件编译', `组件${componentShowPath}编译失败!`) - if (!isComponentHasBeenBuilt(component)) { - setHasBeenBuiltComponents(component) - } - console.log(err) - return { - js: '', - wxss: '', - wxml: '' - } - } -} diff --git a/packages/taro-cli/src/mini/constants.ts b/packages/taro-cli/src/mini/constants.ts deleted file mode 100644 index 572b8a827ed4..000000000000 --- a/packages/taro-cli/src/mini/constants.ts +++ /dev/null @@ -1,6 +0,0 @@ - -export const QUICKAPP_SPECIAL_COMPONENTS = new Set([ - 'View', - 'Text', - 'Block' -]) diff --git a/packages/taro-cli/src/mini/entry.ts b/packages/taro-cli/src/mini/entry.ts deleted file mode 100644 index 980b85508757..000000000000 --- a/packages/taro-cli/src/mini/entry.ts +++ /dev/null @@ -1,200 +0,0 @@ -import * as fs from 'fs-extra' -import * as path from 'path' - -import { AppConfig } from '@tarojs/taro' -import * as wxTransformer from '@tarojs/transformer-wx' - -import { - REG_SCRIPTS, - REG_TYPESCRIPT, - CONFIG_MAP, - processTypeEnum, - PARSE_AST_TYPE, - BUILD_TYPES -} from '../util/constants' -import { - isDifferentArray, - printLog, - isEmptyObject, - resolveScriptPath, - promoteRelativePath, - generateQuickAppUx, - uglifyJS -} from '../util' -import { IWxTransformResult, TogglableOptions } from '../util/types' - -import { getBuildData, copyFilesFromSrcToOutput, getDependencyTree } from './helper' -import { compileDepScripts, compileScriptFile } from './compileScript' -import { compileDepStyles } from './compileStyle' -import { parseAst } from './astProcess' -import { buildSingleComponent } from './component' - -async function buildCustomTabbar () { - const { - sourceDir - } = getBuildData() - const customTabbarPath = path.join(sourceDir, 'custom-tab-bar') - const customTabbarJSPath = resolveScriptPath(customTabbarPath) - await buildSingleComponent({ - path: customTabbarJSPath, - name: 'custom-tab-bar' - }) -} - -function buildWorkers (worker: string) { - const { - sourceDir - } = getBuildData() - printLog(processTypeEnum.COMPILE, 'Workers', '编译 worker 相关文件') - const workerDir = path.join(sourceDir, worker) - function fileRecursiveSearch (fileDir) { - fs.readdir(fileDir, (err, files) => { - if (err) { - console.warn(err) - } else { - files.forEach(filename => { - const filePath = path.join(fileDir, filename) - fs.stat(filePath, async (err, stats) => { - if (err) { - console.warn(err) - } else { - const isFile = stats.isFile() - const isDir = stats.isDirectory() - if (isFile) { - if (REG_SCRIPTS.test(filePath)) { - await compileDepScripts([filePath], true) - } else { - copyFilesFromSrcToOutput([filePath]) - } - } else if (isDir) { - fileRecursiveSearch(filePath) - } - } - }) - }) - } - }) - } - fileRecursiveSearch(workerDir) -} - -export async function buildEntry (): Promise { - const { - appPath, - buildAdapter, - constantsReplaceList, - entryFilePath, - sourceDir, - outputDir, - entryFileName, - sourceDirName, - outputDirName, - projectConfig, - outputFilesTypes, - isProduction, - jsxAttributeNameReplace - } = getBuildData() - const weappConf = projectConfig.weapp || { appOutput: true} - const appOutput = typeof weappConf.appOutput === 'boolean' ? weappConf.appOutput : true - const entryFileCode = fs.readFileSync(entryFilePath).toString() - const outputEntryFilePath = path.join(outputDir, entryFileName) - - printLog(processTypeEnum.COMPILE, '入口文件', `${sourceDirName}/${entryFileName}`) - try { - const transformResult: IWxTransformResult = wxTransformer({ - code: entryFileCode, - sourcePath: entryFilePath, - sourceDir, - outputPath: outputEntryFilePath, - isApp: true, - isTyped: REG_TYPESCRIPT.test(entryFilePath), - adapter: buildAdapter, - env: constantsReplaceList, - jsxAttributeNameReplace - }) - // app.js的template忽略 - const res = parseAst(PARSE_AST_TYPE.ENTRY, transformResult.ast, [], entryFilePath, outputEntryFilePath) - let resCode = res.code - if (buildAdapter !== BUILD_TYPES.QUICKAPP) { - resCode = await compileScriptFile(resCode, entryFilePath, outputEntryFilePath, buildAdapter) - if (isProduction) { - resCode = uglifyJS(resCode, entryFilePath, appPath, projectConfig!.plugins!.uglify as TogglableOptions) - } - } - // 处理res.configObj 中的tabBar配置 - const tabBar = res.configObj.tabBar - if (tabBar && typeof tabBar === 'object' && !isEmptyObject(tabBar)) { - const { - list: listConfig, - iconPath: pathConfig, - selectedIconPath: selectedPathConfig - } = CONFIG_MAP[buildAdapter] - const list = tabBar[listConfig] || [] - let tabBarIcons: string[] = [] - list.forEach(item => { - item[pathConfig] && tabBarIcons.push(item[pathConfig]) - item[selectedPathConfig] && tabBarIcons.push(item[selectedPathConfig]) - }) - tabBarIcons = tabBarIcons.map(item => path.resolve(sourceDir, item)) - if (tabBarIcons && tabBarIcons.length) { - res.mediaFiles = res.mediaFiles.concat(tabBarIcons) - } - } - if (buildAdapter === BUILD_TYPES.QUICKAPP) { - // 生成 快应用 ux 文件 - const styleRelativePath = promoteRelativePath(path.relative(outputEntryFilePath, path.join(outputDir, `app${outputFilesTypes.STYLE}`))) - const uxTxt = generateQuickAppUx({ - script: resCode, - style: styleRelativePath - }) - fs.writeFileSync(path.join(outputDir, `app${outputFilesTypes.TEMPL}`), uxTxt) - printLog(processTypeEnum.GENERATE, '入口文件', `${outputDirName}/app${outputFilesTypes.TEMPL}`) - } else { - if (res.configObj.workers) { - buildWorkers(res.configObj.workers) - } - if (res.configObj.tabBar && res.configObj.tabBar.custom) { - await buildCustomTabbar() - } - if (appOutput) { - fs.writeFileSync(path.join(outputDir, 'app.json'), JSON.stringify(res.configObj, null, 2)) - printLog(processTypeEnum.GENERATE, '入口配置', `${outputDirName}/app.json`) - fs.writeFileSync(path.join(outputDir, 'app.js'), resCode) - printLog(processTypeEnum.GENERATE, '入口文件', `${outputDirName}/app.js`) - } - } - const dependencyTree = getDependencyTree() - const fileDep = dependencyTree.get(entryFilePath) || { - style: [], - script: [], - json: [], - media: [] - } - // 编译依赖的脚本文件 - if (isDifferentArray(fileDep['script'], res.scriptFiles)) { - await compileDepScripts(res.scriptFiles, buildAdapter !== BUILD_TYPES.QUICKAPP) - } - // 编译样式文件 - if (isDifferentArray(fileDep['style'], res.styleFiles) && appOutput) { - await compileDepStyles(path.join(outputDir, `app${outputFilesTypes.STYLE}`), res.styleFiles) - printLog(processTypeEnum.GENERATE, '入口样式', `${outputDirName}/app${outputFilesTypes.STYLE}`) - } - // 拷贝依赖文件 - if (isDifferentArray(fileDep['json'], res.jsonFiles)) { - copyFilesFromSrcToOutput(res.jsonFiles) - } - - if (isDifferentArray(fileDep['media'], res.mediaFiles)) { - copyFilesFromSrcToOutput(res.mediaFiles) - } - fileDep['style'] = res.styleFiles - fileDep['script'] = res.scriptFiles - fileDep['json'] = res.jsonFiles - fileDep['media'] = res.mediaFiles - dependencyTree.set(entryFilePath, fileDep) - return res.configObj - } catch (err) { - console.log(err) - return {} - } -} diff --git a/packages/taro-cli/src/mini/helper.ts b/packages/taro-cli/src/mini/helper.ts index de8f4f50dc26..c4c5eca82694 100644 --- a/packages/taro-cli/src/mini/helper.ts +++ b/packages/taro-cli/src/mini/helper.ts @@ -1,63 +1,34 @@ import * as fs from 'fs-extra' import * as path from 'path' +import * as os from 'os' +import { execSync } from 'child_process' import * as _ from 'lodash' -import { Config } from '@tarojs/taro' -import * as wxTransformer from '@tarojs/transformer-wx' -import getHashName from '../util/hash' +import * as ora from 'ora' +import chalk from 'chalk' +import { IProjectConfig, ITaroManifestConfig } from '@tarojs/taro/types/compile' import { BUILD_TYPES, MINI_APP_FILES, IMINI_APP_FILE_TYPE, PROJECT_CONFIG, - processTypeEnum, - REG_SCRIPTS, - NODE_MODULES_REG, - taroJsQuickAppComponents, - PARSE_AST_TYPE, NODE_MODULES } from '../util/constants' import { resolveScriptPath, - isAliasPath, - replaceAliasPath, - promoteRelativePath, - isNpmPkg, - printLog, - generateEnvList, - generateConstantsList, isEmptyObject, recursiveFindNodeModules, - getBabelConfig, - extnameExpRegOf, - generateAlipayPath + shouldUseCnpm, + shouldUseYarn, + unzip } from '../util' -import { resolveNpmPkgMainPath } from '../util/resolve_npm_files' -import { resolveNpmSync } from '../util/npm' - import { - IProjectConfig, IOption, - INpmConfig, - IWxTransformResult, - ITaroManifestConfig + INpmConfig } from '../util/types' import CONFIG from '../config' - -import { - IComponentObj, - IBuildResult, - IDependency -} from './interface' -import { getNpmOutputDir } from '../util/npmExact' -import { parseAst } from './astProcess' - -const isCopyingFiles: Map = new Map() -const dependencyTree: Map = new Map() -const hasBeenBuiltComponents: Set = new Set() -const componentExportsMap = new Map() -const depComponents = new Map() +import { downloadGithubRepoLatestRelease } from '../util/dowload' export interface IBuildData { appPath: string, @@ -71,16 +42,12 @@ export interface IBuildData { entryFileName: string, projectConfig: IProjectConfig, npmConfig: INpmConfig, - appConfig: Config, - pageConfigs: Map, alias: IOption, compileConfig: {[k: string]: any}, isProduction: boolean, buildAdapter: BUILD_TYPES, outputFilesTypes: IMINI_APP_FILE_TYPE, - constantsReplaceList: IOption, nodeModulesPath: string, - npmOutputDir: string, jsxAttributeNameReplace?: { [key: string]: any }, @@ -89,19 +56,6 @@ export interface IBuildData { let BuildData: IBuildData -export const shouldTransformAgain = function () { - const babelConfig = getBabelConfig(BuildData.projectConfig!.plugins!.babel) - const pluginsStr = JSON.stringify(babelConfig.plugins) - if (/transform-runtime/.test(pluginsStr)) { - return true - } - return false -} - -export function setAppConfig (appConfig: Config) { - BuildData.appConfig = appConfig -} - export function setIsProduction (isProduction: boolean) { BuildData.isProduction = isProduction } @@ -110,7 +64,7 @@ export function setQuickappManifest (quickappManifest: ITaroManifestConfig) { BuildData.quickappManifest = quickappManifest } -export function setBuildData (appPath: string, adapter: BUILD_TYPES): IBuildData { +export function setBuildData (appPath: string, adapter: BUILD_TYPES, options?: Partial | null): IBuildData { const configDir = path.join(appPath, PROJECT_CONFIG) const projectConfig = require(configDir)(_.merge) const sourceDirName = projectConfig.sourceRoot || CONFIG.SOURCE_DIR @@ -141,16 +95,10 @@ export function setBuildData (appPath: string, adapter: BUILD_TYPES): IBuildData npmConfig, alias: pathAlias, isProduction: false, - appConfig: {}, - pageConfigs: new Map(), compileConfig: useCompileConf, buildAdapter: adapter, outputFilesTypes: MINI_APP_FILES[adapter], - constantsReplaceList: Object.assign({}, generateEnvList(projectConfig.env || {}), generateConstantsList(projectConfig.defineConstants || {}), { - 'process.env.TARO_ENV': adapter - }), nodeModulesPath: recursiveFindNodeModules(path.join(appPath, NODE_MODULES)), - npmOutputDir: getNpmOutputDir(outputDir, configDir, npmConfig), jsxAttributeNameReplace: weappConf.jsxAttributeNameReplace || {} } // 可以自定义输出文件类型 @@ -161,7 +109,9 @@ export function setBuildData (appPath: string, adapter: BUILD_TYPES): IBuildData BuildData.originalOutputDir = BuildData.outputDir BuildData.outputDirName = `${BuildData.outputDirName}/src` BuildData.outputDir = path.join(BuildData.appPath, BuildData.outputDirName) - BuildData.npmOutputDir = getNpmOutputDir(BuildData.outputDir, BuildData.configDir, BuildData.npmConfig) + } + if (options) { + Object.assign(BuildData, options) } return BuildData @@ -171,229 +121,97 @@ export function getBuildData (): IBuildData { return BuildData } -export function getDependencyTree (): Map { - return dependencyTree -} - -export function setHasBeenBuiltComponents (componentPath: string) { - hasBeenBuiltComponents.add(componentPath) -} - -export function getHasBeenBuiltComponents () { - return hasBeenBuiltComponents -} - -export function isComponentHasBeenBuilt (componentPath: string): boolean { - return hasBeenBuiltComponents.has(componentPath) +export function setOutputDirName (outputDirName) { + BuildData.originalOutputDir = BuildData.outputDir + BuildData.outputDirName = outputDirName + BuildData.outputDir = path.join(BuildData.appPath, BuildData.outputDirName) } -export function deleteHasBeenBuiltComponent (filePath) { - if (hasBeenBuiltComponents.has(filePath)) { - hasBeenBuiltComponents.delete(filePath) +export async function prepareQuickAppEnvironment (buildData: IBuildData) { + let isReady = false + let needDownload = false + let needInstall = false + const originalOutputDir = buildData.originalOutputDir + console.log() + if (fs.existsSync(path.join(buildData.originalOutputDir, 'sign'))) { + needDownload = false + } else { + needDownload = true } -} - -export function setComponentExportsMap (key: string, value: IComponentObj[]) { - componentExportsMap.set(key, value) -} - -export function getComponentExportsMapItem (key: string): IComponentObj[] | void { - return componentExportsMap.get(key) -} - -export function getComponentExportsMap (): Map { - return componentExportsMap -} - -export function getDepComponents (): Map { - return depComponents -} - -export function buildUsingComponents ( - filePath: string, - components: IComponentObj[], - isComponent?: boolean -): IOption { - const { buildAdapter } = getBuildData() - const usingComponents = Object.create(null) - const pathAlias = BuildData.projectConfig.alias || {} - for (const component of components) { - let componentPath = component.path - if (isAliasPath(componentPath as string, pathAlias)) { - componentPath = replaceAliasPath(filePath, componentPath as string, pathAlias) - } - componentPath = resolveScriptPath(path.resolve(filePath, '..', componentPath as string)) - if (fs.existsSync(componentPath)) { - componentPath = promoteRelativePath(path.relative(filePath, componentPath)) - } else { - componentPath = component.path - } - if (buildAdapter === BUILD_TYPES.ALIPAY) { - componentPath = generateAlipayPath(componentPath) - } - if (component.name) { - const componentName = component.name.split('|')[0] - usingComponents[componentName] = (componentPath as string).replace(extnameExpRegOf(componentPath as string), '') - } + if (needDownload) { + const getSpinner = ora('开始下载快应用运行容器...').start() + await downloadGithubRepoLatestRelease('NervJS/quickapp-container', buildData.appPath, originalOutputDir) + await unzip(path.join(originalOutputDir, 'download_temp.zip')) + getSpinner.succeed('快应用运行容器下载完成') + } else { + console.log(`${chalk.green('✔ ')} 快应用容器已经准备好`) } - return Object.assign({}, isComponent ? { component: true } : { usingComponents: {} }, components.length ? { - usingComponents - } : {}) -} - -export function getRealComponentsPathList ( - filePath: string, - components: IComponentObj[] -): IComponentObj[] { - const { appPath, isProduction, buildAdapter, projectConfig, npmConfig } = BuildData - const pathAlias = projectConfig.alias || {} - return components.length ? components.map(component => { - let componentPath = component.path - if (isAliasPath(componentPath as string, pathAlias)) { - componentPath = replaceAliasPath(filePath, componentPath as string, pathAlias) - } - if (isNpmPkg(componentPath as string)) { - try { - componentPath = resolveNpmPkgMainPath(componentPath as string, isProduction, npmConfig, buildAdapter, appPath) - } catch (err) { - console.log(err) - } - } else { - componentPath = path.resolve(path.dirname(filePath), componentPath as string) - componentPath = resolveScriptPath(componentPath) - } - if (componentPath && isFileToBePage(componentPath)) { - printLog(processTypeEnum.ERROR, '组件引用', `文件${component.path}已经在 app.js 中被指定为页面,不能再作为组件来引用!`) - } - return { - path: componentPath, - name: component.name, - type: component.type - } - }) : [] -} - -export function isFileToBePage (filePath: string): boolean { - let isPage = false - const { appConfig, sourceDir } = BuildData - const extname = path.extname(filePath) - const pages = appConfig.pages || [] - const filePathWithoutExt = filePath.replace(extname, '') - pages.forEach(page => { - if (filePathWithoutExt === path.join(sourceDir, page)) { - isPage = true - } - }) - return isPage && REG_SCRIPTS.test(extname) -} - -export function getDepStyleList ( - outputFilePath: string, - buildDepComponentsResult: IBuildResult[] -): string[] { - const { sourceDir, outputDir } = BuildData - let depWXSSList: string[] = [] - if (buildDepComponentsResult.length) { - depWXSSList = buildDepComponentsResult.map(item => { - let wxss = item.wxss - wxss = wxss.replace(sourceDir, outputDir) - wxss = promoteRelativePath(path.relative(outputFilePath, wxss)) - return wxss - }) + process.chdir(originalOutputDir) + console.log() + if (fs.existsSync(path.join(originalOutputDir, 'node_modules'))) { + needInstall = false + } else { + needInstall = true } - return depWXSSList -} - -export function initCopyFiles () { - isCopyingFiles.clear() -} - -export function copyFilesFromSrcToOutput (files: string[], cb?: (sourceFilePath: string, outputFilePath: string) => void) { - const { nodeModulesPath, npmOutputDir, sourceDir, outputDir, appPath, projectConfig } = BuildData - const adapterConfig = Object.assign({}, projectConfig.weapp) - files.forEach(file => { - let outputFilePath - if (NODE_MODULES_REG.test(file)) { - outputFilePath = file.replace(nodeModulesPath, npmOutputDir) - } else { - if (adapterConfig.publicPath && adapterConfig.staticDirectory) { - const hashName = getHashName(file) - const staticPath = path.join(appPath, adapterConfig.staticDirectory, projectConfig.projectName || '') - outputFilePath = `${staticPath}/${hashName}` + if (needInstall) { + const isWindows = os.platform() === 'win32' + let command + if (shouldUseYarn()) { + if(!isWindows) { + command = 'NODE_ENV=development yarn install' } else { - outputFilePath = file.replace(sourceDir, outputDir) + command = 'yarn install' } - } - if (isCopyingFiles.get(outputFilePath)) { - return - } - isCopyingFiles.set(outputFilePath, true) - let modifySrc = file.replace(appPath + path.sep, '') - modifySrc = modifySrc.split(path.sep).join('/') - let modifyOutput = outputFilePath.replace(appPath + path.sep, '') - modifyOutput = modifyOutput.split(path.sep).join('/') - printLog(processTypeEnum.COPY, '文件', modifyOutput) - if (!fs.existsSync(file)) { - printLog(processTypeEnum.ERROR, '文件', `${modifySrc} 不存在`) - } else { - fs.ensureDir(path.dirname(outputFilePath)) - if (file === outputFilePath) { - return + } else if (shouldUseCnpm()) { + if(!isWindows) { + command = 'NODE_ENV=development cnpm install' + } else { + command = 'cnpm install' } - if (cb) { - cb(file, outputFilePath) + } else { + if(!isWindows) { + command = 'NODE_ENV=development npm install' } else { - fs.copySync(file, outputFilePath) + command = 'npm install' } } - }) -} - -export function getTaroJsQuickAppComponentsPath () { - const taroJsQuickAppComponentsPkg = resolveNpmSync(taroJsQuickAppComponents, BuildData.nodeModulesPath) - if (!taroJsQuickAppComponentsPkg) { - printLog(processTypeEnum.ERROR, '包安装', `缺少包 ${taroJsQuickAppComponents},请安装!`) - process.exit(0) + const installSpinner = ora(`安装快应用依赖环境, 需要一会儿...`).start() + try { + const stdout = execSync(command) + installSpinner.color = 'green' + installSpinner.succeed('安装成功') + console.log(`${stdout}`) + isReady = true + } catch (error) { + installSpinner.color = 'red' + installSpinner.fail(chalk.red(`快应用依赖环境安装失败,请进入 ${path.basename(originalOutputDir)} 重新安装!`)) + console.log(`${error}`) + isReady = false + } + } else { + console.log(`${chalk.green('✔ ')} 快应用依赖已经安装好`) + isReady = true } - return path.join(path.dirname(taroJsQuickAppComponentsPkg as string), 'src/components') -} - -const SCRIPT_CONTENT_REG = /]*>([\s\S]*?)<\/script>/gm - -export function getImportTaroSelfComponents (filePath, taroSelfComponents) { - const importTaroSelfComponents = new Set<{ path: string, name: string }>() - const taroJsQuickAppComponentsPath = getTaroJsQuickAppComponentsPath() - taroSelfComponents.forEach(c => { - const cPath = path.join(taroJsQuickAppComponentsPath, c) - const cMainPath = path.join(cPath, 'index') - const cFiles = fs.readdirSync(cPath).map(item => path.join(cPath, item)) - copyFilesFromSrcToOutput(cFiles, (sourceFilePath, outputFilePath) => { - if (fs.existsSync(sourceFilePath)) { - const fileContent = fs.readFileSync(sourceFilePath).toString() - const match = SCRIPT_CONTENT_REG.exec(fileContent) - if (match) { - const scriptContent = match[1] - const transformResult: IWxTransformResult = wxTransformer({ - code: scriptContent, - sourcePath: sourceFilePath, - sourceDir: getBuildData().sourceDir, - outputPath: outputFilePath, - isNormal: true, - isTyped: false, - adapter: BUILD_TYPES.QUICKAPP - }) - const res = parseAst(PARSE_AST_TYPE.NORMAL, transformResult.ast, [], sourceFilePath, outputFilePath) - const newFileContent = fileContent.replace(SCRIPT_CONTENT_REG, ``) - fs.ensureDirSync(path.dirname(outputFilePath)) - fs.writeFileSync(outputFilePath, newFileContent) - } - } + return isReady +} + +export async function runQuickApp (isWatch: boolean | void, buildData: IBuildData, port?: number, release?: boolean) { + const originalOutputDir = buildData.originalOutputDir + const { compile } = require(require.resolve('hap-toolkit/lib/commands/compile', { paths: [originalOutputDir] })) + if (isWatch) { + const { launchServer } = require(require.resolve('@hap-toolkit/server', { paths: [originalOutputDir] })) + launchServer({ + port: port || 12306, + watch: isWatch, + clearRecords: false, + disableADB: false }) - const cRelativePath = promoteRelativePath(path.relative(filePath, cMainPath.replace(BuildData.nodeModulesPath, BuildData.npmOutputDir))) - importTaroSelfComponents.add({ - path: cRelativePath, - name: c - }) - }) - return importTaroSelfComponents + compile('native', 'dev', true) + } else { + if (!release) { + compile('native', 'dev', false) + } else { + compile('native', 'prod', false) + } + } } diff --git a/packages/taro-cli/src/mini/index.ts b/packages/taro-cli/src/mini/index.ts index 762b92173947..fac9b46321f6 100644 --- a/packages/taro-cli/src/mini/index.ts +++ b/packages/taro-cli/src/mini/index.ts @@ -1,49 +1,26 @@ import * as fs from 'fs-extra' import * as path from 'path' -import * as os from 'os' - import chalk from 'chalk' -import * as _ from 'lodash' -import * as ora from 'ora' -import { execSync } from 'child_process' -import { - printLog, - getInstalledNpmPkgVersion, - getPkgVersion, - copyFiles, - unzip, - shouldUseYarn, - shouldUseCnpm, - resolvePureScriptPath, - checkCliAndFrameworkVersion -} from '../util' -import { processTypeEnum, BUILD_TYPES } from '../util/constants' -import { IMiniAppBuildConfig } from '../util/types' +import { IBuildOptions } from '../util/types' +import { BUILD_TYPES, processTypeEnum } from '../util/constants' +import * as npmProcess from '../util/npm' +import { getBabelConfig, getInstalledNpmPkgVersion, getPkgVersion, printLog, checkCliAndFrameworkVersion } from '../util' +import Builder from '../build' import * as defaultManifestJSON from '../config/manifest.default.json' import { setBuildData, - getBuildData, setIsProduction, - setAppConfig, - IBuildData, - setQuickappManifest + getBuildData, + setQuickappManifest, + prepareQuickAppEnvironment, + runQuickApp, + IBuildData } from './helper' -import { buildEntry } from './entry' -import { buildPages, buildSinglePage } from './page' -import { watchFiles } from './watch' -import { downloadGithubRepoLatestRelease } from '../util/dowload' -import { buildSingleComponent } from './component' function buildProjectConfig () { const { buildAdapter, sourceDir, outputDir, outputDirName, appPath } = getBuildData() - - if (buildAdapter === BUILD_TYPES.JD) { - // 京东小程序暂不支持 project.config.json - return - } - let projectConfigFileName = `project.${buildAdapter}.json` if (buildAdapter === BUILD_TYPES.WEAPP) { projectConfigFileName = 'project.config.json' @@ -112,166 +89,18 @@ function readQuickAppManifest () { return quickappJSON } -function generateQuickAppManifest (quickappJSON: any) { - const { appConfig, pageConfigs, outputDir, projectConfig } = getBuildData() - // 生成 router - const pages = (appConfig.pages as string[]).concat() - const routerPages = {} - const customPageConfig = quickappJSON.customPageConfig || {} - - pages.forEach(element => { - const customConfig = customPageConfig[element] - const pageConf: any = { - component: path.basename(element) - } - if (customConfig) { - const filter = customConfig.filter - const launchMode = customConfig.launchMode - if (filter) { - pageConf.filter = filter - } - if (launchMode) { - pageConf.launchMode = launchMode - } - } - routerPages[path.dirname(element)] = pageConf - }) - delete quickappJSON.customPageConfig - const routerEntry = pages.shift() - const router = { - entry: path.dirname(routerEntry as string), - pages: routerPages - } - // 生成 display - const display = JSON.parse(JSON.stringify(appConfig.window || {})) - display.pages = {} - pageConfigs.forEach((item, page) => { - if (item) { - display.pages[path.dirname(page)] = item - } - }) - quickappJSON.router = router - quickappJSON.display = display - quickappJSON.config = Object.assign({}, quickappJSON.config, { - designWidth: projectConfig.designWidth || 750 - }) - if (appConfig.window && appConfig.window.navigationStyle === 'custom') { - quickappJSON.display.titleBar = false - delete quickappJSON.display.navigationStyle - } - fs.writeFileSync(path.join(outputDir, 'manifest.json'), JSON.stringify(quickappJSON, null, 2)) -} - -async function prepareQuickAppEnvironment (buildData: IBuildData) { - let isReady = false - let needDownload = false - let needInstall = false - const originalOutputDir = buildData.originalOutputDir - console.log() - if (fs.existsSync(path.join(buildData.originalOutputDir, 'sign'))) { - needDownload = false - } else { - needDownload = true - } - if (needDownload) { - const getSpinner = ora('开始下载快应用运行容器...').start() - await downloadGithubRepoLatestRelease('NervJS/quickapp-container', buildData.appPath, originalOutputDir) - await unzip(path.join(originalOutputDir, 'download_temp.zip')) - getSpinner.succeed('快应用运行容器下载完成') - } else { - console.log(`${chalk.green('✔ ')} 快应用容器已经准备好`) - } - process.chdir(originalOutputDir) - console.log() - if (fs.existsSync(path.join(originalOutputDir, 'node_modules'))) { - needInstall = false - } else { - needInstall = true - } - if (needInstall) { - const isWindows = os.platform() === 'win32' - let command - if (shouldUseYarn()) { - if(!isWindows) { - command = 'NODE_ENV=development yarn install' - } else { - command = 'yarn install' - } - } else if (shouldUseCnpm()) { - if(!isWindows) { - command = 'NODE_ENV=development cnpm install' - } else { - command = 'cnpm install' - } - } else { - if(!isWindows) { - command = 'NODE_ENV=development npm install' - } else { - command = 'npm install' - } - } - const installSpinner = ora(`安装快应用依赖环境, 需要一会儿...`).start() - try { - const stdout = execSync(command) - installSpinner.color = 'green' - installSpinner.succeed('安装成功') - console.log(`${stdout}`) - isReady = true - } catch (error) { - installSpinner.color = 'red' - installSpinner.fail(chalk.red(`快应用依赖环境安装失败,请进入 ${path.basename(originalOutputDir)} 重新安装!`)) - console.log(`${error}`) - isReady = false - } - } else { - console.log(`${chalk.green('✔ ')} 快应用依赖已经安装好`) - isReady = true - } - return isReady -} - -async function runQuickApp (isWatch: boolean | void, buildData: IBuildData, port?: number, release?: boolean) { - const originalOutputDir = buildData.originalOutputDir - const { compile } = require(require.resolve('hap-toolkit/lib/commands/compile', { paths: [originalOutputDir] })) - if (isWatch) { - const { launchServer } = require(require.resolve('@hap-toolkit/server', { paths: [originalOutputDir] })) - launchServer({ - port: port || 12306, - watch: isWatch, - clearRecords: false, - disableADB: false - }) - compile('native', 'dev', true) - } else { - if (!release) { - compile('native', 'dev', false) - } else { - compile('native', 'prod', false) - } +export async function build (appPath: string, { watch, type = BUILD_TYPES.WEAPP, envHasBeenSet = false, port, release }: IBuildOptions, customBuildData: Partial | null | undefined, builder: Builder) { + const buildData = setBuildData(appPath, type, customBuildData) + const isQuickApp = type === BUILD_TYPES.QUICKAPP + if (type !== BUILD_TYPES.PLUGIN) { + await checkCliAndFrameworkVersion(appPath, type) } -} - -export async function build ( - appPath: string, - { - watch, - adapter = BUILD_TYPES.WEAPP, - envHasBeenSet = false, - port, - release, - page, - component - }: IMiniAppBuildConfig -) { - const buildData = envHasBeenSet ? getBuildData() : setBuildData(appPath, adapter) - const isQuickApp = adapter === BUILD_TYPES.QUICKAPP - let quickappJSON - await checkCliAndFrameworkVersion(appPath, adapter) - process.env.TARO_ENV = adapter + process.env.TARO_ENV = type if (!envHasBeenSet) { setIsProduction(process.env.NODE_ENV === 'production' || !watch) } fs.ensureDirSync(buildData.outputDir) + let quickappJSON if (!isQuickApp) { buildProjectConfig() await buildFrameworkInfo() @@ -279,29 +108,11 @@ export async function build ( quickappJSON = readQuickAppManifest() setQuickappManifest(quickappJSON) } - if (!isQuickApp) { - copyFiles(appPath, buildData.projectConfig.copy) - } - if (page) { - const pagePath = path.resolve(appPath, page).replace(buildData.sourceDir, '') - await buildSinglePage(pagePath) - return - } - if (component) { - const componentPath = resolvePureScriptPath(path.resolve(appPath, component)) - await buildSingleComponent({ - path: componentPath - }) - return - } - const appConfig = await buildEntry() - setAppConfig(appConfig) - await buildPages() - if (watch) { - watchFiles() - } + + await buildWithWebpack({ + appPath + }, builder) if (isQuickApp) { - generateQuickAppManifest(quickappJSON) const isReady = await prepareQuickAppEnvironment(buildData) if (!isReady) { console.log() @@ -309,7 +120,47 @@ export async function build ( process.exit(0) return } - copyFiles(appPath, buildData.projectConfig.copy) await runQuickApp(watch, buildData, port, release) } } + +async function buildWithWebpack ({ appPath }: { appPath: string }, builder) { + const { + entryFilePath, + buildAdapter, + projectConfig, + isProduction, + alias, + sourceDirName, + outputDirName, + nodeModulesPath, + quickappManifest + } = getBuildData() + const miniRunner = await npmProcess.getNpmPkg('@tarojs/mini-runner', appPath) + const babelConfig = getBabelConfig(projectConfig.babel) + const miniRunnerOpts = { + entry: { + app: [entryFilePath] + }, + alias, + copy: projectConfig.copy, + sourceRoot: sourceDirName, + outputRoot: outputDirName, + buildAdapter, + babel: babelConfig, + csso: projectConfig.csso, + sass: projectConfig.sass, + uglify: projectConfig.uglify, + plugins: projectConfig.plugins, + projectName: projectConfig.projectName, + isWatch: !isProduction, + env: projectConfig.env, + defineConstants: projectConfig.defineConstants, + designWidth: projectConfig.designWidth, + deviceRatio: projectConfig.deviceRatio, + nodeModulesPath, + quickappJSON: quickappManifest, + ...projectConfig.mini + } + await miniRunner(appPath, miniRunnerOpts, builder) +} diff --git a/packages/taro-cli/src/mini/interface.ts b/packages/taro-cli/src/mini/interface.ts deleted file mode 100644 index 54d9505bd70d..000000000000 --- a/packages/taro-cli/src/mini/interface.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { IWxTransformResult } from '../util/types' - -export interface IComponentObj { - name?: string, - path: string | null, - type?: string -} - -export interface IIsFileToBeTaroComponentReturn { - isTaroComponent: boolean, - transformResult: IWxTransformResult -} - -export interface IBuildResult { - js: string, - wxss: string, - wxml: string -} - -export interface IDependency { - style: string[], - script: string[], - json: string[], - media: string[] -} diff --git a/packages/taro-cli/src/mini/native.ts b/packages/taro-cli/src/mini/native.ts deleted file mode 100644 index 992eb567b9ae..000000000000 --- a/packages/taro-cli/src/mini/native.ts +++ /dev/null @@ -1,144 +0,0 @@ -import * as fs from 'fs-extra' -import * as path from 'path' - -import { Config as IConfig } from '@tarojs/taro' -import chalk from 'chalk' - -import { REG_WXML_IMPORT, processTypeEnum, taroJsFramework, BUILD_TYPES, REG_SCRIPT, REG_STYLE, REG_UX, NODE_MODULES_REG } from '../util/constants' -import { isEmptyObject, printLog, resolveScriptPath, copyFileSync, extnameExpRegOf, resolveQuickappFilePath, processUxContent } from '../util' -import CONFIG from '../config'; - -import { buildDepComponents } from './component' -import { compileDepScripts } from './compileScript' -import { compileDepStyles } from './compileStyle' -import { getBuildData } from './helper' - -export function processNativeWxml ( - componentWXMLPath: string, - componentWXMLContent: string | null, - outputComponentWXMLPath: string -) { - let wxmlContent - let needCopy = true - const { sourceDir, outputDir } = getBuildData() - if (componentWXMLPath && fs.existsSync(componentWXMLPath)) { - wxmlContent = fs.readFileSync(componentWXMLPath).toString() - } else { - needCopy = false - wxmlContent = componentWXMLContent - } - const importWxmlPathList: string[] = [] - let regResult - while ((regResult = REG_WXML_IMPORT.exec(wxmlContent)) != null) { - importWxmlPathList.push(regResult[2] || regResult[3]) - } - if (importWxmlPathList.length) { - importWxmlPathList.forEach(item => { - const itemPath = path.resolve(componentWXMLPath, '..', item) - if (fs.existsSync(itemPath)) { - const outputItemPath = itemPath.replace(sourceDir, outputDir) - processNativeWxml(itemPath, null, outputItemPath) - } - }) - } - if (componentWXMLPath === outputComponentWXMLPath || !needCopy) { - return - } - copyFileSync(componentWXMLPath, outputComponentWXMLPath) -} - -function transformNativeQuickappComponent (configFile, componentPath) { - const { sourceDir, outputDir } = getBuildData() - - let componentUxPath = resolveQuickappFilePath(path.resolve(path.dirname(configFile), componentPath)) - if (!fs.existsSync(componentUxPath)) { - componentUxPath = resolveQuickappFilePath(path.join(sourceDir, componentPath)) - } - if (!fs.existsSync(componentUxPath)) { - return printLog(processTypeEnum.ERROR, '编译错误', `原生组件文件 ${componentUxPath} 不存在!`) - } - let componentStr = fs.readFileSync(componentUxPath).toString() - componentStr = processUxContent(componentStr, value => { - value = value.replace(/\'?\"?/ig, '') - if (REG_SCRIPT.test(value) || REG_STYLE.test(value)) { - const filePath = path.resolve(componentUxPath, '..', value) - const outputFilePath = filePath.replace(sourceDir, outputDir) - copyFileSync(filePath, outputFilePath) - } else if (REG_UX.test(value)) { - const importComponentPath = path.resolve(componentUxPath, '..', value) - transformNativeQuickappComponent(configFile, importComponentPath) - } - return value - }) - const outputComponentUxPath = componentUxPath.replace(sourceDir, outputDir) - copyFileSync(componentUxPath, outputComponentUxPath) -} - -export function transfromNativeComponents (configFile: string, componentConfig: IConfig) { - const { sourceDir, outputDir, outputFilesTypes, buildAdapter } = getBuildData() - const usingComponents = componentConfig.usingComponents - if (usingComponents && !isEmptyObject(usingComponents)) { - if (buildAdapter === BUILD_TYPES.QUICKAPP) { - Object.keys(usingComponents).map(async item => { - const componentPath = usingComponents[item] - transformNativeQuickappComponent(configFile, componentPath) - }) - } else { - Object.keys(usingComponents).map(async item => { - const componentPath = usingComponents[item] - if (/^plugin:\/\//.test(componentPath)) { - // 小程序 plugin - printLog(processTypeEnum.REFERENCE, '插件引用', `使用了插件 ${chalk.bold(componentPath)}`) - return - } - let componentJSPath = resolveScriptPath(path.resolve(path.dirname(configFile), componentPath)) - if (!fs.existsSync(componentJSPath)) { - componentJSPath = resolveScriptPath(path.join(sourceDir, componentPath)) - } - const componentJSONPath = componentJSPath.replace(extnameExpRegOf(componentJSPath), outputFilesTypes.CONFIG) - const componentWXMLPath = componentJSPath.replace(extnameExpRegOf(componentJSPath), outputFilesTypes.TEMPL) - const componentWXSSPath = componentJSPath.replace(extnameExpRegOf(componentJSPath), outputFilesTypes.STYLE) - let outputComponentJSPath = ''; - if (NODE_MODULES_REG.test(outputComponentJSPath)) { - outputComponentJSPath = componentJSPath.replace(NODE_MODULES_REG, path.resolve(outputDir, CONFIG.NPM_DIR)).replace(extnameExpRegOf(componentJSPath), outputFilesTypes.SCRIPT) - } else { - outputComponentJSPath = componentJSPath.replace(sourceDir, outputDir).replace(extnameExpRegOf(componentJSPath), outputFilesTypes.SCRIPT) - } - if (fs.existsSync(componentJSPath)) { - const componentJSContent = fs.readFileSync(componentJSPath).toString() - if (componentJSContent.indexOf(taroJsFramework) >= 0 && !fs.existsSync(componentWXMLPath)) { - const buildDepComponentsRes = await buildDepComponents([{ path: componentJSPath, name: item, type: 'default' }]) - return buildDepComponentsRes - } - await compileDepScripts([componentJSPath], true) - } else { - return printLog(processTypeEnum.ERROR, '编译错误', `原生组件文件 ${componentJSPath} 不存在!`) - } - if (fs.existsSync(componentWXMLPath)) { - const outputComponentWXMLPath = outputComponentJSPath.replace(extnameExpRegOf(outputComponentJSPath), outputFilesTypes.TEMPL) - processNativeWxml(componentWXMLPath, null, outputComponentWXMLPath) - } - if (fs.existsSync(componentWXSSPath)) { - const outputComponentWXSSPath = outputComponentJSPath.replace(extnameExpRegOf(outputComponentJSPath), outputFilesTypes.STYLE) - await compileDepStyles(outputComponentWXSSPath, [componentWXSSPath]) - } - if (fs.existsSync(componentJSONPath)) { - const componentJSON = require(componentJSONPath) - const outputComponentJSONPath = outputComponentJSPath.replace(extnameExpRegOf(outputComponentJSPath), outputFilesTypes.CONFIG) - copyFileSync(componentJSONPath, outputComponentJSONPath) - - // 解决组件循环依赖不断编译爆栈的问题 - if (componentJSON && componentJSON.usingComponents) { - Object.keys(componentJSON.usingComponents).forEach(key => { - if (key === item) { - delete componentJSON.usingComponents[key] - } - }) - } - - transfromNativeComponents(componentJSONPath, componentJSON) - } - }) - } - } -} diff --git a/packages/taro-cli/src/mini/page.ts b/packages/taro-cli/src/mini/page.ts deleted file mode 100644 index e0846ac19ab3..000000000000 --- a/packages/taro-cli/src/mini/page.ts +++ /dev/null @@ -1,307 +0,0 @@ -import * as fs from 'fs-extra' -import * as path from 'path' - -import { Config as IConfig } from '@tarojs/taro' -import * as wxTransformer from '@tarojs/transformer-wx' -import * as _ from 'lodash' - -import { - REG_TYPESCRIPT, - processTypeEnum, - NODE_MODULES_REG, - PARSE_AST_TYPE, - taroJsFramework, - BUILD_TYPES -} from '../util/constants' -import { - resolveScriptPath, - printLog, - isEmptyObject, - promoteRelativePath, - isDifferentArray, - copyFileSync, - generateQuickAppUx, - uglifyJS, - extnameExpRegOf -} from '../util' -import { IWxTransformResult, TogglableOptions } from '../util/types' - -import { IComponentObj } from './interface' -import { - getBuildData, - getRealComponentsPathList, - buildUsingComponents, - copyFilesFromSrcToOutput, - getDependencyTree, - getComponentExportsMap, - getDepComponents, - getImportTaroSelfComponents -} from './helper' -import { compileDepScripts, compileScriptFile } from './compileScript' -import { compileDepStyles } from './compileStyle' -import { transfromNativeComponents, processNativeWxml } from './native' -import { buildDepComponents } from './component' -import { parseAst } from './astProcess' -import rewriterTemplate from '../quickapp/template-rewriter' - -// 小程序页面编译 -export async function buildSinglePage (page: string) { - const { - appPath, - buildAdapter, - constantsReplaceList, - outputDir, - sourceDirName, - outputDirName, - sourceDir, - isProduction, - outputFilesTypes, - nodeModulesPath, - npmOutputDir, - jsxAttributeNameReplace, - pageConfigs, - appConfig, - projectConfig, - alias - } = getBuildData() - const pagePath = path.join(sourceDir, `${page}`) - const pageJs = resolveScriptPath(pagePath) - const dependencyTree = getDependencyTree() - const depComponents = getDepComponents() - const isQuickApp = buildAdapter === BUILD_TYPES.QUICKAPP - - printLog(processTypeEnum.COMPILE, '页面文件', `${sourceDirName}/${page}`) - if (!fs.existsSync(pageJs) || !fs.statSync(pageJs).isFile()) { - printLog(processTypeEnum.ERROR, '页面文件', `${sourceDirName}/${page} 不存在!`) - return - } - const pageJsContent = fs.readFileSync(pageJs).toString() - const outputPageJSPath = pageJs.replace(sourceDir, outputDir).replace(extnameExpRegOf(pageJs), outputFilesTypes.SCRIPT) - const outputPagePath = path.dirname(outputPageJSPath) - const outputPageJSONPath = outputPageJSPath.replace(extnameExpRegOf(outputPageJSPath), outputFilesTypes.CONFIG) - const outputPageWXMLPath = outputPageJSPath.replace(extnameExpRegOf(outputPageJSPath), outputFilesTypes.TEMPL) - const outputPageWXSSPath = outputPageJSPath.replace(extnameExpRegOf(outputPageJSPath), outputFilesTypes.STYLE) - // 判断是不是小程序原生代码页面 - const pageWXMLPath = pageJs.replace(extnameExpRegOf(pageJs), outputFilesTypes.TEMPL) - if (fs.existsSync(pageWXMLPath) && pageJsContent.indexOf(taroJsFramework) < 0) { - const pageJSONPath = pageJs.replace(extnameExpRegOf(pageJs), outputFilesTypes.CONFIG) - const pageWXSSPath = pageJs.replace(extnameExpRegOf(pageJs), outputFilesTypes.STYLE) - if (fs.existsSync(pageJSONPath)) { - const pageJSON = require(pageJSONPath) - copyFileSync(pageJSONPath, outputPageJSONPath) - transfromNativeComponents(pageJSONPath, pageJSON) - } - await compileDepScripts([pageJs], true) - copyFileSync(pageWXMLPath, outputPageWXMLPath) - if (fs.existsSync(pageWXSSPath)) { - await compileDepStyles(outputPageWXSSPath, [pageWXSSPath]) - } - return - } - try { - const rootProps: { [key: string]: any } = {} - if (isQuickApp) { - // 如果是快应用,需要提前解析一次 ast,获取 config - const aheadTransformResult: IWxTransformResult = wxTransformer({ - code: pageJsContent, - sourcePath: pageJs, - sourceDir, - outputPath: outputPageJSPath, - isRoot: true, - isTyped: REG_TYPESCRIPT.test(pageJs), - adapter: buildAdapter, - env: constantsReplaceList, - alias - }) - const res = parseAst(PARSE_AST_TYPE.PAGE, aheadTransformResult.ast, [], pageJs, outputPageJSPath) - if (res.configObj.enablePullDownRefresh || (appConfig.window && appConfig.window.enablePullDownRefresh)) { - rootProps.enablePullDownRefresh = true - } - if (appConfig.tabBar) { - rootProps.tabBar = appConfig.tabBar - } - rootProps.pagePath = /^\//.test(page) ? page : `/${page}` - if (res.hasEnablePageScroll) { - rootProps.enablePageScroll = true - } - } - const transformResult: IWxTransformResult = wxTransformer({ - code: pageJsContent, - sourcePath: pageJs, - sourceDir, - outputPath: outputPageJSPath, - isRoot: true, - isTyped: REG_TYPESCRIPT.test(pageJs), - adapter: buildAdapter, - env: constantsReplaceList, - rootProps, - jsxAttributeNameReplace, - alias - }) - const pageDepComponents = transformResult.components - const pageWXMLContent = isProduction ? transformResult.compressedTemplate : transformResult.template - const res = parseAst(PARSE_AST_TYPE.PAGE, transformResult.ast, pageDepComponents, pageJs, outputPageJSPath) - let resCode = res.code - fs.ensureDirSync(outputPagePath) - pageConfigs.set(page, res.configObj) - // 解析原生组件 - const { usingComponents = {} }: IConfig = res.configObj - if (usingComponents && !isEmptyObject(usingComponents)) { - const keys = Object.keys(usingComponents) - keys.forEach(item => { - pageDepComponents.forEach(component => { - if (_.camelCase(item) === _.camelCase(component.name)) { - delete usingComponents[item] - } - }) - }) - transfromNativeComponents(outputPageJSONPath.replace(outputDir, sourceDir), res.configObj) - } - - let realComponentsPathList: IComponentObj[] = [] - realComponentsPathList = getRealComponentsPathList(pageJs, pageDepComponents) - - if (!isQuickApp) { - resCode = await compileScriptFile(resCode, pageJs, outputPageJSPath, buildAdapter) - if (isProduction) { - resCode = uglifyJS(resCode, pageJs, appPath, projectConfig!.plugins!.uglify as TogglableOptions) - } - } - // 编译依赖的组件文件 - if (realComponentsPathList.length) { - res.scriptFiles = res.scriptFiles.map(item => { - for (let i = 0; i < realComponentsPathList.length; i++) { - const componentObj = realComponentsPathList[i] - const componentPath = componentObj.path - if (item === componentPath) { - return '' - } - } - return item - }).filter(item => item) - await buildDepComponents(realComponentsPathList) - } - const componentExportsMap = getComponentExportsMap() - if (componentExportsMap.size && realComponentsPathList.length) { - realComponentsPathList.forEach(component => { - if (componentExportsMap.has(component.path as string)) { - const componentMap = componentExportsMap.get(component.path as string) - componentMap && componentMap.forEach(component => { - pageDepComponents.forEach(depComponent => { - if (depComponent.name === component.name) { - let componentPath = component.path - let realPath - if (NODE_MODULES_REG.test(componentPath as string)) { - componentPath = (componentPath as string).replace(nodeModulesPath, npmOutputDir) - realPath = promoteRelativePath(path.relative(outputPageJSPath, componentPath)) - } else { - realPath = promoteRelativePath(path.relative(pageJs, componentPath as string)) - } - depComponent.path = realPath.replace(extnameExpRegOf(realPath), '') - } - }) - }) - } - }) - } - if (isQuickApp) { - // 快应用编译,搜集创建页面 ux 文件 - const importTaroSelfComponents = getImportTaroSelfComponents(outputPageJSPath, res.taroSelfComponents) - const importCustomComponents = new Set(pageDepComponents.map(item => { - return { - path: item.path, - name: item.name as string - } - })) - const usingComponents = res.configObj.usingComponents - let importUsingComponent: any = new Set([]) - if (usingComponents) { - importUsingComponent = new Set(Object.keys(usingComponents).map(item => { - return { - name: item, - path: usingComponents[item] - } - })) - } - // 生成页面 ux 文件 - let styleRelativePath - if (res.styleFiles.length) { - styleRelativePath = promoteRelativePath(path.relative(outputPageJSPath, outputPageWXSSPath)) - } - const uxTxt = generateQuickAppUx({ - script: resCode, - style: styleRelativePath, - imports: new Set([...importTaroSelfComponents, ...importCustomComponents, ...importUsingComponent]), - template: rewriterTemplate(pageWXMLContent) - }) - fs.writeFileSync(outputPageWXMLPath, uxTxt) - printLog(processTypeEnum.GENERATE, '页面文件', `${outputDirName}/${page}${outputFilesTypes.TEMPL}`) - } - const fileDep = dependencyTree.get(pageJs) || { - style: [], - script: [], - json: [], - media: [] - } - if (!isQuickApp) { - fs.writeFileSync(outputPageJSONPath, JSON.stringify(_.merge({}, buildUsingComponents(pageJs, pageDepComponents), res.configObj), null, 2)) - printLog(processTypeEnum.GENERATE, '页面配置', `${outputDirName}/${page}${outputFilesTypes.CONFIG}`) - fs.writeFileSync(outputPageJSPath, resCode) - printLog(processTypeEnum.GENERATE, '页面逻辑', `${outputDirName}/${page}${outputFilesTypes.SCRIPT}`) - fs.writeFileSync(outputPageWXMLPath, pageWXMLContent) - processNativeWxml(outputPageWXMLPath.replace(outputDir, sourceDir), pageWXMLContent, outputPageWXMLPath) - printLog(processTypeEnum.GENERATE, '页面模板', `${outputDirName}/${page}${outputFilesTypes.TEMPL}`) - } - // 编译依赖的脚本文件 - if (isDifferentArray(fileDep['script'], res.scriptFiles)) { - await compileDepScripts(res.scriptFiles, !isQuickApp) - } - // 编译样式文件 - if (isDifferentArray(fileDep['style'], res.styleFiles) || isDifferentArray(depComponents.get(pageJs) || [], pageDepComponents)) { - printLog(processTypeEnum.GENERATE, '页面样式', `${outputDirName}/${page}${outputFilesTypes.STYLE}`) - await compileDepStyles(outputPageWXSSPath, res.styleFiles) - } - // 拷贝依赖文件 - if (isDifferentArray(fileDep['json'], res.jsonFiles)) { - copyFilesFromSrcToOutput(res.jsonFiles) - } - if (isDifferentArray(fileDep['media'], res.mediaFiles)) { - copyFilesFromSrcToOutput(res.mediaFiles) - } - depComponents.set(pageJs, pageDepComponents) - fileDep['style'] = res.styleFiles - fileDep['script'] = res.scriptFiles - fileDep['json'] = res.jsonFiles - fileDep['media'] = res.mediaFiles - dependencyTree.set(pageJs, fileDep) - } catch (err) { - printLog(processTypeEnum.ERROR, '页面编译', `页面${pagePath}编译失败!`) - console.log(err) - } -} - -export async function buildPages () { - printLog(processTypeEnum.COMPILE, '所有页面') - const { appConfig } = getBuildData() - // 支持分包,解析子包页面 - const pages = appConfig.pages || [] - const subPackages = appConfig.subPackages || appConfig['subpackages'] - if (subPackages && subPackages.length) { - subPackages.forEach(item => { - if (item.pages && item.pages.length) { - const root = item.root - item.pages.forEach(page => { - let pagePath = `${root}/${page}` - pagePath = pagePath.replace(/\/{2,}/g, '/') - if (pages.indexOf(pagePath) < 0) { - pages.push(pagePath) - } - }) - } - }) - } - const pagesPromises = pages.map(async page => { - return buildSinglePage(page) - }) - await Promise.all(pagesPromises) -} diff --git a/packages/taro-cli/src/mini/watch.ts b/packages/taro-cli/src/mini/watch.ts deleted file mode 100644 index 756ede467c9c..000000000000 --- a/packages/taro-cli/src/mini/watch.ts +++ /dev/null @@ -1,207 +0,0 @@ -import * as path from 'path' - -import * as chokidar from 'chokidar' -import chalk from 'chalk' - -import { - REG_TYPESCRIPT, - REG_SCRIPT, - REG_STYLE, - processTypeEnum, - NODE_MODULES_REG, - isWindows, - BUILD_TYPES -} from '../util/constants' -import { - printLog, - checksum, - extnameExpRegOf -} from '../util' - -import { initCompileStyles, compileDepStyles } from './compileStyle' -import { initCompileScripts, compileDepScripts } from './compileScript' -import { - initCopyFiles, - getBuildData, - setAppConfig, - isComponentHasBeenBuilt, - deleteHasBeenBuiltComponent, - copyFilesFromSrcToOutput, - getDependencyTree, - isFileToBePage -} from './helper' -import { buildEntry } from './entry' -import { buildPages, buildSinglePage } from './page' -import { buildSingleComponent, getComponentsNamedMap } from './component' - -export function watchFiles () { - console.log() - console.log(chalk.gray('监听文件修改中...')) - console.log() - initCompileStyles() - initCompileScripts() - initCopyFiles() - const { - sourceDir, - outputDir, - sourceDirName, - projectConfig, - outputFilesTypes, - appConfig, - nodeModulesPath, - npmOutputDir, - entryFileName, - entryFilePath, - buildAdapter, - appPath - } = getBuildData() - const dependencyTree = getDependencyTree() - const isQuickApp = buildAdapter === BUILD_TYPES.QUICKAPP - const watcherPaths = [path.join(sourceDir)].concat(projectConfig.watcher || []) - const watcher = chokidar.watch(watcherPaths, { - ignored: /(^|[/\\])\../, - persistent: true, - ignoreInitial: true - }) - watcher - .on('addDir', dirPath => { - console.log(dirPath) - }) - .on('add', filePath => { - console.log(filePath) - }) - .on('change', async filePath => { - const extname = path.extname(filePath) - const componentsNamedMap = getComponentsNamedMap() - // 编译JS文件 - if (REG_SCRIPT.test(extname) || REG_TYPESCRIPT.test(extname)) { - if (entryFilePath === filePath) { - printLog(processTypeEnum.MODIFY, '入口文件', `${sourceDirName}/${entryFileName}.js`) - const config = await buildEntry() - // TODO 此处待优化 - if ((checksum(JSON.stringify(config.pages)) !== checksum(JSON.stringify(appConfig.pages))) || - (checksum(JSON.stringify(config.subPackages || config['subpackages'] || {})) !== checksum(JSON.stringify(appConfig.subPackages || appConfig['subpackages'] || {})))) { - setAppConfig(config) - await buildPages() - } - } else { - const filePathWithoutExt = filePath.replace(extname, '') - if (isFileToBePage(filePath)) { // 编译页面 - filePath = filePathWithoutExt - filePath = filePath.replace(path.join(sourceDir) + path.sep, '') - filePath = filePath.split(path.sep).join('/') - printLog(processTypeEnum.MODIFY, '页面文件', `${sourceDirName}/${filePath}`) - await buildSinglePage(filePath) - } else if (isComponentHasBeenBuilt(filePath)) { // 编译组件 - let outoutShowFilePath = filePath.replace(appPath + path.sep, '') - outoutShowFilePath = outoutShowFilePath.split(path.sep).join('/') - printLog(processTypeEnum.MODIFY, '组件文件', outoutShowFilePath) - deleteHasBeenBuiltComponent(filePath) - - if (isWindows) { - await new Promise((resolve, reject) => { - setTimeout(async () => { - await buildSingleComponent(Object.assign({ - path: filePath - }, componentsNamedMap.get(filePath))) - resolve() - }, 300) - }) - } else { - await buildSingleComponent(Object.assign({ - path: filePath - }, componentsNamedMap.get(filePath))) - } - } else { - let isImported = false - dependencyTree.forEach((dependencyTreeItem) => { - if (dependencyTreeItem) { - const scripts = dependencyTreeItem.script - if (scripts.indexOf(filePath) >= 0) { - isImported = true - } - } - }) - let modifySource = filePath.replace(appPath + path.sep, '') - modifySource = modifySource.split(path.sep).join('/') - if (isImported) { - printLog(processTypeEnum.MODIFY, 'JS文件', modifySource) - await compileDepScripts([filePath], !isQuickApp) - } else { - printLog(processTypeEnum.WARNING, 'JS文件', `${modifySource} 没有被引用到,不会被编译`) - } - } - } - } else if (REG_STYLE.test(extname)) { - const includeStyleJSPath: any[] = [] - dependencyTree.forEach((dependencyTreeItem, key) => { - const styles = dependencyTreeItem['style'] || [] - styles.forEach(item => { - if (item === filePath) { - includeStyleJSPath.push({ - filePath: key, - styles - }) - } - }) - }) - if (includeStyleJSPath.length) { - includeStyleJSPath.forEach(async item => { - let outputWXSSPath = item.filePath.replace(extnameExpRegOf(item.filePath), outputFilesTypes.STYLE) - let modifySource = outputWXSSPath.replace(appPath + path.sep, '') - modifySource = modifySource.split(path.sep).join('/') - printLog(processTypeEnum.MODIFY, '样式文件', modifySource) - if (NODE_MODULES_REG.test(outputWXSSPath)) { - outputWXSSPath = outputWXSSPath.replace(nodeModulesPath, npmOutputDir) - } else { - outputWXSSPath = outputWXSSPath.replace(sourceDir, outputDir) - } - let modifyOutput = outputWXSSPath.replace(appPath + path.sep, '') - modifyOutput = modifyOutput.split(path.sep).join('/') - if (isWindows) { - await new Promise((resolve, reject) => { - setTimeout(async () => { - await compileDepStyles(outputWXSSPath, item.styles) - resolve() - }, 300) - }) - } else { - await compileDepStyles(outputWXSSPath, item.styles) - } - printLog(processTypeEnum.GENERATE, '样式文件', modifyOutput) - }) - } else { - let outputWXSSPath = filePath.replace(extnameExpRegOf(filePath), outputFilesTypes.STYLE) - let modifySource = outputWXSSPath.replace(appPath + path.sep, '') - modifySource = modifySource.split(path.sep).join('/') - printLog(processTypeEnum.MODIFY, '样式文件', modifySource) - if (NODE_MODULES_REG.test(outputWXSSPath)) { - outputWXSSPath = outputWXSSPath.replace(nodeModulesPath, npmOutputDir) - } else { - outputWXSSPath = outputWXSSPath.replace(sourceDir, outputDir) - } - let modifyOutput = outputWXSSPath.replace(appPath + path.sep, '') - modifyOutput = modifyOutput.split(path.sep).join('/') - if (isWindows) { - await new Promise((resolve, reject) => { - setTimeout(async () => { - await compileDepStyles(outputWXSSPath, [filePath]) - resolve() - }, 300) - }) - } else { - await compileDepStyles(outputWXSSPath, [filePath]) - } - printLog(processTypeEnum.GENERATE, '样式文件', modifyOutput) - } - } else { - let modifySource = filePath.replace(appPath + path.sep, '') - modifySource = modifySource.split(path.sep).join('/') - printLog(processTypeEnum.MODIFY, '文件', modifySource) - copyFilesFromSrcToOutput([filePath]) - } - initCompileStyles() - initCompileScripts() - initCopyFiles() - }) -} diff --git a/packages/taro-cli/src/plugin.ts b/packages/taro-cli/src/plugin.ts index 6bcae14f9d2f..c5c6a0739711 100644 --- a/packages/taro-cli/src/plugin.ts +++ b/packages/taro-cli/src/plugin.ts @@ -1,58 +1,29 @@ import * as fs from 'fs-extra' import * as path from 'path' -import * as glob from 'glob' import chalk from 'chalk' -import * as chokidar from 'chokidar' import * as _ from 'lodash' -import * as Util from './util' import { - BUILD_TYPES, - REG_SCRIPT, - REG_STYLE, - REG_FONT, - REG_IMAGE, - REG_MEDIA, - REG_TYPESCRIPT, - processTypeEnum, - isWindows + BUILD_TYPES } from './util/constants' -import { buildEntry } from './mini/entry' -import { buildPages, buildSinglePage } from './mini/page' -import { build as buildWeapp } from './mini' import { - getRealComponentsPathList, - isFileToBePage, - isComponentHasBeenBuilt, - deleteHasBeenBuiltComponent, - getDependencyTree, - getBuildData, - setAppConfig, - setIsProduction, - setBuildData + getBuildData } from './mini/helper' -import { buildDepComponents, buildSingleComponent, getComponentsNamedMap } from './mini/component' -import { compileDepScripts, initCompileScripts } from './mini/compileScript' -import { compileDepStyles, initCompileStyles } from './mini/compileStyle' -import { IBuildConfig } from './util/types' +import { build as buildMini } from './mini' +import { IBuildOptions } from './util/types' +import { Builder } from '.' -const PLUGIN_ROOT = 'plugin/' -const DOC_ROOT = 'doc/' -const NPM_DIR = 'npm/' const PLUGIN_JSON = 'plugin.json' const PLUGIN_MOCK_JSON = 'plugin-mock.json' -let isCopyingFiles = {} - -export async function build (appPath: string, { watch, platform }: IBuildConfig) { +export async function build (appPath: string, { watch, platform }: IBuildOptions, builder: Builder) { switch (platform) { case BUILD_TYPES.WEAPP: - buildWxPlugin(appPath, { watch }) + await buildWxPlugin(appPath, { watch, type: BUILD_TYPES.WEAPP }, builder) break case BUILD_TYPES.ALIPAY: - await buildWeapp(appPath, { watch, adapter: BUILD_TYPES.ALIPAY }) - buildAlipayPlugin() + await buildAlipayPlugin(appPath, { watch, type: BUILD_TYPES.ALIPAY }, builder) break default: console.log(chalk.red('输入插件类型错误,目前只支持 weapp/alipay 插件类型')) @@ -60,354 +31,16 @@ export async function build (appPath: string, { watch, platform }: IBuildConfig) } } -function compilePluginJson (pluginJson, pluginPath) { - if (typeof pluginJson.main === 'string') { - pluginJson.main = pluginJson.main.replace(/\.tsx$|\.ts$/, '.js') - } - fs.writeJSONSync(pluginPath, pluginJson) -} - -function wxPluginWatchFiles () { - console.log() - console.log(chalk.gray('监听文件修改中...')) - console.log() - initCompileScripts() - initCompileStyles() - isCopyingFiles = {} - - const { - appPath, - sourceDirName, - sourceDir, - outputDir, - outputFilesTypes, - entryFilePath, - entryFileName, - appConfig - } = getBuildData() - const pluginDir = path.join(sourceDir, PLUGIN_ROOT) - const pluginPath = path.join(appPath, PLUGIN_ROOT) - const docDir = path.join(pluginDir, DOC_ROOT) - const docPath = path.join(appPath, DOC_ROOT) - - const watcher = chokidar.watch(sourceDir, { - ignored: /(^|[/\\])\../, - persistent: true, - ignoreInitial: true - }) - watcher - .on('addDir', dirPath => { - console.log(dirPath) - }) - .on('add', filePath => { - console.log(filePath) - }) - .on('change', async filePath => { - let outputFilePath - if (filePath.includes(docDir)) { - outputFilePath = filePath.replace(docDir, docPath) - } else if (filePath.includes(pluginDir)) { - outputFilePath = filePath.replace(pluginDir, pluginPath) - } else { - outputFilePath = filePath.replace(sourceDir, outputDir) - } - - const extname = path.extname(filePath) - if (REG_SCRIPT.test(extname) || REG_TYPESCRIPT.test(extname)) { - const pluginJsonPath = path.join(pluginDir, PLUGIN_JSON) - if (!fs.existsSync(pluginDir) || !fs.existsSync(pluginJsonPath)) { - return console.log(chalk.red('缺少 plugin.json!')) - } - const pluginJson = fs.readJSONSync(pluginJsonPath) - const pages = pluginJson.pages - const main = pluginJson.main || '' - - if (entryFilePath === filePath) { - Util.printLog(processTypeEnum.MODIFY, '入口文件', `${sourceDirName}/${entryFileName}.js`) - const config = await buildEntry() - // TODO 此处待优化 - if ((Util.checksum(JSON.stringify(config.pages)) !== Util.checksum(JSON.stringify(appConfig.pages))) || - (Util.checksum(JSON.stringify(config.subPackages || config['subpackages'] || {})) !== Util.checksum(JSON.stringify(appConfig.subPackages || appConfig['subpackages'] || {})))) { - setAppConfig(config) - await buildPages() - } - } else if (isWxPluginPage(Object.values(pages), filePath) || isFileToBePage(filePath)) { - filePath = filePath.replace(extname, '') - filePath = filePath.replace(path.join(sourceDir) + path.sep, '') - filePath = filePath.split(path.sep).join('/') - Util.printLog(processTypeEnum.MODIFY, '页面文件', `${sourceDirName}/${filePath}`) - await buildSinglePage(filePath) - } else if (isComponentHasBeenBuilt(filePath)) { - let outputShowFilePath = filePath.replace(appPath + path.sep, '') - outputShowFilePath = outputShowFilePath.split(path.sep).join('/') - Util.printLog(processTypeEnum.MODIFY, '组件文件', outputShowFilePath) - deleteHasBeenBuiltComponent(filePath) - const componentsNamedMap = getComponentsNamedMap() - if (isWindows) { - await new Promise((resolve, reject) => { - setTimeout(async () => { - await buildSingleComponent(Object.assign({ - path: filePath - }, componentsNamedMap[filePath])) - resolve() - }, 300) - }) - } else { - await buildSingleComponent(Object.assign({ - path: filePath - }, componentsNamedMap[filePath])) - } - } else { - const dependencyTree = getDependencyTree() - let isImported = false - dependencyTree.forEach(dependencyTreeItem => { - const scripts = dependencyTreeItem.script || [] - if (scripts.indexOf(filePath) >= 0) { - isImported = true - } - }) - - let modifySource = filePath.replace(appPath + path.sep, '') - modifySource = modifySource.split(path.sep).join('/') - - if (isImported || filePath.includes(path.join(pluginDir, main))) { - Util.printLog(processTypeEnum.MODIFY, 'JS文件', modifySource) - await Promise.all(compileDepScripts([filePath], true, true)) - } else { - Util.printLog(processTypeEnum.WARNING, 'JS文件', `${modifySource} 没有被引用到,不会被编译`) - } - } - } else if (REG_STYLE.test(extname)) { - const dependencyTree = getDependencyTree() - const includeStyleJSPath: { filePath: string, styles: any[] }[] = [] - dependencyTree.forEach((dependencyTreeItem, key) => { - const styles = dependencyTreeItem['style'] || [] - styles.forEach(item => { - if (item === filePath) { - includeStyleJSPath.push({ - filePath: key, - styles - }) - } - }) - }) - - if (includeStyleJSPath.length) { - await Promise.all(includeStyleJSPath.map(async item => { - let outputWXSSPath = item.filePath.replace(path.extname(item.filePath), outputFilesTypes.STYLE) - let modifySource = outputWXSSPath.replace(appPath + path.sep, '') - modifySource = modifySource.split(path.sep).join('/') - Util.printLog(processTypeEnum.MODIFY, '样式文件', modifySource) - - outputWXSSPath = outputWXSSPath.replace(sourceDir, outputDir) - if (isWindows) { - await new Promise((resolve, reject) => { - setTimeout(async () => { - await compileDepStyles(outputWXSSPath, item.styles) - resolve() - }, 300) - }) - } else { - await compileDepStyles(outputWXSSPath, item.styles) - } - - let modifyOutput = outputWXSSPath.replace(appPath + path.sep, '') - modifyOutput = modifyOutput.split(path.sep).join('/') - Util.printLog(processTypeEnum.GENERATE, '样式文件', modifyOutput) - })) - } else { - let outputWXSSPath = filePath.replace(path.extname(filePath), outputFilesTypes.STYLE) - let modifySource = outputWXSSPath.replace(appPath + path.sep, '') - modifySource = modifySource.split(path.sep).join('/') - Util.printLog(processTypeEnum.MODIFY, '样式文件', modifySource) - outputWXSSPath = outputWXSSPath.replace(sourceDir, outputDir) - if (isWindows) { - await new Promise((resolve, reject) => { - setTimeout(async () => { - await compileDepStyles(outputWXSSPath, [filePath]) - resolve() - }, 300) - }) - } else { - await compileDepStyles(outputWXSSPath, [filePath]) - } - let modifyOutput = outputWXSSPath.replace(appPath + path.sep, '') - modifyOutput = modifyOutput.split(path.sep).join('/') - Util.printLog(processTypeEnum.GENERATE, '样式文件', modifyOutput) - } - } else { - if (isCopyingFiles[outputFilePath]) return - isCopyingFiles[outputFilePath] = true - - let modifyOutput = outputFilePath.replace(appPath + path.sep, '') - modifyOutput = modifyOutput.split(path.sep).join('/') - Util.printLog(processTypeEnum.COPY, '文件', modifyOutput) - - if (!fs.existsSync(filePath)) { - let modifySrc = filePath.replace(appPath + path.sep, '') - modifySrc = modifySrc.split(path.sep).join('/') - Util.printLog(processTypeEnum.ERROR, '文件', `${modifySrc} 不存在`) - } else { - fs.ensureDir(path.dirname(outputFilePath)) - if (filePath === outputFilePath) { - return - } - const pluginJsonPath = path.join(sourceDir, PLUGIN_ROOT, PLUGIN_JSON) - if (filePath === pluginJsonPath) { - compilePluginJson(fs.readJSONSync(filePath), outputFilePath) - } else { - fs.copySync(filePath, outputFilePath) - } - } - } - - // 如果 output/plugin 里有新编译出的文件, - // 先把 js 里对 npm 的引用修改,然后把所有文件迁移到插件目录 - // 最后删除 output/plugin - const names = glob.sync(`${outputDir}/${PLUGIN_ROOT}/**/*`) - if (names.length) { - const jsNames = glob.sync(`${outputDir}/${PLUGIN_ROOT}/{,!(npm)/**/}?(*.js|*.json)`) - const ioPromises = jsNames.map(async name => { - const content = fs.readFileSync(name).toString() - - let isShouldBeWritten - let replacement = content.replace(/['|"]((\.\.\/)+)npm\/.+?['|"]/g, (str, $1) => { - isShouldBeWritten = true - return $1 === '../' ? str.replace('../', './') : str.replace('../', '') - }) - - const REG_PLUGIN_DEPS = RegExp(`['|"](/${PLUGIN_ROOT}.+)['|"]`, 'g') - replacement = replacement.replace(REG_PLUGIN_DEPS, (str, $1) => { - if (REG_FONT.test($1) || REG_IMAGE.test($1) || REG_MEDIA.test($1)) { - isShouldBeWritten = true - return str.replace(RegExp(`^['|"]/${PLUGIN_ROOT}`, 'g'), str => str.replace(`${PLUGIN_ROOT}`, '')) - } - return str - }) - - if (isShouldBeWritten) await fs.writeFile(name, replacement) - }) - await Promise.all(ioPromises) - - await Promise.all(names.map(async from => { - from = path.join(from) - if (fs.existsSync(from) && fs.statSync(from).isFile()) { - const to = from.replace(outputDir, appPath) - fs.ensureDirSync(path.dirname(to)) - await fs.copyFile(from, to) - } - })) - const tempPluginPath = path.join(outputDir, PLUGIN_ROOT) - Util.emptyDirectory(tempPluginPath) - fs.rmdirSync(tempPluginPath) - } - // 迁移 npm 到 plugin 目录 - Util.emptyDirectory(path.join(pluginPath, NPM_DIR)) - // fs.rmdirSync(tempPluginPath) - await fs.copy(path.join(outputDir, NPM_DIR), path.join(pluginPath, NPM_DIR)) - - initCompileScripts() - initCompileStyles() - isCopyingFiles = {} - }) -} - -function isWxPluginPage (pages, filePath) { - return pages.findIndex(page => filePath.includes(path.join(page))) >= 0 -} - -async function buildWxPlugin (appPath, { watch }) { - const { - sourceDir, - outputDir - } = setBuildData(appPath, BUILD_TYPES.WEAPP) - const pluginDir = path.join(sourceDir, PLUGIN_ROOT) - const pluginPath = path.join(appPath, PLUGIN_ROOT) - const docDir = path.join(pluginDir, DOC_ROOT) - const docPath = path.join(appPath, DOC_ROOT) - - setIsProduction(process.env.NODE_ENV === 'production' || !watch) - - fs.existsSync(pluginPath) && Util.emptyDirectory(pluginPath) - fs.existsSync(docPath) && Util.emptyDirectory(docPath) - // 编译调试项目 - await buildWeapp(appPath, { adapter: BUILD_TYPES.WEAPP, envHasBeenSet: true }) - - const pluginJsonPath = path.join(pluginDir, PLUGIN_JSON) - if (!fs.existsSync(pluginDir) || !fs.existsSync(pluginJsonPath)) { - return console.log(chalk.red('缺少 plugin.json!')) - } - const pluginJson = fs.readJSONSync(pluginJsonPath) - const components = pluginJson.publicComponents - const pages: { [key: string]: any } = pluginJson.pages - const main = pluginJson.main - - // 编译插件页面 - if (pages && Object.keys(pages).length) { - Util.printLog(processTypeEnum.COMPILE, '插件页面') - const pagesPromises = Object.values(pages).map(page => buildSinglePage(path.join(PLUGIN_ROOT, page))) - await Promise.all(pagesPromises) - } - - // 编译插件组件 - if (components && Object.keys(components).length) { - Util.printLog(processTypeEnum.COMPILE, '插件组件') - const componentList: any[] = [] - for (const component in components) { - const componentPath = components[component] - componentList.push({ - path: /^(\.|\/)/.test(componentPath) ? componentPath : '.' + path.sep + componentPath, - name: component, - type: 'default' - }) - } - const realComponentsPathList = getRealComponentsPathList(pluginJsonPath, componentList) - await buildDepComponents(realComponentsPathList) - } - - // 编译插件 main.js - if (main) { - Util.printLog(processTypeEnum.COMPILE, '插件 JS') - await Promise.all(compileDepScripts([path.join(pluginDir, main)], true, true)) - } - - // 把 plugin 目录挪到根目录 - await fs.move(path.join(outputDir, PLUGIN_ROOT), pluginPath) - // 把 npm 拷贝一份到 plugin 目录 - await fs.copy(path.join(outputDir, NPM_DIR), path.join(pluginPath, NPM_DIR)) - // 把 doc 目录拷贝到根目录 - fs.existsSync(docDir) && fs.copySync(docDir, docPath) - // 拷贝 plugin.json - compilePluginJson(pluginJson, path.join(pluginPath, PLUGIN_JSON)) - - // plugin 文件夹内对 npm 的引用路径修改 - const names = glob.sync('plugin/{,!(npm)/**/}?(*.js|*.json)') - const ioPromises = names.map(name => { - const content = fs.readFileSync(name).toString() - - let isShouldBeWritten - let replacement = content.replace(/['|"]((\.\.\/)+)npm\/.+?['|"]/g, (str, $1) => { - isShouldBeWritten = true - return $1 === '../' ? str.replace('../', './') : str.replace('../', '') - }) - - const REG_PLUGIN_DEPS = RegExp(`['|"](/${PLUGIN_ROOT}.+?)['|"]`, 'g') - replacement = replacement.replace(REG_PLUGIN_DEPS, (str, $1) => { - if (REG_FONT.test($1) || REG_IMAGE.test($1) || REG_MEDIA.test($1)) { - isShouldBeWritten = true - return str.replace(RegExp(`^['|"]/${PLUGIN_ROOT}`, 'g'), str => str.replace(`${PLUGIN_ROOT}`, '')) - } - return str - }) - - if (isShouldBeWritten) fs.writeFileSync(path.join(appPath, name), replacement) - }) - await Promise.all(ioPromises) - - watch && wxPluginWatchFiles() +async function buildWxPlugin (appPath, { watch, type }, builder) { + await buildMini(appPath, { watch, type: BUILD_TYPES.PLUGIN }, null, builder) + const { outputDirName } = getBuildData() + await buildMini(appPath, { watch, type }, { + outputDirName: `${outputDirName}/miniprogram` + }, builder) } -function buildAlipayPlugin () { +async function buildAlipayPlugin (appPath, { watch, type }, builder) { + await buildMini(appPath, { watch, type }, null, builder) const { sourceDir, outputDir diff --git a/packages/taro-cli/src/quickapp/template-rewriter.ts b/packages/taro-cli/src/quickapp/template-rewriter.ts deleted file mode 100644 index abc148762f47..000000000000 --- a/packages/taro-cli/src/quickapp/template-rewriter.ts +++ /dev/null @@ -1,13 +0,0 @@ -import parseXml from './template/parser' -import rewriteNode from './template/node' -import serialize from './template/serialize' - -export default function rewriterTemplate(code : string): string { - // 解析Code - const viewNodes = parseXml(`${code}`).children - // 解析视图组件 - const retNodes = rewriteNode(viewNodes) - // 生成xml代码 - const templateCode = serialize(retNodes) - return templateCode -} \ No newline at end of file diff --git a/packages/taro-cli/src/rn.ts b/packages/taro-cli/src/rn.ts index 158da7e2ebd6..b632ebe2c81a 100644 --- a/packages/taro-cli/src/rn.ts +++ b/packages/taro-cli/src/rn.ts @@ -6,6 +6,7 @@ import * as chokidar from 'chokidar' import chalk from 'chalk' import * as _ from 'lodash' import * as klaw from 'klaw' +import { TogglableOptions, ICommonPlugin, IOption } from '@tarojs/taro/types/compile' import * as Util from './util' import CONFIG from './config' @@ -13,7 +14,7 @@ import * as StyleProcess from './rn/styleProcess' import { parseJSCode as transformJSCode } from './rn/transformJS' import { PROJECT_CONFIG, processTypeEnum, REG_STYLE, REG_SCRIPTS, REG_TYPESCRIPT, BUILD_TYPES } from './util/constants' import { convertToJDReact } from './jdreact/convert_to_jdreact' -import { IBuildConfig } from './util/types' +import { IBuildOptions } from './util/types' // import { Error } from 'tslint/lib/error' let isBuildingStyles = {} @@ -44,10 +45,16 @@ class Compiler { entryFilePath: string entryFileName: string entryBaseName: string - pluginsConfig + babel: TogglableOptions + csso: TogglableOptions + uglify: TogglableOptions + sass: IOption + less: IOption + stylus: IOption + plugins: ICommonPlugin[] rnConfig hasJDReactOutput: boolean - babelConfig: any + // babelConfig: any // pxTransformConfig // pathAlias @@ -59,9 +66,15 @@ class Compiler { this.entryFilePath = Util.resolveScriptPath(path.join(this.sourceDir, CONFIG.ENTRY)) this.entryFileName = path.basename(this.entryFilePath) this.entryBaseName = path.basename(this.entryFilePath, path.extname(this.entryFileName)) - this.pluginsConfig = this.projectConfig.plugins || {} + this.babel = this.projectConfig.babel + this.csso = this.projectConfig.csso + this.uglify = this.projectConfig.uglify + this.plugins = this.projectConfig.plugins + this.sass = this.projectConfig.sass + this.stylus = this.projectConfig.stylus + this.less = this.projectConfig.less this.rnConfig = this.projectConfig.rn || {} - this.babelConfig = this.projectConfig.plugins.babel // 用来配置 babel + // this.babelConfig = this.projectConfig.plugins.babel // 用来配置 babel // 直接输出编译后代码到指定目录 if (this.rnConfig.outPath) { @@ -89,7 +102,14 @@ class Compiler { const filePath = path.join(p) const fileExt = path.extname(filePath) Util.printLog(processTypeEnum.COMPILE, _.camelCase(fileExt).toUpperCase(), filePath) - return StyleProcess.loadStyle({filePath, pluginsConfig: this.pluginsConfig}, this.appPath) + return StyleProcess.loadStyle({ + filePath, + pluginsConfig: { + sass: this.sass, + less: this.less, + stylus: this.stylus + } + }, this.appPath) })).then(resList => { // postcss return Promise.all(resList.map(item => { return StyleProcess.postCSS({...item as { css: string, filePath: string }, projectConfig: this.projectConfig}) @@ -297,8 +317,8 @@ function updatePkgJson (appPath) { "@tarojs/taro-rn": "^${version}", "@tarojs/taro-router-rn": "^${version}", "@tarojs/taro-redux-rn": "^${version}", - "react": "16.3.1", - "react-native": "0.55.4", + "react": "16.8.0", + "react-native": "0.59.9", "redux": "^4.0.0", "tslib": "^1.8.0" } @@ -345,7 +365,7 @@ function installDep (path: string) { export { Compiler } -export async function build (appPath: string, buildConfig: IBuildConfig) { +export async function build (appPath: string, buildConfig: IBuildOptions) { const { watch } = buildConfig process.env.TARO_ENV = BUILD_TYPES.RN await Util.checkCliAndFrameworkVersion(appPath, BUILD_TYPES.RN) diff --git a/packages/taro-cli/src/rn/transformJS.ts b/packages/taro-cli/src/rn/transformJS.ts index 52d2040085fc..24097c254d0c 100644 --- a/packages/taro-cli/src/rn/transformJS.ts +++ b/packages/taro-cli/src/rn/transformJS.ts @@ -4,12 +4,11 @@ import traverse, { NodePath } from 'babel-traverse' import * as t from 'babel-types' import * as _ from 'lodash' import generate from 'babel-generator' -import * as wxTransformer from '@tarojs/transformer-wx' +import wxTransformer from '@tarojs/transformer-wx' import * as Util from '../util' import babylonConfig from '../config/babylon' -import { convertSourceStringToAstExpression as toAst } from '../util/astConvert' +import { convertSourceStringToAstExpression as toAst, convertAstExpressionToVariable as toVar } from '../util/astConvert' import { REG_STYLE, REG_TYPESCRIPT, BUILD_TYPES, REG_SCRIPTS } from '../util/constants' -import { convertAstExpressionToVariable as toVar } from '../util/astConvert' const template = require('babel-template') @@ -275,7 +274,7 @@ export function parseJSCode ({code, filePath, isEntryFile, projectConfig}) { if (REG_STYLE.test(valueExtname)) { const stylePath = path.resolve(path.dirname(filePath), value) if (styleFiles.indexOf(stylePath) < 0) { - //样式条件文件编译 .rn.scss + // 样式条件文件编译 .rn.scss const realStylePath = Util.resolveStylePath(stylePath) styleFiles.push(realStylePath) } @@ -377,7 +376,7 @@ export function parseJSCode ({code, filePath, isEntryFile, projectConfig}) { hasComponentWillUnmount = true } // 获取 app.js 的 classRenderReturnJSX - if (keyName == 'render') { + if (keyName === 'render') { astPath.traverse({ BlockStatement (astPath) { if (astPath.parent === node) { @@ -451,7 +450,7 @@ export function parseJSCode ({code, filePath, isEntryFile, projectConfig}) { node.body.body.unshift(componentDidHideCallNode) } - if (key.name == 'render') { + if (key.name === 'render') { let funcBody = ` <${taroComponentsRNProviderName}> ${classRenderReturnJSX} diff --git a/packages/taro-cli/src/taro-config/index.ts b/packages/taro-cli/src/taro-config/index.ts index 1ef7e2e6870e..7208c19ae508 100644 --- a/packages/taro-cli/src/taro-config/index.ts +++ b/packages/taro-cli/src/taro-config/index.ts @@ -1,15 +1,23 @@ import * as fs from 'fs-extra' import * as path from 'path' import { getUserHomeDir } from '../util' +import { TARO_CONFIG_FLODER, TARO_BASE_CONFIG } from '../util/constants' const homedir = getUserHomeDir() -const configPath = path.join(homedir, '.taro/index.json') +const configPath = path.join(homedir, `${TARO_CONFIG_FLODER}/${TARO_BASE_CONFIG}`) + +function displayConfigPath (configPath) { + console.log('Config path:', configPath) + console.log() +} export function get (key: string) { if (!homedir) return console.log('找不到用户根目录') + if (fs.existsSync(configPath)) { + displayConfigPath(configPath) const config = fs.readJSONSync(configPath) - console.log(config[key]) + console.log('Key:', key, ', value:', config[key]) } } @@ -17,6 +25,7 @@ export function set (key: string, value: string) { if (!homedir) return console.log('找不到用户根目录') if (fs.existsSync(configPath)) { + displayConfigPath(configPath) const config = fs.readJSONSync(configPath) config[key] = value fs.writeJSONSync(configPath, config) @@ -26,21 +35,27 @@ export function set (key: string, value: string) { [key]: value }) } + console.log('Set key:', key, ', value:', value) } export function deleteKey (key: string) { if (!homedir) return console.log('找不到用户根目录') if (fs.existsSync(configPath)) { + displayConfigPath(configPath) const config = fs.readJSONSync(configPath) delete config[key] fs.writeJSONSync(configPath, config) } + console.log('Deleted:', key) } export function list (isJSONFormat: boolean = false) { if (!homedir) return console.log('找不到用户根目录') + if (fs.existsSync(configPath)) { + displayConfigPath(configPath) + console.log('Config info:') const config = fs.readJSONSync(configPath) if (isJSONFormat) { console.log(JSON.stringify(config, null, 2)) diff --git a/packages/taro-cli/src/ui/common.ts b/packages/taro-cli/src/ui/common.ts index 6ca2cb599757..41f6e1b5a916 100644 --- a/packages/taro-cli/src/ui/common.ts +++ b/packages/taro-cli/src/ui/common.ts @@ -1,15 +1,15 @@ +import * as path from 'path' +import * as fs from 'fs-extra' + import * as t from 'babel-types' import * as glob from 'glob' import traverse from 'babel-traverse' -import * as path from 'path' -import * as wxTransformer from '@tarojs/transformer-wx' import generate from 'babel-generator' -import * as fs from 'fs-extra' -import { parseAst } from '../mini/astProcess' +import * as wxTransformer from '@tarojs/transformer-wx' + import { IBuildData } from './ui.types' import { cssImports, printLog, resolveScriptPath, resolveStylePath, isNpmPkg } from '../util' -import { PARSE_AST_TYPE, processTypeEnum, REG_STYLE, REG_TYPESCRIPT, CSS_EXT } from '../util/constants' -import { IComponentObj } from '../mini/interface' +import { processTypeEnum, REG_STYLE, REG_TYPESCRIPT, REG_SCRIPT, REG_JSON, REG_FONT, REG_IMAGE, REG_MEDIA, CSS_EXT } from '../util/constants' let processedScriptFiles: Set = new Set() @@ -20,6 +20,85 @@ export const RN_OUTPUT_NAME = 'rn' export const TEMP_DIR = '.temp' export const RN_TEMP_DIR = 'rn_temp' +interface IComponentObj { + name?: string, + path: string | null, + type?: string +} + +interface IParseAstReturn { + styleFiles: string[], + scriptFiles: string[], + jsonFiles: string[], + mediaFiles: string[] +} + +function parseAst ( + ast: t.File, + sourceFilePath: string +): IParseAstReturn { + const styleFiles: string[] = [] + const scriptFiles: string[] = [] + const jsonFiles: string[] = [] + const mediaFiles: string[] = [] + + traverse(ast, { + Program: { + exit (astPath) { + astPath.traverse({ + ImportDeclaration (astPath) { + const node = astPath.node + const source = node.source + const value = source.value + const valueExtname = path.extname(value) + if (value.indexOf('.') === 0) { + let importPath = path.resolve(path.dirname(sourceFilePath), value) + importPath = resolveScriptPath(importPath) + if (REG_SCRIPT.test(valueExtname) || REG_TYPESCRIPT.test(valueExtname)) { + const vpath = path.resolve(sourceFilePath, '..', value) + let fPath = value + if (fs.existsSync(vpath) && vpath !== sourceFilePath) { + fPath = vpath + } + if (scriptFiles.indexOf(fPath) < 0) { + scriptFiles.push(fPath) + } + } else if (REG_JSON.test(valueExtname)) { + const vpath = path.resolve(sourceFilePath, '..', value) + if (fs.existsSync(vpath) && jsonFiles.indexOf(vpath) < 0) { + jsonFiles.push(vpath) + } + } else if (REG_FONT.test(valueExtname) || REG_IMAGE.test(valueExtname) || REG_MEDIA.test(valueExtname)) { + const vpath = path.resolve(sourceFilePath, '..', value) + if (fs.existsSync(vpath) && mediaFiles.indexOf(vpath) < 0) { + mediaFiles.push(vpath) + } + } else if (REG_STYLE.test(valueExtname)) { + const vpath = path.resolve(path.dirname(sourceFilePath), value) + if (fs.existsSync(vpath) && styleFiles.indexOf(vpath) < 0) { + styleFiles.push(vpath) + } + } else { + const vpath = resolveScriptPath(path.resolve(sourceFilePath, '..', value)) + if (fs.existsSync(vpath) && scriptFiles.indexOf(vpath) < 0) { + scriptFiles.push(vpath) + } + } + } + } + }) + } + } + }) + + return { + styleFiles, + scriptFiles, + jsonFiles, + mediaFiles + } +} + export function parseEntryAst (ast: t.File, relativeFile: string) { const styleFiles: string[] = [] const components: IComponentObj[] = [] @@ -157,7 +236,7 @@ export function analyzeFiles (files: string[], sourceDir: string, outputDir: str scriptFiles, jsonFiles, mediaFiles - } = parseAst(PARSE_AST_TYPE.NORMAL, transformResult.ast, [], file, file, true) + } = parseAst(transformResult.ast, file) const resFiles = styleFiles.concat(scriptFiles, jsonFiles, mediaFiles) diff --git a/packages/taro-cli/src/ui/h5.ts b/packages/taro-cli/src/ui/h5.ts index 3e3df61370cd..e2fe99225246 100644 --- a/packages/taro-cli/src/ui/h5.ts +++ b/packages/taro-cli/src/ui/h5.ts @@ -25,8 +25,8 @@ async function buildForH5 (uiIndex = 'index', buildData: IBuildData) { } async function buildH5Script (buildData: IBuildData) { - const {appPath, projectConfig, entryFileName, sourceDirName, tempPath} = buildData - let {outputDirName} = buildData + const { appPath, projectConfig, entryFileName, sourceDirName, tempPath } = buildData + let { outputDirName } = buildData const h5Config: IH5BuildConfig = Object.assign({}, projectConfig.h5) const entryFile = path.basename(entryFileName, path.extname(entryFileName)) + '.js' outputDirName = `${outputDirName}/${H5_OUTPUT_NAME}` @@ -57,7 +57,6 @@ async function buildH5Lib (uiIndex, buildData: IBuildData) { const transformResult = wxTransformer({ code, sourcePath: tempEntryFilePath, - outputPath: outputEntryFilePath, isNormal: true, isTyped: REG_TYPESCRIPT.test(tempEntryFilePath) }) diff --git a/packages/taro-cli/src/ui/index.ts b/packages/taro-cli/src/ui/index.ts index 33d855ebe4b5..7b1651f4a8d3 100644 --- a/packages/taro-cli/src/ui/index.ts +++ b/packages/taro-cli/src/ui/index.ts @@ -17,7 +17,7 @@ import { BUILD_TYPES, REG_STYLE } from '../util/constants' -import { IBuildConfig } from '../util/types' +import { IBuildOptions } from '../util/types' import { setBuildData as setMiniBuildData } from '../mini/helper' import { IBuildData } from './ui.types' import { @@ -244,7 +244,7 @@ function watchFiles () { }) } -export async function build (appPath, {watch, uiIndex}: IBuildConfig) { +export async function build (appPath, {watch, uiIndex}: IBuildOptions) { setBuildData(appPath, uiIndex) setMiniBuildData(appPath, BUILD_TYPES.WEAPP) setMiniBuildData(appPath, BUILD_TYPES.QUICKAPP) diff --git a/packages/taro-cli/src/ui/quickapp.ts b/packages/taro-cli/src/ui/quickapp.ts index 415b44aede90..95b0b46626aa 100644 --- a/packages/taro-cli/src/ui/quickapp.ts +++ b/packages/taro-cli/src/ui/quickapp.ts @@ -4,7 +4,6 @@ import * as path from 'path' import { processTypeEnum, REG_TYPESCRIPT } from '../util/constants' import * as wxTransformer from '@tarojs/transformer-wx' -import { compileDepStyles } from '../mini/compileStyle' import { printLog } from '../util' import { analyzeFiles, parseEntryAst, QUICKAPP_OUTPUT_NAME, copyFileToDist, copyAllInterfaceFiles } from './common' import { IBuildData } from './ui.types' @@ -28,11 +27,7 @@ export async function buildForQuickapp (buildData: IBuildData) { isNormal: true, isTyped: REG_TYPESCRIPT.test(entryFilePath) }) - const {styleFiles, components} = parseEntryAst(transformResult.ast, entryFilePath) - if (styleFiles.length) { - const outputStylePath = path.join(outputDir, 'css', 'index.css') - await compileDepStyles(outputStylePath, styleFiles) - } + const { components } = parseEntryAst(transformResult.ast, entryFilePath) const relativePath = path.relative(appPath, entryFilePath) printLog(processTypeEnum.COPY, '发现文件', relativePath) fs.ensureDirSync(path.dirname(outputEntryFilePath)) diff --git a/packages/taro-cli/src/ui/rn.ts b/packages/taro-cli/src/ui/rn.ts index ca6bb0d801cc..c994e3e71b55 100644 --- a/packages/taro-cli/src/ui/rn.ts +++ b/packages/taro-cli/src/ui/rn.ts @@ -1,12 +1,13 @@ -import { IBuildData } from './ui.types' import * as path from 'path' -import { analyzeFiles, analyzeStyleFilesImport, copyFileToDist, RN_OUTPUT_NAME, parseEntryAst } from './common' -import { printLog, resolveScriptPath } from '../util' import * as fs from 'fs-extra' import * as wxTransformer from '@tarojs/transformer-wx' +import chalk from 'chalk' + import { processTypeEnum, REG_TYPESCRIPT } from '../util/constants' import { Compiler as RNCompiler } from '../rn' -import chalk from 'chalk' +import { analyzeFiles, analyzeStyleFilesImport, copyFileToDist, RN_OUTPUT_NAME, parseEntryAst } from './common' +import { printLog, resolveScriptPath } from '../util' +import { IBuildData } from './ui.types' export async function buildForRN (uiIndex = 'index', buildData) { const {appPath} = buildData diff --git a/packages/taro-cli/src/ui/ui.types.ts b/packages/taro-cli/src/ui/ui.types.ts index 3ab3cd7c407a..909e49815cdc 100644 --- a/packages/taro-cli/src/ui/ui.types.ts +++ b/packages/taro-cli/src/ui/ui.types.ts @@ -1,4 +1,4 @@ -import { IH5Config, IProjectConfig } from '../util/types' +import { IProjectConfig, IH5Config } from '@tarojs/taro/types/compile' export interface IBuildData { appPath: string, diff --git a/packages/taro-cli/src/ui/weapp.ts b/packages/taro-cli/src/ui/weapp.ts index 23575e6a2807..49cfde0b6cd2 100644 --- a/packages/taro-cli/src/ui/weapp.ts +++ b/packages/taro-cli/src/ui/weapp.ts @@ -1,9 +1,9 @@ import chalk from 'chalk' import * as fs from 'fs-extra' import * as path from 'path' +import * as wxTransformer from '@tarojs/transformer-wx' import { processTypeEnum, REG_TYPESCRIPT } from '../util/constants' -import * as wxTransformer from '@tarojs/transformer-wx' import { printLog } from '../util' import { analyzeFiles, parseEntryAst, WEAPP_OUTPUT_NAME, copyFileToDist, copyAllInterfaceFiles } from './common' import { IBuildData } from './ui.types' diff --git a/packages/taro-cli/src/util/constants.ts b/packages/taro-cli/src/util/constants.ts index c63a44dc4ea0..766af71bfe92 100644 --- a/packages/taro-cli/src/util/constants.ts +++ b/packages/taro-cli/src/util/constants.ts @@ -302,48 +302,49 @@ export const FILE_PROCESSOR_MAP = { } export const UPDATE_PACKAGE_LIST = [ - '@tarojs/taro', '@tarojs/async-await', '@tarojs/cli', - '@tarojs/components', - '@tarojs/components-rn', '@tarojs/components-qa', - '@tarojs/taro-h5', - '@tarojs/taro-tt', - '@tarojs/taro-qq', - '@tarojs/taro-jd', - '@tarojs/taro-quickapp', - '@tarojs/taro-swan', - '@tarojs/taro-alipay', + '@tarojs/components-rn', + '@tarojs/components', + '@tarojs/mini-runner', + '@tarojs/mobx-common', + '@tarojs/mobx-h5', + '@tarojs/mobx-rn', + '@tarojs/mobx', '@tarojs/plugin-babel', '@tarojs/plugin-csso', - '@tarojs/plugin-sass', '@tarojs/plugin-less', + '@tarojs/plugin-sass', '@tarojs/plugin-stylus', '@tarojs/plugin-uglifyjs', - '@tarojs/redux', '@tarojs/redux-h5', - '@tarojs/taro-redux-rn', - '@tarojs/taro-router-rn', - '@tarojs/taro-rn', + '@tarojs/redux', '@tarojs/rn-runner', '@tarojs/router', + '@tarojs/taro-alipay', + '@tarojs/taro-h5', + '@tarojs/taro-jd', + '@tarojs/taro-qq', + '@tarojs/taro-quickapp', + '@tarojs/taro-redux-rn', + '@tarojs/taro-rn', + '@tarojs/taro-router-rn', + '@tarojs/taro-swan', + '@tarojs/taro-tt', '@tarojs/taro-weapp', + '@tarojs/taro', '@tarojs/webpack-runner', - 'postcss-plugin-constparse', + 'babel-plugin-transform-jsx-to-stylesheet', 'eslint-config-taro', 'eslint-plugin-taro', - 'taro-transformer-wx', - 'postcss-pxtransform', - 'babel-plugin-transform-jsx-to-stylesheet', - '@tarojs/mobx', - '@tarojs/mobx-h5', - '@tarojs/mobx-rn', - '@tarojs/mobx-common', - 'nervjs', 'nerv-devtools', + 'nervjs', + 'postcss-plugin-constparse', + 'postcss-pxtransform', 'stylelint-config-taro-rn', - 'stylelint-taro-rn' + 'stylelint-taro-rn', + 'taro-transformer-wx' ] export enum PARSE_AST_TYPE { @@ -363,6 +364,6 @@ export const taroJsMobxCommon = '@tarojs/mobx-common' export const DEVICE_RATIO_NAME = 'deviceRatio' export const isWindows = os.platform() === 'win32' -export const DEFAULT_TEMPLATE_SRC = 'github:NervJS/taro-project-templates' -export const TARO_CONFIG_FLODER = '.taro' +export const DEFAULT_TEMPLATE_SRC = 'github:NervJS/taro-project-templates#next' +export const TARO_CONFIG_FLODER = '.taro2' export const TARO_BASE_CONFIG = 'index.json' diff --git a/packages/taro-cli/src/util/index.ts b/packages/taro-cli/src/util/index.ts index 0c6ccf955432..924b8e4f6fbf 100644 --- a/packages/taro-cli/src/util/index.ts +++ b/packages/taro-cli/src/util/index.ts @@ -1,20 +1,15 @@ import * as fs from 'fs-extra' import * as path from 'path' import { Transform } from 'stream' -import * as crypto from 'crypto' import * as os from 'os' import * as child_process from 'child_process' import chalk from 'chalk' import { mergeWith, isPlainObject, camelCase, flatMap } from 'lodash' -import * as minimatch from 'minimatch' -import * as t from 'babel-types' import * as yauzl from 'yauzl' import * as findWorkspaceRoot from 'find-yarn-workspace-root' -import * as chokidar from 'chokidar'; import defaultBabelConfig from '../config/babel' -import defaultUglifyConfig from '../config/uglify' import { JS_EXT, @@ -24,14 +19,10 @@ import { processTypeMap, processTypeEnum, MINI_APP_FILES, + NODE_MODULES, BUILD_TYPES, - CONFIG_MAP, - REG_STYLE, - UX_EXT, - NODE_MODULES + TARO_CONFIG_FLODER } from './constants' -import { ICopyArgOptions, ICopyOptions, TogglableOptions } from './types' -import { callPluginSync } from './npm' const execSync = child_process.execSync @@ -93,7 +84,7 @@ export function getRootPath (): string { } export function getTaroPath (): string { - const taroPath = path.join(homedir(), '.taro') + const taroPath = path.join(homedir(), TARO_CONFIG_FLODER) if (!fs.existsSync(taroPath)) { fs.ensureDirSync(taroPath) } @@ -163,19 +154,6 @@ export function isEmptyObject (obj: any): boolean { return true } -export function urlJoin (...agrs: string[]): string { - function normalize (str) { - return str - .replace(/([/]+)/g, '/') - .replace(/\/\?(?!\?)/g, '?') - .replace(/\/#/g, '#') - .replace(/:\//g, '://') - } - - const joined = [].slice.call(agrs, 0).join('/') - return normalize(joined) -} - export function resolveScriptPath (p: string): string { const realPath = p const taroEnv = process.env.TARO_ENV @@ -203,74 +181,6 @@ export function resolveScriptPath (p: string): string { return realPath } -export function resolvePureScriptPath (p: string): string { - const realPath = p - const SCRIPT_EXT = JS_EXT.concat(TS_EXT) - for (let i = 0; i < SCRIPT_EXT.length; i++) { - const item = SCRIPT_EXT[i] - if (fs.existsSync(`${p}${item}`)) { - return `${p}${item}` - } - if (fs.existsSync(`${p}${path.sep}index${item}`)) { - return `${p}${path.sep}index${item}` - } - } - return realPath -} - -export function resolveQuickappFilePath (p: string): string { - for (let i = 0; i < UX_EXT.length; i++) { - const item = UX_EXT[i] - if (fs.existsSync(`${p}${item}`)) { - return `${p}${item}` - } - if (fs.existsSync(`${p}${path.sep}index${item}`)) { - return `${p}${path.sep}index${item}` - } - } - return p -} - -export function processUxContent (contents, cb) { - const reg = /(|>))([\s\S]*?)(?=<\/script\s*>|$)|(|>))([\s\S]*?)(?=<\/style\s*>|$)|<(image)\s+[\s\S]*?["'\s\w\/\-](?:>|$)|(|>))([\s\S]*?)(?=<\/import\s*>|$)/ig; - contents = contents.replace(reg, function (m, $1, $2, $3, $4, $5, $6, $7, $8, $9, $10) { - if ($1) { - $1 = $1.replace(/(\ssrc\s*=\s*)('[^']+'|"[^"]+"|[^\s\/>]+)/ig, function (m, prefix, value) { - if (typeof cb === 'function') { - value = cb(value) - } - return prefix + value - }) - m = $1 + $2 - } else if ($3) { - $3 = $3.replace(/(\ssrc\s*=\s*)('[^']+'|"[^"]+"|[^\s\/>]+)/ig, function (m, prefix, value) { - if (typeof cb === 'function') { - value = cb(value) - } - return prefix + value - }) - m = $3 + $4 - } else if ($5) { - m = m.replace(/(src\s*=\s*)('[^']+'|"[^"]+"|[^\s\/>]+)/ig, function (m, prefix, value) { - if (typeof cb === 'function') { - value = cb(value) - } - return prefix + value - }) - } else if ($6) { - $6 = $6.replace(/(\ssrc\s*=\s*)('[^']+'|"[^"]+"|[^\s\/>]+)/ig, function (m, prefix, value) { - if (typeof cb === 'function') { - value = cb(value) - } - return prefix + value - }) - m = $6 + $7 - } - return m - }) - return contents -} - export function resolveStylePath (p: string): string { const realPath = p const removeExtPath = p.replace(path.extname(p), '') @@ -289,30 +199,6 @@ export function resolveStylePath (p: string): string { return realPath } -export function isDifferentArray (a: any[], b: any[]): boolean { - if (!Array.isArray(a) || !Array.isArray(b)) { - return true - } - if (a.length !== b.length) { - return true - } - a = a.sort() - b = b.sort() - for (let i = 0; i < a.length; i++) { - if (a[i] !== b[i]) { - return true - } - } - return false -} - -export function checksum (buf: Buffer | string, length?): string { - if (!Buffer.isBuffer(buf)) { - buf = Buffer.from(buf) - } - return crypto.createHash('md5').update(buf).digest('hex').slice(0, length || 8) -} - export function printLog (type: processTypeEnum, tag: string, filePath?: string) { const typeShow = processTypeMap[type] const tagLen = tag.replace(/[\u0391-\uFFE5]/g, 'aa').length @@ -330,17 +216,6 @@ export function printLog (type: processTypeEnum, tag: string, filePath?: string) } } -export function replaceContentEnv (content: string, env: object): string { - if (env && !isEmptyObject(env)) { - for (const key in env) { - const reg = new RegExp(`process.env.${key}`, 'g') - content = content.replace(reg, env[key]) - } - return content - } - return content -} - export function generateEnvList (env: object): object { const res = { } if (env && !isEmptyObject(env)) { @@ -355,17 +230,6 @@ export function generateEnvList (env: object): object { return res } -export function replaceContentConstants (content: string, constants: object): string { - if (constants && !isEmptyObject(constants)) { - for (const key in constants) { - const reg = new RegExp(key, 'g') - content = content.replace(reg, constants[key]) - } - return content - } - return content -} - export function generateConstantsList (constants: object): object { const res = { } if (constants && !isEmptyObject(constants)) { @@ -456,6 +320,10 @@ export function recursiveFindNodeModules (filePath: string): string { if (fs.existsSync(nodeModules)) { return nodeModules } + if (dirname.split(path.sep).length <= 1) { + printLog(processTypeEnum.ERROR, `在${dirname}目录下`, `未找到node_modules文件夹,请先安装相关依赖库!`) + return nodeModules + } return recursiveFindNodeModules(dirname) } @@ -503,105 +371,6 @@ export function getInstalledNpmPkgVersion (pkgName: string, basedir: string): st return fs.readJSONSync(pkgPath).version } -export function traverseObjectNode (node, buildAdapter: string, parentKey?: string) { - if (node.type === 'ClassProperty' || node.type === 'ObjectProperty') { - const properties = node.value.properties - const obj = {} - properties.forEach(p => { - let key = t.isIdentifier(p.key) ? p.key.name : p.key.value - if (CONFIG_MAP[buildAdapter][key] === false) { - return - } - if (parentKey !== 'usingComponents' && CONFIG_MAP[buildAdapter][key]) { - key = CONFIG_MAP[buildAdapter][key] - } - obj[key] = traverseObjectNode(p.value, buildAdapter, key) - }) - return obj - } - if (node.type === 'ObjectExpression') { - const properties = node.properties - const obj= {} - properties.forEach(p => { - let key = t.isIdentifier(p.key) ? p.key.name : p.key.value - if (CONFIG_MAP[buildAdapter][key] === false) { - return - } - if (parentKey !== 'usingComponents' && CONFIG_MAP[buildAdapter][key]) { - key = CONFIG_MAP[buildAdapter][key] - } - obj[key] = traverseObjectNode(p.value, buildAdapter, key) - }) - return obj - } - if (node.type === 'ArrayExpression') { - return node.elements.map(item => traverseObjectNode(item, buildAdapter)) - } - if (node.type === 'NullLiteral') { - return null - } - return node.value -} - -export function copyFileSync (from: string, to: string, options?: ICopyArgOptions) { - const filename = path.basename(from) - if (fs.statSync(from).isFile() && !path.extname(to)) { - fs.ensureDirSync(to) - if (from === path.join(to, filename)) { - return - } - return fs.copySync(from, path.join(to, filename), options) - } - if (from === to) { - return - } - fs.ensureDirSync(path.dirname(to)) - return fs.copySync(from, to, options) -} - -export function copyFiles (appPath: string, copyConfig: ICopyOptions | void) { - copyConfig = copyConfig || { patterns: [], options: {} } - if (copyConfig.patterns && copyConfig.patterns.length) { - copyConfig.options = copyConfig.options || {} - const globalIgnore = copyConfig.options.ignore - const projectDir = appPath - copyConfig.patterns.forEach(pattern => { - if (pattern.from && pattern.to) { - const from = path.join(projectDir, pattern.from) - const to = path.join(projectDir, pattern.to) - let ignore = pattern.ignore || globalIgnore - if (fs.existsSync(from)) { - const copyOptions: ICopyArgOptions = {} - if (ignore) { - ignore = Array.isArray(ignore) ? ignore : [ignore] - copyOptions.filter = src => { - let isMatch = false - ignore && ignore.forEach(iPa => { - if (minimatch(path.basename(src), iPa)) { - isMatch = true - } - }) - return !isMatch - } - } - copyFileSync(from, to, copyOptions) - if (pattern.watch){ - const watcher = chokidar.watch(from,{ - persistent: true, - ignoreInitial: true - }) - watcher.on('change',(res) => { - copyFileSync(from, to, copyOptions); - }) - } - } else { - printLog(processTypeEnum.ERROR, '拷贝失败', `${pattern.from} 文件不存在!`) - } - } - }) - } -} - export function isQuickappPkg (name: string, quickappPkgs: any[] = []): boolean { const isQuickappPkg = /^@(system|service)\.[a-zA-Z]{1,}/.test(name) let hasSetInManifest = false @@ -616,42 +385,6 @@ export function isQuickappPkg (name: string, quickappPkgs: any[] = []): boolean return isQuickappPkg } -export function generateQuickAppUx ({ - script, - template, - style, - imports -}: { - script?: string, - template?: string, - style?: string, - imports?: Set<{ - path: string, - name: string - }> -}) { - let uxTxt = '' - if (imports && imports.size) { - imports.forEach(item => { - uxTxt += `\n` - }) - } - if (style) { - if (REG_STYLE.test(style)) { - uxTxt += `\n` - } else { - uxTxt += `\n` - } - } - if (template) { - uxTxt += `\n` - } - if (script) { - uxTxt += `\n` - } - return uxTxt -} - export const recursiveMerge = (src, ...args) => { return mergeWith(src, ...args, (value, srcValue, key, obj, source) => { const typeValue = typeof value @@ -765,21 +498,6 @@ export function getBabelConfig (babel) { return babelConfig } -export function uglifyJS (resCode: string, filePath: string, root: string, uglify: TogglableOptions): string { - const uglifyPluginConfig = uglify || { enable: true } - if (uglifyPluginConfig.enable) { - const uglifyConfig = Object.assign(defaultUglifyConfig, uglifyPluginConfig.config || {}) - const uglifyResult = callPluginSync('uglifyjs', resCode, filePath, uglifyConfig, root) - if (uglifyResult.error) { - printLog(processTypeEnum.ERROR, '压缩错误', `文件${filePath}`) - console.log(uglifyResult.error) - return resCode - } - return uglifyResult.code - } - return resCode -} - export const getAllFilesInFloder = async ( floder: string, filter: string[] = [] @@ -861,3 +579,25 @@ export function extnameExpRegOf (filePath: string): RegExp { export function generateAlipayPath (filePath) { return filePath.replace(/@/g, '_') } + + +interface IRemindVersion { + remindTimes: number +} +export function printVersionTip () { + const taroPath = getTaroPath() + let remindVersion: IRemindVersion = { remindTimes: 0 } + const remindVersionFilePath = path.join(taroPath, '.remind_version.json') + if (!fs.existsSync(remindVersionFilePath)) { + fs.ensureDirSync(taroPath) + fs.writeFileSync(remindVersionFilePath, JSON.stringify(remindVersion)) + } else { + remindVersion = fs.readJSONSync(remindVersionFilePath) + } + if (remindVersion.remindTimes < 5) { + console.log(chalk.red('当前您正在使用 2.0 beta 版本,请先执行 taro doctor 确保编译配置正确')) + console.log(chalk.red('如出现令你束手无策的问题,请使用 taro update 命令更新到你指定的稳定版本')) + remindVersion.remindTimes++ + fs.writeFileSync(remindVersionFilePath, JSON.stringify(remindVersion)) + } +} diff --git a/packages/taro-cli/src/util/npmExact.ts b/packages/taro-cli/src/util/npmExact.ts deleted file mode 100644 index a47bc72bc153..000000000000 --- a/packages/taro-cli/src/util/npmExact.ts +++ /dev/null @@ -1,92 +0,0 @@ -import * as path from 'path' - -import { resolveNpmFilesPath } from './resolve_npm_files' -import { INpmConfig, TogglableOptions, ITaroManifestConfig } from './types' -import { BUILD_TYPES, REG_STYLE, NODE_MODULES, REG_FONT, REG_MEDIA, REG_IMAGE } from './constants' -import { promoteRelativePath, recursiveFindNodeModules, generateAlipayPath } from './index' - -interface IArgs { - npmName: string, - sourceFilePath: string, - filePath: string, - isProduction: boolean, - npmConfig: INpmConfig, - buildAdapter: BUILD_TYPES, - root: string, - npmOutputDir: string, - compileConfig: {[k: string]: any}, - env: object, - uglify: TogglableOptions, - babelConfig: object, - quickappManifest?: ITaroManifestConfig -} - -const notExistNpmList: Set = new Set() - -export function getNpmOutputDir (outputDir: string, configDir: string, npmConfig: INpmConfig): string { - let npmOutputDir - if (!npmConfig.dir) { - npmOutputDir = path.join(outputDir, npmConfig.name) - } else { - npmOutputDir = path.join(path.resolve(configDir, '..', npmConfig.dir), npmConfig.name) - } - return npmOutputDir -} - -export function getExactedNpmFilePath ({ - npmName, - sourceFilePath, - filePath, - isProduction, - npmConfig, - buildAdapter, - root, - npmOutputDir, - compileConfig, - env, - uglify, - babelConfig, - quickappManifest -}: IArgs) { - try { - const nodeModulesPath = recursiveFindNodeModules(path.join(root, NODE_MODULES)) - const npmInfo = resolveNpmFilesPath({ - pkgName: npmName, - isProduction, - npmConfig, - buildAdapter, - root, - rootNpm: nodeModulesPath, - npmOutputDir, - compileConfig, - env, - uglify, - babelConfig, - quickappManifest - }) - const npmInfoMainPath = npmInfo.main - let outputNpmPath - if (REG_STYLE.test(npmInfoMainPath) - || REG_FONT.test(npmInfoMainPath) - || REG_MEDIA.test(npmInfoMainPath) - || REG_IMAGE.test(npmInfoMainPath)) { - outputNpmPath = npmInfoMainPath - filePath = sourceFilePath - } else { - outputNpmPath = npmInfoMainPath.replace(nodeModulesPath, npmOutputDir) - } - if (buildAdapter === BUILD_TYPES.ALIPAY) { - outputNpmPath = generateAlipayPath(outputNpmPath) - } - const relativePath = path.relative(filePath, outputNpmPath) - return promoteRelativePath(relativePath) - } catch (err) { - console.log(err) - notExistNpmList.add(npmName) - return npmName - } -} - -export function getNotExistNpmList () { - return notExistNpmList -} diff --git a/packages/taro-cli/src/util/resolve_npm_files.ts b/packages/taro-cli/src/util/resolve_npm_files.ts deleted file mode 100644 index dd99b33ee1a0..000000000000 --- a/packages/taro-cli/src/util/resolve_npm_files.ts +++ /dev/null @@ -1,550 +0,0 @@ -import * as fs from 'fs-extra' -import * as path from 'path' -import * as resolvePath from 'resolve' -import * as wxTransformer from '@tarojs/transformer-wx' -import * as babel from 'babel-core' -import * as t from 'babel-types' -import traverse from 'babel-traverse' -import generate from 'babel-generator' -import * as _ from 'lodash' - -import { - isNpmPkg, - promoteRelativePath, - printLog, - recursiveFindNodeModules, - generateEnvList, - isQuickappPkg, - generateAlipayPath -} from './index' - -import { - processTypeEnum, - REG_TYPESCRIPT, - BUILD_TYPES, - REG_STYLE, - REG_FONT, - REG_IMAGE, - REG_MEDIA, - REG_JSON, - taroJsFramework, - NODE_MODULES_REG, - taroJsRedux, - taroJsMobxCommon, - taroJsMobx -} from './constants' - -import defaultUglifyConfig from '../config/uglify' - -import * as npmProcess from './npm' -import { IInstallOptions, INpmConfig, IResolvedCache, TogglableOptions, ITaroManifestConfig } from './types' -import { convertArrayToAstExpression, convertObjectToAstExpression } from './astConvert' - -const excludeNpmPkgs = ['ReactPropTypes'] - -const resolvedCache: IResolvedCache = {} -const copyedFiles = {} -export const excludeReplaceTaroFrameworkPkgs = new Set([taroJsRedux, taroJsMobx, taroJsMobxCommon]) - -export function resolveNpmPkgMainPath ( - pkgName: string, - isProduction: boolean, - npmConfig: INpmConfig, - buildAdapter: BUILD_TYPES = BUILD_TYPES.WEAPP, - root: string -) { - try { - return resolvePath.sync(pkgName, { basedir: root }) - } catch (err) { - if (err.code === 'MODULE_NOT_FOUND') { - console.log(`缺少npm包${pkgName},开始安装...`) - const installOptions: IInstallOptions = { - dev: false - } - if (pkgName.indexOf(npmProcess.taroPluginPrefix) >= 0) { - installOptions.dev = true - } - npmProcess.installNpmPkg(pkgName, installOptions) - return resolveNpmPkgMainPath(pkgName, isProduction, npmConfig, buildAdapter, root) - } - } -} - -export function resolveNpmFilesPath ({ - pkgName, - isProduction, - npmConfig, - buildAdapter, - root, - rootNpm, - npmOutputDir, - compileConfig = {}, - env, - uglify, - babelConfig, - quickappManifest -}: { - pkgName: string, - isProduction: boolean, - npmConfig: INpmConfig, - buildAdapter: BUILD_TYPES, - root: string, - rootNpm: string, - npmOutputDir: string, - compileConfig: {[k: string]: any}, - env: object, - uglify: TogglableOptions, - babelConfig: object, - quickappManifest?: ITaroManifestConfig -}) { - if (!resolvedCache[pkgName]) { - const res = resolveNpmPkgMainPath(pkgName, isProduction, npmConfig, buildAdapter, root) - resolvedCache[pkgName] = { - main: res, - files: [] - } - resolvedCache[pkgName].files.push(res) - recursiveRequire({ - filePath: res, - files: resolvedCache[pkgName].files, - isProduction, - npmConfig, - buildAdapter, - rootNpm, - npmOutputDir: npmOutputDir, - compileConfig, - env, - uglify, - babelConfig, - quickappManifest - }) - } - return resolvedCache[pkgName] -} - -function analyzeImportUrl ({ - requirePath, - excludeRequire, - source, - filePath, - files, - isProduction, - npmConfig, - rootNpm, - npmOutputDir, - buildAdapter, - compileConfig = [], - env, - uglify, - babelConfig, - quickappManifest -}: { - requirePath: string, - excludeRequire: string[], - source: any, - filePath: string, - files: string[], - isProduction: boolean, - npmConfig: INpmConfig, - rootNpm: string, - npmOutputDir: string, - buildAdapter: BUILD_TYPES, - compileConfig: {[k: string]: any}, - env: object, - uglify: TogglableOptions, - babelConfig: object, - quickappManifest?: ITaroManifestConfig -}) { - if (excludeRequire.indexOf(requirePath) < 0) { - const quickappPkgs = quickappManifest ? quickappManifest.features : [] - if (buildAdapter === BUILD_TYPES.QUICKAPP && isQuickappPkg(requirePath, quickappPkgs)) { - return - } - if (isNpmPkg(requirePath)) { - if (excludeNpmPkgs.indexOf(requirePath) < 0) { - const taroMiniAppFramework = `@tarojs/taro-${buildAdapter}` - excludeReplaceTaroFrameworkPkgs.add(taroMiniAppFramework) - if (requirePath === taroJsFramework - && (!NODE_MODULES_REG.test(filePath) || !Array.from(excludeReplaceTaroFrameworkPkgs).some(item => filePath.replace(/\\/g, '/').indexOf(item) >= 0))) { - requirePath = taroMiniAppFramework - } - const res = resolveNpmFilesPath({ - pkgName: requirePath, - isProduction, - npmConfig, - buildAdapter, - root: path.dirname(recursiveFindNodeModules(filePath)), - rootNpm, - npmOutputDir, - compileConfig, - env, - uglify, - babelConfig, - quickappManifest - }) - let relativeRequirePath = promoteRelativePath(path.relative(filePath, res.main)) - relativeRequirePath = relativeRequirePath.replace(/node_modules/g, npmConfig.name) - if (buildAdapter === BUILD_TYPES.ALIPAY) { - relativeRequirePath = generateAlipayPath(relativeRequirePath) - } - source.value = relativeRequirePath - } - } else { - let realRequirePath = path.resolve(path.dirname(filePath), requirePath) - const tempPathWithJS = `${realRequirePath}.js` - const tempPathWithIndexJS = `${realRequirePath}${path.sep}index.js` - if (fs.existsSync(tempPathWithJS)) { - realRequirePath = tempPathWithJS - requirePath += '.js' - } else if (fs.existsSync(tempPathWithIndexJS)) { - realRequirePath = tempPathWithIndexJS - requirePath += '/index.js' - } - if (files.indexOf(realRequirePath) < 0) { - files.push(realRequirePath) - recursiveRequire({ - filePath: realRequirePath, - files, - isProduction, - npmConfig, - buildAdapter, - rootNpm, - npmOutputDir, - compileConfig, - env, - uglify, - babelConfig, - quickappManifest - }) - } - source.value = requirePath - } - } -} - -function parseAst ({ - ast, - filePath, - files, - isProduction, - npmConfig, - rootNpm, - npmOutputDir, - buildAdapter, - compileConfig = [], - env, - uglify, - babelConfig, - quickappManifest -}: { - ast: t.File, - filePath: string, - files: string[], - isProduction: boolean, - npmConfig: INpmConfig, - rootNpm: string, - npmOutputDir: string, - buildAdapter: BUILD_TYPES, - compileConfig: {[k: string]: any}, - env: object, - uglify: TogglableOptions, - babelConfig: object, - quickappManifest?: ITaroManifestConfig -}) { - const excludeRequire: string[] = [] - - traverse(ast, { - IfStatement (astPath) { - astPath.traverse({ - BinaryExpression (astPath) { - const node = astPath.node - const left = node.left - const right = node.right - if (t.isMemberExpression(left) && t.isStringLiteral(right)) { - if (generate(left).code === 'process.env.TARO_ENV' && - (node.right as t.StringLiteral).value !== buildAdapter) { - const consequentSibling = astPath.getSibling('consequent') - consequentSibling.traverse({ - CallExpression (astPath) { - if (astPath.get('callee').isIdentifier({ name: 'require' })) { - const arg = astPath.get('arguments')[0] - if (t.isStringLiteral(arg.node)) { - excludeRequire.push(arg.node.value) - } - } - } - }) - } - } - } - }) - }, - Program: { - exit (astPath) { - astPath.traverse({ - ImportDeclaration (astPath) { - const node = astPath.node - const source = node.source - const value = source.value - if (REG_JSON.test(value)) { - const realRequirePath = path.resolve(path.dirname(filePath), value) - if (fs.existsSync(realRequirePath)) { - const obj = JSON.parse(fs.readFileSync(realRequirePath).toString()) - const specifiers = node.specifiers - let defaultSpecifier - specifiers.forEach(item => { - if (item.type === 'ImportDefaultSpecifier') { - defaultSpecifier = item.local.name - } - }) - if (defaultSpecifier) { - let objArr: t.NullLiteral | t.Expression = t.nullLiteral() - if (Array.isArray(obj)) { - objArr = t.arrayExpression(convertArrayToAstExpression(obj)) - } else { - objArr = t.objectExpression(convertObjectToAstExpression(obj)) - } - astPath.replaceWith(t.variableDeclaration('const', [t.variableDeclarator(t.identifier(defaultSpecifier), objArr)])) - } - } - return - } - analyzeImportUrl({ - requirePath: value, - excludeRequire, - source, - filePath, - files, - isProduction, - npmConfig, - rootNpm, - npmOutputDir, - buildAdapter, - compileConfig, - env, - uglify, - babelConfig, - quickappManifest - }) - }, - CallExpression (astPath) { - const node = astPath.node - const callee = node.callee as t.Identifier - if (callee.name === 'require') { - const args = node.arguments as Array - const requirePath = args[0].value - if (REG_JSON.test(requirePath)) { - const realRequirePath = path.resolve(path.dirname(filePath), requirePath) - if (fs.existsSync(realRequirePath)) { - const obj = JSON.parse(fs.readFileSync(realRequirePath).toString()) - let objArr: t.NullLiteral | t.Expression | t.ObjectProperty[] = t.nullLiteral() - if (Array.isArray(obj)) { - objArr = t.arrayExpression(convertArrayToAstExpression(obj)) - } else { - objArr = convertObjectToAstExpression(obj) - } - astPath.replaceWith(t.objectExpression(objArr as any)) - } - return - } - analyzeImportUrl({ - requirePath, - excludeRequire, - source: args[0], - filePath, - files, - isProduction, - npmConfig, - rootNpm, - npmOutputDir, - buildAdapter, - compileConfig, - env, - uglify, - babelConfig, - quickappManifest - }) - } - } - }) - } - } - }) - - return generate(ast).code -} - -async function recursiveRequire ({ - filePath, - files, - isProduction, - npmConfig, - buildAdapter, - npmOutputDir, - rootNpm, - compileConfig = {}, - env, - uglify, - babelConfig, - quickappManifest -}: { - filePath: string, - files: string[], - isProduction: boolean, - npmConfig: INpmConfig, - buildAdapter: BUILD_TYPES, - rootNpm: string, - npmOutputDir: string, - compileConfig: {[k: string]: any}, - env: object, - uglify: TogglableOptions, - babelConfig: object, - quickappManifest?: ITaroManifestConfig -}) { - let fileContent = fs.readFileSync(filePath).toString() - let outputNpmPath = filePath.replace(rootNpm, npmOutputDir).replace(/node_modules/g, npmConfig.name) - if (buildAdapter === BUILD_TYPES.ALIPAY) { - outputNpmPath = generateAlipayPath(outputNpmPath) - } - if (REG_STYLE.test(path.basename(filePath))) { - return - } - if (REG_FONT.test(filePath) || REG_IMAGE.test(filePath) || REG_MEDIA.test(filePath)) { - fs.ensureDirSync(path.dirname(outputNpmPath)) - fs.writeFileSync(outputNpmPath, fileContent) - let modifyOutput = outputNpmPath.replace(path.dirname(rootNpm) + path.sep, '') - modifyOutput = modifyOutput.split(path.sep).join('/') - printLog(processTypeEnum.COPY, 'NPM文件', modifyOutput) - return - } - fileContent = npmCodeHack(filePath, fileContent, buildAdapter) - - const npmExclude = (compileConfig.exclude || []).filter(item => /(?:\/|^)node_modules(\/|$)/.test(item)) - let isNpmInCompileExclude = false - for (const item of npmExclude) { - isNpmInCompileExclude = filePath.indexOf(item) !== -1 - if (isNpmInCompileExclude) { - break - } - } - if (!isNpmInCompileExclude) { - try { - const constantsReplaceList = Object.assign({ - 'process.env.TARO_ENV': buildAdapter - }, generateEnvList(env || {})) - const transformResult = wxTransformer({ - code: fileContent, - sourcePath: filePath, - outputPath: outputNpmPath, - isNormal: true, - adapter: buildAdapter, - isTyped: REG_TYPESCRIPT.test(filePath), - env: constantsReplaceList - }) - const ast = babel.transformFromAst(transformResult.ast, '', { - plugins: [ - [require('babel-plugin-transform-define').default, constantsReplaceList] - ] - }).ast as t.File - fileContent = parseAst({ - ast, - filePath, - files, - isProduction, - npmConfig, - rootNpm, - buildAdapter, - compileConfig, - npmOutputDir, - env, - uglify, - babelConfig, - quickappManifest - }) - } catch (err) { - console.log(err) - } - } - - if (!copyedFiles[outputNpmPath]) { - const compileInclude = compileConfig.include - if (compileInclude && compileInclude.length) { - const filePathArr = filePath.split(path.sep) - const nodeModulesIndex = filePathArr.indexOf('node_modules') - if (nodeModulesIndex >= 0) { - const npmFilePath = filePathArr.slice(nodeModulesIndex + 1).join('/') - let needCompile = false - compileInclude.forEach(item => { - if (npmFilePath.indexOf(item) >= 0) { - needCompile = true - } - }) - if (needCompile) { - const compileScriptRes = await npmProcess.callPlugin('babel', fileContent, filePath, babelConfig, rootNpm) - fileContent = compileScriptRes.code - } - } - } - if (isProduction && buildAdapter !== BUILD_TYPES.QUICKAPP) { - const uglifyPluginConfig = uglify || { enable: true } - if (uglifyPluginConfig.enable) { - const uglifyConfig = Object.assign(defaultUglifyConfig, uglifyPluginConfig.config || {}) - const uglifyResult = npmProcess.callPluginSync('uglifyjs', fileContent, outputNpmPath, uglifyConfig, rootNpm) - if (uglifyResult.error) { - printLog(processTypeEnum.ERROR, '压缩错误', `文件${filePath}`) - console.log(uglifyResult.error) - } else { - fileContent = uglifyResult.code - } - } - } - outputNpmPath = outputNpmPath.replace(path.extname(outputNpmPath), '.js') - fs.ensureDirSync(path.dirname(outputNpmPath)) - fs.writeFileSync(outputNpmPath, fileContent) - let modifyOutput = outputNpmPath.replace(path.dirname(rootNpm) + path.sep, '') - modifyOutput = modifyOutput.split(path.sep).join('/') - printLog(processTypeEnum.COPY, 'NPM文件', modifyOutput) - copyedFiles[outputNpmPath] = true - } -} - -export function npmCodeHack (filePath: string, content: string, buildAdapter: BUILD_TYPES): string { - const basename = path.basename(filePath) - switch (basename) { - case 'lodash.js': - case '_global.js': - case 'lodash.min.js': - if (buildAdapter === BUILD_TYPES.ALIPAY || buildAdapter === BUILD_TYPES.SWAN || buildAdapter === BUILD_TYPES.JD) { - content = content.replace(/Function\(['"]return this['"]\)\(\)/, '{}') - } else { - content = content.replace(/Function\(['"]return this['"]\)\(\)/, 'this') - } - break - case 'mobx.js': - // 解决支付宝小程序全局window或global不存在的问题 - content = content.replace( - /typeof window\s{0,}!==\s{0,}['"]undefined['"]\s{0,}\?\s{0,}window\s{0,}:\s{0,}global/, - 'typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : {}' - ) - break - case '_html.js': - content = 'module.exports = false;' - break - case '_microtask.js': - content = content.replace('if(Observer)', 'if(false && Observer)') - // IOS 1.10.2 Promise BUG - content = content.replace('Promise && Promise.resolve', 'false && Promise && Promise.resolve') - break - case '_freeGlobal.js': - content = content.replace('module.exports = freeGlobal;', 'module.exports = freeGlobal || this || global || {};') - break - } - if (buildAdapter === BUILD_TYPES.ALIPAY && content.replace(/\s\r\n/g, '').length <= 0) { - content = '// Empty file' - } - return content -} - -export function getResolvedCache (): IResolvedCache { - return resolvedCache -} diff --git a/packages/taro-cli/src/util/types.ts b/packages/taro-cli/src/util/types.ts index 2150a62092f0..e2b64b2d3b13 100644 --- a/packages/taro-cli/src/util/types.ts +++ b/packages/taro-cli/src/util/types.ts @@ -1,9 +1,4 @@ -import * as webpack from 'webpack' -import * as webpackDevServer from 'webpack-dev-server' -import * as t from 'babel-types' - -import { BUILD_TYPES, IMINI_APP_FILE_TYPE } from './constants' -import { IBabelOptions } from '../config/babel' +import { BUILD_TYPES } from './constants' export interface IInstallOptions { dev: boolean, @@ -44,12 +39,13 @@ export interface IPrettierConfig { endOfLine?: 'auto' | 'lf' | 'crlf' | 'cr' } -export interface IBuildConfig { +export interface IBuildOptions { type?: BUILD_TYPES, watch?: boolean, platform?: string, port?: number, release?: boolean, + envHasBeenSet?: boolean, page?: string, component?: string, uiIndex?: string @@ -68,301 +64,3 @@ export interface IMiniAppBuildConfig { export interface IOption { [key: string]: any } - -export interface ICopyOptions { - patterns: { - from: string, - to: string, - ignore?: string[], - watch?: boolean - }[], - options: { - ignore?: string[] - } -} - -export interface ICopyArgOptions { - filter?: (src: string) => boolean -} - -export interface IWxTransformResult { - code: string, - ast: t.File, - template: string, - compressedTemplate: string, - components: { - name: string, - path: string, - type: string - }[], - componentProperies: string[] -} - -export namespace PostcssOption { - export type cssModules = TogglableOptions<{ - namingPattern: 'global' | string - generateScopedName: string - }> - export type url = TogglableOptions<{ - limit: number, - basePath?: string | string[] - }> -} - -export interface IPostcssOption { - autoprefixer?: TogglableOptions, - pxtransform?: TogglableOptions, - cssModules?: PostcssOption.cssModules, - url?: PostcssOption.url, - [key: string]: any -} - -export interface ICompileOption { - exclude?: string[], - include?: string[] -} - -export interface IMiniAppConfig { - appOutput?: boolean, - npm?: INpmConfig, - module?: { - postcss?: IPostcssOption - }, - compile?: ICompileOption, - customFilesTypes: IMINI_APP_FILE_TYPE, - publicPath?: string, - staticDirectory?: string -} - -export type TogglableOptions = { - enable?: boolean, - config?: T -} - -export interface IH5RouterConfig { - mode?: 'hash' | 'browser' | 'multi', - customRoutes?: IOption, - basename?: string, - lazyload?: boolean | ((pagename: string) => boolean) - renamePagename?: (pagename: string) => string -} - -export interface IH5Config { - webpack: ((webpackConfig: webpack.Configuration, webpack) => webpack.Configuration) | webpack.Configuration, - webpackChain: (chain: any, webpack: any) => void, - dllWebpackChain: (chain: any, webpack: any) => void, - - alias: IOption, - entry: webpack.Entry, - output: webpack.Output, - router?: IH5RouterConfig, - devServer: webpackDevServer.Configuration, - enableSourceMap: boolean, - enableExtract: boolean, - enableDll: boolean, - transformOnly: boolean, - - cssLoaderOption: IOption, - styleLoaderOption: IOption, - sassLoaderOption: IOption, - lessLoaderOption: IOption, - stylusLoaderOption: IOption, - mediaUrlLoaderOption: IOption, - fontUrlLoaderOption: IOption, - imageUrlLoaderOption: IOption, - miniCssExtractPluginOption: IOption, - dllDirectory: string, - dllFilename: string, - dllEntry: { - [key: string]: string[] - }, - esnextModules: string[], - - module?: { - postcss?: IPostcssOption - } -} - -type FeatureItem = { - name: string -} - -const enum LogLevel { - OFF = 'off', - ERROR = 'error', - WARN = 'warn', - INFO = 'info', - LOG = 'log', - DEBUG = 'debug' -} - -export type SystemConfig = { - /** - * 打印日志等级,分为 off,error,warn,info,log,debug - */ - logLevel?: LogLevel, - /** - * 页面设计基准宽度,根据实际设备宽度来缩放元素大小 - */ - designWidth?: number, - /** - * 全局数据对象,属性名不能以$或_开头,在页面中可通过 this 进行访问;如果全局数据属性与页面的数据属性重名,则页面初始化时,全局数据会覆盖页面中对应的属性值 - */ - data?: IOption -} - -type RouterConfig = { - /** - * 首页名称 - */ - entry: string, - /** - * 页面配置列表,key 值为页面名称(对应页面目录名,例如 Hello 对应'Hello'目录),value 为页面详细配置 page - */ - pages: RouterPage[] -} -type RouterPage = { - /** - * 页面对应的组件名,与 ux 文件名保持一致,例如'hello' 对应 'hello.ux' - */ - component: string, - /** - * 页面路径,例如“/user”,不填则默认为/<页面名称>。 - * path 必须唯一,不能和其他 page 的 path 相同。 - * 下面 page 的 path 因为缺失,会被设置为“/Index”: - * "Index": {"component": "index"} - */ - path?: string, - /** - * 声明页面可以处理某种请求 - */ - filter: { - [key: string]: { - uri: string - } - } -} - -interface IDefaultDisplayConfig { - /** - * 窗口背景颜色 - */ - backgroundColor?: string, - /** - * 是否是全屏模式,默认不会同时作用于 titleBar,titleBar 需要继续通过 titleBar 控制 - */ - fullScreen?: boolean, - /** - * 是否显示 titleBar - */ - titleBar?: boolean, - /** - * 标题栏背景色 - */ - titleBarBackgroundColor?: string, - /** - * 标题栏文字颜色 - */ - titleBarTextColor?: string, - /** - * 标题栏文字(也可通过页面跳转传递参数(titleBarText)设置) - */ - titleBarText?: string, - /** - * 是否显示标题栏右上角菜单按钮,点击菜单按钮调用页面生命周期 onMenuPress 方法,如果该方法未实现则显示系统默认菜单 - */ - menu?: boolean, - /** - * 软键盘弹出时为保证输入框可见,页面的调整方式。 adjustPan:上移页面; adjustResize:压缩页面显示区域,当页面全屏时,此设置不生效 - */ - windowSoftInputMode?: 'adjustPan' | 'adjustResize' -} - -interface IDisplayConfig extends IDefaultDisplayConfig { - /** - * 各个页面的显示样式,key 为页面名(与路由中的页面名保持一致),value 为窗口显示样式,页面样式覆盖 default 样式 - */ - pages?: { - [key: string]: IDefaultDisplayConfig - } -} - -export interface ITaroManifestConfig { - npm?: INpmConfig, - /** - * 应用包名,确认与原生应用的包名不一致,推荐采用 com.company.module 的格式,如:com.example.demo - */ - package: string, - /** - * 应用名称,6 个汉字以内,与应用商店保存的名称一致,用于在桌面图标、弹窗等处显示应用名称 - */ - name: string, - /** - * 应用图标,提供 192x192 大小的即可 - */ - icon: string, - /** - * 应用版本名称,如:"1.0" - */ - versionName?: string, - /** - * 应用版本号,从1自增,推荐每次重新上传包时versionCode+1 - */ - versionCode: number, - /** - * 支持的最小平台版本号,兼容性检查,避免上线后在低版本平台运行并导致不兼容;如果不填按照内测版本处理 - */ - minPlatformVersion?: string, - /** - * 接口列表,绝大部分接口都需要在这里声明,否则不能调用,详见每个接口的文档说明 - */ - features?: FeatureItem[], - /** - * - */ - logLevel?: LogLevel -} - -export interface IManifestConfig extends ITaroManifestConfig { - /** - * 系统配置信息 - */ - config: SystemConfig, - /** - * 路由信息 - */ - router: RouterConfig, - /** - * UI 显示相关配置 - */ - display?: IDisplayConfig -} - -export interface IDeviceRatio { - [key: string]: number -} - -export interface IProjectConfig { - projectName?: string, - date?: string, - designWidth?: number, - watcher?: [], - deviceRatio?: IDeviceRatio, - sourceRoot?: string, - outputRoot?: string, - plugins?: { - babel?: IBabelOptions, - csso?: TogglableOptions, - uglify?: TogglableOptions - }, - ui?: { - extraWatchFiles?: any[] - }, - env?: IOption, - alias?: IOption, - defineConstants?: IOption, - copy?: ICopyOptions, - weapp?: IMiniAppConfig, - h5?: IH5Config, - quickApp?: ITaroManifestConfig -} diff --git a/packages/taro-cli/templates/default/_editorconfig b/packages/taro-cli/templates/default/_editorconfig deleted file mode 100644 index 5760be583696..000000000000 --- a/packages/taro-cli/templates/default/_editorconfig +++ /dev/null @@ -1,12 +0,0 @@ -# http://editorconfig.org -root = true - -[*] -indent_style = space -indent_size = 2 -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -[*.md] -trim_trailing_whitespace = false diff --git a/packages/taro-cli/templates/default/_eslintrc b/packages/taro-cli/templates/default/_eslintrc deleted file mode 100644 index dc480133fb5b..000000000000 --- a/packages/taro-cli/templates/default/_eslintrc +++ /dev/null @@ -1,26 +0,0 @@ -{ -<%if (!locals.typescript) {-%> - "extends": ["taro"], - "rules": { - "no-unused-vars": ["error", { "varsIgnorePattern": "Taro" }], - "react/jsx-filename-extension": [1, { "extensions": [".js", ".jsx", ".tsx"] }] - }, - "parser": "babel-eslint" - <%} else {-%> - "extends": ["taro", "plugin:@typescript-eslint/recommended"], - "parser": "@typescript-eslint/parser", - "rules": { - "no-unused-vars": ["error", { "varsIgnorePattern": "Taro" }], - "react/jsx-filename-extension": [1, { "extensions": [".js", ".jsx", ".tsx"] }], - "@typescript-eslint/explicit-function-return-type": 0, - "@typescript-eslint/no-empty-function": ["warn"] - }, - "parserOptions": { - "ecmaFeatures": { - "jsx": true - }, - "useJSXTextNode": true, - "project": "./tsconfig.json" - } -<%}-%> -} diff --git a/packages/taro-cli/templates/default/_gitignore b/packages/taro-cli/templates/default/_gitignore deleted file mode 100644 index 2cea3efd8c32..000000000000 --- a/packages/taro-cli/templates/default/_gitignore +++ /dev/null @@ -1,6 +0,0 @@ -dist/ -deploy_versions/ -.temp/ -.rn_temp/ -node_modules/ -.DS_Store diff --git a/packages/taro-cli/templates/default/_npmrc b/packages/taro-cli/templates/default/_npmrc deleted file mode 100644 index 734aab2896a0..000000000000 --- a/packages/taro-cli/templates/default/_npmrc +++ /dev/null @@ -1,10 +0,0 @@ -registry=https://registry.npm.taobao.org -disturl=https://npm.taobao.org/dist -sass_binary_site=https://npm.taobao.org/mirrors/node-sass/ -phantomjs_cdnurl=https://npm.taobao.org/mirrors/phantomjs/ -electron_mirror=https://npm.taobao.org/mirrors/electron/ -chromedriver_cdnurl=https://npm.taobao.org/mirrors/chromedriver -operadriver_cdnurl=https://npm.taobao.org/mirrors/operadriver -selenium_cdnurl=https://npm.taobao.org/mirrors/selenium -node_inspector_cdnurl=https://npm.taobao.org/mirrors/node-inspector -fsevents_binary_host_mirror=http://npm.taobao.org/mirrors/fsevents/ diff --git a/packages/taro-cli/templates/default/config/dev.js b/packages/taro-cli/templates/default/config/dev.js index 03776341d4a4..75ad98aeeb6f 100644 --- a/packages/taro-cli/templates/default/config/dev.js +++ b/packages/taro-cli/templates/default/config/dev.js @@ -2,8 +2,7 @@ module.exports = { env: { NODE_ENV: '"development"' }, - defineConstants: { - }, - weapp: {}, + defineConstants: {}, + mini: {}, h5: {} } diff --git a/packages/taro-cli/templates/default/config/index.js b/packages/taro-cli/templates/default/config/index.js index 8668045052ac..77f7e92c5665 100644 --- a/packages/taro-cli/templates/default/config/index.js +++ b/packages/taro-cli/templates/default/config/index.js @@ -9,54 +9,39 @@ const config = { }, sourceRoot: 'src', outputRoot: 'dist', - plugins: { - babel: { - sourceMap: true, - presets: [ - ['env', { - modules: false - }] - ], - plugins: [ - 'transform-decorators-legacy', - 'transform-class-properties', - 'transform-object-rest-spread' - ] - } + babel: { + sourceMap: true, + presets: [ + ['env', { + modules: false + }] + ], + plugins: [ + 'transform-decorators-legacy', + 'transform-class-properties', + 'transform-object-rest-spread' + ] }, + plugins: [], defineConstants: { }, - weapp: { - module: { - postcss: { - autoprefixer: { - enable: true, - config: { - browsers: [ - 'last 3 versions', - 'Android >= 4.1', - 'ios >= 8' - ] - } - }, - pxtransform: { - enable: true, - config: { - - } - }, - url: { - enable: true, - config: { - limit: 10240 // 设定转换尺寸上限 - } - }, - cssModules: { - enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true - config: { - namingPattern: 'module', // 转换模式,取值为 global/module - generateScopedName: '[name]__[local]___[hash:base64:5]' - } + mini: { + postcss: { + pxtransform: { + enable: true, + config: {} + }, + url: { + enable: true, + config: { + limit: 10240 // 设定转换尺寸上限 + } + }, + cssModules: { + enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true + config: { + namingPattern: 'module', // 转换模式,取值为 global/module + generateScopedName: '[name]__[local]___[hash:base64:5]' } } } @@ -64,24 +49,22 @@ const config = { h5: { publicPath: '/', staticDirectory: 'static', - module: { - postcss: { - autoprefixer: { - enable: true, - config: { - browsers: [ - 'last 3 versions', - 'Android >= 4.1', - 'ios >= 8' - ] - } - }, - cssModules: { - enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true - config: { - namingPattern: 'module', // 转换模式,取值为 global/module - generateScopedName: '[name]__[local]___[hash:base64:5]' - } + postcss: { + autoprefixer: { + enable: true, + config: { + browsers: [ + 'last 3 versions', + 'Android >= 4.1', + 'ios >= 8' + ] + } + }, + cssModules: { + enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true + config: { + namingPattern: 'module', // 转换模式,取值为 global/module + generateScopedName: '[name]__[local]___[hash:base64:5]' } } } diff --git a/packages/taro-cli/templates/default/config/prod.js b/packages/taro-cli/templates/default/config/prod.js index c6a1531337f2..fbd825bd81ea 100644 --- a/packages/taro-cli/templates/default/config/prod.js +++ b/packages/taro-cli/templates/default/config/prod.js @@ -2,9 +2,8 @@ module.exports = { env: { NODE_ENV: '"production"' }, - defineConstants: { - }, - weapp: {}, + defineConstants: {}, + mini: {}, h5: { /** * 如果h5端编译后体积过大,可以使用webpack-bundle-analyzer插件对打包体积进行分析。 diff --git a/packages/taro-cli/templates/default/package.json b/packages/taro-cli/templates/default/package.json index 77854d11ecda..aecd09618a7e 100644 --- a/packages/taro-cli/templates/default/package.json +++ b/packages/taro-cli/templates/default/package.json @@ -47,10 +47,7 @@ "devDependencies": { "@types/react": "^16.4.6", "@types/webpack-env": "^1.13.6", - "@tarojs/plugin-babel": "<%= version %>", - "@tarojs/plugin-csso": "<%= version %>",<% if (css !== 'none') {%> - "@tarojs/plugin-<%= css %>": "<%= version %>",<%}%> - "@tarojs/plugin-uglifyjs": "<%= version %>", + "@tarojs/mini-runner": "<%= version %>", "@tarojs/webpack-runner": "<%= version %>", "babel-plugin-transform-class-properties": "^6.24.1", "babel-plugin-transform-decorators-legacy": "^1.3.4", diff --git a/packages/taro-cli/yarn.lock b/packages/taro-cli/yarn.lock index c76174b9edb2..e136ddc98dff 100644 --- a/packages/taro-cli/yarn.lock +++ b/packages/taro-cli/yarn.lock @@ -16,19 +16,19 @@ dependencies: "@babel/highlight" "^7.0.0" -"@babel/core@^7.0.0-beta": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.4.tgz#6ebd9fe00925f6c3e177bb726a188b5f578088ff" - integrity sha512-Rm0HGw101GY8FTzpWSyRbki/jzq+/PkNQJ+nSulrdY6gFGOsNseCqD6KHRYe2E+EdzuBdr2pxCp6s4Uk6eJ+XQ== +"@babel/core@^7.0.0": + version "7.7.7" + resolved "https://registry.npm.taobao.org/@babel/core/download/@babel/core-7.7.7.tgz#ee155d2e12300bcc0cff6a8ad46f2af5063803e9" + integrity sha1-7hVdLhIwC8wM/2qK1G8q9QY4A+k= dependencies: "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.6.4" - "@babel/helpers" "^7.6.2" - "@babel/parser" "^7.6.4" - "@babel/template" "^7.6.0" - "@babel/traverse" "^7.6.3" - "@babel/types" "^7.6.3" - convert-source-map "^1.1.0" + "@babel/generator" "^7.7.7" + "@babel/helpers" "^7.7.4" + "@babel/parser" "^7.7.7" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + convert-source-map "^1.7.0" debug "^4.1.0" json5 "^2.1.0" lodash "^4.17.13" @@ -47,76 +47,84 @@ source-map "^0.5.0" trim-right "^1.0.1" -"@babel/generator@^7.0.0-beta", "@babel/generator@^7.6.3", "@babel/generator@^7.6.4": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.4.tgz#a4f8437287bf9671b07f483b76e3bb731bc97671" - integrity sha512-jsBuXkFoZxk0yWLyGI9llT9oiQ2FeTASmRFE32U+aaDTfoE92t78eroO7PTpU/OrYq38hlcDM6vbfLDaOLy+7w== +"@babel/generator@^7.0.0", "@babel/generator@^7.7.4", "@babel/generator@^7.7.7": + version "7.7.7" + resolved "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.7.7.tgz#859ac733c44c74148e1a72980a64ec84b85f4f45" + integrity sha1-hZrHM8RMdBSOGnKYCmTshLhfT0U= dependencies: - "@babel/types" "^7.6.3" + "@babel/types" "^7.7.4" jsesc "^2.5.1" lodash "^4.17.13" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" - integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q== +"@babel/helper-annotate-as-pure@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.7.4.tgz?cache=0&sync_timestamp=1574466005922&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-annotate-as-pure%2Fdownload%2F%40babel%2Fhelper-annotate-as-pure-7.7.4.tgz#bb3faf1e74b74bd547e867e48f551fa6b098b6ce" + integrity sha1-uz+vHnS3S9VH6Gfkj1UfprCYts4= dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.7.4" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" - integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.7.4.tgz?cache=0&sync_timestamp=1574465920635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-builder-binary-assignment-operator-visitor%2Fdownload%2F%40babel%2Fhelper-builder-binary-assignment-operator-visitor-7.7.4.tgz#5f73f2b28580e224b5b9bd03146a4015d6217f5f" + integrity sha1-X3PysoWA4iS1ub0DFGpAFdYhf18= dependencies: - "@babel/helper-explode-assignable-expression" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/helper-explode-assignable-expression" "^7.7.4" + "@babel/types" "^7.7.4" -"@babel/helper-builder-react-jsx@^7.3.0": - version "7.3.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz#a1ac95a5d2b3e88ae5e54846bf462eeb81b318a4" - integrity sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw== +"@babel/helper-builder-react-jsx@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-builder-react-jsx/download/@babel/helper-builder-react-jsx-7.7.4.tgz#da188d247508b65375b2c30cf59de187be6b0c66" + integrity sha1-2hiNJHUItlN1ssMM9Z3hh75rDGY= dependencies: - "@babel/types" "^7.3.0" + "@babel/types" "^7.7.4" esutils "^2.0.0" -"@babel/helper-call-delegate@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43" - integrity sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ== +"@babel/helper-call-delegate@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-call-delegate/download/@babel/helper-call-delegate-7.7.4.tgz?cache=0&sync_timestamp=1574465922326&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-call-delegate%2Fdownload%2F%40babel%2Fhelper-call-delegate-7.7.4.tgz#621b83e596722b50c0066f9dc37d3232e461b801" + integrity sha1-YhuD5ZZyK1DABm+dw30yMuRhuAE= dependencies: - "@babel/helper-hoist-variables" "^7.4.4" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" + "@babel/helper-hoist-variables" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" -"@babel/helper-create-class-features-plugin@^7.5.5": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.6.0.tgz#769711acca889be371e9bc2eb68641d55218021f" - integrity sha512-O1QWBko4fzGju6VoVvrZg0RROCVifcLxiApnGP3OWfWzvxRZFCoBD81K5ur5e3bVY2Vf/5rIJm8cqPKn8HUJng== +"@babel/helper-create-class-features-plugin@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-create-class-features-plugin/download/@babel/helper-create-class-features-plugin-7.7.4.tgz#fce60939fd50618610942320a8d951b3b639da2d" + integrity sha1-/OYJOf1QYYYQlCMgqNlRs7Y52i0= dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-member-expression-to-functions" "^7.5.5" - "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-function-name" "^7.7.4" + "@babel/helper-member-expression-to-functions" "^7.7.4" + "@babel/helper-optimise-call-expression" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.5.5" - "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/helper-replace-supers" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" -"@babel/helper-define-map@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz#3dec32c2046f37e09b28c93eb0b103fd2a25d369" - integrity sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg== +"@babel/helper-create-regexp-features-plugin@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-create-regexp-features-plugin/download/@babel/helper-create-regexp-features-plugin-7.7.4.tgz#6d5762359fd34f4da1500e4cff9955b5299aaf59" + integrity sha1-bVdiNZ/TT02hUA5M/5lVtSmar1k= + dependencies: + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.6.0" + +"@babel/helper-define-map@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-define-map/download/@babel/helper-define-map-7.7.4.tgz#2841bf92eb8bd9c906851546fe6b9d45e162f176" + integrity sha1-KEG/kuuL2ckGhRVG/mudReFi8XY= dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/types" "^7.5.5" + "@babel/helper-function-name" "^7.7.4" + "@babel/types" "^7.7.4" lodash "^4.17.13" -"@babel/helper-explode-assignable-expression@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" - integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA== +"@babel/helper-explode-assignable-expression@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.7.4.tgz#fa700878e008d85dc51ba43e9fb835cddfe05c84" + integrity sha1-+nAIeOAI2F3FG6Q+n7g1zd/gXIQ= dependencies: - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" "@babel/helper-function-name@7.0.0-beta.44": version "7.0.0-beta.44" @@ -127,14 +135,14 @@ "@babel/template" "7.0.0-beta.44" "@babel/types" "7.0.0-beta.44" -"@babel/helper-function-name@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" - integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== +"@babel/helper-function-name@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.7.4.tgz?cache=0&sync_timestamp=1574465630791&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-function-name%2Fdownload%2F%40babel%2Fhelper-function-name-7.7.4.tgz#ab6e041e7135d436d8f0a3eca15de5b67a341a2e" + integrity sha1-q24EHnE11DbY8KPsoV3ltno0Gi4= dependencies: - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/helper-get-function-arity" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/types" "^7.7.4" "@babel/helper-get-function-arity@7.0.0-beta.44": version "7.0.0-beta.44" @@ -143,26 +151,26 @@ dependencies: "@babel/types" "7.0.0-beta.44" -"@babel/helper-get-function-arity@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" - integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== +"@babel/helper-get-function-arity@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.7.4.tgz#cb46348d2f8808e632f0ab048172130e636005f0" + integrity sha1-y0Y0jS+ICOYy8KsEgXITDmNgBfA= dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.7.4" -"@babel/helper-hoist-variables@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a" - integrity sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w== +"@babel/helper-hoist-variables@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.7.4.tgz?cache=0&sync_timestamp=1574466005056&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-hoist-variables%2Fdownload%2F%40babel%2Fhelper-hoist-variables-7.7.4.tgz#612384e3d823fdfaaf9fce31550fe5d4db0f3d12" + integrity sha1-YSOE49gj/fqvn84xVQ/l1NsPPRI= dependencies: - "@babel/types" "^7.4.4" + "@babel/types" "^7.7.4" -"@babel/helper-member-expression-to-functions@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz#1fb5b8ec4453a93c439ee9fe3aeea4a84b76b590" - integrity sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA== +"@babel/helper-member-expression-to-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.7.4.tgz#356438e2569df7321a8326644d4b790d2122cb74" + integrity sha1-NWQ44lad9zIagyZkTUt5DSEiy3Q= dependencies: - "@babel/types" "^7.5.5" + "@babel/types" "^7.7.4" "@babel/helper-module-imports@^7.0.0": version "7.0.0" @@ -171,58 +179,72 @@ dependencies: "@babel/types" "^7.0.0" -"@babel/helper-module-transforms@^7.4.4": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz#f84ff8a09038dcbca1fd4355661a500937165b4a" - integrity sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw== +"@babel/helper-module-imports@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.7.4.tgz#e5a92529f8888bf319a6376abfbd1cebc491ad91" + integrity sha1-5aklKfiIi/MZpjdqv70c68SRrZE= dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/template" "^7.4.4" - "@babel/types" "^7.5.5" + "@babel/types" "^7.7.4" + +"@babel/helper-module-transforms@^7.7.5": + version "7.7.5" + resolved "https://registry.npm.taobao.org/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.7.5.tgz#d044da7ffd91ec967db25cd6748f704b6b244835" + integrity sha1-0ETaf/2R7JZ9slzWdI9wS2skSDU= + dependencies: + "@babel/helper-module-imports" "^7.7.4" + "@babel/helper-simple-access" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/types" "^7.7.4" lodash "^4.17.13" -"@babel/helper-optimise-call-expression@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" - integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g== +"@babel/helper-optimise-call-expression@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.7.4.tgz?cache=0&sync_timestamp=1574465630779&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-optimise-call-expression%2Fdownload%2F%40babel%2Fhelper-optimise-call-expression-7.7.4.tgz#034af31370d2995242aa4df402c3b7794b2dcdf2" + integrity sha1-A0rzE3DSmVJCqk30AsO3eUstzfI= dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.7.4" "@babel/helper-plugin-utils@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== -"@babel/helper-remap-async-to-generator@^7.0.0-beta": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" - integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg== +"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4": + version "7.5.5" + resolved "https://registry.npm.taobao.org/@babel/helper-regex/download/@babel/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351" + integrity sha1-CqaCT3EAouDonBUnwjk2wVLKs1E= dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-wrap-function" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" + lodash "^4.17.13" -"@babel/helper-replace-supers@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz#f84ce43df031222d2bad068d2626cb5799c34bc2" - integrity sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg== +"@babel/helper-remap-async-to-generator@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.7.4.tgz#c68c2407350d9af0e061ed6726afb4fff16d0234" + integrity sha1-xowkBzUNmvDgYe1nJq+0//FtAjQ= dependencies: - "@babel/helper-member-expression-to-functions" "^7.5.5" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.5.5" - "@babel/types" "^7.5.5" + "@babel/helper-annotate-as-pure" "^7.7.4" + "@babel/helper-wrap-function" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" -"@babel/helper-simple-access@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" - integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w== +"@babel/helper-replace-supers@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.7.4.tgz?cache=0&sync_timestamp=1574465645820&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-replace-supers%2Fdownload%2F%40babel%2Fhelper-replace-supers-7.7.4.tgz#3c881a6a6a7571275a72d82e6107126ec9e2cdd2" + integrity sha1-PIgaamp1cSdactguYQcSbsnizdI= dependencies: - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/helper-member-expression-to-functions" "^7.7.4" + "@babel/helper-optimise-call-expression" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-simple-access@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-simple-access/download/@babel/helper-simple-access-7.7.4.tgz#a169a0adb1b5f418cfc19f22586b2ebf58a9a294" + integrity sha1-oWmgrbG19BjPwZ8iWGsuv1ipopQ= + dependencies: + "@babel/template" "^7.7.4" + "@babel/types" "^7.7.4" "@babel/helper-split-export-declaration@7.0.0-beta.44": version "7.0.0-beta.44" @@ -231,31 +253,31 @@ dependencies: "@babel/types" "7.0.0-beta.44" -"@babel/helper-split-export-declaration@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" - integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== +"@babel/helper-split-export-declaration@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.7.4.tgz#57292af60443c4a3622cf74040ddc28e68336fd8" + integrity sha1-Vykq9gRDxKNiLPdAQN3Cjmgzb9g= dependencies: - "@babel/types" "^7.4.4" + "@babel/types" "^7.7.4" -"@babel/helper-wrap-function@^7.1.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" - integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ== +"@babel/helper-wrap-function@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.7.4.tgz#37ab7fed5150e22d9d7266e830072c0cdd8baace" + integrity sha1-N6t/7VFQ4i2dcmboMAcsDN2Lqs4= dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.2.0" + "@babel/helper-function-name" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" -"@babel/helpers@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.6.2.tgz#681ffe489ea4dcc55f23ce469e58e59c1c045153" - integrity sha512-3/bAUL8zZxYs1cdX2ilEE0WobqbCmKWr/889lf2SS0PpDcpEIY8pb1CCyz0pEcX3pEb+MCbks1jIokz2xLtGTA== +"@babel/helpers@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helpers/download/@babel/helpers-7.7.4.tgz#62c215b9e6c712dadc15a9a0dcab76c92a940302" + integrity sha1-YsIVuebHEtrcFamg3Kt2ySqUAwI= dependencies: - "@babel/template" "^7.6.0" - "@babel/traverse" "^7.6.2" - "@babel/types" "^7.6.0" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" "@babel/highlight@7.0.0-beta.44": version "7.0.0-beta.44" @@ -275,232 +297,386 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.6.0", "@babel/parser@^7.6.3", "@babel/parser@^7.6.4": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.4.tgz#cb9b36a7482110282d5cb6dd424ec9262b473d81" - integrity sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A== +"@babel/parser@^7.0.0", "@babel/parser@^7.7.4", "@babel/parser@^7.7.7": + version "7.7.7" + resolved "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.7.7.tgz#1b886595419cf92d811316d5b715a53ff38b4937" + integrity sha1-G4hllUGc+S2BExbVtxWlP/OLSTc= -"@babel/plugin-external-helpers@^7.0.0-beta": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.2.0.tgz#7f4cb7dee651cd380d2034847d914288467a6be4" - integrity sha512-QFmtcCShFkyAsNtdCM3lJPmRe1iB+vPZymlB4LnDIKEBj2yKQLQKtoxXxJ8ePT5fwMl4QGg303p4mB0UsSI2/g== +"@babel/plugin-external-helpers@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-external-helpers/download/@babel/plugin-external-helpers-7.7.4.tgz#8aa7aa402f0e2ecb924611cbf30942a497dfd17e" + integrity sha1-iqeqQC8OLsuSRhHL8wlCpJff0X4= dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-proposal-class-properties@^7.0.0-beta": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.5.tgz#a974cfae1e37c3110e71f3c6a2e48b8e71958cd4" - integrity sha512-AF79FsnWFxjlaosgdi421vmYG6/jg79bVD0dpD44QdgobzHKuLZ6S3vl8la9qIeSwGi8i1fS0O1mfuDAAdo1/A== +"@babel/plugin-proposal-class-properties@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.7.4.tgz#2f964f0cb18b948450362742e33e15211e77c2ba" + integrity sha1-L5ZPDLGLlIRQNidC4z4VIR53wro= dependencies: - "@babel/helper-create-class-features-plugin" "^7.5.5" + "@babel/helper-create-class-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-proposal-object-rest-spread@^7.0.0-beta": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz#8ffccc8f3a6545e9f78988b6bf4fe881b88e8096" - integrity sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw== +"@babel/plugin-proposal-export-default-from@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-export-default-from/download/@babel/plugin-proposal-export-default-from-7.7.4.tgz#890de3c0c475374638292df31f6582160b54d639" + integrity sha1-iQ3jwMR1N0Y4KS3zH2WCFgtU1jk= dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/plugin-syntax-export-default-from" "^7.7.4" -"@babel/plugin-syntax-dynamic-import@^7.0.0-beta": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612" - integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-nullish-coalescing-operator/download/@babel/plugin-proposal-nullish-coalescing-operator-7.7.4.tgz?cache=0&sync_timestamp=1574466507005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-nullish-coalescing-operator%2Fdownload%2F%40babel%2Fplugin-proposal-nullish-coalescing-operator-7.7.4.tgz#7db302c83bc30caa89e38fee935635ef6bd11c28" + integrity sha1-fbMCyDvDDKqJ44/uk1Y172vRHCg= dependencies: "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.7.4" -"@babel/plugin-syntax-flow@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz#a765f061f803bc48f240c26f8747faf97c26bf7c" - integrity sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg== +"@babel/plugin-proposal-object-rest-spread@^7.0.0": + version "7.7.7" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.7.7.tgz?cache=0&sync_timestamp=1576716808008&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-object-rest-spread%2Fdownload%2F%40babel%2Fplugin-proposal-object-rest-spread-7.7.7.tgz#9f27075004ab99be08c5c1bd653a2985813cb370" + integrity sha1-nycHUASrmb4IxcG9ZTophYE8s3A= dependencies: "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.7.4" -"@babel/plugin-syntax-jsx@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7" - integrity sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw== +"@babel/plugin-proposal-optional-catch-binding@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.7.4.tgz?cache=0&sync_timestamp=1574466000999&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-optional-catch-binding%2Fdownload%2F%40babel%2Fplugin-proposal-optional-catch-binding-7.7.4.tgz#ec21e8aeb09ec6711bc0a39ca49520abee1de379" + integrity sha1-7CHorrCexnEbwKOcpJUgq+4d43k= dependencies: "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" -"@babel/plugin-syntax-object-rest-spread@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" - integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== +"@babel/plugin-proposal-optional-chaining@^7.0.0": + version "7.7.5" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-optional-chaining/download/@babel/plugin-proposal-optional-chaining-7.7.5.tgz?cache=0&sync_timestamp=1575638465678&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-optional-chaining%2Fdownload%2F%40babel%2Fplugin-proposal-optional-chaining-7.7.5.tgz#f0835f044cef85b31071a924010a2a390add11d4" + integrity sha1-8INfBEzvhbMQcakkAQoqOQrdEdQ= dependencies: "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-optional-chaining" "^7.7.4" -"@babel/plugin-transform-arrow-functions@^7.0.0-beta": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" - integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg== +"@babel/plugin-syntax-class-properties@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-class-properties/download/@babel/plugin-syntax-class-properties-7.7.4.tgz#6048c129ea908a432a1ff85f1dc794dc62ddaa5e" + integrity sha1-YEjBKeqQikMqH/hfHceU3GLdql4= dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-block-scoping@^7.0.0-beta": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.3.tgz#6e854e51fbbaa84351b15d4ddafe342f3a5d542a" - integrity sha512-7hvrg75dubcO3ZI2rjYTzUrEuh1E9IyDEhhB6qfcooxhDA33xx2MasuLVgdxzcP6R/lipAC6n9ub9maNW6RKdw== +"@babel/plugin-syntax-dynamic-import@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-dynamic-import/download/@babel/plugin-syntax-dynamic-import-7.7.4.tgz#29ca3b4415abfe4a5ec381e903862ad1a54c3aec" + integrity sha1-Kco7RBWr/kpew4HpA4Yq0aVMOuw= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-export-default-from@^7.0.0", "@babel/plugin-syntax-export-default-from@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-export-default-from/download/@babel/plugin-syntax-export-default-from-7.7.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-export-default-from%2Fdownload%2F%40babel%2Fplugin-syntax-export-default-from-7.7.4.tgz#897f05808298060b52873fa804ff853540790ea1" + integrity sha1-iX8FgIKYBgtShz+oBP+FNUB5DqE= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-flow/download/@babel/plugin-syntax-flow-7.7.4.tgz#6d91b59e1a0e4c17f36af2e10dd64ef220919d7b" + integrity sha1-bZG1nhoOTBfzavLhDdZO8iCRnXs= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-jsx/download/@babel/plugin-syntax-jsx-7.7.4.tgz?cache=0&sync_timestamp=1574466421110&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-jsx%2Fdownload%2F%40babel%2Fplugin-syntax-jsx-7.7.4.tgz#dab2b56a36fb6c3c222a1fbc71f7bf97f327a9ec" + integrity sha1-2rK1ajb7bDwiKh+8cfe/l/Mnqew= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-nullish-coalescing-operator/download/@babel/plugin-syntax-nullish-coalescing-operator-7.7.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-nullish-coalescing-operator%2Fdownload%2F%40babel%2Fplugin-syntax-nullish-coalescing-operator-7.7.4.tgz#e53b751d0c3061b1ba3089242524b65a7a9da12b" + integrity sha1-5Tt1HQwwYbG6MIkkJSS2WnqdoSs= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.7.4.tgz#47cf220d19d6d0d7b154304701f468fc1cc6ff46" + integrity sha1-R88iDRnW0NexVDBHAfRo/BzG/0Y= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.7.4.tgz#a3e38f59f4b6233867b4a92dcb0ee05b2c334aa6" + integrity sha1-o+OPWfS2IzhntKktyw7gWywzSqY= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-optional-chaining@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-chaining/download/@babel/plugin-syntax-optional-chaining-7.7.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-optional-chaining%2Fdownload%2F%40babel%2Fplugin-syntax-optional-chaining-7.7.4.tgz#c91fdde6de85d2eb8906daea7b21944c3610c901" + integrity sha1-yR/d5t6F0uuJBtrqeyGUTDYQyQE= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-typescript@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-typescript/download/@babel/plugin-syntax-typescript-7.7.4.tgz#5d037ffa10f3b25a16f32570ebbe7a8c2efa304b" + integrity sha1-XQN/+hDzsloW8yVw6756jC76MEs= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-arrow-functions@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.7.4.tgz?cache=0&sync_timestamp=1574465864396&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-arrow-functions%2Fdownload%2F%40babel%2Fplugin-transform-arrow-functions-7.7.4.tgz#76309bd578addd8aee3b379d809c802305a98a12" + integrity sha1-djCb1Xit3YruOzedgJyAIwWpihI= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-async-to-generator@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.7.4.tgz?cache=0&sync_timestamp=1574465889738&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-async-to-generator%2Fdownload%2F%40babel%2Fplugin-transform-async-to-generator-7.7.4.tgz#694cbeae6d613a34ef0292713fa42fb45c4470ba" + integrity sha1-aUy+rm1hOjTvApJxP6QvtFxEcLo= + dependencies: + "@babel/helper-module-imports" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.7.4" + +"@babel/plugin-transform-block-scoped-functions@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.7.4.tgz#d0d9d5c269c78eaea76227ace214b8d01e4d837b" + integrity sha1-0NnVwmnHjq6nYies4hS40B5Ng3s= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-block-scoping@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.7.4.tgz#200aad0dcd6bb80372f94d9e628ea062c58bf224" + integrity sha1-IAqtDc1ruANy+U2eYo6gYsWL8iQ= dependencies: "@babel/helper-plugin-utils" "^7.0.0" lodash "^4.17.13" -"@babel/plugin-transform-classes@^7.0.0-beta": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz#d094299d9bd680a14a2a0edae38305ad60fb4de9" - integrity sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg== +"@babel/plugin-transform-classes@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.7.4.tgz#c92c14be0a1399e15df72667067a8f510c9400ec" + integrity sha1-ySwUvgoTmeFd9yZnBnqPUQyUAOw= dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-define-map" "^7.5.5" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-annotate-as-pure" "^7.7.4" + "@babel/helper-define-map" "^7.7.4" + "@babel/helper-function-name" "^7.7.4" + "@babel/helper-optimise-call-expression" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.5.5" - "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/helper-replace-supers" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.0.0-beta": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" - integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA== +"@babel/plugin-transform-computed-properties@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.7.4.tgz#e856c1628d3238ffe12d668eb42559f79a81910d" + integrity sha1-6FbBYo0yOP/hLWaOtCVZ95qBkQ0= dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-destructuring@^7.0.0-beta": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz#44bbe08b57f4480094d57d9ffbcd96d309075ba6" - integrity sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ== +"@babel/plugin-transform-destructuring@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.7.4.tgz#2b713729e5054a1135097b6a67da1b6fe8789267" + integrity sha1-K3E3KeUFShE1CXtqZ9obb+h4kmc= dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-exponentiation-operator@^7.0.0-beta": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" - integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A== +"@babel/plugin-transform-exponentiation-operator@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.7.4.tgz#dd30c0191e3a1ba19bcc7e389bdfddc0729d5db9" + integrity sha1-3TDAGR46G6GbzH44m9/dwHKdXbk= dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-flow-strip-types@^7.0.0-beta": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.6.3.tgz#8110f153e7360cfd5996eee68706cfad92d85256" - integrity sha512-l0ETkyEofkqFJ9LS6HChNIKtVJw2ylKbhYMlJ5C6df+ldxxaLIyXY4yOdDQQspfFpV8/vDiaWoJlvflstlYNxg== +"@babel/plugin-transform-flow-strip-types@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-flow-strip-types/download/@babel/plugin-transform-flow-strip-types-7.7.4.tgz?cache=0&sync_timestamp=1574465996775&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-flow-strip-types%2Fdownload%2F%40babel%2Fplugin-transform-flow-strip-types-7.7.4.tgz#cc73f85944782df1d77d80977bc097920a8bf31a" + integrity sha1-zHP4WUR4LfHXfYCXe8CXkgqL8xo= dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.2.0" + "@babel/plugin-syntax-flow" "^7.7.4" -"@babel/plugin-transform-for-of@^7.0.0-beta": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556" - integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ== +"@babel/plugin-transform-for-of@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.7.4.tgz#248800e3a5e507b1f103d8b4ca998e77c63932bc" + integrity sha1-JIgA46XlB7HxA9i0ypmOd8Y5Mrw= dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-function-name@^7.0.0-beta": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad" - integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA== +"@babel/plugin-transform-function-name@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.7.4.tgz#75a6d3303d50db638ff8b5385d12451c865025b1" + integrity sha1-dabTMD1Q22OP+LU4XRJFHIZQJbE= dependencies: - "@babel/helper-function-name" "^7.1.0" + "@babel/helper-function-name" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-literals@^7.0.0-beta": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" - integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg== +"@babel/plugin-transform-literals@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.7.4.tgz#27fe87d2b5017a2a5a34d1c41a6b9f6a6262643e" + integrity sha1-J/6H0rUBeipaNNHEGmufamJiZD4= dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-modules-commonjs@^7.0.0-beta": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz#39dfe957de4420445f1fcf88b68a2e4aa4515486" - integrity sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g== +"@babel/plugin-transform-member-expression-literals@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-member-expression-literals/download/@babel/plugin-transform-member-expression-literals-7.7.4.tgz#aee127f2f3339fc34ce5e3055d7ffbf7aa26f19a" + integrity sha1-ruEn8vMzn8NM5eMFXX/796om8Zo= dependencies: - "@babel/helper-module-transforms" "^7.4.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" + +"@babel/plugin-transform-modules-commonjs@^7.0.0": + version "7.7.5" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.7.5.tgz#1d27f5eb0bcf7543e774950e5b2fa782e637b345" + integrity sha1-HSf16wvPdUPndJUOWy+nguY3s0U= + dependencies: + "@babel/helper-module-transforms" "^7.7.5" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-simple-access" "^7.7.4" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-object-assign@^7.0.0-beta": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.2.0.tgz#6fdeea42be17040f119e38e23ea0f49f31968bde" - integrity sha512-nmE55cZBPFgUktbF2OuoZgPRadfxosLOpSgzEPYotKSls9J4pEPcembi8r78RU37Rph6UApCpNmsQA4QMWK9Ng== +"@babel/plugin-transform-object-assign@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-object-assign/download/@babel/plugin-transform-object-assign-7.7.4.tgz#a31b70c434a00a078b2d4d10dbd59992fa70afca" + integrity sha1-oxtwxDSgCgeLLU0Q29WZkvpwr8o= dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-parameters@^7.0.0-beta": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16" - integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw== +"@babel/plugin-transform-object-super@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.7.4.tgz#48488937a2d586c0148451bf51af9d7dda567262" + integrity sha1-SEiJN6LVhsAUhFG/Ua+dfdpWcmI= dependencies: - "@babel/helper-call-delegate" "^7.4.4" - "@babel/helper-get-function-arity" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.7.4" -"@babel/plugin-transform-react-display-name@^7.0.0-beta": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz#ebfaed87834ce8dc4279609a4f0c324c156e3eb0" - integrity sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A== +"@babel/plugin-transform-parameters@^7.0.0": + version "7.7.7" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.7.7.tgz#7a884b2460164dc5f194f668332736584c760007" + integrity sha1-eohLJGAWTcXxlPZoMyc2WEx2AAc= dependencies: + "@babel/helper-call-delegate" "^7.7.4" + "@babel/helper-get-function-arity" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-react-jsx-source@^7.0.0-beta": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.5.0.tgz#583b10c49cf057e237085bcbd8cc960bd83bd96b" - integrity sha512-58Q+Jsy4IDCZx7kqEZuSDdam/1oW8OdDX8f+Loo6xyxdfg1yF0GE2XNJQSTZCaMol93+FBzpWiPEwtbMloAcPg== +"@babel/plugin-transform-property-literals@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-property-literals/download/@babel/plugin-transform-property-literals-7.7.4.tgz#2388d6505ef89b266103f450f9167e6bd73f98c2" + integrity sha1-I4jWUF74myZhA/RQ+RZ+a9c/mMI= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-react-display-name@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-react-display-name/download/@babel/plugin-transform-react-display-name-7.7.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-react-display-name%2Fdownload%2F%40babel%2Fplugin-transform-react-display-name-7.7.4.tgz#9f2b80b14ebc97eef4a9b29b612c58ed9c0d10dd" + integrity sha1-nyuAsU68l+70qbKbYSxY7ZwNEN0= dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" -"@babel/plugin-transform-react-jsx@^7.0.0-beta": - version "7.3.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz#f2cab99026631c767e2745a5368b331cfe8f5290" - integrity sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg== +"@babel/plugin-transform-react-jsx-source@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-react-jsx-source/download/@babel/plugin-transform-react-jsx-source-7.7.4.tgz#8994b1bf6014b133f5a46d3b7d1ee5f5e3e72c10" + integrity sha1-iZSxv2AUsTP1pG07fR7l9ePnLBA= dependencies: - "@babel/helper-builder-react-jsx" "^7.3.0" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" + "@babel/plugin-syntax-jsx" "^7.7.4" -"@babel/plugin-transform-regenerator@^7.0.0-beta": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f" - integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA== +"@babel/plugin-transform-react-jsx@^7.0.0": + version "7.7.7" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-react-jsx/download/@babel/plugin-transform-react-jsx-7.7.7.tgz#5cbaa7445b4a09f774029f3cc7bb448ff3122a5d" + integrity sha1-XLqnRFtKCfd0Ap88x7tEj/MSKl0= + dependencies: + "@babel/helper-builder-react-jsx" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.7.4" + +"@babel/plugin-transform-regenerator@^7.0.0": + version "7.7.5" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.7.5.tgz#3a8757ee1a2780f390e89f246065ecf59c26fce9" + integrity sha1-OodX7hongPOQ6J8kYGXs9Zwm/Ok= dependencies: regenerator-transform "^0.14.0" -"@babel/plugin-transform-shorthand-properties@^7.0.0-beta": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" - integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg== +"@babel/plugin-transform-runtime@^7.0.0": + version "7.7.6" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.7.6.tgz#4f2b548c88922fb98ec1c242afd4733ee3e12f61" + integrity sha1-TytUjIiSL7mOwcJCr9RzPuPhL2E= + dependencies: + "@babel/helper-module-imports" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + resolve "^1.8.1" + semver "^5.5.1" + +"@babel/plugin-transform-shorthand-properties@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.7.4.tgz#74a0a9b2f6d67a684c6fbfd5f0458eb7ba99891e" + integrity sha1-dKCpsvbWemhMb7/V8EWOt7qZiR4= dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-spread@^7.0.0-beta": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz#fc77cf798b24b10c46e1b51b1b88c2bf661bb8dd" - integrity sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg== +"@babel/plugin-transform-spread@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.7.4.tgz#aa673b356fe6b7e70d69b6e33a17fef641008578" + integrity sha1-qmc7NW/mt+cNabbjOhf+9kEAhXg= dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-template-literals@^7.0.0-beta": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0" - integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g== +"@babel/plugin-transform-sticky-regex@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.7.4.tgz#ffb68c05090c30732076b1285dc1401b404a123c" + integrity sha1-/7aMBQkMMHMgdrEoXcFAG0BKEjw= dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" -"@babel/register@^7.0.0-beta": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.6.2.tgz#25765a922202cb06f8bdac5a3b1e70cd6bf3dd45" - integrity sha512-xgZk2LRZvt6i2SAUWxc7ellk4+OYRgS3Zpsnr13nMS1Qo25w21Uu8o6vTOAqNaxiqrnv30KTYzh9YWY2k21CeQ== +"@babel/plugin-transform-template-literals@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.7.4.tgz#1eb6411736dd3fe87dbd20cc6668e5121c17d604" + integrity sha1-HrZBFzbdP+h9vSDMZmjlEhwX1gQ= + dependencies: + "@babel/helper-annotate-as-pure" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-typescript@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-typescript/download/@babel/plugin-transform-typescript-7.7.4.tgz#2974fd05f4e85c695acaf497f432342de9fc0636" + integrity sha1-KXT9BfToXGlayvSX9DI0Len8BjY= + dependencies: + "@babel/helper-create-class-features-plugin" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-typescript" "^7.7.4" + +"@babel/plugin-transform-unicode-regex@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.7.4.tgz?cache=0&sync_timestamp=1574465997106&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-unicode-regex%2Fdownload%2F%40babel%2Fplugin-transform-unicode-regex-7.7.4.tgz#a3c0f65b117c4c81c5b6484f2a5e7b95346b83ae" + integrity sha1-o8D2WxF8TIHFtkhPKl57lTRrg64= + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/register@^7.0.0": + version "7.7.7" + resolved "https://registry.npm.taobao.org/@babel/register/download/@babel/register-7.7.7.tgz#46910c4d1926b9c6096421b23d1f9e159c1dcee1" + integrity sha1-RpEMTRkmucYJZCGyPR+eFZwdzuE= dependencies: find-cache-dir "^2.0.0" lodash "^4.17.13" - mkdirp "^0.5.1" + make-dir "^2.1.0" pirates "^4.0.0" - source-map-support "^0.5.9" + source-map-support "^0.5.16" + +"@babel/runtime@^7.0.0": + version "7.7.7" + resolved "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.7.7.tgz#194769ca8d6d7790ec23605af9ee3e42a0aa79cf" + integrity sha1-GUdpyo1td5DsI2Ba+e4+QqCqec8= + dependencies: + regenerator-runtime "^0.13.2" "@babel/runtime@^7.4.2": version "7.6.3" @@ -519,14 +695,14 @@ babylon "7.0.0-beta.44" lodash "^4.2.0" -"@babel/template@^7.0.0-beta", "@babel/template@^7.1.0", "@babel/template@^7.4.4", "@babel/template@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6" - integrity sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ== +"@babel/template@^7.0.0", "@babel/template@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.7.4.tgz?cache=0&sync_timestamp=1574465630781&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftemplate%2Fdownload%2F%40babel%2Ftemplate-7.7.4.tgz#428a7d9eecffe27deac0a98e23bf8e3675d2a77b" + integrity sha1-Qop9nuz/4n3qwKmOI7+ONnXSp3s= dependencies: "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.6.0" - "@babel/types" "^7.6.0" + "@babel/parser" "^7.7.4" + "@babel/types" "^7.7.4" "@babel/traverse@7.0.0-beta.44": version "7.0.0-beta.44" @@ -544,17 +720,17 @@ invariant "^2.2.0" lodash "^4.2.0" -"@babel/traverse@^7.0.0-beta", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5", "@babel/traverse@^7.6.2", "@babel/traverse@^7.6.3": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.3.tgz#66d7dba146b086703c0fb10dd588b7364cec47f9" - integrity sha512-unn7P4LGsijIxaAJo/wpoU11zN+2IaClkQAxcJWBNCMS6cmVh802IyLHNkAjQ0iYnRS3nnxk5O3fuXW28IMxTw== +"@babel/traverse@^7.0.0", "@babel/traverse@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.7.4.tgz?cache=0&sync_timestamp=1574465640801&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.7.4.tgz#9c1e7c60fb679fe4fcfaa42500833333c2058558" + integrity sha1-nB58YPtnn+T8+qQlAIMzM8IFhVg= dependencies: "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.6.3" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/parser" "^7.6.3" - "@babel/types" "^7.6.3" + "@babel/generator" "^7.7.4" + "@babel/helper-function-name" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" + "@babel/parser" "^7.7.4" + "@babel/types" "^7.7.4" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.13" @@ -568,7 +744,7 @@ lodash "^4.2.0" to-fast-properties "^2.0.0" -"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.6.0", "@babel/types@^7.6.3": +"@babel/types@^7.0.0": version "7.6.3" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.3.tgz#3f07d96f854f98e2fbd45c64b0cb942d11e8ba09" integrity sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA== @@ -577,6 +753,15 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" +"@babel/types@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.7.4.tgz?cache=0&sync_timestamp=1574465636802&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193" + integrity sha1-UWVw1TnkTd8wjAdWnCWP+U/ekZM= + dependencies: + esutils "^2.0.2" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -590,22 +775,62 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== +"@react-native-community/cli@^1.2.1": + version "1.12.0" + resolved "https://registry.npm.taobao.org/@react-native-community/cli/download/@react-native-community/cli-1.12.0.tgz?cache=0&sync_timestamp=1574167126291&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40react-native-community%2Fcli%2Fdownload%2F%40react-native-community%2Fcli-1.12.0.tgz#f4cbc2204af63a87d5736d2fa6a018c1fd5efd44" + integrity sha1-9MvCIEr2OofVc20vpqAYwf1e/UQ= + dependencies: + chalk "^1.1.1" + commander "^2.19.0" + compression "^1.7.1" + connect "^3.6.5" + denodeify "^1.2.1" + envinfo "^5.7.0" + errorhandler "^1.5.0" + escape-string-regexp "^1.0.5" + execa "^1.0.0" + fs-extra "^7.0.1" + glob "^7.1.1" + graceful-fs "^4.1.3" + inquirer "^3.0.6" + lodash "^4.17.5" + metro "^0.51.0" + metro-config "^0.51.0" + metro-core "^0.51.0" + metro-memory-fs "^0.51.0" + metro-react-native-babel-transformer "^0.51.0" + mime "^1.3.4" + minimist "^1.2.0" + mkdirp "^0.5.1" + morgan "^1.9.0" + node-fetch "^2.2.0" + node-notifier "^5.2.1" + opn "^3.0.2" + plist "^3.0.0" + semver "^5.0.3" + serve-static "^1.13.1" + shell-quote "1.6.1" + slash "^2.0.0" + ws "^1.1.0" + xcode "^2.0.0" + xmldoc "^0.4.0" + "@sindresorhus/is@^0.7.0": version "0.7.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== -"@tarojs/taro@1.3.29": - version "1.3.29" - resolved "https://registry.yarnpkg.com/@tarojs/taro/-/taro-1.3.29.tgz#20b28f577f72866a1b0470625617231633c13eae" - integrity sha512-BhgbaWZWrs0rvz+uu1mHKnqN4CPzlQd4J00Suk0vbIgP4RSDyJplL6sOj/ZjHeGYcEDOIYpO5dopVfuXJrmiBQ== +"@tarojs/taro@2.0.0-beta.13": + version "2.0.0-beta.13" + resolved "https://registry.npm.taobao.org/@tarojs/taro/download/@tarojs/taro-2.0.0-beta.13.tgz?cache=0&sync_timestamp=1577772870840&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40tarojs%2Ftaro%2Fdownload%2F%40tarojs%2Ftaro-2.0.0-beta.13.tgz#6537b4263a27641fa51e8f98673f9ea48919af01" + integrity sha1-ZTe0JjonZB+lHo+YZz+epIkZrwE= dependencies: - "@tarojs/utils" "1.3.29" + "@tarojs/utils" "2.0.0-beta.13" -"@tarojs/taroize@1.3.29": - version "1.3.29" - resolved "https://registry.yarnpkg.com/@tarojs/taroize/-/taroize-1.3.29.tgz#1ba0cae2afb4415b8c40f095e605b4480a12d012" - integrity sha512-OLcjFFuxN+utSrTfbNX/V+g2rDV+Up+CxcWpz/DcdUpuG7NVqZgotHE1KEMBjmKJJ+DSUa8HBpI82mDo6CqQ1w== +"@tarojs/taroize@2.0.0-beta.13": + version "2.0.0-beta.13" + resolved "https://registry.npm.taobao.org/@tarojs/taroize/download/@tarojs/taroize-2.0.0-beta.13.tgz#c50b596bb9c6907ed4aede917adc6eb208118dfd" + integrity sha1-xQtZa7nGkH7Urt6RetxusggRjf0= dependencies: "@babel/code-frame" "^7.0.0" babel-core "^6.26.3" @@ -619,10 +844,10 @@ lodash "^4.17.5" typescript "^3.0.1" -"@tarojs/transformer-wx@1.3.29": - version "1.3.29" - resolved "https://registry.yarnpkg.com/@tarojs/transformer-wx/-/transformer-wx-1.3.29.tgz#51ed82a02e822ad9f906420fb62a813046a21042" - integrity sha512-dxO8xhE8GbxjtRWBxw4ro3bXEeVm0acSCKduGQzjJaXHM+eBP/i3w+bxWh0sXvexDdYXMYdIXxGXcRSSPNIxGQ== +"@tarojs/transformer-wx@2.0.0-beta.13": + version "2.0.0-beta.13" + resolved "https://registry.npm.taobao.org/@tarojs/transformer-wx/download/@tarojs/transformer-wx-2.0.0-beta.13.tgz#04937cf1686118c76712e67de94d34614c63c58f" + integrity sha1-BJN88WhhGMdnEuZ96U00YUxjxY8= dependencies: "@babel/code-frame" "^7.0.0-beta.44" babel-core "^6.26.3" @@ -632,6 +857,7 @@ babel-helper-remove-or-void "^0.4.3" babel-plugin-danger-remove-unused-import "^1.1.1" babel-plugin-minify-dead-code "^1.3.2" + babel-plugin-preval "^1.6.4" babel-plugin-syntax-dynamic-import "^6.18.0" babel-plugin-transform-class-properties "^6.24.1" babel-plugin-transform-define "^1.3.0" @@ -643,16 +869,16 @@ babel-types "^6.26.0" eslint "5.16.0" eslint-plugin-react "7.10.0" - eslint-plugin-taro "1.3.29" + eslint-plugin-taro "2.0.0-beta.13" html "^1.0.0" lodash "^4.17.5" prettier "^1.14.2" typescript "^3.2.2" -"@tarojs/utils@1.3.29": - version "1.3.29" - resolved "https://registry.yarnpkg.com/@tarojs/utils/-/utils-1.3.29.tgz#3f473a470ce64241985725b35052c1c27f5052df" - integrity sha512-mdyUvbDIEuQ6ZyVOp24F3my3w8x7R+um/uDLO/iqpYcczoE9JSNdFJPvVf6BpCI3CcRxYaDYZ6pCTWGuGvAmOQ== +"@tarojs/utils@2.0.0-beta.13": + version "2.0.0-beta.13" + resolved "https://registry.npm.taobao.org/@tarojs/utils/download/@tarojs/utils-2.0.0-beta.13.tgz?cache=0&sync_timestamp=1577772253852&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40tarojs%2Futils%2Fdownload%2F%40tarojs%2Futils-2.0.0-beta.13.tgz#a3b9b4a36ab71ac4e2a3fddd96f4fb006862ea62" + integrity sha1-o7m0o2q3GsTio/3dlvT7AGhi6mI= "@types/autoprefixer@^9.1.1": version "9.6.1" @@ -790,6 +1016,19 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.0.tgz#537c61a1df699a8331c79dab2ccc2c8799873c66" integrity sha512-wuJwN2KV4tIRz1bu9vq5kSPasJ8IsEjZaP1ZR7KlmdUZvGF/rXy8DmXOVwUD0kAtvtJ7aqMKPqUXC0NUTDbrDg== +"@types/prop-types@*": + version "15.7.3" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" + integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== + +"@types/react@^16.9.14": + version "16.9.16" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.16.tgz#4f12515707148b1f53a8eaa4341dae5dfefb066d" + integrity sha512-dQ3wlehuBbYlfvRXfF5G+5TbZF3xqgkikK7DWAsQXe2KnzV+kjD4W2ea+ThCrKASZn9h98bjjPzoTYzfRqyBkw== + dependencies: + "@types/prop-types" "*" + csstype "^2.2.0" + "@types/request@^2.48.1": version "2.48.3" resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.3.tgz#970b8ed2317568c390361d29c555a95e74bd6135" @@ -808,6 +1047,11 @@ "@types/glob" "*" "@types/node" "*" +"@types/tapable@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.4.tgz#b4ffc7dc97b498c969b360a41eee247f82616370" + integrity sha512-78AdXtlhpCHT0K3EytMpn4JNxaf5tbqbLcbIRoQIHzpTIyjpxLQKRoxU55ujBXAtg3Nl2h/XWvfDa9dsMOd0pQ== + "@types/tough-cookie@*": version "2.3.5" resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-2.3.5.tgz#9da44ed75571999b65c37b60c9b2b88db54c585d" @@ -950,13 +1194,6 @@ ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== -ansi-escapes@^4.2.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.0.tgz#a4ce2b33d6b214b7950d8595c212f12ac9cc569d" - integrity sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg== - dependencies: - type-fest "^0.8.1" - ansi-gray@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" @@ -981,16 +1218,11 @@ ansi-regex@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= -ansi-regex@^4.1.0: +ansi-regex@^4.0.0, ansi-regex@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -1040,11 +1272,6 @@ aproba@^1.0.3: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -arch@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.1.tgz#8f5c2731aa35a30929221bb0640eed65175ec84e" - integrity sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg== - archive-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/archive-type/-/archive-type-4.0.0.tgz#f92e72233056dfc6969472749c267bdb046b1d70" @@ -1289,7 +1516,7 @@ babel-core@6.10.4: slash "^1.0.0" source-map "^0.5.0" -babel-core@^6.0.0, babel-core@^6.24.1, babel-core@^6.26.0, babel-core@^6.26.3, babel-core@^6.7.2: +babel-core@^6.0.0, babel-core@^6.26.0, babel-core@^6.26.3: version "6.26.3" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== @@ -1460,7 +1687,7 @@ babel-helper-regex@^6.24.1: babel-types "^6.26.0" lodash "^4.17.4" -babel-helper-remap-async-to-generator@^6.16.0, babel-helper-remap-async-to-generator@^6.24.1: +babel-helper-remap-async-to-generator@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs= @@ -1511,7 +1738,7 @@ babel-messages@^6.23.0, babel-messages@^6.8.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-check-es2015-constants@^6.22.0, babel-plugin-check-es2015-constants@^6.5.0, babel-plugin-check-es2015-constants@^6.8.0: +babel-plugin-check-es2015-constants@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= @@ -1530,13 +1757,6 @@ babel-plugin-dynamic-import-node@^2.3.0: dependencies: object.assign "^4.1.0" -babel-plugin-external-helpers@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-external-helpers/-/babel-plugin-external-helpers-6.22.0.tgz#2285f48b02bd5dede85175caf8c62e86adccefa1" - integrity sha1-IoX0iwK9Xe3oUXXK+MYuhq3M76E= - dependencies: - babel-runtime "^6.22.0" - babel-plugin-istanbul@^4.1.6: version "4.1.6" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" @@ -1568,7 +1788,7 @@ babel-plugin-minify-dead-code@^1.3.2: dependencies: babel-core "6.10.4" -babel-plugin-preval@1.6.4: +babel-plugin-preval@1.6.4, babel-plugin-preval@^1.6.4: version "1.6.4" resolved "https://registry.yarnpkg.com/babel-plugin-preval/-/babel-plugin-preval-1.6.4.tgz#96febe8172b3ca6c3d03ed96eeb0382ba4b18056" integrity sha512-XuNaiZ76CsdWialH2co05YRra9NlsyriTUbJ+56MAcWN9v33drTm5ovBRFuEKVj1dNRhEdBjeEyYtkkaRE8drw== @@ -1578,13 +1798,6 @@ babel-plugin-preval@1.6.4: babylon "^6.18.0" require-from-string "^2.0.1" -babel-plugin-react-transform@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-react-transform/-/babel-plugin-react-transform-3.0.0.tgz#402f25137b7bb66e9b54ead75557dfbc7ecaaa74" - integrity sha512-4vJGddwPiHAOgshzZdGwYy4zRjjIr5SMY7gkOaCyIASjgpcsyLTlZNuB5rHOFoaTvGlhfo8/g4pobXPyHqm/3w== - dependencies: - lodash "^4.6.1" - babel-plugin-remove-dead-code@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/babel-plugin-remove-dead-code/-/babel-plugin-remove-dead-code-1.3.2.tgz#e1a2cd9595bb2f767291f35cab4ec9b467ee62c6" @@ -1592,7 +1805,7 @@ babel-plugin-remove-dead-code@^1.3.2: dependencies: babel-core "6.10.4" -babel-plugin-syntax-async-functions@^6.5.0, babel-plugin-syntax-async-functions@^6.8.0: +babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= @@ -1607,7 +1820,7 @@ babel-plugin-syntax-class-constructor-call@^6.18.0: resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416" integrity sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY= -babel-plugin-syntax-class-properties@^6.5.0, babel-plugin-syntax-class-properties@^6.8.0: +babel-plugin-syntax-class-properties@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" integrity sha1-1+sjt5oxf4VDlixQW4J8fWysJ94= @@ -1637,7 +1850,7 @@ babel-plugin-syntax-export-extensions@^6.8.0: resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" integrity sha1-cKFITw+QiaToStRLrDU8lbmxJyE= -babel-plugin-syntax-flow@^6.18.0, babel-plugin-syntax-flow@^6.5.0, babel-plugin-syntax-flow@^6.8.0: +babel-plugin-syntax-flow@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" integrity sha1-TDqyCiryaqIM0lmVw5jE63AxDI0= @@ -1647,7 +1860,7 @@ babel-plugin-syntax-function-bind@^6.8.0: resolved "https://registry.yarnpkg.com/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz#48c495f177bdf31a981e732f55adc0bdd2601f46" integrity sha1-SMSV8Xe98xqYHnMvVa3AvdJgH0Y= -babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.5.0, babel-plugin-syntax-jsx@^6.8.0: +babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= @@ -1657,11 +1870,16 @@ babel-plugin-syntax-object-rest-spread@^6.13.0, babel-plugin-syntax-object-rest- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= -babel-plugin-syntax-trailing-function-commas@^6.20.0, babel-plugin-syntax-trailing-function-commas@^6.22.0, babel-plugin-syntax-trailing-function-commas@^6.5.0, babel-plugin-syntax-trailing-function-commas@^6.8.0: +babel-plugin-syntax-trailing-function-commas@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= +babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.npm.taobao.org/babel-plugin-syntax-trailing-function-commas/download/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf" + integrity sha1-qiE8FDXiv/62/KhCKH71NK0F1c8= + babel-plugin-transform-async-generator-functions@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" @@ -1671,15 +1889,6 @@ babel-plugin-transform-async-generator-functions@^6.24.1: babel-plugin-syntax-async-generators "^6.5.0" babel-runtime "^6.22.0" -babel-plugin-transform-async-to-generator@6.16.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.16.0.tgz#19ec36cb1486b59f9f468adfa42ce13908ca2999" - integrity sha1-Gew2yxSGtZ+fRorfpCzhOQjKKZk= - dependencies: - babel-helper-remap-async-to-generator "^6.16.0" - babel-plugin-syntax-async-functions "^6.8.0" - babel-runtime "^6.0.0" - babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async-to-generator@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" @@ -1698,7 +1907,7 @@ babel-plugin-transform-class-constructor-call@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-plugin-transform-class-properties@^6.18.0, babel-plugin-transform-class-properties@^6.24.1, babel-plugin-transform-class-properties@^6.5.0, babel-plugin-transform-class-properties@^6.8.0: +babel-plugin-transform-class-properties@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" integrity sha1-anl2PqYdM9NvN7YRqp3vgagbRqw= @@ -1744,21 +1953,21 @@ babel-plugin-transform-do-expressions@^6.22.0: babel-plugin-syntax-do-expressions "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-es2015-arrow-functions@^6.22.0, babel-plugin-transform-es2015-arrow-functions@^6.5.0, babel-plugin-transform-es2015-arrow-functions@^6.8.0: +babel-plugin-transform-es2015-arrow-functions@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-block-scoped-functions@^6.22.0, babel-plugin-transform-es2015-block-scoped-functions@^6.8.0: +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE= dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-block-scoping@^6.23.0, babel-plugin-transform-es2015-block-scoping@^6.5.0, babel-plugin-transform-es2015-block-scoping@^6.8.0: +babel-plugin-transform-es2015-block-scoping@^6.23.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= @@ -1769,7 +1978,7 @@ babel-plugin-transform-es2015-block-scoping@^6.23.0, babel-plugin-transform-es20 babel-types "^6.26.0" lodash "^4.17.4" -babel-plugin-transform-es2015-classes@^6.23.0, babel-plugin-transform-es2015-classes@^6.5.0, babel-plugin-transform-es2015-classes@^6.8.0: +babel-plugin-transform-es2015-classes@^6.23.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= @@ -1784,7 +1993,7 @@ babel-plugin-transform-es2015-classes@^6.23.0, babel-plugin-transform-es2015-cla babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-plugin-transform-es2015-computed-properties@^6.22.0, babel-plugin-transform-es2015-computed-properties@^6.5.0, babel-plugin-transform-es2015-computed-properties@^6.8.0: +babel-plugin-transform-es2015-computed-properties@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= @@ -1792,7 +2001,7 @@ babel-plugin-transform-es2015-computed-properties@^6.22.0, babel-plugin-transfor babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-plugin-transform-es2015-destructuring@6.x, babel-plugin-transform-es2015-destructuring@^6.23.0, babel-plugin-transform-es2015-destructuring@^6.5.0, babel-plugin-transform-es2015-destructuring@^6.8.0: +babel-plugin-transform-es2015-destructuring@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= @@ -1807,14 +2016,14 @@ babel-plugin-transform-es2015-duplicate-keys@^6.22.0: babel-runtime "^6.22.0" babel-types "^6.24.1" -babel-plugin-transform-es2015-for-of@^6.23.0, babel-plugin-transform-es2015-for-of@^6.5.0, babel-plugin-transform-es2015-for-of@^6.8.0: +babel-plugin-transform-es2015-for-of@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-function-name@6.x, babel-plugin-transform-es2015-function-name@^6.22.0, babel-plugin-transform-es2015-function-name@^6.5.0, babel-plugin-transform-es2015-function-name@^6.8.0: +babel-plugin-transform-es2015-function-name@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= @@ -1823,7 +2032,7 @@ babel-plugin-transform-es2015-function-name@6.x, babel-plugin-transform-es2015-f babel-runtime "^6.22.0" babel-types "^6.24.1" -babel-plugin-transform-es2015-literals@^6.22.0, babel-plugin-transform-es2015-literals@^6.5.0, babel-plugin-transform-es2015-literals@^6.8.0: +babel-plugin-transform-es2015-literals@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= @@ -1839,7 +2048,7 @@ babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015 babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-plugin-transform-es2015-modules-commonjs@6.x, babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1, babel-plugin-transform-es2015-modules-commonjs@^6.5.0, babel-plugin-transform-es2015-modules-commonjs@^6.8.0: +babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: version "6.26.2" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== @@ -1867,7 +2076,7 @@ babel-plugin-transform-es2015-modules-umd@^6.23.0: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-plugin-transform-es2015-object-super@^6.22.0, babel-plugin-transform-es2015-object-super@^6.8.0: +babel-plugin-transform-es2015-object-super@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= @@ -1875,7 +2084,7 @@ babel-plugin-transform-es2015-object-super@^6.22.0, babel-plugin-transform-es201 babel-helper-replace-supers "^6.24.1" babel-runtime "^6.22.0" -babel-plugin-transform-es2015-parameters@6.x, babel-plugin-transform-es2015-parameters@^6.23.0, babel-plugin-transform-es2015-parameters@^6.5.0, babel-plugin-transform-es2015-parameters@^6.8.0: +babel-plugin-transform-es2015-parameters@^6.23.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= @@ -1887,7 +2096,7 @@ babel-plugin-transform-es2015-parameters@6.x, babel-plugin-transform-es2015-para babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-plugin-transform-es2015-shorthand-properties@6.x, babel-plugin-transform-es2015-shorthand-properties@^6.22.0, babel-plugin-transform-es2015-shorthand-properties@^6.5.0, babel-plugin-transform-es2015-shorthand-properties@^6.8.0: +babel-plugin-transform-es2015-shorthand-properties@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= @@ -1895,14 +2104,14 @@ babel-plugin-transform-es2015-shorthand-properties@6.x, babel-plugin-transform-e babel-runtime "^6.22.0" babel-types "^6.24.1" -babel-plugin-transform-es2015-spread@6.x, babel-plugin-transform-es2015-spread@^6.22.0, babel-plugin-transform-es2015-spread@^6.5.0, babel-plugin-transform-es2015-spread@^6.8.0: +babel-plugin-transform-es2015-spread@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-sticky-regex@6.x, babel-plugin-transform-es2015-sticky-regex@^6.22.0: +babel-plugin-transform-es2015-sticky-regex@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= @@ -1911,7 +2120,7 @@ babel-plugin-transform-es2015-sticky-regex@6.x, babel-plugin-transform-es2015-st babel-runtime "^6.22.0" babel-types "^6.24.1" -babel-plugin-transform-es2015-template-literals@^6.22.0, babel-plugin-transform-es2015-template-literals@^6.5.0, babel-plugin-transform-es2015-template-literals@^6.8.0: +babel-plugin-transform-es2015-template-literals@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= @@ -1925,7 +2134,7 @@ babel-plugin-transform-es2015-typeof-symbol@^6.23.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-unicode-regex@6.x, babel-plugin-transform-es2015-unicode-regex@^6.22.0: +babel-plugin-transform-es2015-unicode-regex@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= @@ -1934,21 +2143,7 @@ babel-plugin-transform-es2015-unicode-regex@6.x, babel-plugin-transform-es2015-u babel-runtime "^6.22.0" regexpu-core "^2.0.0" -babel-plugin-transform-es3-member-expression-literals@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es3-member-expression-literals/-/babel-plugin-transform-es3-member-expression-literals-6.22.0.tgz#733d3444f3ecc41bef8ed1a6a4e09657b8969ebb" - integrity sha1-cz00RPPsxBvvjtGmpOCWV7iWnrs= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es3-property-literals@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es3-property-literals/-/babel-plugin-transform-es3-property-literals-6.22.0.tgz#b2078d5842e22abf40f73e8cde9cd3711abd5758" - integrity sha1-sgeNWELiKr9A9z6M3pzTcRq9V1g= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-exponentiation-operator@^6.24.1, babel-plugin-transform-exponentiation-operator@^6.5.0: +babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-exponentiation-operator@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= @@ -1965,7 +2160,7 @@ babel-plugin-transform-export-extensions@^6.22.0: babel-plugin-syntax-export-extensions "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-flow-strip-types@^6.21.0, babel-plugin-transform-flow-strip-types@^6.22.0, babel-plugin-transform-flow-strip-types@^6.5.0, babel-plugin-transform-flow-strip-types@^6.8.0: +babel-plugin-transform-flow-strip-types@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" integrity sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988= @@ -1981,19 +2176,12 @@ babel-plugin-transform-function-bind@^6.22.0: babel-plugin-syntax-function-bind "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-jsx-to-stylesheet@1.3.29: - version "1.3.29" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-jsx-to-stylesheet/-/babel-plugin-transform-jsx-to-stylesheet-1.3.29.tgz#2ef60448adb77dd5321de47c1b455e9dab34d31d" - integrity sha512-/hhL9/G9Xqdmn3okJFSiO0jMralqcgZMiEV+h4q4nJaRSUydzpt9G5X0uvkIpbUBAKSNuT0sNi//G9usX2rfGg== +babel-plugin-transform-jsx-to-stylesheet@2.0.0-beta.13: + version "2.0.0-beta.13" + resolved "https://registry.npm.taobao.org/babel-plugin-transform-jsx-to-stylesheet/download/babel-plugin-transform-jsx-to-stylesheet-2.0.0-beta.13.tgz?cache=0&sync_timestamp=1577772259717&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-plugin-transform-jsx-to-stylesheet%2Fdownload%2Fbabel-plugin-transform-jsx-to-stylesheet-2.0.0-beta.13.tgz#6b3e0f9121ac2a6b7e198532cc16fd7e3ec7d289" + integrity sha1-az4PkSGsKmt+GYUyzBb9fj7H0ok= -babel-plugin-transform-object-assign@^6.5.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz#f99d2f66f1a0b0d498e346c5359684740caa20ba" - integrity sha1-+Z0vZvGgsNSY40bFNZaEdAyqILo= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-object-rest-spread@^6.20.2, babel-plugin-transform-object-rest-spread@^6.22.0, babel-plugin-transform-object-rest-spread@^6.5.0, babel-plugin-transform-object-rest-spread@^6.8.0: +babel-plugin-transform-object-rest-spread@^6.22.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY= @@ -2001,7 +2189,7 @@ babel-plugin-transform-object-rest-spread@^6.20.2, babel-plugin-transform-object babel-plugin-syntax-object-rest-spread "^6.8.0" babel-runtime "^6.26.0" -babel-plugin-transform-react-display-name@^6.23.0, babel-plugin-transform-react-display-name@^6.5.0, babel-plugin-transform-react-display-name@^6.8.0: +babel-plugin-transform-react-display-name@^6.23.0: version "6.25.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" integrity sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE= @@ -2016,7 +2204,7 @@ babel-plugin-transform-react-jsx-self@^6.22.0: babel-plugin-syntax-jsx "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-react-jsx-source@^6.22.0, babel-plugin-transform-react-jsx-source@^6.5.0: +babel-plugin-transform-react-jsx-source@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" integrity sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY= @@ -2024,7 +2212,7 @@ babel-plugin-transform-react-jsx-source@^6.22.0, babel-plugin-transform-react-js babel-plugin-syntax-jsx "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-react-jsx@^6.24.1, babel-plugin-transform-react-jsx@^6.5.0, babel-plugin-transform-react-jsx@^6.8.0: +babel-plugin-transform-react-jsx@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" integrity sha1-hAoCjn30YN/DotKfDA2R9jduZqM= @@ -2033,7 +2221,7 @@ babel-plugin-transform-react-jsx@^6.24.1, babel-plugin-transform-react-jsx@^6.5. babel-plugin-syntax-jsx "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-regenerator@^6.22.0, babel-plugin-transform-regenerator@^6.5.0: +babel-plugin-transform-regenerator@^6.22.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= @@ -2089,54 +2277,38 @@ babel-preset-env@^1.7.0: invariant "^2.2.2" semver "^5.3.0" -babel-preset-es2015-node@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-preset-es2015-node/-/babel-preset-es2015-node-6.1.1.tgz#60b23157024b0cfebf3a63554cb05ee035b4e55f" - integrity sha1-YLIxVwJLDP6/OmNVTLBe4DW05V8= - dependencies: - babel-plugin-transform-es2015-destructuring "6.x" - babel-plugin-transform-es2015-function-name "6.x" - babel-plugin-transform-es2015-modules-commonjs "6.x" - babel-plugin-transform-es2015-parameters "6.x" - babel-plugin-transform-es2015-shorthand-properties "6.x" - babel-plugin-transform-es2015-spread "6.x" - babel-plugin-transform-es2015-sticky-regex "6.x" - babel-plugin-transform-es2015-unicode-regex "6.x" - semver "5.x" - -babel-preset-fbjs@^2.1.2, babel-preset-fbjs@^2.1.4: - version "2.3.0" - resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-2.3.0.tgz#92ff81307c18b926895114f9828ae1674c097f80" - integrity sha512-ZOpAI1/bN0Y3J1ZAK9gRsFkHy9gGgJoDRUjtUCla/129LC7uViq9nIK22YdHfey8szohYoZY3f9L2lGOv0Edqw== - dependencies: - babel-plugin-check-es2015-constants "^6.8.0" - babel-plugin-syntax-class-properties "^6.8.0" - babel-plugin-syntax-flow "^6.8.0" - babel-plugin-syntax-jsx "^6.8.0" - babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-plugin-syntax-trailing-function-commas "^6.8.0" - babel-plugin-transform-class-properties "^6.8.0" - babel-plugin-transform-es2015-arrow-functions "^6.8.0" - babel-plugin-transform-es2015-block-scoped-functions "^6.8.0" - babel-plugin-transform-es2015-block-scoping "^6.8.0" - babel-plugin-transform-es2015-classes "^6.8.0" - babel-plugin-transform-es2015-computed-properties "^6.8.0" - babel-plugin-transform-es2015-destructuring "^6.8.0" - babel-plugin-transform-es2015-for-of "^6.8.0" - babel-plugin-transform-es2015-function-name "^6.8.0" - babel-plugin-transform-es2015-literals "^6.8.0" - babel-plugin-transform-es2015-modules-commonjs "^6.8.0" - babel-plugin-transform-es2015-object-super "^6.8.0" - babel-plugin-transform-es2015-parameters "^6.8.0" - babel-plugin-transform-es2015-shorthand-properties "^6.8.0" - babel-plugin-transform-es2015-spread "^6.8.0" - babel-plugin-transform-es2015-template-literals "^6.8.0" - babel-plugin-transform-es3-member-expression-literals "^6.8.0" - babel-plugin-transform-es3-property-literals "^6.8.0" - babel-plugin-transform-flow-strip-types "^6.8.0" - babel-plugin-transform-object-rest-spread "^6.8.0" - babel-plugin-transform-react-display-name "^6.8.0" - babel-plugin-transform-react-jsx "^6.8.0" +babel-preset-fbjs@^3.0.1, babel-preset-fbjs@^3.2.0: + version "3.3.0" + resolved "https://registry.npm.taobao.org/babel-preset-fbjs/download/babel-preset-fbjs-3.3.0.tgz#a6024764ea86c8e06a22d794ca8b69534d263541" + integrity sha1-pgJHZOqGyOBqIteUyotpU00mNUE= + dependencies: + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-syntax-class-properties" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-block-scoped-functions" "^7.0.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + "@babel/plugin-transform-for-of" "^7.0.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-member-expression-literals" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-object-super" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-property-literals" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-template-literals" "^7.0.0" + babel-plugin-syntax-trailing-function-commas "^7.0.0-beta.0" babel-preset-flow@^6.23.0: version "6.23.0" @@ -2153,44 +2325,6 @@ babel-preset-jest@^23.2.0: babel-plugin-jest-hoist "^23.2.0" babel-plugin-syntax-object-rest-spread "^6.13.0" -babel-preset-react-native@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-react-native/-/babel-preset-react-native-4.0.1.tgz#14ff07bdb6c8df9408082c0c18b2ce8e3392e76a" - integrity sha512-uhFXnl1WbEWNG4W8QB/jeQaVXkd0a0AD+wh4D2VqtdRnEyvscahqyHExnwKLU9N0sXRYwDyed4JfbiBtiOSGgA== - dependencies: - babel-plugin-check-es2015-constants "^6.5.0" - babel-plugin-react-transform "^3.0.0" - babel-plugin-syntax-async-functions "^6.5.0" - babel-plugin-syntax-class-properties "^6.5.0" - babel-plugin-syntax-dynamic-import "^6.18.0" - babel-plugin-syntax-flow "^6.5.0" - babel-plugin-syntax-jsx "^6.5.0" - babel-plugin-syntax-trailing-function-commas "^6.5.0" - babel-plugin-transform-class-properties "^6.5.0" - babel-plugin-transform-es2015-arrow-functions "^6.5.0" - babel-plugin-transform-es2015-block-scoping "^6.5.0" - babel-plugin-transform-es2015-classes "^6.5.0" - babel-plugin-transform-es2015-computed-properties "^6.5.0" - babel-plugin-transform-es2015-destructuring "^6.5.0" - babel-plugin-transform-es2015-for-of "^6.5.0" - babel-plugin-transform-es2015-function-name "^6.5.0" - babel-plugin-transform-es2015-literals "^6.5.0" - babel-plugin-transform-es2015-modules-commonjs "^6.5.0" - babel-plugin-transform-es2015-parameters "^6.5.0" - babel-plugin-transform-es2015-shorthand-properties "^6.5.0" - babel-plugin-transform-es2015-spread "^6.5.0" - babel-plugin-transform-es2015-template-literals "^6.5.0" - babel-plugin-transform-exponentiation-operator "^6.5.0" - babel-plugin-transform-flow-strip-types "^6.5.0" - babel-plugin-transform-object-assign "^6.5.0" - babel-plugin-transform-object-rest-spread "^6.5.0" - babel-plugin-transform-react-display-name "^6.5.0" - babel-plugin-transform-react-jsx "^6.5.0" - babel-plugin-transform-react-jsx-source "^6.5.0" - babel-plugin-transform-regenerator "^6.5.0" - babel-template "^6.24.1" - react-transform-hmr "^1.0.4" - babel-preset-react@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" @@ -2242,7 +2376,7 @@ babel-preset-stage-3@^6.24.1: babel-plugin-transform-exponentiation-operator "^6.24.1" babel-plugin-transform-object-rest-spread "^6.22.0" -babel-register@^6.24.1, babel-register@^6.26.0, babel-register@^6.9.0: +babel-register@^6.26.0, babel-register@^6.9.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= @@ -2255,7 +2389,7 @@ babel-register@^6.24.1, babel-register@^6.26.0, babel-register@^6.9.0: mkdirp "^0.5.1" source-map-support "^0.4.15" -babel-runtime@^6.0.0, babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.26.0, babel-runtime@^6.6.1, babel-runtime@^6.9.1: +babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0, babel-runtime@^6.6.1, babel-runtime@^6.9.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= @@ -2309,11 +2443,6 @@ babylon@^6.1.21, babylon@^6.18.0, babylon@^6.7.0: resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== -babylon@^7.0.0-beta: - version "7.0.0-beta.47" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.47.tgz#6d1fa44f0abec41ab7c780481e62fd9aafbdea80" - integrity sha512-+rq2cr4GDhtToEzKFD6KZZMDBXhjFAr9JjPw9pAppZACeEWqNM294j+NdBzkSHYXwzzBmVjZ3nEVJlOhbR2gOQ== - bail@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.4.tgz#7181b66d508aa3055d3f6c13f0a0c720641dde9b" @@ -2324,17 +2453,7 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base64-js@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978" - integrity sha1-EQHpVE9KdrG8OybUUsqW16NeeXg= - -base64-js@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.1.2.tgz#d6400cac1c4c660976d90d07a04351d89395f5e8" - integrity sha1-1kAMrBxMZgl22Q0HoENR2JOV9eg= - -base64-js@^1.0.2, base64-js@^1.1.2: +base64-js@^1.0.2, base64-js@^1.1.2, base64-js@^1.2.3: version "1.3.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== @@ -2380,10 +2499,10 @@ better-babel-generator@^6.26.1: source-map "^0.5.7" trim-right "^1.0.1" -big-integer@^1.6.7: - version "1.6.47" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.47.tgz#e1e9320e26c4cc81f64fbf4b3bb20e025bf18e2d" - integrity sha512-9t9f7X3as2XGX8b52GqG6ox0GvIdM86LyIXASJnDCFhYNgt+A+MByQZ3W2PyMRZjEvG5f8TEbSPfEotVuMJnQg== +big-integer@^1.6.44: + version "1.6.48" + resolved "https://registry.npm.taobao.org/big-integer/download/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e" + integrity sha1-j9iL0WMsukocjD49cVnwi7lbS54= big.js@^5.2.2: version "5.2.2" @@ -2416,19 +2535,19 @@ boxen@^1.2.1: term-size "^1.2.0" widest-line "^2.0.0" -bplist-creator@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.7.tgz#37df1536092824b87c42f957b01344117372ae45" - integrity sha1-N98VNgkoJLh8QvlXsBNEEXNyrkU= +bplist-creator@0.0.8: + version "0.0.8" + resolved "https://registry.npm.taobao.org/bplist-creator/download/bplist-creator-0.0.8.tgz#56b2a6e79e9aec3fc33bf831d09347d73794e79c" + integrity sha1-VrKm556a7D/DO/gx0JNH1zeU55w= dependencies: stream-buffers "~2.2.0" -bplist-parser@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.1.1.tgz#d60d5dcc20cba6dc7e1f299b35d3e1f95dafbae6" - integrity sha1-1g1dzCDLptx+HymbNdPh+V2vuuY= +bplist-parser@0.2.0: + version "0.2.0" + resolved "https://registry.npm.taobao.org/bplist-parser/download/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" + integrity sha1-Q6nRg+W/nVRSAM6sPnEveeu+jQ4= dependencies: - big-integer "^1.6.7" + big-integer "^1.6.44" brace-expansion@^1.1.7: version "1.1.11" @@ -2503,7 +2622,7 @@ buffer-alloc@^1.2.0: buffer-alloc-unsafe "^1.1.0" buffer-fill "^1.0.0" -buffer-crc32@~0.2.3: +buffer-crc32@^0.2.13, buffer-crc32@~0.2.3: version "0.2.13" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= @@ -2797,13 +2916,6 @@ cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - cli-spinners@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" @@ -2819,14 +2931,6 @@ cli-width@^2.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= -clipboardy@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-1.2.3.tgz#0526361bf78724c1f20be248d428e365433c07ef" - integrity sha512-2WNImOvCRe6r63Gk9pShfkwXsVtKCroMAevIbiae021mS850UkWPbevxsBz3tnvjZIEGvlwaqCPsw+4ulzNgJA== - dependencies: - arch "^2.1.0" - execa "^0.8.0" - cliui@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" @@ -3057,6 +3161,13 @@ convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.0, dependencies: safe-buffer "~5.1.1" +convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz?cache=0&sync_timestamp=1573003637425&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconvert-source-map%2Fdownload%2Fconvert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha1-F6LLiC1/d9NJBYXizmxSRCSjpEI= + dependencies: + safe-buffer "~5.1.1" + copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" @@ -3077,7 +3188,7 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -cosmiconfig@^5.0.0, cosmiconfig@^5.2.0: +cosmiconfig@^5.0.0, cosmiconfig@^5.0.5, cosmiconfig@^5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== @@ -3198,11 +3309,6 @@ cssesc@^0.1.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" integrity sha1-yBSQPkViM3GgR3tAEJqq++6t27Q= -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": version "0.3.8" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" @@ -3215,6 +3321,11 @@ cssstyle@^1.0.0: dependencies: cssom "0.3.x" +csstype@^2.2.0: + version "2.6.7" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.7.tgz#20b0024c20b6718f4eda3853a1f5a1cce7f5e4a5" + integrity sha512-9Mcn9sFbGBAdmimWb2gLVDtFJzeKtDGIr76TUqmjZrw9LFXBMSU70lcs+C0/7fyCd6iBDqmksUcCOUIkisPHsQ== + cuint@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b" @@ -3626,11 +3737,16 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -ejs@^2.5.9, ejs@^2.6.1: +ejs@^2.5.9: version "2.7.1" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.1.tgz#5b5ab57f718b79d4aca9254457afecd36fa80228" integrity sha512-kS/gEPzZs3Y1rRsbGX4UOSjtP/CeJP0CxSNZHYxGfVM/VgLcv0ZqM7C45YyTj2DI2g7+P9Dd24C+IMIg6D0nYQ== +ejs@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.0.1.tgz#30c8f6ee9948502cc32e85c37a3f8b39b5a614a5" + integrity sha512-cuIMtJwxvzumSAkqaaoGY/L6Fc/t6YvoP9/VIaK0V/CyqKLEQ8sqODmYfy/cjXEdZ9+OOL8TecbJu+1RsofGDw== + electron-to-chromium@^1.3.47: version "1.3.296" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.296.tgz#a1d4322d742317945285d3ba88966561b67f3ac8" @@ -3641,11 +3757,6 @@ emoji-regex@^7.0.1: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" @@ -3680,16 +3791,10 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== -envinfo@^3.0.0: - version "3.11.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-3.11.1.tgz#45968faf5079aa797b7dcdc3b123f340d4529e1c" - integrity sha512-hKkh7aKtont6Zuv4RmE4VkOc96TkBj9NXj7Ghsd/qCA9LuJI0Dh+ImwA1N5iORB9Vg+sz5bq9CHJzs51BILNCQ== - dependencies: - clipboardy "^1.2.2" - glob "^7.1.2" - minimist "^1.2.0" - os-name "^2.0.1" - which "^1.2.14" +envinfo@^5.7.0: + version "5.12.1" + resolved "https://registry.npm.taobao.org/envinfo/download/envinfo-5.12.1.tgz#83068c33e0972eb657d6bc69a6df30badefb46ef" + integrity sha1-gwaMM+CXLrZX1rxppt8wut77Ru8= envinfo@^6.0.1: version "6.0.1" @@ -3765,12 +3870,12 @@ escodegen@^1.9.1: optionalDependencies: source-map "~0.6.1" -eslint-config-taro@1.3.29: - version "1.3.29" - resolved "https://registry.yarnpkg.com/eslint-config-taro/-/eslint-config-taro-1.3.29.tgz#3acc65336315a5560344c9a728dea8806bdb8c46" - integrity sha512-zYr7TcC7SR0xRQHz19CbIKP2VyfSdiELlF1ycbQhjxJBRQ8m4F34yOvh8TEg9RKlJkWUk1Wqrj7Sjx8A4jDQKw== +eslint-config-taro@2.0.0-beta.13: + version "2.0.0-beta.13" + resolved "https://registry.npm.taobao.org/eslint-config-taro/download/eslint-config-taro-2.0.0-beta.13.tgz?cache=0&sync_timestamp=1577772387773&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-config-taro%2Fdownload%2Feslint-config-taro-2.0.0-beta.13.tgz#1713e11af2677da0216b245034968fb1d57c22ff" + integrity sha1-FxPhGvJnfaAhayRQNJaPsdV8Iv8= dependencies: - eslint-plugin-taro "1.3.29" + eslint-plugin-taro "2.0.0-beta.13" eslint-import-resolver-node@^0.3.2: version "0.3.2" @@ -3810,18 +3915,6 @@ eslint-plugin-react-hooks@^1.6.1: resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz#6210b6d5a37205f0b92858f895a4e827020a7d04" integrity sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA== -eslint-plugin-react-native-globals@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-native-globals/-/eslint-plugin-react-native-globals-0.1.2.tgz#ee1348bc2ceb912303ce6bdbd22e2f045ea86ea2" - integrity sha512-9aEPf1JEpiTjcFAmmyw8eiIXmcNZOqaZyHO77wgm0/dWfT/oxC1SrIq8ET38pMxHYrcB6Uew+TzUVsBeczF88g== - -eslint-plugin-react-native@^3.2.1: - version "3.7.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-native/-/eslint-plugin-react-native-3.7.0.tgz#7e2cc1f3cf24919c4c0ea7fac13301e7444e105f" - integrity sha512-krLtQmGih/uJDPxF8DBpnU8J3kRUsDm/Dey5yEhOO8LN1I3Wesbk4PGCg8Zah57azKFU+9YtGooFjJcDJWUs+g== - dependencies: - eslint-plugin-react-native-globals "^0.1.1" - eslint-plugin-react@7.10.0: version "7.10.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.10.0.tgz#af5c1fef31c4704db02098f9be18202993828b50" @@ -3847,10 +3940,10 @@ eslint-plugin-react@^7.4.0: prop-types "^15.7.2" resolve "^1.12.0" -eslint-plugin-taro@1.3.29: - version "1.3.29" - resolved "https://registry.yarnpkg.com/eslint-plugin-taro/-/eslint-plugin-taro-1.3.29.tgz#dd8368fa16cb73abfec356c86dfb80566c0a4490" - integrity sha512-FKbne+jcD2SIguIRCSlbWzMvHWCDi0lWDWV24AGo4IZ+er/w2hwdNd8akZENKd28BZXcN4X31K1XeIlA78JUYQ== +eslint-plugin-taro@2.0.0-beta.13: + version "2.0.0-beta.13" + resolved "https://registry.npm.taobao.org/eslint-plugin-taro/download/eslint-plugin-taro-2.0.0-beta.13.tgz?cache=0&sync_timestamp=1577772250575&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-taro%2Fdownload%2Feslint-plugin-taro-2.0.0-beta.13.tgz#b11108a151517f4a1fb7e6048222af239e5478f2" + integrity sha1-sREIoVFRf0oft+YEgiKvI55UePI= dependencies: has "^1.0.1" @@ -4085,19 +4178,6 @@ execa@^0.7.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" - integrity sha1-2NdrvBtVIX7RkP1t1J08d07PyNo= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -4216,7 +4296,7 @@ extend@^3.0.0, extend@~3.0.2: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -external-editor@^2.0.4: +external-editor@^2.0.4, external-editor@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== @@ -4319,14 +4399,14 @@ fbjs-css-vars@^1.0.0: resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== -fbjs-scripts@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/fbjs-scripts/-/fbjs-scripts-0.8.3.tgz#b854de7a11e62a37f72dab9aaf4d9b53c4a03174" - integrity sha512-aUJ/uEzMIiBYuj/blLp4sVNkQQ7ZEB/lyplG1IzzOmZ83meiWecrGg5jBo4wWrxXmO4RExdtsSV1QkTjPt2Gag== +fbjs-scripts@^1.0.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/fbjs-scripts/download/fbjs-scripts-1.2.0.tgz#069a0c0634242d10031c6460ef1fccefcdae8b27" + integrity sha1-BpoMBjQkLRADHGRg7x/M782uiyc= dependencies: + "@babel/core" "^7.0.0" ansi-colors "^1.0.1" - babel-core "^6.7.2" - babel-preset-fbjs "^2.1.2" + babel-preset-fbjs "^3.2.0" core-js "^2.4.1" cross-spawn "^5.1.0" fancy-log "^1.3.2" @@ -4335,7 +4415,7 @@ fbjs-scripts@^0.8.1: semver "^5.1.0" through2 "^2.0.0" -fbjs@^0.8.14, fbjs@^0.8.9: +fbjs@^0.8.9: version "0.8.17" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= @@ -4384,13 +4464,6 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" -figures@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.1.0.tgz#4b198dd07d8d71530642864af2d45dd9e459c4ec" - integrity sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg== - dependencies: - escape-string-regexp "^1.0.5" - file-entry-cache@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" @@ -4657,6 +4730,15 @@ fs-extra@^5.0.0: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.npm.taobao.org/fs-extra/download/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha1-TxicRKoSO4lfcigE9V6iPq3DSOk= + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-minipass@^1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" @@ -5015,9 +5097,9 @@ growly@^1.3.0: integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= handlebars@^4.0.3: - version "4.4.5" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.4.5.tgz#1b1f94f9bfe7379adda86a8b73fb570265a0dddd" - integrity sha512-0Ce31oWVB7YidkaTq33ZxEbN+UDxMMgThvCe8ptgQViymL5DPis9uLdTA13MiRPhgvqyxIegugrP97iK3JeBHg== + version "4.5.3" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482" + integrity sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA== dependencies: neo-async "^2.6.0" optimist "^0.6.1" @@ -5217,6 +5299,11 @@ iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4, ic dependencies: safer-buffer ">= 2.1.2 < 3" +icss-replace-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" + integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= + icss-utils@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-3.0.1.tgz#ee70d3ae8cac38c6be5ed91e851b27eed343ad0f" @@ -5224,13 +5311,6 @@ icss-utils@^3.0.1: dependencies: postcss "^6.0.2" -icss-utils@^4.0.0, icss-utils@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" - integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== - dependencies: - postcss "^7.0.14" - ieee754@^1.1.4: version "1.1.13" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" @@ -5371,6 +5451,25 @@ inquirer@^3.0.6: strip-ansi "^4.0.0" through "^2.3.6" +inquirer@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-5.2.0.tgz#db350c2b73daca77ff1243962e9f22f099685726" + integrity sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ== + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.1.0" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^5.5.2" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + inquirer@^6.2.2, inquirer@^6.4.1: version "6.5.2" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" @@ -5390,25 +5489,6 @@ inquirer@^6.2.2, inquirer@^6.4.1: strip-ansi "^5.1.0" through "^2.3.6" -inquirer@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.0.tgz#9e2b032dde77da1db5db804758b8fea3a970519a" - integrity sha512-rSdC7zelHdRQFkWnhsMu2+2SO41mpv2oF2zy4tMhmiLWkcKbOAs87fWAJhVXttKVwhdZvymvnuM95EyEXg2/tQ== - dependencies: - ansi-escapes "^4.2.1" - chalk "^2.4.2" - cli-cursor "^3.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.15" - mute-stream "0.0.8" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^4.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" - interpret@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" @@ -5613,11 +5693,6 @@ is-fullwidth-code-point@^2.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - is-generator-fn@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" @@ -6034,20 +6109,6 @@ jest-diff@^23.6.0: jest-get-type "^22.1.0" pretty-format "^23.6.0" -jest-docblock@22.4.0: - version "22.4.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.4.0.tgz#dbf1877e2550070cfc4d9b07a55775a0483159b8" - integrity sha512-lDY7GZ+/CJb02oULYLBDj7Hs5shBhVpDYpIm8LUyqw9X2J22QRsM19gmGQwIFqGSJmpc/LRrSYudeSrG510xlQ== - dependencies: - detect-newline "^2.1.0" - -jest-docblock@^22.4.0: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.4.3.tgz#50886f132b42b280c903c592373bb6e93bb68b19" - integrity sha512-uPKBEAw7YrEMcXueMKZXn/rbMxBiSv48fSqy3uEnmgOlQhSX+lthBqHb1fKWNVmFqAp9E/RsSdBfiV31LbzaOg== - dependencies: - detect-newline "^2.1.0" - jest-docblock@^23.2.0: version "23.2.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-23.2.0.tgz#f085e1f18548d99fdd69b20207e6fd55d91383a7" @@ -6085,18 +6146,18 @@ jest-get-type@^22.1.0: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" integrity sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w== -jest-haste-map@22.4.2: - version "22.4.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.4.2.tgz#a90178e66146d4378bb076345a949071f3b015b4" - integrity sha512-EdQADHGXRqHJYAr7q9B9YYHZnrlcMwhx1+DnIgc9uN05nCW3RvGCxJ91MqWXcC1AzatLoSv7SNd0qXMp2jKBDA== +jest-haste-map@24.0.0-alpha.6: + version "24.0.0-alpha.6" + resolved "https://registry.npm.taobao.org/jest-haste-map/download/jest-haste-map-24.0.0-alpha.6.tgz?cache=0&sync_timestamp=1566444279671&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-haste-map%2Fdownload%2Fjest-haste-map-24.0.0-alpha.6.tgz#fb2c785080f391b923db51846b86840d0d773076" + integrity sha1-+yx4UIDzkbkj21GEa4aEDQ13MHY= dependencies: fb-watchman "^2.0.0" graceful-fs "^4.1.11" - jest-docblock "^22.4.0" - jest-serializer "^22.4.0" - jest-worker "^22.2.2" + invariant "^2.2.4" + jest-serializer "^24.0.0-alpha.6" + jest-worker "^24.0.0-alpha.6" micromatch "^2.3.11" - sane "^2.0.0" + sane "^3.0.0" jest-haste-map@^23.6.0: version "23.6.0" @@ -6235,16 +6296,21 @@ jest-runtime@^23.6.0: write-file-atomic "^2.1.0" yargs "^11.0.0" -jest-serializer@^22.4.0: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-22.4.3.tgz#a679b81a7f111e4766235f4f0c46d230ee0f7436" - integrity sha512-uPaUAppx4VUfJ0QDerpNdF43F68eqKWCzzhUlKNDsUPhjOon7ZehR4C809GCqh765FoMRtTVUVnGvIoskkYHiw== +jest-serializer@24.0.0-alpha.6: + version "24.0.0-alpha.6" + resolved "https://registry.npm.taobao.org/jest-serializer/download/jest-serializer-24.0.0-alpha.6.tgz#27d2fee4b1a85698717a30c3ec2ab80767312597" + integrity sha1-J9L+5LGoVphxejDD7Cq4B2cxJZc= jest-serializer@^23.0.1: version "23.0.1" resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-23.0.1.tgz#a3776aeb311e90fe83fab9e533e85102bd164165" integrity sha1-o3dq6zEekP6D+rnlM+hRAr0WQWU= +jest-serializer@^24.0.0-alpha.6: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest-serializer/download/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73" + integrity sha1-5tfX75bTHouQeacUdUxdXFgojnM= + jest-snapshot@^23.6.0: version "23.6.0" resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-23.6.0.tgz#f9c2625d1b18acda01ec2d2b826c0ce58a5aa17a" @@ -6294,17 +6360,10 @@ jest-watcher@^23.4.0: chalk "^2.0.1" string-length "^2.0.0" -jest-worker@22.2.2: - version "22.2.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.2.2.tgz#c1f5dc39976884b81f68ec50cb8532b2cbab3390" - integrity sha512-ZylDXjrFNt/OP6cUxwJFWwDgazP7hRjtCQbocFHyiwov+04Wm1x5PYzMGNJT53s4nwr0oo9ocYTImS09xOlUnw== - dependencies: - merge-stream "^1.0.1" - -jest-worker@^22.2.2: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.4.3.tgz#5c421417cba1c0abf64bf56bd5fb7968d79dd40b" - integrity sha512-B1ucW4fI8qVAuZmicFxI1R3kr2fNeYJyvIQ1rKcuLYnenFV5K5aMbxFj6J0i00Ju83S8jP2d7Dz14+AvbIHRYQ== +jest-worker@24.0.0-alpha.6: + version "24.0.0-alpha.6" + resolved "https://registry.npm.taobao.org/jest-worker/download/jest-worker-24.0.0-alpha.6.tgz#463681b92c117c57107135c14b9b9d6cd51d80ce" + integrity sha1-RjaBuSwRfFcQcTXBS5udbNUdgM4= dependencies: merge-stream "^1.0.1" @@ -6315,6 +6374,14 @@ jest-worker@^23.2.0: dependencies: merge-stream "^1.0.1" +jest-worker@^24.0.0-alpha.6: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest-worker/download/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" + integrity sha1-Xb/bWy0yLphWeJgjipaXvM5ns+U= + dependencies: + merge-stream "^2.0.0" + supports-color "^6.1.0" + jest@^23.6.0: version "23.6.0" resolved "https://registry.yarnpkg.com/jest/-/jest-23.6.0.tgz#ad5835e923ebf6e19e7a1d7529a432edfee7813d" @@ -6607,7 +6674,7 @@ lead@^1.0.0: dependencies: flush-write-stream "^1.0.2" -left-pad@^1.1.3, left-pad@^1.3.0: +left-pad@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== @@ -6726,16 +6793,11 @@ lodash.unescape@4.0.1: resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= -"lodash@4.6.1 || ^4.16.1", lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.5.1, lodash@^4.6.1, lodash@^4.7.0: +"lodash@4.6.1 || ^4.16.1", lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.5.1, lodash@^4.6.1, lodash@^4.7.0: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== -lodash@^3.5.0: - version "3.10.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" - integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y= - log-symbols@^2.0.0, log-symbols@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" @@ -6781,11 +6843,6 @@ lru-cache@^4.0.0, lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" -macos-release@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-1.1.0.tgz#831945e29365b470aa8724b0ab36c8f8959d10fb" - integrity sha512-mmLbumEYMi5nXReB9js3WGsB8UE6cDBWyIO62Z4DNx6GbRhDxHNjA1MlzSpJ2S2KM1wyiPRA0d19uHWYYvMHjA== - make-dir@^1.0.0, make-dir@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" @@ -6793,7 +6850,7 @@ make-dir@^1.0.0, make-dir@^1.2.0: dependencies: pify "^3.0.0" -make-dir@^2.0.0: +make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== @@ -6949,6 +7006,11 @@ merge-stream@^1.0.1: dependencies: readable-stream "^2.0.1" +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/merge-stream/download/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A= + merge2@^1.2.3: version "1.3.0" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" @@ -6959,127 +7021,256 @@ merge@^1.2.0: resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== -metro-babylon7@0.30.2: - version "0.30.2" - resolved "https://registry.yarnpkg.com/metro-babylon7/-/metro-babylon7-0.30.2.tgz#73784a958916bf5541b6a930598b62460fc376f5" - integrity sha512-ZI0h4/3raGnzA6fFXwLUMidGOG4jkDi9fgFkoI8I4Ack3TDMabmZATu9RD6DaSolu3lylhfPd8DeAAMeopX9CA== +metro-babel-register@0.51.0: + version "0.51.0" + resolved "https://registry.npm.taobao.org/metro-babel-register/download/metro-babel-register-0.51.0.tgz#d86d3f2d90b45c7a3c6ae67a53bd1e50bad7a24d" + integrity sha1-2G0/LZC0XHo8auZ6U70eULrXok0= + dependencies: + "@babel/core" "^7.0.0" + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-optional-chaining" "^7.0.0" + "@babel/plugin-transform-async-to-generator" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/register" "^7.0.0" + core-js "^2.2.2" + escape-string-regexp "^1.0.5" + +metro-babel-transformer@0.51.0: + version "0.51.0" + resolved "https://registry.npm.taobao.org/metro-babel-transformer/download/metro-babel-transformer-0.51.0.tgz#9ee5199163ac46b2057527b3f8cbd8b089ffc03e" + integrity sha1-nuUZkWOsRrIFdSez+MvYsIn/wD4= + dependencies: + "@babel/core" "^7.0.0" + +metro-babel-transformer@0.51.1: + version "0.51.1" + resolved "https://registry.npm.taobao.org/metro-babel-transformer/download/metro-babel-transformer-0.51.1.tgz#97be9e2b96c78aa202b52ae05fb86f71327aef72" + integrity sha1-l76eK5bHiqICtSrgX7hvcTJ673I= + dependencies: + "@babel/core" "^7.0.0" + +metro-babel7-plugin-react-transform@0.51.0: + version "0.51.0" + resolved "https://registry.npm.taobao.org/metro-babel7-plugin-react-transform/download/metro-babel7-plugin-react-transform-0.51.0.tgz#af27dd81666b91f05d2b371b0d6d283c585e38b6" + integrity sha1-ryfdgWZrkfBdKzcbDW0oPFheOLY= dependencies: - babylon "^7.0.0-beta" + "@babel/helper-module-imports" "^7.0.0" + +metro-babel7-plugin-react-transform@0.51.1: + version "0.51.1" + resolved "https://registry.npm.taobao.org/metro-babel7-plugin-react-transform/download/metro-babel7-plugin-react-transform-0.51.1.tgz#9cce2c340cc4006fc82aa6dfab27af22d592607e" + integrity sha1-nM4sNAzEAG/IKqbfqyevItWSYH4= + dependencies: + "@babel/helper-module-imports" "^7.0.0" -metro-cache@0.30.2: - version "0.30.2" - resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.30.2.tgz#1fb1ff92d3d8c596fd8cddc1635a9cb1c26e4cba" - integrity sha512-XYd07OwgtZRHFXyip40wdNJ8abPJRziuE5bb3jjf8wvyHxCpzlZlvbe0ZhcR8ChBwFUjHMuVyoou52AC3a0f+g== +metro-cache@0.51.1: + version "0.51.1" + resolved "https://registry.npm.taobao.org/metro-cache/download/metro-cache-0.51.1.tgz#d0b296eab8e009214413bba87e4eac3d9b44cd04" + integrity sha1-0LKW6rjgCSFEE7uofk6sPZtEzQQ= dependencies: - jest-serializer "^22.4.0" + jest-serializer "24.0.0-alpha.6" + metro-core "0.51.1" mkdirp "^0.5.1" + rimraf "^2.5.4" + +metro-config@0.51.1, metro-config@^0.51.0: + version "0.51.1" + resolved "https://registry.npm.taobao.org/metro-config/download/metro-config-0.51.1.tgz#8f1a241ce2c0b521cd492c39bc5c6c69e3397b82" + integrity sha1-jxokHOLAtSHNSSw5vFxsaeM5e4I= + dependencies: + cosmiconfig "^5.0.5" + metro "0.51.1" + metro-cache "0.51.1" + metro-core "0.51.1" + pretty-format "24.0.0-alpha.6" -metro-core@0.30.2, metro-core@^0.30.0: - version "0.30.2" - resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.30.2.tgz#380ae13cceee29e5be166df7acca9f1daa19fd7e" - integrity sha512-2Y89PpD9sE/8QaHhYxaI21WFxkVmjbxdphiOPdsC9t7A3kQHMYOTQPYFon3bkYM7tL8k9YVBimXSv20JGglqUA== +metro-core@0.51.1, metro-core@^0.51.0: + version "0.51.1" + resolved "https://registry.npm.taobao.org/metro-core/download/metro-core-0.51.1.tgz#e7227fb1dd1bb3f953272fad9876e6201140b038" + integrity sha1-5yJ/sd0bs/lTJy+tmHbmIBFAsDg= dependencies: + jest-haste-map "24.0.0-alpha.6" lodash.throttle "^4.1.1" + metro-resolver "0.51.1" wordwrap "^1.0.0" -metro-minify-uglify@0.30.2: - version "0.30.2" - resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.30.2.tgz#7299a0376ad6340e9acf415912d54b5309702040" - integrity sha512-xwqMqYYKZEqJ66Wpf5OpyPJhApOQDb8rYiO94VInlDeHpN7eKGCVILclnx9AmVM3dStmebvXa5jrdgsbnJ1bSg== +metro-memory-fs@^0.51.0: + version "0.51.1" + resolved "https://registry.npm.taobao.org/metro-memory-fs/download/metro-memory-fs-0.51.1.tgz#624291f5956b0fd11532d80b1b85d550926f96c9" + integrity sha1-YkKR9ZVrD9EVMtgLG4XVUJJvlsk= + +metro-minify-uglify@0.51.1: + version "0.51.1" + resolved "https://registry.npm.taobao.org/metro-minify-uglify/download/metro-minify-uglify-0.51.1.tgz#60cd8fe4d3e82d6670c717b8ddb52ae63199c0e4" + integrity sha1-YM2P5NPoLWZwxxe43bUq5jGZwOQ= dependencies: uglify-es "^3.1.9" -metro-resolver@0.30.2: - version "0.30.2" - resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.30.2.tgz#c26847e59cdc6a8ab1fb4b92d765165ec06946dd" - integrity sha512-bODCys/WYpqJ+KYbCIENZu1eqdQu3g/d2fXfhAROhutqojMqrT1eIGhzWpk3G1k/J6vlaf69uW6xrVuheg0ktg== +metro-react-native-babel-preset@0.51.0: + version "0.51.0" + resolved "https://registry.npm.taobao.org/metro-react-native-babel-preset/download/metro-react-native-babel-preset-0.51.0.tgz#978d960acf2d214bbbe43e59145878d663bd07de" + integrity sha1-l42WCs8tIUu75D5ZFFh41mO9B94= + dependencies: + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-export-default-from" "^7.0.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-optional-chaining" "^7.0.0" + "@babel/plugin-syntax-dynamic-import" "^7.0.0" + "@babel/plugin-syntax-export-default-from" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.0.0" + "@babel/plugin-transform-exponentiation-operator" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + "@babel/plugin-transform-for-of" "^7.0.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-object-assign" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/plugin-transform-regenerator" "^7.0.0" + "@babel/plugin-transform-runtime" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-sticky-regex" "^7.0.0" + "@babel/plugin-transform-template-literals" "^7.0.0" + "@babel/plugin-transform-typescript" "^7.0.0" + "@babel/plugin-transform-unicode-regex" "^7.0.0" + "@babel/template" "^7.0.0" + metro-babel7-plugin-react-transform "0.51.0" + react-transform-hmr "^1.0.4" + +metro-react-native-babel-preset@0.51.1: + version "0.51.1" + resolved "https://registry.npm.taobao.org/metro-react-native-babel-preset/download/metro-react-native-babel-preset-0.51.1.tgz#44aeeedfea37f7c2ab8f6f273fa71b90fe65f089" + integrity sha1-RK7u3+o398Krj28nP6cbkP5l8Ik= + dependencies: + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-export-default-from" "^7.0.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-optional-chaining" "^7.0.0" + "@babel/plugin-syntax-dynamic-import" "^7.0.0" + "@babel/plugin-syntax-export-default-from" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.0.0" + "@babel/plugin-transform-exponentiation-operator" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + "@babel/plugin-transform-for-of" "^7.0.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-object-assign" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/plugin-transform-regenerator" "^7.0.0" + "@babel/plugin-transform-runtime" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-sticky-regex" "^7.0.0" + "@babel/plugin-transform-template-literals" "^7.0.0" + "@babel/plugin-transform-typescript" "^7.0.0" + "@babel/plugin-transform-unicode-regex" "^7.0.0" + "@babel/template" "^7.0.0" + metro-babel7-plugin-react-transform "0.51.1" + react-transform-hmr "^1.0.4" + +metro-react-native-babel-transformer@0.51.0: + version "0.51.0" + resolved "https://registry.npm.taobao.org/metro-react-native-babel-transformer/download/metro-react-native-babel-transformer-0.51.0.tgz#57a695e97a19d95de63c9633f9d0dc024ee8e99a" + integrity sha1-V6aV6XoZ2V3mPJYz+dDcAk7o6Zo= + dependencies: + "@babel/core" "^7.0.0" + babel-preset-fbjs "^3.0.1" + metro-babel-transformer "0.51.0" + metro-react-native-babel-preset "0.51.0" + +metro-react-native-babel-transformer@^0.51.0: + version "0.51.1" + resolved "https://registry.npm.taobao.org/metro-react-native-babel-transformer/download/metro-react-native-babel-transformer-0.51.1.tgz#bac34f988c150c725cd1875c13701cc2032615f9" + integrity sha1-usNPmIwVDHJc0YdcE3AcwgMmFfk= + dependencies: + "@babel/core" "^7.0.0" + babel-preset-fbjs "^3.0.1" + metro-babel-transformer "0.51.1" + metro-react-native-babel-preset "0.51.1" + +metro-resolver@0.51.1: + version "0.51.1" + resolved "https://registry.npm.taobao.org/metro-resolver/download/metro-resolver-0.51.1.tgz#4c26f0baee47d30250187adca3d34c902e627611" + integrity sha1-TCbwuu5H0wJQGHrco9NMkC5idhE= dependencies: absolute-path "^0.0.0" -metro-source-map@0.30.2: - version "0.30.2" - resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.30.2.tgz#4ac056642a2c521d974d42a617c8731d094365bb" - integrity sha512-9tW3B1JOdXhyDJnR4wOPOsOlYWSL+xh6J+N5/DADGEK/X/+Up/lEHdEfpB+/+yGk1LHaRHcKCahtLPNl/to7Sg== +metro-source-map@0.51.1: + version "0.51.1" + resolved "https://registry.npm.taobao.org/metro-source-map/download/metro-source-map-0.51.1.tgz#1a8da138e98e184304d5558b4f92a5c2141822d0" + integrity sha1-Go2hOOmOGEME1VWLT5KlwhQYItA= dependencies: source-map "^0.5.6" -metro@^0.30.0: - version "0.30.2" - resolved "https://registry.yarnpkg.com/metro/-/metro-0.30.2.tgz#e722e0eb106530f6d5bcf8de1f50353a0732cfb3" - integrity sha512-wmdkh4AsfZjWaMM++KMDswQHdyo5L9a0XAaQBL4XTJdQIRG+x+Rmjixe7tDki5jKwe9XxsjjbpbdYKswOANuiw== - dependencies: - "@babel/core" "^7.0.0-beta" - "@babel/generator" "^7.0.0-beta" - "@babel/helper-remap-async-to-generator" "^7.0.0-beta" - "@babel/plugin-external-helpers" "^7.0.0-beta" - "@babel/plugin-proposal-class-properties" "^7.0.0-beta" - "@babel/plugin-proposal-object-rest-spread" "^7.0.0-beta" - "@babel/plugin-syntax-dynamic-import" "^7.0.0-beta" - "@babel/plugin-transform-arrow-functions" "^7.0.0-beta" - "@babel/plugin-transform-block-scoping" "^7.0.0-beta" - "@babel/plugin-transform-classes" "^7.0.0-beta" - "@babel/plugin-transform-computed-properties" "^7.0.0-beta" - "@babel/plugin-transform-destructuring" "^7.0.0-beta" - "@babel/plugin-transform-exponentiation-operator" "^7.0.0-beta" - "@babel/plugin-transform-flow-strip-types" "^7.0.0-beta" - "@babel/plugin-transform-for-of" "^7.0.0-beta" - "@babel/plugin-transform-function-name" "^7.0.0-beta" - "@babel/plugin-transform-literals" "^7.0.0-beta" - "@babel/plugin-transform-modules-commonjs" "^7.0.0-beta" - "@babel/plugin-transform-object-assign" "^7.0.0-beta" - "@babel/plugin-transform-parameters" "^7.0.0-beta" - "@babel/plugin-transform-react-display-name" "^7.0.0-beta" - "@babel/plugin-transform-react-jsx" "^7.0.0-beta" - "@babel/plugin-transform-react-jsx-source" "^7.0.0-beta" - "@babel/plugin-transform-regenerator" "^7.0.0-beta" - "@babel/plugin-transform-shorthand-properties" "^7.0.0-beta" - "@babel/plugin-transform-spread" "^7.0.0-beta" - "@babel/plugin-transform-template-literals" "^7.0.0-beta" - "@babel/register" "^7.0.0-beta" - "@babel/template" "^7.0.0-beta" - "@babel/traverse" "^7.0.0-beta" - "@babel/types" "^7.0.0-beta" +metro@0.51.1, metro@^0.51.0: + version "0.51.1" + resolved "https://registry.npm.taobao.org/metro/download/metro-0.51.1.tgz#b0aad4731593b9f244261bad1abb2a006d1c8969" + integrity sha1-sKrUcxWTufJEJhutGrsqAG0ciWk= + dependencies: + "@babel/core" "^7.0.0" + "@babel/generator" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/plugin-external-helpers" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" absolute-path "^0.0.0" async "^2.4.0" - babel-core "^6.24.1" - babel-generator "^6.26.0" - babel-plugin-external-helpers "^6.22.0" - babel-plugin-react-transform "^3.0.0" - babel-plugin-transform-flow-strip-types "^6.21.0" - babel-preset-es2015-node "^6.1.1" - babel-preset-fbjs "^2.1.4" - babel-preset-react-native "^4.0.0" - babel-register "^6.24.1" - babel-template "^6.24.1" - babylon "^6.18.0" - chalk "^1.1.1" + babel-preset-fbjs "^3.0.1" + buffer-crc32 "^0.2.13" + chalk "^2.4.1" concat-stream "^1.6.0" connect "^3.6.5" - core-js "^2.2.2" debug "^2.2.0" denodeify "^1.2.1" eventemitter3 "^3.0.0" - fbjs "^0.8.14" + fbjs "^1.0.0" fs-extra "^1.0.0" graceful-fs "^4.1.3" image-size "^0.6.0" - jest-docblock "22.4.0" - jest-haste-map "22.4.2" - jest-worker "22.2.2" + invariant "^2.2.4" + jest-haste-map "24.0.0-alpha.6" + jest-worker "24.0.0-alpha.6" json-stable-stringify "^1.0.1" - json5 "^0.4.0" - left-pad "^1.1.3" lodash.throttle "^4.1.1" merge-stream "^1.0.1" - metro-babylon7 "0.30.2" - metro-cache "0.30.2" - metro-core "0.30.2" - metro-minify-uglify "0.30.2" - metro-resolver "0.30.2" - metro-source-map "0.30.2" + metro-babel-transformer "0.51.1" + metro-cache "0.51.1" + metro-config "0.51.1" + metro-core "0.51.1" + metro-minify-uglify "0.51.1" + metro-react-native-babel-preset "0.51.1" + metro-resolver "0.51.1" + metro-source-map "0.51.1" mime-types "2.1.11" mkdirp "^0.5.1" - node-fetch "^1.3.3" + node-fetch "^2.2.0" + nullthrows "^1.1.0" + react-transform-hmr "^1.0.4" resolve "^1.5.0" rimraf "^2.5.4" serialize-error "^2.1.0" @@ -7088,7 +7279,7 @@ metro@^0.30.0: throat "^4.1.0" wordwrap "^1.0.0" write-file-atomic "^1.2.0" - ws "^1.1.0" + ws "^1.1.5" xpipe "^1.0.5" yargs "^9.0.0" @@ -7169,7 +7360,7 @@ mimic-fn@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== -mimic-fn@^2.0.0, mimic-fn@^2.1.0: +mimic-fn@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== @@ -7297,11 +7488,6 @@ mute-stream@0.0.7: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - nan@^2.12.1: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" @@ -7360,7 +7546,7 @@ node-emoji@^1.0.3: dependencies: lodash.toarray "^4.4.0" -node-fetch@^1.0.1, node-fetch@^1.3.3: +node-fetch@^1.0.1: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== @@ -7368,6 +7554,11 @@ node-fetch@^1.0.1, node-fetch@^1.3.3: encoding "^0.1.11" is-stream "^1.0.1" +node-fetch@^2.2.0: + version "2.6.0" + resolved "https://registry.npm.taobao.org/node-fetch/download/node-fetch-2.6.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-fetch%2Fdownload%2Fnode-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" + integrity sha1-5jNFY4bUqlWGP2dqerDaqP3ssP0= + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -7562,6 +7753,11 @@ npmlog@^4.0.2: gauge "~2.7.3" set-blocking "~2.0.0" +nullthrows@^1.1.0: + version "1.1.1" + resolved "https://registry.npm.taobao.org/nullthrows/download/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" + integrity sha1-eBgliEOFaulx6uQgitfX6xmkMbE= + num2fraction@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" @@ -7707,13 +7903,6 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" -onetime@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" - integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== - dependencies: - mimic-fn "^2.1.0" - opn@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/opn/-/opn-3.0.3.tgz#b6d99e7399f78d65c3baaffef1fb288e9b85243a" @@ -7798,14 +7987,6 @@ os-locale@^3.1.0: lcid "^2.0.0" mem "^4.0.0" -os-name@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/os-name/-/os-name-2.0.1.tgz#b9a386361c17ae3a21736ef0599405c9a8c5dc5e" - integrity sha1-uaOGNhwXrjohc27wWZQFyajF3F4= - dependencies: - macos-release "^1.0.0" - win-release "^1.0.0" - os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -8055,11 +8236,6 @@ path-type@^3.0.0: dependencies: pify "^3.0.0" -pegjs@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/pegjs/-/pegjs-0.10.0.tgz#cf8bafae6eddff4b5a7efb185269eaaf4610ddbd" - integrity sha1-z4uvrm7d/0tafvsYUmnqr0YQ3b0= - pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" @@ -8130,23 +8306,13 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" -plist@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/plist/-/plist-2.0.1.tgz#0a32ca9481b1c364e92e18dc55c876de9d01da8b" - integrity sha1-CjLKlIGxw2TpLhjcVch23p0B2os= - dependencies: - base64-js "1.1.2" - xmlbuilder "8.2.2" - xmldom "0.1.x" - -plist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/plist/-/plist-1.2.0.tgz#084b5093ddc92506e259f874b8d9b1afb8c79593" - integrity sha1-CEtQk93JJQbiWfh0uNmxr7jHlZM= +plist@^3.0.0, plist@^3.0.1: + version "3.0.1" + resolved "https://registry.npm.taobao.org/plist/download/plist-3.0.1.tgz#a9b931d17c304e8912ef0ba3bdd6182baf2e1f8c" + integrity sha1-qbkx0XwwTokS7wujvdYYK68uH4w= dependencies: - base64-js "0.0.8" - util-deprecate "1.0.2" - xmlbuilder "4.0.0" + base64-js "^1.2.3" + xmlbuilder "^9.0.7" xmldom "0.1.x" plugin-error@^0.1.2: @@ -8204,15 +8370,13 @@ postcss-modules-extract-imports@^1.1.0: dependencies: postcss "^6.0.1" -postcss-modules-local-by-default@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz#e8a6561be914aaf3c052876377524ca90dbb7915" - integrity sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ== +postcss-modules-local-by-default@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" + integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk= dependencies: - icss-utils "^4.1.1" - postcss "^7.0.16" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.0.0" + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" postcss-modules-resolve-imports@^1.3.0: version "1.3.0" @@ -8231,13 +8395,13 @@ postcss-modules-scope@^1.1.0: css-selector-tokenizer "^0.7.0" postcss "^6.0.1" -postcss-modules-values@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" - integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== +postcss-modules-values@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" + integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA= dependencies: - icss-utils "^4.0.0" - postcss "^7.0.6" + icss-replace-symbols "^1.1.0" + postcss "^6.0.1" postcss-pxtorem@^4.0.1: version "4.0.1" @@ -8247,10 +8411,10 @@ postcss-pxtorem@^4.0.1: object-assign "^4.1.0" postcss "^5.2.10" -postcss-pxtransform@1.3.29: - version "1.3.29" - resolved "https://registry.yarnpkg.com/postcss-pxtransform/-/postcss-pxtransform-1.3.29.tgz#909740e7362175375905cedfec460dbd9678ba16" - integrity sha512-p6gdtDVaHfAebw9M0EFj2rqcPf9jOF5hSmxxRZVDxaNlom7A4Ou5u8DGW2sgwO6gEDey1PColxdPcMQ7Vk24Rw== +postcss-pxtransform@2.0.0-beta.13: + version "2.0.0-beta.13" + resolved "https://registry.npm.taobao.org/postcss-pxtransform/download/postcss-pxtransform-2.0.0-beta.13.tgz?cache=0&sync_timestamp=1577772263445&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-pxtransform%2Fdownload%2Fpostcss-pxtransform-2.0.0-beta.13.tgz#14777ccc07ec1201a30a27fc9298dd7e00dfa3fb" + integrity sha1-FHd8zAfsEgGjCif8kpjdfgDfo/s= dependencies: postcss "^6.0.16" postcss-pxtorem "^4.0.1" @@ -8311,15 +8475,6 @@ postcss-selector-parser@^3.1.0: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-selector-parser@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" - integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== - dependencies: - cssesc "^3.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - postcss-syntax@^0.28.0: version "0.28.0" resolved "https://registry.yarnpkg.com/postcss-syntax/-/postcss-syntax-0.28.0.tgz#e17572a7dcf5388f0c9b68232d2dad48fa7f0b12" @@ -8348,7 +8503,7 @@ postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== -postcss@7.x.x, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.6, postcss@^7.0.7: +postcss@7.x.x, postcss@^7.0.1, postcss@^7.0.7: version "7.0.24" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.24.tgz#972c3c5be431b32e40caefe6c81b5a19117704c2" integrity sha512-Xl0XvdNWg+CblAXzNvbSOUvgJXwSjmbAKORqyw9V2AlHrm1js2gFw9y3jibBAhpKZi8b5JzJCVh/FyzPsTtgTA== @@ -8409,6 +8564,14 @@ prettier@^1.14.2, prettier@^1.16.4: resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== +pretty-format@24.0.0-alpha.6: + version "24.0.0-alpha.6" + resolved "https://registry.npm.taobao.org/pretty-format/download/pretty-format-24.0.0-alpha.6.tgz#25ad2fa46b342d6278bf241c5d2114d4376fbac1" + integrity sha1-Ja0vpGs0LWJ4vyQcXSEU1DdvusE= + dependencies: + ansi-regex "^4.0.0" + ansi-styles "^3.2.0" + pretty-format@^23.6.0: version "23.6.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760" @@ -8417,11 +8580,6 @@ pretty-format@^23.6.0: ansi-regex "^3.0.0" ansi-styles "^3.2.0" -pretty-format@^4.2.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-4.3.1.tgz#530be5c42b3c05b36414a7a2a4337aa80acd0e8d" - integrity sha1-UwvlxCs8BbNkFKeipDN6qArNDo0= - private@^0.1.6, private@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -8569,13 +8727,13 @@ react-deep-force-update@^1.0.0: resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.1.2.tgz#3d2ae45c2c9040cbb1772be52f8ea1ade6ca2ee1" integrity sha512-WUSQJ4P/wWcusaH+zZmbECOk7H5N2pOIl0vzheeornkIMhu+qrNdGFm0bDZLCb0hSF0jf/kH1SgkNGfBdTc4wA== -react-devtools-core@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-3.1.0.tgz#eec2e9e0e6edb77772e2bfc7d286a296f55a261a" - integrity sha512-fO6SmpW16E9u6Lb6zQOHrjhJXGBNz+cJ0/a9cSF55nXfL0sQLlvYJR8DpU7f4rMUrVnVineg4XQyYYBZicmhJg== +react-devtools-core@^3.6.0: + version "3.6.3" + resolved "https://registry.npm.taobao.org/react-devtools-core/download/react-devtools-core-3.6.3.tgz#977d95b684c6ad28205f0c62e1e12c5f16675814" + integrity sha1-l32VtoTGrSggXwxi4eEsXxZnWBQ= dependencies: shell-quote "^1.6.1" - ws "^2.0.3" + ws "^3.3.1" react-is@^16.8.1: version "16.11.0" @@ -8587,68 +8745,59 @@ react-native-known-styling-properties@^1.0.4: resolved "https://registry.yarnpkg.com/react-native-known-styling-properties/-/react-native-known-styling-properties-1.0.5.tgz#dd99690d579c5136541e1df836e75088af6e7356" integrity sha512-PKRW5v9Um2/7mIaUy2fxg3XugP/QyVoqnzpnkY6AUTIlfyC2c/PeEhDwEVJgTotWiFCIj2lUACQ2lsG5zp0NUQ== -react-native@^0.55.4: - version "0.55.4" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.55.4.tgz#eecffada3750a928e2ddd07cf11d857ae9751c30" - integrity sha512-J6U2KeuFIfH0I6kbwymQWe7Yw7AVzPq22tq6z5VmvcYQiKbqKkvjJukgHqR6keRreHjohEaWP5Gi007IGFJdyQ== +react-native@^0.59.9: + version "0.59.10" + resolved "https://registry.npm.taobao.org/react-native/download/react-native-0.59.10.tgz?cache=0&sync_timestamp=1576689336916&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-native%2Fdownload%2Freact-native-0.59.10.tgz#352f381e382f93a0403be499c9e384bf51c2591c" + integrity sha1-NS84Hjgvk6BAO+SZyeOEv1HCWRw= dependencies: + "@babel/runtime" "^7.0.0" + "@react-native-community/cli" "^1.2.1" absolute-path "^0.0.0" art "^0.10.0" - babel-core "^6.24.1" - babel-plugin-syntax-trailing-function-commas "^6.20.0" - babel-plugin-transform-async-to-generator "6.16.0" - babel-plugin-transform-class-properties "^6.18.0" - babel-plugin-transform-exponentiation-operator "^6.5.0" - babel-plugin-transform-flow-strip-types "^6.21.0" - babel-plugin-transform-object-rest-spread "^6.20.2" - babel-register "^6.24.1" - babel-runtime "^6.23.0" base64-js "^1.1.2" - chalk "^1.1.1" + chalk "^2.4.1" commander "^2.9.0" compression "^1.7.1" connect "^3.6.5" create-react-class "^15.6.3" debug "^2.2.0" denodeify "^1.2.1" - envinfo "^3.0.0" errorhandler "^1.5.0" - eslint-plugin-react-native "^3.2.1" + escape-string-regexp "^1.0.5" event-target-shim "^1.0.5" - fbjs "^0.8.14" - fbjs-scripts "^0.8.1" + fbjs "^1.0.0" + fbjs-scripts "^1.0.0" fs-extra "^1.0.0" glob "^7.1.1" graceful-fs "^4.1.3" inquirer "^3.0.6" + invariant "^2.2.4" lodash "^4.17.5" - metro "^0.30.0" - metro-core "^0.30.0" + metro-babel-register "0.51.0" + metro-react-native-babel-transformer "0.51.0" mime "^1.3.4" minimist "^1.2.0" mkdirp "^0.5.1" morgan "^1.9.0" - node-fetch "^1.3.3" + node-fetch "^2.2.0" node-notifier "^5.2.1" npmlog "^2.0.4" + nullthrows "^1.1.0" opn "^3.0.2" optimist "^0.6.1" - plist "^1.2.0" - pretty-format "^4.2.1" + plist "^3.0.0" + pretty-format "24.0.0-alpha.6" promise "^7.1.1" prop-types "^15.5.8" react-clone-referenced-element "^1.0.1" - react-devtools-core "3.1.0" - react-timer-mixin "^0.13.2" + react-devtools-core "^3.6.0" regenerator-runtime "^0.11.0" rimraf "^2.5.4" semver "^5.0.3" serve-static "^1.13.1" shell-quote "1.6.1" stacktrace-parser "^0.1.3" - whatwg-fetch "^1.0.0" - ws "^1.1.0" - xcode "^0.9.1" + ws "^1.1.5" xmldoc "^0.4.0" yargs "^9.0.0" @@ -8660,11 +8809,6 @@ react-proxy@^1.1.7: lodash "^4.6.1" react-deep-force-update "^1.0.0" -react-timer-mixin@^0.13.2: - version "0.13.4" - resolved "https://registry.yarnpkg.com/react-timer-mixin/-/react-timer-mixin-0.13.4.tgz#75a00c3c94c13abe29b43d63b4c65a88fc8264d3" - integrity sha512-4+ow23tp/Tv7hBM5Az5/Be/eKKF7DIvJ09voz5LyHGQaqqz9WV8YMs31eFvcYQs7d451LSg7kDJV70XYN/Ug/Q== - react-transform-hmr@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/react-transform-hmr/-/react-transform-hmr-1.0.4.tgz#e1a40bd0aaefc72e8dfd7a7cda09af85066397bb" @@ -8794,7 +8938,14 @@ redent@^2.0.0: indent-string "^3.0.0" strip-indent "^2.0.0" -regenerate@^1.2.1: +regenerate-unicode-properties@^8.1.0: + version "8.1.0" + resolved "https://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" + integrity sha1-71Hg8OpK1CS3e/fLQfPgFccKPw4= + dependencies: + regenerate "^1.4.0" + +regenerate@^1.2.1, regenerate@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== @@ -8863,6 +9014,18 @@ regexpu-core@^2.0.0: regjsgen "^0.2.0" regjsparser "^0.1.4" +regexpu-core@^4.6.0: + version "4.6.0" + resolved "https://registry.npm.taobao.org/regexpu-core/download/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" + integrity sha1-IDfBizJ8/Oim/qKk7EQfJDKvuLY= + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.1.0" + regjsgen "^0.5.0" + regjsparser "^0.6.0" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.1.0" + registry-auth-token@^3.0.1, registry-auth-token@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" @@ -8883,6 +9046,11 @@ regjsgen@^0.2.0: resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= +regjsgen@^0.5.0: + version "0.5.1" + resolved "https://registry.npm.taobao.org/regjsgen/download/regjsgen-0.5.1.tgz?cache=0&sync_timestamp=1571560410206&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregjsgen%2Fdownload%2Fregjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" + integrity sha1-SPC/Gl6iBRlpKcDZeYtC0e2YRDw= + regjsparser@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" @@ -8890,6 +9058,13 @@ regjsparser@^0.1.4: dependencies: jsesc "~0.5.0" +regjsparser@^0.6.0: + version "0.6.2" + resolved "https://registry.npm.taobao.org/regjsparser/download/regjsparser-0.6.2.tgz?cache=0&sync_timestamp=1576908177912&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregjsparser%2Fdownload%2Fregjsparser-0.6.2.tgz#fd62c753991467d9d1ffe0a9f67f27a529024b96" + integrity sha1-/WLHU5kUZ9nR/+Cp9n8npSkCS5Y= + dependencies: + jsesc "~0.5.0" + remark-parse@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-5.0.0.tgz#4c077f9e499044d1d5c13f80d7a98cf7b9285d95" @@ -9105,6 +9280,13 @@ resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.3. dependencies: path-parse "^1.0.6" +resolve@^1.8.1: + version "1.14.1" + resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.14.1.tgz?cache=0&sync_timestamp=1577139902451&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.14.1.tgz#9e018c540fcf0c427d678b9931cbf45e984bcaff" + integrity sha1-ngGMVA/PDEJ9Z4uZMcv0XphLyv8= + dependencies: + path-parse "^1.0.6" + responselike@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" @@ -9128,14 +9310,6 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -9196,6 +9370,13 @@ rx-lite@^3.1.2: resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" integrity sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI= +rxjs@^5.5.2: + version "5.5.12" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc" + integrity sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw== + dependencies: + symbol-observable "1.0.1" + rxjs@^6.4.0: version "6.5.3" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" @@ -9213,11 +9394,6 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== -safe-buffer@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" - integrity sha1-0mPKVGls2KMGtcplUekt5XkY++c= - safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -9246,6 +9422,23 @@ sane@^2.0.0: optionalDependencies: fsevents "^1.2.3" +sane@^3.0.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/sane/download/sane-3.1.0.tgz#995193b7dc1445ef1fe41ddfca2faf9f111854c6" + integrity sha1-mVGTt9wURe8f5B3fyi+vnxEYVMY= + dependencies: + anymatch "^2.0.0" + capture-exit "^1.2.0" + exec-sh "^0.2.0" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.18.0" + optionalDependencies: + fsevents "^1.2.3" + sax@>=0.6.0, sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -9270,7 +9463,7 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" -"semver@2 || 3 || 4 || 5", semver@5.x, semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -9385,14 +9578,14 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= -simple-plist@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-0.2.1.tgz#71766db352326928cf3a807242ba762322636723" - integrity sha1-cXZts1IyaSjPOoByQrp2IyJjZyM= +simple-plist@^1.0.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/simple-plist/download/simple-plist-1.1.0.tgz?cache=0&sync_timestamp=1573092499539&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsimple-plist%2Fdownload%2Fsimple-plist-1.1.0.tgz#8354ab63eb3922a054c78ce96c209c532e907a23" + integrity sha1-g1SrY+s5IqBUx4zpbCCcUy6QeiM= dependencies: - bplist-creator "0.0.7" - bplist-parser "0.1.1" - plist "2.0.1" + bplist-creator "0.0.8" + bplist-parser "0.2.0" + plist "^3.0.1" sisteransi@^0.1.1: version "0.1.1" @@ -9404,6 +9597,11 @@ slash@^1.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q= + slice-ansi@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" @@ -9494,7 +9692,15 @@ source-map-support@^0.4.15: dependencies: source-map "^0.5.6" -source-map-support@^0.5.6, source-map-support@^0.5.9: +source-map-support@^0.5.16: + version "0.5.16" + resolved "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.16.tgz?cache=0&sync_timestamp=1572389965235&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-support%2Fdownload%2Fsource-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" + integrity sha1-CuBp5/47p1OMZMmFFeNTOerFoEI= + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@^0.5.6: version "0.5.13" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== @@ -9664,15 +9870,6 @@ string-width@^3.0.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string-width@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - string.prototype.padend@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz#f3aaef7c1719f170c5eab1c32bf780d96e21f2f0" @@ -9743,13 +9940,6 @@ strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - strip-bom-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz#f87db5ef2613f6968aa545abfe1ec728b6a829ca" @@ -9816,15 +10006,15 @@ style-search@^0.1.0: resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" integrity sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI= -stylelint-config-taro-rn@1.3.29: - version "1.3.29" - resolved "https://registry.yarnpkg.com/stylelint-config-taro-rn/-/stylelint-config-taro-rn-1.3.29.tgz#1799cab68ad57ab10d552ba64989c3cf45bfd1f7" - integrity sha512-P7GQajFb34iCIJRSvXN0Zp88R8T24xH/73A4FdM3iS54HiCFTex566oFxd5I+A4BiVeSEaNQxjrBW1HROVDMdw== +stylelint-config-taro-rn@2.0.0-beta.13: + version "2.0.0-beta.13" + resolved "https://registry.npm.taobao.org/stylelint-config-taro-rn/download/stylelint-config-taro-rn-2.0.0-beta.13.tgz?cache=0&sync_timestamp=1577772270072&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstylelint-config-taro-rn%2Fdownload%2Fstylelint-config-taro-rn-2.0.0-beta.13.tgz#bfd885b1439bde672b18eadf88308b347530eebe" + integrity sha1-v9iFsUOb3mcrGOrfiDCLNHUw7r4= -stylelint-taro-rn@1.3.29: - version "1.3.29" - resolved "https://registry.yarnpkg.com/stylelint-taro-rn/-/stylelint-taro-rn-1.3.29.tgz#b4a7c76e226f30f256dff7b5b0cd52831c630b51" - integrity sha512-3vcYCc0IJpSQcKjjFV1ssvySlDMq64jILs2PfA+udeai3k/JME4XttEiFLf3/qgOFHHTtDpDoaLAYbBpXdYaig== +stylelint-taro-rn@2.0.0-beta.13: + version "2.0.0-beta.13" + resolved "https://registry.npm.taobao.org/stylelint-taro-rn/download/stylelint-taro-rn-2.0.0-beta.13.tgz?cache=0&sync_timestamp=1577772270269&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstylelint-taro-rn%2Fdownload%2Fstylelint-taro-rn-2.0.0-beta.13.tgz#efcb6c9d38c4eecdf27bf36e599694265f43fc80" + integrity sha1-78tsnTjE7s3ye/NuWZaUJl9D/IA= dependencies: react-native-known-styling-properties "^1.0.4" @@ -9915,6 +10105,11 @@ svg-tags@^1.0.0: resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= +symbol-observable@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" + integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ= + symbol-tree@^3.2.2: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" @@ -9942,6 +10137,11 @@ table@^5.2.3: slice-ansi "^2.1.0" string-width "^3.0.0" +tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + tar-stream@^1.5.2: version "1.6.2" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" @@ -9968,10 +10168,10 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.3" -taro-css-to-react-native@1.3.29: - version "1.3.29" - resolved "https://registry.yarnpkg.com/taro-css-to-react-native/-/taro-css-to-react-native-1.3.29.tgz#bd7184ad2eb0c988fbf0235887154e05b43c63d3" - integrity sha512-Mw55enyS7Sca+L6Kc+z3x7RVGZeCOqDyS04FEXIXBL3kcCu0hKuPd5A79Hz99atTXjf7mpPdAGIgH5tpCrdDxQ== +taro-css-to-react-native@2.0.0-beta.13: + version "2.0.0-beta.13" + resolved "https://registry.npm.taobao.org/taro-css-to-react-native/download/taro-css-to-react-native-2.0.0-beta.13.tgz#3661ec74e4343194a9d1575c7de8a8f1478b1a5d" + integrity sha1-NmHsdOQ0MZSp0Vdcfeio8UeLGl0= dependencies: camelize "^1.0.0" css "^2.2.4" @@ -10283,11 +10483,6 @@ type-fest@^0.7.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -10317,9 +10512,9 @@ uglify-es@^3.1.9: source-map "~0.6.1" uglify-js@^3.1.4: - version "3.6.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.4.tgz#88cc880c6ed5cf9868fdfa0760654e7bed463f1d" - integrity sha512-9Yc2i881pF4BPGhjteCXQNaXx1DCwm3dtOyBaG2hitHjLWOczw/ki8vD1bqyT3u6K0Ms/FpCShkmfg+FtlOfYA== + version "3.7.2" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.2.tgz#cb1a601e67536e9ed094a92dd1e333459643d3f9" + integrity sha512-uhRwZcANNWVLrxLfNFEdltoPNhECUR3lc+UdJoG9CBpMcSnKyWA94tc3eAujB1GcMY5Uwq8ZMp4qWpxWYDQmaA== dependencies: commander "~2.20.3" source-map "~0.6.1" @@ -10355,6 +10550,29 @@ unherit@^1.0.4: inherits "^2.0.1" xtend "^4.0.1" +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha1-JhmADEyCWADv3YNDr33Zkzy+KBg= + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.npm.taobao.org/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha1-jtKjJWmWG86SJ9Cc0/+7j+1fAgw= + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" + integrity sha1-W0tCbgjROoA2Xg1lesemwexGonc= + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.0.5" + resolved "https://registry.npm.taobao.org/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" + integrity sha1-qcxsx85joKMCP8meNBuUQx1AWlc= + unified@^6.0.0: version "6.2.0" resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba" @@ -10515,7 +10733,7 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -util-deprecate@1.0.2, util-deprecate@^1.0.1, util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= @@ -10533,11 +10751,6 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" - integrity sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE= - uuid@^3.3.2: version "3.3.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" @@ -10717,11 +10930,6 @@ whatwg-fetch@>=0.10.0: resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== -whatwg-fetch@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-1.1.1.tgz#ac3c9d39f320c6dce5339969d054ef43dd333319" - integrity sha1-rDydOfMgxtzlM5lp0FTvQ90zMxk= - whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" @@ -10779,13 +10987,6 @@ widest-line@^2.0.0: dependencies: string-width "^2.1.1" -win-release@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/win-release/-/win-release-1.1.1.tgz#5fa55e02be7ca934edfc12665632e849b72e5209" - integrity sha1-X6VeAr58qTTt/BJmVjLoSbcuUgk= - dependencies: - semver "^5.0.1" - wordwrap@^1.0.0, wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" @@ -10841,20 +11042,21 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" -ws@^1.1.0: +ws@^1.1.0, ws@^1.1.5: version "1.1.5" - resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" - integrity sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w== + resolved "https://registry.npm.taobao.org/ws/download/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" + integrity sha1-y9nm514J/F0skAFfIfDECHXg3VE= dependencies: options ">=0.0.5" ultron "1.0.x" -ws@^2.0.3: - version "2.3.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-2.3.1.tgz#6b94b3e447cb6a363f785eaf94af6359e8e81c80" - integrity sha1-a5Sz5EfLajY/eF6vlK9jWejoHIA= +ws@^3.3.1: + version "3.3.3" + resolved "https://registry.npm.taobao.org/ws/download/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + integrity sha1-8c+E/i1ekB686U767OeF8YeiKPI= dependencies: - safe-buffer "~5.0.1" + async-limiter "~1.0.0" + safe-buffer "~5.1.0" ultron "~1.1.0" ws@^5.2.0: @@ -10869,14 +11071,13 @@ x-is-string@^0.1.0: resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI= -xcode@^0.9.1: - version "0.9.3" - resolved "https://registry.yarnpkg.com/xcode/-/xcode-0.9.3.tgz#910a89c16aee6cc0b42ca805a6d0b4cf87211cf3" - integrity sha1-kQqJwWrubMC0LKgFptC0z4chHPM= +xcode@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/xcode/download/xcode-2.1.0.tgz#bab64a7e954bb50ca8d19da7e09531c65a43ecfe" + integrity sha1-urZKfpVLtQyo0Z2n4JUxxlpD7P4= dependencies: - pegjs "^0.10.0" - simple-plist "^0.2.1" - uuid "3.0.1" + simple-plist "^1.0.0" + uuid "^3.3.2" xdg-basedir@^3.0.0: version "3.0.0" @@ -10897,17 +11098,10 @@ xml2js@^0.4.19: util.promisify "~1.0.0" xmlbuilder "~11.0.0" -xmlbuilder@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.0.0.tgz#98b8f651ca30aa624036f127d11cc66dc7b907a3" - integrity sha1-mLj2UcowqmJANvEn0RzGbce5B6M= - dependencies: - lodash "^3.5.0" - -xmlbuilder@8.2.2: - version "8.2.2" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773" - integrity sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M= +xmlbuilder@^9.0.7: + version "9.0.7" + resolved "https://registry.npm.taobao.org/xmlbuilder/download/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= xmlbuilder@~11.0.0: version "11.0.1" diff --git a/packages/taro-components-qa/package.json b/packages/taro-components-qa/package.json index 65f136b8d23a..08ffb64197bd 100644 --- a/packages/taro-components-qa/package.json +++ b/packages/taro-components-qa/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/components-qa", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "多端解决方案基础组件(快应用)", "main": "./index.js", "files": [ diff --git a/packages/taro-components-qa/src/common/css/common.css b/packages/taro-components-qa/src/common/css/common.css new file mode 100644 index 000000000000..b7c99c57c81e --- /dev/null +++ b/packages/taro-components-qa/src/common/css/common.css @@ -0,0 +1,57 @@ +.index { + flex-direction: column; + justify-content: center; + align-items: center; +} + +.secondary { + flex-direction: column; +} + +.plain { + flex-direction: column; + justify-content: center; + align-items: center; +} + +.full { + flex-direction: column; + justify-content: center; + align-items: center; +} + +.small { + flex-direction: row; + justify-content: center; + align-items: center; +} + +.taro-button-txt { + text-overflow: ellipsis; + color: #FFF; + font-size: 36px; +} + +.font { + color: #FFF; + font-size: 30px; + text-align: center; +} + +.txt { + text-align: center; + font-size: 30px; + color: #000000; +} + +.txt-white { + text-align: center; + font-size: 30px; + color: #ffffff; +} + +.txt-blue { + text-align: center; + font-size: 30px; + color: #6190E8; +} \ No newline at end of file diff --git a/packages/taro-components-qa/src/components/taro-button/img.js b/packages/taro-components-qa/src/components/taro-button/img.js deleted file mode 100644 index 619081d152a4..000000000000 --- a/packages/taro-components-qa/src/components/taro-button/img.js +++ /dev/null @@ -1 +0,0 @@ -export default 'data:image/gif;base64,R0lGODlhgACAAKIAAP///93d3bu7u5mZmQAA/wAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFBQAEACwCAAIAfAB8AAAD/0i63P4wygYqmDjrzbtflvWNZGliYXiubKuloivPLlzReD7al+7/Eh5wSFQIi8hHYBkwHUmD6CD5YTJLz49USuVYraRsZ7vtar7XnQ1Kjpoz6LRHvGlz35O4nEPP2O94EnpNc2sef1OBGIOFMId/inB6jSmPdpGScR19EoiYmZobnBCIiZ95k6KGGp6ni4wvqxilrqBfqo6skLW2YBmjDa28r6Eosp27w8Rov8ekycqoqUHODrTRvXsQwArC2NLF29UM19/LtxO5yJd4Au4CK7DUNxPebG4e7+8n8iv2WmQ66BtoYpo/dvfacBjIkITBE9DGlMvAsOIIZjIUAixliv9ixYZVtLUos5GjwI8gzc3iCGghypQqrbFsme8lwZgLZtIcYfNmTJ34WPTUZw5oRxdD9w0z6iOpO15MgTh1BTTJUKos39jE+o/KS64IFVmsFfYT0aU7capdy7at27dw48qdS7eu3bt480I02vUbX2F/JxYNDImw4GiGE/P9qbhxVpWOI/eFKtlNZbWXuzlmG1mv58+gQ4seTbq06dOoU6vGQZJy0FNlMcV+czhQ7SQmYd8eMhPs5BxVdfcGEtV3buDBXQ+fURxx8oM6MT9P+Fh6dOrH2zavc13u9JXVJb520Vp8dvC76wXMuN5Sepm/1WtkEZHDefnzR9Qvsd9+/wi8+en3X0ntYVcSdAE+UN4zs7ln24CaLagghIxBaGF8kFGoIYV+Ybghh841GIyI5ICIFoklJsigihmimJOLEbLYIYwxSgigiZ+8l2KB+Ml4oo/w8dijjcrouCORKwIpnJIjMnkkksalNeR4fuBIm5UEYImhIlsGCeWNNJphpJdSTlkml1jWeOY6TnaRpppUctcmFW9mGSaZceYopH9zkjnjUe59iR5pdapWaGqHopboaYua1qije67GJ6CuJAAAIfkEBQUABAAsCgACAFcAMAAAA/9Iutz+ML5Ag7w46z0r5WAoSp43nihXVmnrdusrv+s332dt4Tyo9yOBUJD6oQBIQGs4RBlHySSKyczVTtHoidocPUNZaZAr9F5FYbGI3PWdQWn1mi36buLKFJvojsHjLnshdhl4L4IqbxqGh4gahBJ4eY1kiX6LgDN7fBmQEJI4jhieD4yhdJ2KkZk8oiSqEaatqBekDLKztBG2CqBACq4wJRi4PZu1sA2+v8C6EJexrBAD1AOBzsLE0g/V1UvYR9sN3eR6lTLi4+TlY1wz6Qzr8u1t6FkY8vNzZTxaGfn6mAkEGFDgL4LrDDJDyE4hEIbdHB6ESE1iD4oVLfLAqPETIsOODwmCDJlv5MSGJklaS6khAQAh+QQFBQAEACwfAAIAVwAwAAAD/0i63P5LSAGrvTjrNuf+YKh1nWieIumhbFupkivPBEzR+GnnfLj3ooFwwPqdAshAazhEGUXJJIrJ1MGOUamJ2jQ9QVltkCv0XqFh5IncBX01afGYnDqD40u2z76JK/N0bnxweC5sRB9vF34zh4gjg4uMjXobihWTlJUZlw9+fzSHlpGYhTminKSepqebF50NmTyor6qxrLO0L7YLn0ALuhCwCrJAjrUqkrjGrsIkGMW/BMEPJcphLgDaABjUKNEh29vdgTLLIOLpF80s5xrp8ORVONgi8PcZ8zlRJvf40tL8/QPYQ+BAgjgMxkPIQ6E6hgkdjoNIQ+JEijMsasNY0RQix4gKP+YIKXKkwJIFF6JMudFEAgAh+QQFBQAEACw8AAIAQgBCAAAD/kg0PPowykmrna3dzXvNmSeOFqiRaGoyaTuujitv8Gx/661HtSv8gt2jlwIChYtc0XjcEUnMpu4pikpv1I71astytkGh9wJGJk3QrXlcKa+VWjeSPZHP4Rtw+I2OW81DeBZ2fCB+UYCBfWRqiQp0CnqOj4J1jZOQkpOUIYx/m4oxg5cuAaYBO4Qop6c6pKusrDevIrG2rkwptrupXB67vKAbwMHCFcTFxhLIt8oUzLHOE9Cy0hHUrdbX2KjaENzey9Dh08jkz8Tnx83q66bt8PHy8/T19vf4+fr6AP3+/wADAjQmsKDBf6AOKjS4aaHDgZMeSgTQcKLDhBYPEswoA1BBAgAh+QQFBQAEACxOAAoAMABXAAAD7Ei6vPOjyUkrhdDqfXHm4OZ9YSmNpKmiqVqykbuysgvX5o2HcLxzup8oKLQQix0UcqhcVo5ORi+aHFEn02sDeuWqBGCBkbYLh5/NmnldxajX7LbPBK+PH7K6narfO/t+SIBwfINmUYaHf4lghYyOhlqJWgqDlAuAlwyBmpVnnaChoqOkpaanqKmqKgGtrq+wsbA1srW2ry63urasu764Jr/CAb3Du7nGt7TJsqvOz9DR0tPU1TIA2ACl2dyi3N/aneDf4uPklObj6OngWuzt7u/d8fLY9PXr9eFX+vv8+PnYlUsXiqC3c6PmUUgAACH5BAUFAAQALE4AHwAwAFcAAAPpSLrc/m7IAau9bU7MO9GgJ0ZgOI5leoqpumKt+1axPJO1dtO5vuM9yi8TlAyBvSMxqES2mo8cFFKb8kzWqzDL7Xq/4LB4TC6bz1yBes1uu9uzt3zOXtHv8xN+Dx/x/wJ6gHt2g3Rxhm9oi4yNjo+QkZKTCgGWAWaXmmOanZhgnp2goaJdpKGmp55cqqusrZuvsJays6mzn1m4uRAAvgAvuBW/v8GwvcTFxqfIycA3zA/OytCl0tPPO7HD2GLYvt7dYd/ZX99j5+Pi6tPh6+bvXuTuzujxXens9fr7YPn+7egRI9PPHrgpCQAAIfkEBQUABAAsPAA8AEIAQgAAA/lIutz+UI1Jq7026h2x/xUncmD5jehjrlnqSmz8vrE8u7V5z/m5/8CgcEgsGo/IpHLJbDqf0Kh0ShBYBdTXdZsdbb/Yrgb8FUfIYLMDTVYz2G13FV6Wz+lX+x0fdvPzdn9WeoJGAYcBN39EiIiKeEONjTt0kZKHQGyWl4mZdREAoQAcnJhBXBqioqSlT6qqG6WmTK+rsa1NtaGsuEu6o7yXubojsrTEIsa+yMm9SL8osp3PzM2cStDRykfZ2tfUtS/bRd3ewtzV5pLo4eLjQuUp70Hx8t9E9eqO5Oku5/ztdkxi90qPg3x2EMpR6IahGocPCxp8AGtigwQAIfkEBQUABAAsHwBOAFcAMAAAA/9Iutz+MMo36pg4682J/V0ojs1nXmSqSqe5vrDXunEdzq2ta3i+/5DeCUh0CGnF5BGULC4tTeUTFQVONYAs4CfoCkZPjFar83rBx8l4XDObSUL1Ott2d1U4yZwcs5/xSBB7dBMBhgEYfncrTBGDW4WHhomKUY+QEZKSE4qLRY8YmoeUfkmXoaKInJ2fgxmpqqulQKCvqRqsP7WooriVO7u8mhu5NacasMTFMMHCm8qzzM2RvdDRK9PUwxzLKdnaz9y/Kt8SyR3dIuXmtyHpHMcd5+jvWK4i8/TXHff47SLjQvQLkU+fG29rUhQ06IkEG4X/Rryp4mwUxSgLL/7IqFETB8eONT6ChCFy5ItqJomES6kgAQAh+QQFBQAEACwKAE4AVwAwAAAD/0i63A4QuEmrvTi3yLX/4MeNUmieITmibEuppCu3sDrfYG3jPKbHveDktxIaF8TOcZmMLI9NyBPanFKJp4A2IBx4B5lkdqvtfb8+HYpMxp3Pl1qLvXW/vWkli16/3dFxTi58ZRcChwIYf3hWBIRchoiHiotWj5AVkpIXi4xLjxiaiJR/T5ehoomcnZ+EGamqq6VGoK+pGqxCtaiiuJVBu7yaHrk4pxqwxMUzwcKbyrPMzZG90NGDrh/JH8t72dq3IN1jfCHb3L/e5ebh4ukmxyDn6O8g08jt7tf26ybz+m/W9GNXzUQ9fm1Q/APoSWAhhfkMAmpEbRhFKwsvCsmosRIHx444PoKcIXKkjIImjTzjkQAAIfkEBQUABAAsAgA8AEIAQgAAA/VIBNz+8KlJq72Yxs1d/uDVjVxogmQqnaylvkArT7A63/V47/m2/8CgcEgsGo/IpHLJbDqf0Kh0Sj0FroGqDMvVmrjgrDcTBo8v5fCZki6vCW33Oq4+0832O/at3+f7fICBdzsChgJGeoWHhkV0P4yMRG1BkYeOeECWl5hXQ5uNIAOjA1KgiKKko1CnqBmqqk+nIbCkTq20taVNs7m1vKAnurtLvb6wTMbHsUq4wrrFwSzDzcrLtknW16tI2tvERt6pv0fi48jh5h/U6Zs77EXSN/BE8jP09ZFA+PmhP/xvJgAMSGBgQINvEK5ReIZhQ3QEMTBLAAAh+QQFBQAEACwCAB8AMABXAAAD50i6DA4syklre87qTbHn4OaNYSmNqKmiqVqyrcvBsazRpH3jmC7yD98OCBF2iEXjBKmsAJsWHDQKmw571l8my+16v+CweEwum8+hgHrNbrvbtrd8znbR73MVfg838f8BeoB7doN0cYZvaIuMjY6PkJGSk2gClgJml5pjmp2YYJ6dX6GeXaShWaeoVqqlU62ir7CXqbOWrLafsrNctjIDwAMWvC7BwRWtNsbGFKc+y8fNsTrQ0dK3QtXAYtrCYd3eYN3c49/a5NVj5eLn5u3s6e7x8NDo9fbL+Mzy9/T5+tvUzdN3Zp+GBAAh+QQJBQAEACwCAAIAfAB8AAAD/0i63P4wykmrvTjrzbv/YCiOZGmeaKqubOu+cCzPdArcQK2TOL7/nl4PSMwIfcUk5YhUOh3M5nNKiOaoWCuWqt1Ou16l9RpOgsvEMdocXbOZ7nQ7DjzTaeq7zq6P5fszfIASAYUBIYKDDoaGIImKC4ySH3OQEJKYHZWWi5iZG0ecEZ6eHEOio6SfqCaqpaytrpOwJLKztCO2jLi1uoW8Ir6/wCHCxMG2x7muysukzb230M6H09bX2Nna29zd3t/g4cAC5OXm5+jn3Ons7eba7vHt2fL16tj2+QL0+vXw/e7WAUwnrqDBgwgTKlzIsKHDh2gGSBwAccHEixAvaqTYcFCjRoYeNyoM6REhyZIHT4o0qPIjy5YTTcKUmHImx5cwE85cmJPnSYckK66sSAAj0aNIkypdyrSp06dQo0qdSrWq1atYs2rdyrWr169gwxZJAAA7' diff --git a/packages/taro-components-qa/src/components/taro-button/index.ux b/packages/taro-components-qa/src/components/taro-button/index.ux index b65dfb3edb07..3d80bfeecbb6 100644 --- a/packages/taro-components-qa/src/components/taro-button/index.ux +++ b/packages/taro-components-qa/src/components/taro-button/index.ux @@ -4,104 +4,189 @@ disabled="{{disabled}}" style="{{customstyle}}" > +
+ +
+
+ +
+ onInit() { + this.btnClass = `taro-button taro-button-${this.type} taro-button-${this.size} ${this.plain ? `taro-button-plain` : `taro-button-noplain`} ${this.disabled ? `taro-button-disabled` : `taro-button-nodisabled`} ${this.circle ? `taro-button-circle` : `taro-button-nocircle`} ${this.className}`; + this.imageClass = `taro-spin taro-spin-${this.size}`; + this.spinType = this.spin; + this.circularClass = `taro-circular taro-circular-${this.type} taro-circular-${this.size}`; + }, + + onclick() {} +}; + border-radius: 7px; + border: 1px solid #AFAFAF; + background-color: #F7F7F7; + } + .taro-button:active { + border-width: 1px; + border-color: lightslategray; + background-color: #F6F6E5; + } + .taro-button-small { + margin-right: 20px; + height: 56px; + width: 116px; + } + .taro-button-full { + border-radius: 0px; + width: 100%; + } + .taro-button-circle { + border-radius: 30px; + } + .taro-button-primary{ + color: #FFF; + border: 1px solid #6190E8; + background-color: #6190E8; + } + .taro-button-primary:active { + color: #FFF; + border: 1px solid #78A4F4; + background-color: #78A4F4; + } + .taro-button-secondary{ + color: #6190E8; + border: 1.5px solid #6190E8; + background-color: #FFF; + } + .taro-button-secondary:active { + color: #6190E8; + border: 1.5px solid #78A4F4; + background-color: #FFF; + } + .taro-button-danger { + background-color: #EF4F4F; + border-color: #EF4F4F; + color: #FFF; + } + .taro-button-danger:active { + background-color: #ab2048; + border-color: #ab2048; + color: #FFF; + } + .taro-button-plain { + opacity: 0.6; + } + .taro-button-disabled { + opacity: 0.3; + } + .taro-spin { + margin-right: 10px; + margin-top: 10px; + height: 60px; + } + .taro-spin-small { + margin-left: 5px; + margin-top: 8px; + margin-bottom: 5px; + height: 40px; + } + .taro-circular { + margin-right: 10px; + margin-left: 60px; + margin-top: 15px; + flex-direction: column; + align-items: center; + height: 50px; + color: #09ba07 + } + .taro-circular-primary { + color: #FFF; + } + .taro-circular-small { + margin-left: 3px; + margin-top: 12px; + margin-bottom: 5px; + height: 32px; + } + \ No newline at end of file diff --git a/packages/taro-components-qa/src/components/taro-page/index.ux b/packages/taro-components-qa/src/components/taro-page/index.ux index 3bd31bcc8cb0..a0ba59ca9558 100644 --- a/packages/taro-components-qa/src/components/taro-page/index.ux +++ b/packages/taro-components-qa/src/components/taro-page/index.ux @@ -64,6 +64,13 @@ ` + } + }) + if (hitScriptItem) { + delete compilation.assets[hitScriptItem] + } + const quickappJSON = generateQuickAppManifest({ + appConfig: this.appConfig, + designWidth: this.options.designWidth, + pageConfigs: this.pageConfigs, + quickappJSON: this.options.quickappJSON + }) + const quickappJSONStr = JSON.stringify(quickappJSON).replace(/\\\\/g, '/') + compilation.assets['./manifest.json'] = { + size: () => quickappJSONStr.length, + source: () => quickappJSONStr + } + } + if (template && ( + !this.changedFile + || this.changedFile === item + || this.changedFileType === PARSE_AST_TYPE.ENTRY + || Array.from(this.addedComponents).some(component => component.path === item))) { + compilation.assets[templatePath] = { + size: () => template!.length, + source: () => template + } + } + if (itemInfo.style) { + compilation.assets[stylePath] = { + size: () => itemInfo.style!.length, + source: () => itemInfo.style + } + } + if (itemInfo.taroSelfComponents) { + itemInfo.taroSelfComponents.forEach(item => { + if (fs.existsSync(item.path)) { + const content = fs.readFileSync(item.path).toString() + let relativePath + if (NODE_MODULES_REG.test(item.path)) { + relativePath = item.path.replace(this.context, '').replace(/node_modules/gi, 'npm') + } else { + relativePath = item.path.replace(this.sourceDir, '') + } + compilation.assets[relativePath] = { + size: () => content.length, + source: () => content + } + } + }) + } + }) + + this.tabBarIcons.forEach(icon => { + const iconPath = path.resolve(this.sourceDir, icon) + if (fs.existsSync(iconPath)) { + const iconStat = fs.statSync(iconPath) + const iconSource = fs.readFileSync(iconPath) + compilation.assets[icon] = { + size: () => iconStat.size, + source: () => iconSource + } + } + }) + + this.quickappStyleFiles.forEach(item => { + if (fs.existsSync(item.path)) { + const styleContent = fs.readFileSync(item.path).toString() + let relativePath + if (NODE_MODULES_REG.test(item.path)) { + relativePath = item.path.replace(this.context, '').replace(/node_modules/gi, 'npm').replace(/\\\\/g, '/') + } + else { + relativePath = item.path.replace(this.sourceDir, '').replace(/\\\\/g, '/') + } + compilation.assets[relativePath] = { + size: () => styleContent.length, + source: () => styleContent + } + } + }) + } + + addTarBarFilesToDependencies (compilation: webpack.compilation.Compilation) { + const { fileDependencies } = compilation + this.tabBarIcons.forEach(icon => { + if (!fileDependencies.has(icon)) { + fileDependencies.add(icon) + } + }) + } + + transferFileContent (compiler: webpack.Compiler) { + Object.keys(taroFileTypeMap).forEach(item => { + const relativePath = item.replace(compiler.context, '') + const itemInfo = taroFileTypeMap[item] + if (typeof itemInfo.code === 'string') { + new VirtualModulePlugin({ + moduleName: relativePath, + contents: itemInfo.code + }).apply(compiler) + } + }) + } + + run (compiler: webpack.Compiler) { + this.errors = [] + if (!this.options.isBuildPlugin) { + this.getPages(compiler) + this.getComponents(compiler, this.pages, true) + this.addEntries(compiler) + } else { + this.getPluginFiles(compiler) + } + this.transferFileContent(compiler) + } + + watchRun (compiler: webpack.Compiler, changedFiles: string[]) { + const changedFile = changedFiles[0] + this.isWatch = true + if (REG_SCRIPTS.test(changedFile)) { + this.changedFile = changedFile + let { type, obj } = this.getChangedFileInfo(changedFile) + if (!type) { + const code = fs.readFileSync(changedFile).toString() + const isTaroComponentRes = isFileToBeTaroComponent(code, changedFile, this.options.buildAdapter) + if (isTaroComponentRes.isTaroComponent) { + type = PARSE_AST_TYPE.COMPONENT + obj = { + name: changedFile.replace(this.sourceDir, '').replace(path.extname(changedFile), ''), + path: changedFile, + isNative: this.isNativePageOrComponent(this.getTemplatePath(changedFile), code) + } + } + } + this.changedFileType = type + if (this.changedFileType === PARSE_AST_TYPE.ENTRY + || this.changedFileType === PARSE_AST_TYPE.PAGE + || this.changedFileType === PARSE_AST_TYPE.COMPONENT) { + this.components.forEach(component => { + if (component.path === changedFile) { + this.components.delete(component) + } + }) + this.errors = [] + if (this.changedFileType === PARSE_AST_TYPE.ENTRY) { + this.run(compiler) + } else { + if (!this.options.isBuildPlugin) { + this.getComponents(compiler, new Set([obj]), this.changedFileType === PARSE_AST_TYPE.PAGE) + if (this.addedComponents.size) { + this.addedComponents.forEach(item => { + if (item.isNative) { + this.addEntry(compiler, item.path, item.name, PARSE_AST_TYPE.NORMAL) + } else { + this.addEntry(compiler, item.path, item.name, PARSE_AST_TYPE.COMPONENT) + } + }) + } + } else { + this.getPluginFiles(compiler) + } + this.transferFileContent(compiler) + } + if (!this.components.has(obj)) { + this.components.add(obj) + } + } + } + } + + getChangedFileInfo (filePath) { + let type + let obj + this.pages.forEach(page => { + if (page.path === filePath) { + type = PARSE_AST_TYPE.PAGE + obj = page + } + }) + this.components.forEach(component => { + if (component.path === filePath) { + type = PARSE_AST_TYPE.COMPONENT + obj = component + } + }) + if (filePath === this.appEntry) { + type = PARSE_AST_TYPE.ENTRY + } + return { + type, + obj + } + } + + getTargetFilePath (filePath, targetExtname) { + const extname = path.extname(filePath) + if (extname) { + return filePath.replace(extname, targetExtname) + } + return filePath + targetExtname + } + + getTemplatePath (filePath) { + return this.getTargetFilePath(filePath, MINI_APP_FILES[this.options.buildAdapter].TEMPL) + } + + getConfigPath (filePath) { + return this.getTargetFilePath(filePath, MINI_APP_FILES[this.options.buildAdapter].CONFIG) + } + + getStylePath (filePath) { + return this.getTargetFilePath(filePath, MINI_APP_FILES[this.options.buildAdapter].STYLE) + } + + static getTaroFileTypeMap () { + return taroFileTypeMap + } +} diff --git a/packages/taro-mini-runner/src/plugins/TaroLoadChunksPlugin.ts b/packages/taro-mini-runner/src/plugins/TaroLoadChunksPlugin.ts new file mode 100644 index 000000000000..3bd632eaf7d7 --- /dev/null +++ b/packages/taro-mini-runner/src/plugins/TaroLoadChunksPlugin.ts @@ -0,0 +1,93 @@ +import * as path from 'path' + +import webpack, { compilation } from 'webpack' +import { ConcatSource } from 'webpack-sources' +import { urlToRequest } from 'loader-utils' + +import { PARSE_AST_TYPE, REG_STYLE, BUILD_TYPES } from '../utils/constants' +import { promoteRelativePath } from '../utils' + +const PLUGIN_NAME = 'TaroLoadChunksPlugin' + +interface IOptions { + commonChunks: string[], + buildAdapter: BUILD_TYPES, + isBuildPlugin: boolean +} + +export default class TaroLoadChunksPlugin { + commonChunks: string[] + buildAdapter: BUILD_TYPES + isBuildPlugin: boolean + + constructor (options: IOptions) { + this.commonChunks = options.commonChunks + this.buildAdapter = options.buildAdapter + this.isBuildPlugin = options.isBuildPlugin + } + + apply (compiler: webpack.Compiler) { + compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation: any) => { + let commonChunks + compilation.hooks.afterOptimizeChunks.tap(PLUGIN_NAME, (chunks: compilation.Chunk[]) => { + commonChunks = chunks.filter(chunk => this.commonChunks.includes(chunk.name)).reverse() + }) + compilation.chunkTemplate.hooks.renderWithEntry.tap(PLUGIN_NAME, (modules, chunk) => { + if (chunk.entryModule) { + if (this.isBuildPlugin) { + return addRequireToSource(getIdOrName(chunk), modules, commonChunks) + } + let entryModule = chunk.entryModule.rootModule ? chunk.entryModule.rootModule : chunk.entryModule + if (entryModule.miniType === PARSE_AST_TYPE.ENTRY) { + compilation.hooks.afterOptimizeAssets.tap(PLUGIN_NAME, assets => { + const files = chunk.files + files.forEach(item => { + if (REG_STYLE.test(item)) { + const source = new ConcatSource() + const _source = assets[item]._source || assets[item]._value + Object.keys(assets).forEach(assetName => { + const fileName = path.basename(assetName, path.extname(assetName)) + if (REG_STYLE.test(assetName) && this.commonChunks.includes(fileName)) { + source.add(`@import ${JSON.stringify(urlToRequest(assetName))};`) + source.add('\n') + source.add(_source) + if (assets[item]._source) { + assets[item]._source = source + } else { + assets[item]._value = source.source() + } + } + }) + } + }) + }) + return addRequireToSource(getIdOrName(chunk), modules, commonChunks) + } + if ((this.buildAdapter === BUILD_TYPES.QUICKAPP) && + (entryModule.miniType === PARSE_AST_TYPE.PAGE || + entryModule.miniType === PARSE_AST_TYPE.COMPONENT)) { + return addRequireToSource(getIdOrName(chunk), modules, commonChunks) + } + } + }) + }) + } +} + +function getIdOrName (chunk) { + if (typeof chunk.id === 'string') { + return chunk.id + } + return chunk.name +} + +function addRequireToSource (id, modules, commonChunks) { + const source = new ConcatSource() + commonChunks.forEach(chunkItem => { + source.add(`require(${JSON.stringify(promoteRelativePath(path.relative(id, chunkItem.name)))});\n`) + }) + source.add('\n') + source.add(modules) + source.add(';') + return source +} diff --git a/packages/taro-mini-runner/src/plugins/TaroNormalModule.ts b/packages/taro-mini-runner/src/plugins/TaroNormalModule.ts new file mode 100644 index 000000000000..a5f327d7fd9e --- /dev/null +++ b/packages/taro-mini-runner/src/plugins/TaroNormalModule.ts @@ -0,0 +1,12 @@ +import * as NormalModule from 'webpack/lib/NormalModule' +import { PARSE_AST_TYPE } from '../utils/constants' + +export default class TaroNormalModule extends NormalModule { + name: string + miniType: PARSE_AST_TYPE + constructor (data) { + super(data) + this.name = data.name + this.miniType = data.miniType + } +} diff --git a/packages/taro-mini-runner/src/plugins/TaroNormalModulesPlugin.ts b/packages/taro-mini-runner/src/plugins/TaroNormalModulesPlugin.ts new file mode 100644 index 000000000000..7b99d237a959 --- /dev/null +++ b/packages/taro-mini-runner/src/plugins/TaroNormalModulesPlugin.ts @@ -0,0 +1,19 @@ +import webpack from 'webpack' + +import TaroNormalModule from './TaroNormalModule' +import TaroSingleEntryDependency from '../dependencies/TaroSingleEntryDependency' + +const PLUGIN_NAME = 'TaroNormalModulesPlugin' + +export default class TaroNormalModulesPlugin { + apply (compiler: webpack.Compiler) { + compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation, { normalModuleFactory }) => { + normalModuleFactory.hooks.createModule.tap(PLUGIN_NAME, data => { + const dependency = data.dependencies[0] + if (dependency.constructor === TaroSingleEntryDependency) { + return new TaroNormalModule(Object.assign(data, { miniType: dependency.miniType, name: dependency.name })) + } + }) + }) + } +} diff --git a/packages/taro-mini-runner/src/plugins/VirtualModulePlugin/VirtualModulePlugin.ts b/packages/taro-mini-runner/src/plugins/VirtualModulePlugin/VirtualModulePlugin.ts new file mode 100644 index 000000000000..45900d8a2423 --- /dev/null +++ b/packages/taro-mini-runner/src/plugins/VirtualModulePlugin/VirtualModulePlugin.ts @@ -0,0 +1,127 @@ +import * as path from 'path' +import VirtualStats from './virtualStats' +import webpack from 'webpack' + +export default class VirtualModulePlugin { + options: { + moduleName: string + contents: any + path?: string + } + constructor (options) { + this.options = options + } + + apply (compiler: webpack.Compiler) { + const moduleName = this.options.moduleName + const ctime = VirtualModulePlugin.statsDate() + let modulePath = this.options.path + + let contents + if (typeof this.options.contents === 'string') { + contents = this.options.contents + } + if (typeof this.options.contents === 'object') { + if (typeof this.options.contents.then !== 'function') { + contents = JSON.stringify(this.options.contents) + } + } + if (typeof this.options.contents === 'function') { + contents = this.options.contents() + } + if (typeof contents === 'string') { + contents = Promise.resolve(contents) + } + + function resolverPlugin(request, cb) { + // populate the file system cache with the virtual module + const fs = (this && this.fileSystem) || compiler.inputFileSystem + const join = (this && this.join) || path.join + + if (typeof request === 'string') { + request = cb + cb = null + } + + if (!modulePath) { + modulePath = join(compiler.context, moduleName) + } + + const resolve = (data) => { + VirtualModulePlugin.populateFilesystem({ fs, modulePath, contents: data, ctime }) + } + + const resolved = contents.then(resolve) + if (!cb) { + return + } + + resolved.then(() => cb()) + } + + compiler.hooks.normalModuleFactory.tap('VirtualModulePlugin', (nmf) => { + nmf.hooks.beforeResolve.tap('VirtualModulePlugin', resolverPlugin) + }) + } + + static populateFilesystem (options) { + const fs = options.fs + const modulePath = options.modulePath + const contents = options.contents + const mapIsAvailable = typeof Map !== 'undefined' + const statStorageIsMap = mapIsAvailable && fs._statStorage.data instanceof Map + const readFileStorageIsMap = mapIsAvailable && fs._readFileStorage.data instanceof Map + + const stats = VirtualModulePlugin.createStats(options) + if (statStorageIsMap) { // enhanced-resolve@3.4.0 or greater + fs._statStorage.data.set(modulePath, [null, stats]) + } else { // enhanced-resolve@3.3.0 or lower + fs._statStorage.data[modulePath] = [null, stats] + } + if (readFileStorageIsMap) { // enhanced-resolve@3.4.0 or greater + fs._readFileStorage.data.set(modulePath, [null, contents]) + } else { // enhanced-resolve@3.3.0 or lower + fs._readFileStorage.data[modulePath] = [null, contents] + } + } + + static statsDate (inputDate?) { + if (!inputDate) { + inputDate = new Date() + } + return inputDate.toString() + } + + static createStats(options) { + if (!options) { + options = {} + } + if (!options.ctime) { + options.ctime = VirtualModulePlugin.statsDate() + } + if (!options.mtime) { + options.mtime = VirtualModulePlugin.statsDate() + } + if (!options.size) { + options.size = 0 + } + if (!options.size && options.contents) { + options.size = options.contents.length + } + return new VirtualStats({ + dev: 8675309, + nlink: 1, + uid: 501, + gid: 20, + rdev: 0, + blksize: 4096, + ino: 44700000, + mode: 33188, + size: options.size, + atime: options.mtime, + mtime: options.mtime, + ctime: options.ctime, + birthtime: options.ctime, + }) + } +} diff --git a/packages/taro-mini-runner/src/plugins/VirtualModulePlugin/virtualStats.ts b/packages/taro-mini-runner/src/plugins/VirtualModulePlugin/virtualStats.ts new file mode 100644 index 000000000000..459dbbfa74b0 --- /dev/null +++ b/packages/taro-mini-runner/src/plugins/VirtualModulePlugin/virtualStats.ts @@ -0,0 +1,92 @@ +/** + * Used to cache a stats object for the virtual file. + * Extracted from the `mock-fs` package. + * + * @author Tim Schaub http://tschaub.net/ + * @link https://github.com/tschaub/mock-fs/blob/master/lib/binding.js + * @link https://github.com/tschaub/mock-fs/blob/master/license.md + */ + +import * as constants from 'constants' + +export default class VirtualStats { + mode: number + /** + * Create a new stats object. + * @param {Object} config Stats properties. + * @constructor + */ + constructor (config) { + for (const key in config) { + if (!config.hasOwnProperty(key)) { + continue + } + this[key] = config[key] + } + } + + /** + * Check if mode indicates property. + * @param {number} property Property to check. + * @return {boolean} Property matches mode. + */ + _checkModeProperty(property) { + return ((this.mode & constants.S_IFMT) === property) + } + + + /** + * @return {Boolean} Is a directory. + */ + isDirectory() { + return this._checkModeProperty(constants.S_IFDIR) + } + + + /** + * @return {Boolean} Is a regular file. + */ + isFile() { + return this._checkModeProperty(constants.S_IFREG) + } + + + /** + * @return {Boolean} Is a block device. + */ + isBlockDevice() { + return this._checkModeProperty(constants.S_IFBLK) + } + + + /** + * @return {Boolean} Is a character device. + */ + isCharacterDevice() { + return this._checkModeProperty(constants.S_IFCHR) + } + + + /** + * @return {Boolean} Is a symbolic link. + */ + isSymbolicLink() { + return this._checkModeProperty(constants.S_IFLNK) + } + + + /** + * @return {Boolean} Is a named pipe. + */ + isFIFO() { + return this._checkModeProperty(constants.S_IFIFO) + } + + + /** + * @return {Boolean} Is a socket. + */ + isSocket() { + return this._checkModeProperty(constants.S_IFSOCK) + } +} diff --git a/packages/taro-cli/src/quickapp/style-rewriter.ts b/packages/taro-mini-runner/src/quickapp/style-rewriter.ts similarity index 93% rename from packages/taro-cli/src/quickapp/style-rewriter.ts rename to packages/taro-mini-runner/src/quickapp/style-rewriter.ts index 0d076b4e0956..f59ad6a2ab40 100644 --- a/packages/taro-cli/src/quickapp/style-rewriter.ts +++ b/packages/taro-mini-runner/src/quickapp/style-rewriter.ts @@ -7,7 +7,7 @@ interface StyleLog { reason: string; } -export default function rewriter (code, isProduction) { +export default function rewriter (code, isProduction?) { const logs: StyleLog[] = [] const ast = css.parse(code, { silent: true @@ -47,7 +47,7 @@ export default function rewriter (code, isProduction) { // 输出转换结果 try { const resContent = css.stringify(ast, { - compress: isProduction + compress: !!isProduction }) return resContent } catch (e) { diff --git a/packages/taro-cli/src/quickapp/style/declaration/animation/index.ts b/packages/taro-mini-runner/src/quickapp/style/declaration/animation/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/style/declaration/animation/index.ts rename to packages/taro-mini-runner/src/quickapp/style/declaration/animation/index.ts diff --git a/packages/taro-cli/src/quickapp/style/declaration/background/index.ts b/packages/taro-mini-runner/src/quickapp/style/declaration/background/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/style/declaration/background/index.ts rename to packages/taro-mini-runner/src/quickapp/style/declaration/background/index.ts diff --git a/packages/taro-cli/src/quickapp/style/declaration/border/index.ts b/packages/taro-mini-runner/src/quickapp/style/declaration/border/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/style/declaration/border/index.ts rename to packages/taro-mini-runner/src/quickapp/style/declaration/border/index.ts diff --git a/packages/taro-cli/src/quickapp/style/declaration/box/index.ts b/packages/taro-mini-runner/src/quickapp/style/declaration/box/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/style/declaration/box/index.ts rename to packages/taro-mini-runner/src/quickapp/style/declaration/box/index.ts diff --git a/packages/taro-cli/src/quickapp/style/declaration/color/index.ts b/packages/taro-mini-runner/src/quickapp/style/declaration/color/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/style/declaration/color/index.ts rename to packages/taro-mini-runner/src/quickapp/style/declaration/color/index.ts diff --git a/packages/taro-cli/src/quickapp/style/declaration/component/index.ts b/packages/taro-mini-runner/src/quickapp/style/declaration/component/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/style/declaration/component/index.ts rename to packages/taro-mini-runner/src/quickapp/style/declaration/component/index.ts diff --git a/packages/taro-cli/src/quickapp/style/declaration/dimension/index.ts b/packages/taro-mini-runner/src/quickapp/style/declaration/dimension/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/style/declaration/dimension/index.ts rename to packages/taro-mini-runner/src/quickapp/style/declaration/dimension/index.ts diff --git a/packages/taro-cli/src/quickapp/style/declaration/flexbox/index.ts b/packages/taro-mini-runner/src/quickapp/style/declaration/flexbox/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/style/declaration/flexbox/index.ts rename to packages/taro-mini-runner/src/quickapp/style/declaration/flexbox/index.ts diff --git a/packages/taro-cli/src/quickapp/style/declaration/font/index.ts b/packages/taro-mini-runner/src/quickapp/style/declaration/font/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/style/declaration/font/index.ts rename to packages/taro-mini-runner/src/quickapp/style/declaration/font/index.ts diff --git a/packages/taro-cli/src/quickapp/style/declaration/index.ts b/packages/taro-mini-runner/src/quickapp/style/declaration/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/style/declaration/index.ts rename to packages/taro-mini-runner/src/quickapp/style/declaration/index.ts diff --git a/packages/taro-cli/src/quickapp/style/declaration/list/index.ts b/packages/taro-mini-runner/src/quickapp/style/declaration/list/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/style/declaration/list/index.ts rename to packages/taro-mini-runner/src/quickapp/style/declaration/list/index.ts diff --git a/packages/taro-cli/src/quickapp/style/declaration/margin/index.ts b/packages/taro-mini-runner/src/quickapp/style/declaration/margin/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/style/declaration/margin/index.ts rename to packages/taro-mini-runner/src/quickapp/style/declaration/margin/index.ts diff --git a/packages/taro-cli/src/quickapp/style/declaration/padding/index.ts b/packages/taro-mini-runner/src/quickapp/style/declaration/padding/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/style/declaration/padding/index.ts rename to packages/taro-mini-runner/src/quickapp/style/declaration/padding/index.ts diff --git a/packages/taro-cli/src/quickapp/style/declaration/position/index.ts b/packages/taro-mini-runner/src/quickapp/style/declaration/position/index.ts similarity index 89% rename from packages/taro-cli/src/quickapp/style/declaration/position/index.ts rename to packages/taro-mini-runner/src/quickapp/style/declaration/position/index.ts index cfde8621812d..d195fa0e6cdd 100644 --- a/packages/taro-cli/src/quickapp/style/declaration/position/index.ts +++ b/packages/taro-mini-runner/src/quickapp/style/declaration/position/index.ts @@ -30,8 +30,9 @@ export default { 'position': (value, declaration, addDeclaration) => { if (value === 'static') { declaration.value = 'none' - } else if (value === 'absolute') { - return 'E:' + } else if (value === 'absolute' || value === 'relative') { + // https://doc.quickapp.cn/widgets/common-styles.html?h=position + return '' // E: } else if (value !== 'fixed') { return 'I:' } diff --git a/packages/taro-cli/src/quickapp/style/declaration/text/index.ts b/packages/taro-mini-runner/src/quickapp/style/declaration/text/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/style/declaration/text/index.ts rename to packages/taro-mini-runner/src/quickapp/style/declaration/text/index.ts diff --git a/packages/taro-cli/src/quickapp/style/declaration/transform/transform.ts b/packages/taro-mini-runner/src/quickapp/style/declaration/transform/transform.ts similarity index 100% rename from packages/taro-cli/src/quickapp/style/declaration/transform/transform.ts rename to packages/taro-mini-runner/src/quickapp/style/declaration/transform/transform.ts diff --git a/packages/taro-cli/src/quickapp/style/declaration/transition/index.ts b/packages/taro-mini-runner/src/quickapp/style/declaration/transition/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/style/declaration/transition/index.ts rename to packages/taro-mini-runner/src/quickapp/style/declaration/transition/index.ts diff --git a/packages/taro-cli/src/quickapp/style/declaration/visibility/index.ts b/packages/taro-mini-runner/src/quickapp/style/declaration/visibility/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/style/declaration/visibility/index.ts rename to packages/taro-mini-runner/src/quickapp/style/declaration/visibility/index.ts diff --git a/packages/taro-cli/src/quickapp/style/index.ts b/packages/taro-mini-runner/src/quickapp/style/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/style/index.ts rename to packages/taro-mini-runner/src/quickapp/style/index.ts diff --git a/packages/taro-cli/src/quickapp/style/selector/index.ts b/packages/taro-mini-runner/src/quickapp/style/selector/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/style/selector/index.ts rename to packages/taro-mini-runner/src/quickapp/style/selector/index.ts diff --git a/packages/taro-cli/src/quickapp/style/util.ts b/packages/taro-mini-runner/src/quickapp/style/util.ts similarity index 100% rename from packages/taro-cli/src/quickapp/style/util.ts rename to packages/taro-mini-runner/src/quickapp/style/util.ts diff --git a/packages/taro-mini-runner/src/quickapp/template-rewriter.ts b/packages/taro-mini-runner/src/quickapp/template-rewriter.ts new file mode 100644 index 000000000000..d9553a652971 --- /dev/null +++ b/packages/taro-mini-runner/src/quickapp/template-rewriter.ts @@ -0,0 +1,13 @@ +import parseXml from './template/parser' +import rewriteNode from './template/node' +import serialize from './template/serialize' + +export default function rewriterTemplate (code : string): string { + // 解析Code + const viewNodes = parseXml(`${code}`).children + // 解析视图组件 + const retNodes = rewriteNode(viewNodes) + // 生成xml代码 + const templateCode = serialize(retNodes) + return templateCode +} diff --git a/packages/taro-cli/src/quickapp/template/constant.ts b/packages/taro-mini-runner/src/quickapp/template/constant.ts similarity index 100% rename from packages/taro-cli/src/quickapp/template/constant.ts rename to packages/taro-mini-runner/src/quickapp/template/constant.ts diff --git a/packages/taro-cli/src/quickapp/template/node.ts b/packages/taro-mini-runner/src/quickapp/template/node.ts similarity index 100% rename from packages/taro-cli/src/quickapp/template/node.ts rename to packages/taro-mini-runner/src/quickapp/template/node.ts diff --git a/packages/taro-cli/src/quickapp/template/parser.ts b/packages/taro-mini-runner/src/quickapp/template/parser.ts similarity index 100% rename from packages/taro-cli/src/quickapp/template/parser.ts rename to packages/taro-mini-runner/src/quickapp/template/parser.ts diff --git a/packages/taro-cli/src/quickapp/template/serialize.ts b/packages/taro-mini-runner/src/quickapp/template/serialize.ts similarity index 100% rename from packages/taro-cli/src/quickapp/template/serialize.ts rename to packages/taro-mini-runner/src/quickapp/template/serialize.ts diff --git a/packages/taro-cli/src/quickapp/template/tag/index.ts b/packages/taro-mini-runner/src/quickapp/template/tag/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/template/tag/index.ts rename to packages/taro-mini-runner/src/quickapp/template/tag/index.ts diff --git a/packages/taro-cli/src/quickapp/template/tag/span/index.ts b/packages/taro-mini-runner/src/quickapp/template/tag/span/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/template/tag/span/index.ts rename to packages/taro-mini-runner/src/quickapp/template/tag/span/index.ts diff --git a/packages/taro-cli/src/quickapp/template/tag/taro-camera/index.ts b/packages/taro-mini-runner/src/quickapp/template/tag/taro-camera/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/template/tag/taro-camera/index.ts rename to packages/taro-mini-runner/src/quickapp/template/tag/taro-camera/index.ts diff --git a/packages/taro-cli/src/quickapp/template/tag/taro-canvas/index.ts b/packages/taro-mini-runner/src/quickapp/template/tag/taro-canvas/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/template/tag/taro-canvas/index.ts rename to packages/taro-mini-runner/src/quickapp/template/tag/taro-canvas/index.ts diff --git a/packages/taro-cli/src/quickapp/template/tag/taro-image/index.ts b/packages/taro-mini-runner/src/quickapp/template/tag/taro-image/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/template/tag/taro-image/index.ts rename to packages/taro-mini-runner/src/quickapp/template/tag/taro-image/index.ts diff --git a/packages/taro-cli/src/quickapp/template/tag/taro-input/index.ts b/packages/taro-mini-runner/src/quickapp/template/tag/taro-input/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/template/tag/taro-input/index.ts rename to packages/taro-mini-runner/src/quickapp/template/tag/taro-input/index.ts diff --git a/packages/taro-cli/src/quickapp/template/tag/taro-label/index.ts b/packages/taro-mini-runner/src/quickapp/template/tag/taro-label/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/template/tag/taro-label/index.ts rename to packages/taro-mini-runner/src/quickapp/template/tag/taro-label/index.ts diff --git a/packages/taro-cli/src/quickapp/template/tag/taro-map/index.ts b/packages/taro-mini-runner/src/quickapp/template/tag/taro-map/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/template/tag/taro-map/index.ts rename to packages/taro-mini-runner/src/quickapp/template/tag/taro-map/index.ts diff --git a/packages/taro-cli/src/quickapp/template/tag/taro-picker/index.ts b/packages/taro-mini-runner/src/quickapp/template/tag/taro-picker/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/template/tag/taro-picker/index.ts rename to packages/taro-mini-runner/src/quickapp/template/tag/taro-picker/index.ts diff --git a/packages/taro-cli/src/quickapp/template/tag/taro-textarea/index.ts b/packages/taro-mini-runner/src/quickapp/template/tag/taro-textarea/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/template/tag/taro-textarea/index.ts rename to packages/taro-mini-runner/src/quickapp/template/tag/taro-textarea/index.ts diff --git a/packages/taro-cli/src/quickapp/template/tag/taro-video/index.ts b/packages/taro-mini-runner/src/quickapp/template/tag/taro-video/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/template/tag/taro-video/index.ts rename to packages/taro-mini-runner/src/quickapp/template/tag/taro-video/index.ts diff --git a/packages/taro-cli/src/quickapp/template/tag/text/index.ts b/packages/taro-mini-runner/src/quickapp/template/tag/text/index.ts similarity index 100% rename from packages/taro-cli/src/quickapp/template/tag/text/index.ts rename to packages/taro-mini-runner/src/quickapp/template/tag/text/index.ts diff --git a/packages/taro-cli/src/quickapp/template/utils.ts b/packages/taro-mini-runner/src/quickapp/template/utils.ts similarity index 100% rename from packages/taro-cli/src/quickapp/template/utils.ts rename to packages/taro-mini-runner/src/quickapp/template/utils.ts diff --git a/packages/taro-mini-runner/src/utils/astConvert.ts b/packages/taro-mini-runner/src/utils/astConvert.ts new file mode 100644 index 000000000000..8aee0493b42f --- /dev/null +++ b/packages/taro-mini-runner/src/utils/astConvert.ts @@ -0,0 +1,97 @@ +import * as t from 'babel-types' +import generate from 'better-babel-generator' + +import babylonConfig from '../config/babylon' + +const template = require('babel-template') + +export function convertObjectToAstExpression (obj: object): t.ObjectProperty[] { + const objArr = Object.keys(obj).map(key => { + const value = obj[key] + if (typeof value === 'string') { + return t.objectProperty(t.stringLiteral(key), t.stringLiteral(value)) + } + if (typeof value === 'number') { + return t.objectProperty(t.stringLiteral(key), t.numericLiteral(value)) + } + if (typeof value === 'boolean') { + return t.objectProperty(t.stringLiteral(key), t.booleanLiteral(value)) + } + if (Array.isArray(value)) { + return t.objectProperty(t.stringLiteral(key), t.arrayExpression(convertArrayToAstExpression(value as []))) + } + if (typeof value === 'object') { + return t.objectProperty(t.stringLiteral(key), t.objectExpression(convertObjectToAstExpression(value))) + } + return t.objectProperty(t.stringLiteral(key), t.nullLiteral()) + }) + return objArr +} + +// 最低限度的转义: https://github.com/mathiasbynens/jsesc#minimal +export function generateMinimalEscapeCode (ast: t.File) { + return generate(ast, { + jsescOption: { + minimal: true + } + }).code +} + +export function convertArrayToAstExpression (arr: any[]): any[] { + return arr.map(value => { + if (typeof value === 'string') { + return t.stringLiteral(value) + } + if (typeof value === 'number') { + return t.numericLiteral(value) + } + if (typeof value === 'boolean') { + return t.booleanLiteral(value) + } + if (Array.isArray(value)) { + return convertArrayToAstExpression(value) + } + if (typeof value === 'object') { + return t.objectExpression(convertObjectToAstExpression(value)) + } + return t.nullLiteral() + }) +} + +export function convertSourceStringToAstExpression (str: string, opts: object = {}) { + return template(str, Object.assign({}, babylonConfig, opts))() +} + +export function convertAstExpressionToVariable (node) { + if (t.isObjectExpression(node)) { + const obj = {} + const properties = node.properties + properties.forEach(property => { + if (property.type === 'ObjectProperty' || property.type === 'ObjectMethod') { + const key = convertAstExpressionToVariable(property.key) + const value = convertAstExpressionToVariable(property.value) + obj[key] = value + } + }) + return obj + } else if (t.isArrayExpression(node)) { + return node.elements.map(convertAstExpressionToVariable) + } else if (t.isLiteral(node)) { + return node['value'] + } else if (t.isIdentifier(node) || t.isJSXIdentifier(node)) { + const name = node.name + return name === 'undefined' + ? undefined + : name + } else if (t.isJSXExpressionContainer(node)) { + return convertAstExpressionToVariable(node.expression) + } +} + +export const getObjKey = (node) => { + if (t.isIdentifier(node)) { + return node.name + } else { + return node.value + } +} diff --git a/packages/taro-mini-runner/src/utils/constants.ts b/packages/taro-mini-runner/src/utils/constants.ts new file mode 100644 index 000000000000..b0399a802f7e --- /dev/null +++ b/packages/taro-mini-runner/src/utils/constants.ts @@ -0,0 +1,307 @@ +import * as os from 'os' + +import chalk, { Chalk } from 'chalk' + +export const CSS_EXT: string[] = ['.css', '.scss', '.sass', '.less', '.styl', '.wxss', '.acss'] +export const SCSS_EXT: string[] = ['.scss'] +export const JS_EXT: string[] = ['.js', '.jsx'] +export const TS_EXT: string[] = ['.ts', '.tsx'] +export const UX_EXT: string[] = ['.ux'] + +export const REG_JS: RegExp = /\.js(\?.*)?$/ +export const REG_SCRIPT: RegExp = /\.(js|jsx)(\?.*)?$/ +export const REG_TYPESCRIPT: RegExp = /\.(tsx|ts)(\?.*)?$/ +export const REG_SCRIPTS: RegExp = /\.[tj]sx?$/i +export const REG_SASS: RegExp = /\.(s[ac]ss)$/ +export const REG_LESS: RegExp = /\.less$/ +export const REG_STYLUS: RegExp = /\.styl$/ +export const REG_STYLE: RegExp = /\.(css|scss|sass|less|styl|wxss|acss)(\?.*)?$/ +export const REG_MEDIA: RegExp = /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/ +export const REG_IMAGE: RegExp = /\.(png|jpe?g|gif|bpm|svg|webp)(\?.*)?$/ +export const REG_FONT: RegExp = /\.(woff2?|eot|ttf|otf)(\?.*)?$/ +export const REG_JSON: RegExp = /\.json(\?.*)?$/ +export const REG_UX: RegExp = /\.ux(\?.*)?$/ +export const REG_WXML_IMPORT: RegExp = /([ + 'View', + 'Text' +]) + +export enum PARSE_AST_TYPE { + ENTRY = 'ENTRY', + PAGE = 'PAGE', + COMPONENT = 'COMPONENT', + NORMAL = 'NORMAL', + STATIC = 'STATIC' +} + +export const enum processTypeEnum { + START = 'start', + CREATE = 'create', + COMPILE = 'compile', + CONVERT = 'convert', + COPY = 'copy', + GENERATE = 'generate', + MODIFY = 'modify', + ERROR = 'error', + WARNING = 'warning', + UNLINK = 'unlink', + REFERENCE = 'reference' +} + +export interface IProcessTypeMap { + [key: string] : { + name: string, + color: string | Chalk + } +} + +export const processTypeMap: IProcessTypeMap = { + [processTypeEnum.CREATE]: { + name: '创建', + color: 'cyan' + }, + [processTypeEnum.COMPILE]: { + name: '编译', + color: 'green' + }, + [processTypeEnum.CONVERT]: { + name: '转换', + color: chalk.rgb(255, 136, 0) + }, + [processTypeEnum.COPY]: { + name: '拷贝', + color: 'magenta' + }, + [processTypeEnum.GENERATE]: { + name: '生成', + color: 'blue' + }, + [processTypeEnum.MODIFY]: { + name: '修改', + color: 'yellow' + }, + [processTypeEnum.ERROR]: { + name: '错误', + color: 'red' + }, + [processTypeEnum.WARNING]: { + name: '警告', + color: 'yellowBright' + }, + [processTypeEnum.UNLINK]: { + name: '删除', + color: 'magenta' + }, + [processTypeEnum.START]: { + name: '启动', + color: 'green' + }, + [processTypeEnum.REFERENCE]: { + name: '引用', + color: 'blue' + } +} + +export const excludeReplaceTaroFrameworkPkgs = new Set([taroJsRedux, taroJsMobx, taroJsMobxCommon]) diff --git a/packages/taro-mini-runner/src/utils/helper.ts b/packages/taro-mini-runner/src/utils/helper.ts new file mode 100644 index 000000000000..eb0e1cc65d8c --- /dev/null +++ b/packages/taro-mini-runner/src/utils/helper.ts @@ -0,0 +1,136 @@ +import * as path from 'path' +import * as _ from 'lodash' + +import { getInstalledNpmPkgPath, promoteRelativePath, removeHeadSlash, printLog } from '.' +import { taroJsQuickAppComponents, REG_STYLE, REG_SCRIPT, processTypeEnum } from './constants' + +export function getTaroJsQuickAppComponentsPath (nodeModulesPath: string): string { + const taroJsQuickAppComponentsPkg = getInstalledNpmPkgPath(taroJsQuickAppComponents, nodeModulesPath) + if (!taroJsQuickAppComponentsPkg) { + printLog(processTypeEnum.ERROR, '包安装', `缺少包 ${taroJsQuickAppComponents},请安装!`) + process.exit(0) + } + return path.join(path.dirname(taroJsQuickAppComponentsPkg as string), 'src/components') +} + +export function getImportTaroSelfComponents (filePath, nodeModulesPath, outputDir, taroSelfComponents) { + const importTaroSelfComponents = new Set<{ path: string, name: string }>() + const taroJsQuickAppComponentsPath = getTaroJsQuickAppComponentsPath(nodeModulesPath) + taroSelfComponents.forEach(c => { + const cPath = path.join(taroJsQuickAppComponentsPath, c) + const cMainPath = path.join(cPath, 'index') + const cRelativePath = promoteRelativePath(path.relative(filePath, cMainPath.replace(nodeModulesPath, path.join(outputDir, 'npm')))) + importTaroSelfComponents.add({ + path: cRelativePath, + name: c + }) + }) + return importTaroSelfComponents +} + +export function getImportCustomComponents(outputDir, depComponents) { + const importCustomComponents = new Set(); + depComponents.forEach(item => { + const extnamePath = item.path.replace(path.extname(item.path), '') + const cRelativePath = path.relative(path.join(outputDir, 'index'), extnamePath).replace(/\\/g, '/') + importCustomComponents.add({ + path: cRelativePath, + name: item.name + }) + }) + return importCustomComponents; +} + +export function generateQuickAppUx ({ + script, + template, + style, + imports +}: { + script?: string, + template?: string, + style?: string, + imports?: Set<{ + path: string, + name: string + }> +}) { + let uxTxt = '' + if (imports && imports.size) { + imports.forEach(item => { + uxTxt += `\n` + }) + } + if (style) { + if (REG_STYLE.test(style)) { + uxTxt += `\n` + } else { + uxTxt += `\n` + } + } + if (template) { + uxTxt += `\n` + } + if (script) { + if (REG_SCRIPT.test(script)) { + uxTxt += `\n` + } else { + uxTxt += `\n` + } + } + return uxTxt +} + +export function generateQuickAppManifest ({ + appConfig, + quickappJSON, + pageConfigs, + designWidth +}) { + // 生成 router + const pages = (appConfig.pages as string[]).concat() + const routerPages = {} + const customPageConfig = quickappJSON.customPageConfig || {} + + pages.forEach(element => { + const customConfig = customPageConfig[element] + const pageConf: any = { + component: path.basename(element) + } + if (customConfig) { + const filter = customConfig.filter + const launchMode = customConfig.launchMode + if (filter) { + pageConf.filter = filter + } + if (launchMode) { + pageConf.launchMode = launchMode + } + } + routerPages[removeHeadSlash(path.dirname(element))] = pageConf + }) + delete quickappJSON.customPageConfig + const routerEntry = pages.shift() + const router = { + entry: removeHeadSlash(path.dirname(routerEntry as string)), + pages: routerPages + } + // 生成 display + const display = JSON.parse(JSON.stringify(appConfig.window || {})) + display.pages = {} + pageConfigs.forEach((item, page) => { + if (item) { + display.pages[removeHeadSlash(path.dirname(page))] = item + } + }) + quickappJSON.router = router + quickappJSON.display = display + quickappJSON.config = Object.assign({}, quickappJSON.config, { + designWidth: designWidth || 750 + }) + if (appConfig.window && appConfig.window.navigationStyle === 'custom') { + quickappJSON.display.titleBar = false + delete quickappJSON.display.navigationStyle + } + return quickappJSON +} diff --git a/packages/taro-mini-runner/src/utils/index.ts b/packages/taro-mini-runner/src/utils/index.ts new file mode 100644 index 000000000000..a3dae33b0459 --- /dev/null +++ b/packages/taro-mini-runner/src/utils/index.ts @@ -0,0 +1,243 @@ +import * as path from 'path' +import * as fs from 'fs-extra' + +import * as resolvePath from 'resolve' +import * as t from 'babel-types' +import { mergeWith } from 'lodash' +import chalk from 'chalk' + +import { + CONFIG_MAP, + JS_EXT, + TS_EXT, + NODE_MODULES_REG, + processTypeMap, + processTypeEnum +} from './constants' +import { IOption, IComponentObj } from './types' + +export const isNodeModule = (filename: string) => NODE_MODULES_REG.test(filename) + +export function isNpmPkg (name: string): boolean { + if (/^(\.|\/)/.test(name)) { + return false + } + return true +} + +export function isQuickAppPkg (name: string): boolean { + return /^@(system|service)\.[a-zA-Z]{1,}/.test(name) +} + +export function isEmptyObject (obj: any): boolean { + if (obj == null) { + return true + } + for (const key in obj) { + if (obj.hasOwnProperty(key)) { + return false + } + } + return true +} + +export function traverseObjectNode (node, buildAdapter: string, parentKey?: string) { + if (node.type === 'ClassProperty' || node.type === 'ObjectProperty') { + const properties = node.value.properties + const obj = {} + properties.forEach(p => { + let key = t.isIdentifier(p.key) ? p.key.name : p.key.value + if (CONFIG_MAP[buildAdapter][key] === false) { + return + } + if (parentKey !== 'usingComponents' && CONFIG_MAP[buildAdapter][key]) { + key = CONFIG_MAP[buildAdapter][key] + } + obj[key] = traverseObjectNode(p.value, buildAdapter, key) + }) + return obj + } + if (node.type === 'ObjectExpression') { + const properties = node.properties + const obj= {} + properties.forEach(p => { + let key = t.isIdentifier(p.key) ? p.key.name : p.key.value + if (CONFIG_MAP[buildAdapter][key] === false) { + return + } + if (parentKey !== 'usingComponents' && CONFIG_MAP[buildAdapter][key]) { + key = CONFIG_MAP[buildAdapter][key] + } + obj[key] = traverseObjectNode(p.value, buildAdapter, key) + }) + return obj + } + if (node.type === 'ArrayExpression') { + return node.elements.map(item => traverseObjectNode(item, buildAdapter)) + } + if (node.type === 'NullLiteral') { + return null + } + return node.value +} + +export function isAliasPath (name: string, pathAlias: object = {}): boolean { + const prefixs = Object.keys(pathAlias) + if (prefixs.length === 0) { + return false + } + return prefixs.includes(name) || (new RegExp(`^(${prefixs.join('|')})/`).test(name)) +} + +export function replaceAliasPath (filePath: string, name: string, pathAlias: object = {}) { + // 后续的 path.join 在遇到符号链接时将会解析为真实路径,如果 + // 这里的 filePath 没有做同样的处理,可能会导致 import 指向 + // 源代码文件,导致文件被意外修改 + filePath = fs.realpathSync(filePath) + + const prefixs = Object.keys(pathAlias) + if (prefixs.includes(name)) { + return promoteRelativePath(path.relative(filePath, fs.realpathSync(resolveScriptPath(pathAlias[name])))) + } + const reg = new RegExp(`^(${prefixs.join('|')})/(.*)`) + name = name.replace(reg, function (m, $1, $2) { + return promoteRelativePath(path.relative(filePath, path.join(pathAlias[$1], $2))) + }) + return name +} + +export function promoteRelativePath (fPath: string): string { + const fPathArr = fPath.split(path.sep) + let dotCount = 0 + fPathArr.forEach(item => { + if (item.indexOf('..') >= 0) { + dotCount++ + } + }) + if (dotCount === 1) { + fPathArr.splice(0, 1, '.') + return fPathArr.join('/') + } + if (dotCount > 1) { + fPathArr.splice(0, 1) + return fPathArr.join('/') + } + return fPath.replace(/\\/g, '/') +} + +export function resolveScriptPath (p: string): string { + const realPath = p + const taroEnv = process.env.TARO_ENV + const SCRIPT_EXT = JS_EXT.concat(TS_EXT) + for (let i = 0; i < SCRIPT_EXT.length; i++) { + const item = SCRIPT_EXT[i] + if (taroEnv) { + if (fs.existsSync(`${p}.${taroEnv}${item}`)) { + return `${p}.${taroEnv}${item}` + } + if (fs.existsSync(`${p}${path.sep}index.${taroEnv}${item}`)) { + return `${p}${path.sep}index.${taroEnv}${item}` + } + if (fs.existsSync(`${p.replace(/\/index$/, `.${taroEnv}/index`)}${item}`)) { + return `${p.replace(/\/index$/, `.${taroEnv}/index`)}${item}` + } + } + if (fs.existsSync(`${p}${item}`)) { + return `${p}${item}` + } + if (fs.existsSync(`${p}${path.sep}index${item}`)) { + return `${p}${path.sep}index${item}` + } + } + return realPath +} + +export function buildUsingComponents ( + filePath: string, + sourceDir: string, + pathAlias: IOption, + components: IComponentObj[], + isComponent?: boolean +): IOption { + const usingComponents = Object.create(null) + for (const component of components) { + let componentPath = component.path + if (isAliasPath(componentPath as string, pathAlias)) { + componentPath = replaceAliasPath(filePath, componentPath as string, pathAlias) + } + componentPath = resolveScriptPath(path.resolve(filePath, '..', componentPath as string)) + if (fs.existsSync(componentPath)) { + if (NODE_MODULES_REG.test(componentPath) && !NODE_MODULES_REG.test(filePath)) { + componentPath = componentPath.replace(NODE_MODULES_REG, path.join(sourceDir, 'npm')) + } + componentPath = promoteRelativePath(path.relative(filePath, componentPath)) + } else { + componentPath = component.path + } + if (component.name) { + const componentName = component.name.split('|')[0] + usingComponents[componentName] = (componentPath as string).replace(path.extname(componentPath as string), '') + } + } + return Object.assign({}, isComponent ? { component: true } : { usingComponents: {} }, components.length ? { + usingComponents + } : {}) +} +const npmCached = {} +export function resolveNpmSync (pkgName: string, root): string | null { + try { + if (!npmCached[pkgName]) { + return resolvePath.sync(pkgName, { basedir: root }) + } + return npmCached[pkgName] + } catch (err) { + if (err.code === 'MODULE_NOT_FOUND') { + throw new Error(`包 ${pkgName} 未安装`) + } + return null + } +} + +export function recursiveMerge (src, ...args) { + return mergeWith(src, ...args, (value, srcValue) => { + const typeValue = typeof value + const typeSrcValue = typeof srcValue + if (typeValue !== typeSrcValue) return + if (Array.isArray(value) && Array.isArray(srcValue)) { + return value.concat(srcValue) + } + if (typeValue === 'object') { + return recursiveMerge(value, srcValue) + } + }) +} + +export function getInstalledNpmPkgPath (pkgName: string, basedir: string): string | null { + const resolvePath = require('resolve') + try { + return resolvePath.sync(`${pkgName}/package.json`, { basedir }) + } catch (err) { + return null + } +} + +export function printLog (type: processTypeEnum, tag: string, filePath?: string) { + const typeShow = processTypeMap[type] + const tagLen = tag.replace(/[\u0391-\uFFE5]/g, 'aa').length + const tagFormatLen = 8 + if (tagLen < tagFormatLen) { + const rightPadding = new Array(tagFormatLen - tagLen + 1).join(' ') + tag += rightPadding + } + const padding = '' + filePath = filePath || '' + if (typeof typeShow.color === 'string') { + console.log(chalk[typeShow.color](typeShow.name), padding, tag, padding, filePath) + } else { + console.log(typeShow.color(typeShow.name), padding, tag, padding, filePath) + } +} + +export function removeHeadSlash (str: string) { + return str.replace(/^(\/|\\)/, '') +} diff --git a/packages/taro-mini-runner/src/utils/logHelper.ts b/packages/taro-mini-runner/src/utils/logHelper.ts new file mode 100644 index 000000000000..2611c75c8e5c --- /dev/null +++ b/packages/taro-mini-runner/src/utils/logHelper.ts @@ -0,0 +1,190 @@ +import chalk from 'chalk' +import * as ora from 'ora' +import { partial, pipe } from 'lodash/fp' +import * as formatMessages from 'webpack-format-messages' +import { BUILD_TYPES } from './constants' + +// const syntaxErrorLabel = 'Syntax error:' + +const LOG_MAP = { + [BUILD_TYPES.WEAPP]: { + OPEN: '请打开微信小程序开发者工具进行查看' + }, + [BUILD_TYPES.ALIPAY]: { + OPEN: '请打开支付宝小程序开发者工具进行查看' + }, + [BUILD_TYPES.QQ]: { + OPEN: '请打开 QQ 小程序开发者工具进行查看' + }, + [BUILD_TYPES.SWAN]: { + OPEN: '请打开百度智能小程序开发者工具进行查看' + }, + [BUILD_TYPES.TT]: { + OPEN: '请打开字节跳动小程序开发者工具进行查看' + }, + [BUILD_TYPES.JD]: { + OPEN: '请打开京东小程序开发者工具进行查看' + }, + [BUILD_TYPES.QUICKAPP]: { + OPEN: '请按快应用端开发流程 https://taro-docs.jd.com/taro/docs/quick-app.html 进行查看' + } +} + +const getServeSpinner = (() => { + let spinner + return () => { + if (!spinner) { + spinner = ora(`即将开始启动编译,请稍等~`) + spinner.start() + } + return spinner + } +})() + +const printCompiling = () => { + getServeSpinner().text = '正在编译...' +} + +const printBuildError = (err: Error): void => { + const message = err.message + const stack = err.stack + if (stack && message.indexOf('from UglifyJs') !== -1) { + try { + const matched = /(.+)\[(.+):(.+),(.+)\]\[.+\]/.exec(stack) + if (!matched) { + throw new Error('Using errors for control flow is bad.') + } + const problemPath = matched[2] + const line = matched[3] + const column = matched[4] + console.log('Failed to minify the code from this file: \n\n', chalk.yellow(`\t${problemPath}:${line}${column !== '0' ? ':' + column : ''}`), '\n') + } catch (ignored) { + console.log('Failed to minify the bundle.', err) + } + } else { + console.log((message || err) + '\n') + } + console.log() +} + +const printSuccess = (buildAdapter: BUILD_TYPES) => { + getServeSpinner().stopAndPersist({ + symbol: '✅ ', + text: isFirst ? chalk.green(`编译成功,${LOG_MAP[buildAdapter].OPEN}\n`) : chalk.green(`编译成功\n`) + }) +} + +const printWarning = () => { + getServeSpinner().stopAndPersist({ + symbol: '⚠️ ', + text: chalk.yellow('编译警告.\n') + }) +} + +const printFailed = () => { + getServeSpinner().stopAndPersist({ + symbol: '🙅 ', + text: chalk.red('编译失败.\n') + }) +} + +const printWhenBeforeCompile = compiler => { + compiler.hooks.beforeCompile.tap('taroBeforeCompile', filepath => { + printCompiling() + }) + return compiler +} + +const printWhenInvalid = compiler => { + compiler.hooks.invalid.tap('taroInvalid', filepath => { + printCompiling() + }) + return compiler +} + +const printWhenFailed = compiler => { + compiler.hooks.failed.tap('taroFailed', error => { + printBuildError(error) + }) + return compiler +} + +let isFirst = true +const printWhenFirstDone = (compiler) => { + compiler.hooks.done.tap('taroDone', stats => { + if (isFirst) { + isFirst = false + getServeSpinner().clear() + console.log(chalk.gray('\n监听文件修改中...\n')) + } + }) + return compiler +} + +const _printWhenDone = ({ + verbose = false +}, buildAdapter, compiler) => { + compiler.hooks.done.tap('taroDone', stats => { + const { errors, warnings } = formatMessages(stats) + + if (!stats.hasErrors() && !stats.hasWarnings()) { + printSuccess(buildAdapter) + } + + if (stats.hasErrors()) { + printFailed() + errors.forEach(e => console.log(e + '\n')) + verbose && process.exit(1) + return + } + + if (stats.hasWarnings()) { + printWarning() + warnings.forEach(w => console.log(w + '\n')) + } + + verbose && console.log(stats.toString({ + colors: true, + modules: false, + children: false, + chunks: false, + chunkModules: false, + warnings: verbose + }) + '\n') + }) + return compiler +} + +const printWhenDone = partial(_printWhenDone, [{ verbose: false }]) + +const printWhenDoneVerbosely = partial(_printWhenDone, [{ verbose: true }]) + +const bindDevLogger = (compiler, buildAdapter: BUILD_TYPES) => { + console.log() + pipe( + printWhenBeforeCompile, + partial(printWhenDone, [buildAdapter]), + printWhenFailed, + printWhenInvalid, + printWhenFirstDone + )(compiler) + return compiler +} + +const bindProdLogger = (compiler, buildAdapter: BUILD_TYPES) => { + console.log() + pipe( + printWhenBeforeCompile, + partial(printWhenDoneVerbosely, [buildAdapter]), + printWhenFailed + )(compiler) + return compiler +} + +export { + printBuildError, + printCompiling, + getServeSpinner, + bindDevLogger, + bindProdLogger +} diff --git a/packages/taro-mini-runner/src/utils/parseAst.ts b/packages/taro-mini-runner/src/utils/parseAst.ts new file mode 100644 index 000000000000..b0dbce129c68 --- /dev/null +++ b/packages/taro-mini-runner/src/utils/parseAst.ts @@ -0,0 +1,172 @@ +import { Config as IConfig } from '@tarojs/taro' +import * as t from 'babel-types' +import traverse from 'babel-traverse' +import { transformFromAst } from 'babel-core' + +import { BUILD_TYPES, taroJsComponents, QUICKAPP_SPECIAL_COMPONENTS } from './constants' +import { traverseObjectNode, isNpmPkg } from '../utils' +import * as _ from 'lodash' + +export default function parseAst ( + ast: t.File, + buildAdapter: BUILD_TYPES +): { + configObj: IConfig, + hasEnablePageScroll: boolean, + taroSelfComponents: Set, +} { + let configObj = {} + let hasEnablePageScroll + const taroSelfComponents = new Set() + const isQuickApp = buildAdapter === BUILD_TYPES.QUICKAPP + let componentClassName: string = '' + + const newAst = transformFromAst(ast, '', { + plugins: [ + [require('babel-plugin-preval')] + ] + }).ast as t.File + + traverse(newAst, { + ClassDeclaration (astPath) { + const node = astPath.node + let hasCreateData = false + if (node.superClass) { + astPath.traverse({ + ClassMethod (astPath) { + if (astPath.get('key').isIdentifier({ name: '_createData' })) { + hasCreateData = true + } + } + }) + if (hasCreateData) { + astPath.traverse({ + ClassMethod (astPath) { + const node = astPath.node + if (node.kind === 'constructor') { + astPath.traverse({ + ExpressionStatement (astPath) { + const node = astPath.node + if (node.expression && + node.expression.type === 'AssignmentExpression' && + node.expression.operator === '=') { + const left = node.expression.left + if (left.type === 'MemberExpression' && + left.object.type === 'ThisExpression' && + left.property.type === 'Identifier' && + left.property.name === 'config') { + configObj = traverseObjectNode(node.expression.right, buildAdapter) + } + } + } + }) + } + } + }) + if (node.id === null) { + componentClassName = '_TaroComponentClass' + } else if (node.id.name === 'App') { + componentClassName = '_App' + } else { + componentClassName = node.id.name + } + } + } + }, + ClassExpression (astPath) { + const node = astPath.node + if (node.superClass) { + let hasCreateData = false + astPath.traverse({ + ClassMethod (astPath) { + if (astPath.get('key').isIdentifier({ name: '_createData' })) { + hasCreateData = true + } + } + }) + if (hasCreateData) { + if (node.id === null) { + const parentNode = astPath.parentPath.node as any + if (t.isVariableDeclarator(astPath.parentPath)) { + componentClassName = parentNode.id.name + } else { + componentClassName = '_TaroComponentClass' + } + } else if (node.id.name === 'App') { + componentClassName = '_App' + } else { + componentClassName = node.id.name + } + } + } + }, + ClassMethod (astPath) { + const keyName = (astPath.get('key').node as t.Identifier).name + if (keyName === 'onPageScroll' || keyName === 'onReachBottom') { + hasEnablePageScroll = true + } + }, + ClassProperty (astPath) { + const node = astPath.node + const keyName = node.key.name + if (keyName === 'config') { + configObj = traverseObjectNode(node, buildAdapter) + } + }, + ImportDeclaration (astPath) { + const node = astPath.node + const source = node.source + let value = source.value + const specifiers = node.specifiers + if (isNpmPkg(value) && isQuickApp && value === taroJsComponents) { + specifiers.forEach(specifier => { + const name = specifier.local.name + if (!QUICKAPP_SPECIAL_COMPONENTS.has(name)) { + taroSelfComponents.add(_.kebabCase(name)) + } + }) + astPath.remove() + } + }, + CallExpression (astPath) { + const node = astPath.node + const callee = node.callee as t.Identifier + if (callee.name === 'require') { + const args = node.arguments as t.StringLiteral[] + let value = args[0].value + const parentNode = astPath.parentPath.parentPath.node as t.VariableDeclaration + if (isNpmPkg(value) && isQuickApp && value === taroJsComponents) { + if (parentNode.declarations.length === 1 && parentNode.declarations[0].init) { + const id = parentNode.declarations[0].id + if (id.type === 'ObjectPattern') { + const properties = id.properties as any + properties.forEach(p => { + if (p.type === 'ObjectProperty' && p.value.type === 'Identifier') { + taroSelfComponents.add(_.kebabCase(p.value.name)) + } + }) + } + } + astPath.remove() + } + } + }, + AssignmentExpression (astPath) { + const node = astPath.node + const left = node.left + if (t.isMemberExpression(left) && t.isIdentifier(left.object)) { + if (left.object.name === componentClassName + && t.isIdentifier(left.property) + && left.property.name === 'config') { + configObj = traverseObjectNode(node.right, buildAdapter) + } + } + } + }) + + return { + configObj, + hasEnablePageScroll, + taroSelfComponents + } +} diff --git a/packages/taro-mini-runner/src/utils/types.ts b/packages/taro-mini-runner/src/utils/types.ts new file mode 100644 index 000000000000..7369d8daa614 --- /dev/null +++ b/packages/taro-mini-runner/src/utils/types.ts @@ -0,0 +1,30 @@ +import * as webpack from 'webpack' +import { IProjectBaseConfig, IMiniAppConfig } from '@tarojs/taro/types/compile' +import { BUILD_TYPES } from './constants' + +type FunctionLikeCustomWebpackConfig = (webpackConfig: webpack.Configuration, webpack) => webpack.Configuration + +export type CustomWebpackConfig = FunctionLikeCustomWebpackConfig | webpack.Configuration +export interface IOption { + [key: string]: any +} + +export interface IComponentObj { + name?: string, + path: string | null, + type?: string +} + +export interface IChain { + [key: string]: any +} + +export interface IBuildConfig extends IProjectBaseConfig, IMiniAppConfig { + isWatch: boolean, + port?: number, + buildAdapter: BUILD_TYPES, + nodeModulesPath: string, + quickappJSON: any, + isBuildPlugin: boolean, + commonChunks: string[] +} diff --git a/packages/taro-mini-runner/src/webpack/base.conf.ts b/packages/taro-mini-runner/src/webpack/base.conf.ts new file mode 100644 index 000000000000..ef68095db015 --- /dev/null +++ b/packages/taro-mini-runner/src/webpack/base.conf.ts @@ -0,0 +1,24 @@ +import * as path from 'path' +import * as Chain from 'webpack-chain' + +export default (appPath: string) => { + const chain = new Chain() + chain.merge({ + resolve: { + extensions: ['.js', '.jsx', '.ts', '.tsx'], + mainFields: ['main', 'module'], + symlinks: true, + modules: [ + path.join(appPath, 'node_modules'), + 'node_modules' + ] + }, + resolveLoader: { + modules: [ + 'node_modules' + ] + } + }) + + return chain +} diff --git a/packages/taro-mini-runner/src/webpack/build.conf.ts b/packages/taro-mini-runner/src/webpack/build.conf.ts new file mode 100644 index 000000000000..57df2ddb47e7 --- /dev/null +++ b/packages/taro-mini-runner/src/webpack/build.conf.ts @@ -0,0 +1,184 @@ +import * as path from 'path' + +import { IBuildConfig } from '../utils/types' +import { + getCopyWebpackPlugin, + getDefinePlugin, + processEnvOption, + getCssoWebpackPlugin, + getUglifyPlugin, + getDevtool, + getOutput, + getModule, + mergeOption, + getMiniPlugin, + getMiniCssExtractPlugin, + getEntry, +} from './chain' +import getBaseConf from './base.conf' +import { BUILD_TYPES, PARSE_AST_TYPE, MINI_APP_FILES } from '../utils/constants' +import { Targets } from '../plugins/MiniPlugin' + +const emptyObj = {} + +export default (appPath: string, mode, config: Partial): any => { + const chain = getBaseConf(appPath) + const { + buildAdapter = BUILD_TYPES.WEAPP, + alias = emptyObj, + entry = emptyObj, + output = emptyObj, + outputRoot = 'dist', + sourceRoot = 'src', + + designWidth = 750, + deviceRatio, + enableSourceMap = false, + + defineConstants = emptyObj, + env = emptyObj, + cssLoaderOption = emptyObj, + sassLoaderOption = emptyObj, + lessLoaderOption = emptyObj, + stylusLoaderOption = emptyObj, + mediaUrlLoaderOption = emptyObj, + fontUrlLoaderOption = emptyObj, + imageUrlLoaderOption = emptyObj, + miniCssExtractPluginOption = emptyObj, + + postcss = emptyObj, + nodeModulesPath, + quickappJSON, + + babel, + csso, + uglify, + commonChunks + } = config + + let { copy } = config + + const plugin: any = {} + const minimizer: any[] = [] + const sourceDir = path.join(appPath, sourceRoot) + const outputDir = path.join(appPath, outputRoot) + if (config.isBuildPlugin) { + const patterns = copy ? copy.patterns : [] + patterns.push({ + from: path.join(sourceRoot, 'plugin', 'doc'), + to: path.join(outputRoot, 'doc') + }) + patterns.push({ + from: path.join(sourceRoot, 'plugin', 'plugin.json'), + to: path.join(outputRoot, 'plugin', 'plugin.json') + }) + copy = Object.assign({}, copy, { patterns }) + } + if (copy) { + plugin.copyWebpackPlugin = getCopyWebpackPlugin({ copy, appPath }) + } + const constantsReplaceList = mergeOption([processEnvOption(env), defineConstants]) + const entryRes = getEntry({ + sourceDir, + entry, + isBuildPlugin: config.isBuildPlugin + }) + plugin.definePlugin = getDefinePlugin([constantsReplaceList]) + const customCommonChunks = commonChunks && commonChunks.length ? commonChunks : !!config.isBuildPlugin ? ['plugin/runtime', 'plugin/vendors'] : ['runtime', 'vendors'] + plugin.miniPlugin = getMiniPlugin({ + sourceDir, + outputDir, + buildAdapter, + constantsReplaceList, + nodeModulesPath, + quickappJSON, + designWidth, + pluginConfig: entryRes!.pluginConfig, + isBuildPlugin: !!config.isBuildPlugin, + commonChunks: customCommonChunks, + alias + }) + + plugin.miniCssExtractPlugin = getMiniCssExtractPlugin([{ + filename: `[name]${MINI_APP_FILES[buildAdapter].STYLE}`, + chunkFilename: `[name]${MINI_APP_FILES[buildAdapter].STYLE}` + }, miniCssExtractPluginOption]) + + const isCssoEnabled = (csso && csso.enable === false) + ? false + : true + + const isUglifyEnabled = (uglify && uglify.enable === false) + ? false + : true + + if (mode === 'production') { + if (isUglifyEnabled) { + minimizer.push(getUglifyPlugin([ + enableSourceMap, + uglify ? uglify.config : {} + ])) + } + + if (isCssoEnabled) { + const cssoConfig: any = csso ? csso.config : {} + plugin.cssoWebpackPlugin = getCssoWebpackPlugin([cssoConfig]) + } + } + chain.merge({ + mode, + devtool: getDevtool(enableSourceMap), + watch: mode === 'development', + entry: entryRes!.entry, + output: getOutput(appPath, [{ + outputRoot, + publicPath: '/', + buildAdapter, + isBuildPlugin: config.isBuildPlugin + }, output]), + target: Targets[buildAdapter], + resolve: { alias }, + module: getModule(appPath, { + sourceDir, + + buildAdapter, + constantsReplaceList, + designWidth, + deviceRatio, + enableSourceMap, + + cssLoaderOption, + lessLoaderOption, + sassLoaderOption, + stylusLoaderOption, + fontUrlLoaderOption, + imageUrlLoaderOption, + mediaUrlLoaderOption, + + postcss, + babel, + alias + }), + plugin, + optimization: { + minimizer, + runtimeChunk: { + name: !!config.isBuildPlugin ? 'plugin/runtime' : 'runtime' + }, + splitChunks: { + chunks: 'all', + maxInitialRequests: Infinity, + minSize: 0, + name: !!config.isBuildPlugin ? 'plugin/vendors' : 'vendors', + cacheGroups: { + vendors: { + test (module) { + return /[\\/]node_modules[\\/]/.test(module.resource) && module.miniType !== PARSE_AST_TYPE.COMPONENT + } + } + } + } + } + }) + return chain +} diff --git a/packages/taro-mini-runner/src/webpack/chain.ts b/packages/taro-mini-runner/src/webpack/chain.ts new file mode 100644 index 000000000000..3954b6e20076 --- /dev/null +++ b/packages/taro-mini-runner/src/webpack/chain.ts @@ -0,0 +1,413 @@ +import * as fs from 'fs-extra' +import * as path from 'path' + +import * as CopyWebpackPlugin from 'copy-webpack-plugin' +import CssoWebpackPlugin from 'csso-webpack-plugin' +import * as MiniCssExtractPlugin from 'mini-css-extract-plugin' +import * as sass from 'node-sass' +import { partial } from 'lodash' +import { mapKeys, pipe } from 'lodash/fp' +import * as UglifyJsPlugin from 'uglifyjs-webpack-plugin' +import * as webpack from 'webpack' +import { PostcssOption, ICopyOptions, IPostcssOption } from '@tarojs/taro/types/compile' +import chalk from 'chalk' + +import { getPostcssPlugins } from './postcss.conf' + +import MiniPlugin from '../plugins/MiniPlugin' +import { IOption } from '../utils/types' +import { recursiveMerge, isNodeModule, resolveScriptPath } from '../utils' +import { + REG_SASS, + REG_LESS, + REG_STYLUS, + REG_STYLE, + REG_MEDIA, + REG_FONT, + REG_IMAGE, + BUILD_TYPES, + REG_SCRIPTS +} from '../utils/constants' + +const globalObjectMap = { + [BUILD_TYPES.WEAPP]: 'wx', + [BUILD_TYPES.ALIPAY]: 'my', + [BUILD_TYPES.SWAN]: 'swan', + [BUILD_TYPES.QQ]: 'qq', + [BUILD_TYPES.TT]: 'tt', + [BUILD_TYPES.JD]: 'jd', + [BUILD_TYPES.QUICKAPP]: 'global' +} + +const defaultUglifyJsOption = { + keep_fnames: true, + output: { + comments: false, + keep_quoted_props: true, + quote_keys: true, + beautify: false + }, + warnings: false +} +const defaultCSSCompressOption = { + mergeRules: false, + mergeIdents: false, + reduceIdents: false, + discardUnused: false, + minifySelectors: false +} + +const defaultMediaUrlLoaderOption = { + limit: 10240 +} +const defaultFontUrlLoaderOption = { + limit: 10240 +} +const defaultImageUrlLoaderOption = { + limit: 10240 +} +const defaultCssModuleOption: PostcssOption.cssModules = { + enable: false, + config: { + namingPattern: 'global', + generateScopedName: '[name]__[local]___[hash:base64:5]' + } +} + +const staticDirectory = 'static' + +const getLoader = (loaderName: string, options: IOption) => { + return { + loader: require.resolve(loaderName), + options: options || {} + } +} + +const listify = listOrItem => { + if (Array.isArray(listOrItem)) { + return listOrItem + } + return [listOrItem] +} + +const getPlugin = (plugin: any, args: IOption[]) => { + return { + plugin, + args + } +} + +export const mergeOption = ([...options]: IOption[]): IOption => { + return recursiveMerge({}, ...options) +} + +const styleModuleReg = /(.*\.module).*\.(css|s[ac]ss|less|styl)\b/ +const styleGlobalReg = /(.*\.global).*\.(css|s[ac]ss|less|styl)\b/ + +export const processEnvOption = partial(mapKeys as any, (key: string) => `process.env.${key}`) as any + +export const getCssLoader = pipe(mergeOption, partial(getLoader, 'css-loader')) +export const getPostcssLoader = pipe(mergeOption, partial(getLoader, 'postcss-loader')) +export const getSassLoader = pipe(mergeOption, partial(getLoader, 'sass-loader')) +export const getLessLoader = pipe(mergeOption, partial(getLoader, 'less-loader')) +export const getStylusLoader = pipe(mergeOption, partial(getLoader, 'stylus-loader')) +export const getUrlLoader = pipe(mergeOption, partial(getLoader, 'url-loader')) +export const getFileLoader = pipe(mergeOption, partial(getLoader, 'file-loader')) +export const getFileParseLoader = pipe(mergeOption, partial(getLoader, path.resolve(__dirname, '../loaders/fileParseLoader'))) +export const getWxTransformerLoader = pipe(mergeOption, partial(getLoader, path.resolve(__dirname, '../loaders/wxTransformerLoader'))) +const getExtractCssLoader = () => { + return { + loader: MiniCssExtractPlugin.loader + } +} +const getQuickappStyleLoader = () => { + return { + loader: require.resolve(path.resolve(__dirname, '../loaders/quickappStyleLoader')) + } +} +export const getMiniCssExtractPlugin = pipe(mergeOption, listify, partial(getPlugin, MiniCssExtractPlugin)) +export const getDefinePlugin = pipe(mergeOption, listify, partial(getPlugin, webpack.DefinePlugin)) +export const getUglifyPlugin = ([enableSourceMap, uglifyOptions]) => { + return new UglifyJsPlugin({ + cache: true, + parallel: true, + sourceMap: enableSourceMap, + uglifyOptions: recursiveMerge({}, defaultUglifyJsOption, uglifyOptions) + }) +} +export const getCssoWebpackPlugin = ([cssoOption]) => { + return pipe(listify, partial(getPlugin, CssoWebpackPlugin))([mergeOption([defaultCSSCompressOption, cssoOption]), REG_STYLE]) +} +export const getCopyWebpackPlugin = ({ copy, appPath }: { + copy: ICopyOptions, + appPath: string +}) => { + const args = [ + copy.patterns.map(({ from, to }) => { + return { + from, + to: path.resolve(appPath, to), + context: appPath + } + }), + copy.options + ] + return partial(getPlugin, CopyWebpackPlugin)(args) +} + +export const getMiniPlugin = args => { + return partial(getPlugin, MiniPlugin)([args]) +} + +export const getModule = (appPath: string, { + sourceDir, + + designWidth, + deviceRatio, + buildAdapter, + constantsReplaceList, + enableSourceMap, + + cssLoaderOption, + lessLoaderOption, + sassLoaderOption, + stylusLoaderOption, + fontUrlLoaderOption, + imageUrlLoaderOption, + mediaUrlLoaderOption, + postcss, + + babel, + alias +}) => { + const isQuickapp = buildAdapter === BUILD_TYPES.QUICKAPP + const postcssOption: IPostcssOption = postcss || {} + + const cssModuleOptions: PostcssOption.cssModules = recursiveMerge({}, defaultCssModuleOption, postcssOption.cssModules) + + const { namingPattern, generateScopedName } = cssModuleOptions.config! + + const cssOptions = [ + { + importLoaders: 1, + sourceMap: enableSourceMap, + modules: false + }, + cssLoaderOption + ] + const cssOptionsWithModule = [ + Object.assign( + { + importLoaders: 1, + sourceMap: enableSourceMap, + modules: { + mode: namingPattern === 'module' ? 'local' : 'global' + } + }, + { + modules: typeof generateScopedName === 'function' + ? { getLocalIdent: (context, _, localName) => generateScopedName(localName, context.resourcePath) } + : { localIdentName: generateScopedName } + } + ), + cssLoaderOption + ] + + const extractCssLoader = getExtractCssLoader() + const quickappStyleLoader = getQuickappStyleLoader() + + const cssLoader = getCssLoader(cssOptions) + const cssLoaders: { + include?; + use; + }[] = [{ + use: isQuickapp ? [cssLoader, quickappStyleLoader] : [cssLoader] + }] + + if (cssModuleOptions.enable) { + const cssLoaderWithModule = getCssLoader(cssOptionsWithModule) + let cssModuleCondition + + if (cssModuleOptions.config!.namingPattern === 'module') { + /* 不排除 node_modules 内的样式 */ + cssModuleCondition = styleModuleReg + } else { + cssModuleCondition = { + and: [ + { exclude: styleGlobalReg }, + { exclude: [isNodeModule] } + ] + } + } + cssLoaders.unshift({ + include: [cssModuleCondition], + use: [cssLoaderWithModule] + }) + } + + const postcssLoader = getPostcssLoader([ + { sourceMap: enableSourceMap }, + { + ident: 'postcss', + plugins: getPostcssPlugins(appPath, { + isQuickapp, + designWidth, + deviceRatio, + postcssOption + }) + } + ]) + const sassLoader = getSassLoader([{ + sourceMap: true, + implementation: sass + }, sassLoaderOption]) + const lessLoader = getLessLoader([{ sourceMap: enableSourceMap }, lessLoaderOption]) + + const stylusLoader = getStylusLoader([{ sourceMap: enableSourceMap }, stylusLoaderOption]) + + // const fileLoader = getFileLoader([{ + // useRelativePath: true, + // name: `[path][name]${MINI_APP_FILES[buildAdapter].STYLE}`, + // context: sourceDir + // }]) + + const fileParseLoader = getFileParseLoader([{ + babel, + alias, + designWidth, + deviceRatio, + buildAdapter, + constantsReplaceList, + sourceDir + }]) + + const wxTransformerLoader = getWxTransformerLoader([{ + buildAdapter + }]) + + const rule: any = { + sass: { + test: REG_SASS, + enforce: 'pre', + use: [sassLoader] + }, + less: { + test: REG_LESS, + enforce: 'pre', + use: [lessLoader] + }, + stylus: { + test: REG_STYLUS, + enforce: 'pre', + use: [stylusLoader] + }, + css: { + test: REG_STYLE, + oneOf: cssLoaders + }, + // styleFiles: { + // test: REG_STYLE, + // use: [fileLoader] + // }, + postcss: { + test: REG_STYLE, + use: [postcssLoader] + }, + customStyle: { + test: REG_STYLE, + enforce: 'post', + use: [extractCssLoader] + }, + script: { + test: REG_SCRIPTS, + use: [fileParseLoader, wxTransformerLoader], + }, + media: { + test: REG_MEDIA, + use: { + urlLoader: getUrlLoader([defaultMediaUrlLoaderOption, { + name: `${staticDirectory}/media/[name].[ext]`, + ...mediaUrlLoaderOption, + limit: isQuickapp ? false : mediaUrlLoaderOption.limit + }]) + } + }, + font: { + test: REG_FONT, + use: { + urlLoader: getUrlLoader([defaultFontUrlLoaderOption, { + name: `${staticDirectory}/fonts/[name].[ext]`, + ...fontUrlLoaderOption, + limit: isQuickapp ? false : fontUrlLoaderOption.limit + }]) + } + }, + image: { + test: REG_IMAGE, + use: { + urlLoader: getUrlLoader([defaultImageUrlLoaderOption, { + name: `${staticDirectory}/images/[name].[ext]`, + ...imageUrlLoaderOption, + limit: isQuickapp ? false : imageUrlLoaderOption.limit + }]) + } + } + } + + return { rule } +} + +export const getEntry = ({ + sourceDir, + entry, + isBuildPlugin +}) => { + if (!isBuildPlugin) { + return { + entry + } + } + const pluginDir = path.join(sourceDir, 'plugin') + if (!fs.existsSync(pluginDir)) { + console.log(chalk.red('插件目录不存在,请检查!')) + return + } + const pluginConfigPath = path.join(pluginDir, 'plugin.json') + if (!fs.existsSync(pluginConfigPath)) { + console.log(chalk.red('缺少插件配置文件,请检查!')) + return + } + const pluginConfig = fs.readJSONSync(pluginConfigPath) + const entryObj = {} + Object.keys(pluginConfig).forEach(key => { + if (key === 'main') { + const filePath = path.join(pluginDir, pluginConfig[key]) + const fileName = path.basename(filePath).replace(path.extname(filePath), '') + entryObj[`plugin/${fileName}`] = [resolveScriptPath(filePath.replace(path.extname(filePath), ''))] + } else if (key === 'publicComponents' || key === 'pages') { + Object.keys(pluginConfig[key]).forEach(subKey => { + const filePath = path.join(pluginDir, pluginConfig[key][subKey]) + entryObj[`plugin/${pluginConfig[key][subKey]}`] = [resolveScriptPath(filePath.replace(path.extname(filePath), ''))] + }) + } + }) + return { + entry: entryObj, + pluginConfig + } +} + +export function getOutput (appPath: string, [{ outputRoot, publicPath, buildAdapter, isBuildPlugin }, customOutput]) { + return { + path: path.join(appPath, outputRoot), + publicPath, + filename: '[name].js', + chunkFilename: '[name].js', + globalObject: globalObjectMap[buildAdapter], + ...customOutput + } +} + +export function getDevtool (enableSourceMap) { + return enableSourceMap ? 'cheap-module-eval-source-map' : 'none' +} diff --git a/packages/taro-mini-runner/src/webpack/postcss.conf.ts b/packages/taro-mini-runner/src/webpack/postcss.conf.ts new file mode 100644 index 000000000000..12c6cf090cb9 --- /dev/null +++ b/packages/taro-mini-runner/src/webpack/postcss.conf.ts @@ -0,0 +1,87 @@ +import * as path from 'path' + +import * as autoprefixer from 'autoprefixer' +import * as pxtransform from 'postcss-pxtransform' +import * as url from 'postcss-url' +import { sync as resolveSync } from 'resolve' +import { IPostcssOption } from '@tarojs/taro/types/compile' + +import { isNpmPkg, recursiveMerge } from '../utils' +import browserList from '../config/browser_list' + +const defaultAutoprefixerOption = { + enable: true, + config: { + overrideBrowserslist: browserList, + flexbox: 'no-2009' + } +} +const defaultPxtransformOption: { + [key: string]: any +} = { + enable: true, + config: { + platform: 'weapp' + } +} + +const defaultUrlOption = { + enable: true, + config: { + limit: 1000, + url: 'inline' + } +} + +const optionsWithDefaults = ['autoprefixer', 'pxtransform', 'cssModules', 'url'] + +const plugins = [] as any[] + +export const getPostcssPlugins = function (appPath: string, { + isQuickapp = false, + designWidth, + deviceRatio, + postcssOption = {} as IPostcssOption +}) { + + if (designWidth) { + defaultPxtransformOption.config.designWidth = designWidth + } + + if (deviceRatio) { + defaultPxtransformOption.config.deviceRatio = deviceRatio + } + + const autoprefixerOption = recursiveMerge({}, defaultAutoprefixerOption, postcssOption.autoprefixer) + const pxtransformOption = recursiveMerge({}, defaultPxtransformOption, postcssOption.pxtransform) + const urlOption = recursiveMerge({}, defaultUrlOption, postcssOption.url) + if (autoprefixerOption.enable) { + plugins.push(autoprefixer(autoprefixerOption.config)) + } + + if (pxtransformOption.enable && !isQuickapp) { + plugins.push(pxtransform(pxtransformOption.config)) + } + if (urlOption.enable) { + plugins.push(url(urlOption.config)) + } + + Object.entries(postcssOption).forEach(([pluginName, pluginOption]) => { + if (optionsWithDefaults.indexOf(pluginName) > -1) return + if (!pluginOption || !pluginOption.enable) return + + if (!isNpmPkg(pluginName)) { // local plugin + pluginName = path.join(appPath, pluginName) + } + + try { + const pluginPath = resolveSync(pluginName, { basedir: appPath }) + plugins.push(require(pluginPath)(pluginOption.config || {})) + } catch (e) { + const msg = e.code === 'MODULE_NOT_FOUND' ? `缺少postcss插件${pluginName}, 已忽略` : e + console.log(msg) + } + }) + + return plugins +} diff --git a/packages/taro-mini-runner/tsconfig.json b/packages/taro-mini-runner/tsconfig.json new file mode 100644 index 000000000000..522fe3c86d15 --- /dev/null +++ b/packages/taro-mini-runner/tsconfig.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + "allowSyntheticDefaultImports": true, + "allowJs": true, + "baseUrl": ".", + "experimentalDecorators": true, + "lib": ["esnext", "dom"], + "module": "commonjs", + "moduleResolution": "node", + "noImplicitAny": false, + "noUnusedLocals": true, + "outDir": "dist/", + "preserveConstEnums": true, + "removeComments": false, + "rootDir": "./src", + "skipLibCheck": true, + "sourceMap": false, + "strictNullChecks": true, + "target": "es2015", + "traceResolution": false, + "types": ["jest"] + }, + "include": [ + "./src" + ], + "exclude": [ + "./src/__tests__" + ] +} diff --git a/packages/taro-mini-runner/tslint.json b/packages/taro-mini-runner/tslint.json new file mode 100644 index 000000000000..fa1c9fc90ffb --- /dev/null +++ b/packages/taro-mini-runner/tslint.json @@ -0,0 +1,31 @@ +{ + "extends": [ + "tslint-config-standard", + "tslint-config-prettier" + ], + "defaultSeverity": "error", + "rules": { + "ban-types": false, + "forin": false, + "interface-name": false, + "member-access": false, + "no-bitwise": false, + "no-conditional-assignment": false, + "no-console": false, + "no-empty": false, + "no-object-literal-type-assertion": false, + "no-string-literal": false, + "no-var-keyword": true, + "object-literal-key-quotes": [ false, "as-needed" ], + "object-literal-sort-keys": false, + "one-variable-per-declaration": false, + "ordered-imports": false, + "prefer-for-of": false, + "quotemark": [ true, "single", "avoid-escape", "jsx-double" ], + "semicolon": [ false, "never" ], + "space-before-function-paren": false, + "trailing-comma": [ true, { "multiline": "never", "singleline": "never" } ], + "variable-name": [ true, "allow-leading-underscore", "ban-keywords" ], + "prefer-const": true + } +} diff --git a/packages/taro-mobx-common/package.json b/packages/taro-mobx-common/package.json index b171f77ba1e8..ba80ebd35348 100644 --- a/packages/taro-mobx-common/package.json +++ b/packages/taro-mobx-common/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/mobx-common", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "mobx library for taro", "keywords": [ "mobx", diff --git a/packages/taro-mobx-h5/package.json b/packages/taro-mobx-h5/package.json index 06a9269b67ad..8a0991b48862 100644 --- a/packages/taro-mobx-h5/package.json +++ b/packages/taro-mobx-h5/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/mobx-h5", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "mobx-h5 for taro", "keywords": [ "mobx", @@ -28,8 +28,8 @@ "nervjs": "^1.5.0" }, "dependencies": { - "@tarojs/mobx-common": "1.3.34", - "@tarojs/taro-h5": "1.3.34" + "@tarojs/mobx-common": "2.0.0-beta.13", + "@tarojs/taro-h5": "2.0.0-beta.13" }, "devDependencies": { "rimraf": "^2.6.2", diff --git a/packages/taro-mobx-rn/package.json b/packages/taro-mobx-rn/package.json index 0d67894b1984..ff6386dae94f 100644 --- a/packages/taro-mobx-rn/package.json +++ b/packages/taro-mobx-rn/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/mobx-rn", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "mobx-rn for taro", "keywords": [ "mobx", @@ -18,7 +18,7 @@ "src" ], "dependencies": { - "@tarojs/mobx-common": "1.3.34", - "@tarojs/taro-rn": "1.3.34" + "@tarojs/mobx-common": "2.0.0-beta.13", + "@tarojs/taro-rn": "2.0.0-beta.13" } } diff --git a/packages/taro-mobx/package.json b/packages/taro-mobx/package.json index 87504df5bfaf..215e23150b75 100644 --- a/packages/taro-mobx/package.json +++ b/packages/taro-mobx/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/mobx", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "mobx for taro", "keywords": [ "mobx", @@ -24,8 +24,8 @@ "clear": "rimraf dist" }, "dependencies": { - "@tarojs/mobx-common": "1.3.34", - "@tarojs/taro": "1.3.34" + "@tarojs/mobx-common": "2.0.0-beta.13", + "@tarojs/taro": "2.0.0-beta.13" }, "devDependencies": { "rimraf": "^2.6.2", diff --git a/packages/taro-plugin-babel/package.json b/packages/taro-plugin-babel/package.json index dd5f2e50ff54..32067142b28c 100644 --- a/packages/taro-plugin-babel/package.json +++ b/packages/taro-plugin-babel/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/plugin-babel", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "Taro babel编译", "main": "index.js", "scripts": { diff --git a/packages/taro-plugin-csso/package.json b/packages/taro-plugin-csso/package.json index 84bf2befe356..6860e93c2536 100644 --- a/packages/taro-plugin-csso/package.json +++ b/packages/taro-plugin-csso/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/plugin-csso", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "Taro压缩CSS文件", "main": "index.js", "scripts": { diff --git a/packages/taro-plugin-less/package.json b/packages/taro-plugin-less/package.json index 7df195bfaecf..4df5b71bbaa8 100644 --- a/packages/taro-plugin-less/package.json +++ b/packages/taro-plugin-less/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/plugin-less", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "Taro 编译 less 文件", "main": "index.js", "scripts": { @@ -16,6 +16,6 @@ "author": "luckyadam", "license": "MIT", "dependencies": { - "less": "^3.10.3" + "less": "^3.0.4" } } diff --git a/packages/taro-plugin-sass/package.json b/packages/taro-plugin-sass/package.json index 4fa1f0b4a801..412f8085357b 100644 --- a/packages/taro-plugin-sass/package.json +++ b/packages/taro-plugin-sass/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/plugin-sass", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "Taro编译sass文件", "main": "index.js", "files": [ diff --git a/packages/taro-plugin-stylus/package.json b/packages/taro-plugin-stylus/package.json index 9c225e97eb0b..384b036f022d 100644 --- a/packages/taro-plugin-stylus/package.json +++ b/packages/taro-plugin-stylus/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/plugin-stylus", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "Taro 编译 stylus 文件", "main": "index.js", "scripts": { diff --git a/packages/taro-plugin-typescript/package.json b/packages/taro-plugin-typescript/package.json index 2f862dba2b77..066285deaaac 100644 --- a/packages/taro-plugin-typescript/package.json +++ b/packages/taro-plugin-typescript/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/plugin-typescript", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "Taro TypeScript 编译插件", "main": "index.js", "scripts": { diff --git a/packages/taro-plugin-uglifyjs/package.json b/packages/taro-plugin-uglifyjs/package.json index adcc6ec9e790..58aa8963b0d4 100644 --- a/packages/taro-plugin-uglifyjs/package.json +++ b/packages/taro-plugin-uglifyjs/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/plugin-uglifyjs", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "Taro压缩JS文件", "main": "index.js", "scripts": { diff --git a/packages/taro-qq/package.json b/packages/taro-qq/package.json index de356bac0cb2..0684030b8903 100644 --- a/packages/taro-qq/package.json +++ b/packages/taro-qq/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/taro-qq", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "Taro qq framework", "main": "index.js", "files": [ @@ -24,8 +24,8 @@ "author": "O2Team", "license": "MIT", "dependencies": { - "@tarojs/taro": "1.3.34", - "@tarojs/utils": "1.3.34", + "@tarojs/taro": "2.0.0-beta.13", + "@tarojs/utils": "2.0.0-beta.13", "lodash": "^4.17.10", "prop-types": "^15.6.1" } diff --git a/packages/taro-quickapp/__mocks__/@system/audio.js b/packages/taro-quickapp/__mocks__/@system/audio.js new file mode 100644 index 000000000000..b1c6ea436a54 --- /dev/null +++ b/packages/taro-quickapp/__mocks__/@system/audio.js @@ -0,0 +1 @@ +export default {} diff --git a/packages/taro-quickapp/__mocks__/@system/barcode.js b/packages/taro-quickapp/__mocks__/@system/barcode.js new file mode 100644 index 000000000000..b1c6ea436a54 --- /dev/null +++ b/packages/taro-quickapp/__mocks__/@system/barcode.js @@ -0,0 +1 @@ +export default {} diff --git a/packages/taro-quickapp/__mocks__/@system/clipboard.js b/packages/taro-quickapp/__mocks__/@system/clipboard.js new file mode 100644 index 000000000000..b1c6ea436a54 --- /dev/null +++ b/packages/taro-quickapp/__mocks__/@system/clipboard.js @@ -0,0 +1 @@ +export default {} diff --git a/packages/taro-quickapp/__mocks__/@system/contact.js b/packages/taro-quickapp/__mocks__/@system/contact.js new file mode 100644 index 000000000000..b1c6ea436a54 --- /dev/null +++ b/packages/taro-quickapp/__mocks__/@system/contact.js @@ -0,0 +1 @@ +export default {} diff --git a/packages/taro-quickapp/__mocks__/@system/device.js b/packages/taro-quickapp/__mocks__/@system/device.js new file mode 100644 index 000000000000..b1c6ea436a54 --- /dev/null +++ b/packages/taro-quickapp/__mocks__/@system/device.js @@ -0,0 +1 @@ +export default {} diff --git a/packages/taro-quickapp/__mocks__/@system/fetch.js b/packages/taro-quickapp/__mocks__/@system/fetch.js new file mode 100644 index 000000000000..b1c6ea436a54 --- /dev/null +++ b/packages/taro-quickapp/__mocks__/@system/fetch.js @@ -0,0 +1 @@ +export default {} diff --git a/packages/taro-quickapp/__mocks__/@system/geolocation.js b/packages/taro-quickapp/__mocks__/@system/geolocation.js new file mode 100644 index 000000000000..b1c6ea436a54 --- /dev/null +++ b/packages/taro-quickapp/__mocks__/@system/geolocation.js @@ -0,0 +1 @@ +export default {} diff --git a/packages/taro-quickapp/__mocks__/@system/notification.js b/packages/taro-quickapp/__mocks__/@system/notification.js new file mode 100644 index 000000000000..b1c6ea436a54 --- /dev/null +++ b/packages/taro-quickapp/__mocks__/@system/notification.js @@ -0,0 +1 @@ +export default {} diff --git a/packages/taro-quickapp/__mocks__/@system/prompt.js b/packages/taro-quickapp/__mocks__/@system/prompt.js new file mode 100644 index 000000000000..b1c6ea436a54 --- /dev/null +++ b/packages/taro-quickapp/__mocks__/@system/prompt.js @@ -0,0 +1 @@ +export default {} diff --git a/packages/taro-quickapp/__mocks__/@system/record.js b/packages/taro-quickapp/__mocks__/@system/record.js new file mode 100644 index 000000000000..b1c6ea436a54 --- /dev/null +++ b/packages/taro-quickapp/__mocks__/@system/record.js @@ -0,0 +1 @@ +export default {} diff --git a/packages/taro-quickapp/__mocks__/@system/request.js b/packages/taro-quickapp/__mocks__/@system/request.js new file mode 100644 index 000000000000..b1c6ea436a54 --- /dev/null +++ b/packages/taro-quickapp/__mocks__/@system/request.js @@ -0,0 +1 @@ +export default {} diff --git a/packages/taro-quickapp/__mocks__/@system/router.js b/packages/taro-quickapp/__mocks__/@system/router.js new file mode 100644 index 000000000000..b1c6ea436a54 --- /dev/null +++ b/packages/taro-quickapp/__mocks__/@system/router.js @@ -0,0 +1 @@ +export default {} diff --git a/packages/taro-quickapp/__mocks__/@system/sensor.js b/packages/taro-quickapp/__mocks__/@system/sensor.js new file mode 100644 index 000000000000..b1c6ea436a54 --- /dev/null +++ b/packages/taro-quickapp/__mocks__/@system/sensor.js @@ -0,0 +1 @@ +export default {} diff --git a/packages/taro-quickapp/__mocks__/@system/share.js b/packages/taro-quickapp/__mocks__/@system/share.js new file mode 100644 index 000000000000..b1c6ea436a54 --- /dev/null +++ b/packages/taro-quickapp/__mocks__/@system/share.js @@ -0,0 +1 @@ +export default {} diff --git a/packages/taro-quickapp/__mocks__/@system/sms.js b/packages/taro-quickapp/__mocks__/@system/sms.js new file mode 100644 index 000000000000..b1c6ea436a54 --- /dev/null +++ b/packages/taro-quickapp/__mocks__/@system/sms.js @@ -0,0 +1 @@ +export default {} diff --git a/packages/taro-quickapp/__mocks__/@system/storage.js b/packages/taro-quickapp/__mocks__/@system/storage.js new file mode 100644 index 000000000000..b1c6ea436a54 --- /dev/null +++ b/packages/taro-quickapp/__mocks__/@system/storage.js @@ -0,0 +1 @@ +export default {} diff --git a/packages/taro-quickapp/__mocks__/@system/vibrator.js b/packages/taro-quickapp/__mocks__/@system/vibrator.js new file mode 100644 index 000000000000..b1c6ea436a54 --- /dev/null +++ b/packages/taro-quickapp/__mocks__/@system/vibrator.js @@ -0,0 +1 @@ +export default {} diff --git a/packages/taro-quickapp/__mocks__/@system/webview.js b/packages/taro-quickapp/__mocks__/@system/webview.js new file mode 100644 index 000000000000..b1c6ea436a54 --- /dev/null +++ b/packages/taro-quickapp/__mocks__/@system/webview.js @@ -0,0 +1 @@ +export default {} diff --git a/packages/taro-quickapp/__test__/api.test.js b/packages/taro-quickapp/__test__/api.test.js new file mode 100644 index 000000000000..c560f3724cb6 --- /dev/null +++ b/packages/taro-quickapp/__test__/api.test.js @@ -0,0 +1 @@ +test('api test', () => {}) diff --git a/packages/taro-quickapp/babel.config.js b/packages/taro-quickapp/babel.config.js new file mode 100644 index 000000000000..0e98ec84c18c --- /dev/null +++ b/packages/taro-quickapp/babel.config.js @@ -0,0 +1,15 @@ +module.exports = { + 'presets': [ + ['@babel/preset-env', { + // 'modules': 'umd', + 'spec': true + }] + ], + 'plugins': [ + '@babel/plugin-proposal-class-properties', + '@babel/plugin-proposal-object-rest-spread', + ['@babel/plugin-transform-react-jsx', { + 'pragma': 'Nerv.createElement' + }] + ] +} diff --git a/packages/taro-quickapp/jest.config.js b/packages/taro-quickapp/jest.config.js new file mode 100644 index 000000000000..2c4559f7165a --- /dev/null +++ b/packages/taro-quickapp/jest.config.js @@ -0,0 +1,15 @@ +module.exports = { + verbose: true, + moduleNameMapper: { + '@tarojs/taro-quickapp': '/src/index.js', + // '@tarojs/taro': '/../taro/src/index', + '@tarojs/utils': '/../taro-utils/src/index', + '^@system.(.*)': '/__mocks__/@system/$1.js' + }, + rootDir: __dirname, + testMatch: ['/**/*.test.js'], + transform: { + '^.+\\.js?$': 'babel-jest' + }, + transformIgnorePatterns: ['/node_modules/'] +} diff --git a/packages/taro-quickapp/package.json b/packages/taro-quickapp/package.json index 554aaa616771..b6f0408bd882 100644 --- a/packages/taro-quickapp/package.json +++ b/packages/taro-quickapp/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/taro-quickapp", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "Taro quickapp framework", "main": "index.js", "files": [ @@ -10,8 +10,9 @@ "package.json" ], "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "build": "rollup -c rollup.config.js" + "build": "rollup -c rollup.config.js", + "dev": "rollup -c rollup.config.js -w", + "test": "jest" }, "repository": { "type": "git", @@ -23,8 +24,8 @@ "author": "O2Team", "license": "MIT", "dependencies": { - "@tarojs/taro": "1.3.34", - "@tarojs/utils": "1.3.34", + "@tarojs/taro": "2.0.0-beta.13", + "@tarojs/utils": "2.0.0-beta.13", "lodash": "^4.17.10", "prop-types": "^15.6.1" } diff --git a/packages/taro-quickapp/src/api/index.js b/packages/taro-quickapp/src/api/index.js index 62719eaca797..586e77032088 100644 --- a/packages/taro-quickapp/src/api/index.js +++ b/packages/taro-quickapp/src/api/index.js @@ -11,4 +11,5 @@ export * from './notification' export * from './system' export * from './webview' export * from './media' -export * from './device' \ No newline at end of file +export * from './device' +export * from './unsupportedApi' diff --git a/packages/taro-quickapp/src/api/index.test.js b/packages/taro-quickapp/src/api/index.test.js new file mode 100644 index 000000000000..ca7153a3ec3a --- /dev/null +++ b/packages/taro-quickapp/src/api/index.test.js @@ -0,0 +1,8 @@ +describe('test', () => { + const chalk = require('chalk') + const api = require('./index') + const unsupportedApi = require('./unsupportedApi') + console.log(Object.keys(api).map(e => !unsupportedApi[e] ? e : chalk.red(e)).join(' ')) + + test('api test', () => {}) +}) diff --git a/packages/taro-quickapp/src/api/interactive/index.js b/packages/taro-quickapp/src/api/interactive/index.js index 9600f333a47f..2e44d7b73244 100644 --- a/packages/taro-quickapp/src/api/interactive/index.js +++ b/packages/taro-quickapp/src/api/interactive/index.js @@ -1,7 +1,6 @@ import prompt from '@system.prompt' -import { - eventCenter -} from '@tarojs/taro' + +import appGlobal from '../../global' export function showToast (options = {}) { const { title = '', duration = 1500, success, complete, fail } = options @@ -128,7 +127,7 @@ function setNavigationBar (params, fnName) { const res = { errMsg: `${fnName}: ok` } return new Promise((resolve, reject) => { try { - eventCenter.trigger('TaroEvent:setNavigationBar', params) + appGlobal.eventCenter.trigger('TaroEvent:setNavigationBar', params) success && success(res) complete && complete(res) resolve(res) @@ -154,7 +153,7 @@ export function startPullDownRefresh (options = {}) { const res = { errMsg: `startPullDownRefresh: ok` } return new Promise((resolve, reject) => { try { - eventCenter.trigger('TaroPage:startPullDownRefresh') + appGlobal.eventCenter.trigger('TaroPage:startPullDownRefresh') success && success(res) complete && complete(res) resolve(res) @@ -172,7 +171,7 @@ export function stopPullDownRefresh (options = {}) { const res = { errMsg: `stopPullDownRefresh: ok` } return new Promise((resolve, reject) => { try { - eventCenter.trigger('TaroPage:stopPullDownRefresh') + appGlobal.eventCenter.trigger('TaroPage:stopPullDownRefresh') success && success(res) complete && complete(res) resolve(res) diff --git a/packages/taro-quickapp/src/api/media/index.js b/packages/taro-quickapp/src/api/media/index.js index 0d62f28f924b..04d14b42a58c 100644 --- a/packages/taro-quickapp/src/api/media/index.js +++ b/packages/taro-quickapp/src/api/media/index.js @@ -1,4 +1,5 @@ import audio from '@system.audio' +import device from '@system.device' import record from '@system.record' export function createInnerAudioContext () { @@ -66,7 +67,8 @@ export function stopRecord () { } export default { - createAudioContext, + createInnerAudioContext, + createAudioContext: createInnerAudioContext, getPlayState, startRecord, stopRecord diff --git a/packages/taro-quickapp/src/api/system/index.js b/packages/taro-quickapp/src/api/system/index.js index 17a8677e17fc..894da33e6099 100644 --- a/packages/taro-quickapp/src/api/system/index.js +++ b/packages/taro-quickapp/src/api/system/index.js @@ -8,7 +8,7 @@ export function getSystemInfo (options = {}) { return new Promise((resolve, reject) => { device.getInfo({ success (data) { - res.result = data.result + res.result = data success && success(res) resolve(res) }, diff --git a/packages/taro-quickapp/src/api/unsupportedApi/index.js b/packages/taro-quickapp/src/api/unsupportedApi/index.js new file mode 100644 index 000000000000..ac3f8d1a11c9 --- /dev/null +++ b/packages/taro-quickapp/src/api/unsupportedApi/index.js @@ -0,0 +1,276 @@ +import { temporarilyNotSupport } from '../utils' + +// onAndSyncApis +export const onSocketOpen = temporarilyNotSupport('onSocketOpen') +export const onSocketError = temporarilyNotSupport('onSocketError') +export const onSocketMessage = temporarilyNotSupport('onSocketMessage') +export const onSocketClose = temporarilyNotSupport('onSocketClose') +export const onBackgroundAudioPlay = temporarilyNotSupport('onBackgroundAudioPlay') +export const onBackgroundAudioPause = temporarilyNotSupport('onBackgroundAudioPause') +export const onBackgroundAudioStop = temporarilyNotSupport('onBackgroundAudioStop') +export const onNetworkStatusChange = temporarilyNotSupport('onNetworkStatusChange') +// export const onAccelerometerChange = temporarilyNotSupport('onAccelerometerChange') +// export const onCompassChange = temporarilyNotSupport('onCompassChange') +export const onDeviceMotionChange = temporarilyNotSupport('onDeviceMotionChange') +export const onBluetoothAdapterStateChange = temporarilyNotSupport('onBluetoothAdapterStateChange') +export const onBluetoothDeviceFound = temporarilyNotSupport('onBluetoothDeviceFound') +export const onBLEConnectionStateChange = temporarilyNotSupport('onBLEConnectionStateChange') +export const onBLECharacteristicValueChange = temporarilyNotSupport('onBLECharacteristicValueChange') +export const onBeaconUpdate = temporarilyNotSupport('onBeaconUpdate') +export const onBeaconServiceChange = temporarilyNotSupport('onBeaconServiceChange') +export const onUserCaptureScreen = temporarilyNotSupport('onUserCaptureScreen') +export const onHCEMessage = temporarilyNotSupport('onHCEMessage') +export const onGetWifiList = temporarilyNotSupport('onGetWifiList') +export const onWifiConnected = temporarilyNotSupport('onWifiConnected') +export const setStorageSync = temporarilyNotSupport('setStorageSync') +export const getStorageSync = temporarilyNotSupport('getStorageSync') +export const getStorageInfoSync = temporarilyNotSupport('getStorageInfoSync') +export const removeStorageSync = temporarilyNotSupport('removeStorageSync') +export const clearStorageSync = temporarilyNotSupport('clearStorageSync') +export const getSystemInfoSync = temporarilyNotSupport('getSystemInfoSync') +export const getExtConfigSync = temporarilyNotSupport('getExtConfigSync') +export const getLogManager = temporarilyNotSupport('getLogManager') +export const onMemoryWarning = temporarilyNotSupport('onMemoryWarning') +export const reportAnalytics = temporarilyNotSupport('reportAnalytics') +export const navigateToSmartGameProgram = temporarilyNotSupport('navigateToSmartGameProgram') + +// 文件 +export const getFileSystemManager = temporarilyNotSupport('getFileSystemManager') + +// noPromiseApis +// 媒体 +// export const stopRecord = temporarilyNotSupport('stopRecord') +export const getRecorderManager = temporarilyNotSupport('getRecorderManager') +export const pauseVoice = temporarilyNotSupport('pauseVoice') +export const stopVoice = temporarilyNotSupport('stopVoice') +export const pauseBackgroundAudio = temporarilyNotSupport('pauseBackgroundAudio') +export const stopBackgroundAudio = temporarilyNotSupport('stopBackgroundAudio') +export const getBackgroundAudioManager = temporarilyNotSupport('getBackgroundAudioManager') +export const createAudioContext = temporarilyNotSupport('createAudioContext') +// export const createInnerAudioContext = temporarilyNotSupport('createInnerAudioContext') +export const createVideoContext = temporarilyNotSupport('createVideoContext') +export const createCameraContext = temporarilyNotSupport('createCameraContext') +export const createLivePlayerContext = temporarilyNotSupport('createLivePlayerContext') +export const createLivePusherContext = temporarilyNotSupport('createLivePusherContext') + +// 位置 +export const createMapContext = temporarilyNotSupport('createMapContext') + +// 设备 +export const canIUse = temporarilyNotSupport('canIUse') +// export const startAccelerometer = temporarilyNotSupport('startAccelerometer') +// export const stopAccelerometer = temporarilyNotSupport('stopAccelerometer') +// export const startCompass = temporarilyNotSupport('startCompass') +// export const stopCompass = temporarilyNotSupport('stopCompass') +export const startDeviceMotionListening = temporarilyNotSupport('startDeviceMotionListening') +export const stopDeviceMotionListening = temporarilyNotSupport('stopDeviceMotionListening') + +// 界面 +export const hideToast = temporarilyNotSupport('hideToast') +export const hideLoading = temporarilyNotSupport('hideLoading') +export const showNavigationBarLoading = temporarilyNotSupport('showNavigationBarLoading') +export const hideNavigationBarLoading = temporarilyNotSupport('hideNavigationBarLoading') +export const createAnimation = temporarilyNotSupport('createAnimation') +export const pageScrollTo = temporarilyNotSupport('pageScrollTo') +export const createSelectorQuery = temporarilyNotSupport('createSelectorQuery') +export const createCanvasContext = temporarilyNotSupport('createCanvasContext') +export const createContext = temporarilyNotSupport('createContext') +export const drawCanvas = temporarilyNotSupport('drawCanvas') +export const hideKeyboard = temporarilyNotSupport('hideKeyboard') +// export const stopPullDownRefresh = temporarilyNotSupport('stopPullDownRefresh') +export const createIntersectionObserver = temporarilyNotSupport('createIntersectionObserver') + +// 自定义组件 +export const nextTick = temporarilyNotSupport('nextTick') + +// 菜单 +export const getMenuButtonBoundingClientRect = temporarilyNotSupport('getMenuButtonBoundingClientRect') + +// 窗口 +export const onWindowResize = temporarilyNotSupport('onWindowResize') +export const offWindowResize = temporarilyNotSupport('offWindowResize') + +// 拓展接口 +export const arrayBufferToBase64 = temporarilyNotSupport('arrayBufferToBase64') +export const base64ToArrayBuffer = temporarilyNotSupport('base64ToArrayBuffer') + +export const getAccountInfoSync = temporarilyNotSupport('getAccountInfoSync') +export const getUpdateManager = temporarilyNotSupport('getUpdateManager') +export const createWorker = temporarilyNotSupport('createWorker') + +// otherApis +// 网络 +// export const uploadFile = temporarilyNotSupport('uploadFile') +// export const downloadFile = temporarilyNotSupport('downloadFile') +export const connectSocket = temporarilyNotSupport('connectSocket') +export const sendSocketMessage = temporarilyNotSupport('sendSocketMessage') +export const closeSocket = temporarilyNotSupport('closeSocket') + +// 媒体 +export const chooseImage = temporarilyNotSupport('chooseImage') +export const previewImage = temporarilyNotSupport('previewImage') +export const getImageInfo = temporarilyNotSupport('getImageInfo') +export const saveImageToPhotosAlbum = temporarilyNotSupport('saveImageToPhotosAlbum') +// export const startRecord = temporarilyNotSupport('startRecord') +export const playVoice = temporarilyNotSupport('playVoice') +export const setInnerAudioOption = temporarilyNotSupport('setInnerAudioOption') +export const getAvailableAudioSources = temporarilyNotSupport('getAvailableAudioSources') +export const getBackgroundAudioPlayerState = temporarilyNotSupport('getBackgroundAudioPlayerState') +export const playBackgroundAudio = temporarilyNotSupport('playBackgroundAudio') +export const seekBackgroundAudio = temporarilyNotSupport('seekBackgroundAudio') +export const chooseVideo = temporarilyNotSupport('chooseVideo') +export const saveVideoToPhotosAlbum = temporarilyNotSupport('saveVideoToPhotosAlbum') +export const loadFontFace = temporarilyNotSupport('loadFontFace') + +// 文件 +export const saveFile = temporarilyNotSupport('saveFile') +export const getFileInfo = temporarilyNotSupport('getFileInfo') +export const getSavedFileList = temporarilyNotSupport('getSavedFileList') +export const getSavedFileInfo = temporarilyNotSupport('getSavedFileInfo') +export const removeSavedFile = temporarilyNotSupport('removeSavedFile') +export const openDocument = temporarilyNotSupport('openDocument') + +// 数据缓存 +// export const setStorage = temporarilyNotSupport('setStorage') +// export const getStorage = temporarilyNotSupport('getStorage') +// export const getStorageInfo = temporarilyNotSupport('getStorageInfo') +// export const removeStorage = temporarilyNotSupport('removeStorage') +// export const clearStorage = temporarilyNotSupport('clearStorage') + +// 导航 +// export const navigateBack = temporarilyNotSupport('navigateBack') +// export const navigateTo = temporarilyNotSupport('navigateTo') +// export const redirectTo = temporarilyNotSupport('redirectTo') +// export const switchTab = temporarilyNotSupport('switchTab') +// export const reLaunch = temporarilyNotSupport('reLaunch') + +// 位置 +// export const getLocation = temporarilyNotSupport('getLocation') +export const chooseLocation = temporarilyNotSupport('chooseLocation') +export const openLocation = temporarilyNotSupport('openLocation') + +// 设备 +// export const getSystemInfo = temporarilyNotSupport('getSystemInfo') +export const getNetworkType = temporarilyNotSupport('getNetworkType') +export const makePhoneCall = temporarilyNotSupport('makePhoneCall') +// export const scanCode = temporarilyNotSupport('scanCode') +// export const setClipboardData = temporarilyNotSupport('setClipboardData') +// export const getClipboardData = temporarilyNotSupport('getClipboardData') +export const openBluetoothAdapter = temporarilyNotSupport('openBluetoothAdapter') +export const closeBluetoothAdapter = temporarilyNotSupport('closeBluetoothAdapter') +export const getBluetoothAdapterState = temporarilyNotSupport('getBluetoothAdapterState') +export const startBluetoothDevicesDiscovery = temporarilyNotSupport('startBluetoothDevicesDiscovery') +export const stopBluetoothDevicesDiscovery = temporarilyNotSupport('stopBluetoothDevicesDiscovery') +export const getBluetoothDevices = temporarilyNotSupport('getBluetoothDevices') +export const getConnectedBluetoothDevices = temporarilyNotSupport('getConnectedBluetoothDevices') +export const createBLEConnection = temporarilyNotSupport('createBLEConnection') +export const closeBLEConnection = temporarilyNotSupport('closeBLEConnection') +export const getBLEDeviceServices = temporarilyNotSupport('getBLEDeviceServices') +export const getBLEDeviceCharacteristics = temporarilyNotSupport('getBLEDeviceCharacteristics') +export const readBLECharacteristicValue = temporarilyNotSupport('readBLECharacteristicValue') +export const writeBLECharacteristicValue = temporarilyNotSupport('writeBLECharacteristicValue') +export const notifyBLECharacteristicValueChange = temporarilyNotSupport('notifyBLECharacteristicValueChange') +export const startBeaconDiscovery = temporarilyNotSupport('startBeaconDiscovery') +export const stopBeaconDiscovery = temporarilyNotSupport('stopBeaconDiscovery') +export const getBeacons = temporarilyNotSupport('getBeacons') +export const setScreenBrightness = temporarilyNotSupport('setScreenBrightness') +export const getScreenBrightness = temporarilyNotSupport('getScreenBrightness') +export const setKeepScreenOn = temporarilyNotSupport('setKeepScreenOn') +// export const vibrateLong = temporarilyNotSupport('vibrateLong') +// export const vibrateShort = temporarilyNotSupport('vibrateShort') +export const addPhoneContact = temporarilyNotSupport('addPhoneContact') +export const getHCEState = temporarilyNotSupport('getHCEState') +export const startHCE = temporarilyNotSupport('startHCE') +export const stopHCE = temporarilyNotSupport('stopHCE') +export const sendHCEMessage = temporarilyNotSupport('sendHCEMessage') +export const startWifi = temporarilyNotSupport('startWifi') +export const stopWifi = temporarilyNotSupport('stopWifi') +export const connectWifi = temporarilyNotSupport('connectWifi') +export const getWifiList = temporarilyNotSupport('getWifiList') +export const setWifiList = temporarilyNotSupport('setWifiList') +export const getConnectedWifi = temporarilyNotSupport('getConnectedWifi') + +// 界面 +// export const showToast = temporarilyNotSupport('showToast') +export const showLoading = temporarilyNotSupport('showLoading') +// export const showModal = temporarilyNotSupport('showModal') +// export const showActionSheet = temporarilyNotSupport('showActionSheet') +// export const setNavigationBarTitle = temporarilyNotSupport('setNavigationBarTitle') +// export const setNavigationBarColor = temporarilyNotSupport('setNavigationBarColor') +export const setTabBarBadge = temporarilyNotSupport('setTabBarBadge') +export const removeTabBarBadge = temporarilyNotSupport('removeTabBarBadge') +export const showTabBarRedDot = temporarilyNotSupport('showTabBarRedDot') +export const hideTabBarRedDot = temporarilyNotSupport('hideTabBarRedDot') +export const setTabBarStyle = temporarilyNotSupport('setTabBarStyle') +export const setTabBarItem = temporarilyNotSupport('setTabBarItem') +export const showTabBar = temporarilyNotSupport('showTabBar') +export const hideTabBar = temporarilyNotSupport('hideTabBar') +export const setTopBarText = temporarilyNotSupport('setTopBarText') +// export const startPullDownRefresh = temporarilyNotSupport('startPullDownRefresh') +export const canvasToTempFilePath = temporarilyNotSupport('canvasToTempFilePath') +export const canvasGetImageData = temporarilyNotSupport('canvasGetImageData') +export const canvasPutImageData = temporarilyNotSupport('canvasPutImageData') + +export const setBackgroundColor = temporarilyNotSupport('setBackgroundColor') +export const setBackgroundTextStyle = temporarilyNotSupport('setBackgroundTextStyle') + +// 第三方平台 +export const getExtConfig = temporarilyNotSupport('getExtConfig') + +// 开放接口 +export const login = temporarilyNotSupport('login') +export const checkSession = temporarilyNotSupport('checkSession') +export const authorize = temporarilyNotSupport('authorize') +export const getUserInfo = temporarilyNotSupport('getUserInfo') +export const checkIsSupportFacialRecognition = temporarilyNotSupport('checkIsSupportFacialRecognition') +export const startFacialRecognitionVerify = temporarilyNotSupport('startFacialRecognitionVerify') +export const startFacialRecognitionVerifyAndUploadVideo = temporarilyNotSupport('startFacialRecognitionVerifyAndUploadVideo') +export const faceVerifyForPay = temporarilyNotSupport('faceVerifyForPay') +export const requestPayment = temporarilyNotSupport('requestPayment') +// export const showShareMenu = temporarilyNotSupport('showShareMenu') +export const hideShareMenu = temporarilyNotSupport('hideShareMenu') +export const updateShareMenu = temporarilyNotSupport('updateShareMenu') +export const getShareInfo = temporarilyNotSupport('getShareInfo') +export const chooseAddress = temporarilyNotSupport('chooseAddress') +export const addCard = temporarilyNotSupport('addCard') +export const openCard = temporarilyNotSupport('openCard') +export const openSetting = temporarilyNotSupport('openSetting') +export const getSetting = temporarilyNotSupport('getSetting') +export const getWeRunData = temporarilyNotSupport('getWeRunData') +export const navigateToMiniProgram = temporarilyNotSupport('navigateToMiniProgram') +export const navigateBackMiniProgram = temporarilyNotSupport('navigateBackMiniProgram') +export const chooseInvoice = temporarilyNotSupport('chooseInvoice') +export const chooseInvoiceTitle = temporarilyNotSupport('chooseInvoiceTitle') +export const checkIsSupportSoterAuthentication = temporarilyNotSupport('checkIsSupportSoterAuthentication') +export const startSoterAuthentication = temporarilyNotSupport('startSoterAuthentication') +export const checkIsSoterEnrolledInDevice = temporarilyNotSupport('checkIsSoterEnrolledInDevice') + +export const setEnableDebug = temporarilyNotSupport('setEnableDebug') + +// 百度小程序专有 API +// 百度小程序 AI 相关 +export const ocrIdCard = temporarilyNotSupport('ocrIdCard') +export const ocrBankCard = temporarilyNotSupport('ocrBankCard') +export const ocrDrivingLicense = temporarilyNotSupport('ocrDrivingLicense') +export const ocrVehicleLicense = temporarilyNotSupport('ocrVehicleLicense') +export const textReview = temporarilyNotSupport('textReview') +export const textToAudio = temporarilyNotSupport('textToAudio') +export const imageAudit = temporarilyNotSupport('imageAudit') +export const advancedGeneralIdentify = temporarilyNotSupport('advancedGeneralIdentify') +export const objectDetectIdentify = temporarilyNotSupport('objectDetectIdentify') +export const carClassify = temporarilyNotSupport('carClassify') +export const dishClassify = temporarilyNotSupport('dishClassify') +export const logoClassify = temporarilyNotSupport('logoClassify') +export const animalClassify = temporarilyNotSupport('animalClassify') +export const plantClassify = temporarilyNotSupport('plantClassify') + +// 用户信息 +export const getSwanId = temporarilyNotSupport('getSwanId') + +// 百度收银台支付 +export const requestPolymerPayment = temporarilyNotSupport('requestPolymerPayment') + +// 打开小程序 +export const navigateToSmartProgram = temporarilyNotSupport('navigateToSmartProgram') +export const navigateBackSmartProgram = temporarilyNotSupport('navigateBackSmartProgram') +export const preloadSubPackage = temporarilyNotSupport('preloadSubPackage') diff --git a/packages/taro-quickapp/src/api/utils/index.js b/packages/taro-quickapp/src/api/utils/index.js index 65448d459470..f5aaa2433cb0 100644 --- a/packages/taro-quickapp/src/api/utils/index.js +++ b/packages/taro-quickapp/src/api/utils/index.js @@ -32,3 +32,11 @@ export function makeSyncPromise (fnName, process, options = {}) { } }) } + +export function temporarilyNotSupport (apiName) { + return () => { + const errMsg = `暂时不支持 API ${apiName}` + console.error(errMsg) + return Promise.reject(new Error(errMsg)) + } +} diff --git a/packages/taro-quickapp/src/create-component.js b/packages/taro-quickapp/src/create-component.js index 509169036014..8465cb11f424 100644 --- a/packages/taro-quickapp/src/create-component.js +++ b/packages/taro-quickapp/src/create-component.js @@ -102,14 +102,18 @@ function processEvent (eventHandlerName, obj) { get () { return Object.assign(currentTarget || target || {}, event.detail) } - }, - stopPropagation: { - value: () => {} - }, - preventDefault: { - value: () => {} } }) + if (!event.stopPropagation) { + Object.defineProperty(event, 'stopPropagation', { + value: () => {} + }) + } + if (!event.preventDefault) { + Object.defineProperty(event, 'preventDefault', { + value: () => {} + }) + } } const scope = this.$component diff --git a/packages/taro-redux-h5/package.json b/packages/taro-redux-h5/package.json index 3f4c8187c1fb..5feba2b61426 100644 --- a/packages/taro-redux-h5/package.json +++ b/packages/taro-redux-h5/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/redux-h5", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "Forked react-redux for taro", "keywords": [ "react", @@ -46,7 +46,7 @@ "@babel/plugin-proposal-object-rest-spread": "^7.0.0-beta.49", "@babel/plugin-transform-react-jsx": "^7.0.0-beta.49", "@babel/preset-env": "^7.0.0-beta.49", - "@tarojs/taro-h5": "1.3.34", + "@tarojs/taro-h5": "2.0.0-beta.13", "babel-plugin-transform-react-remove-prop-types": "^0.4.13", "redux": "^4.0.0", "rimraf": "^2.6.2", diff --git a/packages/taro-redux-rn/package.json b/packages/taro-redux-rn/package.json index 292cdcd7a7a1..ff964b53cdd4 100644 --- a/packages/taro-redux-rn/package.json +++ b/packages/taro-redux-rn/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/taro-redux-rn", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "taro-redux-rn", "main": "./src/index.js", "files": [ diff --git a/packages/taro-redux/package.json b/packages/taro-redux/package.json index 5fbf5c60c99d..6d452fad232d 100644 --- a/packages/taro-redux/package.json +++ b/packages/taro-redux/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/redux", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "Redux for Taro", "main": "index.js", "typings": "types/index.d.ts", @@ -32,7 +32,7 @@ "jest": "^23.1.0" }, "dependencies": { - "@tarojs/taro": "1.3.34", - "@tarojs/utils": "1.3.34" + "@tarojs/taro": "2.0.0-beta.13", + "@tarojs/utils": "2.0.0-beta.13" } } diff --git a/packages/taro-rn-runner/package.json b/packages/taro-rn-runner/package.json index d41f388417d2..aacd5f9d9784 100644 --- a/packages/taro-rn-runner/package.json +++ b/packages/taro-rn-runner/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/rn-runner", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "ReactNative build tool for taro", "main": "index.js", "scripts": { @@ -26,7 +26,7 @@ "cross-spawn": "^5.0.1", "fs-extra": "^3.0.1", "indent-string": "^3.0.0", - "inquirer": "^7.0.0", + "inquirer": "^3.0.1", "lodash": "^4.17.4", "match-require": "^2.0.0", "minimist": "^1.2.0", diff --git a/packages/taro-rn/package.json b/packages/taro-rn/package.json index aa32fe0b1b7c..c7a57c540150 100644 --- a/packages/taro-rn/package.json +++ b/packages/taro-rn/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/taro-rn", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "Taro RN framework", "main": "./index.js", "files": [ @@ -10,7 +10,7 @@ ], "scripts": { "server": "node node_modules/react-native/local-cli/cli.js start", - "build": "rm -rf ./dist && gulp", + "build": "rimraf ./dist && gulp", "dev": "tsc --watch", "prepack": "npm run build", "test": "jest", @@ -27,7 +27,7 @@ "author": "O2Team", "license": "MIT", "dependencies": { - "@tarojs/taro": "1.3.34", + "@tarojs/taro": "2.0.0-beta.13", "babel-preset-expo": "^5.2.0", "base64-js": "^1.3.0", "expo-av": "^6.0.0", @@ -71,11 +71,12 @@ "jest-enzyme": "^7.0.0", "jest-react-native": "^18.0.0", "mock-socket": "^7.1.0", - "react": "16.3.1", + "react": "16.8.0", "react-dom": "^16.7.0", - "react-native": "0.55.4", + "react-native": "0.59.9", "react-test-renderer": "^16.5.2", "redux": "^4.0.0", + "rimraf": "^3.0.0", "ts-jest": "23.10.4", "tslib": "1.9.3", "typescript": "3.0.3" diff --git a/packages/taro-rn/yarn.lock b/packages/taro-rn/yarn.lock index 424c084d1681..f4da4d6ba226 100644 --- a/packages/taro-rn/yarn.lock +++ b/packages/taro-rn/yarn.lock @@ -9,7 +9,7 @@ dependencies: "@babel/highlight" "^7.0.0" -"@babel/core@7.6.4", "@babel/core@^7.0.0-beta", "@babel/core@^7.1.0": +"@babel/core@7.6.4", "@babel/core@^7.1.0": version "7.6.4" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.4.tgz#6ebd9fe00925f6c3e177bb726a188b5f578088ff" integrity sha512-Rm0HGw101GY8FTzpWSyRbki/jzq+/PkNQJ+nSulrdY6gFGOsNseCqD6KHRYe2E+EdzuBdr2pxCp6s4Uk6eJ+XQ== @@ -29,7 +29,37 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.0.0-beta", "@babel/generator@^7.4.0", "@babel/generator@^7.6.3", "@babel/generator@^7.6.4": +"@babel/core@^7.0.0": + version "7.7.7" + resolved "https://registry.npm.taobao.org/@babel/core/download/@babel/core-7.7.7.tgz#ee155d2e12300bcc0cff6a8ad46f2af5063803e9" + integrity sha1-7hVdLhIwC8wM/2qK1G8q9QY4A+k= + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.7.7" + "@babel/helpers" "^7.7.4" + "@babel/parser" "^7.7.7" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + convert-source-map "^1.7.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.0.0", "@babel/generator@^7.7.4", "@babel/generator@^7.7.7": + version "7.7.7" + resolved "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.7.7.tgz#859ac733c44c74148e1a72980a64ec84b85f4f45" + integrity sha1-hZrHM8RMdBSOGnKYCmTshLhfT0U= + dependencies: + "@babel/types" "^7.7.4" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + +"@babel/generator@^7.4.0", "@babel/generator@^7.6.3", "@babel/generator@^7.6.4": version "7.6.4" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.4.tgz#a4f8437287bf9671b07f483b76e3bb731bc97671" integrity sha512-jsBuXkFoZxk0yWLyGI9llT9oiQ2FeTASmRFE32U+aaDTfoE92t78eroO7PTpU/OrYq38hlcDM6vbfLDaOLy+7w== @@ -46,6 +76,13 @@ dependencies: "@babel/types" "^7.0.0" +"@babel/helper-annotate-as-pure@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.7.4.tgz?cache=0&sync_timestamp=1574466005922&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-annotate-as-pure%2Fdownload%2F%40babel%2Fhelper-annotate-as-pure-7.7.4.tgz#bb3faf1e74b74bd547e867e48f551fa6b098b6ce" + integrity sha1-uz+vHnS3S9VH6Gfkj1UfprCYts4= + dependencies: + "@babel/types" "^7.7.4" + "@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" @@ -109,6 +146,15 @@ "@babel/template" "^7.1.0" "@babel/types" "^7.0.0" +"@babel/helper-function-name@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.7.4.tgz?cache=0&sync_timestamp=1574465630791&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-function-name%2Fdownload%2F%40babel%2Fhelper-function-name-7.7.4.tgz#ab6e041e7135d436d8f0a3eca15de5b67a341a2e" + integrity sha1-q24EHnE11DbY8KPsoV3ltno0Gi4= + dependencies: + "@babel/helper-get-function-arity" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/types" "^7.7.4" + "@babel/helper-get-function-arity@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" @@ -116,6 +162,13 @@ dependencies: "@babel/types" "^7.0.0" +"@babel/helper-get-function-arity@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.7.4.tgz#cb46348d2f8808e632f0ab048172130e636005f0" + integrity sha1-y0Y0jS+ICOYy8KsEgXITDmNgBfA= + dependencies: + "@babel/types" "^7.7.4" + "@babel/helper-hoist-variables@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a" @@ -130,6 +183,13 @@ dependencies: "@babel/types" "^7.5.5" +"@babel/helper-member-expression-to-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.7.4.tgz#356438e2569df7321a8326644d4b790d2122cb74" + integrity sha1-NWQ44lad9zIagyZkTUt5DSEiy3Q= + dependencies: + "@babel/types" "^7.7.4" + "@babel/helper-module-imports@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" @@ -137,6 +197,13 @@ dependencies: "@babel/types" "^7.0.0" +"@babel/helper-module-imports@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.7.4.tgz#e5a92529f8888bf319a6376abfbd1cebc491ad91" + integrity sha1-5aklKfiIi/MZpjdqv70c68SRrZE= + dependencies: + "@babel/types" "^7.7.4" + "@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz#f84ff8a09038dcbca1fd4355661a500937165b4a" @@ -156,6 +223,13 @@ dependencies: "@babel/types" "^7.0.0" +"@babel/helper-optimise-call-expression@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.7.4.tgz?cache=0&sync_timestamp=1574465630779&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-optimise-call-expression%2Fdownload%2F%40babel%2Fhelper-optimise-call-expression-7.7.4.tgz#034af31370d2995242aa4df402c3b7794b2dcdf2" + integrity sha1-A0rzE3DSmVJCqk30AsO3eUstzfI= + dependencies: + "@babel/types" "^7.7.4" + "@babel/helper-plugin-utils@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" @@ -168,7 +242,7 @@ dependencies: lodash "^4.17.13" -"@babel/helper-remap-async-to-generator@^7.0.0-beta", "@babel/helper-remap-async-to-generator@^7.1.0": +"@babel/helper-remap-async-to-generator@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg== @@ -179,6 +253,17 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.0.0" +"@babel/helper-remap-async-to-generator@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.7.4.tgz#c68c2407350d9af0e061ed6726afb4fff16d0234" + integrity sha1-xowkBzUNmvDgYe1nJq+0//FtAjQ= + dependencies: + "@babel/helper-annotate-as-pure" "^7.7.4" + "@babel/helper-wrap-function" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + "@babel/helper-replace-supers@^7.1.0", "@babel/helper-replace-supers@^7.5.5": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz#f84ce43df031222d2bad068d2626cb5799c34bc2" @@ -189,6 +274,16 @@ "@babel/traverse" "^7.5.5" "@babel/types" "^7.5.5" +"@babel/helper-replace-supers@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.7.4.tgz?cache=0&sync_timestamp=1574465645820&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-replace-supers%2Fdownload%2F%40babel%2Fhelper-replace-supers-7.7.4.tgz#3c881a6a6a7571275a72d82e6107126ec9e2cdd2" + integrity sha1-PIgaamp1cSdactguYQcSbsnizdI= + dependencies: + "@babel/helper-member-expression-to-functions" "^7.7.4" + "@babel/helper-optimise-call-expression" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + "@babel/helper-simple-access@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" @@ -204,6 +299,13 @@ dependencies: "@babel/types" "^7.4.4" +"@babel/helper-split-export-declaration@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.7.4.tgz#57292af60443c4a3622cf74040ddc28e68336fd8" + integrity sha1-Vykq9gRDxKNiLPdAQN3Cjmgzb9g= + dependencies: + "@babel/types" "^7.7.4" + "@babel/helper-wrap-function@^7.1.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" @@ -214,6 +316,16 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.2.0" +"@babel/helper-wrap-function@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.7.4.tgz#37ab7fed5150e22d9d7266e830072c0cdd8baace" + integrity sha1-N6t/7VFQ4i2dcmboMAcsDN2Lqs4= + dependencies: + "@babel/helper-function-name" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + "@babel/helpers@^7.6.2": version "7.6.2" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.6.2.tgz#681ffe489ea4dcc55f23ce469e58e59c1c045153" @@ -223,6 +335,15 @@ "@babel/traverse" "^7.6.2" "@babel/types" "^7.6.0" +"@babel/helpers@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helpers/download/@babel/helpers-7.7.4.tgz#62c215b9e6c712dadc15a9a0dcab76c92a940302" + integrity sha1-YsIVuebHEtrcFamg3Kt2ySqUAwI= + dependencies: + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + "@babel/highlight@^7.0.0": version "7.5.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" @@ -232,15 +353,20 @@ esutils "^2.0.2" js-tokens "^4.0.0" +"@babel/parser@^7.0.0", "@babel/parser@^7.7.4", "@babel/parser@^7.7.7": + version "7.7.7" + resolved "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.7.7.tgz#1b886595419cf92d811316d5b715a53ff38b4937" + integrity sha1-G4hllUGc+S2BExbVtxWlP/OLSTc= + "@babel/parser@^7.4.3", "@babel/parser@^7.6.0", "@babel/parser@^7.6.3", "@babel/parser@^7.6.4": version "7.6.4" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.4.tgz#cb9b36a7482110282d5cb6dd424ec9262b473d81" integrity sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A== -"@babel/plugin-external-helpers@^7.0.0-beta": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.2.0.tgz#7f4cb7dee651cd380d2034847d914288467a6be4" - integrity sha512-QFmtcCShFkyAsNtdCM3lJPmRe1iB+vPZymlB4LnDIKEBj2yKQLQKtoxXxJ8ePT5fwMl4QGg303p4mB0UsSI2/g== +"@babel/plugin-external-helpers@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-external-helpers/download/@babel/plugin-external-helpers-7.7.4.tgz#8aa7aa402f0e2ecb924611cbf30942a497dfd17e" + integrity sha1-iqeqQC8OLsuSRhHL8wlCpJff0X4= dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -265,7 +391,7 @@ "@babel/helper-replace-supers" "^7.1.0" "@babel/plugin-syntax-class-properties" "^7.0.0" -"@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.0.0-beta": +"@babel/plugin-proposal-class-properties@^7.0.0": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.5.tgz#a974cfae1e37c3110e71f3c6a2e48b8e71958cd4" integrity sha512-AF79FsnWFxjlaosgdi421vmYG6/jg79bVD0dpD44QdgobzHKuLZ6S3vl8la9qIeSwGi8i1fS0O1mfuDAAdo1/A== @@ -322,7 +448,7 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-object-rest-spread" "^7.0.0" -"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.0.0-beta", "@babel/plugin-proposal-object-rest-spread@^7.6.2": +"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.6.2": version "7.6.2" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz#8ffccc8f3a6545e9f78988b6bf4fe881b88e8096" integrity sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw== @@ -383,7 +509,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-dynamic-import@^7.0.0", "@babel/plugin-syntax-dynamic-import@^7.0.0-beta", "@babel/plugin-syntax-dynamic-import@^7.2.0": +"@babel/plugin-syntax-dynamic-import@^7.0.0", "@babel/plugin-syntax-dynamic-import@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612" integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w== @@ -397,6 +523,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-syntax-flow@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-flow/download/@babel/plugin-syntax-flow-7.7.4.tgz#6d91b59e1a0e4c17f36af2e10dd64ef220919d7b" + integrity sha1-bZG1nhoOTBfzavLhDdZO8iCRnXs= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-flow@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz#a765f061f803bc48f240c26f8747faf97c26bf7c" @@ -453,13 +586,22 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.0.0-beta", "@babel/plugin-transform-arrow-functions@^7.2.0": +"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-async-to-generator@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.7.4.tgz?cache=0&sync_timestamp=1574465889738&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-async-to-generator%2Fdownload%2F%40babel%2Fplugin-transform-async-to-generator-7.7.4.tgz#694cbeae6d613a34ef0292713fa42fb45c4470ba" + integrity sha1-aUy+rm1hOjTvApJxP6QvtFxEcLo= + dependencies: + "@babel/helper-module-imports" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.7.4" + "@babel/plugin-transform-async-to-generator@^7.1.0", "@babel/plugin-transform-async-to-generator@^7.5.0": version "7.5.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz#89a3848a0166623b5bc481164b5936ab947e887e" @@ -476,7 +618,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.0.0-beta", "@babel/plugin-transform-block-scoping@^7.1.5", "@babel/plugin-transform-block-scoping@^7.6.3": +"@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.1.5", "@babel/plugin-transform-block-scoping@^7.6.3": version "7.6.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.3.tgz#6e854e51fbbaa84351b15d4ddafe342f3a5d542a" integrity sha512-7hvrg75dubcO3ZI2rjYTzUrEuh1E9IyDEhhB6qfcooxhDA33xx2MasuLVgdxzcP6R/lipAC6n9ub9maNW6RKdw== @@ -484,7 +626,7 @@ "@babel/helper-plugin-utils" "^7.0.0" lodash "^4.17.13" -"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.0.0-beta", "@babel/plugin-transform-classes@^7.1.0", "@babel/plugin-transform-classes@^7.5.5": +"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.1.0", "@babel/plugin-transform-classes@^7.5.5": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz#d094299d9bd680a14a2a0edae38305ad60fb4de9" integrity sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg== @@ -498,14 +640,14 @@ "@babel/helper-split-export-declaration" "^7.4.4" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.0.0-beta", "@babel/plugin-transform-computed-properties@^7.2.0": +"@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.0.0-beta", "@babel/plugin-transform-destructuring@^7.6.0": +"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.6.0": version "7.6.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz#44bbe08b57f4480094d57d9ffbcd96d309075ba6" integrity sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ== @@ -528,7 +670,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-exponentiation-operator@^7.0.0", "@babel/plugin-transform-exponentiation-operator@^7.0.0-beta", "@babel/plugin-transform-exponentiation-operator@^7.1.0", "@babel/plugin-transform-exponentiation-operator@^7.2.0": +"@babel/plugin-transform-exponentiation-operator@^7.0.0", "@babel/plugin-transform-exponentiation-operator@^7.1.0", "@babel/plugin-transform-exponentiation-operator@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A== @@ -536,7 +678,7 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-flow-strip-types@^7.0.0", "@babel/plugin-transform-flow-strip-types@^7.0.0-beta": +"@babel/plugin-transform-flow-strip-types@^7.0.0": version "7.6.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.6.3.tgz#8110f153e7360cfd5996eee68706cfad92d85256" integrity sha512-l0ETkyEofkqFJ9LS6HChNIKtVJw2ylKbhYMlJ5C6df+ldxxaLIyXY4yOdDQQspfFpV8/vDiaWoJlvflstlYNxg== @@ -544,14 +686,14 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-flow" "^7.2.0" -"@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.0.0-beta", "@babel/plugin-transform-for-of@^7.4.4": +"@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556" integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-function-name@^7.0.0", "@babel/plugin-transform-function-name@^7.0.0-beta", "@babel/plugin-transform-function-name@^7.1.0", "@babel/plugin-transform-function-name@^7.4.4": +"@babel/plugin-transform-function-name@^7.0.0", "@babel/plugin-transform-function-name@^7.1.0", "@babel/plugin-transform-function-name@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad" integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA== @@ -559,13 +701,20 @@ "@babel/helper-function-name" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-literals@^7.0.0", "@babel/plugin-transform-literals@^7.0.0-beta", "@babel/plugin-transform-literals@^7.2.0": +"@babel/plugin-transform-literals@^7.0.0", "@babel/plugin-transform-literals@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-member-expression-literals@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-member-expression-literals/download/@babel/plugin-transform-member-expression-literals-7.7.4.tgz#aee127f2f3339fc34ce5e3055d7ffbf7aa26f19a" + integrity sha1-ruEn8vMzn8NM5eMFXX/796om8Zo= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-member-expression-literals@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz#fa10aa5c58a2cb6afcf2c9ffa8cb4d8b3d489a2d" @@ -582,7 +731,7 @@ "@babel/helper-plugin-utils" "^7.0.0" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.0.0-beta", "@babel/plugin-transform-modules-commonjs@^7.1.0", "@babel/plugin-transform-modules-commonjs@^7.4.4", "@babel/plugin-transform-modules-commonjs@^7.6.0": +"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.1.0", "@babel/plugin-transform-modules-commonjs@^7.4.4", "@babel/plugin-transform-modules-commonjs@^7.6.0": version "7.6.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz#39dfe957de4420445f1fcf88b68a2e4aa4515486" integrity sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g== @@ -623,13 +772,21 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-object-assign@^7.0.0", "@babel/plugin-transform-object-assign@^7.0.0-beta": +"@babel/plugin-transform-object-assign@^7.0.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.2.0.tgz#6fdeea42be17040f119e38e23ea0f49f31968bde" integrity sha512-nmE55cZBPFgUktbF2OuoZgPRadfxosLOpSgzEPYotKSls9J4pEPcembi8r78RU37Rph6UApCpNmsQA4QMWK9Ng== dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-object-super@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.7.4.tgz#48488937a2d586c0148451bf51af9d7dda567262" + integrity sha1-SEiJN6LVhsAUhFG/Ua+dfdpWcmI= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.7.4" + "@babel/plugin-transform-object-super@^7.1.0", "@babel/plugin-transform-object-super@^7.5.5": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz#c70021df834073c65eb613b8679cc4a381d1a9f9" @@ -638,7 +795,7 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-replace-supers" "^7.5.5" -"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.0.0-beta", "@babel/plugin-transform-parameters@^7.1.0", "@babel/plugin-transform-parameters@^7.4.4": +"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.1.0", "@babel/plugin-transform-parameters@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16" integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw== @@ -647,6 +804,13 @@ "@babel/helper-get-function-arity" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-property-literals@^7.0.0": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-property-literals/download/@babel/plugin-transform-property-literals-7.7.4.tgz#2388d6505ef89b266103f450f9167e6bd73f98c2" + integrity sha1-I4jWUF74myZhA/RQ+RZ+a9c/mMI= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-property-literals@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz#03e33f653f5b25c4eb572c98b9485055b389e905" @@ -654,14 +818,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-react-display-name@^7.0.0", "@babel/plugin-transform-react-display-name@^7.0.0-beta": +"@babel/plugin-transform-react-display-name@^7.0.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz#ebfaed87834ce8dc4279609a4f0c324c156e3eb0" integrity sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-react-jsx-source@^7.0.0", "@babel/plugin-transform-react-jsx-source@^7.0.0-beta": +"@babel/plugin-transform-react-jsx-source@^7.0.0": version "7.5.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.5.0.tgz#583b10c49cf057e237085bcbd8cc960bd83bd96b" integrity sha512-58Q+Jsy4IDCZx7kqEZuSDdam/1oW8OdDX8f+Loo6xyxdfg1yF0GE2XNJQSTZCaMol93+FBzpWiPEwtbMloAcPg== @@ -678,7 +842,7 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-jsx" "^7.0.0" -"@babel/plugin-transform-react-jsx@^7.0.0", "@babel/plugin-transform-react-jsx@^7.0.0-beta": +"@babel/plugin-transform-react-jsx@^7.0.0": version "7.3.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz#f2cab99026631c767e2745a5368b331cfe8f5290" integrity sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg== @@ -687,7 +851,7 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-jsx" "^7.2.0" -"@babel/plugin-transform-regenerator@^7.0.0", "@babel/plugin-transform-regenerator@^7.0.0-beta", "@babel/plugin-transform-regenerator@^7.4.5": +"@babel/plugin-transform-regenerator@^7.0.0", "@babel/plugin-transform-regenerator@^7.4.5": version "7.4.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f" integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA== @@ -711,14 +875,14 @@ resolve "^1.8.1" semver "^5.5.1" -"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.0.0-beta", "@babel/plugin-transform-shorthand-properties@^7.2.0": +"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-spread@^7.0.0", "@babel/plugin-transform-spread@^7.0.0-beta", "@babel/plugin-transform-spread@^7.6.2": +"@babel/plugin-transform-spread@^7.0.0", "@babel/plugin-transform-spread@^7.6.2": version "7.6.2" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz#fc77cf798b24b10c46e1b51b1b88c2bf661bb8dd" integrity sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg== @@ -733,7 +897,7 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-regex" "^7.0.0" -"@babel/plugin-transform-template-literals@^7.0.0", "@babel/plugin-transform-template-literals@^7.0.0-beta", "@babel/plugin-transform-template-literals@^7.4.4": +"@babel/plugin-transform-template-literals@^7.0.0", "@babel/plugin-transform-template-literals@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0" integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g== @@ -869,18 +1033,25 @@ js-levenshtein "^1.1.3" semver "^5.5.0" -"@babel/register@^7.0.0-beta": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.6.2.tgz#25765a922202cb06f8bdac5a3b1e70cd6bf3dd45" - integrity sha512-xgZk2LRZvt6i2SAUWxc7ellk4+OYRgS3Zpsnr13nMS1Qo25w21Uu8o6vTOAqNaxiqrnv30KTYzh9YWY2k21CeQ== +"@babel/register@^7.0.0": + version "7.7.7" + resolved "https://registry.npm.taobao.org/@babel/register/download/@babel/register-7.7.7.tgz#46910c4d1926b9c6096421b23d1f9e159c1dcee1" + integrity sha1-RpEMTRkmucYJZCGyPR+eFZwdzuE= dependencies: find-cache-dir "^2.0.0" lodash "^4.17.13" - mkdirp "^0.5.1" + make-dir "^2.1.0" pirates "^4.0.0" - source-map-support "^0.5.9" + source-map-support "^0.5.16" + +"@babel/runtime@^7.0.0": + version "7.7.7" + resolved "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.7.7.tgz#194769ca8d6d7790ec23605af9ee3e42a0aa79cf" + integrity sha1-GUdpyo1td5DsI2Ba+e4+QqCqec8= + dependencies: + regenerator-runtime "^0.13.2" -"@babel/template@^7.0.0", "@babel/template@^7.0.0-beta", "@babel/template@^7.1.0", "@babel/template@^7.4.0", "@babel/template@^7.4.4", "@babel/template@^7.6.0": +"@babel/template@^7.0.0", "@babel/template@^7.1.0", "@babel/template@^7.4.0", "@babel/template@^7.4.4", "@babel/template@^7.6.0": version "7.6.0" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6" integrity sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ== @@ -889,7 +1060,31 @@ "@babel/parser" "^7.6.0" "@babel/types" "^7.6.0" -"@babel/traverse@^7.0.0-beta", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5", "@babel/traverse@^7.6.2", "@babel/traverse@^7.6.3": +"@babel/template@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.7.4.tgz?cache=0&sync_timestamp=1574465630781&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftemplate%2Fdownload%2F%40babel%2Ftemplate-7.7.4.tgz#428a7d9eecffe27deac0a98e23bf8e3675d2a77b" + integrity sha1-Qop9nuz/4n3qwKmOI7+ONnXSp3s= + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/traverse@^7.0.0", "@babel/traverse@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.7.4.tgz?cache=0&sync_timestamp=1574465640801&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.7.4.tgz#9c1e7c60fb679fe4fcfaa42500833333c2058558" + integrity sha1-nB58YPtnn+T8+qQlAIMzM8IFhVg= + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.7.4" + "@babel/helper-function-name" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" + "@babel/parser" "^7.7.4" + "@babel/types" "^7.7.4" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5", "@babel/traverse@^7.6.2", "@babel/traverse@^7.6.3": version "7.6.3" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.3.tgz#66d7dba146b086703c0fb10dd588b7364cec47f9" integrity sha512-unn7P4LGsijIxaAJo/wpoU11zN+2IaClkQAxcJWBNCMS6cmVh802IyLHNkAjQ0iYnRS3nnxk5O3fuXW28IMxTw== @@ -904,7 +1099,7 @@ globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.6.0", "@babel/types@^7.6.3": +"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.6.0", "@babel/types@^7.6.3": version "7.6.3" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.3.tgz#3f07d96f854f98e2fbd45c64b0cb942d11e8ba09" integrity sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA== @@ -913,6 +1108,15 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" +"@babel/types@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.7.4.tgz?cache=0&sync_timestamp=1574465636802&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193" + integrity sha1-UWVw1TnkTd8wjAdWnCWP+U/ekZM= + dependencies: + esutils "^2.0.2" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + "@cnakazawa/watch@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" @@ -998,17 +1202,57 @@ "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^13.0.0" -"@tarojs/taro@1.3.29": - version "1.3.29" - resolved "https://registry.yarnpkg.com/@tarojs/taro/-/taro-1.3.29.tgz#20b28f577f72866a1b0470625617231633c13eae" - integrity sha512-BhgbaWZWrs0rvz+uu1mHKnqN4CPzlQd4J00Suk0vbIgP4RSDyJplL6sOj/ZjHeGYcEDOIYpO5dopVfuXJrmiBQ== +"@react-native-community/cli@^1.2.1": + version "1.12.0" + resolved "https://registry.npm.taobao.org/@react-native-community/cli/download/@react-native-community/cli-1.12.0.tgz?cache=0&sync_timestamp=1574167126291&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40react-native-community%2Fcli%2Fdownload%2F%40react-native-community%2Fcli-1.12.0.tgz#f4cbc2204af63a87d5736d2fa6a018c1fd5efd44" + integrity sha1-9MvCIEr2OofVc20vpqAYwf1e/UQ= + dependencies: + chalk "^1.1.1" + commander "^2.19.0" + compression "^1.7.1" + connect "^3.6.5" + denodeify "^1.2.1" + envinfo "^5.7.0" + errorhandler "^1.5.0" + escape-string-regexp "^1.0.5" + execa "^1.0.0" + fs-extra "^7.0.1" + glob "^7.1.1" + graceful-fs "^4.1.3" + inquirer "^3.0.6" + lodash "^4.17.5" + metro "^0.51.0" + metro-config "^0.51.0" + metro-core "^0.51.0" + metro-memory-fs "^0.51.0" + metro-react-native-babel-transformer "^0.51.0" + mime "^1.3.4" + minimist "^1.2.0" + mkdirp "^0.5.1" + morgan "^1.9.0" + node-fetch "^2.2.0" + node-notifier "^5.2.1" + opn "^3.0.2" + plist "^3.0.0" + semver "^5.0.3" + serve-static "^1.13.1" + shell-quote "1.6.1" + slash "^2.0.0" + ws "^1.1.0" + xcode "^2.0.0" + xmldoc "^0.4.0" + +"@tarojs/taro@2.0.0-beta.13": + version "2.0.0-beta.13" + resolved "https://registry.npm.taobao.org/@tarojs/taro/download/@tarojs/taro-2.0.0-beta.13.tgz?cache=0&sync_timestamp=1577772870840&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40tarojs%2Ftaro%2Fdownload%2F%40tarojs%2Ftaro-2.0.0-beta.13.tgz#6537b4263a27641fa51e8f98673f9ea48919af01" + integrity sha1-ZTe0JjonZB+lHo+YZz+epIkZrwE= dependencies: - "@tarojs/utils" "1.3.29" + "@tarojs/utils" "2.0.0-beta.13" -"@tarojs/utils@1.3.29": - version "1.3.29" - resolved "https://registry.yarnpkg.com/@tarojs/utils/-/utils-1.3.29.tgz#3f473a470ce64241985725b35052c1c27f5052df" - integrity sha512-mdyUvbDIEuQ6ZyVOp24F3my3w8x7R+um/uDLO/iqpYcczoE9JSNdFJPvVf6BpCI3CcRxYaDYZ6pCTWGuGvAmOQ== +"@tarojs/utils@2.0.0-beta.13": + version "2.0.0-beta.13" + resolved "https://registry.npm.taobao.org/@tarojs/utils/download/@tarojs/utils-2.0.0-beta.13.tgz?cache=0&sync_timestamp=1577772253852&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40tarojs%2Futils%2Fdownload%2F%40tarojs%2Futils-2.0.0-beta.13.tgz#a3b9b4a36ab71ac4e2a3fddd96f4fb006862ea62" + integrity sha1-o7m0o2q3GsTio/3dlvT7AGhi6mI= "@types/babel-types@^7.0.7": version "7.0.7" @@ -1023,9 +1267,9 @@ "@types/node" "*" "@types/enzyme@^3.9.1": - version "3.10.3" - resolved "https://registry.yarnpkg.com/@types/enzyme/-/enzyme-3.10.3.tgz#02b6c5ac7d0472005944a652e79045e2f6c66804" - integrity sha512-f/Kcb84sZOSZiBPCkr4He9/cpuSLcKRyQaEE20Q30Prx0Dn6wcyMAWI0yofL6yvd9Ht9G7EVkQeRqK0n5w8ILw== + version "3.10.4" + resolved "https://registry.yarnpkg.com/@types/enzyme/-/enzyme-3.10.4.tgz#dd4961042381a7c0f6637ce25fec3f773ce489dd" + integrity sha512-P5XpxcIt9KK8QUH4al4ttfJfIHg6xmN9ZjyUzRSzAsmDYwRXLI05ng/flZOPXrEXmp8ZYiN8/tEXYK5KSOQk3w== dependencies: "@types/cheerio" "*" "@types/react" "*" @@ -1260,6 +1504,11 @@ ansi-regex@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= +ansi-regex@^4.0.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz?cache=0&sync_timestamp=1570188663907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc= + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -1309,11 +1558,6 @@ aproba@^1.0.3: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -arch@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.1.tgz#8f5c2731aa35a30929221bb0640eed65175ec84e" - integrity sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg== - archy@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" @@ -1574,7 +1818,7 @@ babel-code-frame@^6.26.0: esutils "^2.0.2" js-tokens "^3.0.2" -babel-core@^6.0.0, babel-core@^6.24.1, babel-core@^6.26.0, babel-core@^6.7.2: +babel-core@^6.0.0, babel-core@^6.26.0: version "6.26.3" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== @@ -1613,120 +1857,6 @@ babel-generator@^6.18.0, babel-generator@^6.26.0: source-map "^0.5.7" trim-right "^1.0.1" -babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" - integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ= - dependencies: - babel-helper-explode-assignable-expression "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-builder-react-jsx@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" - integrity sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA= - dependencies: - babel-runtime "^6.26.0" - babel-types "^6.26.0" - esutils "^2.0.2" - -babel-helper-call-delegate@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" - integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340= - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-define-map@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" - integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8= - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-explode-assignable-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" - integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo= - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-function-name@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" - integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk= - dependencies: - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-get-function-arity@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" - integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-hoist-variables@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" - integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-optimise-call-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" - integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-regex@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" - integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI= - dependencies: - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-remap-async-to-generator@^6.16.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" - integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs= - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-replace-supers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" - integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo= - dependencies: - babel-helper-optimise-call-expression "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - babel-helpers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" @@ -1750,13 +1880,6 @@ babel-messages@^6.23.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-check-es2015-constants@^6.5.0, babel-plugin-check-es2015-constants@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" - integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= - dependencies: - babel-runtime "^6.22.0" - babel-plugin-dynamic-import-node@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" @@ -1764,13 +1887,6 @@ babel-plugin-dynamic-import-node@^2.3.0: dependencies: object.assign "^4.1.0" -babel-plugin-external-helpers@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-external-helpers/-/babel-plugin-external-helpers-6.22.0.tgz#2285f48b02bd5dede85175caf8c62e86adccefa1" - integrity sha1-IoX0iwK9Xe3oUXXK+MYuhq3M76E= - dependencies: - babel-runtime "^6.22.0" - babel-plugin-istanbul@^4.1.6: version "4.1.6" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" @@ -1812,319 +1928,15 @@ babel-plugin-react-native-web@^0.11.2: resolved "https://registry.yarnpkg.com/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.11.7.tgz#15b578c0731bd7d65d334f9c759d95e8e4a602e2" integrity sha512-CxE7uhhqkzAFkwV2X7+Mc/UVPujQQDtja/EGxCXRJvdYRi72QTmaJYKbK1lV9qgTZuB+TDguU89coaA9Z1BNbg== -babel-plugin-react-transform@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-react-transform/-/babel-plugin-react-transform-3.0.0.tgz#402f25137b7bb66e9b54ead75557dfbc7ecaaa74" - integrity sha512-4vJGddwPiHAOgshzZdGwYy4zRjjIr5SMY7gkOaCyIASjgpcsyLTlZNuB5rHOFoaTvGlhfo8/g4pobXPyHqm/3w== - dependencies: - lodash "^4.6.1" - -babel-plugin-syntax-async-functions@^6.5.0, babel-plugin-syntax-async-functions@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" - integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= - -babel-plugin-syntax-class-properties@^6.5.0, babel-plugin-syntax-class-properties@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" - integrity sha1-1+sjt5oxf4VDlixQW4J8fWysJ94= - -babel-plugin-syntax-dynamic-import@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" - integrity sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo= - -babel-plugin-syntax-exponentiation-operator@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" - integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= - -babel-plugin-syntax-flow@^6.18.0, babel-plugin-syntax-flow@^6.5.0, babel-plugin-syntax-flow@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" - integrity sha1-TDqyCiryaqIM0lmVw5jE63AxDI0= - -babel-plugin-syntax-jsx@^6.5.0, babel-plugin-syntax-jsx@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" - integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= - -babel-plugin-syntax-object-rest-spread@^6.13.0, babel-plugin-syntax-object-rest-spread@^6.8.0: +babel-plugin-syntax-object-rest-spread@^6.13.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= -babel-plugin-syntax-trailing-function-commas@^6.20.0, babel-plugin-syntax-trailing-function-commas@^6.5.0, babel-plugin-syntax-trailing-function-commas@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" - integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= - -babel-plugin-transform-async-to-generator@6.16.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.16.0.tgz#19ec36cb1486b59f9f468adfa42ce13908ca2999" - integrity sha1-Gew2yxSGtZ+fRorfpCzhOQjKKZk= - dependencies: - babel-helper-remap-async-to-generator "^6.16.0" - babel-plugin-syntax-async-functions "^6.8.0" - babel-runtime "^6.0.0" - -babel-plugin-transform-class-properties@^6.18.0, babel-plugin-transform-class-properties@^6.5.0, babel-plugin-transform-class-properties@^6.8.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" - integrity sha1-anl2PqYdM9NvN7YRqp3vgagbRqw= - dependencies: - babel-helper-function-name "^6.24.1" - babel-plugin-syntax-class-properties "^6.8.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-arrow-functions@^6.5.0, babel-plugin-transform-es2015-arrow-functions@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" - integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoped-functions@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" - integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoping@^6.5.0, babel-plugin-transform-es2015-block-scoping@^6.8.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" - integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= - dependencies: - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-plugin-transform-es2015-classes@^6.5.0, babel-plugin-transform-es2015-classes@^6.8.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" - integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= - dependencies: - babel-helper-define-map "^6.24.1" - babel-helper-function-name "^6.24.1" - babel-helper-optimise-call-expression "^6.24.1" - babel-helper-replace-supers "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-computed-properties@^6.5.0, babel-plugin-transform-es2015-computed-properties@^6.8.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" - integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-destructuring@6.x, babel-plugin-transform-es2015-destructuring@^6.5.0, babel-plugin-transform-es2015-destructuring@^6.8.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" - integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-for-of@^6.5.0, babel-plugin-transform-es2015-for-of@^6.8.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" - integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-function-name@6.x, babel-plugin-transform-es2015-function-name@^6.5.0, babel-plugin-transform-es2015-function-name@^6.8.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" - integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-literals@^6.5.0, babel-plugin-transform-es2015-literals@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" - integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-modules-commonjs@6.x, babel-plugin-transform-es2015-modules-commonjs@^6.5.0, babel-plugin-transform-es2015-modules-commonjs@^6.8.0: - version "6.26.2" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" - integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== - dependencies: - babel-plugin-transform-strict-mode "^6.24.1" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-types "^6.26.0" - -babel-plugin-transform-es2015-object-super@^6.8.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" - integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= - dependencies: - babel-helper-replace-supers "^6.24.1" - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-parameters@6.x, babel-plugin-transform-es2015-parameters@^6.5.0, babel-plugin-transform-es2015-parameters@^6.8.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" - integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= - dependencies: - babel-helper-call-delegate "^6.24.1" - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-shorthand-properties@6.x, babel-plugin-transform-es2015-shorthand-properties@^6.5.0, babel-plugin-transform-es2015-shorthand-properties@^6.8.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" - integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-spread@6.x, babel-plugin-transform-es2015-spread@^6.5.0, babel-plugin-transform-es2015-spread@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" - integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-sticky-regex@6.x: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" - integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-template-literals@^6.5.0, babel-plugin-transform-es2015-template-literals@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" - integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-unicode-regex@6.x: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" - integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - regexpu-core "^2.0.0" - -babel-plugin-transform-es3-member-expression-literals@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es3-member-expression-literals/-/babel-plugin-transform-es3-member-expression-literals-6.22.0.tgz#733d3444f3ecc41bef8ed1a6a4e09657b8969ebb" - integrity sha1-cz00RPPsxBvvjtGmpOCWV7iWnrs= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es3-property-literals@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es3-property-literals/-/babel-plugin-transform-es3-property-literals-6.22.0.tgz#b2078d5842e22abf40f73e8cde9cd3711abd5758" - integrity sha1-sgeNWELiKr9A9z6M3pzTcRq9V1g= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-exponentiation-operator@^6.5.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" - integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= - dependencies: - babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" - babel-plugin-syntax-exponentiation-operator "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-flow-strip-types@^6.21.0, babel-plugin-transform-flow-strip-types@^6.5.0, babel-plugin-transform-flow-strip-types@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" - integrity sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988= - dependencies: - babel-plugin-syntax-flow "^6.18.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-object-assign@^6.5.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz#f99d2f66f1a0b0d498e346c5359684740caa20ba" - integrity sha1-+Z0vZvGgsNSY40bFNZaEdAyqILo= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-object-rest-spread@^6.20.2, babel-plugin-transform-object-rest-spread@^6.5.0, babel-plugin-transform-object-rest-spread@^6.8.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" - integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY= - dependencies: - babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-runtime "^6.26.0" - -babel-plugin-transform-react-display-name@^6.5.0, babel-plugin-transform-react-display-name@^6.8.0: - version "6.25.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" - integrity sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-react-jsx-source@^6.5.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" - integrity sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY= - dependencies: - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-react-jsx@^6.5.0, babel-plugin-transform-react-jsx@^6.8.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" - integrity sha1-hAoCjn30YN/DotKfDA2R9jduZqM= - dependencies: - babel-helper-builder-react-jsx "^6.24.1" - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-regenerator@^6.5.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" - integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= - dependencies: - regenerator-transform "^0.10.0" - -babel-plugin-transform-strict-mode@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" - integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-preset-es2015-node@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-preset-es2015-node/-/babel-preset-es2015-node-6.1.1.tgz#60b23157024b0cfebf3a63554cb05ee035b4e55f" - integrity sha1-YLIxVwJLDP6/OmNVTLBe4DW05V8= - dependencies: - babel-plugin-transform-es2015-destructuring "6.x" - babel-plugin-transform-es2015-function-name "6.x" - babel-plugin-transform-es2015-modules-commonjs "6.x" - babel-plugin-transform-es2015-parameters "6.x" - babel-plugin-transform-es2015-shorthand-properties "6.x" - babel-plugin-transform-es2015-spread "6.x" - babel-plugin-transform-es2015-sticky-regex "6.x" - babel-plugin-transform-es2015-unicode-regex "6.x" - semver "5.x" +babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.npm.taobao.org/babel-plugin-syntax-trailing-function-commas/download/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf" + integrity sha1-qiE8FDXiv/62/KhCKH71NK0F1c8= babel-preset-expo@^5.2.0: version "5.2.0" @@ -2139,39 +1951,38 @@ babel-preset-expo@^5.2.0: babel-plugin-react-native-web "^0.11.2" metro-react-native-babel-preset "^0.51.1" -babel-preset-fbjs@^2.1.2, babel-preset-fbjs@^2.1.4: - version "2.3.0" - resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-2.3.0.tgz#92ff81307c18b926895114f9828ae1674c097f80" - integrity sha512-ZOpAI1/bN0Y3J1ZAK9gRsFkHy9gGgJoDRUjtUCla/129LC7uViq9nIK22YdHfey8szohYoZY3f9L2lGOv0Edqw== - dependencies: - babel-plugin-check-es2015-constants "^6.8.0" - babel-plugin-syntax-class-properties "^6.8.0" - babel-plugin-syntax-flow "^6.8.0" - babel-plugin-syntax-jsx "^6.8.0" - babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-plugin-syntax-trailing-function-commas "^6.8.0" - babel-plugin-transform-class-properties "^6.8.0" - babel-plugin-transform-es2015-arrow-functions "^6.8.0" - babel-plugin-transform-es2015-block-scoped-functions "^6.8.0" - babel-plugin-transform-es2015-block-scoping "^6.8.0" - babel-plugin-transform-es2015-classes "^6.8.0" - babel-plugin-transform-es2015-computed-properties "^6.8.0" - babel-plugin-transform-es2015-destructuring "^6.8.0" - babel-plugin-transform-es2015-for-of "^6.8.0" - babel-plugin-transform-es2015-function-name "^6.8.0" - babel-plugin-transform-es2015-literals "^6.8.0" - babel-plugin-transform-es2015-modules-commonjs "^6.8.0" - babel-plugin-transform-es2015-object-super "^6.8.0" - babel-plugin-transform-es2015-parameters "^6.8.0" - babel-plugin-transform-es2015-shorthand-properties "^6.8.0" - babel-plugin-transform-es2015-spread "^6.8.0" - babel-plugin-transform-es2015-template-literals "^6.8.0" - babel-plugin-transform-es3-member-expression-literals "^6.8.0" - babel-plugin-transform-es3-property-literals "^6.8.0" - babel-plugin-transform-flow-strip-types "^6.8.0" - babel-plugin-transform-object-rest-spread "^6.8.0" - babel-plugin-transform-react-display-name "^6.8.0" - babel-plugin-transform-react-jsx "^6.8.0" +babel-preset-fbjs@^3.0.1, babel-preset-fbjs@^3.2.0: + version "3.3.0" + resolved "https://registry.npm.taobao.org/babel-preset-fbjs/download/babel-preset-fbjs-3.3.0.tgz#a6024764ea86c8e06a22d794ca8b69534d263541" + integrity sha1-pgJHZOqGyOBqIteUyotpU00mNUE= + dependencies: + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-syntax-class-properties" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-block-scoped-functions" "^7.0.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + "@babel/plugin-transform-for-of" "^7.0.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-member-expression-literals" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-object-super" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-property-literals" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-template-literals" "^7.0.0" + babel-plugin-syntax-trailing-function-commas "^7.0.0-beta.0" babel-preset-jest@^23.2.0: version "23.2.0" @@ -2181,45 +1992,7 @@ babel-preset-jest@^23.2.0: babel-plugin-jest-hoist "^23.2.0" babel-plugin-syntax-object-rest-spread "^6.13.0" -babel-preset-react-native@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-react-native/-/babel-preset-react-native-4.0.1.tgz#14ff07bdb6c8df9408082c0c18b2ce8e3392e76a" - integrity sha512-uhFXnl1WbEWNG4W8QB/jeQaVXkd0a0AD+wh4D2VqtdRnEyvscahqyHExnwKLU9N0sXRYwDyed4JfbiBtiOSGgA== - dependencies: - babel-plugin-check-es2015-constants "^6.5.0" - babel-plugin-react-transform "^3.0.0" - babel-plugin-syntax-async-functions "^6.5.0" - babel-plugin-syntax-class-properties "^6.5.0" - babel-plugin-syntax-dynamic-import "^6.18.0" - babel-plugin-syntax-flow "^6.5.0" - babel-plugin-syntax-jsx "^6.5.0" - babel-plugin-syntax-trailing-function-commas "^6.5.0" - babel-plugin-transform-class-properties "^6.5.0" - babel-plugin-transform-es2015-arrow-functions "^6.5.0" - babel-plugin-transform-es2015-block-scoping "^6.5.0" - babel-plugin-transform-es2015-classes "^6.5.0" - babel-plugin-transform-es2015-computed-properties "^6.5.0" - babel-plugin-transform-es2015-destructuring "^6.5.0" - babel-plugin-transform-es2015-for-of "^6.5.0" - babel-plugin-transform-es2015-function-name "^6.5.0" - babel-plugin-transform-es2015-literals "^6.5.0" - babel-plugin-transform-es2015-modules-commonjs "^6.5.0" - babel-plugin-transform-es2015-parameters "^6.5.0" - babel-plugin-transform-es2015-shorthand-properties "^6.5.0" - babel-plugin-transform-es2015-spread "^6.5.0" - babel-plugin-transform-es2015-template-literals "^6.5.0" - babel-plugin-transform-exponentiation-operator "^6.5.0" - babel-plugin-transform-flow-strip-types "^6.5.0" - babel-plugin-transform-object-assign "^6.5.0" - babel-plugin-transform-object-rest-spread "^6.5.0" - babel-plugin-transform-react-display-name "^6.5.0" - babel-plugin-transform-react-jsx "^6.5.0" - babel-plugin-transform-react-jsx-source "^6.5.0" - babel-plugin-transform-regenerator "^6.5.0" - babel-template "^6.24.1" - react-transform-hmr "^1.0.4" - -babel-register@^6.24.1, babel-register@^6.26.0: +babel-register@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= @@ -2232,7 +2005,7 @@ babel-register@^6.24.1, babel-register@^6.26.0: mkdirp "^0.5.1" source-map-support "^0.4.15" -babel-runtime@^6.0.0, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.26.0: +babel-runtime@^6.22.0, babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= @@ -2251,7 +2024,7 @@ babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: babylon "^6.18.0" lodash "^4.17.4" -babel-traverse@^6.0.0, babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: +babel-traverse@^6.0.0, babel-traverse@^6.18.0, babel-traverse@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= @@ -2266,7 +2039,7 @@ babel-traverse@^6.0.0, babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-tra invariant "^2.2.2" lodash "^4.17.4" -babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: +babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= @@ -2281,11 +2054,6 @@ babylon@^6.18.0: resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== -babylon@^7.0.0-beta: - version "7.0.0-beta.47" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.47.tgz#6d1fa44f0abec41ab7c780481e62fd9aafbdea80" - integrity sha512-+rq2cr4GDhtToEzKFD6KZZMDBXhjFAr9JjPw9pAppZACeEWqNM294j+NdBzkSHYXwzzBmVjZ3nEVJlOhbR2gOQ== - bach@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/bach/-/bach-1.2.0.tgz#4b3ce96bf27134f79a1b414a51c14e34c3bd9880" @@ -2306,17 +2074,7 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base64-js@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978" - integrity sha1-EQHpVE9KdrG8OybUUsqW16NeeXg= - -base64-js@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.1.2.tgz#d6400cac1c4c660976d90d07a04351d89395f5e8" - integrity sha1-1kAMrBxMZgl22Q0HoENR2JOV9eg= - -base64-js@^1.1.2, base64-js@^1.3.0: +base64-js@^1.1.2, base64-js@^1.2.3, base64-js@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== @@ -2348,10 +2106,10 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -big-integer@^1.6.7: - version "1.6.47" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.47.tgz#e1e9320e26c4cc81f64fbf4b3bb20e025bf18e2d" - integrity sha512-9t9f7X3as2XGX8b52GqG6ox0GvIdM86LyIXASJnDCFhYNgt+A+MByQZ3W2PyMRZjEvG5f8TEbSPfEotVuMJnQg== +big-integer@^1.6.44: + version "1.6.48" + resolved "https://registry.npm.taobao.org/big-integer/download/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e" + integrity sha1-j9iL0WMsukocjD49cVnwi7lbS54= binary-extensions@^1.0.0: version "1.13.1" @@ -2368,19 +2126,19 @@ boolbase@~1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= -bplist-creator@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.7.tgz#37df1536092824b87c42f957b01344117372ae45" - integrity sha1-N98VNgkoJLh8QvlXsBNEEXNyrkU= +bplist-creator@0.0.8: + version "0.0.8" + resolved "https://registry.npm.taobao.org/bplist-creator/download/bplist-creator-0.0.8.tgz#56b2a6e79e9aec3fc33bf831d09347d73794e79c" + integrity sha1-VrKm556a7D/DO/gx0JNH1zeU55w= dependencies: stream-buffers "~2.2.0" -bplist-parser@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.1.1.tgz#d60d5dcc20cba6dc7e1f299b35d3e1f95dafbae6" - integrity sha1-1g1dzCDLptx+HymbNdPh+V2vuuY= +bplist-parser@0.2.0: + version "0.2.0" + resolved "https://registry.npm.taobao.org/bplist-parser/download/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" + integrity sha1-Q6nRg+W/nVRSAM6sPnEveeu+jQ4= dependencies: - big-integer "^1.6.7" + big-integer "^1.6.44" brace-expansion@^1.1.7: version "1.1.11" @@ -2450,6 +2208,11 @@ bser@^2.0.0: dependencies: node-int64 "^0.4.0" +buffer-crc32@^0.2.13: + version "0.2.13" + resolved "https://registry.npm.taobao.org/buffer-crc32/download/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + buffer-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" @@ -2480,6 +2243,20 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/caller-callsite/download/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/caller-path/download/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" @@ -2535,7 +2312,7 @@ chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -2622,14 +2399,6 @@ cli-width@^2.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= -clipboardy@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-1.2.3.tgz#0526361bf78724c1f20be248d428e365433c07ef" - integrity sha512-2WNImOvCRe6r63Gk9pShfkwXsVtKCroMAevIbiae021mS850UkWPbevxsBz3tnvjZIEGvlwaqCPsw+4ulzNgJA== - dependencies: - arch "^2.1.0" - execa "^0.8.0" - cliui@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" @@ -2805,6 +2574,13 @@ convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.0, dependencies: safe-buffer "~5.1.1" +convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz?cache=0&sync_timestamp=1573003637425&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconvert-source-map%2Fdownload%2Fconvert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha1-F6LLiC1/d9NJBYXizmxSRCSjpEI= + dependencies: + safe-buffer "~5.1.1" + copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" @@ -2841,6 +2617,16 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +cosmiconfig@^5.0.5: + version "5.2.1" + resolved "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-5.2.1.tgz?cache=0&sync_timestamp=1572710682964&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha1-BA9yaAnFked6F8CjYmykW08Wixo= + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + create-react-class@^15.6.3: version "15.6.3" resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036" @@ -3205,16 +2991,10 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== -envinfo@^3.0.0: - version "3.11.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-3.11.1.tgz#45968faf5079aa797b7dcdc3b123f340d4529e1c" - integrity sha512-hKkh7aKtont6Zuv4RmE4VkOc96TkBj9NXj7Ghsd/qCA9LuJI0Dh+ImwA1N5iORB9Vg+sz5bq9CHJzs51BILNCQ== - dependencies: - clipboardy "^1.2.2" - glob "^7.1.2" - minimist "^1.2.0" - os-name "^2.0.1" - which "^1.2.14" +envinfo@^5.7.0: + version "5.12.1" + resolved "https://registry.npm.taobao.org/envinfo/download/envinfo-5.12.1.tgz#83068c33e0972eb657d6bc69a6df30badefb46ef" + integrity sha1-gwaMM+CXLrZX1rxppt8wut77Ru8= enzyme-adapter-react-16@^1.7.1: version "1.15.1" @@ -3391,18 +3171,6 @@ escodegen@^1.9.1: optionalDependencies: source-map "~0.6.1" -eslint-plugin-react-native-globals@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-native-globals/-/eslint-plugin-react-native-globals-0.1.2.tgz#ee1348bc2ceb912303ce6bdbd22e2f045ea86ea2" - integrity sha512-9aEPf1JEpiTjcFAmmyw8eiIXmcNZOqaZyHO77wgm0/dWfT/oxC1SrIq8ET38pMxHYrcB6Uew+TzUVsBeczF88g== - -eslint-plugin-react-native@^3.2.1: - version "3.7.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-native/-/eslint-plugin-react-native-3.7.0.tgz#7e2cc1f3cf24919c4c0ea7fac13301e7444e105f" - integrity sha512-krLtQmGih/uJDPxF8DBpnU8J3kRUsDm/Dey5yEhOO8LN1I3Wesbk4PGCg8Zah57azKFU+9YtGooFjJcDJWUs+g== - dependencies: - eslint-plugin-react-native-globals "^0.1.1" - esprima@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" @@ -3463,19 +3231,6 @@ execa@^0.7.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" - integrity sha1-2NdrvBtVIX7RkP1t1J08d07PyNo= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -3709,14 +3464,19 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" -fbjs-scripts@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/fbjs-scripts/-/fbjs-scripts-0.8.3.tgz#b854de7a11e62a37f72dab9aaf4d9b53c4a03174" - integrity sha512-aUJ/uEzMIiBYuj/blLp4sVNkQQ7ZEB/lyplG1IzzOmZ83meiWecrGg5jBo4wWrxXmO4RExdtsSV1QkTjPt2Gag== +fbjs-css-vars@^1.0.0: + version "1.0.2" + resolved "https://registry.npm.taobao.org/fbjs-css-vars/download/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" + integrity sha1-IWVRE2rgL+JVkyw+yHdfGOLAeLg= + +fbjs-scripts@^1.0.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/fbjs-scripts/download/fbjs-scripts-1.2.0.tgz#069a0c0634242d10031c6460ef1fccefcdae8b27" + integrity sha1-BpoMBjQkLRADHGRg7x/M782uiyc= dependencies: + "@babel/core" "^7.0.0" ansi-colors "^1.0.1" - babel-core "^6.7.2" - babel-preset-fbjs "^2.1.2" + babel-preset-fbjs "^3.2.0" core-js "^2.4.1" cross-spawn "^5.1.0" fancy-log "^1.3.2" @@ -3725,7 +3485,7 @@ fbjs-scripts@^0.8.1: semver "^5.1.0" through2 "^2.0.0" -fbjs@^0.8.14, fbjs@^0.8.16, fbjs@^0.8.9: +fbjs@^0.8.9: version "0.8.17" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= @@ -3738,6 +3498,20 @@ fbjs@^0.8.14, fbjs@^0.8.16, fbjs@^0.8.9: setimmediate "^1.0.5" ua-parser-js "^0.7.18" +fbjs@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/fbjs/download/fbjs-1.0.0.tgz#52c215e0883a3c86af2a7a776ed51525ae8e0a5a" + integrity sha1-UsIV4Ig6PIavKnp3btUVJa6OClo= + dependencies: + core-js "^2.4.1" + fbjs-css-vars "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.18" + figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" @@ -3929,6 +3703,15 @@ fs-extra@^1.0.0: jsonfile "^2.1.0" klaw "^1.0.0" +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.npm.taobao.org/fs-extra/download/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha1-TxicRKoSO4lfcigE9V6iPq3DSOk= + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-minipass@^1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" @@ -4203,9 +3986,9 @@ gulplog@^1.0.0: glogg "^1.0.0" handlebars@^4.0.3: - version "4.4.5" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.4.5.tgz#1b1f94f9bfe7379adda86a8b73fb570265a0dddd" - integrity sha512-0Ce31oWVB7YidkaTq33ZxEbN+UDxMMgThvCe8ptgQViymL5DPis9uLdTA13MiRPhgvqyxIegugrP97iK3JeBHg== + version "4.5.3" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482" + integrity sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA== dependencies: neo-async "^2.6.0" optimist "^0.6.1" @@ -4376,6 +4159,14 @@ image-size@^0.6.0: resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.6.3.tgz#e7e5c65bb534bd7cdcedd6cb5166272a85f75fb2" integrity sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA== +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/import-fresh/download/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + import-local@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" @@ -4549,6 +4340,11 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-data-descriptor "^1.0.0" kind-of "^6.0.2" +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.npm.taobao.org/is-directory/download/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + is-dotfile@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" @@ -4949,20 +4745,6 @@ jest-diff@^23.6.0: jest-get-type "^22.1.0" pretty-format "^23.6.0" -jest-docblock@22.4.0: - version "22.4.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.4.0.tgz#dbf1877e2550070cfc4d9b07a55775a0483159b8" - integrity sha512-lDY7GZ+/CJb02oULYLBDj7Hs5shBhVpDYpIm8LUyqw9X2J22QRsM19gmGQwIFqGSJmpc/LRrSYudeSrG510xlQ== - dependencies: - detect-newline "^2.1.0" - -jest-docblock@^22.4.0: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.4.3.tgz#50886f132b42b280c903c592373bb6e93bb68b19" - integrity sha512-uPKBEAw7YrEMcXueMKZXn/rbMxBiSv48fSqy3uEnmgOlQhSX+lthBqHb1fKWNVmFqAp9E/RsSdBfiV31LbzaOg== - dependencies: - detect-newline "^2.1.0" - jest-docblock@^23.2.0: version "23.2.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-23.2.0.tgz#f085e1f18548d99fdd69b20207e6fd55d91383a7" @@ -5028,18 +4810,18 @@ jest-get-type@^22.1.0: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" integrity sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w== -jest-haste-map@22.4.2: - version "22.4.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.4.2.tgz#a90178e66146d4378bb076345a949071f3b015b4" - integrity sha512-EdQADHGXRqHJYAr7q9B9YYHZnrlcMwhx1+DnIgc9uN05nCW3RvGCxJ91MqWXcC1AzatLoSv7SNd0qXMp2jKBDA== +jest-haste-map@24.0.0-alpha.6: + version "24.0.0-alpha.6" + resolved "https://registry.npm.taobao.org/jest-haste-map/download/jest-haste-map-24.0.0-alpha.6.tgz?cache=0&sync_timestamp=1566444279671&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-haste-map%2Fdownload%2Fjest-haste-map-24.0.0-alpha.6.tgz#fb2c785080f391b923db51846b86840d0d773076" + integrity sha1-+yx4UIDzkbkj21GEa4aEDQ13MHY= dependencies: fb-watchman "^2.0.0" graceful-fs "^4.1.11" - jest-docblock "^22.4.0" - jest-serializer "^22.4.0" - jest-worker "^22.2.2" + invariant "^2.2.4" + jest-serializer "^24.0.0-alpha.6" + jest-worker "^24.0.0-alpha.6" micromatch "^2.3.11" - sane "^2.0.0" + sane "^3.0.0" jest-haste-map@^23.6.0: version "23.6.0" @@ -5223,17 +5005,17 @@ jest-runtime@^23.6.0: write-file-atomic "^2.1.0" yargs "^11.0.0" -jest-serializer@^22.4.0: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-22.4.3.tgz#a679b81a7f111e4766235f4f0c46d230ee0f7436" - integrity sha512-uPaUAppx4VUfJ0QDerpNdF43F68eqKWCzzhUlKNDsUPhjOon7ZehR4C809GCqh765FoMRtTVUVnGvIoskkYHiw== +jest-serializer@24.0.0-alpha.6: + version "24.0.0-alpha.6" + resolved "https://registry.npm.taobao.org/jest-serializer/download/jest-serializer-24.0.0-alpha.6.tgz#27d2fee4b1a85698717a30c3ec2ab80767312597" + integrity sha1-J9L+5LGoVphxejDD7Cq4B2cxJZc= jest-serializer@^23.0.1: version "23.0.1" resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-23.0.1.tgz#a3776aeb311e90fe83fab9e533e85102bd164165" integrity sha1-o3dq6zEekP6D+rnlM+hRAr0WQWU= -jest-serializer@^24.9.0: +jest-serializer@^24.0.0-alpha.6, jest-serializer@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73" integrity sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ== @@ -5305,17 +5087,10 @@ jest-watcher@^23.4.0: chalk "^2.0.1" string-length "^2.0.0" -jest-worker@22.2.2: - version "22.2.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.2.2.tgz#c1f5dc39976884b81f68ec50cb8532b2cbab3390" - integrity sha512-ZylDXjrFNt/OP6cUxwJFWwDgazP7hRjtCQbocFHyiwov+04Wm1x5PYzMGNJT53s4nwr0oo9ocYTImS09xOlUnw== - dependencies: - merge-stream "^1.0.1" - -jest-worker@^22.2.2: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.4.3.tgz#5c421417cba1c0abf64bf56bd5fb7968d79dd40b" - integrity sha512-B1ucW4fI8qVAuZmicFxI1R3kr2fNeYJyvIQ1rKcuLYnenFV5K5aMbxFj6J0i00Ju83S8jP2d7Dz14+AvbIHRYQ== +jest-worker@24.0.0-alpha.6: + version "24.0.0-alpha.6" + resolved "https://registry.npm.taobao.org/jest-worker/download/jest-worker-24.0.0-alpha.6.tgz#463681b92c117c57107135c14b9b9d6cd51d80ce" + integrity sha1-RjaBuSwRfFcQcTXBS5udbNUdgM4= dependencies: merge-stream "^1.0.1" @@ -5326,7 +5101,7 @@ jest-worker@^23.2.0: dependencies: merge-stream "^1.0.1" -jest-worker@^24.9.0: +jest-worker@^24.0.0-alpha.6, jest-worker@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== @@ -5357,7 +5132,7 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@^3.7.0: +js-yaml@^3.13.1, js-yaml@^3.7.0: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== @@ -5456,11 +5231,6 @@ json5@2.x, json5@^2.1.0: dependencies: minimist "^1.2.0" -json5@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.4.0.tgz#054352e4c4c80c86c0923877d449de176a732c8d" - integrity sha1-BUNS5MTIDIbAkjh31EneF2pzLI0= - json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" @@ -5473,6 +5243,13 @@ jsonfile@^2.1.0: optionalDependencies: graceful-fs "^4.1.6" +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" @@ -5570,7 +5347,7 @@ lead@^1.0.0: dependencies: flush-write-stream "^1.0.2" -left-pad@^1.1.3, left-pad@^1.3.0: +left-pad@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== @@ -5740,11 +5517,6 @@ lodash.throttle@^4.1.1: resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= -lodash@^3.5.0: - version "3.10.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" - integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y= - lodash@^4.15.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.6.1: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" @@ -5765,12 +5537,7 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" -macos-release@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-1.1.0.tgz#831945e29365b470aa8724b0ab36c8f8959d10fb" - integrity sha512-mmLbumEYMi5nXReB9js3WGsB8UE6cDBWyIO62Z4DNx6GbRhDxHNjA1MlzSpJ2S2KM1wyiPRA0d19uHWYYvMHjA== - -make-dir@^2.0.0: +make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== @@ -5864,6 +5631,45 @@ merge@^1.2.0: resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== +metro-babel-register@0.51.0: + version "0.51.0" + resolved "https://registry.npm.taobao.org/metro-babel-register/download/metro-babel-register-0.51.0.tgz#d86d3f2d90b45c7a3c6ae67a53bd1e50bad7a24d" + integrity sha1-2G0/LZC0XHo8auZ6U70eULrXok0= + dependencies: + "@babel/core" "^7.0.0" + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-optional-chaining" "^7.0.0" + "@babel/plugin-transform-async-to-generator" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/register" "^7.0.0" + core-js "^2.2.2" + escape-string-regexp "^1.0.5" + +metro-babel-transformer@0.51.0: + version "0.51.0" + resolved "https://registry.npm.taobao.org/metro-babel-transformer/download/metro-babel-transformer-0.51.0.tgz#9ee5199163ac46b2057527b3f8cbd8b089ffc03e" + integrity sha1-nuUZkWOsRrIFdSez+MvYsIn/wD4= + dependencies: + "@babel/core" "^7.0.0" + +metro-babel-transformer@0.51.1: + version "0.51.1" + resolved "https://registry.npm.taobao.org/metro-babel-transformer/download/metro-babel-transformer-0.51.1.tgz#97be9e2b96c78aa202b52ae05fb86f71327aef72" + integrity sha1-l76eK5bHiqICtSrgX7hvcTJ673I= + dependencies: + "@babel/core" "^7.0.0" + +metro-babel7-plugin-react-transform@0.51.0: + version "0.51.0" + resolved "https://registry.npm.taobao.org/metro-babel7-plugin-react-transform/download/metro-babel7-plugin-react-transform-0.51.0.tgz#af27dd81666b91f05d2b371b0d6d283c585e38b6" + integrity sha1-ryfdgWZrkfBdKzcbDW0oPFheOLY= + dependencies: + "@babel/helper-module-imports" "^7.0.0" + metro-babel7-plugin-react-transform@0.51.1: version "0.51.1" resolved "https://registry.yarnpkg.com/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.51.1.tgz#9cce2c340cc4006fc82aa6dfab27af22d592607e" @@ -5871,37 +5677,91 @@ metro-babel7-plugin-react-transform@0.51.1: dependencies: "@babel/helper-module-imports" "^7.0.0" -metro-babylon7@0.30.2: - version "0.30.2" - resolved "https://registry.yarnpkg.com/metro-babylon7/-/metro-babylon7-0.30.2.tgz#73784a958916bf5541b6a930598b62460fc376f5" - integrity sha512-ZI0h4/3raGnzA6fFXwLUMidGOG4jkDi9fgFkoI8I4Ack3TDMabmZATu9RD6DaSolu3lylhfPd8DeAAMeopX9CA== +metro-cache@0.51.1: + version "0.51.1" + resolved "https://registry.npm.taobao.org/metro-cache/download/metro-cache-0.51.1.tgz#d0b296eab8e009214413bba87e4eac3d9b44cd04" + integrity sha1-0LKW6rjgCSFEE7uofk6sPZtEzQQ= dependencies: - babylon "^7.0.0-beta" + jest-serializer "24.0.0-alpha.6" + metro-core "0.51.1" + mkdirp "^0.5.1" + rimraf "^2.5.4" -metro-cache@0.30.2: - version "0.30.2" - resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.30.2.tgz#1fb1ff92d3d8c596fd8cddc1635a9cb1c26e4cba" - integrity sha512-XYd07OwgtZRHFXyip40wdNJ8abPJRziuE5bb3jjf8wvyHxCpzlZlvbe0ZhcR8ChBwFUjHMuVyoou52AC3a0f+g== +metro-config@0.51.1, metro-config@^0.51.0: + version "0.51.1" + resolved "https://registry.npm.taobao.org/metro-config/download/metro-config-0.51.1.tgz#8f1a241ce2c0b521cd492c39bc5c6c69e3397b82" + integrity sha1-jxokHOLAtSHNSSw5vFxsaeM5e4I= dependencies: - jest-serializer "^22.4.0" - mkdirp "^0.5.1" + cosmiconfig "^5.0.5" + metro "0.51.1" + metro-cache "0.51.1" + metro-core "0.51.1" + pretty-format "24.0.0-alpha.6" -metro-core@0.30.2, metro-core@^0.30.0: - version "0.30.2" - resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.30.2.tgz#380ae13cceee29e5be166df7acca9f1daa19fd7e" - integrity sha512-2Y89PpD9sE/8QaHhYxaI21WFxkVmjbxdphiOPdsC9t7A3kQHMYOTQPYFon3bkYM7tL8k9YVBimXSv20JGglqUA== +metro-core@0.51.1, metro-core@^0.51.0: + version "0.51.1" + resolved "https://registry.npm.taobao.org/metro-core/download/metro-core-0.51.1.tgz#e7227fb1dd1bb3f953272fad9876e6201140b038" + integrity sha1-5yJ/sd0bs/lTJy+tmHbmIBFAsDg= dependencies: + jest-haste-map "24.0.0-alpha.6" lodash.throttle "^4.1.1" + metro-resolver "0.51.1" wordwrap "^1.0.0" -metro-minify-uglify@0.30.2: - version "0.30.2" - resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.30.2.tgz#7299a0376ad6340e9acf415912d54b5309702040" - integrity sha512-xwqMqYYKZEqJ66Wpf5OpyPJhApOQDb8rYiO94VInlDeHpN7eKGCVILclnx9AmVM3dStmebvXa5jrdgsbnJ1bSg== +metro-memory-fs@^0.51.0: + version "0.51.1" + resolved "https://registry.npm.taobao.org/metro-memory-fs/download/metro-memory-fs-0.51.1.tgz#624291f5956b0fd11532d80b1b85d550926f96c9" + integrity sha1-YkKR9ZVrD9EVMtgLG4XVUJJvlsk= + +metro-minify-uglify@0.51.1: + version "0.51.1" + resolved "https://registry.npm.taobao.org/metro-minify-uglify/download/metro-minify-uglify-0.51.1.tgz#60cd8fe4d3e82d6670c717b8ddb52ae63199c0e4" + integrity sha1-YM2P5NPoLWZwxxe43bUq5jGZwOQ= dependencies: uglify-es "^3.1.9" -metro-react-native-babel-preset@^0.51.1: +metro-react-native-babel-preset@0.51.0: + version "0.51.0" + resolved "https://registry.npm.taobao.org/metro-react-native-babel-preset/download/metro-react-native-babel-preset-0.51.0.tgz#978d960acf2d214bbbe43e59145878d663bd07de" + integrity sha1-l42WCs8tIUu75D5ZFFh41mO9B94= + dependencies: + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-export-default-from" "^7.0.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-optional-chaining" "^7.0.0" + "@babel/plugin-syntax-dynamic-import" "^7.0.0" + "@babel/plugin-syntax-export-default-from" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.0.0" + "@babel/plugin-transform-exponentiation-operator" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + "@babel/plugin-transform-for-of" "^7.0.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-object-assign" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/plugin-transform-regenerator" "^7.0.0" + "@babel/plugin-transform-runtime" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-sticky-regex" "^7.0.0" + "@babel/plugin-transform-template-literals" "^7.0.0" + "@babel/plugin-transform-typescript" "^7.0.0" + "@babel/plugin-transform-unicode-regex" "^7.0.0" + "@babel/template" "^7.0.0" + metro-babel7-plugin-react-transform "0.51.0" + react-transform-hmr "^1.0.4" + +metro-react-native-babel-preset@0.51.1, metro-react-native-babel-preset@^0.51.1: version "0.51.1" resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.51.1.tgz#44aeeedfea37f7c2ab8f6f273fa71b90fe65f089" integrity sha512-e9tsYDFhU70gar0jQWcZXRPJVCv4k7tEs6Pm74wXO2OO/T1MEumbvniDIGwGG8bG8RUnYdHhjcaiub2Vc5BRWw== @@ -5942,97 +5802,85 @@ metro-react-native-babel-preset@^0.51.1: metro-babel7-plugin-react-transform "0.51.1" react-transform-hmr "^1.0.4" -metro-resolver@0.30.2: - version "0.30.2" - resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.30.2.tgz#c26847e59cdc6a8ab1fb4b92d765165ec06946dd" - integrity sha512-bODCys/WYpqJ+KYbCIENZu1eqdQu3g/d2fXfhAROhutqojMqrT1eIGhzWpk3G1k/J6vlaf69uW6xrVuheg0ktg== +metro-react-native-babel-transformer@0.51.0: + version "0.51.0" + resolved "https://registry.npm.taobao.org/metro-react-native-babel-transformer/download/metro-react-native-babel-transformer-0.51.0.tgz#57a695e97a19d95de63c9633f9d0dc024ee8e99a" + integrity sha1-V6aV6XoZ2V3mPJYz+dDcAk7o6Zo= + dependencies: + "@babel/core" "^7.0.0" + babel-preset-fbjs "^3.0.1" + metro-babel-transformer "0.51.0" + metro-react-native-babel-preset "0.51.0" + +metro-react-native-babel-transformer@^0.51.0: + version "0.51.1" + resolved "https://registry.npm.taobao.org/metro-react-native-babel-transformer/download/metro-react-native-babel-transformer-0.51.1.tgz#bac34f988c150c725cd1875c13701cc2032615f9" + integrity sha1-usNPmIwVDHJc0YdcE3AcwgMmFfk= + dependencies: + "@babel/core" "^7.0.0" + babel-preset-fbjs "^3.0.1" + metro-babel-transformer "0.51.1" + metro-react-native-babel-preset "0.51.1" + +metro-resolver@0.51.1: + version "0.51.1" + resolved "https://registry.npm.taobao.org/metro-resolver/download/metro-resolver-0.51.1.tgz#4c26f0baee47d30250187adca3d34c902e627611" + integrity sha1-TCbwuu5H0wJQGHrco9NMkC5idhE= dependencies: absolute-path "^0.0.0" -metro-source-map@0.30.2: - version "0.30.2" - resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.30.2.tgz#4ac056642a2c521d974d42a617c8731d094365bb" - integrity sha512-9tW3B1JOdXhyDJnR4wOPOsOlYWSL+xh6J+N5/DADGEK/X/+Up/lEHdEfpB+/+yGk1LHaRHcKCahtLPNl/to7Sg== +metro-source-map@0.51.1: + version "0.51.1" + resolved "https://registry.npm.taobao.org/metro-source-map/download/metro-source-map-0.51.1.tgz#1a8da138e98e184304d5558b4f92a5c2141822d0" + integrity sha1-Go2hOOmOGEME1VWLT5KlwhQYItA= dependencies: source-map "^0.5.6" -metro@^0.30.0: - version "0.30.2" - resolved "https://registry.yarnpkg.com/metro/-/metro-0.30.2.tgz#e722e0eb106530f6d5bcf8de1f50353a0732cfb3" - integrity sha512-wmdkh4AsfZjWaMM++KMDswQHdyo5L9a0XAaQBL4XTJdQIRG+x+Rmjixe7tDki5jKwe9XxsjjbpbdYKswOANuiw== - dependencies: - "@babel/core" "^7.0.0-beta" - "@babel/generator" "^7.0.0-beta" - "@babel/helper-remap-async-to-generator" "^7.0.0-beta" - "@babel/plugin-external-helpers" "^7.0.0-beta" - "@babel/plugin-proposal-class-properties" "^7.0.0-beta" - "@babel/plugin-proposal-object-rest-spread" "^7.0.0-beta" - "@babel/plugin-syntax-dynamic-import" "^7.0.0-beta" - "@babel/plugin-transform-arrow-functions" "^7.0.0-beta" - "@babel/plugin-transform-block-scoping" "^7.0.0-beta" - "@babel/plugin-transform-classes" "^7.0.0-beta" - "@babel/plugin-transform-computed-properties" "^7.0.0-beta" - "@babel/plugin-transform-destructuring" "^7.0.0-beta" - "@babel/plugin-transform-exponentiation-operator" "^7.0.0-beta" - "@babel/plugin-transform-flow-strip-types" "^7.0.0-beta" - "@babel/plugin-transform-for-of" "^7.0.0-beta" - "@babel/plugin-transform-function-name" "^7.0.0-beta" - "@babel/plugin-transform-literals" "^7.0.0-beta" - "@babel/plugin-transform-modules-commonjs" "^7.0.0-beta" - "@babel/plugin-transform-object-assign" "^7.0.0-beta" - "@babel/plugin-transform-parameters" "^7.0.0-beta" - "@babel/plugin-transform-react-display-name" "^7.0.0-beta" - "@babel/plugin-transform-react-jsx" "^7.0.0-beta" - "@babel/plugin-transform-react-jsx-source" "^7.0.0-beta" - "@babel/plugin-transform-regenerator" "^7.0.0-beta" - "@babel/plugin-transform-shorthand-properties" "^7.0.0-beta" - "@babel/plugin-transform-spread" "^7.0.0-beta" - "@babel/plugin-transform-template-literals" "^7.0.0-beta" - "@babel/register" "^7.0.0-beta" - "@babel/template" "^7.0.0-beta" - "@babel/traverse" "^7.0.0-beta" - "@babel/types" "^7.0.0-beta" +metro@0.51.1, metro@^0.51.0: + version "0.51.1" + resolved "https://registry.npm.taobao.org/metro/download/metro-0.51.1.tgz#b0aad4731593b9f244261bad1abb2a006d1c8969" + integrity sha1-sKrUcxWTufJEJhutGrsqAG0ciWk= + dependencies: + "@babel/core" "^7.0.0" + "@babel/generator" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/plugin-external-helpers" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" absolute-path "^0.0.0" async "^2.4.0" - babel-core "^6.24.1" - babel-generator "^6.26.0" - babel-plugin-external-helpers "^6.22.0" - babel-plugin-react-transform "^3.0.0" - babel-plugin-transform-flow-strip-types "^6.21.0" - babel-preset-es2015-node "^6.1.1" - babel-preset-fbjs "^2.1.4" - babel-preset-react-native "^4.0.0" - babel-register "^6.24.1" - babel-template "^6.24.1" - babylon "^6.18.0" - chalk "^1.1.1" + babel-preset-fbjs "^3.0.1" + buffer-crc32 "^0.2.13" + chalk "^2.4.1" concat-stream "^1.6.0" connect "^3.6.5" - core-js "^2.2.2" debug "^2.2.0" denodeify "^1.2.1" eventemitter3 "^3.0.0" - fbjs "^0.8.14" + fbjs "^1.0.0" fs-extra "^1.0.0" graceful-fs "^4.1.3" image-size "^0.6.0" - jest-docblock "22.4.0" - jest-haste-map "22.4.2" - jest-worker "22.2.2" + invariant "^2.2.4" + jest-haste-map "24.0.0-alpha.6" + jest-worker "24.0.0-alpha.6" json-stable-stringify "^1.0.1" - json5 "^0.4.0" - left-pad "^1.1.3" lodash.throttle "^4.1.1" merge-stream "^1.0.1" - metro-babylon7 "0.30.2" - metro-cache "0.30.2" - metro-core "0.30.2" - metro-minify-uglify "0.30.2" - metro-resolver "0.30.2" - metro-source-map "0.30.2" + metro-babel-transformer "0.51.1" + metro-cache "0.51.1" + metro-config "0.51.1" + metro-core "0.51.1" + metro-minify-uglify "0.51.1" + metro-react-native-babel-preset "0.51.1" + metro-resolver "0.51.1" + metro-source-map "0.51.1" mime-types "2.1.11" mkdirp "^0.5.1" - node-fetch "^1.3.3" + node-fetch "^2.2.0" + nullthrows "^1.1.0" + react-transform-hmr "^1.0.4" resolve "^1.5.0" rimraf "^2.5.4" serialize-error "^2.1.0" @@ -6041,7 +5889,7 @@ metro@^0.30.0: throat "^4.1.0" wordwrap "^1.0.0" write-file-atomic "^1.2.0" - ws "^1.1.0" + ws "^1.1.5" xpipe "^1.0.5" yargs "^9.0.0" @@ -6299,7 +6147,7 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -node-fetch@^1.0.1, node-fetch@^1.3.3: +node-fetch@^1.0.1: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== @@ -6307,6 +6155,11 @@ node-fetch@^1.0.1, node-fetch@^1.3.3: encoding "^0.1.11" is-stream "^1.0.1" +node-fetch@^2.2.0: + version "2.6.0" + resolved "https://registry.npm.taobao.org/node-fetch/download/node-fetch-2.6.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-fetch%2Fdownload%2Fnode-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" + integrity sha1-5jNFY4bUqlWGP2dqerDaqP3ssP0= + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -6674,14 +6527,6 @@ os-locale@^3.1.0: lcid "^2.0.0" mem "^4.0.0" -os-name@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/os-name/-/os-name-2.0.1.tgz#b9a386361c17ae3a21736ef0599405c9a8c5dc5e" - integrity sha1-uaOGNhwXrjohc27wWZQFyajF3F4= - dependencies: - macos-release "^1.0.0" - win-release "^1.0.0" - os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -6886,11 +6731,6 @@ path-type@^3.0.0: dependencies: pify "^3.0.0" -pegjs@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/pegjs/-/pegjs-0.10.0.tgz#cf8bafae6eddff4b5a7efb185269eaaf4610ddbd" - integrity sha1-z4uvrm7d/0tafvsYUmnqr0YQ3b0= - performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -6951,23 +6791,13 @@ pkg-up@^2.0.0: dependencies: find-up "^2.1.0" -plist@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/plist/-/plist-2.0.1.tgz#0a32ca9481b1c364e92e18dc55c876de9d01da8b" - integrity sha1-CjLKlIGxw2TpLhjcVch23p0B2os= - dependencies: - base64-js "1.1.2" - xmlbuilder "8.2.2" - xmldom "0.1.x" - -plist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/plist/-/plist-1.2.0.tgz#084b5093ddc92506e259f874b8d9b1afb8c79593" - integrity sha1-CEtQk93JJQbiWfh0uNmxr7jHlZM= +plist@^3.0.0, plist@^3.0.1: + version "3.0.1" + resolved "https://registry.npm.taobao.org/plist/download/plist-3.0.1.tgz#a9b931d17c304e8912ef0ba3bdd6182baf2e1f8c" + integrity sha1-qbkx0XwwTokS7wujvdYYK68uH4w= dependencies: - base64-js "0.0.8" - util-deprecate "1.0.2" - xmlbuilder "4.0.0" + base64-js "^1.2.3" + xmlbuilder "^9.0.7" xmldom "0.1.x" plugin-error@^0.1.2: @@ -7011,6 +6841,14 @@ preserve@^0.2.0: resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= +pretty-format@24.0.0-alpha.6: + version "24.0.0-alpha.6" + resolved "https://registry.npm.taobao.org/pretty-format/download/pretty-format-24.0.0-alpha.6.tgz#25ad2fa46b342d6278bf241c5d2114d4376fbac1" + integrity sha1-Ja0vpGs0LWJ4vyQcXSEU1DdvusE= + dependencies: + ansi-regex "^4.0.0" + ansi-styles "^3.2.0" + pretty-format@^23.6.0: version "23.6.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760" @@ -7019,11 +6857,6 @@ pretty-format@^23.6.0: ansi-regex "^3.0.0" ansi-styles "^3.2.0" -pretty-format@^4.2.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-4.3.1.tgz#530be5c42b3c05b36414a7a2a4337aa80acd0e8d" - integrity sha1-UwvlxCs8BbNkFKeipDN6qArNDo0= - pretty-hrtime@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" @@ -7068,7 +6901,7 @@ prop-types-exact@^1.2.0: object.assign "^4.1.0" reflect.ownkeys "^0.2.0" -prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -7186,13 +7019,13 @@ react-deep-force-update@^1.0.0: resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.1.2.tgz#3d2ae45c2c9040cbb1772be52f8ea1ade6ca2ee1" integrity sha512-WUSQJ4P/wWcusaH+zZmbECOk7H5N2pOIl0vzheeornkIMhu+qrNdGFm0bDZLCb0hSF0jf/kH1SgkNGfBdTc4wA== -react-devtools-core@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-3.1.0.tgz#eec2e9e0e6edb77772e2bfc7d286a296f55a261a" - integrity sha512-fO6SmpW16E9u6Lb6zQOHrjhJXGBNz+cJ0/a9cSF55nXfL0sQLlvYJR8DpU7f4rMUrVnVineg4XQyYYBZicmhJg== +react-devtools-core@^3.6.0: + version "3.6.3" + resolved "https://registry.npm.taobao.org/react-devtools-core/download/react-devtools-core-3.6.3.tgz#977d95b684c6ad28205f0c62e1e12c5f16675814" + integrity sha1-l32VtoTGrSggXwxi4eEsXxZnWBQ= dependencies: shell-quote "^1.6.1" - ws "^2.0.3" + ws "^3.3.1" react-dom@^16.7.0: version "16.11.0" @@ -7278,68 +7111,59 @@ react-native-unimodules@^0.5.3: unimodules-sensors-interface "~3.0.0" unimodules-task-manager-interface "~3.0.0" -react-native@0.55.4: - version "0.55.4" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.55.4.tgz#eecffada3750a928e2ddd07cf11d857ae9751c30" - integrity sha512-J6U2KeuFIfH0I6kbwymQWe7Yw7AVzPq22tq6z5VmvcYQiKbqKkvjJukgHqR6keRreHjohEaWP5Gi007IGFJdyQ== +react-native@0.59.9: + version "0.59.9" + resolved "https://registry.npm.taobao.org/react-native/download/react-native-0.59.9.tgz?cache=0&sync_timestamp=1576689336916&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-native%2Fdownload%2Freact-native-0.59.9.tgz#c94ee4fa35121720c05235a2dd6cdd2784bf5177" + integrity sha1-yU7k+jUSFyDAUjWi3WzdJ4S/UXc= dependencies: + "@babel/runtime" "^7.0.0" + "@react-native-community/cli" "^1.2.1" absolute-path "^0.0.0" art "^0.10.0" - babel-core "^6.24.1" - babel-plugin-syntax-trailing-function-commas "^6.20.0" - babel-plugin-transform-async-to-generator "6.16.0" - babel-plugin-transform-class-properties "^6.18.0" - babel-plugin-transform-exponentiation-operator "^6.5.0" - babel-plugin-transform-flow-strip-types "^6.21.0" - babel-plugin-transform-object-rest-spread "^6.20.2" - babel-register "^6.24.1" - babel-runtime "^6.23.0" base64-js "^1.1.2" - chalk "^1.1.1" + chalk "^2.4.1" commander "^2.9.0" compression "^1.7.1" connect "^3.6.5" create-react-class "^15.6.3" debug "^2.2.0" denodeify "^1.2.1" - envinfo "^3.0.0" errorhandler "^1.5.0" - eslint-plugin-react-native "^3.2.1" + escape-string-regexp "^1.0.5" event-target-shim "^1.0.5" - fbjs "^0.8.14" - fbjs-scripts "^0.8.1" + fbjs "^1.0.0" + fbjs-scripts "^1.0.0" fs-extra "^1.0.0" glob "^7.1.1" graceful-fs "^4.1.3" inquirer "^3.0.6" + invariant "^2.2.4" lodash "^4.17.5" - metro "^0.30.0" - metro-core "^0.30.0" + metro-babel-register "0.51.0" + metro-react-native-babel-transformer "0.51.0" mime "^1.3.4" minimist "^1.2.0" mkdirp "^0.5.1" morgan "^1.9.0" - node-fetch "^1.3.3" + node-fetch "^2.2.0" node-notifier "^5.2.1" npmlog "^2.0.4" + nullthrows "^1.1.0" opn "^3.0.2" optimist "^0.6.1" - plist "^1.2.0" - pretty-format "^4.2.1" + plist "^3.0.0" + pretty-format "24.0.0-alpha.6" promise "^7.1.1" prop-types "^15.5.8" react-clone-referenced-element "^1.0.1" - react-devtools-core "3.1.0" - react-timer-mixin "^0.13.2" + react-devtools-core "^3.6.0" regenerator-runtime "^0.11.0" rimraf "^2.5.4" semver "^5.0.3" serve-static "^1.13.1" shell-quote "1.6.1" stacktrace-parser "^0.1.3" - whatwg-fetch "^1.0.0" - ws "^1.1.0" - xcode "^0.9.1" + ws "^1.1.5" xmldoc "^0.4.0" yargs "^9.0.0" @@ -7361,11 +7185,6 @@ react-test-renderer@^16.0.0-0, react-test-renderer@^16.5.2: react-is "^16.8.6" scheduler "^0.17.0" -react-timer-mixin@^0.13.2: - version "0.13.4" - resolved "https://registry.yarnpkg.com/react-timer-mixin/-/react-timer-mixin-0.13.4.tgz#75a00c3c94c13abe29b43d63b4c65a88fc8264d3" - integrity sha512-4+ow23tp/Tv7hBM5Az5/Be/eKKF7DIvJ09voz5LyHGQaqqz9WV8YMs31eFvcYQs7d451LSg7kDJV70XYN/Ug/Q== - react-transform-hmr@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/react-transform-hmr/-/react-transform-hmr-1.0.4.tgz#e1a40bd0aaefc72e8dfd7a7cda09af85066397bb" @@ -7374,15 +7193,15 @@ react-transform-hmr@^1.0.4: global "^4.3.0" react-proxy "^1.1.7" -react@16.3.1: - version "16.3.1" - resolved "https://registry.yarnpkg.com/react/-/react-16.3.1.tgz#4a2da433d471251c69b6033ada30e2ed1202cfd8" - integrity sha512-NbkxN9jsZ6+G+ICsLdC7/wUD26uNbvKU/RAxEWgc9kcdKvROt+5d5j2cNQm5PSFTQ4WNGsR3pa4qL2Q0/WSy1w== +react@16.8.0: + version "16.8.0" + resolved "https://registry.npm.taobao.org/react/download/react-16.8.0.tgz#8533f0e4af818f448a276eae71681d09e8dd970a" + integrity sha1-hTPw5K+Bj0SKJ26ucWgdCejdlwo= dependencies: - fbjs "^0.8.16" loose-envify "^1.1.0" object-assign "^4.1.1" - prop-types "^15.6.0" + prop-types "^15.6.2" + scheduler "^0.13.0" read-pkg-up@^1.0.1: version "1.0.1" @@ -7500,7 +7319,7 @@ regenerate-unicode-properties@^8.1.0: dependencies: regenerate "^1.4.0" -regenerate@^1.2.1, regenerate@^1.4.0: +regenerate@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== @@ -7510,14 +7329,10 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-transform@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" - integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q== - dependencies: - babel-runtime "^6.18.0" - babel-types "^6.19.0" - private "^0.1.6" +regenerator-runtime@^0.13.2: + version "0.13.3" + resolved "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" + integrity sha1-fPanfY9cb2Drc8X8GVWyzrAea/U= regenerator-transform@^0.14.0: version "0.14.1" @@ -7541,15 +7356,6 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexpu-core@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" - integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA= - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - regexpu-core@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" @@ -7562,23 +7368,11 @@ regexpu-core@^4.6.0: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.1.0" -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= - regjsgen@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= - dependencies: - jsesc "~0.5.0" - regjsparser@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" @@ -7770,6 +7564,13 @@ rimraf@^2.5.4, rimraf@^2.6.1: dependencies: glob "^7.1.3" +rimraf@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.0.tgz#614176d4b3010b75e5c390eb0ee96f6dc0cebb9b" + integrity sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg== + dependencies: + glob "^7.1.3" + rimraf@~2.2.6: version "2.2.8" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" @@ -7822,11 +7623,6 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== -safe-buffer@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" - integrity sha1-0mPKVGls2KMGtcplUekt5XkY++c= - safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -7855,6 +7651,23 @@ sane@^2.0.0: optionalDependencies: fsevents "^1.2.3" +sane@^3.0.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/sane/download/sane-3.1.0.tgz#995193b7dc1445ef1fe41ddfca2faf9f111854c6" + integrity sha1-mVGTt9wURe8f5B3fyi+vnxEYVMY= + dependencies: + anymatch "^2.0.0" + capture-exit "^1.2.0" + exec-sh "^0.2.0" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.18.0" + optionalDependencies: + fsevents "^1.2.3" + sane@^4.0.3: version "4.1.0" resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" @@ -7880,6 +7693,14 @@ sax@~1.1.1: resolved "https://registry.yarnpkg.com/sax/-/sax-1.1.6.tgz#5d616be8a5e607d54e114afae55b7eaf2fcc3240" integrity sha1-XWFr6KXmB9VOEUr65Vt+ry/MMkA= +scheduler@^0.13.0: + version "0.13.6" + resolved "https://registry.npm.taobao.org/scheduler/download/scheduler-0.13.6.tgz?cache=0&sync_timestamp=1576681268670&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fscheduler%2Fdownload%2Fscheduler-0.13.6.tgz#466a4ec332467b31a91b9bf74e5347072e4cd889" + integrity sha1-RmpOwzJGezGpG5v3TlNHBy5M2Ik= + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + scheduler@^0.17.0: version "0.17.0" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.17.0.tgz#7c9c673e4ec781fac853927916d1c426b6f3ddfe" @@ -7895,7 +7716,7 @@ semver-greatest-satisfied-range@^1.1.0: dependencies: sver-compat "^1.5.0" -"semver@2 || 3 || 4 || 5", semver@5.x, semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0: +"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -8001,14 +7822,14 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= -simple-plist@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-0.2.1.tgz#71766db352326928cf3a807242ba762322636723" - integrity sha1-cXZts1IyaSjPOoByQrp2IyJjZyM= +simple-plist@^1.0.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/simple-plist/download/simple-plist-1.1.0.tgz?cache=0&sync_timestamp=1573092499539&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsimple-plist%2Fdownload%2Fsimple-plist-1.1.0.tgz#8354ab63eb3922a054c78ce96c209c532e907a23" + integrity sha1-g1SrY+s5IqBUx4zpbCCcUy6QeiM= dependencies: - bplist-creator "0.0.7" - bplist-parser "0.1.1" - plist "2.0.1" + bplist-creator "0.0.8" + bplist-parser "0.2.0" + plist "^3.0.1" sisteransi@^0.1.1: version "0.1.1" @@ -8078,7 +7899,15 @@ source-map-support@^0.4.15: dependencies: source-map "^0.5.6" -source-map-support@^0.5.6, source-map-support@^0.5.9: +source-map-support@^0.5.16: + version "0.5.16" + resolved "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.16.tgz?cache=0&sync_timestamp=1572389965235&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-support%2Fdownload%2Fsource-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" + integrity sha1-CuBp5/47p1OMZMmFFeNTOerFoEI= + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@^0.5.6: version "0.5.13" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== @@ -8610,9 +8439,9 @@ uglify-es@^3.1.9: source-map "~0.6.1" uglify-js@^3.1.4: - version "3.6.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.4.tgz#88cc880c6ed5cf9868fdfa0760654e7bed463f1d" - integrity sha512-9Yc2i881pF4BPGhjteCXQNaXx1DCwm3dtOyBaG2hitHjLWOczw/ki8vD1bqyT3u6K0Ms/FpCShkmfg+FtlOfYA== + version "3.7.2" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.2.tgz#cb1a601e67536e9ed094a92dd1e333459643d3f9" + integrity sha512-uhRwZcANNWVLrxLfNFEdltoPNhECUR3lc+UdJoG9CBpMcSnKyWA94tc3eAujB1GcMY5Uwq8ZMp4qWpxWYDQmaA== dependencies: commander "~2.20.3" source-map "~0.6.1" @@ -8743,6 +8572,11 @@ unique-stream@^2.0.2: json-stable-stringify-without-jsonify "^1.0.1" through2-filter "^3.0.0" +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY= + unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -8786,7 +8620,7 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -util-deprecate@1.0.2, util-deprecate@^1.0.1, util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= @@ -8809,11 +8643,6 @@ uuid-js@^0.7.5: resolved "https://registry.yarnpkg.com/uuid-js/-/uuid-js-0.7.5.tgz#6c886d02a53d2d40dcf25d91a170b4a7b25b94d0" integrity sha1-bIhtAqU9LUDc8l2RoXC0p7JblNA= -uuid@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" - integrity sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE= - uuid@^3.3.2: version "3.3.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" @@ -8940,11 +8769,6 @@ whatwg-fetch@>=0.10.0: resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== -whatwg-fetch@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-1.1.1.tgz#ac3c9d39f320c6dce5339969d054ef43dd333319" - integrity sha1-rDydOfMgxtzlM5lp0FTvQ90zMxk= - whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" @@ -8992,13 +8816,6 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" -win-release@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/win-release/-/win-release-1.1.1.tgz#5fa55e02be7ca934edfc12665632e849b72e5209" - integrity sha1-X6VeAr58qTTt/BJmVjLoSbcuUgk= - dependencies: - semver "^5.0.1" - wordwrap@^1.0.0, wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" @@ -9049,7 +8866,7 @@ write-file-atomic@^2.1.0: imurmurhash "^0.1.4" signal-exit "^3.0.2" -ws@^1.1.0: +ws@^1.1.0, ws@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" integrity sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w== @@ -9057,12 +8874,13 @@ ws@^1.1.0: options ">=0.0.5" ultron "1.0.x" -ws@^2.0.3: - version "2.3.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-2.3.1.tgz#6b94b3e447cb6a363f785eaf94af6359e8e81c80" - integrity sha1-a5Sz5EfLajY/eF6vlK9jWejoHIA= +ws@^3.3.1: + version "3.3.3" + resolved "https://registry.npm.taobao.org/ws/download/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + integrity sha1-8c+E/i1ekB686U767OeF8YeiKPI= dependencies: - safe-buffer "~5.0.1" + async-limiter "~1.0.0" + safe-buffer "~5.1.0" ultron "~1.1.0" ws@^5.2.0: @@ -9072,31 +8890,23 @@ ws@^5.2.0: dependencies: async-limiter "~1.0.0" -xcode@^0.9.1: - version "0.9.3" - resolved "https://registry.yarnpkg.com/xcode/-/xcode-0.9.3.tgz#910a89c16aee6cc0b42ca805a6d0b4cf87211cf3" - integrity sha1-kQqJwWrubMC0LKgFptC0z4chHPM= +xcode@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/xcode/download/xcode-2.1.0.tgz#bab64a7e954bb50ca8d19da7e09531c65a43ecfe" + integrity sha1-urZKfpVLtQyo0Z2n4JUxxlpD7P4= dependencies: - pegjs "^0.10.0" - simple-plist "^0.2.1" - uuid "3.0.1" + simple-plist "^1.0.0" + uuid "^3.3.2" xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== -xmlbuilder@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.0.0.tgz#98b8f651ca30aa624036f127d11cc66dc7b907a3" - integrity sha1-mLj2UcowqmJANvEn0RzGbce5B6M= - dependencies: - lodash "^3.5.0" - -xmlbuilder@8.2.2: - version "8.2.2" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773" - integrity sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M= +xmlbuilder@^9.0.7: + version "9.0.7" + resolved "https://registry.npm.taobao.org/xmlbuilder/download/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= xmldoc@^0.4.0: version "0.4.0" diff --git a/packages/taro-router-rn/package.json b/packages/taro-router-rn/package.json index af38b545585d..90662342df8e 100644 --- a/packages/taro-router-rn/package.json +++ b/packages/taro-router-rn/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/taro-router-rn", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "taro-router-rn", "main": "./index.js", "files": [ @@ -9,7 +9,7 @@ "index.js" ], "scripts": { - "build": "rm -rf ./dist && gulp", + "build": "rimraf ./dist && gulp", "dev": "npm run build:static && tsc --watch", "prepack": "npm run build", "test": "jest" @@ -45,10 +45,11 @@ "jest-enzyme": "^7.0.0", "jest-mock-console": "^0.4.0", "jest-react-native": "^18.0.0", - "react": "^16.3.0", - "react-native": "^0.55.4", + "react": "^16.8.0", + "react-native": "^0.59.9", "react-test-renderer": "^16.5.2", "regenerator-runtime": "^0.12.1", + "rimraf": "^3.0.0", "ts-jest": "23.10.4", "tslib": "1.9.3", "typescript": "3.0.3" diff --git a/packages/taro-router/package.json b/packages/taro-router/package.json index 64f76273bb83..a88bd6522310 100644 --- a/packages/taro-router/package.json +++ b/packages/taro-router/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/router", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "Taro-router", "main:h5": "dist/index.esm.js", "main": "index.js", @@ -41,12 +41,12 @@ "@babel/plugin-syntax-dynamic-import": "7.0.0", "@babel/plugin-transform-react-jsx": "7.0.0", "@babel/preset-env": "7.1.5", - "@tarojs/taro-h5": "1.3.34", + "@tarojs/taro-h5": "2.0.0-beta.13", "@types/history": "4.7.2", "@types/jasmine": "2.8.11", "@types/jest": "23.3.9", "@types/lodash": "4.14.117", - "@types/webpack": "4.4.18", + "@types/webpack": "4.41.0", "jest": "23.6.0", "nervjs": "^1.5.0", "rollup": "1.1.0", diff --git a/packages/taro-runner-utils/__tests__/__snapshots__/scss.test.js.snap b/packages/taro-runner-utils/__tests__/__snapshots__/scss.test.js.snap new file mode 100644 index 000000000000..571b18171525 --- /dev/null +++ b/packages/taro-runner-utils/__tests__/__snapshots__/scss.test.js.snap @@ -0,0 +1,75 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`getBundleContent test sass resource array 1`] = ` +"$color-ui-info: #78A4FA !default; +$color-ui-positive: #13CE66 !default; +$color-ui-negative: #FF4949 !default; +$color-ui-warning: #FFC82C !default; +@mixin transform($property) { + -webkit-transform: $property; + -ms-transform: $property; + transform: $property; +} +" +`; + +exports[`getBundleContent test sass resource array with directory 1`] = ` +"$color-ui-info: #78A4FA !default; +$color-ui-positive: #13CE66 !default; +$color-ui-negative: #FF4949 !default; +$color-ui-warning: #FFC82C !default; +@mixin transform($property) { + -webkit-transform: $property; + -ms-transform: $property; + transform: $property; +} +" +`; + +exports[`getBundleContent test sass resource path 1`] = ` +"$color-ui-info: #78A4FA !default; +$color-ui-positive: #13CE66 !default; +$color-ui-negative: #FF4949 !default; +$color-ui-warning: #FFC82C !default; +" +`; + +exports[`getBundleContent test sass resource path with directory 1`] = ` +"$color-ui-info: #78A4FA !default; +$color-ui-positive: #13CE66 !default; +$color-ui-negative: #FF4949 !default; +$color-ui-warning: #FFC82C !default; +" +`; + +exports[`getBundleResult test file name and project directory path 1`] = ` +"$color-ui-info: #78A4FA !default; +$color-ui-positive: #13CE66 !default; +$color-ui-negative: #FF4949 !default; +$color-ui-warning: #FFC82C !default; +" +`; + +exports[`getBundleResult test file path 1`] = ` +"$color-ui-info: #78A4FA !default; +$color-ui-positive: #13CE66 !default; +$color-ui-negative: #FF4949 !default; +$color-ui-warning: #FFC82C !default; +" +`; + +exports[`getSassLoaderOption test get sass loader option 1`] = ` +Object { + "data": "$color-ui-info: #78A4FA !default; +$color-ui-positive: #13CE66 !default; +$color-ui-negative: #FF4949 !default; +$color-ui-warning: #FFC82C !default; +@mixin transform($property) { + -webkit-transform: $property; + -ms-transform: $property; + transform: $property; +} +", + "implementation": "dart-sass", +} +`; diff --git a/packages/taro-runner-utils/__tests__/scss.test.js b/packages/taro-runner-utils/__tests__/scss.test.js new file mode 100644 index 000000000000..e78c8c8a73f5 --- /dev/null +++ b/packages/taro-runner-utils/__tests__/scss.test.js @@ -0,0 +1,91 @@ +import path from 'path' +import { getBundleResult, getBundleContent, getSassLoaderOption } from '../dist/index' + +describe('getBundleResult', () => { + const filePath = path.resolve(__dirname, '.', 'styles/variables.scss') + const fileConfig = { + name: 'styles/variables.scss', + path: path.resolve(__dirname, '.') + } + + test('test file path', async () => { + const res = await getBundleResult(filePath) + expect(res.bundledContent).toMatchSnapshot() + }) + + test('test file name and project directory path', async () => { + const res = await getBundleResult(fileConfig.name, fileConfig.path) + expect(res.bundledContent).toMatchSnapshot() + }) +}) + +describe('getBundleContent', () => { + const sassResourcePath = { + resource: path.resolve(__dirname, '.', 'styles/variables.scss') + } + const sassResourcePathWithDirectory = { + resource: 'styles/variables.scss', + projectDirectory: path.resolve(__dirname, '.') + } + const sassResourceArray = { + resource: [ + path.resolve(__dirname, '.', 'styles/variables.scss'), + path.resolve(__dirname, '.', 'styles/mixins.scss') + ] + } + const sassResourceArrayWithDirectory = { + resource: [ + 'styles/variables.scss', + 'styles/mixins.scss' + ], + projectDirectory: path.resolve(__dirname, '.') + } + + test('test sass resource path', async () => { + const data = sassResourcePath; + const res = await getBundleContent(data.resource) + expect(res).toMatchSnapshot() + }) + test('test sass resource path with directory', async () => { + const data = sassResourcePathWithDirectory + const res = await getBundleContent(data.resource, data.projectDirectory) + expect(res).toMatchSnapshot() + }) + + test('test sass resource array', async () => { + const data = sassResourceArray; + const res = await getBundleContent(data.resource) + expect(res).toMatchSnapshot() + }) + test('test sass resource array with directory', async () => { + const data = sassResourceArrayWithDirectory + const res = await getBundleContent(data.resource, data.projectDirectory) + expect(res).toMatchSnapshot() + }) +}) + +describe('getSassLoaderOption', () => { + const buildConfig = { + publicPath: '/', + staticDirectory: 'static', + deviceRatio: { '640': 1.17, '750': 1, '828': 0.905 }, + designWidth: 750, + outputRoot: 'dist', + sass: { + resource: [ + 'styles/variables.scss', + 'styles/mixins.scss' + ], + projectDirectory: path.resolve(__dirname, '.') + }, + sassLoaderOption: { + implementation: 'dart-sass' + }, + sourceRoot: 'src' + } + + test('test get sass loader option', async () => { + const res = await getSassLoaderOption(buildConfig) + expect(res).toMatchSnapshot() + }) +}) diff --git a/packages/taro-runner-utils/__tests__/styles/mixins.scss b/packages/taro-runner-utils/__tests__/styles/mixins.scss new file mode 100644 index 000000000000..5ad2ecbedb41 --- /dev/null +++ b/packages/taro-runner-utils/__tests__/styles/mixins.scss @@ -0,0 +1,5 @@ +@mixin transform($property) { + -webkit-transform: $property; + -ms-transform: $property; + transform: $property; +} diff --git a/packages/taro-runner-utils/__tests__/styles/variables.scss b/packages/taro-runner-utils/__tests__/styles/variables.scss new file mode 100644 index 000000000000..add794c10eb0 --- /dev/null +++ b/packages/taro-runner-utils/__tests__/styles/variables.scss @@ -0,0 +1,4 @@ +$color-ui-info: #78A4FA !default; +$color-ui-positive: #13CE66 !default; +$color-ui-negative: #FF4949 !default; +$color-ui-warning: #FFC82C !default; diff --git a/packages/taro-runner-utils/babel.config.js b/packages/taro-runner-utils/babel.config.js new file mode 100644 index 000000000000..4bb705d9f6e1 --- /dev/null +++ b/packages/taro-runner-utils/babel.config.js @@ -0,0 +1,12 @@ +module.exports = { + presets: [ + [ + '@babel/preset-env', + { + targets: { + node: 'current', + }, + }, + ], + ], +} diff --git a/packages/taro-runner-utils/jest.config.js b/packages/taro-runner-utils/jest.config.js new file mode 100644 index 000000000000..1d08f9d1e803 --- /dev/null +++ b/packages/taro-runner-utils/jest.config.js @@ -0,0 +1,10 @@ +module.exports = { + verbose: true, + moduleFileExtensions: ['js', 'jsx', 'json'], + rootDir: __dirname, + testMatch: ['/__tests__/**/*.test.js'], + transform: { + '^.+\\.js?$': 'babel-jest' + }, + transformIgnorePatterns: ['/node_modules/'] +} diff --git a/packages/taro-runner-utils/package.json b/packages/taro-runner-utils/package.json new file mode 100644 index 000000000000..4656fce8570f --- /dev/null +++ b/packages/taro-runner-utils/package.json @@ -0,0 +1,34 @@ +{ + "name": "@tarojs/runner-utils", + "version": "2.0.0-beta.13", + "description": "Taro runner utilities.", + "main": "dist/index.js", + "types": "types/index.d.ts", + "files": [ + "dist", + "types" + ], + "scripts": { + "build": "tsc" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/NervJS/taro.git" + }, + "keywords": [ + "taro" + ], + "author": "garfield550", + "license": "MIT", + "devDependencies": { + "@babel/core": "^7.7.4", + "@babel/preset-env": "^7.7.4", + "@types/jest": "^24.0.23", + "babel-jest": "^24.9.0", + "jest": "^24.9.0", + "typescript": "^3.7.3" + }, + "dependencies": { + "scss-bundle": "^3.0.2" + } +} diff --git a/packages/taro-runner-utils/src/index.ts b/packages/taro-runner-utils/src/index.ts new file mode 100644 index 000000000000..03d0f56d86f1 --- /dev/null +++ b/packages/taro-runner-utils/src/index.ts @@ -0,0 +1,7 @@ +import { getBundleResult, getBundleContent, getSassLoaderOption } from './scss' + +export { + getBundleResult, + getBundleContent, + getSassLoaderOption +} diff --git a/packages/taro-runner-utils/src/scss.ts b/packages/taro-runner-utils/src/scss.ts new file mode 100644 index 000000000000..b546c09afea3 --- /dev/null +++ b/packages/taro-runner-utils/src/scss.ts @@ -0,0 +1,98 @@ +import { Bundler, BundleResult } from 'scss-bundle' + +interface LoaderOption { + data?: string + [key: string]: any +} + +interface BuildConfig { + sass?: { + resource?: string | string[] + projectDirectory?: string + data?: string + } + sassLoaderOption?: LoaderOption +} + +/** + * Return bundled sass content. + * + * @param {string} url Absolute file path. + * @param {(string | undefined)} projectDirectory Absolute project location, where node_modules are located. + * Used for resolving tilde imports. + * @returns Bundle result. + */ +export async function getBundleResult(url: string, + projectDirectory: string | undefined = undefined + ): Promise { + let bundler: Bundler = new Bundler() + if (projectDirectory) { + bundler = new Bundler(undefined, projectDirectory) + } + const res = await bundler.bundle(url) + return res +} + +/** + * Return bundled sass content, but input resource can be a single string or an array. + * @param {(string | string[])} resource Input file path or a path array. + * @param {(string | undefined)} projectDirectory Absolute project location, where node_modules are located. + * Used for resolving tilde imports. + * @returns Bundle result. + */ +export async function getBundleContent(resource: string | string[], + projectDirectory: string | undefined = undefined +): Promise { + let result: string | undefined = '' + + try { + if (typeof resource === 'string') { + const res = await getBundleResult(resource, projectDirectory) + result = res.bundledContent + } + + if (Array.isArray(resource)) { + for (const url of resource) { + const res = await getBundleResult(url, projectDirectory) + result += res.bundledContent || '' + } + } + } catch (error) { + throw new Error(error) + } + + return result +} + +/** + * Return the merged sass loader option. + * @param {BuildConfig} param0 Build config. + * @returns Merged sass loader option. + */ +export async function getSassLoaderOption( + { sass, sassLoaderOption }: BuildConfig +): Promise { + sassLoaderOption = sassLoaderOption || {} + + let bundledContent: string = '' + + if (!sass) { + return sassLoaderOption + } + + const { resource, projectDirectory } = sass + if (resource) { + const content = await getBundleContent(resource, projectDirectory) + bundledContent += content + } + + if (sass.data) { + bundledContent += sass.data + } + return { + ...sassLoaderOption, + data: sassLoaderOption.data ? `${sassLoaderOption.data}${bundledContent}` : bundledContent + } +} + +export default getSassLoaderOption diff --git a/packages/taro-runner-utils/tsconfig.json b/packages/taro-runner-utils/tsconfig.json new file mode 100644 index 000000000000..375e5735387b --- /dev/null +++ b/packages/taro-runner-utils/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "allowJs": false, + "allowSyntheticDefaultImports": true, + "alwaysStrict": true, + "baseUrl": ".", + "declaration": true, + "declarationDir": "types", + "experimentalDecorators": true, + "module": "CommonJS", + "moduleResolution": "node", + "noImplicitAny": false, + "noUnusedLocals": true, + "outDir": "dist", + "preserveConstEnums": true, + "removeComments": false, + "rootDir": "./src", + "skipLibCheck": true, + "sourceMap": false, + "strictNullChecks": true, + "target": "ES2015", + "traceResolution": false + }, + "include": [ + "./src" + ], + "exclude": [ + "./src/__tests__" + ] +} diff --git a/packages/taro-runner-utils/types/index.d.ts b/packages/taro-runner-utils/types/index.d.ts new file mode 100644 index 000000000000..50c36d95fc8c --- /dev/null +++ b/packages/taro-runner-utils/types/index.d.ts @@ -0,0 +1,2 @@ +import { getBundleResult, getBundleContent, getSassLoaderOption } from './scss'; +export { getBundleResult, getBundleContent, getSassLoaderOption }; diff --git a/packages/taro-runner-utils/types/scss.d.ts b/packages/taro-runner-utils/types/scss.d.ts new file mode 100644 index 000000000000..bfb86ba9fc5e --- /dev/null +++ b/packages/taro-runner-utils/types/scss.d.ts @@ -0,0 +1,37 @@ +import { BundleResult } from 'scss-bundle'; +interface LoaderOption { + data?: string; + [key: string]: any; +} +interface BuildConfig { + sass?: { + resource?: string | string[]; + projectDirectory?: string; + data?: string; + }; + sassLoaderOption?: LoaderOption; +} +/** + * Return bundled sass content. + * + * @param {string} url Absolute file path. + * @param {(string | undefined)} projectDirectory Absolute project location, where node_modules are located. + * Used for resolving tilde imports. + * @returns Bundle result. + */ +export declare function getBundleResult(url: string, projectDirectory?: string | undefined): Promise; +/** + * Return bundled sass content, but input resource can be a single string or an array. + * @param {(string | string[])} resource Input file path or a path array. + * @param {(string | undefined)} projectDirectory Absolute project location, where node_modules are located. + * Used for resolving tilde imports. + * @returns Bundle result. + */ +export declare function getBundleContent(resource: string | string[], projectDirectory?: string | undefined): Promise; +/** + * Return the merged sass loader option. + * @param {BuildConfig} param0 Build config. + * @returns Merged sass loader option. + */ +export declare function getSassLoaderOption({ sass, sassLoaderOption }: BuildConfig): Promise; +export default getSassLoaderOption; diff --git a/packages/taro-runner-utils/yarn.lock b/packages/taro-runner-utils/yarn.lock new file mode 100644 index 000000000000..ae4a1ef47d9f --- /dev/null +++ b/packages/taro-runner-utils/yarn.lock @@ -0,0 +1,4453 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" + integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== + dependencies: + "@babel/highlight" "^7.0.0" + +"@babel/core@^7.1.0", "@babel/core@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.4.tgz#37e864532200cb6b50ee9a4045f5f817840166ab" + integrity sha512-+bYbx56j4nYBmpsWtnPUsKW3NdnYxbqyfrP2w9wILBuHzdfIKz9prieZK0DFPyIzkjYVUe4QkusGL07r5pXznQ== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.7.4" + "@babel/helpers" "^7.7.4" + "@babel/parser" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + convert-source-map "^1.7.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.4.0", "@babel/generator@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.4.tgz#db651e2840ca9aa66f327dcec1dc5f5fa9611369" + integrity sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg== + dependencies: + "@babel/types" "^7.7.4" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.4.tgz#bb3faf1e74b74bd547e867e48f551fa6b098b6ce" + integrity sha512-2BQmQgECKzYKFPpiycoF9tlb5HA4lrVyAmLLVK177EcQAqjVLciUb2/R+n1boQ9y5ENV3uz2ZqiNw7QMBBw1Og== + dependencies: + "@babel/types" "^7.7.4" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.4.tgz#5f73f2b28580e224b5b9bd03146a4015d6217f5f" + integrity sha512-Biq/d/WtvfftWZ9Uf39hbPBYDUo986m5Bb4zhkeYDGUllF43D+nUe5M6Vuo6/8JDK/0YX/uBdeoQpyaNhNugZQ== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-call-delegate@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.7.4.tgz#621b83e596722b50c0066f9dc37d3232e461b801" + integrity sha512-8JH9/B7J7tCYJ2PpWVpw9JhPuEVHztagNVuQAFBVFYluRMlpG7F1CgKEgGeL6KFqcsIa92ZYVj6DSc0XwmN1ZA== + dependencies: + "@babel/helper-hoist-variables" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-create-regexp-features-plugin@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz#6d5762359fd34f4da1500e4cff9955b5299aaf59" + integrity sha512-Mt+jBKaxL0zfOIWrfQpnfYCN7/rS6GKx6CCCfuoqVVd+17R8zNDlzVYmIi9qyb2wOk002NsmSTDymkIygDUH7A== + dependencies: + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.6.0" + +"@babel/helper-define-map@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.7.4.tgz#2841bf92eb8bd9c906851546fe6b9d45e162f176" + integrity sha512-v5LorqOa0nVQUvAUTUF3KPastvUt/HzByXNamKQ6RdJRTV7j8rLL+WB5C/MzzWAwOomxDhYFb1wLLxHqox86lg== + dependencies: + "@babel/helper-function-name" "^7.7.4" + "@babel/types" "^7.7.4" + lodash "^4.17.13" + +"@babel/helper-explode-assignable-expression@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.4.tgz#fa700878e008d85dc51ba43e9fb835cddfe05c84" + integrity sha512-2/SicuFrNSXsZNBxe5UGdLr+HZg+raWBLE9vC98bdYOKX/U6PY0mdGlYUJdtTDPSU0Lw0PNbKKDpwYHJLn2jLg== + dependencies: + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-function-name@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz#ab6e041e7135d436d8f0a3eca15de5b67a341a2e" + integrity sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ== + dependencies: + "@babel/helper-get-function-arity" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-get-function-arity@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz#cb46348d2f8808e632f0ab048172130e636005f0" + integrity sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA== + dependencies: + "@babel/types" "^7.7.4" + +"@babel/helper-hoist-variables@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.4.tgz#612384e3d823fdfaaf9fce31550fe5d4db0f3d12" + integrity sha512-wQC4xyvc1Jo/FnLirL6CEgPgPCa8M74tOdjWpRhQYapz5JC7u3NYU1zCVoVAGCE3EaIP9T1A3iW0WLJ+reZlpQ== + dependencies: + "@babel/types" "^7.7.4" + +"@babel/helper-member-expression-to-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.4.tgz#356438e2569df7321a8326644d4b790d2122cb74" + integrity sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw== + dependencies: + "@babel/types" "^7.7.4" + +"@babel/helper-module-imports@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz#e5a92529f8888bf319a6376abfbd1cebc491ad91" + integrity sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ== + dependencies: + "@babel/types" "^7.7.4" + +"@babel/helper-module-transforms@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.7.4.tgz#8d7cdb1e1f8ea3d8c38b067345924ac4f8e0879a" + integrity sha512-ehGBu4mXrhs0FxAqN8tWkzF8GSIGAiEumu4ONZ/hD9M88uHcD+Yu2ttKfOCgwzoesJOJrtQh7trI5YPbRtMmnA== + dependencies: + "@babel/helper-module-imports" "^7.7.4" + "@babel/helper-simple-access" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/types" "^7.7.4" + lodash "^4.17.13" + +"@babel/helper-optimise-call-expression@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.4.tgz#034af31370d2995242aa4df402c3b7794b2dcdf2" + integrity sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg== + dependencies: + "@babel/types" "^7.7.4" + +"@babel/helper-plugin-utils@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" + integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== + +"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351" + integrity sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw== + dependencies: + lodash "^4.17.13" + +"@babel/helper-remap-async-to-generator@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.4.tgz#c68c2407350d9af0e061ed6726afb4fff16d0234" + integrity sha512-Sk4xmtVdM9sA/jCI80f+KS+Md+ZHIpjuqmYPk1M7F/upHou5e4ReYmExAiu6PVe65BhJPZA2CY9x9k4BqE5klw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.7.4" + "@babel/helper-wrap-function" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-replace-supers@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.7.4.tgz#3c881a6a6a7571275a72d82e6107126ec9e2cdd2" + integrity sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.7.4" + "@babel/helper-optimise-call-expression" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-simple-access@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.7.4.tgz#a169a0adb1b5f418cfc19f22586b2ebf58a9a294" + integrity sha512-zK7THeEXfan7UlWsG2A6CI/L9jVnI5+xxKZOdej39Y0YtDYKx9raHk5F2EtK9K8DHRTihYwg20ADt9S36GR78A== + dependencies: + "@babel/template" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-split-export-declaration@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz#57292af60443c4a3622cf74040ddc28e68336fd8" + integrity sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug== + dependencies: + "@babel/types" "^7.7.4" + +"@babel/helper-wrap-function@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.7.4.tgz#37ab7fed5150e22d9d7266e830072c0cdd8baace" + integrity sha512-VsfzZt6wmsocOaVU0OokwrIytHND55yvyT4BPB9AIIgwr8+x7617hetdJTsuGwygN5RC6mxA9EJztTjuwm2ofg== + dependencies: + "@babel/helper-function-name" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helpers@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.7.4.tgz#62c215b9e6c712dadc15a9a0dcab76c92a940302" + integrity sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg== + dependencies: + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/highlight@^7.0.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" + integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.4.tgz#75ab2d7110c2cf2fa949959afb05fa346d2231bb" + integrity sha512-jIwvLO0zCL+O/LmEJQjWA75MQTWwx3c3u2JOTDK5D3/9egrWRRA0/0hk9XXywYnXZVVpzrBYeIQTmhwUaePI9g== + +"@babel/plugin-proposal-async-generator-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.4.tgz#0351c5ac0a9e927845fffd5b82af476947b7ce6d" + integrity sha512-1ypyZvGRXriY/QP668+s8sFr2mqinhkRDMPSQLNghCQE+GAkFtp+wkHVvg2+Hdki8gwP+NFzJBJ/N1BfzCCDEw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.7.4" + "@babel/plugin-syntax-async-generators" "^7.7.4" + +"@babel/plugin-proposal-dynamic-import@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.4.tgz#dde64a7f127691758cbfed6cf70de0fa5879d52d" + integrity sha512-StH+nGAdO6qDB1l8sZ5UBV8AC3F2VW2I8Vfld73TMKyptMU9DY5YsJAS8U81+vEtxcH3Y/La0wG0btDrhpnhjQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-dynamic-import" "^7.7.4" + +"@babel/plugin-proposal-json-strings@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.7.4.tgz#7700a6bfda771d8dc81973249eac416c6b4c697d" + integrity sha512-wQvt3akcBTfLU/wYoqm/ws7YOAQKu8EVJEvHip/mzkNtjaclQoCCIqKXFP5/eyfnfbQCDV3OLRIK3mIVyXuZlw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-json-strings" "^7.7.4" + +"@babel/plugin-proposal-object-rest-spread@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.4.tgz#cc57849894a5c774214178c8ab64f6334ec8af71" + integrity sha512-rnpnZR3/iWKmiQyJ3LKJpSwLDcX/nSXhdLk4Aq/tXOApIvyu7qoabrige0ylsAJffaUC51WiBu209Q0U+86OWQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.7.4" + +"@babel/plugin-proposal-optional-catch-binding@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.7.4.tgz#ec21e8aeb09ec6711bc0a39ca49520abee1de379" + integrity sha512-DyM7U2bnsQerCQ+sejcTNZh8KQEUuC3ufzdnVnSiUv/qoGJp2Z3hanKL18KDhsBT5Wj6a7CMT5mdyCNJsEaA9w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" + +"@babel/plugin-proposal-unicode-property-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.4.tgz#7c239ccaf09470dbe1d453d50057460e84517ebb" + integrity sha512-cHgqHgYvffluZk85dJ02vloErm3Y6xtH+2noOBOJ2kXOJH3aVCDnj5eR/lVNlTnYu4hndAPJD3rTFjW3qee0PA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-async-generators@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.7.4.tgz#331aaf310a10c80c44a66b238b6e49132bd3c889" + integrity sha512-Li4+EjSpBgxcsmeEF8IFcfV/+yJGxHXDirDkEoyFjumuwbmfCVHUt0HuowD/iGM7OhIRyXJH9YXxqiH6N815+g== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-dynamic-import@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz#29ca3b4415abfe4a5ec381e903862ad1a54c3aec" + integrity sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-json-strings@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.7.4.tgz#86e63f7d2e22f9e27129ac4e83ea989a382e86cc" + integrity sha512-QpGupahTQW1mHRXddMG5srgpHWqRLwJnJZKXTigB9RPFCCGbDGCgBeM/iC82ICXp414WeYx/tD54w7M2qRqTMg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.7.4.tgz#47cf220d19d6d0d7b154304701f468fc1cc6ff46" + integrity sha512-mObR+r+KZq0XhRVS2BrBKBpr5jqrqzlPvS9C9vuOf5ilSwzloAl7RPWLrgKdWS6IreaVrjHxTjtyqFiOisaCwg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.7.4.tgz#a3e38f59f4b6233867b4a92dcb0ee05b2c334aa6" + integrity sha512-4ZSuzWgFxqHRE31Glu+fEr/MirNZOMYmD/0BhBWyLyOOQz/gTAl7QmWm2hX1QxEIXsr2vkdlwxIzTyiYRC4xcQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-top-level-await@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.4.tgz#bd7d8fa7b9fee793a36e4027fd6dd1aa32f946da" + integrity sha512-wdsOw0MvkL1UIgiQ/IFr3ETcfv1xb8RMM0H9wbiDyLaJFyiDg5oZvDLCXosIXmFeIlweML5iOBXAkqddkYNizg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-arrow-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz#76309bd578addd8aee3b379d809c802305a98a12" + integrity sha512-zUXy3e8jBNPiffmqkHRNDdZM2r8DWhCB7HhcoyZjiK1TxYEluLHAvQuYnTT+ARqRpabWqy/NHkO6e3MsYB5YfA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-async-to-generator@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.4.tgz#694cbeae6d613a34ef0292713fa42fb45c4470ba" + integrity sha512-zpUTZphp5nHokuy8yLlyafxCJ0rSlFoSHypTUWgpdwoDXWQcseaect7cJ8Ppk6nunOM6+5rPMkod4OYKPR5MUg== + dependencies: + "@babel/helper-module-imports" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.7.4" + +"@babel/plugin-transform-block-scoped-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.7.4.tgz#d0d9d5c269c78eaea76227ace214b8d01e4d837b" + integrity sha512-kqtQzwtKcpPclHYjLK//3lH8OFsCDuDJBaFhVwf8kqdnF6MN4l618UDlcA7TfRs3FayrHj+svYnSX8MC9zmUyQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-block-scoping@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.7.4.tgz#200aad0dcd6bb80372f94d9e628ea062c58bf224" + integrity sha512-2VBe9u0G+fDt9B5OV5DQH4KBf5DoiNkwFKOz0TCvBWvdAN2rOykCTkrL+jTLxfCAm76l9Qo5OqL7HBOx2dWggg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + lodash "^4.17.13" + +"@babel/plugin-transform-classes@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.4.tgz#c92c14be0a1399e15df72667067a8f510c9400ec" + integrity sha512-sK1mjWat7K+buWRuImEzjNf68qrKcrddtpQo3swi9j7dUcG6y6R6+Di039QN2bD1dykeswlagupEmpOatFHHUg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.7.4" + "@babel/helper-define-map" "^7.7.4" + "@babel/helper-function-name" "^7.7.4" + "@babel/helper-optimise-call-expression" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.7.4.tgz#e856c1628d3238ffe12d668eb42559f79a81910d" + integrity sha512-bSNsOsZnlpLLyQew35rl4Fma3yKWqK3ImWMSC/Nc+6nGjC9s5NFWAer1YQ899/6s9HxO2zQC1WoFNfkOqRkqRQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-destructuring@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.7.4.tgz#2b713729e5054a1135097b6a67da1b6fe8789267" + integrity sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-dotall-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.4.tgz#f7ccda61118c5b7a2599a72d5e3210884a021e96" + integrity sha512-mk0cH1zyMa/XHeb6LOTXTbG7uIJ8Rrjlzu91pUx/KS3JpcgaTDwMS8kM+ar8SLOvlL2Lofi4CGBAjCo3a2x+lw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-duplicate-keys@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.7.4.tgz#3d21731a42e3f598a73835299dd0169c3b90ac91" + integrity sha512-g1y4/G6xGWMD85Tlft5XedGaZBCIVN+/P0bs6eabmcPP9egFleMAo65OOjlhcz1njpwagyY3t0nsQC9oTFegJA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-exponentiation-operator@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.7.4.tgz#dd30c0191e3a1ba19bcc7e389bdfddc0729d5db9" + integrity sha512-MCqiLfCKm6KEA1dglf6Uqq1ElDIZwFuzz1WH5mTf8k2uQSxEJMbOIEh7IZv7uichr7PMfi5YVSrr1vz+ipp7AQ== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-for-of@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.7.4.tgz#248800e3a5e507b1f103d8b4ca998e77c63932bc" + integrity sha512-zZ1fD1B8keYtEcKF+M1TROfeHTKnijcVQm0yO/Yu1f7qoDoxEIc/+GX6Go430Bg84eM/xwPFp0+h4EbZg7epAA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-function-name@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.4.tgz#75a6d3303d50db638ff8b5385d12451c865025b1" + integrity sha512-E/x09TvjHNhsULs2IusN+aJNRV5zKwxu1cpirZyRPw+FyyIKEHPXTsadj48bVpc1R5Qq1B5ZkzumuFLytnbT6g== + dependencies: + "@babel/helper-function-name" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-literals@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.7.4.tgz#27fe87d2b5017a2a5a34d1c41a6b9f6a6262643e" + integrity sha512-X2MSV7LfJFm4aZfxd0yLVFrEXAgPqYoDG53Br/tCKiKYfX0MjVjQeWPIhPHHsCqzwQANq+FLN786fF5rgLS+gw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-member-expression-literals@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.7.4.tgz#aee127f2f3339fc34ce5e3055d7ffbf7aa26f19a" + integrity sha512-9VMwMO7i69LHTesL0RdGy93JU6a+qOPuvB4F4d0kR0zyVjJRVJRaoaGjhtki6SzQUu8yen/vxPKN6CWnCUw6bA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-modules-amd@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.7.4.tgz#276b3845ca2b228f2995e453adc2e6f54d72fb71" + integrity sha512-/542/5LNA18YDtg1F+QHvvUSlxdvjZoD/aldQwkq+E3WCkbEjNSN9zdrOXaSlfg3IfGi22ijzecklF/A7kVZFQ== + dependencies: + "@babel/helper-module-transforms" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-commonjs@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.4.tgz#bee4386e550446343dd52a571eda47851ff857a3" + integrity sha512-k8iVS7Jhc367IcNF53KCwIXtKAH7czev866ThsTgy8CwlXjnKZna2VHwChglzLleYrcHz1eQEIJlGRQxB53nqA== + dependencies: + "@babel/helper-module-transforms" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-simple-access" "^7.7.4" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-systemjs@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.4.tgz#cd98152339d3e763dfe838b7d4273edaf520bb30" + integrity sha512-y2c96hmcsUi6LrMqvmNDPBBiGCiQu0aYqpHatVVu6kD4mFEXKjyNxd/drc18XXAf9dv7UXjrZwBVmTTGaGP8iw== + dependencies: + "@babel/helper-hoist-variables" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-umd@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.4.tgz#1027c355a118de0aae9fee00ad7813c584d9061f" + integrity sha512-u2B8TIi0qZI4j8q4C51ktfO7E3cQ0qnaXFI1/OXITordD40tt17g/sXqgNNCcMTcBFKrUPcGDx+TBJuZxLx7tw== + dependencies: + "@babel/helper-module-transforms" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.4.tgz#fb3bcc4ee4198e7385805007373d6b6f42c98220" + integrity sha512-jBUkiqLKvUWpv9GLSuHUFYdmHg0ujC1JEYoZUfeOOfNydZXp1sXObgyPatpcwjWgsdBGsagWW0cdJpX/DO2jMw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.4" + +"@babel/plugin-transform-new-target@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.7.4.tgz#4a0753d2d60639437be07b592a9e58ee00720167" + integrity sha512-CnPRiNtOG1vRodnsyGX37bHQleHE14B9dnnlgSeEs3ek3fHN1A1SScglTCg1sfbe7sRQ2BUcpgpTpWSfMKz3gg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-object-super@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.7.4.tgz#48488937a2d586c0148451bf51af9d7dda567262" + integrity sha512-ho+dAEhC2aRnff2JCA0SAK7V2R62zJd/7dmtoe7MHcso4C2mS+vZjn1Pb1pCVZvJs1mgsvv5+7sT+m3Bysb6eg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.7.4" + +"@babel/plugin-transform-parameters@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.4.tgz#da4555c97f39b51ac089d31c7380f03bca4075ce" + integrity sha512-VJwhVePWPa0DqE9vcfptaJSzNDKrWU/4FbYCjZERtmqEs05g3UMXnYMZoXja7JAJ7Y7sPZipwm/pGApZt7wHlw== + dependencies: + "@babel/helper-call-delegate" "^7.7.4" + "@babel/helper-get-function-arity" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-property-literals@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.7.4.tgz#2388d6505ef89b266103f450f9167e6bd73f98c2" + integrity sha512-MatJhlC4iHsIskWYyawl53KuHrt+kALSADLQQ/HkhTjX954fkxIEh4q5slL4oRAnsm/eDoZ4q0CIZpcqBuxhJQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-regenerator@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.4.tgz#d18eac0312a70152d7d914cbed2dc3999601cfc0" + integrity sha512-e7MWl5UJvmPEwFJTwkBlPmqixCtr9yAASBqff4ggXTNicZiwbF8Eefzm6NVgfiBp7JdAGItecnctKTgH44q2Jw== + dependencies: + regenerator-transform "^0.14.0" + +"@babel/plugin-transform-reserved-words@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.7.4.tgz#6a7cf123ad175bb5c69aec8f6f0770387ed3f1eb" + integrity sha512-OrPiUB5s5XvkCO1lS7D8ZtHcswIC57j62acAnJZKqGGnHP+TIc/ljQSrgdX/QyOTdEK5COAhuc820Hi1q2UgLQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-shorthand-properties@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.7.4.tgz#74a0a9b2f6d67a684c6fbfd5f0458eb7ba99891e" + integrity sha512-q+suddWRfIcnyG5YiDP58sT65AJDZSUhXQDZE3r04AuqD6d/XLaQPPXSBzP2zGerkgBivqtQm9XKGLuHqBID6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-spread@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.7.4.tgz#aa673b356fe6b7e70d69b6e33a17fef641008578" + integrity sha512-8OSs0FLe5/80cndziPlg4R0K6HcWSM0zyNhHhLsmw/Nc5MaA49cAsnoJ/t/YZf8qkG7fD+UjTRaApVDB526d7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-sticky-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.7.4.tgz#ffb68c05090c30732076b1285dc1401b404a123c" + integrity sha512-Ls2NASyL6qtVe1H1hXts9yuEeONV2TJZmplLONkMPUG158CtmnrzW5Q5teibM5UVOFjG0D3IC5mzXR6pPpUY7A== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" + +"@babel/plugin-transform-template-literals@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.7.4.tgz#1eb6411736dd3fe87dbd20cc6668e5121c17d604" + integrity sha512-sA+KxLwF3QwGj5abMHkHgshp9+rRz+oY9uoRil4CyLtgEuE/88dpkeWgNk5qKVsJE9iSfly3nvHapdRiIS2wnQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-typeof-symbol@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.7.4.tgz#3174626214f2d6de322882e498a38e8371b2140e" + integrity sha512-KQPUQ/7mqe2m0B8VecdyaW5XcQYaePyl9R7IsKd+irzj6jvbhoGnRE+M0aNkyAzI07VfUQ9266L5xMARitV3wg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-unicode-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz#a3c0f65b117c4c81c5b6484f2a5e7b95346b83ae" + integrity sha512-N77UUIV+WCvE+5yHw+oks3m18/umd7y392Zv7mYTpFqHtkpcc+QUz+gLJNTWVlWROIWeLqY0f3OjZxV5TcXnRw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/preset-env@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.7.4.tgz#ccaf309ae8d1ee2409c85a4e2b5e280ceee830f8" + integrity sha512-Dg+ciGJjwvC1NIe/DGblMbcGq1HOtKbw8RLl4nIjlfcILKEOkWT/vRqPpumswABEBVudii6dnVwrBtzD7ibm4g== + dependencies: + "@babel/helper-module-imports" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-async-generator-functions" "^7.7.4" + "@babel/plugin-proposal-dynamic-import" "^7.7.4" + "@babel/plugin-proposal-json-strings" "^7.7.4" + "@babel/plugin-proposal-object-rest-spread" "^7.7.4" + "@babel/plugin-proposal-optional-catch-binding" "^7.7.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.7.4" + "@babel/plugin-syntax-async-generators" "^7.7.4" + "@babel/plugin-syntax-dynamic-import" "^7.7.4" + "@babel/plugin-syntax-json-strings" "^7.7.4" + "@babel/plugin-syntax-object-rest-spread" "^7.7.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" + "@babel/plugin-syntax-top-level-await" "^7.7.4" + "@babel/plugin-transform-arrow-functions" "^7.7.4" + "@babel/plugin-transform-async-to-generator" "^7.7.4" + "@babel/plugin-transform-block-scoped-functions" "^7.7.4" + "@babel/plugin-transform-block-scoping" "^7.7.4" + "@babel/plugin-transform-classes" "^7.7.4" + "@babel/plugin-transform-computed-properties" "^7.7.4" + "@babel/plugin-transform-destructuring" "^7.7.4" + "@babel/plugin-transform-dotall-regex" "^7.7.4" + "@babel/plugin-transform-duplicate-keys" "^7.7.4" + "@babel/plugin-transform-exponentiation-operator" "^7.7.4" + "@babel/plugin-transform-for-of" "^7.7.4" + "@babel/plugin-transform-function-name" "^7.7.4" + "@babel/plugin-transform-literals" "^7.7.4" + "@babel/plugin-transform-member-expression-literals" "^7.7.4" + "@babel/plugin-transform-modules-amd" "^7.7.4" + "@babel/plugin-transform-modules-commonjs" "^7.7.4" + "@babel/plugin-transform-modules-systemjs" "^7.7.4" + "@babel/plugin-transform-modules-umd" "^7.7.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.7.4" + "@babel/plugin-transform-new-target" "^7.7.4" + "@babel/plugin-transform-object-super" "^7.7.4" + "@babel/plugin-transform-parameters" "^7.7.4" + "@babel/plugin-transform-property-literals" "^7.7.4" + "@babel/plugin-transform-regenerator" "^7.7.4" + "@babel/plugin-transform-reserved-words" "^7.7.4" + "@babel/plugin-transform-shorthand-properties" "^7.7.4" + "@babel/plugin-transform-spread" "^7.7.4" + "@babel/plugin-transform-sticky-regex" "^7.7.4" + "@babel/plugin-transform-template-literals" "^7.7.4" + "@babel/plugin-transform-typeof-symbol" "^7.7.4" + "@babel/plugin-transform-unicode-regex" "^7.7.4" + "@babel/types" "^7.7.4" + browserslist "^4.6.0" + core-js-compat "^3.1.1" + invariant "^2.2.2" + js-levenshtein "^1.1.3" + semver "^5.5.0" + +"@babel/template@^7.4.0", "@babel/template@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.4.tgz#428a7d9eecffe27deac0a98e23bf8e3675d2a77b" + integrity sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.4.tgz#9c1e7c60fb679fe4fcfaa42500833333c2058558" + integrity sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.7.4" + "@babel/helper-function-name" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" + "@babel/parser" "^7.7.4" + "@babel/types" "^7.7.4" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + +"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193" + integrity sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA== + dependencies: + esutils "^2.0.2" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + +"@cnakazawa/watch@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" + integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA== + dependencies: + exec-sh "^0.3.2" + minimist "^1.2.0" + +"@jest/console@^24.7.1", "@jest/console@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" + integrity sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ== + dependencies: + "@jest/source-map" "^24.9.0" + chalk "^2.0.1" + slash "^2.0.0" + +"@jest/core@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.9.0.tgz#2ceccd0b93181f9c4850e74f2a9ad43d351369c4" + integrity sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A== + dependencies: + "@jest/console" "^24.7.1" + "@jest/reporters" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + ansi-escapes "^3.0.0" + chalk "^2.0.1" + exit "^0.1.2" + graceful-fs "^4.1.15" + jest-changed-files "^24.9.0" + jest-config "^24.9.0" + jest-haste-map "^24.9.0" + jest-message-util "^24.9.0" + jest-regex-util "^24.3.0" + jest-resolve "^24.9.0" + jest-resolve-dependencies "^24.9.0" + jest-runner "^24.9.0" + jest-runtime "^24.9.0" + jest-snapshot "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" + jest-watcher "^24.9.0" + micromatch "^3.1.10" + p-each-series "^1.0.0" + realpath-native "^1.1.0" + rimraf "^2.5.4" + slash "^2.0.0" + strip-ansi "^5.0.0" + +"@jest/environment@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.9.0.tgz#21e3afa2d65c0586cbd6cbefe208bafade44ab18" + integrity sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ== + dependencies: + "@jest/fake-timers" "^24.9.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + jest-mock "^24.9.0" + +"@jest/fake-timers@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93" + integrity sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A== + dependencies: + "@jest/types" "^24.9.0" + jest-message-util "^24.9.0" + jest-mock "^24.9.0" + +"@jest/reporters@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.9.0.tgz#86660eff8e2b9661d042a8e98a028b8d631a5b43" + integrity sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw== + dependencies: + "@jest/environment" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.2" + istanbul-lib-coverage "^2.0.2" + istanbul-lib-instrument "^3.0.1" + istanbul-lib-report "^2.0.4" + istanbul-lib-source-maps "^3.0.1" + istanbul-reports "^2.2.6" + jest-haste-map "^24.9.0" + jest-resolve "^24.9.0" + jest-runtime "^24.9.0" + jest-util "^24.9.0" + jest-worker "^24.6.0" + node-notifier "^5.4.2" + slash "^2.0.0" + source-map "^0.6.0" + string-length "^2.0.0" + +"@jest/source-map@^24.3.0", "@jest/source-map@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" + integrity sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.1.15" + source-map "^0.6.0" + +"@jest/test-result@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca" + integrity sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA== + dependencies: + "@jest/console" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/istanbul-lib-coverage" "^2.0.0" + +"@jest/test-sequencer@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz#f8f334f35b625a4f2f355f2fe7e6036dad2e6b31" + integrity sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A== + dependencies: + "@jest/test-result" "^24.9.0" + jest-haste-map "^24.9.0" + jest-runner "^24.9.0" + jest-runtime "^24.9.0" + +"@jest/transform@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.9.0.tgz#4ae2768b296553fadab09e9ec119543c90b16c56" + integrity sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^24.9.0" + babel-plugin-istanbul "^5.1.0" + chalk "^2.0.1" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.1.15" + jest-haste-map "^24.9.0" + jest-regex-util "^24.9.0" + jest-util "^24.9.0" + micromatch "^3.1.10" + pirates "^4.0.1" + realpath-native "^1.1.0" + slash "^2.0.0" + source-map "^0.6.1" + write-file-atomic "2.4.1" + +"@jest/types@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" + integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^13.0.0" + +"@types/archy@^0.0.31": + version "0.0.31" + resolved "https://registry.yarnpkg.com/@types/archy/-/archy-0.0.31.tgz#01650a4641e7e1d11dbd64eda42eec9a2f829c7f" + integrity sha512-v+dxizsFVyXgD3EpFuqT9YjdEjbJmPxNf1QIX9ohZOhxh1ZF2yhqv3vYaeum9lg3VghhxS5S0a6yldN9J9lPEQ== + +"@types/babel__core@^7.1.0": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.3.tgz#e441ea7df63cd080dfcd02ab199e6d16a735fc30" + integrity sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.0.tgz#f1ec1c104d1bb463556ecb724018ab788d0c172a" + integrity sha512-c1mZUu4up5cp9KROs/QAw0gTeHrw/x7m52LcnvMxxOZ03DmLwPV0MlGmlgzV3cnSdjhJOZsj7E7FHeioai+egw== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" + integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.0.8" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.8.tgz#479a4ee3e291a403a1096106013ec22cf9b64012" + integrity sha512-yGeB2dHEdvxjP0y4UbRtQaSkXJ9649fYCmIdRoul5kfAoGCwxuCbMhag0k3RPfnuh9kPGm8x89btcfDEXdVWGw== + dependencies: + "@babel/types" "^7.3.0" + +"@types/debug@^4.1.5": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.5.tgz#b14efa8852b7768d898906613c23f688713e02cd" + integrity sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ== + +"@types/events@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" + integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== + +"@types/fs-extra@^8.0.0": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-8.0.1.tgz#a2378d6e7e8afea1564e44aafa2e207dadf77686" + integrity sha512-J00cVDALmi/hJOYsunyT52Hva5TnJeKP5yd1r+mH/ZU0mbYZflR0Z5kw5kITtKTRYMhm1JMClOFYdHnQszEvqw== + dependencies: + "@types/node" "*" + +"@types/glob@^7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" + integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== + dependencies: + "@types/events" "*" + "@types/minimatch" "*" + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" + integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== + +"@types/istanbul-lib-report@*": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#e5471e7fa33c61358dd38426189c037a58433b8c" + integrity sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a" + integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA== + dependencies: + "@types/istanbul-lib-coverage" "*" + "@types/istanbul-lib-report" "*" + +"@types/jest@^24.0.23": + version "24.0.23" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.23.tgz#046f8e2ade026fe831623e361a36b6fb9a4463e4" + integrity sha512-L7MBvwfNpe7yVPTXLn32df/EK+AMBFAFvZrRuArGs7npEWnlziUXK+5GMIUTI4NIuwok3XibsjXCs5HxviYXjg== + dependencies: + jest-diff "^24.3.0" + +"@types/lodash.debounce@^4.0.6": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@types/lodash.debounce/-/lodash.debounce-4.0.6.tgz#c5a2326cd3efc46566c47e4c0aa248dc0ee57d60" + integrity sha512-4WTmnnhCfDvvuLMaF3KV4Qfki93KebocUF45msxhYyjMttZDQYzHkO639ohhk8+oco2cluAFL3t5+Jn4mleylQ== + dependencies: + "@types/lodash" "*" + +"@types/lodash@*": + version "4.14.149" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.149.tgz#1342d63d948c6062838fbf961012f74d4e638440" + integrity sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ== + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + +"@types/node@*": + version "12.12.14" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.14.tgz#1c1d6e3c75dba466e0326948d56e8bd72a1903d2" + integrity sha512-u/SJDyXwuihpwjXy7hOOghagLEV1KdAST6syfnOk6QZAMzZuWZqXy5aYYZbh8Jdpd4escVFP0MvftHNDb9pruA== + +"@types/sass@^1.16.0": + version "1.16.0" + resolved "https://registry.yarnpkg.com/@types/sass/-/sass-1.16.0.tgz#b41ac1c17fa68ffb57d43e2360486ef526b3d57d" + integrity sha512-2XZovu4NwcqmtZtsBR5XYLw18T8cBCnU2USFHTnYLLHz9fkhnoEMoDsqShJIOFsFhn5aJHjweiUUdTrDGujegA== + dependencies: + "@types/node" "*" + +"@types/stack-utils@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" + integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== + +"@types/yargs-parser@*": + version "13.1.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228" + integrity sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg== + +"@types/yargs@^13.0.0": + version "13.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.3.tgz#76482af3981d4412d65371a318f992d33464a380" + integrity sha512-K8/LfZq2duW33XW/tFwEAfnZlqIfVsoyRB3kfXdPXYhl0nfM8mmh7GS0jg7WrX2Dgq/0Ha/pR1PaR+BvmWwjiQ== + dependencies: + "@types/yargs-parser" "*" + +abab@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" + integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +acorn-globals@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" + integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== + dependencies: + acorn "^6.0.1" + acorn-walk "^6.0.1" + +acorn-walk@^6.0.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" + integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== + +acorn@^5.5.3: + version "5.7.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" + integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== + +acorn@^6.0.1: + version "6.4.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.0.tgz#b659d2ffbafa24baf5db1cdbb2c94a983ecd2784" + integrity sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw== + +ajv@^6.5.5: + version "6.10.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" + integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-escapes@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.0.0, ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +archy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +atob@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.0.tgz#24390e6ad61386b0a747265754d2a17219de862c" + integrity sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A== + +babel-jest@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.9.0.tgz#3fc327cb8467b89d14d7bc70e315104a783ccd54" + integrity sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw== + dependencies: + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/babel__core" "^7.1.0" + babel-plugin-istanbul "^5.1.0" + babel-preset-jest "^24.9.0" + chalk "^2.4.2" + slash "^2.0.0" + +babel-plugin-dynamic-import-node@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" + integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-istanbul@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854" + integrity sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + find-up "^3.0.0" + istanbul-lib-instrument "^3.3.0" + test-exclude "^5.2.3" + +babel-plugin-jest-hoist@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz#4f837091eb407e01447c8843cbec546d0002d756" + integrity sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw== + dependencies: + "@types/babel__traverse" "^7.0.6" + +babel-preset-jest@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz#192b521e2217fb1d1f67cf73f70c336650ad3cdc" + integrity sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg== + dependencies: + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + babel-plugin-jest-hoist "^24.9.0" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +binary-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" + integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browser-process-hrtime@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" + integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw== + +browser-resolve@^1.11.3: + version "1.11.3" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" + integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== + dependencies: + resolve "1.1.7" + +browserslist@^4.6.0, browserslist@^4.8.0: + version "4.8.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.2.tgz#b45720ad5fbc8713b7253c20766f701c9a694289" + integrity sha512-+M4oeaTplPm/f1pXDw84YohEv7B1i/2Aisei8s4s6k3QsoSHa7i5sz8u/cGQkkatCPxMASKxPualR4wwYgVboA== + dependencies: + caniuse-lite "^1.0.30001015" + electron-to-chromium "^1.3.322" + node-releases "^1.1.42" + +bser@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +caniuse-lite@^1.0.30001015: + version "1.0.30001015" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001015.tgz#15a7ddf66aba786a71d99626bc8f2b91c6f0f5f0" + integrity sha512-/xL2AbW/XWHNu1gnIrO8UitBGoFthcsDgU9VLK1/dpsoxbaD5LscHozKze05R6WLsBvLhqv78dAPozMFQBYLbQ== + +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + dependencies: + rsvp "^4.8.4" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +"chokidar@>=2.0.0 <4.0.0", chokidar@^3.0.2: + version "3.3.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" + integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.2.0" + optionalDependencies: + fsevents "~2.1.1" + +chownr@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" + integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" + integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== + +commander@~2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +convert-source-map@^1.4.0, convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-js-compat@^3.1.1: + version "3.4.7" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.4.7.tgz#39f8080b1d92a524d6d90505c42b9c5c1eb90611" + integrity sha512-57+mgz/P/xsGdjwQYkwtBZR3LuISaxD1dEwVDtbk8xJMqAmwqaxLOvnNT7kdJ7jYE/NjNptyzXi+IQFMi/2fCw== + dependencies: + browserslist "^4.8.0" + semver "^6.3.0" + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1" + integrity sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA== + dependencies: + cssom "0.3.x" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +data-urls@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" + integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== + dependencies: + abab "^2.0.0" + whatwg-mimetype "^2.2.0" + whatwg-url "^7.0.0" + +debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + +detect-newline@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= + +diff-sequences@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" + integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== + +domexception@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== + dependencies: + webidl-conversions "^4.0.2" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +electron-to-chromium@^1.3.322: + version "1.3.322" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz#a6f7e1c79025c2b05838e8e344f6e89eb83213a8" + integrity sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.5.1: + version "1.16.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.16.3.tgz#52490d978f96ff9f89ec15b5cf244304a5bca161" + integrity sha512-WtY7Fx5LiOnSYgF5eg/1T+GONaGmpvpPdCpSnYij+U2gDTL0UPfWrhDw7b2IYb+9NQJsYpCA0wOQvZfsd6YwRw== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.1.4" + is-regex "^1.0.4" + object-inspect "^1.7.0" + object-keys "^1.1.1" + string.prototype.trimleft "^2.1.0" + string.prototype.trimright "^2.1.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escodegen@^1.9.1: + version "1.12.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.0.tgz#f763daf840af172bb3a2b6dd7219c0e17f7ff541" + integrity sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg== + dependencies: + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +esprima@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= + +estraverse@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +exec-sh@^0.3.2: + version "0.3.4" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" + integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expect@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-24.9.0.tgz#b75165b4817074fa4a157794f46fe9f1ba15b6ca" + integrity sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q== + dependencies: + "@jest/types" "^24.9.0" + ansi-styles "^3.2.0" + jest-get-type "^24.9.0" + jest-matcher-utils "^24.9.0" + jest-message-util "^24.9.0" + jest-regex-util "^24.9.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fb-watchman@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + integrity sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg= + dependencies: + bser "^2.0.0" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.9" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" + integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== + dependencies: + nan "^2.12.1" + node-pre-gyp "^0.12.0" + +fsevents@~2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" + integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@~5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" + integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw== + dependencies: + is-glob "^4.0.1" + +glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globs@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/globs/-/globs-0.1.4.tgz#1d13639f6174e4ae73a7f936da7d9a079f657c1c" + integrity sha512-D23dWbOq48vlOraoSigbcQV4tWrnhwk+E/Um2cMuDS3/5dwGmdFeA7L/vAvDhLFlQOTDqHcXh35m/71g2A2WzQ== + dependencies: + glob "^7.1.1" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= + +handlebars@^4.1.2: + version "4.5.3" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482" + integrity sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA== + dependencies: + neo-async "^2.6.0" + optimist "^0.6.1" + source-map "^0.6.1" + optionalDependencies: + uglify-js "^3.1.4" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.0: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-symbols@^1.0.0, has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.1, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hosted-git-info@^2.1.4: + version "2.8.5" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c" + integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg== + +html-encoding-sniffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== + dependencies: + whatwg-encoding "^1.0.1" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +iconv-lite@0.4.24, iconv-lite@^0.4.4: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore-walk@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== + dependencies: + minimatch "^3.0.4" + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +invariant@^2.2.2, invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-callable@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= + dependencies: + has "^1.0.1" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" + integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== + +istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" + integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA== + dependencies: + "@babel/generator" "^7.4.0" + "@babel/parser" "^7.4.3" + "@babel/template" "^7.4.0" + "@babel/traverse" "^7.4.3" + "@babel/types" "^7.4.0" + istanbul-lib-coverage "^2.0.5" + semver "^6.0.0" + +istanbul-lib-report@^2.0.4: + version "2.0.8" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" + integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ== + dependencies: + istanbul-lib-coverage "^2.0.5" + make-dir "^2.1.0" + supports-color "^6.1.0" + +istanbul-lib-source-maps@^3.0.1: + version "3.0.6" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" + integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^2.0.5" + make-dir "^2.1.0" + rimraf "^2.6.3" + source-map "^0.6.1" + +istanbul-reports@^2.2.6: + version "2.2.6" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.6.tgz#7b4f2660d82b29303a8fe6091f8ca4bf058da1af" + integrity sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA== + dependencies: + handlebars "^4.1.2" + +jest-changed-files@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039" + integrity sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg== + dependencies: + "@jest/types" "^24.9.0" + execa "^1.0.0" + throat "^4.0.0" + +jest-cli@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.9.0.tgz#ad2de62d07472d419c6abc301fc432b98b10d2af" + integrity sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg== + dependencies: + "@jest/core" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + chalk "^2.0.1" + exit "^0.1.2" + import-local "^2.0.0" + is-ci "^2.0.0" + jest-config "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" + prompts "^2.0.1" + realpath-native "^1.1.0" + yargs "^13.3.0" + +jest-config@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.9.0.tgz#fb1bbc60c73a46af03590719efa4825e6e4dd1b5" + integrity sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ== + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^24.9.0" + "@jest/types" "^24.9.0" + babel-jest "^24.9.0" + chalk "^2.0.1" + glob "^7.1.1" + jest-environment-jsdom "^24.9.0" + jest-environment-node "^24.9.0" + jest-get-type "^24.9.0" + jest-jasmine2 "^24.9.0" + jest-regex-util "^24.3.0" + jest-resolve "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" + micromatch "^3.1.10" + pretty-format "^24.9.0" + realpath-native "^1.1.0" + +jest-diff@^24.3.0, jest-diff@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" + integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ== + dependencies: + chalk "^2.0.1" + diff-sequences "^24.9.0" + jest-get-type "^24.9.0" + pretty-format "^24.9.0" + +jest-docblock@^24.3.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.9.0.tgz#7970201802ba560e1c4092cc25cbedf5af5a8ce2" + integrity sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA== + dependencies: + detect-newline "^2.1.0" + +jest-each@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.9.0.tgz#eb2da602e2a610898dbc5f1f6df3ba86b55f8b05" + integrity sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog== + dependencies: + "@jest/types" "^24.9.0" + chalk "^2.0.1" + jest-get-type "^24.9.0" + jest-util "^24.9.0" + pretty-format "^24.9.0" + +jest-environment-jsdom@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz#4b0806c7fc94f95edb369a69cc2778eec2b7375b" + integrity sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA== + dependencies: + "@jest/environment" "^24.9.0" + "@jest/fake-timers" "^24.9.0" + "@jest/types" "^24.9.0" + jest-mock "^24.9.0" + jest-util "^24.9.0" + jsdom "^11.5.1" + +jest-environment-node@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.9.0.tgz#333d2d2796f9687f2aeebf0742b519f33c1cbfd3" + integrity sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA== + dependencies: + "@jest/environment" "^24.9.0" + "@jest/fake-timers" "^24.9.0" + "@jest/types" "^24.9.0" + jest-mock "^24.9.0" + jest-util "^24.9.0" + +jest-get-type@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" + integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== + +jest-haste-map@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" + integrity sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ== + dependencies: + "@jest/types" "^24.9.0" + anymatch "^2.0.0" + fb-watchman "^2.0.0" + graceful-fs "^4.1.15" + invariant "^2.2.4" + jest-serializer "^24.9.0" + jest-util "^24.9.0" + jest-worker "^24.9.0" + micromatch "^3.1.10" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^1.2.7" + +jest-jasmine2@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz#1f7b1bd3242c1774e62acabb3646d96afc3be6a0" + integrity sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + chalk "^2.0.1" + co "^4.6.0" + expect "^24.9.0" + is-generator-fn "^2.0.0" + jest-each "^24.9.0" + jest-matcher-utils "^24.9.0" + jest-message-util "^24.9.0" + jest-runtime "^24.9.0" + jest-snapshot "^24.9.0" + jest-util "^24.9.0" + pretty-format "^24.9.0" + throat "^4.0.0" + +jest-leak-detector@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz#b665dea7c77100c5c4f7dfcb153b65cf07dcf96a" + integrity sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA== + dependencies: + jest-get-type "^24.9.0" + pretty-format "^24.9.0" + +jest-matcher-utils@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073" + integrity sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA== + dependencies: + chalk "^2.0.1" + jest-diff "^24.9.0" + jest-get-type "^24.9.0" + pretty-format "^24.9.0" + +jest-message-util@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3" + integrity sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/stack-utils" "^1.0.1" + chalk "^2.0.1" + micromatch "^3.1.10" + slash "^2.0.0" + stack-utils "^1.0.1" + +jest-mock@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6" + integrity sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w== + dependencies: + "@jest/types" "^24.9.0" + +jest-pnp-resolver@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a" + integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ== + +jest-regex-util@^24.3.0, jest-regex-util@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636" + integrity sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA== + +jest-resolve-dependencies@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz#ad055198959c4cfba8a4f066c673a3f0786507ab" + integrity sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g== + dependencies: + "@jest/types" "^24.9.0" + jest-regex-util "^24.3.0" + jest-snapshot "^24.9.0" + +jest-resolve@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.9.0.tgz#dff04c7687af34c4dd7e524892d9cf77e5d17321" + integrity sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ== + dependencies: + "@jest/types" "^24.9.0" + browser-resolve "^1.11.3" + chalk "^2.0.1" + jest-pnp-resolver "^1.2.1" + realpath-native "^1.1.0" + +jest-runner@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.9.0.tgz#574fafdbd54455c2b34b4bdf4365a23857fcdf42" + integrity sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg== + dependencies: + "@jest/console" "^24.7.1" + "@jest/environment" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + chalk "^2.4.2" + exit "^0.1.2" + graceful-fs "^4.1.15" + jest-config "^24.9.0" + jest-docblock "^24.3.0" + jest-haste-map "^24.9.0" + jest-jasmine2 "^24.9.0" + jest-leak-detector "^24.9.0" + jest-message-util "^24.9.0" + jest-resolve "^24.9.0" + jest-runtime "^24.9.0" + jest-util "^24.9.0" + jest-worker "^24.6.0" + source-map-support "^0.5.6" + throat "^4.0.0" + +jest-runtime@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.9.0.tgz#9f14583af6a4f7314a6a9d9f0226e1a781c8e4ac" + integrity sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw== + dependencies: + "@jest/console" "^24.7.1" + "@jest/environment" "^24.9.0" + "@jest/source-map" "^24.3.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/yargs" "^13.0.0" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.1.15" + jest-config "^24.9.0" + jest-haste-map "^24.9.0" + jest-message-util "^24.9.0" + jest-mock "^24.9.0" + jest-regex-util "^24.3.0" + jest-resolve "^24.9.0" + jest-snapshot "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" + realpath-native "^1.1.0" + slash "^2.0.0" + strip-bom "^3.0.0" + yargs "^13.3.0" + +jest-serializer@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73" + integrity sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ== + +jest-snapshot@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.9.0.tgz#ec8e9ca4f2ec0c5c87ae8f925cf97497b0e951ba" + integrity sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew== + dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^24.9.0" + chalk "^2.0.1" + expect "^24.9.0" + jest-diff "^24.9.0" + jest-get-type "^24.9.0" + jest-matcher-utils "^24.9.0" + jest-message-util "^24.9.0" + jest-resolve "^24.9.0" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + pretty-format "^24.9.0" + semver "^6.2.0" + +jest-util@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162" + integrity sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg== + dependencies: + "@jest/console" "^24.9.0" + "@jest/fake-timers" "^24.9.0" + "@jest/source-map" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + callsites "^3.0.0" + chalk "^2.0.1" + graceful-fs "^4.1.15" + is-ci "^2.0.0" + mkdirp "^0.5.1" + slash "^2.0.0" + source-map "^0.6.0" + +jest-validate@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab" + integrity sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ== + dependencies: + "@jest/types" "^24.9.0" + camelcase "^5.3.1" + chalk "^2.0.1" + jest-get-type "^24.9.0" + leven "^3.1.0" + pretty-format "^24.9.0" + +jest-watcher@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.9.0.tgz#4b56e5d1ceff005f5b88e528dc9afc8dd4ed2b3b" + integrity sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw== + dependencies: + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/yargs" "^13.0.0" + ansi-escapes "^3.0.0" + chalk "^2.0.1" + jest-util "^24.9.0" + string-length "^2.0.0" + +jest-worker@^24.6.0, jest-worker@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" + integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== + dependencies: + merge-stream "^2.0.0" + supports-color "^6.1.0" + +jest@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-24.9.0.tgz#987d290c05a08b52c56188c1002e368edb007171" + integrity sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw== + dependencies: + import-local "^2.0.0" + jest-cli "^24.9.0" + +js-levenshtein@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" + integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsdom@^11.5.1: + version "11.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" + integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw== + dependencies: + abab "^2.0.0" + acorn "^5.5.3" + acorn-globals "^4.1.0" + array-equal "^1.0.0" + cssom ">= 0.3.2 < 0.4.0" + cssstyle "^1.0.0" + data-urls "^1.0.0" + domexception "^1.0.1" + escodegen "^1.9.1" + html-encoding-sniffer "^1.0.2" + left-pad "^1.3.0" + nwsapi "^2.0.7" + parse5 "4.0.0" + pn "^1.1.0" + request "^2.87.0" + request-promise-native "^1.0.5" + sax "^1.2.4" + symbol-tree "^3.2.2" + tough-cookie "^2.3.4" + w3c-hr-time "^1.0.1" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.3" + whatwg-mimetype "^2.1.0" + whatwg-url "^6.4.1" + ws "^5.2.0" + xml-name-validator "^3.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json5@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6" + integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ== + dependencies: + minimist "^1.2.0" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +left-pad@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" + integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + +lodash@^4.17.13, lodash@^4.17.15: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + +loglevel-plugin-prefix@^0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz#2fe0e05f1a820317d98d8c123e634c1bd84ff644" + integrity sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g== + +loglevel@^1.6.3: + version "1.6.6" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.6.tgz#0ee6300cc058db6b3551fa1c4bf73b83bb771312" + integrity sha512-Sgr5lbboAUBo3eXCSPL4/KoVz3ROKquOjcctxmHIt+vol2DrqTQe3SwkKKuYhEiWB5kYa13YyopJ69deJ1irzQ== + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= + dependencies: + tmpl "1.0.x" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +mime-db@1.42.0: + version "1.42.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.42.0.tgz#3e252907b4c7adb906597b4b65636272cf9e7bac" + integrity sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ== + +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.25" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.25.tgz#39772d46621f93e2a80a856c53b86a62156a6437" + integrity sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg== + dependencies: + mime-db "1.42.0" + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +minimist@^1.1.1, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= + +minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nan@^2.12.1: + version "2.14.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" + integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +needle@^2.2.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" + integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + +neo-async@^2.6.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + +node-notifier@^5.4.2: + version "5.4.3" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50" + integrity sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q== + dependencies: + growly "^1.3.0" + is-wsl "^1.1.0" + semver "^5.5.0" + shellwords "^0.1.1" + which "^1.3.0" + +node-pre-gyp@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" + integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + +node-releases@^1.1.42: + version "1.1.42" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.42.tgz#a999f6a62f8746981f6da90627a8d2fc090bbad7" + integrity sha512-OQ/ESmUqGawI2PRX+XIRao44qWYBBfN54ImQYdWVTQqUckuejOg76ysSqDBK8NG3zwySRVnX36JwDQ6x+9GxzA== + dependencies: + semver "^6.3.0" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-bundled@^1.0.1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" + integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== + +npm-packlist@^1.1.6: + version "1.4.6" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.6.tgz#53ba3ed11f8523079f1457376dd379ee4ea42ff4" + integrity sha512-u65uQdb+qwtGvEJh/DgQgW1Xg7sqeNbmxYyrvlNznaVTjV3E5P6F/EFjM+BVHXl7JJlsdG8A64M0XI8FI/IOlg== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +nwsapi@^2.0.7: + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.getownpropertydescriptors@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-tmpdir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-each-series@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" + integrity sha1-kw89Et0fUOdDRFeiLNbwSsatf3E= + dependencies: + p-reduce "^1.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" + integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== + dependencies: + p-try "^2.0.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-reduce@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse5@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" + integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picomatch@^2.0.4: + version "2.1.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.1.1.tgz#ecdfbea7704adb5fe6fb47f9866c4c0e15e905c5" + integrity sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pirates@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== + dependencies: + node-modules-regexp "^1.0.0" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pn@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +pretty-bytes@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.3.0.tgz#f2849e27db79fb4d6cfe24764fc4134f165989f2" + integrity sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg== + +pretty-format@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" + integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA== + dependencies: + "@jest/types" "^24.9.0" + ansi-regex "^4.0.0" + ansi-styles "^3.2.0" + react-is "^16.8.4" + +private@^0.1.6: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +prompts@^2.0.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.0.tgz#a444e968fa4cc7e86689a74050685ac8006c4cc4" + integrity sha512-NfbbPPg/74fT7wk2XYQ7hAIp9zJyZp5Fu19iRbORqqy1BhtrkZ0fPafBU+7bmn8ie69DpT0R6QpJIN2oisYjJg== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.3" + +psl@^1.1.24, psl@^1.1.28: + version "1.6.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.6.0.tgz#60557582ee23b6c43719d9890fb4170ecd91e110" + integrity sha512-SYKKmVel98NCOYXpkwUqZqh0ahZeeKfmisiLIcEZdsb+WbLv02g/dI5BUmZnIyOe7RzZtLax81nnb2HbvC2tzA== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-is@^16.8.4: + version "16.12.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c" + integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q== + +read-pkg-up@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" + integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== + dependencies: + find-up "^3.0.0" + read-pkg "^3.0.0" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +readable-stream@^2.0.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readdirp@~3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" + integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== + dependencies: + picomatch "^2.0.4" + +realpath-native@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" + integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA== + dependencies: + util.promisify "^1.0.0" + +regenerate-unicode-properties@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" + integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== + +regenerator-transform@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" + integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ== + dependencies: + private "^0.1.6" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexpu-core@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" + integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.1.0" + regjsgen "^0.5.0" + regjsparser "^0.6.0" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.1.0" + +regjsgen@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" + integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== + +regjsparser@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" + integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== + dependencies: + jsesc "~0.5.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +request-promise-core@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" + integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ== + dependencies: + lodash "^4.17.15" + +request-promise-native@^1.0.5: + version "1.0.8" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36" + integrity sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ== + dependencies: + request-promise-core "1.1.3" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + +request@^2.87.0: + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.0" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.4.3" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= + +resolve@^1.10.0, resolve@^1.3.2: + version "1.13.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.13.1.tgz#be0aa4c06acd53083505abb35f4d66932ab35d16" + integrity sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w== + dependencies: + path-parse "^1.0.6" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rsvp@^4.8.4: + version "4.8.5" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + +safe-buffer@^5.0.1, safe-buffer@^5.1.2: + version "5.2.0" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sane@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== + dependencies: + "@cnakazawa/watch" "^1.0.3" + anymatch "^2.0.0" + capture-exit "^2.0.0" + exec-sh "^0.3.2" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + +sass@^1.22.9: + version "1.23.7" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.23.7.tgz#090254e006af1219d442f1bff31e139d5e085dff" + integrity sha512-cYgc0fanwIpi0rXisGxl+/wadVQ/HX3RhpdRcjLdj2o2ye/sxUTpAxIhbmJy3PLQgRFbf6Pn8Jsrta2vdXcoOQ== + dependencies: + chokidar ">=2.0.0 <4.0.0" + +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +scss-bundle@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/scss-bundle/-/scss-bundle-3.0.2.tgz#c6fd4d8738a938584070210beb9bd5eb69d87bbb" + integrity sha512-6OUFD+bD1ko/nrcXEGQ58NY/pTAQyj3LBfUyCpDeplcs8m8U7CWAfSuK49BrV5PEUGRXEh3oiETxqeG1vJSvrA== + dependencies: + "@types/archy" "^0.0.31" + "@types/debug" "^4.1.5" + "@types/fs-extra" "^8.0.0" + "@types/glob" "^7.1.1" + "@types/lodash.debounce" "^4.0.6" + "@types/sass" "^1.16.0" + archy "^1.0.0" + chalk "^2.4.2" + chokidar "^3.0.2" + commander "^3.0.0" + fs-extra "^8.1.0" + globs "^0.1.4" + lodash.debounce "^4.0.8" + loglevel "^1.6.3" + loglevel-plugin-prefix "^0.8.4" + pretty-bytes "^5.3.0" + sass "^1.22.9" + tslib "^1.10.0" + +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +sisteransi@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.4.tgz#386713f1ef688c7c0304dc4c0632898941cad2e3" + integrity sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig== + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +source-map-resolve@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== + dependencies: + atob "^2.1.1" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.5.6: + version "0.5.16" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" + integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spdx-correct@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +stack-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" + integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + +string-length@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" + integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0= + dependencies: + astral-regex "^1.0.0" + strip-ansi "^4.0.0" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2": + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string.prototype.trimleft@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" + integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string.prototype.trimright@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" + integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +symbol-tree@^3.2.2: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +tar@^4: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + +test-exclude@^5.2.3: + version "5.2.3" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" + integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g== + dependencies: + glob "^7.1.3" + minimatch "^3.0.4" + read-pkg-up "^4.0.0" + require-main-filename "^2.0.0" + +throat@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" + integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= + +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +tough-cookie@^2.3.3, tough-cookie@^2.3.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== + dependencies: + psl "^1.1.24" + punycode "^1.4.1" + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= + dependencies: + punycode "^2.1.0" + +tslib@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" + integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +typescript@^3.7.3: + version "3.7.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.3.tgz#b36840668a16458a7025b9eabfad11b66ab85c69" + integrity sha512-Mcr/Qk7hXqFBXMN7p7Lusj1ktCBydylfQM/FZCk5glCNQJrCUKPkMHdo9R0MTFWsC/4kPFvDS0fDPvukfCkFsw== + +uglify-js@^3.1.4: + version "3.7.1" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.1.tgz#35c7de17971a4aa7689cd2eae0a5b39bb838c0c5" + integrity sha512-pnOF7jY82wdIhATVn87uUY/FHU+MDUdPLkmGFvGoclQmeu229eTkbG5gjGGBi3R7UuYYSEeYXY/TTY5j2aym2g== + dependencies: + commander "~2.20.3" + source-map "~0.6.1" + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" + integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" + integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util.promisify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + +uuid@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" + integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +w3c-hr-time@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" + integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU= + dependencies: + browser-process-hrtime "^0.1.2" + +walker@^1.0.7, walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= + dependencies: + makeerror "1.0.x" + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^6.4.1: + version "6.5.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" + integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.9, which@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529" + integrity sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +ws@^5.2.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" + integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== + dependencies: + async-limiter "~1.0.0" + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^3.0.0, yallist@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yargs-parser@^13.1.1: + version "13.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" + integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^13.3.0: + version "13.3.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" + integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.1" diff --git a/packages/taro-swan/package.json b/packages/taro-swan/package.json index e52fe84f9d05..21b4acbc1de2 100644 --- a/packages/taro-swan/package.json +++ b/packages/taro-swan/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/taro-swan", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "Taro swan framework", "main": "index.js", "files": [ @@ -24,8 +24,8 @@ "author": "O2Team", "license": "MIT", "dependencies": { - "@tarojs/taro": "1.3.34", - "@tarojs/utils": "1.3.34", + "@tarojs/taro": "2.0.0-beta.13", + "@tarojs/utils": "2.0.0-beta.13", "lodash": "^4.17.10", "prop-types": "^15.6.1" } diff --git a/packages/taro-transformer-wx/__tests__/base.spec.ts b/packages/taro-transformer-wx/__tests__/base.spec.ts index 943656f44fb9..158dd289712b 100644 --- a/packages/taro-transformer-wx/__tests__/base.spec.ts +++ b/packages/taro-transformer-wx/__tests__/base.spec.ts @@ -116,7 +116,7 @@ describe('基本功能', () => { expect(code.includes(INTERNAL_SAFE_GET)).toBeTruthy() }) - test('isApp 为 true 时只返回 ast', () => { + test.skip('isApp 为 true 时只返回 ast', () => { const { code, ast, template } = transform({ ...baseOptions, isApp: true, diff --git a/packages/taro-transformer-wx/index.js b/packages/taro-transformer-wx/index.js index 67f35bcdaad9..d1c32f064a94 100644 --- a/packages/taro-transformer-wx/index.js +++ b/packages/taro-transformer-wx/index.js @@ -1,2 +1,3 @@ var transform = require('./lib/src').default -module.exports = module.exports.default = transform +module.exports = transform +module.exports.default = transform diff --git a/packages/taro-transformer-wx/package.json b/packages/taro-transformer-wx/package.json index 255999e07b07..e11fec2eaeac 100644 --- a/packages/taro-transformer-wx/package.json +++ b/packages/taro-transformer-wx/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/transformer-wx", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "Transfrom Nerv Component to Wechat mini program.", "repository": { "type": "git", @@ -62,14 +62,14 @@ "babel-types": "^6.26.0", "eslint": "5.16.0", "eslint-plugin-react": "7.10.0", - "eslint-plugin-taro": "1.3.34", + "eslint-plugin-taro": "2.0.0-beta.13", "html": "^1.0.0", "lodash": "^4.17.5", "prettier": "^1.14.2", "typescript": "^3.2.2" }, "devDependencies": { - "@tarojs/taro": "1.3.34", + "@tarojs/taro": "2.0.0-beta.13", "@types/babel-core": "^6.25.5", "@types/babel-generator": "^6.25.1", "@types/babel-template": "^6.25.0", diff --git a/packages/taro-transformer-wx/src/index.ts b/packages/taro-transformer-wx/src/index.ts index dc9c4e93eedb..b0d10f199ea6 100644 --- a/packages/taro-transformer-wx/src/index.ts +++ b/packages/taro-transformer-wx/src/index.ts @@ -185,23 +185,29 @@ function findThirdPartyComponent (properties: (t.ObjectMethod | t.ObjectProperty } } } +interface Result { + template?: string + componentProperies?: string[] +} -export interface Result { - template: string +export interface TransformResult extends Result { + ast: t.File + code?: string + imageSrcs?: string + compressedTemplate?: string, + sourcemap?: object components: { name: string, path: string, type: string - }[], - componentProperies: string[] + }[] } -interface TransformResult extends Result { - code: string, - ast: t.File +export interface TransformOptions extends Options { + // } -export default function transform (options: Options): TransformResult { +export default function transform (options: TransformOptions): TransformResult { if (options.adapter) { setAdapter(options.adapter) if (Adapter.type === Adapters.quickapp) { @@ -220,6 +226,13 @@ export default function transform (options: Options): TransformResult { setIsTaroReady('priTaroCompReady') setCompId('priCompid') } + const defaultResult: TransformResult = { + ast: {} as any, + code: '', + imageSrcs: '', + compressedTemplate: '', + components: [] + } THIRD_PARTY_COMPONENTS.clear() const code = options.isTyped ? ts.transpile(options.code, { @@ -238,6 +251,21 @@ export default function transform (options: Options): TransformResult { // 原因大概是 babylon.parse 没有生成 File 实例导致 scope 和 path 原型上都没有 `file` // 将来升级到 babel@7 可以直接用 parse 而不是 transform const ast = parse(code, buildBabelTransformOptions()).ast as t.File + // traverse(ast, { + // JSXElement (p) { + // setIsNormal(false) + // p.stop() + // }, + // ImportDeclaration (path) { + // const { source, specifiers } = path.node + // if (source.value === TARO_PACKAGE_NAME) { + // if (specifiers.some(s => s.local.name === 'Component')) { + // setIsNormal(false) + // path.stop() + // } + // } + // } + // }) if (options.isNormal) { if (options.isTyped) { const mainClassNode = ast.program.body.find(v => { @@ -247,7 +275,12 @@ export default function transform (options: Options): TransformResult { resetTSClassProperty(mainClassNode.body.body) } } - return { ast } as any + const code = generate(ast).code + return { + ...defaultResult, + ast, + code + } } // transformFromAst(ast, code) let result @@ -337,9 +370,8 @@ export default function transform (options: Options): TransformResult { code: superClass.code, isTyped: true, sourcePath: superClass.sourcePath, - outputPath: superClass.sourcePath, sourceDir: options.sourceDir - }).componentProperies + }).componentProperies! } catch (error) { // } @@ -780,7 +812,12 @@ export default function transform (options: Options): TransformResult { } if (!mainClass) { - throw new Error('未找到 Taro.Component 的类定义') + const code = generate(ast).code + return { + ...defaultResult, + ast, + code + } } if (Adapter.type === Adapters.alipay) { @@ -837,7 +874,12 @@ export default function transform (options: Options): TransformResult { renderMethod.replaceWith( t.classMethod('method', t.identifier('_createData'), [], t.blockStatement([])) ) - return { ast } as TransformResult + const code = generate(ast).code + return { + ...defaultResult, + ast, + code + } } result = new Transformer(mainClass, options.sourcePath, componentProperies, options.sourceDir!, classMethods).result result.code = generate(ast).code diff --git a/packages/taro-transformer-wx/src/options.ts b/packages/taro-transformer-wx/src/options.ts index 28f068e8dcd4..4f2a486720f5 100644 --- a/packages/taro-transformer-wx/src/options.ts +++ b/packages/taro-transformer-wx/src/options.ts @@ -7,14 +7,14 @@ import { buildVistor } from './class-method-renamer' export interface Options { isRoot?: boolean, - isApp: boolean, - outputPath: string, + isApp?: boolean, + // outputPath: string, sourcePath: string, sourceDir?: string, code: string, isTyped: boolean, isNormal?: boolean, - env?: object, + env?: Object, adapter?: Adapters, jsxAttributeNameReplace?: Object, rootProps?: object diff --git a/packages/taro-tt/package.json b/packages/taro-tt/package.json index 50f83079e018..ff1d7ac8df92 100644 --- a/packages/taro-tt/package.json +++ b/packages/taro-tt/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/taro-tt", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "Taro toutiao framework", "main": "index.js", "files": [ @@ -24,8 +24,8 @@ "author": "O2Team", "license": "MIT", "dependencies": { - "@tarojs/taro": "1.3.34", - "@tarojs/utils": "1.3.34", + "@tarojs/taro": "2.0.0-beta.13", + "@tarojs/utils": "2.0.0-beta.13", "lodash": "^4.17.10", "prop-types": "^15.6.1" } diff --git a/packages/taro-utils/package.json b/packages/taro-utils/package.json index 62bcadb58763..2de6854ab0ca 100644 --- a/packages/taro-utils/package.json +++ b/packages/taro-utils/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/utils", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "Utils for Taro", "main": "index.js", "scripts": { diff --git a/packages/taro-weapp/package.json b/packages/taro-weapp/package.json index dd866caee02f..9509f40ed483 100644 --- a/packages/taro-weapp/package.json +++ b/packages/taro-weapp/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/taro-weapp", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "Taro weapp framework", "main": "index.js", "files": [ @@ -24,8 +24,8 @@ "author": "O2Team", "license": "MIT", "dependencies": { - "@tarojs/taro": "1.3.34", - "@tarojs/utils": "1.3.34", + "@tarojs/taro": "2.0.0-beta.13", + "@tarojs/utils": "2.0.0-beta.13", "lodash": "^4.17.10", "prop-types": "^15.6.1" } diff --git a/packages/taro-webpack-runner/package.json b/packages/taro-webpack-runner/package.json index 6b578ca66512..1cb02289bbd8 100644 --- a/packages/taro-webpack-runner/package.json +++ b/packages/taro-webpack-runner/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/webpack-runner", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "webpack runner for taro", "main": "index.js", "scripts": { @@ -32,14 +32,16 @@ }, "homepage": "https://github.com/NervJS/taro#readme", "dependencies": { - "@tarojs/plugin-sass": "1.3.34", - "@tarojs/taro-h5": "1.3.34", + "@tarojs/plugin-sass": "2.0.0-beta.13", + "@tarojs/runner-utils": "2.0.0-beta.13", + "@tarojs/taro": "2.0.0-beta.13", + "@tarojs/taro-h5": "2.0.0-beta.13", "autoprefixer": "8.6.4", "babel-core": "6.26.0", "babel-loader": "7.1.4", "babel-plugin-syntax-dynamic-import": "6.18.0", "babel-plugin-transform-react-jsx": "6.24.1", - "babel-plugin-transform-taroapi": "1.3.34", + "babel-plugin-transform-taroapi": "2.0.0-beta.13", "babel-types": "6.26.0", "chalk": "2.4.2", "copy-webpack-plugin": "^5.0.3", @@ -56,13 +58,12 @@ "opn": "5.3.0", "ora": "2.1.0", "postcss-loader": "2.1.6", - "postcss-plugin-constparse": "1.3.34", - "postcss-pxtransform": "1.3.34", + "postcss-plugin-constparse": "2.0.0-beta.13", + "postcss-pxtransform": "2.0.0-beta.13", "resolve": "1.8.1", "resolve-url-loader": "2.3.0", "sass": "^1.23.1", "sass-loader": "7.1.0", - "scss-bundle": "^2.5.1", "style-loader": "0.21.0", "stylus": "0.54.5", "stylus-loader": "3.0.2", diff --git a/packages/taro-webpack-runner/src/__tests__/index-test.ts b/packages/taro-webpack-runner/src/__tests__/index-test.ts index dddf90a389c8..d1de21d74e89 100644 --- a/packages/taro-webpack-runner/src/__tests__/index-test.ts +++ b/packages/taro-webpack-runner/src/__tests__/index-test.ts @@ -46,12 +46,8 @@ describe('Regs', () => { mediaUrlLoaderOption: {}, esnextModules: [], - module: { - postcss: {} - }, - plugins: { - babel: {} - } + postcss: {}, + babel: {} }) expect(rule.sass).toMatchObject({ test: /\.(s[ac]ss)\b/, diff --git a/packages/taro-webpack-runner/src/config/build.conf.ts b/packages/taro-webpack-runner/src/config/build.conf.ts index a429cfecdfb8..6d8f520e997b 100644 --- a/packages/taro-webpack-runner/src/config/build.conf.ts +++ b/packages/taro-webpack-runner/src/config/build.conf.ts @@ -1,4 +1,4 @@ -import { BuildConfig, TaroBaseConfig } from '../util/types'; +import { BuildConfig } from '../util/types'; export default ({ sourceRoot = 'src', @@ -7,7 +7,7 @@ export default ({ staticDirectory = 'static', chunkDirectory = 'chunk', designWidth = 750 -}: BuildConfig): Partial => { +}: BuildConfig): Partial => { return { sourceRoot, outputRoot, diff --git a/packages/taro-webpack-runner/src/config/dev.conf.ts b/packages/taro-webpack-runner/src/config/dev.conf.ts index b940873b31fa..a46afa62f259 100644 --- a/packages/taro-webpack-runner/src/config/dev.conf.ts +++ b/packages/taro-webpack-runner/src/config/dev.conf.ts @@ -52,10 +52,8 @@ export default function (appPath: string, config: Partial): any { miniCssExtractPluginOption = emptyObj, esnextModules = [], - module = { - postcss: emptyObj - }, - plugins + postcss = emptyObj, + babel } = config const plugin = {} as any @@ -118,8 +116,8 @@ export default function (appPath: string, config: Partial): any { mediaUrlLoaderOption, esnextModules, - module, - plugins, + postcss, + babel, staticDirectory }), plugin, diff --git a/packages/taro-webpack-runner/src/config/postcss.conf.ts b/packages/taro-webpack-runner/src/config/postcss.conf.ts index 235894d84e6b..68d7ec3e08aa 100644 --- a/packages/taro-webpack-runner/src/config/postcss.conf.ts +++ b/packages/taro-webpack-runner/src/config/postcss.conf.ts @@ -1,11 +1,11 @@ -import * as autoprefixer from 'autoprefixer'; -import * as path from 'path'; -import * as constparse from 'postcss-plugin-constparse'; -import * as pxtransform from 'postcss-pxtransform'; -import { sync as resolveSync } from 'resolve'; -import { isNpmPackage, recursiveMerge } from '../util'; +import * as autoprefixer from 'autoprefixer' +import * as path from 'path' +import * as constparse from 'postcss-plugin-constparse' +import * as pxtransform from 'postcss-pxtransform' +import { sync as resolveSync } from 'resolve' +import { IPostcssOption, TogglableOptions } from '@tarojs/taro/types/compile' -import { PostcssOption, TogglableOptions } from '../util/types' +import { isNpmPackage, recursiveMerge } from '../util' const defaultAutoprefixerOption = { enable: true, @@ -44,7 +44,7 @@ const plugins = [] as any[] export const getPostcssPlugins = function (appPath: string, { designWidth, deviceRatio, - postcssOption = {} as PostcssOption + postcssOption = {} as IPostcssOption }) { if (designWidth) { diff --git a/packages/taro-webpack-runner/src/config/prod.conf.ts b/packages/taro-webpack-runner/src/config/prod.conf.ts index 24fe7b77bd0e..5e565d505f9b 100644 --- a/packages/taro-webpack-runner/src/config/prod.conf.ts +++ b/packages/taro-webpack-runner/src/config/prod.conf.ts @@ -51,12 +51,10 @@ export default function (appPath: string, config: Partial): any { miniCssExtractPluginOption = emptyObj, esnextModules = [], - module = { - postcss: emptyObj - }, - plugins = { - babel: {} - } + postcss, + babel, + csso, + uglify } = config const isMultiRouterMode = get(router, 'mode') === 'multi' @@ -91,25 +89,25 @@ export default function (appPath: string, config: Partial): any { plugin.definePlugin = getDefinePlugin([processEnvOption(env), defineConstants]) - const isCssoEnabled = (plugins.csso && plugins.csso.enable === false) + const isCssoEnabled = (csso && csso.enable === false) ? false : true if (isCssoEnabled) { - plugin.cssoWebpackPlugin = getCssoWebpackPlugin([plugins.csso ? plugins.csso.config : {}]) + plugin.cssoWebpackPlugin = getCssoWebpackPlugin([csso ? csso.config : {}]) } const mode = 'production' const minimizer: any[] = [] - const isUglifyEnabled = (plugins.uglify && plugins.uglify.enable === false) + const isUglifyEnabled = (uglify && uglify.enable === false) ? false : true if (isUglifyEnabled) { minimizer.push(getUglifyPlugin([ enableSourceMap, - plugins.uglify ? plugins.uglify.config : {} + uglify ? uglify.config : {} ])) } @@ -139,8 +137,8 @@ export default function (appPath: string, config: Partial): any { mediaUrlLoaderOption, esnextModules, - module, - plugins, + postcss, + babel, staticDirectory }), plugin, diff --git a/packages/taro-webpack-runner/src/index.ts b/packages/taro-webpack-runner/src/index.ts index f55c0e1f2825..3e7bd7adb82e 100644 --- a/packages/taro-webpack-runner/src/index.ts +++ b/packages/taro-webpack-runner/src/index.ts @@ -134,7 +134,7 @@ const buildDev = async (appPath: string, config: BuildConfig): Promise => { } export default async (appPath: string, config: BuildConfig): Promise => { - const newConfig: BuildConfig = await makeConfig(config); + const newConfig: BuildConfig = await makeConfig(config) if (newConfig.isWatch) { try { await buildDev(appPath, newConfig) diff --git a/packages/taro-webpack-runner/src/util/chain.ts b/packages/taro-webpack-runner/src/util/chain.ts index c0dfcd686b74..61e5a4c16251 100644 --- a/packages/taro-webpack-runner/src/util/chain.ts +++ b/packages/taro-webpack-runner/src/util/chain.ts @@ -1,5 +1,5 @@ import * as apis from '@tarojs/taro-h5/dist/taroApis' -import * as Bundler from '@tarojs/plugin-sass/bundler' +import { getSassLoaderOption } from '@tarojs/runner-utils' import * as CopyWebpackPlugin from 'copy-webpack-plugin' import CssoWebpackPlugin from 'csso-webpack-plugin' import * as sass from 'sass' @@ -10,65 +10,17 @@ import * as MiniCssExtractPlugin from 'mini-css-extract-plugin' import { join, resolve } from 'path' import * as UglifyJsPlugin from 'uglifyjs-webpack-plugin' import * as webpack from 'webpack' +import { PostcssOption, IPostcssOption, ICopyOptions } from '@tarojs/taro/types/compile' import { recursiveMerge } from '.' import { getPostcssPlugins } from '../config/postcss.conf' -import { BuildConfig, CopyOptions, Option, PostcssOption } from './types' - -const makeConfig = async (config: BuildConfig) => { - const plugins = config.plugins || {} - const sassLoaderOption = config.sassLoaderOption || {} - const sass = plugins.sass || {} - - let bundledContent = '' - // when plugins.sass only configured resource property - if (sass.resource && !sass.projectDirectory) { - const { resource } = sass - try { - if (typeof resource === 'string') { - const res = await Bundler(resource) - bundledContent += res.bundledContent - } - if (Array.isArray(resource)) { - for (const url of resource) { - const res = await Bundler(url) - bundledContent += res.bundledContent - } - } - } catch (e) { - console.log(e) - } - } +import { Option, BuildConfig } from './types' - // check resource & projectDirectory property - // projectDirectory used for resolving tilde imports - if (sass.resource && sass.projectDirectory) { - const { resource, projectDirectory } = sass - try { - if (typeof resource === 'string') { - const res = await Bundler(resource, projectDirectory) - bundledContent += res.bundledContent - } - if (Array.isArray(resource)) { - for (const url of resource) { - const res = await Bundler(url, projectDirectory) - bundledContent += res.bundledContent - } - } - } catch (e) { - console.log(e) - } - } - if (sass.data) { - bundledContent += sass.data - } +const makeConfig = async (buildConfig: BuildConfig) => { + const sassLoaderOption: Option = await getSassLoaderOption(buildConfig) return { - ...config, - plugins, - sassLoaderOption: { - ...sassLoaderOption, - data: sassLoaderOption.data ? `${sassLoaderOption.data}${bundledContent}` : bundledContent - } + ...buildConfig, + sassLoaderOption } } @@ -183,7 +135,7 @@ const getCssoWebpackPlugin = ([cssoOption]) => { return pipe(mergeOption, listify, partial(getPlugin, CssoWebpackPlugin))([defaultCSSCompressOption, cssoOption]) } const getCopyWebpackPlugin = ({ copy, appPath }: { - copy: CopyOptions, + copy: ICopyOptions, appPath: string }) => { const args = [ @@ -247,11 +199,10 @@ const getModule = (appPath: string, { mediaUrlLoaderOption, esnextModules = [] as (string | RegExp)[], - module, - plugins + postcss, + babel }) => { - - const postcssOption: PostcssOption = module.postcss || {} + const postcssOption: IPostcssOption = postcss || {} const defaultStyleLoaderOption = { sourceMap: enableSourceMap @@ -287,7 +238,7 @@ const getModule = (appPath: string, { cssLoaderOption ] const additionalBabelOptions = { - ...plugins.babel, + ...babel, sourceMap: enableSourceMap } const esnextModuleRules = getEsnextModuleRules(esnextModules) diff --git a/packages/taro-webpack-runner/src/util/types.ts b/packages/taro-webpack-runner/src/util/types.ts index ee0f5a4e2899..ce04a8b3b322 100644 --- a/packages/taro-webpack-runner/src/util/types.ts +++ b/packages/taro-webpack-runner/src/util/types.ts @@ -1,5 +1,5 @@ import * as webpack from 'webpack' -import * as webpackDevServer from 'webpack-dev-server' +import { IProjectBaseConfig, IH5Config } from '@tarojs/taro/types/compile' type FunctionLikeCustomWebpackConfig = (webpackConfig: webpack.Configuration, webpack) => webpack.Configuration; @@ -8,108 +8,12 @@ export interface Option { [key: string]: any; }; -export type TogglableOptions = { - enable?: boolean; - config?: T; -} - -export namespace PostcssOption { - export type cssModules = TogglableOptions<{ - namingPattern: 'global' | string; - generateScopedName: string | ((localName: string, absoluteFilePath: string) => string); - }>; -} - -export interface PostcssOption { - autoprefixer?: TogglableOptions; - pxtransform?: TogglableOptions; - cssModules?: PostcssOption.cssModules; -} - export interface Chain { [key: string]: any; } -export interface IOption { - [key: string]: any -} - -export interface IH5RouterConfig { - mode?: 'hash' | 'browser' | 'multi', - customRoutes?: IOption, - basename?: string, - lazyload?: boolean | ((pagename: string) => boolean) - renamePagename?: (pagename: string) => string -} - -export interface TaroH5Config { - - webpack: ((webpackConfig: webpack.Configuration, webpack) => webpack.Configuration) | webpack.Configuration - - webpackChain: (chain: any, webpack: any) => void; - - alias: Option; - entry: webpack.Entry; - output: webpack.Output; - router?: IH5RouterConfig; - devServer: webpackDevServer.Configuration; - enableSourceMap: boolean; - sourceMapType?: 'none' | 'eval' | 'cheap-eval-source-map' | 'cheap-module-eval-source-map' | 'eval-source-map' | 'cheap-source-map' | 'cheap-module-source-map' | 'inline-cheap-source-map' | 'inline-cheap-module-source-map' | 'source-map' | 'inline-source-map' | 'hidden-source-map' | 'nosources-source-map'; - enableExtract: boolean; - - cssLoaderOption: Option; - styleLoaderOption: Option; - sassLoaderOption: Option; - lessLoaderOption: Option; - stylusLoaderOption: Option; - mediaUrlLoaderOption: Option; - fontUrlLoaderOption: Option; - imageUrlLoaderOption: Option; - miniCssExtractPluginOption: Option; - esnextModules: string[]; - - module?: { - postcss?: PostcssOption; - }; -} - -export interface TaroPlugins { - babel: Option; - csso?: TogglableOptions; - uglify?: TogglableOptions; - sass?: Option; -} - -export interface CopyOptions { - patterns: { - from: string; - to: string; - ignore: string[] - }[]; - options: { - ignore: string[]; - }; -} - -export interface TaroBaseConfig { - sourceRoot: string; - outputRoot: string; - publicPath: string; - staticDirectory: string; - chunkDirectory: string; - copy: CopyOptions; - - designWidth: number; - deviceRatio?: number; - - defineConstants?: Option; - env?: Option; - - plugins: TaroPlugins; -} - -export interface BuildConfig extends TaroBaseConfig, TaroH5Config { +export interface BuildConfig extends IProjectBaseConfig, IH5Config { isWatch: boolean; port?: number; homePage?: [string, string] diff --git a/packages/taro-with-weapp/package.json b/packages/taro-with-weapp/package.json index 6d6d76d1a900..6991adebf2df 100644 --- a/packages/taro-with-weapp/package.json +++ b/packages/taro-with-weapp/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/with-weapp", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "taroize 之后的运行时", "main": "index.js", "scripts": { @@ -22,7 +22,7 @@ "author": "yuche", "license": "MIT", "dependencies": { - "@tarojs/taro": "1.3.34", + "@tarojs/taro": "2.0.0-beta.13", "lodash": "^4.17.11" }, "devDependencies": { @@ -37,7 +37,7 @@ "rollup": "^0.66.2", "rollup-plugin-buble": "^0.19.6", "rollup-plugin-typescript2": "^0.17.0", - "sinon": "^7.4.1", + "sinon": "^8.0.2", "ts-jest": "^23.10.5", "tslint": "^5.10.0", "tslint-config-prettier": "^1.10.0", diff --git a/packages/taro-with-weapp/yarn.lock b/packages/taro-with-weapp/yarn.lock index 660797cb2f7a..55f2d4da6b78 100644 --- a/packages/taro-with-weapp/yarn.lock +++ b/packages/taro-with-weapp/yarn.lock @@ -16,46 +16,46 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@sinonjs/commons@^1", "@sinonjs/commons@^1.3.0", "@sinonjs/commons@^1.4.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.6.0.tgz#ec7670432ae9c8eb710400d112c201a362d83393" - integrity sha512-w4/WHG7C4WWFyE5geCieFJF6MZkbW4VAriol5KlmQXpAQdxvV0p26sqNZOW6Qyw6Y0l9K4g+cHvvczR2sEEpqg== +"@sinonjs/commons@^1", "@sinonjs/commons@^1.6.0", "@sinonjs/commons@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.7.0.tgz#f90ffc52a2e519f018b13b6c4da03cbff36ebed6" + integrity sha512-qbk9AP+cZUsKdW1GJsBpxPKFmCJ0T8swwzVje3qFd+AkQb74Q/tiuzrdfFg8AD2g5HH/XbE/I8Uc1KYHVYWfhg== dependencies: type-detect "4.0.8" -"@sinonjs/formatio@^3.2.1": - version "3.2.2" - resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-3.2.2.tgz#771c60dfa75ea7f2d68e3b94c7e888a78781372c" - integrity sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ== +"@sinonjs/formatio@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-4.0.1.tgz#50ac1da0c3eaea117ca258b06f4f88a471668bdb" + integrity sha512-asIdlLFrla/WZybhm0C8eEzaDNNrzymiTqHMeJl6zPW2881l3uuVRpm0QlRQEjqYWv6CcKMGYME3LbrLJsORBw== dependencies: "@sinonjs/commons" "^1" - "@sinonjs/samsam" "^3.1.0" + "@sinonjs/samsam" "^4.2.0" -"@sinonjs/samsam@^3.1.0", "@sinonjs/samsam@^3.3.3": - version "3.3.3" - resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-3.3.3.tgz#46682efd9967b259b81136b9f120fd54585feb4a" - integrity sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ== +"@sinonjs/samsam@^4.2.0", "@sinonjs/samsam@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-4.2.1.tgz#cee77dc95f8d00339633e1683e026f2d73ed1d3a" + integrity sha512-7+5S4C4wpug5pzHS+z/63+XUwsH7dtyYELDafoT1QnfruFh7eFjlDWwZXltUB0GLk6y5eMeAt34Bjx8wJ4KfSA== dependencies: - "@sinonjs/commons" "^1.3.0" - array-from "^2.1.1" - lodash "^4.17.15" + "@sinonjs/commons" "^1.6.0" + lodash.get "^4.4.2" + type-detect "^4.0.8" "@sinonjs/text-encoding@^0.7.1": version "0.7.1" resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz#8da5c6530915653f3a1f38fd5f101d8c3f8079c5" integrity sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ== -"@tarojs/taro@1.3.23": - version "1.3.23" - resolved "https://registry.yarnpkg.com/@tarojs/taro/-/taro-1.3.23.tgz#8ad32c88898f578b3e6f53b98c0a75eeff349df1" - integrity sha512-nHLBEoz3Lb5jDPgXRr3e4MC8z9+3i6Pa2WzYhZnx+IZEa0WF6zNyCFkaTN3suoWPZdEcmSj5MvoQd7c5BC/OEQ== +"@tarojs/taro@2.0.0-beta.13": + version "2.0.0-beta.13" + resolved "https://registry.yarnpkg.com/@tarojs/taro/-/taro-2.0.0-beta.13.tgz#6537b4263a27641fa51e8f98673f9ea48919af01" + integrity sha512-kpbLGlViyDWQ0dq39aOn1FyZUpLtebkA9m9DnIZoQLmGJjZ02FBnCr7/fF3LcYNlGANluHqIOLF/n2cbk2zwMw== dependencies: - "@tarojs/utils" "1.3.23" + "@tarojs/utils" "2.0.0-beta.13" -"@tarojs/utils@1.3.23": - version "1.3.23" - resolved "https://registry.yarnpkg.com/@tarojs/utils/-/utils-1.3.23.tgz#e83282c29730c7604b6d5e82ded1b7460355535f" - integrity sha512-f3hFYzY+ZkHFcEXEMrDmzNwSWe83CKPavJI4NWAKKqPkbGLIpKZN7gwzgX46BFVOPSG1Brqpb1pfbMPTldPJ4Q== +"@tarojs/utils@2.0.0-beta.13": + version "2.0.0-beta.13" + resolved "https://registry.yarnpkg.com/@tarojs/utils/-/utils-2.0.0-beta.13.tgz#a3b9b4a36ab71ac4e2a3fddd96f4fb006862ea62" + integrity sha512-R/i14e/qFMc1zJyj/kEDtN3ig5GSO5l0NjCXfuIRWZaLOW+j9Ld+/qgoub0CoKZJ0STFdoZEM9yUfcbbMUX9HA== "@types/estree@0.0.39": version "0.0.39" @@ -207,11 +207,6 @@ array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" -array-from@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/array-from/-/array-from-2.1.1.tgz#cfe9d8c26628b9dc5aecc62a9f5d8f1f352c1195" - integrity sha1-z+nYwmYoudxa7MYqn12PHzUsEZU= - array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" @@ -246,7 +241,7 @@ async-limiter@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" -async@^2.1.4, async@^2.5.0: +async@^2.1.4: version "2.6.1" resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" dependencies: @@ -653,9 +648,10 @@ commander@^2.12.1: version "2.18.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970" -commander@~2.17.1: - version "2.17.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" +commander@~2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== component-emitter@^1.2.1: version "1.2.1" @@ -800,10 +796,15 @@ detect-newline@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" -diff@^3.2.0, diff@^3.5.0: +diff@^3.2.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" +diff@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" + integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== + doctrine@0.7.2: version "0.7.2" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-0.7.2.tgz#7cb860359ba3be90e040b26b729ce4bfa654c523" @@ -1190,10 +1191,11 @@ growly@^1.3.0: resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" handlebars@^4.0.3: - version "4.0.12" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.12.tgz#2c15c8a96d46da5e266700518ba8cb8d919d5bc5" + version "4.5.3" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482" + integrity sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA== dependencies: - async "^2.5.0" + neo-async "^2.6.0" optimist "^0.6.1" source-map "^0.6.1" optionalDependencies: @@ -1224,6 +1226,11 @@ has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + has-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" @@ -2325,6 +2332,11 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -2334,15 +2346,12 @@ lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.13.tgz#0bdc3a6adc873d2f4e0c4bac285df91b64fc7b93" integrity sha512-vm3/XWXfWtRua0FkUyEHBZy8kCPjErNBT9fJx8Zvs+U6zjqPbTUOpkaoum3O5uiA8sm+yNMHXfYkTUHFoMxFNA== -lodash@^4.17.15: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== - -lolex@^4.1.0, lolex@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lolex/-/lolex-4.2.0.tgz#ddbd7f6213ca1ea5826901ab1222b65d714b3cd7" - integrity sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg== +lolex@^5.0.1, lolex@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367" + integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A== + dependencies: + "@sinonjs/commons" "^1.7.0" loose-envify@^1.0.0: version "1.4.0" @@ -2471,7 +2480,8 @@ minimist@^1.1.1, minimist@^1.2.0: minimist@~0.0.1: version "0.0.10" - resolved "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= minipass@^2.2.1, minipass@^2.3.3: version "2.3.4" @@ -2540,6 +2550,11 @@ needle@^2.2.1: iconv-lite "^0.4.4" sax "^1.2.4" +neo-async@^2.6.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + nerv-shared@1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/nerv-shared/-/nerv-shared-1.4.0.tgz#4ae903f215888ab886b3d04ae3b95d5327e67f43" @@ -2558,15 +2573,16 @@ nervjs@^1.4.4: nerv-shared "1.4.0" nerv-utils "1.4.5" -nise@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/nise/-/nise-1.5.2.tgz#b6d29af10e48b321b307e10e065199338eeb2652" - integrity sha512-/6RhOUlicRCbE9s+94qCUsyE+pKlVJ5AhIv+jEE7ESKwnbXqulKZ1FYU+XAtHHWE9TinYvAxDUJAb912PwPoWA== +nise@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/nise/-/nise-3.0.1.tgz#0659982af515e5aac15592226246243e8da0013d" + integrity sha512-fYcH9y0drBGSoi88kvhpbZEsenX58Yr+wOJ4/Mi1K4cy+iGP/a73gNoyNhu5E9QxPdgTlVChfIaAlnyOy/gHUA== dependencies: - "@sinonjs/formatio" "^3.2.1" + "@sinonjs/commons" "^1.7.0" + "@sinonjs/formatio" "^4.0.1" "@sinonjs/text-encoding" "^0.7.1" just-extend "^4.0.2" - lolex "^4.1.0" + lolex "^5.0.1" path-to-regexp "^1.7.0" node-int64@^0.4.0: @@ -2708,6 +2724,7 @@ once@^1.3.0, once@^1.4.0: optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= dependencies: minimist "~0.0.1" wordwrap "~0.0.2" @@ -3253,18 +3270,18 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" -sinon@^7.4.1: - version "7.5.0" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-7.5.0.tgz#e9488ea466070ea908fd44a3d6478fd4923c67ec" - integrity sha512-AoD0oJWerp0/rY9czP/D6hDTTUYGpObhZjMpd7Cl/A6+j0xBE+ayL/ldfggkBXUs0IkvIiM1ljM8+WkOc5k78Q== +sinon@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-8.0.2.tgz#cc5f6daa9cc351b86b03faaca1e9c3650a04ae11" + integrity sha512-8W1S7BnCyvk7SK+Xi15B1QAVLuS81G/NGmWefPb31+ly6xI3fXaug/g5oUdfc8+7ruC4Ay51AxuLlYm8diq6kA== dependencies: - "@sinonjs/commons" "^1.4.0" - "@sinonjs/formatio" "^3.2.1" - "@sinonjs/samsam" "^3.3.3" - diff "^3.5.0" - lolex "^4.2.0" - nise "^1.5.2" - supports-color "^5.5.0" + "@sinonjs/commons" "^1.7.0" + "@sinonjs/formatio" "^4.0.1" + "@sinonjs/samsam" "^4.2.1" + diff "^4.0.1" + lolex "^5.1.2" + nise "^3.0.1" + supports-color "^7.1.0" sisteransi@^0.1.1: version "0.1.1" @@ -3471,12 +3488,19 @@ supports-color@^3.1.2: dependencies: has-flag "^1.0.0" -supports-color@^5.3.0, supports-color@^5.5.0: +supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" dependencies: has-flag "^3.0.0" +supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + symbol-tree@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" @@ -3640,7 +3664,7 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-detect@4.0.8: +type-detect@4.0.8, type-detect@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== @@ -3650,10 +3674,11 @@ typescript@^3.0.1: resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.0.3.tgz#4853b3e275ecdaa27f78fda46dc273a7eb7fc1c8" uglify-js@^3.1.4: - version "3.4.9" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3" + version "3.7.2" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.2.tgz#cb1a601e67536e9ed094a92dd1e333459643d3f9" + integrity sha512-uhRwZcANNWVLrxLfNFEdltoPNhECUR3lc+UdJoG9CBpMcSnKyWA94tc3eAujB1GcMY5Uwq8ZMp4qWpxWYDQmaA== dependencies: - commander "~2.17.1" + commander "~2.20.3" source-map "~0.6.1" unicode-canonical-property-names-ecmascript@^1.0.4: @@ -3805,6 +3830,7 @@ wide-align@^1.1.0: wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= wordwrap@~1.0.0: version "1.0.0" diff --git a/packages/taro/package.json b/packages/taro/package.json index 391d2eeb307c..0f973ff734e6 100644 --- a/packages/taro/package.json +++ b/packages/taro/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/taro", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "Taro framework", "module": "dist/index.esm.js", "main": "index.js", @@ -23,15 +23,17 @@ "keywords": [ "taro" ], + "author": "O2Team", + "license": "MIT", "peerDependencies": { "nervjs": "^1.5.0" }, - "author": "O2Team", - "license": "MIT", "dependencies": { - "@tarojs/utils": "1.3.34" + "@tarojs/utils": "2.0.0-beta.13" }, "devDependencies": { - "@types/react": "^16.9.4" + "@types/react": "^16.9.4", + "webpack": "^4.35.0", + "webpack-dev-server": "^3.7.2" } } diff --git a/packages/taro/types/api/media/image.d.ts b/packages/taro/types/api/media/image.d.ts index 4ea6ee3a6ffd..c75f494eb48d 100644 --- a/packages/taro/types/api/media/image.d.ts +++ b/packages/taro/types/api/media/image.d.ts @@ -167,6 +167,10 @@ declare namespace Taro { path: string /** 本地临时文件大小,单位 B */ size: number + /** (仅 H5) 文件的 MIME 类型 */ + type?: string + /** (仅 H5) 原始的浏览器 File 对象 */ + originalFileObj?: File } } /** diff --git a/packages/taro/types/api/storage/index.d.ts b/packages/taro/types/api/storage/index.d.ts index 179b531dc25f..be32ca5b3e8c 100644 --- a/packages/taro/types/api/storage/index.d.ts +++ b/packages/taro/types/api/storage/index.d.ts @@ -287,7 +287,7 @@ declare namespace Taro { * ``` * @see https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.getStorage.html */ - function getStorage(option: getStorage.Option): Promise + function getStorage(option: getStorage.Option): Promise /** Taro.clearStorage 的同步版本 * @supported weapp, h5 diff --git a/packages/taro/types/compile.d.ts b/packages/taro/types/compile.d.ts new file mode 100644 index 000000000000..096837bd0de1 --- /dev/null +++ b/packages/taro/types/compile.d.ts @@ -0,0 +1,369 @@ +import * as webpack from 'webpack' +import * as webpackDevServer from 'webpack-dev-server' + +export const enum TEMPLATE_TYPES { + WEAPP = '.wxml', + SWAN = '.swan', + ALIPAY = '.axml', + TT = '.ttml', + QUICKAPP = '.ux', + QQ = '.qml' +} + +export const enum STYLE_TYPES { + WEAPP = '.wxss', + SWAN = '.css', + ALIPAY = '.acss', + TT = '.ttss', + QUICKAPP = '.css', + QQ = '.qss' +} + +export const enum SCRIPT_TYPES { + WEAPP = '.js', + SWAN = '.js', + ALIPAY = '.js', + TT = '.js', + QUICKAPP = '.js', + QQ = '.js' +} + +export const enum CONFIG_TYPES { + WEAPP = '.json', + SWAN = '.json', + ALIPAY = '.json', + TT = '.json', + QUICKAPP = '.json', + QQ = '.json' +} + +export type IMINI_APP_FILE_TYPE = { + TEMPL: TEMPLATE_TYPES, + STYLE: STYLE_TYPES, + SCRIPT: SCRIPT_TYPES, + CONFIG: CONFIG_TYPES +} + +export type IMINI_APP_FILES = { + [key: string]: IMINI_APP_FILE_TYPE +} + +export interface IOption { + [key: string]: any +} + +export interface ICopyOptions { + patterns: { + from: string, + to: string, + ignore?: string[], + watch?: boolean + }[], + options: { + ignore?: string[] + } +} + +interface IBabelOptions { + sourceMap: boolean, + presets: string[], + plugins: any[] +} + +interface ISassOptions { + /** + * 引入的全局 sass 文件,如果要引入多个文件,支持数组形式传入 + */ + resource?: string | string[], + /** + * 项目根目录的绝对地址(若为小程序云开发模板,则应该是client目录) + */ + projectDirectory?: string, + /** + * 全局 scss 变量,若 data 与 resource 中设置了同样的变量,则 data 的优先级高于 resource + */ + data?: string +} + +export interface ICopyArgOptions { + filter?: (src: string) => boolean +} + +export namespace PostcssOption { + export type cssModules = TogglableOptions<{ + namingPattern: 'global' | string + generateScopedName: string | ((localName: string, absoluteFilePath: string) => string) + }> + export type url = TogglableOptions<{ + limit: number, + basePath?: string | string[] + }> +} + +export interface IPostcssOption { + autoprefixer?: TogglableOptions, + pxtransform?: TogglableOptions, + cssModules?: PostcssOption.cssModules, + url?: PostcssOption.url, + [key: string]: any +} + +export interface ICompileOption { + exclude?: string[], + include?: string[] +} + +export interface IMiniAppConfig { + appOutput?: boolean, + enableSourceMap: boolean, + + webpackChain: (chain: any, webpack: any) => void, + entry: webpack.Entry, + output: webpack.Output, + postcss?: IPostcssOption, + cssLoaderOption: IOption, + sassLoaderOption: IOption, + lessLoaderOption: IOption, + stylusLoaderOption: IOption, + mediaUrlLoaderOption: IOption, + fontUrlLoaderOption: IOption, + imageUrlLoaderOption: IOption, + miniCssExtractPluginOption: IOption, + + customFilesTypes: IMINI_APP_FILE_TYPE, + commonChunks: string[] +} + +export type TogglableOptions = { + enable?: boolean, + config?: T +} + +export interface IH5RouterConfig { + mode?: 'hash' | 'browser' | 'multi', + customRoutes?: IOption, + basename?: string, + lazyload?: boolean | ((pagename: string) => boolean), + renamePagename?: (pagename: string) => string +} + +export interface IH5Config { + publicPath: string, + staticDirectory: string, + chunkDirectory: string, + + webpack: ((webpackConfig: webpack.Configuration, webpack) => webpack.Configuration) | webpack.Configuration + + webpackChain: (chain: any, webpack: any) => void, + + entry: webpack.Entry, + output: webpack.Output, + router?: IH5RouterConfig, + devServer: webpackDevServer.Configuration, + enableSourceMap: boolean, + sourceMapType?: 'none' | 'eval' | 'cheap-eval-source-map' | 'cheap-module-eval-source-map' | 'eval-source-map' | 'cheap-source-map' | 'cheap-module-source-map' | 'inline-cheap-source-map' | 'inline-cheap-module-source-map' | 'source-map' | 'inline-source-map' | 'hidden-source-map' | 'nosources-source-map', + enableExtract: boolean, + transformOnly: boolean, + + cssLoaderOption: IOption, + styleLoaderOption: IOption, + sassLoaderOption: IOption, + lessLoaderOption: IOption, + stylusLoaderOption: IOption, + mediaUrlLoaderOption: IOption, + fontUrlLoaderOption: IOption, + imageUrlLoaderOption: IOption, + miniCssExtractPluginOption: IOption, + esnextModules: string[], + + postcss?: IPostcssOption +} + +type FeatureItem = { + name: string +} + +declare enum LogLevel { + OFF = 'off', + ERROR = 'error', + WARN = 'warn', + INFO = 'info', + LOG = 'log', + DEBUG = 'debug' +} + +export interface IDeviceRatio { + [key: string]: number +} + +export type SystemConfig = { + /** + * 打印日志等级,分为 off,error,warn,info,log,debug + */ + logLevel?: LogLevel, + /** + * 页面设计基准宽度,根据实际设备宽度来缩放元素大小 + */ + designWidth?: number, + /** + * 全局数据对象,属性名不能以$或_开头,在页面中可通过 this 进行访问;如果全局数据属性与页面的数据属性重名,则页面初始化时,全局数据会覆盖页面中对应的属性值 + */ + data?: IOption +} + +type RouterConfig = { + /** + * 首页名称 + */ + entry: string, + /** + * 页面配置列表,key 值为页面名称(对应页面目录名,例如 Hello 对应'Hello'目录),value 为页面详细配置 page + */ + pages: RouterPage[] +} +type RouterPage = { + /** + * 页面对应的组件名,与 ux 文件名保持一致,例如'hello' 对应 'hello.ux' + */ + component: string, + /** + * 页面路径,例如“/user”,不填则默认为/<页面名称>。 + * path 必须唯一,不能和其他 page 的 path 相同。 + * 下面 page 的 path 因为缺失,会被设置为“/Index”: + * "Index": {"component": "index"} + */ + path?: string, + /** + * 声明页面可以处理某种请求 + */ + filter: { + [key: string]: { + uri: string + } + } +} + +interface IDefaultDisplayConfig { + /** + * 窗口背景颜色 + */ + backgroundColor?: string, + /** + * 是否是全屏模式,默认不会同时作用于 titleBar,titleBar 需要继续通过 titleBar 控制 + */ + fullScreen?: boolean, + /** + * 是否显示 titleBar + */ + titleBar?: boolean, + /** + * 标题栏背景色 + */ + titleBarBackgroundColor?: string, + /** + * 标题栏文字颜色 + */ + titleBarTextColor?: string, + /** + * 标题栏文字(也可通过页面跳转传递参数(titleBarText)设置) + */ + titleBarText?: string, + /** + * 是否显示标题栏右上角菜单按钮,点击菜单按钮调用页面生命周期 onMenuPress 方法,如果该方法未实现则显示系统默认菜单 + */ + menu?: boolean, + /** + * 软键盘弹出时为保证输入框可见,页面的调整方式。 adjustPan:上移页面; adjustResize:压缩页面显示区域,当页面全屏时,此设置不生效 + */ + windowSoftInputMode?: 'adjustPan' | 'adjustResize' +} + +interface IDisplayConfig extends IDefaultDisplayConfig { + /** + * 各个页面的显示样式,key 为页面名(与路由中的页面名保持一致),value 为窗口显示样式,页面样式覆盖 default 样式 + */ + pages?: { + [key: string]: IDefaultDisplayConfig + } +} + +export interface ITaroManifestConfig { + /** + * 应用包名,确认与原生应用的包名不一致,推荐采用 com.company.module 的格式,如:com.example.demo + */ + package: string, + /** + * 应用名称,6 个汉字以内,与应用商店保存的名称一致,用于在桌面图标、弹窗等处显示应用名称 + */ + name: string, + /** + * 应用图标,提供 192x192 大小的即可 + */ + icon: string, + /** + * 应用版本名称,如:"1.0" + */ + versionName?: string, + /** + * 应用版本号,从1自增,推荐每次重新上传包时versionCode+1 + */ + versionCode: number, + /** + * 支持的最小平台版本号,兼容性检查,避免上线后在低版本平台运行并导致不兼容;如果不填按照内测版本处理 + */ + minPlatformVersion?: string, + /** + * 接口列表,绝大部分接口都需要在这里声明,否则不能调用,详见每个接口的文档说明 + */ + features?: FeatureItem[], + /** + * + */ + logLevel?: LogLevel +} + +export interface IManifestConfig extends ITaroManifestConfig { + /** + * 系统配置信息 + */ + config: SystemConfig, + /** + * 路由信息 + */ + router: RouterConfig, + /** + * UI 显示相关配置 + */ + display?: IDisplayConfig +} + +export interface ICommonPlugin { + apply: (obj: object) => any +} + +export interface IProjectBaseConfig { + projectName?: string, + date?: string, + designWidth?: number, + watcher?: any[], + deviceRatio?: IDeviceRatio, + sourceRoot?: string, + outputRoot?: string, + env?: IOption, + alias?: IOption, + defineConstants?: IOption, + copy?: ICopyOptions, + babel?: IBabelOptions, + csso?: TogglableOptions, + uglify?: TogglableOptions, + sass?: ISassOptions, + plugins?: ICommonPlugin[], +} + +export interface IProjectConfig extends IProjectBaseConfig { + ui?: { + extraWatchFiles?: any[] + }, + mini?: IMiniAppConfig, + h5?: IH5Config +} diff --git a/packages/taro/yarn.lock b/packages/taro/yarn.lock new file mode 100644 index 000000000000..ae7f5d62492e --- /dev/null +++ b/packages/taro/yarn.lock @@ -0,0 +1,3164 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@types/events@*": + version "3.0.0" + resolved "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" + +"@types/glob@^7.1.1": + version "7.1.1" + resolved "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" + dependencies: + "@types/events" "*" + "@types/minimatch" "*" + "@types/node" "*" + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + +"@types/node@*": + version "12.0.10" + resolved "https://registry.npmjs.org/@types/node/-/node-12.0.10.tgz#51babf9c7deadd5343620055fc8aff7995c8b031" + +"@webassemblyjs/ast@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" + dependencies: + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" + +"@webassemblyjs/floating-point-hex-parser@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" + +"@webassemblyjs/helper-api-error@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" + +"@webassemblyjs/helper-buffer@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" + +"@webassemblyjs/helper-code-frame@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" + dependencies: + "@webassemblyjs/wast-printer" "1.8.5" + +"@webassemblyjs/helper-fsm@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" + +"@webassemblyjs/helper-module-context@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" + dependencies: + "@webassemblyjs/ast" "1.8.5" + mamacro "^0.0.3" + +"@webassemblyjs/helper-wasm-bytecode@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" + +"@webassemblyjs/helper-wasm-section@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + +"@webassemblyjs/ieee754@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" + +"@webassemblyjs/wasm-edit@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/helper-wasm-section" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-opt" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + "@webassemblyjs/wast-printer" "1.8.5" + +"@webassemblyjs/wasm-gen@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" + +"@webassemblyjs/wasm-opt@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + +"@webassemblyjs/wasm-parser@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" + +"@webassemblyjs/wast-parser@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/floating-point-hex-parser" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-code-frame" "1.8.5" + "@webassemblyjs/helper-fsm" "1.8.5" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + +abbrev@1: + version "1.1.1" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn-dynamic-import@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" + +acorn@^6.0.5: + version "6.1.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + +ajv-keywords@^3.1.0: + version "3.4.0" + resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz#4b831e7b531415a7cc518cd404e73f6193c6349d" + +ajv@^6.1.0: + version "6.10.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +aproba@^1.0.3, aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + +async@^1.5.2: + version "1.5.2" + resolved "https://registry.npmjs.org/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +atob@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +base64-js@^1.0.2: + version "1.3.0" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.npmjs.org/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + +bluebird@^3.5.5: + version "3.5.5" + resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.8" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + dependencies: + pako "~1.0.5" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + +buffer@^4.3.0: + version "4.9.1" + resolved "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + +cacache@^11.3.2: + version "11.3.3" + resolved "https://registry.npmjs.org/cacache/-/cacache-11.3.3.tgz#8bd29df8c6a718a6ebd2d010da4d7972ae3bbadc" + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + +chokidar@^2.0.2, chokidar@^2.1.6: + version "2.1.6" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz#b6cad653a929e244ce8a834244164d241fa954c5" + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chownr@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" + +chrome-trace-event@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + dependencies: + tslib "^1.9.0" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +commander@^2.19.0: + version "2.20.0" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + +compressible@~2.0.16: + version "2.0.17" + resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz#6e8c108a16ad58384a977f3a482ca20bff2f38c1" + dependencies: + mime-db ">= 1.40.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + +console-browserify@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + dependencies: + date-now "^0.1.4" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +create-ecdh@^4.0.0: + version "4.0.3" + resolved "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2: + version "1.2.0" + resolved "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.7" + resolved "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +cyclist@~0.2.2: + version "0.2.2" + resolved "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" + +date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +debug@^3.2.5, debug@^3.2.6: + version "3.2.6" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + dependencies: + ms "^2.1.1" + +debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + dependencies: + ms "^2.1.1" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + +deep-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + +des.js@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + +detect-node@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + dependencies: + buffer-indexof "^1.0.0" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +elliptic@^6.0.0: + version "6.4.1" + resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.1" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + dependencies: + once "^1.4.0" + +enhanced-resolve@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + tapable "^1.0.0" + +errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + dependencies: + prr "~1.0.1" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +eslint-scope@^4.0.0: + version "4.0.3" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + dependencies: + estraverse "^4.1.0" + +estraverse@^4.1.0, estraverse@^4.1.1: + version "4.2.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + +eventemitter3@^3.0.0: + version "3.1.2" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" + +events@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" + +eventsource@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" + dependencies: + original "^1.0.0" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +express@^4.17.1: + version "4.17.1" + resolved "https://registry.npmjs.org/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.1: + version "0.11.3" + resolved "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + dependencies: + websocket-driver ">=0.5.1" + +figgy-pudding@^3.5.1: + version "3.5.1" + resolved "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-cache-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + dependencies: + locate-path "^3.0.0" + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +follow-redirects@^1.0.0: + version "1.7.0" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz#489ebc198dc0e7f64167bd23b03c4c19b5784c76" + dependencies: + debug "^3.2.6" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-minipass@^1.2.5: + version "1.2.6" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" + dependencies: + minipass "^2.2.1" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fsevents@^1.2.7: + version "1.2.9" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" + dependencies: + nan "^2.12.1" + node-pre-gyp "^0.12.0" + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob@^7.0.3, glob@^7.1.3, glob@^7.1.4: + version "7.1.4" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: + version "4.1.15" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" + +handle-thing@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +hash-base@^3.0.0: + version "3.0.4" + resolved "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-entities@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +"http-parser-js@>=0.4.0 <0.4.11": + version "0.4.10" + resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" + +http-proxy-middleware@^0.19.1: + version "0.19.1" + resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.17.0: + version "1.17.0" + resolved "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a" + dependencies: + eventemitter3 "^3.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + +iconv-lite@0.4.24, iconv-lite@^0.4.4: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + +ignore-walk@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + dependencies: + minimatch "^3.0.4" + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +ini@~1.3.0: + version "1.3.5" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + +ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + +ipaddr.js@1.9.0, ipaddr.js@^1.9.0: + version "1.9.0" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + dependencies: + kind-of "^6.0.0" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + dependencies: + kind-of "^6.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + dependencies: + is-extglob "^2.1.1" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + +is-path-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.1.0.tgz#2e0c7e463ff5b7a0eb60852d851a6809347a124c" + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + dependencies: + path-is-inside "^1.0.2" + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + dependencies: + isobject "^3.0.1" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + +json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + +json3@^3.3.2: + version "3.3.3" + resolved "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + dependencies: + minimist "^1.2.0" + +killable@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + dependencies: + invert-kv "^2.0.0" + +loader-runner@^2.3.0: + version "2.4.0" + resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + +loader-utils@^1.1.0, loader-utils@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +lodash@^4.17.11: + version "4.17.11" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + +loglevel@^1.6.3: + version "1.6.3" + resolved "https://registry.npmjs.org/loglevel/-/loglevel-1.6.3.tgz#77f2eb64be55a404c9fd04ad16d57c1d6d6b1280" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + dependencies: + yallist "^3.0.2" + +make-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +mamacro@^0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + dependencies: + p-defer "^1.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + dependencies: + object-visit "^1.0.0" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +memory-fs@^0.4.0, memory-fs@^0.4.1, memory-fs@~0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: + version "3.1.10" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.40.0, "mime-db@>= 1.40.0 < 2": + version "1.40.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" + +mime-types@~2.1.17, mime-types@~2.1.24: + version "2.1.24" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" + dependencies: + mime-db "1.40.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + +mime@^2.4.2: + version "2.4.4" + resolved "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" + +mimic-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +minipass@^2.2.1, minipass@^2.3.5: + version "2.3.5" + resolved "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" + dependencies: + minipass "^2.2.1" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: + version "0.5.1" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +nan@^2.12.1: + version "2.14.0" + resolved "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +needle@^2.2.1: + version "2.4.0" + resolved "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + +neo-async@^2.5.0: + version "2.6.1" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + +node-forge@0.7.5: + version "0.7.5" + resolved "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df" + +node-libs-browser@^2.0.0: + version "2.2.1" + resolved "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-pre-gyp@^0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + +npm-bundled@^1.0.1: + version "1.0.6" + resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" + +npm-packlist@^1.1.6: + version "1.4.1" + resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc" + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + dependencies: + path-key "^2.0.0" + +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + dependencies: + isobject "^3.0.0" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + dependencies: + isobject "^3.0.1" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + dependencies: + is-wsl "^1.1.0" + +original@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + dependencies: + url-parse "^1.4.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-locale@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + +os-tmpdir@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + +p-limit@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" + dependencies: + p-try "^2.0.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + dependencies: + p-limit "^2.0.0" + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + dependencies: + retry "^0.12.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + +pako@~1.0.5: + version "1.0.10" + resolved "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" + +parallel-transform@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" + dependencies: + cyclist "~0.2.2" + inherits "^2.0.3" + readable-stream "^2.1.5" + +parse-asn1@^5.0.0: + version "5.1.4" + resolved "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz#37f6628f823fbdeb2273b4d540434a22f3ef1fcc" + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + +pbkdf2@^3.0.3: + version "3.0.17" + resolved "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + dependencies: + find-up "^3.0.0" + +portfinder@^1.0.20: + version "1.0.20" + resolved "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz#bea68632e54b2e13ab7b0c4775e9b41bf270e44a" + dependencies: + async "^1.5.2" + debug "^2.2.0" + mkdirp "0.5.x" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + +proxy-addr@~2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.0" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + +querystringify@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.1.0" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.6" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6: + version "3.4.0" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + dependencies: + resolve-from "^3.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + +rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: + version "2.6.3" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + dependencies: + aproba "^1.1.1" + +safe-buffer@5.1.2, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + +selfsigned@^1.10.4: + version "1.10.4" + resolved "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.4.tgz#cdd7eccfca4ed7635d47a08bf2d5d3074092e2cd" + dependencies: + node-forge "0.7.5" + +semver@^5.3.0, semver@^5.5.0, semver@^5.6.0: + version "5.7.0" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" + +semver@^6.1.1: + version "6.1.2" + resolved "https://registry.npmjs.org/semver/-/semver-6.1.2.tgz#079960381376a3db62eb2edc8a3bfb10c7cfe318" + +send@0.17.1: + version "0.17.1" + resolved "https://registry.npmjs.org/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serialize-javascript@^1.7.0: + version "1.7.0" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + +signal-exit@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sockjs-client@1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz#12fc9d6cb663da5739d3dc5fb6e8687da95cb177" + dependencies: + debug "^3.2.5" + eventsource "^1.0.7" + faye-websocket "~0.11.1" + inherits "^2.0.3" + json3 "^3.3.2" + url-parse "^1.4.3" + +sockjs@0.3.19: + version "0.3.19" + resolved "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" + dependencies: + faye-websocket "^0.10.0" + uuid "^3.0.1" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + +source-map-resolve@^0.5.0: + version "0.5.2" + resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + dependencies: + atob "^2.1.1" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@~0.5.10: + version "0.5.12" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + +source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/spdy/-/spdy-4.0.0.tgz#81f222b5a743a329aa12cea6a390e60e9b613c52" + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + dependencies: + extend-shallow "^3.0.0" + +ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + dependencies: + figgy-pudding "^3.5.1" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.2.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" + dependencies: + safe-buffer "~5.1.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + dependencies: + has-flag "^3.0.0" + +tapable@^1.0.0, tapable@^1.1.0: + version "1.1.3" + resolved "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + +tar@^4: + version "4.4.10" + resolved "https://registry.npmjs.org/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.3.5" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + +terser-webpack-plugin@^1.1.0: + version "1.3.0" + resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.3.0.tgz#69aa22426299f4b5b3775cbed8cb2c5d419aa1d4" + dependencies: + cacache "^11.3.2" + find-cache-dir "^2.0.0" + is-wsl "^1.1.0" + loader-utils "^1.2.3" + schema-utils "^1.0.0" + serialize-javascript "^1.7.0" + source-map "^0.6.1" + terser "^4.0.0" + webpack-sources "^1.3.0" + worker-farm "^1.7.0" + +terser@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/terser/-/terser-4.0.0.tgz#ef356f6f359a963e2cc675517f21c1c382877374" + dependencies: + commander "^2.19.0" + source-map "~0.6.1" + source-map-support "~0.5.10" + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +thunky@^1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz#f5df732453407b09191dae73e2a8cc73f381a826" + +timers-browserify@^2.0.4: + version "2.0.10" + resolved "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" + dependencies: + setimmediate "^1.0.4" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + +tslib@^1.9.0: + version "1.10.0" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + dependencies: + imurmurhash "^0.1.4" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.1.2" + resolved "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + +url-parse@^1.4.3: + version "1.4.7" + resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.npmjs.org/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +util@0.10.3: + version "0.10.3" + resolved "https://registry.npmjs.org/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.npmjs.org/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + dependencies: + inherits "2.0.3" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + +uuid@^3.0.1, uuid@^3.3.2: + version "3.3.2" + resolved "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + +vm-browserify@^1.0.1: + version "1.1.0" + resolved "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" + +watchpack@^1.5.0: + version "1.6.0" + resolved "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" + dependencies: + chokidar "^2.0.2" + graceful-fs "^4.1.2" + neo-async "^2.5.0" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + dependencies: + minimalistic-assert "^1.0.0" + +webpack-dev-middleware@^3.7.0: + version "3.7.0" + resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.0.tgz#ef751d25f4e9a5c8a35da600c5fda3582b5c6cff" + dependencies: + memory-fs "^0.4.1" + mime "^2.4.2" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@^3.7.2: + version "3.7.2" + resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.7.2.tgz#f79caa5974b7f8b63268ef5421222a8486d792f5" + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.6" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.2.1" + http-proxy-middleware "^0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + killable "^1.0.1" + loglevel "^1.6.3" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.20" + schema-utils "^1.0.0" + selfsigned "^1.10.4" + semver "^6.1.1" + serve-index "^1.9.1" + sockjs "0.3.19" + sockjs-client "1.3.0" + spdy "^4.0.0" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.0" + webpack-log "^2.0.0" + yargs "12.0.5" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-sources@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85" + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^4.35.0: + version "4.35.0" + resolved "https://registry.npmjs.org/webpack/-/webpack-4.35.0.tgz#ad3f0f8190876328806ccb7a36f3ce6e764b8378" + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/wasm-edit" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + acorn "^6.0.5" + acorn-dynamic-import "^4.0.0" + ajv "^6.1.0" + ajv-keywords "^3.1.0" + chrome-trace-event "^1.0.0" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.0" + json-parse-better-errors "^1.0.2" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + memory-fs "~0.4.1" + micromatch "^3.1.8" + mkdirp "~0.5.0" + neo-async "^2.5.0" + node-libs-browser "^2.0.0" + schema-utils "^1.0.0" + tapable "^1.1.0" + terser-webpack-plugin "^1.1.0" + watchpack "^1.5.0" + webpack-sources "^1.3.0" + +websocket-driver@>=0.5.1: + version "0.7.3" + resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9" + dependencies: + http-parser-js ">=0.4.0 <0.4.11" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.3" + resolved "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + dependencies: + string-width "^1.0.2 || 2" + +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + dependencies: + errno "~0.1.7" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" + +yargs-parser@^11.1.1: + version "11.1.1" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@12.0.5: + version "12.0.5" + resolved "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" + dependencies: + cliui "^4.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^1.0.1" + os-locale "^3.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1 || ^4.0.0" + yargs-parser "^11.1.1" diff --git a/packages/taroize/package.json b/packages/taroize/package.json index 9d78ce642644..5c382969cae4 100644 --- a/packages/taroize/package.json +++ b/packages/taroize/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/taroize", - "version": "1.3.34", + "version": "2.0.0-beta.13", "description": "转换原生微信小程序代码为 Taro 代码", "main": "index.js", "files": [ diff --git a/packages/taroize/yarn.lock b/packages/taroize/yarn.lock index 483f47b3cd49..e17b322c20ef 100644 --- a/packages/taroize/yarn.lock +++ b/packages/taroize/yarn.lock @@ -85,18 +85,6 @@ ajv@^5.3.0: fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" -align-text@^0.1.1, align-text@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" - dependencies: - kind-of "^3.0.2" - longest "^1.0.1" - repeat-string "^1.5.2" - -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - ansi-escapes@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" @@ -228,10 +216,6 @@ async-limiter@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" -async@^1.4.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - async@^2.1.4: version "2.6.1" resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" @@ -545,10 +529,6 @@ callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" -camelcase@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" - camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" @@ -563,13 +543,6 @@ caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" -center-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" - dependencies: - align-text "^0.1.3" - lazy-cache "^1.0.3" - chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -620,14 +593,6 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -cliui@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" - dependencies: - center-align "^0.1.1" - right-align "^0.1.1" - wordwrap "0.0.2" - cliui@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" @@ -671,6 +636,11 @@ commander@^2.12.1: version "2.17.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" +commander@~2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + compare-versions@^3.1.0: version "3.3.1" resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.3.1.tgz#1ede3172b713c15f7c7beb98cb74d2d82576dad3" @@ -773,7 +743,7 @@ debug@^3.1.0: dependencies: ms "2.0.0" -decamelize@^1.0.0, decamelize@^1.1.1: +decamelize@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -1237,14 +1207,15 @@ growly@^1.3.0: resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" handlebars@^4.0.3: - version "4.0.11" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" + version "4.5.3" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482" + integrity sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA== dependencies: - async "^1.4.0" + neo-async "^2.6.0" optimist "^0.6.1" - source-map "^0.4.4" + source-map "^0.6.1" optionalDependencies: - uglify-js "^2.6" + uglify-js "^3.1.4" har-schema@^2.0.0: version "2.0.0" @@ -2348,10 +2319,6 @@ kleur@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/kleur/-/kleur-2.0.1.tgz#7cc64b0d188d0dcbc98bdcdfdda2cc10619ddce8" -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -2399,10 +2366,6 @@ lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.13.tgz#0bdc3a6adc873d2f4e0c4bac285df91b64fc7b93" integrity sha512-vm3/XWXfWtRua0FkUyEHBZy8kCPjErNBT9fJx8Zvs+U6zjqPbTUOpkaoum3O5uiA8sm+yNMHXfYkTUHFoMxFNA== -longest@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" - loose-envify@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -2519,6 +2482,7 @@ minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0: minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= minipass@^2.2.1, minipass@^2.3.3: version "2.3.4" @@ -2583,6 +2547,11 @@ needle@^2.2.1: iconv-lite "^0.4.4" sax "^1.2.4" +neo-async@^2.6.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -2722,6 +2691,7 @@ once@^1.3.0, once@^1.4.0: optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= dependencies: minimist "~0.0.1" wordwrap "~0.0.2" @@ -3096,12 +3066,6 @@ ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" -right-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" - dependencies: - align-text "^0.1.1" - rimraf@^2.5.4, rimraf@^2.6.1: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" @@ -3264,17 +3228,11 @@ source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" -source-map@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - dependencies: - amdefine ">=0.0.4" - -source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: +source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" -source-map@^0.6.0, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -3593,18 +3551,13 @@ typescript@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.0.1.tgz#43738f29585d3a87575520a4b93ab6026ef11fdb" -uglify-js@^2.6: - version "2.8.29" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" +uglify-js@^3.1.4: + version "3.7.2" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.2.tgz#cb1a601e67536e9ed094a92dd1e333459643d3f9" + integrity sha512-uhRwZcANNWVLrxLfNFEdltoPNhECUR3lc+UdJoG9CBpMcSnKyWA94tc3eAujB1GcMY5Uwq8ZMp4qWpxWYDQmaA== dependencies: - source-map "~0.5.1" - yargs "~3.10.0" - optionalDependencies: - uglify-to-browserify "~1.0.0" - -uglify-to-browserify@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + commander "~2.20.3" + source-map "~0.6.1" union-value@^1.0.0: version "1.0.0" @@ -3729,17 +3682,10 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" -window-size@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" - -wordwrap@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" - wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= wordwrap@~1.0.0: version "1.0.0" @@ -3831,12 +3777,3 @@ yargs@^11.0.0: which-module "^2.0.0" y18n "^3.2.1" yargs-parser "^9.0.2" - -yargs@~3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" - dependencies: - camelcase "^1.0.2" - cliui "^2.1.0" - decamelize "^1.0.0" - window-size "0.1.0" diff --git a/scripts/docs-api.ts b/scripts/docs-api.ts index affae4ae4caa..61961e600845 100644 --- a/scripts/docs-api.ts +++ b/scripts/docs-api.ts @@ -55,7 +55,7 @@ export default function docsAPI ( if (diff) { const canges = spawn('git', ['status', '-z']) - + canges.stdout.on('data', (data) => { const ss = data.toString().trim().split(/\u0000|\s+/ig) ss.forEach(s => { @@ -443,4 +443,4 @@ function isFunction (flags?: ts.SymbolFlags) { function isOptional (flags?: ts.SymbolFlags) { return SymbolFlags.includes((flags || -1) - ts.SymbolFlags.Optional) -} \ No newline at end of file +} diff --git a/website/i18n/en.json b/website/i18n/en.json index 22ed66ddffdd..93f523a3dcdd 100644 --- a/website/i18n/en.json +++ b/website/i18n/en.json @@ -2677,6 +2677,27 @@ }, "version-1.3.26/version-1.3.26-tutorial": { "title": "框架" + }, + "version-1.3.27/version-1.3.27-hooks": { + "title": "Hooks" + }, + "version-1.3.27/version-1.3.27-README": { + "title": "Taro 介绍" + }, + "version-2.0.0-beta.2/version-2.0.0-beta.2-config-detail": { + "title": "编译配置详情" + }, + "version-2.0.0-beta.2/version-2.0.0-beta.2-config": { + "title": "编译配置" + }, + "version-2.0.0-beta.3/version-2.0.0-beta.3-async-await": { + "title": "异步编程" + }, + "version-2.0.0-beta.3/version-2.0.0-beta.3-config-detail": { + "title": "编译配置详情" + }, + "version-2.0.0-beta.3/version-2.0.0-beta.3-README": { + "title": "Taro 介绍" } }, "links": { @@ -2685,8 +2706,7 @@ "API": "API", "Taro-UI": "Taro-UI", "物料市场": "物料市场", - "论坛": "论坛", - "GitHub": "GitHub" + "论坛": "论坛" }, "categories": { "关于Taro": "关于Taro", diff --git a/website/sidebars.json b/website/sidebars.json index 0a1a75607307..24a35fbb7e20 100644 --- a/website/sidebars.json +++ b/website/sidebars.json @@ -55,6 +55,7 @@ "进阶指南": [ "config", "config-detail", + "debug-config", "hooks", "ui-lib", "async-await", diff --git a/website/versioned_docs/version-2.0.0-beta.12/GETTING-STARTED.md b/website/versioned_docs/version-2.0.0-beta.12/GETTING-STARTED.md new file mode 100644 index 000000000000..5a7cd50fb301 --- /dev/null +++ b/website/versioned_docs/version-2.0.0-beta.12/GETTING-STARTED.md @@ -0,0 +1,400 @@ +--- +title: 安装及使用 +id: version-2.0.0-beta.12-GETTING-STARTED +original_id: GETTING-STARTED +--- + +## 安装 + +Taro 项目基于 node,请确保已具备较新的 node 环境(>=8.0.0),推荐使用 node 版本管理工具 [nvm](https://github.com/creationix/nvm) 来管理 node,这样不仅可以很方便地切换 node 版本,而且全局安装时候也不用加 sudo 了。 + +### CLI 工具安装 + +首先,你需要使用 npm 或者 yarn 全局安装`@tarojs/cli`,或者直接使用[npx](https://medium.com/@maybekatz/introducing-npx-an-npm-package-runner-55f7d4bd282b): + +```bash +# 使用 npm 安装 CLI +$ npm install -g @tarojs/cli +# OR 使用 yarn 安装 CLI +$ yarn global add @tarojs/cli +# OR 安装了 cnpm,使用 cnpm 安装 CLI +$ cnpm install -g @tarojs/cli +``` +### 注意事项 + +值得一提的是,如果安装过程出现`sass`相关的安装错误,请在安装[`mirror-config-china`](https://www.npmjs.com/package/mirror-config-china)后重试。 + +```bash +$ npm install -g mirror-config-china +``` + +## 项目初始化 + +使用命令创建模板项目 + +```bash +$ taro init myApp +``` + +npm 5.2+ 也可在不全局安装的情况下使用 npx 创建模板项目 + +```bash +$ npx @tarojs/cli init myApp +``` + +![taro init myApp command screenshot](http://ww1.sinaimg.cn/large/49320207gy1g0u2e0uf8gj20vg0uw10f.jpg) + +在创建完项目之后,Taro 会默认开始安装项目所需要的依赖,安装使用的工具按照 yarn>cnpm>npm 顺序进行检测,一般来说,依赖安装会比较顺利,但某些情况下可能会安装失败,这时候你可以在项目目录下自己使用安装命令进行安装 + +```bash +# 使用 yarn 安装依赖 +$ yarn +# OR 使用 cnpm 安装依赖 +$ cnpm install +# OR 使用 npm 安装依赖 +$ npm install +``` + +进入项目目录开始开发,目前已经支持 微信/百度/支付宝/字节跳动/QQ 小程序、H5、快应用以及 ReactNative 等端的代码转换,针对不同端的启动以及预览、打包方式并不一致 + +## 运行 +Taro 需要运行不同的命令,将 Taro 代码编译成不同端的代码,然后在对应的开发工具中查看效果。 + +![image](https://storage.360buyimg.com/taro-resource/platforms.jpg) + + +### 保持 `@tarojs/cli` 的版本与各端依赖版本一致 + +在使用 Taro 进行多端开发中,请确保 Taro CLI 的版本与你项目的依赖版本一致,否则可能会出现编译错误或者运行时错误。 + +如果你所使用的 Taro CLI 版本为 1.3.9,而项目里使用的依赖版本为 1.3.20,则有可能会出现问题,查询方法请参见本章 "环境及依赖检测" 章节,这时请将你的 Taro CLI 版本更新至项目依赖版本号相同的版本,如果还是出现问题,请向我们提出 [Issue](https://github.com/NervJS/taro/issues/new?assignees=&labels=&template=bug_report.md&title=)。 + + +### 微信小程序 + +选择微信小程序模式,需要自行下载并打开[微信开发者工具](https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html),然后选择项目根目录进行预览。 + +微信小程序编译预览及打包(去掉 --watch 将不会监听文件修改,并会对代码进行压缩打包) + +```bash +# yarn +$ yarn dev:weapp +$ yarn build:weapp +# npm script +$ npm run dev:weapp +$ npm run build:weapp +# 仅限全局安装 +$ taro build --type weapp --watch +$ taro build --type weapp +# npx 用户也可以使用 +$ npx taro build --type weapp --watch +$ npx taro build --type weapp +``` + +### 百度小程序 + +选择百度小程序模式,需要自行下载并打开[百度开发者工具](https://smartprogram.baidu.com/docs/develop/devtools/show_sur/),然后在项目编译完后选择项目根目录下 `dist` 目录进行预览。 + +百度小程序编译预览及打包(去掉 --watch 将不会监听文件修改,并会对代码进行压缩打包) + +```bash +# yarn +$ yarn dev:swan +$ yarn build:swan +# npm script +$ npm run dev:swan +$ npm run build:swan +# 仅限全局安装 +$ taro build --type swan --watch +$ taro build --type swan +# npx 用户也可以使用 +$ npx taro build --type swan --watch +$ npx taro build --type swan +``` + +### 支付宝小程序 + +选择支付宝小程序模式,需要自行下载并打开[支付宝小程序开发者工具](https://docs.alipay.com/mini/developer/getting-started/),然后在项目编译完后选择项目根目录下 `dist` 目录进行预览。 + +支付宝小程序编译预览及打包(去掉 --watch 将不会监听文件修改,并会对代码进行压缩打包) + +```bash +# yarn +$ yarn dev:alipay +$ yarn build:alipay +# npm script +$ npm run dev:alipay +$ npm run build:alipay +# 仅限全局安装 +$ taro build --type alipay --watch +$ taro build --type alipay +# npx 用户也可以使用 +$ npx taro build --type alipay --watch +$ npx taro build --type alipay +``` + +### 字节跳动小程序 + +选择字节跳动小程序模式,需要自行下载并打开[字节跳动小程序开发者工具](https://microapp.bytedance.com/docs/devtool/versionUpdate.html),然后在项目编译完后选择项目根目录下 `dist` 目录进行预览。 + +字节跳动小程序编译预览及打包(去掉 --watch 将不会监听文件修改,并会对代码进行压缩打包) + +```bash +# yarn +$ yarn dev:tt +$ yarn build:tt +# npm script +$ npm run dev:tt +$ npm run build:tt +# 仅限全局安装 +$ taro build --type tt --watch +$ taro build --type tt +# npx 用户也可以使用 +$ npx taro build --type tt --watch +$ npx taro build --type tt +``` + +### QQ 小程序 + +选择 QQ 小程序模式,需要自行下载并打开[QQ 小程序开发者工具](https://q.qq.com/wiki/#_4-%E7%BC%96%E7%A0%81%E5%BC%80%E5%8F%91%E5%B0%8F%E7%A8%8B%E5%BA%8F),然后在项目编译完后选择项目根目录下 `dist` 目录进行预览。 + +QQ 小程序编译预览及打包(去掉 --watch 将不会监听文件修改,并会对代码进行压缩打包) + +```bash +# yarn +$ yarn dev:qq +$ yarn build:qq +# npm script +$ npm run dev:qq +$ npm run build:qq +# 仅限全局安装 +$ taro build --type qq --watch +$ taro build --type qq +# npx 用户也可以使用 +$ npx taro build --type qq --watch +$ npx taro build --type qq +``` + +### 快应用 + +选择快应用模式,需要自行下载并打开[快应用开发者工具](https://www.quickapp.cn/docCenter/IDEPublicity),然后在项目编译完后,在开发者工具中选择「打开文件夹」选择项目根目录下 `dist` 目录,点击左边的预览图标(那个眼睛图标)进行预览。 + +快应用编译预览及打包(去掉 --watch 将不会监听文件修改,并会对代码进行压缩打包) + +```bash +# yarn +$ yarn dev:quickapp +$ yarn build:quickapp +# npm script +$ npm run dev:quickapp +$ npm run build:quickapp +# 仅限全局安装 +$ taro build --type quickapp --watch +$ taro build --type quickapp +# npx 用户也可以使用 +$ npx taro build --type quickapp --watch +$ npx taro build --type quickapp +``` + +[快应用开发者工具如何使用?点击了解](https://doc.quickapp.cn/tutorial/ide/overview.html) + +[快应用端开发流程](https://taro-docs.jd.com/taro/docs/quick-app.html) + +### H5 + +H5 模式,无需特定的开发者工具,在执行完下述命令之后即可通过浏览器进行预览 + +H5 预览项目 + +```bash +# yarn +$ yarn dev:h5 +# npm script +$ npm run dev:h5 +# 仅限全局安装 +$ taro build --type h5 --watch +# npx 用户也可以使用 +$ npx taro build --type h5 --watch +``` + +H5 打包项目 + +```bash +# yarn +$ yarn build:h5 +# npm script +$ npm run build:h5 +# 仅限全局安装 +$ taro build --type h5 +# npx 用户也可以使用 +$ npx taro build --type h5 +``` + +### React Native + +React Native 端运行需执行如下命令,React Native 端相关的运行说明请参见 [React Native 教程](./react-native.html) + +```bash +# yarn +$ yarn dev:rn +# npm script +$ npm run dev:rn +# 仅限全局安装 +$ taro build --type rn --watch +# npx 用户也可以使用 +$ npx taro build --type rn --watch +``` + +> Note:React Native 端和其他端样式兼容性差异较大,如果需要兼容 React Native 端,建议 React Native 端和其他端同步开发。 + +> Note:如果要支持 React Native 端,必须采用 Flex 布局,并且样式选择器仅支持类选择器,且不 +> 支持 **组合器** [Combinators and groups of selectors](https://developer.mozilla.org/en-US/docs/Learn/CSS/Introduction_to_CSS/Combinators_and_multiple_selectors)。 + +以下选择器的写法都是不支持的,在样式转换时会自动忽略。 + +```css +.button.button_theme_islands { + font-style: bold; +} + +img + p { + font-style: bold; +} + +p ~ span { + color: red; +} + +div > span { + background-color: DodgerBlue; +} + +div span { + background-color: DodgerBlue; +} +``` + +样式上 H5 最为灵活,小程序次之,RN 最弱,统一多端样式即是对齐短板,也就是要以 RN 的约束来管理样式,同时兼顾小程序的限制,核心可以用三点来概括: + +- 使用 Flex 布局 +- 基于 BEM 写样式 +- 采用 style 属性覆盖组件样式 + +RN 中 View 标签默认主轴方向是 column,如果不将其他端改成与 RN 一致,就需要在所有用到 display: flex 的地方都显式声明主轴方向。 + +## 常用 CLI 命令 + +### 查看 Taro 所有命令及帮助 + +```bash +$ taro --help +``` + +### 更新 + +Taro 提供了更新命令来更新 CLI 工具自身和项目中 Taro 相关的依赖 + +更新 Taro CLI 工具 + +```bash +# taro +$ taro update self [version] +# npm +npm i -g @tarojs/cli@[version] +# yarn +yarn global add @tarojs/cli@[version] +``` + +更新项目中 Taro 相关的依赖 + +```bash +$ taro update project [version] +``` + +> `version` 为选填,如:`1.x.x/latest` 等,将会直接更新到指定版本。 +> 若不填写 `version`,将会更新到当前项目 Taro 依赖的 `主版本(major)`的最新稳定版,如当前主版本没有稳定版本,则会更新到 `latest` 指定的版本。 + +如命令更新失败,需要在 package.json 文件手动更新依赖版本,然后重新安装依赖。 + +### 环境及依赖检测 + +Taro 提供了命令来一键检测 Taro 环境及依赖的版本等信息,方便大家查看项目的环境及依赖,排查环境问题。在提 issue 的时候,请附上 `taro info` 打印的信息,帮助开发人员快速定位问题。 + +```bash +$ taro info +👽 Taro v1.2.0-beta.15 + + + Taro CLI 1.2.0-beta.15 environment info: + System: + OS: macOS High Sierra 10.13.5 + Shell: 5.3 - /bin/zsh + Binaries: + Node: 8.11.2 - /usr/local/bin/node + Yarn: 1.8.0 - /usr/local/bin/yarn + npm: 5.6.0 - /usr/local/bin/npm + npmPackages: + @tarojs/components: ^1.2.0-beta.3 => 1.2.0-beta.3 + @tarojs/plugin-babel: ^1.2.0-beta.3 => 1.2.0-beta.3 + @tarojs/plugin-csso: ^1.2.0-beta.3 => 1.2.0-beta.3 + @tarojs/plugin-sass: ^1.2.0-beta.4 => 1.2.0-beta.4 + @tarojs/plugin-uglifyjs: ^1.2.0-beta.3 => 1.2.0-beta.3 + @tarojs/rn-runner: ^1.2.0-beta.4 => 1.2.0-beta.4 + @tarojs/router: ^1.2.0-beta.3 => 1.2.0-beta.3 + @tarojs/taro: ^1.2.0-beta.3 => 1.2.0-beta.3 + @tarojs/taro-alipay: ^1.2.0-beta.3 => 1.2.0-beta.3 + @tarojs/taro-h5: ^1.2.0-beta.3 => 1.2.0-beta.3 + @tarojs/taro-swan: ^1.2.0-beta.3 => 1.2.0-beta.3 + @tarojs/taro-weapp: ^1.2.0-beta.3 => 1.2.0-beta.3 + @tarojs/webpack-runner: ^1.2.0-beta.3 => 1.2.0-beta.3 + eslint-config-taro: ^1.2.0-beta.3 => 1.2.0-beta.3 + eslint-plugin-taro: ^1.2.0-beta.3 => 1.2.0-beta.3 +``` + +### Taro Doctor + +Taro Doctor 就像一个医生一样,可以诊断项目的依赖、设置、结构,以及代码的规范是否存在问题,并尝试给出解决方案。 + +但和真正的医生不一样,Taro Doctor 不需要排队挂号,也不用花钱。你只需要在终端运行命令:`taro doctor`,就像图里一样: + +![Taro Doctor 诊断结果图](https://img10.360buyimg.com/ling/jfs/t1/46613/36/5573/202581/5d357d14E6f0df7e1/fc026be7dc69dcf2.png) + +### 快速创建新页面 + +Taro create --name [页面名称] 能够在当前项目的pages目录下快速生成新的页面文件,并填充基础代码,是一个提高开发效率的利器。 + +### CLI 配置 + +> 自 `1.3.9` 开始支持 + +`1.3.9` 开始 Taro 会在用户根目录下创建 .taro 文件夹,其中 .taro/index.json 用于存放 CLI 相关配置。 + +开发者可以使用 `taro config` 命令对配置项进行一系列操作: + +```bash +# 查看用法 +$ taro config --help +# 设置配置项的值为 +$ taro config set +# 读取配置项 +$ taro config get +# 删除配置项 +$ taro config delete +# 打印所有配置项 +$ taro config list [--json] +``` + +## 其他常见问题 + +### 回到某个版本 + +需要安装某个固定版本,或者回到某个版本,例如我们要安装 `1.3.9` , 则如下: + +```bash +# 使用 npm 安装 CLI +$ npm install -g @tarojs/cli@1.3.9 +# OR 使用 yarn 安装 CLI +$ yarn global add @tarojs/cli@1.3.9 +# OR 安装了 cnpm,使用 cnpm 安装 CLI +$ cnpm install -g @tarojs/cli@1.3.9 +``` diff --git a/website/versioned_docs/version-2.0.0-beta.12/react-native.md b/website/versioned_docs/version-2.0.0-beta.12/react-native.md new file mode 100644 index 000000000000..9d985d4b4beb --- /dev/null +++ b/website/versioned_docs/version-2.0.0-beta.12/react-native.md @@ -0,0 +1,779 @@ +--- +title: React Native 端开发流程 +id: version-2.0.0-beta.12-react-native +original_id: react-native +--- + +> 本篇主要讲解 Taro React Native 端 环境安装-开发-调试-打包-发布 原理及流程,React Native 开发前注意事项请看 [开发前注意](./before-dev-remind.html) +> +> 适配 RN 端可参考项目:[首个 Taro 多端统一实例 - 网易严选(小程序 + H5 + React Native) - By 趣店 FED](https://github.com/js-newbee/taro-yanxuan) + +## 简介 + +Taro 移动端的开发基于 Facebook 的开源项目 [React Native](https://github.com/facebook/react-native),目前是项目依赖中固定 React Native 版本为 `0.55.4`。 + +整个 RN 端的开发流程如下: + +![image](http://assets.processon.com/chart_image/5c988481e4b01e76978bd6ab.png) + +首先在 Taro 项目里执行:`taro build --type rn --watch`,这个命令会将 Taro 代码编译为 React Native 代码(默认输出在 rn_temp 目录下),并启动 Metro Server(可以看成是 webpack run devserver --port 8081)打包 rn_temp 下的 js。 + +然后进入 `taro-native-shell` 目录(建议和 Taro 项目平级),通过 `react-native run-android|ios`启动,或者通过对应的 Android Studio / Xcode 启动应用,启动后应用可以看成是一个浏览器,会从 8081 端口加载 js 并渲染。 + +## 搭建 iOS 开发环境 + +必须安装的依赖有:Node、Watchman 和 React Native 命令行工具以及 Xcode。 + +虽然你可以使用任何编辑器来开发应用(编写 js 代码),但你仍然必须安装 Xcode 来获得编译 iOS 应用所需的工具和环境。 + +### Node, Watchman +我们推荐使用 [Homebrew](http://brew.sh/) 来安装 Node 和 Watchman。在命令行中执行下列命令安装: + +```sh +brew install node +brew install watchman +``` + +如果你已经安装了 Node,请检查其版本是否在 v8.3 以上。安装完 Node 后建议设置 npm 镜像以加速后面的过程(或使用科学上网工具)。 + +> 注意:不要使用 cnpm!cnpm 安装的模块路径比较奇怪,packager 不能正常识别! + +设置 npm 镜像: +``` +npm config set registry https://registry.npm.taobao.org --global +npm config set disturl https://npm.taobao.org/dist --global +``` + +或者使用 [nrm](https://github.com/Pana/nrm): + +```sh +$ nrm ls + +* npm ----- https://registry.npmjs.org/ + cnpm ---- http://r.cnpmjs.org/ + taobao -- https://registry.npm.taobao.org/ + nj ------ https://registry.nodejitsu.com/ + skimdb -- https://skimdb.npmjs.com/registry + +``` + +```sh +$ nrm use cnpm //switch registry to cnpm + + Registry has been set to: http://r.cnpmjs.org/ +``` + +[Watchman](https://facebook.github.io/watchman) 则是由 Facebook 提供的监视文件系统变更的工具。安装此工具可以提高开发时的性能(packager 可以快速捕捉文件的变化从而实现实时刷新)。 + +### Yarn、React Native 的命令行工具(react-native-cli) +Yarn 是 Facebook 提供的替代 npm 的工具,可以加速 node 模块的下载。React Native 的命令行工具用于执行创建、初始化、更新项目、运行打包服务(packager)等任务。 + +```sh +npm install -g yarn react-native-cli +``` + +安装完 yarn 后同理也要设置镜像源: + +```sh +yarn config set registry https://registry.npm.taobao.org --global +yarn config set disturl https://npm.taobao.org/dist --global +``` + +安装完 yarn 之后就可以用 yarn 代替 npm 了,例如用 yarn 代替 npm install 命令,用 yarn add 某第三方库名代替 npm install 某第三方库名。 + +### Xcode +React Native 目前需要 [Xcode](https://developer.apple.com/xcode/downloads/) 9.4 或更高版本。你可以通过 App Store 或是到 [Apple 开发者官网](https://developer.apple.com/xcode/downloads/) 上下载。这一步骤会同时安装 Xcode IDE、Xcode 的命令行工具和 iOS 模拟器。 + +Xcode 的命令行工具 + +启动 Xcode,并在 `Xcode | Preferences | Locations` 菜单中检查一下是否装有某个版本的 `Command Line Tools`。Xcode 的命令行工具中包含一些必须的工具,比如 `git` 等。 + +![image](https://reactnative.cn/docs/assets/GettingStartedXcodeCommandLineTools.png) + + +## 搭建 Android 开发环境 + +### 安装依赖 +必须安装的依赖有:Node、Watchman 和 React Native 命令行工具以及 JDK 和 Android Studio。 + +虽然你可以使用任何编辑器来开发应用(编写 js 代码),但你仍然必须安装 Android Studio 来获得编译 Android 应用所需的工具和环境。 + +### Java Development Kit +React Native 需要 Java Development Kit [JDK] 1.8(暂不支持 1.9 及更高版本)。你可以在命令行中输入 + +> javac -version来查看你当前安装的 JDK 版本。如果版本不合要求,则可以到 官网上下载。 + +### Android 开发环境 +如果你之前没有接触过 Android 的开发环境,那么请做好心理准备,这一过程相当繁琐。请 `万分仔细`地阅读下面的说明,严格对照文档进行配置操作。 + +> 注:请注意!!!国内用户必须必须必须有稳定的翻墙工具,否则在下载、安装、配置过程中会不断遭遇链接超时或断开,无法进行开发工作。某些翻墙工具可能只提供浏览器的代理功能,或只针对特定网站代理等等,请自行研究配置或更换其他软件。总之如果报错中出现有网址,那么 99% 就是无法正常翻墙。 + +> 如果是 socks5 代理 ,如下这样设置其实并没有什么卵用 + +``` +#systemProp.socks.proxyHost=127.0.0.1 +#systemProp.socks.proxyPort=8016 + +#systemProp.https.proxyHost=127.0.0.1 +#systemProp.https.proxyPort=8016 + +#systemProp.https.proxyHost=socks5://127.0.0.1 +#systemProp.https.proxyPort=8016 +``` + +> 正确设置方法应该是这样: +org.gradle.jvmargs=-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=8016 + +> 修改 $HOME/.gradle/gradle.properties 文件,加入上面那句,这样就可以全局开启 gradle 代理 + + +#### 1. 安装 Android Studio + +[首先下载和安装 Android Studio](https://developer.android.com/studio/index.html),国内用户可能无法打开官方链接,请自行使用搜索引擎搜索可用的下载链接。安装界面中选择"Custom"选项,确保选中了以下几项: + +- Android SDK +- Android SDK Platform +- Performance (Intel ® HAXM) ([AMD 处理器看这里](https://android-developers.googleblog.com/2018/07/android-emulator-amd-processor-hyper-v.html)) +- Android Virtual Device + +然后点击"Next"来安装选中的组件。 + +> 如果选择框是灰的,你也可以先跳过,稍后再来安装这些组件。 + +安装完成后,看到欢迎界面时,就可以进行下面的操作了。 + +#### 2. 安装 Android SDK +Android Studio 默认会安装最新版本的 Android SDK。目前编译 React Native 应用需要的是 `Android 6.0 (Marshmallow)` 版本的 SDK(注意 SDK 版本不等于终端系统版本,RN 目前支持 android 4.1 以上设备)。你可以在 Android Studio 的 SDK Manager 中选择安装各版本的 SDK。 + +你可以在 Android Studio 的欢迎界面中找到 SDK Manager。点击 "Configure",然后就能看到 "SDK Manager"。 + +![image](https://reactnative.cn/docs/assets/GettingStartedAndroidStudioWelcomeMacOS.png) + +> SDK Manager 还可以在 Android Studio 的 "Preferences" 菜单中找到。具体路径是 `Appearance & Behavior → System Settings → Android SDK`。 + +在 SDK Manager 中选择 "SDK Platforms"选项卡,然后在右下角勾选 "Show Package Details"。展开 `Android 6.0 (Marshmallow)` 选项,确保勾选了下面这些组件(重申你必须使用稳定的翻墙工具,否则可能都看不到这个界面): + +- `Android SDK Platform 28` +- `Intel x86 Atom_64 System Image`(官方模拟器镜像文件,使用非官方模拟器不需要安装此组件) + +然后点击"SDK Tools"选项卡,同样勾中右下角的"Show Package Details"。展开"Android SDK Build-Tools"选项,确保选中了 React Native 所必须的 `23.0.1` 版本。你可以同时安装多个其他版本,然后还要勾选最底部的 `Android Support Repository`。 + +![image](https://reactnative.cn/docs/assets/GettingStartedAndroidSDKManagerSDKToolsMacOS.png) + +最后点击"Apply"来下载和安装这些组件。 + +![image](https://reactnative.cn/docs/assets/GettingStartedAndroidSDKManagerInstallsMacOS.png) + +#### 3. 配置 ANDROID_HOME 环境变量 +React Native 需要通过环境变量来了解你的 Android SDK 装在什么路径,从而正常进行编译。 + +具体的做法是把下面的命令加入到 `~/.bash_profile` 文件中: + +> ~表示用户目录,即/Users/你的用户名/,而小数点开头的文件在 Finder 中是隐藏的,并且这个文件有可能并不存在。可在终端下使用vi ~/.bash_profile命令创建或编辑。如不熟悉 vi 操作,请点击 [这里](http://www.eepw.com.cn/article/48018.htm) 学习。 + +```sh +# 如果你不是通过Android Studio安装的sdk,则其路径可能不同,请自行确定清楚。 +export ANDROID_HOME=$HOME/Library/Android/sdk +export PATH=$PATH:$ANDROID_HOME/tools +export PATH=$PATH:$ANDROID_HOME/platform-tools +``` + +> 如果你的命令行不是 bash,而是例如 zsh 等其他,请使用对应的配置文件。 + +使用 `source $HOME/.bash_profile` 命令来使环境变量设置立即生效(否则重启后才生效)。可以使用 `echo $ANDROID_HOME` 检查此变量是否已正确设置。 + +> 请确保你正常指定了 Android SDK 路径。你可以在 Android Studio 的 "Preferences" 菜单中查看 SDK 的真实路径,具体是`Appearance & Behavior → System Settings → Android SDK`。 + + +### 准备 Android 设备 +你需要准备一台 Android 设备来运行 React Native Android 应用。这里所指的设备既可以是真机,也可以是模拟器。Android 官方提供了名为 Android Virtual Device(简称 AVD)的模拟器。此外还有很多第三方提供的模拟器如 [Genymotion](https://www.genymotion.com/download)、BlueStack 等。一般来说官方模拟器免费、功能完整,但性能较差。第三方模拟器性能较好,但可能需要付费,或带有广告。 + +#### 使用 Android 真机 +你也可以使用 Android 真机来代替模拟器进行开发,只需用 usb 数据线连接到电脑,然后遵照 [在设备上运行](https://reactnative.cn/docs/0.55/running-on-device) 这篇文档的说明操作即可。 + +#### 使用 Android 模拟器 +你可以在 Android Studi 打开 "AVD Manager" 来查看可用的虚拟设备,它的图标看起来像下面这样: + +![image](https://reactnative.cn/docs/assets/GettingStartedAndroidStudioAVD.png) + +如果你刚刚才安装 Android Studio,那么可能需要先 [创建一个虚拟设备](https://developer.android.com/studio/run/managing-avds.html)。点击"Create Virtual Device...",然后选择所需的设备类型并点击"Next"。 + +![image](https://reactnative.cn/docs/assets/GettingStartedCreateAVDMacOS.png) + +选择 "x86 Images" 选项卡,这里可以看到你之前已安装过的镜像文件。必须先安装镜像文件才能创建对应的虚拟设备。 + +![image](https://reactnative.cn/docs/assets/GettingStartedCreateAVDx86MacOS.png) + +> 如果你还没有安装 HAXM(Intel 虚拟硬件加速驱动),则先按 [这篇文档](https://software.intel.com/en-us/android/articles/installation-instructions-for-intel-hardware-accelerated-execution-manager-mac-os-x) 说明来进行安装。 + +![image](https://reactnative.cn/docs/assets/GettingStartedAVDManagerMacOS.png) + +然后点击 "Next" 和 "Finish" 来完成虚拟设备的创建。 + +## 开发 + +### 编译 + +RN 编译预览模式: + +```shell +# yarn +$ yarn dev:rn +# npm script +$ npm run dev:rn +# 仅限全局安装 +$ taro build --type rn --watch +# npx 用户也可以使用 +$ npx taro build --type rn --watch +``` + +Taro 将会开始编译文件: + +```sh +➜ taro-demo git:(master) ✗ taro build --type rn --watch +👽 Taro v1.2.20 + +开始编译项目 taro-demo +编译 JS /Users/chengshuai/Taro/taro-demo/src/app.js +编译 SCSS /Users/chengshuai/Taro/taro-demo/src/app.scss +拷贝 HTML /Users/chengshuai/Taro/taro-demo/src/index.html +生成 生成文件 /Users/chengshuai/Taro/taro-demo/rn_temp/app_styles.js +编译 JS /Users/chengshuai/Taro/taro-demo/src/pages/index/index.js +编译 SCSS /Users/chengshuai/Taro/taro-demo/src/pages/index/index.scss +生成 index.js /Users/chengshuai/Taro/taro-demo/rn_temp/index.js +生成 app.json /Users/chengshuai/Taro/taro-demo/rn_temp/app.json +生成 package.json /Users/chengshuai/Taro/taro-demo/rn_temp/package.json +编译 编译完成,花费2504 ms +生成 生成文件 /Users/chengshuai/Taro/taro-demo/rn_temp/pages/index/index_styles.js + +初始化完毕,监听文件修改中... + +``` + +编译后的代码及应用文件在根目录的 `rn_temp` 目录下,常见的工程目录结构如下: + +```shell +rn_temp +├── app.js +├── app.json +├── app_styles.js +├── index.html +├── index.js +├── package-lock.json +├── package.json +├── pages +│   └── index +│   ├── component.js +│   ├── index.js +│   └── index_styles.js +├── bundle +│   ├── assets +│   ├── index.bundle +│   └── index.bundle.meta +└── yarn.lock +``` +其中关键文件及目录如下: + +- app.json React Native 应用的配置,从 `config.rn.appJson` 中获取 +- bundle:实时编译的 jsbundle 临时文件 + +如果编译没有报错,会自动打开一个终端,并在 8081 端口启动 [Metro](https://github.com/facebook/metro) Bundler 负责打包 jsbundle: + +![image](https://user-images.githubusercontent.com/9441951/59322399-85780180-8d08-11e9-9ea7-b3e4b23c077c.png) + +> 注意:少数电脑上,可能不会 `自动打开一个终端`,这时你可以在项目根目录下运行:`react-native start` 手动启动。 + +这时,在浏览器输入 http://127.0.0.1:8081,可以看到如下页面: +![image](https://user-images.githubusercontent.com/9441951/55865494-13245d00-5bb1-11e9-9a97-8a785a83b584.png) + +输入 http://127.0.0.1:8081/rn_temp/index.bundle?platform=ios&dev=true 会触发对应终端平台的 js bundle 构建。 + +![image](https://user-images.githubusercontent.com/9441951/55865039-37336e80-5bb0-11e9-8aca-c121be4542f6.png) + +构建完成后,浏览器会显示构建后的 js 代码。 + +> Note:进入下一步之前请确保 Metro Bundler Server 正常启动,即浏览器能正常访问访问 jsbundle。 + + +### 启动应用 +如果上一步的编译和 Metro Bundler Server 启动没问题,接下来就可以启动应用了。 + +开发者可以自行[整合 React Native (0.55.4) 到原生应用](https://reactnative.cn/docs/0.55/integration-with-existing-apps/),同时为了方便大家开发和整合,Taro 将 React Native 工程中原生的部分剥离出来,单独放在一个工程里面 [NervJS/taro-native-shell](https://github.com/NervJS/taro-native-shell),你可以把它看成是 React Native iOS/Android 空应用的壳子。 + +首先将应用代码 clone 下来: + +``` +git clone git@github.com:NervJS/taro-native-shell.git +``` +然后 `cd taro-native-shell`,使用 yarn 或者 npm install 安装依赖。 + +> 注意 `taro-native-shell` 工程和 Taro 工程最好独立存放,不要嵌套,否则会报:`multi react-native ` 错误 + +工程目录如下: + +```sh +➜ taro-native-shell git:(master) ✗ tree -L 1 +. +├── LICENSE +├── README.md +├── android // Android 工程目录 +├── ios // iOS 工程目录 +├── node_modules +├── package.json +└── yarn.lock +``` + + +### iOS +#### 使用 React Native 命令启动 + +```sh +$ react-native run-ios +``` + +iOS 模拟器会自行启动,并访问 8081 端口获取 js bundle,这时 Metro Bundler 终端会打印以下内容: + +```sh + BUNDLE [ios, dev] ./index.js ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ 100.0% (1/1), done. +``` + +#### 使用 Xcode 启动 +iOS 的启动比较简单,使用 Xcode 打开 ios 目录,然后点击 Run 按钮就行。 + +![image](https://developer.apple.com/library/archive/documentation/ToolsLanguages/Conceptual/Xcode_Overview/Art/XC_O_SchemeMenuWithCallouts_2x.png) + +这里需要注意的是 jsBundle 的 moduleName,默认的 moduleName 为 "taroDemo",需要和 `rn_temp/app.json` 里面的 name 字段保持一致。该配置在 `AppDelegate.m` 文件中。 + +```objc +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + NSURL *jsCodeLocation; + + jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"rn_temp/index" fallbackResource:nil]; + + RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation + moduleName:@"taroDemo" + initialProperties:nil + launchOptions:launchOptions]; + rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; + + self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; + UIViewController *rootViewController = [UIViewController new]; + rootViewController.view = rootView; + self.window.rootViewController = rootViewController; + [self.window makeKeyAndVisible]; + return YES; +} + +@end +``` + +app.json 字段的配置默认取自于 package.json 的 name 字段,除非你在 `rn -> appJson` 里面有配置。 + +更多资料,可以查看 Xcode 文档:[Building Your App](https://developer.apple.com/library/archive/documentation/ToolsLanguages/Conceptual/Xcode_Overview/BuildingYourApp.html) + +### Android +在 taro-native-shell/android 目录下,你就可以看到 React Native 的工程代码。 + +#### 使用 React Native 命令启动 + +```sh +$ react-native run-android +``` + +Android 模拟器会自行启动,并访问 8081 端口获取 js bundle,这时 Metro Bundler 终端会打印一下内容: + +```sh + BUNDLE [android, dev] ./index.js ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ 100.0% (1/1), done. +``` + +#### 在真实设备上运行 + +按照以下步骤设置您的设备: + +1. 使用一根 USB 电缆将您的设备连接到您的开发机器。如果您是在 Windows 上开发,可能需要为您的设备 [安装相应的 USB 驱动程序](https://developer.android.com/studio/run/oem-usb.html?hl=zh-cn)。 +2. 按照以下步骤操作,在 Developer options 中启用 USB debugging。 +首先,您必须启用开发者选项: + + 1. 打开 Settings 应用。 + 2. (仅在 Android 8.0 或更高版本上)选择 System。 + 3. 滚动到底部,然后选择 About phone。 + 4. 滚动到底部,点按 Build number 7 次。 + 5. 返回上一屏幕,在底部附近可找到 Developer options。 +打开 Developer options,然后向下滚动以找到并启用 USB debugging。 + +按照以下步骤操作,在您的设备上运行应用: + +1. 在 Android Studio 中,点击 Project 窗口中的 app 模块,然后选择 Run > Run(或点击工具栏中的 Run )。 + +![image](https://sdtimes.com/wp-content/uploads/2016/04/0408.sdt-androidstudio.png) + +2. 在 Select Deployment Target 窗口中,选择您的设备,然后点击 OK。 + +![image](https://developer.android.com/training/basics/firstapp/images/run-device_2x.png?hl=zh-cn) + +Android Studio 会在您连接的设备上安装并启动应用。 + +#### 在模拟器上运行 +按照以下步骤操作,在模拟器上运行应用: + +1. 在 Android Studio 中,点击 Project 窗口中的 app 模块,然后选择 Run > Run(或点击工具栏中的 Run )。 +2. 在 Select Deployment Target 窗口中,点击 Create New Virtual Device。 + +![image](https://developer.android.com/training/basics/firstapp/images/run-avd_2x.png?hl=zh-cn) + +3. 在 Select Hardware 屏幕中,选择电话设备(如 Pixel),然后点击 Next。 +4. 在 System Image 屏幕中,选择具有最高 API 级别的版本。如果您未安装该版本,将显示一个 Download 链接,因此,请点击该链接并完成下载。 +5. 点击 Next。 +6. 在 Android Virtual Device (AVD) 屏幕上,保留所有设置不变,然后点击 Finish。 +7. 返回到 Select Deployment Target 对话框中,选择您刚刚创建的设备,然后点击 OK。 + +Android Studio 会在模拟器上安装并启动应用。 + +#### 在真机上运行 + +参考 [在设备上运行](https://reactnative.cn/docs/running-on-device/) + +#### Module Name + +同样,Android 这边默认的 jsBundle moduleName 也是 “taroDemo”,位于 `MainActivity.java` 的文件里面: + +```java +package com.tarodemo; + +import com.facebook.react.ReactActivity; + +public class MainActivity extends ReactActivity { + + /** + * Returns the name of the main component registered from JavaScript. + * This is used to schedule rendering of the component. + */ + @Override + protected String getMainComponentName() { + return "taroDemo"; + } +} + +``` + +你可以根据实际情况自行修改。 + +## 调试 + +更多资料可以查看 [React Native 调试](https://reactnative.cn/docs/debugging.html)。 + +### 开发者菜单 + +React Native 在 iOS 模拟器上支持一些快捷键操作,具体会在下文中描述。要使用快捷键请务必确保模拟器的 Hardware 菜单中,Keyboard 选项下的"Connect Hardware Keyboard"处于开启状态,否则按键是没有响应的。 + +你可以通过摇晃设备或是选择 iOS 模拟器的 "Hardware" 菜单中的 "Shake Gesture" 选项来打开开发菜单。另外,如果是在 iOS 模拟器中运行,还可以按下 `Command⌘ + D` 快捷键,Android 模拟器对应的则是 `Command⌘ + M`(windows 上可能是 F1 或者 F2),或是直接在命令行中运行 `adb shell input keyevent 82` 来发送菜单键命令。 + +![image](https://reactnative.cn/docs/assets/DeveloperMenu.png) + +> 在发布(production)版本中开发者菜单将无法使用。 + +### 刷新 JavaScript +传统的原生应用开发中,每一次修改都需要重新编译,但在 RN 中你只需要刷新一下 JavaScript 代码,就能立刻看到变化。具体的操作就是在开发菜单中点击 "Reload" 选项。也可以在 iOS 模拟器中按下 `Command⌘ + R `,Android 模拟器上对应的则是 `按两下R`。 + +#### 自动刷新 +选择开发菜单中的 "Enable Live Reload" 可以开启自动刷新,这样可以节省你开发中的时间。 + +更神奇的是,你还可以保持应用的当前运行状态,修改后的 JavaScript 文件会自动注入进来(就好比行驶中的汽车不用停下就能更换新的轮胎)。要实现这一特性只需开启开发菜单中的 [Hot Reloading](https://facebook.github.io/react-native/blog/2016/03/24/introducing-hot-reloading.html) 选项。 + +> 某些情况下 hot reload 并不能顺利实施。如果碰到任何界面刷新上的问题,请尝试手动完全刷新。 + +但有些时候你必须要重新编译应用才能使修改生效: + +- 增加了新的资源(比如给 iOS 的Images.xcassets或是 Andorid 的res/drawable文件夹添加了图片) +- 更改了任何的原生代码(objective-c/swift/java) + +### 应用内的错误与警告提示(红屏和黄屏) +红屏或黄屏提示都只会在开发版本中显示,正式的离线包中是不会显示的。 + +### 红屏错误 +应用内的报错会以全屏红色显示在应用中(调试模式下),我们称为红屏(red box)报错。你可以使用console.error()来手动触发红屏错误。 + +### 黄屏警告 +应用内的警告会以全屏黄色显示在应用中(调试模式下),我们称为黄屏(yellow box)报错。点击警告可以查看详情或是忽略掉。和红屏报警类似,你可以使用 `console.warn()` 来手动触发黄屏警告。在默认情况下,开发模式中启用了黄屏警告。可以通过以下代码关闭: + +```js +console.disableYellowBox = true; +console.warn('YellowBox is disabled.'); +``` + +你也可以通过代码屏蔽指定的警告,像下面这样调用 ignoreWarnings 方法,参数为一个数组: + +``` +import {YellowBox} from 'react-native'; +YellowBox.ignoreWarnings(['Warning: ...']); +``` + +在 CI/Xcode 中,黄屏警告还可以通过设置 `IS_TESTING` 环境变量来控制启用与否。 + +> 红屏错误和黄屏警告在发布版(release/production)中都是自动禁用的。 + +### Chrome 开发者工具 +在开发者菜单中选择 "Debug JS Remotely" 选项,即可以开始在 Chrome 中调试 JavaScript 代码。点击这个选项的同时会自动打开调试页面 http://localhost:8081/debugger-ui.(如果地址栏打开的是 ip 地址,则请自行改为 localhost) + +在 Chrome 的菜单中选择 `Tools → Developer Tools` 可以打开开发者工具,也可以通过键盘快捷键来打开(Mac 上是 `Command⌘ + Option⌥ + I`,Windows 上是 `Ctrl + Shift + I或是 F12`)。打开有 [异常时暂停(Pause On Caught Exceptions)](http://stackoverflow.com/questions/2233339/javascript-is-there-a-way-to-get-chrome-to-break-on-all-errors/17324511#17324511) 选项,能够获得更好的开发体验。 + +> 注意:Chrome 中并不能直接看到 App 的用户界面,而只能提供 console 的输出,以及在 sources 项中断点调试 js 脚本。一些老的教程和文章会提到 React 的 Chrome 插件,这一插件目前并不支持 React Native,而且调试本身并不需要这个插件。不过你可以安装独立(非插件)版本的 React Developer Tools 来辅助查看界面布局,下文会讲述具体安装方法。 + +> 注意:使用 Chrome 调试目前无法观测到 React Native 中的网络请求,你可以使用功能更强大的第三方的 [react-native-debugger](https://github.com/jhen0409/react-native-debugger)来进行观测。 + +### 使用自定义的 JavaScript 调试器来调试 +如果想用其他的 JavaScript 调试器来代替 Chrome,可以设置一个名为 `REACT_DEBUGGER` 的环境变量,其值为启动自定义调试器的命令。调试的流程依然是从开发者菜单中的 "Debug JS Remotely" 选项开始。 + +被指定的调试器需要知道项目所在的目录(可以一次传递多个目录参数,以空格隔开)。例如,如果你设定了 `REACT_DEBUGGER="node /某个路径/launchDebugger.js --port 2345 --type ReactNative"`,那么启动调试器的命令就应该是 `node /某个路径/launchDebugger.js --port 2345 --type ReactNative /某个路径/你的RN项目目录`。 + +> 以这种方式执行的调试器最好是一个短进程(short-lived processes),同时最好也不要有超过 200k 的文字输出。 + +### 使用 Chrome 开发者工具来在设备上调试 +> If you're using Create React Native App, this is configured for you already. + +对于 iOS 真机来说,需要打开 RCTWebSocketExecutor.m 文件,然后将其中的 "localhost" 改为你的电脑的 IP 地址,最后启用开发者菜单中的 "Debug JS Remotely" 选项。 + +对于 Android 5.0+设备(包括模拟器)来说,将设备通过 USB 连接到电脑上后,可以使用adb命令行工具来设定从设备到电脑的端口转发: + +```sh +adb reverse tcp:8081 tcp:8081 +``` + +如果设备 Android 版本在 5.0 以下,则可以在开发者菜单中选择"Dev Settings - Debug server host for device",然后在其中填入电脑的”IP 地址:端口“。 + +如果在 Chrome 调试时遇到一些问题,那有可能是某些 Chrome 的插件引起的。试着禁用所有的插件,然后逐个启用,以确定是否某个插件影响到了调试。 + +### 使用 React Developer Tools 调试 +You can use [the standalone version of React Developer Tools](https://github.com/facebook/react-devtools/tree/master/packages/react-devtools) to debug the React component hierarchy. To use it, install the react-devtools package globally: + +```sh +npm install -g react-devtools +``` + +> 译注:react-devtools 依赖于 electron,而 electron 需要到国外服务器下载二进制包,所以国内用户这一步很可能会卡住。此时请在环境变量中添加 electron 专用的国内镜像源:ELECTRON_MIRROR="https://npm.taobao.org/mirrors/electron/",然后再尝试安装 react-devtools。 + +安装完成后在命令行中执行 `react-devtools` 即可启动此工具: + +```sh +react-devtools +``` + +![image](https://reactnative.cn/docs/assets/ReactDevTools.png) + +It should connect to your simulator within a few seconds. + +> Note: if you prefer to avoid global installations, you can add react-devtools as a project dependency. Add the react-devtools package to your project using npm install --save-dev react-devtools, then add "react-devtools": "react-devtools" to the scripts section in your package.json, and then run npm run react-devtools from your project folder to open the DevTools. + +#### Integration with React Native Inspector +Open the in-app developer menu and choose "Show Inspector". It will bring up an overlay that lets you tap on any UI element and see information about it: + +![image](https://reactnative.cn/docs/assets/Inspector.gif) + +However, when `react-devtools` is running, Inspector will enter a special collapsed mode, and instead use the DevTools as primary UI. In this mode, clicking on something in the simulator will bring up the relevant components in the DevTools: + +![image](https://reactnative.cn/docs/assets/ReactDevToolsInspector.gif) + +You can choose "Hide Inspector" in the same menu to exit this mode. + +#### Inspecting Component Instances + +When debugging JavaScript in Chrome, you can inspect the props and state of the React components in the browser console. + +First, follow the instructions for debugging in Chrome to open the Chrome console. + +Make sure that the dropdown in the top left corner of the Chrome console says `debuggerWorker.js`. This step is essential. + +Then select a React component in React DevTools. There is a search box at the top that helps you find one by name. As soon as you select it, it will be available as `$r` in the Chrome console, letting you inspect its props, state, and instance properties. + +![image](https://reactnative.cn/docs/assets/ReactDevToolsDollarR.gif) + +### 使用 React Native Debugger 调试 + +[React Native Debugger ](https://github.com/jhen0409/react-native-debugger),一个基于 React Native 官方调试方式、包含 React Inspector / Redux DevTools 独立应用: + +- 基于官方的 [Remote Debugger](https://facebook.github.io/react-native/docs/debugging.html#chrome-developer-tools) 且提供了更为丰富的功能 +- 包含 [`react-devtools-core`](https://github.com/facebook/react-devtools/tree/master/packages/react-devtools-core) 的 [React Inspector](https://github.com/jhen0409/react-native-debugger/blob/master/docs/react-devtools-integration.md) +- 包含 Redux DevTools,且与 [`redux-devtools-extension`](https://github.com/zalmoxisus/redux-devtools-extension) 保持 [API](https://github.com/jhen0409/react-native-debugger/blob/master/docs/redux-devtools-integration.md) 一致 + +![image](https://user-images.githubusercontent.com/3001525/29451479-6621bf1a-83c8-11e7-8ebb-b4e98b1af91c.png) + +#### 安装 + +不同平台及版本的安装包,请点击[这里](https://github.com/jhen0409/react-native-debugger/releases)。 + +**macOS** 平台可以使用 [Homebrew Cask](https://caskroom.github.io/) 安装: + +```sh +$ brew update && brew cask install react-native-debugger +``` + +#### 启动 + +在启动 React Native Debugger 之前,请先确认以下内容: + +- 所有的 React Native 的 debugger 客户端已关闭,特别是 `http://localhost:/debugger-ui` +- React Native Debugger 会尝试连接 debugger 代理, React Native 默认使用 `8081` 端口, 你可以新建一个 debugger 窗口 (macOS: `Command + T`,Linux/Windows: `Ctrl + T`) 开定义端口 +- 保证 [developer menu](https://facebook.github.io/react-native/docs/debugging.html#accessing-the-in-app-developer-menu) 的 `Debug JS Remotely` 处于开启状态 + +你可以启动应用之后再修改端口,也可以直接通过命令行启动应用时指定端口: + +```sh +$ open "rndebugger://set-debugger-loc?host=localhost&port=8081" +``` + +> 如果启动之后调试窗口空白,请确认调试端口正确。 + +#### 使用 Redux DevTools Extension API + +Use the same API as [`redux-devtools-extension`](https://github.com/zalmoxisus/redux-devtools-extension#1-with-redux) is very simple: + +```jsx +const store = createStore( + reducer, /* preloadedState, */ + window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__() +) +``` + +See [`Redux DevTools Integration`](https://github.com/jhen0409/react-native-debugger/blob/master/docs/redux-devtools-integration.md) section for more information. + +#### 更多资料 + +- [快速开始](https://github.com/jhen0409/react-native-debugger/blob/master/docs/getting-started.md) +- [Debugger 整合](https://github.com/jhen0409/react-native-debugger/blob/master/docs/debugger-integration.md) +- [React DevTools 整合](https://github.com/jhen0409/react-native-debugger/blob/master/docs/react-devtools-integration.md) +- [Redux DevTools 整合](https://github.com/jhen0409/react-native-debugger/blob/master/docs/redux-devtools-integration.md) +- [Shortcut references](https://github.com/jhen0409/react-native-debugger/blob/master/docs/shortcut-references.md) +- [Network inspect of Chrome Developer Tools](https://github.com/jhen0409/react-native-debugger/blob/master/docs/network-inspect-of-chrome-devtools.md) +- [Enable open in editor in console](https://github.com/jhen0409/react-native-debugger/blob/master/docs/enable-open-in-editor-in-console.md) +- [Troubleshooting](https://github.com/jhen0409/react-native-debugger/blob/master/docs/troubleshooting.md) +- [Contributing](https://github.com/jhen0409/react-native-debugger/blob/master/docs/contributing.md) + +## 使用原生模块 +有一些平台性的差异是 Taro 无法抹平的,比如支付、登录等,这时候就需要自己写跨端代码,RN 端这边可能还需要修改原生代码。 + +例如登录的功能: + +![image](https://user-images.githubusercontent.com/9441951/56015544-ff513600-5d2b-11e9-92a6-ad01d21b2b8f.png) + +React Native 参考文档:[原生模块](https://reactnative.cn/docs/0.55/native-modules-ios/) + +## 集成到现有原生 app +Taro 编译后的项目实际上就是一个 native React Native 项目,所以集成到现有原生 app 的流程和 React Native 也是一样的。 + +如果你正准备从头开始制作一个新的应用,那么 React Native 会是个非常好的选择。但如果你只想给现有的原生应用中添加一两个视图或是业务流程,React Native 也同样不在话下。只需简单几步,你就可以给原有应用加上新的基于 React Native 的特性、画面和视图等。 + +React Native 参考文档:[集成到现有原生应用](https://reactnative.cn/docs/0.55/integration-with-existing-apps/) + +## 构建独立 app + +接下来的步骤将会帮助你为 iOS 和 Android 创建 Expo 应用程序的独立二进制文件,并将其提交到 Apple App Store 和 Google Play Store。 + +构建 iOS 独立应用程序需要 Apple Developer 帐户,但构建 Android 独立应用程序不需要 Google Play Developer 帐户。如果您想要提交到任一应用商店,您将需要该商店的开发者帐户。 + +在打包发布步骤之前,我们先对开发者的源代码进行预处理,将 Taro 代码转成 React Native 代码: + +``` bash +taro build --type rn +``` + +然后 `.rn_temp` 目录(如果你没有修改)下会生成转换后的 React Native 代码。 + +### 配置 app.json + +在 config 目录配置,如: + +```json +rn: { + appJson: { + "name": "Your App Name", + } +} +``` + +Taro 会读取 appJson 字段的内容且自动覆盖到 .rn_temp/app.json。 + +### 构建 app +首先使用 React Native 的 bundle 命令将 rn_temp 目录下的 RN 代码及资源打包成 jsbundle,命令如下: + +```sh +node ../node_modules/react-native/local-cli/cli.js bundle --entry-file ./rn_temp/index.js --bundle-output ./bundle/index.bundle --assets-dest ./${BUNDLE_DIR_NAME} --dev false +``` + +其中参数可以自行调整,`--bundle-output` 可以制定任意目录,然后将 bundle 目录下的文件 copy 到 `taro-native-shell`目录即可。 + +当然,也可以通过指定 `--bundle-output` 直接打包到 `taro-native-shell`目录。 + +接下来,按照 React Native 的文档按照不同的端分别打包对应的应用即可。 + +#### iOS + +参考文档:[在设备上运行](https://reactnative.cn/docs/0.55/running-on-device/) + +#### Android +参考文档:[打包APK](https://reactnative.cn/docs/0.55/signed-apk-android/) + +## 发布 +打包好的应用发布到 App Store 或各大应用商店可以查看官方文档。 + +- [Overview of publishing an app](https://help.apple.com/app-store-connect/#/dev34e9bbb5a) +- [Publish your app | Android Developers](https://developer.android.com/studio/publish) + +## 更新 React Native 版本 +Taro RN 版本暂时固定在 0.55.4 ,用户如有需求,可以自行升级到更高版本。步骤如下: + +1. 更新 Taro 项目中 `package.json` React Native 版本,并重新安装依赖 +2. 更新 `taro-native-shell` 项目中 `package.json` React Native 版本,并重新安装依赖 +3. 分别重新安装 `taro-native-shell` 项目中 ios/android 依赖,如 iOS:`cd ios && pod install` + +> 如果对 react 版本有要求,可以同步更新。 + +## 常见错误 + +### No bundle url present + +导致这个报错的原因很多,最常见的是电脑开了代理。具体可以参考 [#12754](https://github.com/facebook/react-native/issues/12754) + +### UnableToResolveError: Unable to resolve module `AccessibilityInfo` + +原因很多,我这边是重启电脑就好了😂。 具体可以查看 [#14209](https://github.com/facebook/react-native/issues/14209) + +### Metro Bundler error: Expected path […] to be relative to one of the project roots + +不支持 `npm link`,可以使用 [nicojs/node-install-local](https://github.com/nicojs/node-install-local) 替代。 + +### Image component does not resolve images with filenames that include '@' symbol + +![image](https://user-images.githubusercontent.com/22125059/44312799-373dee80-a3d4-11e8-8367-9cf44e851739.PNG) + +React Native 不支持路径中带 @ 符号,具体可以查看 [#14980](https://github.com/facebook/react-native/issues/14980)。 + +### The development server returned response error code 500 + +![image](https://user-images.githubusercontent.com/25324938/41452372-42c1e766-708f-11e8-96ce-323eaa1eb03f.jpeg) +多半是依赖的问题,进入 `.rn_temp/` 目录,然后删除 npm 依赖,在重新安装就可以了。 +也可以试一下以下命令: + +```shell +watchman watch-del-all +rm -rf node_modules && npm install +rm -fr $TMPDIR/react-* +``` + +具体可以参考 [#1282](https://github.com/expo/expo/issues/1282) + +### app 加载阻塞: "Building JavaScript bundle... 100%" + +![image](https://user-images.githubusercontent.com/9441951/47762170-7bb00980-dcf6-11e8-95ab-41152076c3de.png) + +可能的原因很多,可以参考这个 issue:[react-community/create-react-native-app#392](https://github.com/react-community/create-react-native-app/issues/392) + +## 参考 + +- [React Native 中文网](https://reactnative.cn/) +- [Android 开发文档](https://developer.android.com/guide?hl=zh-cn) +- [Android Studio 用户指南](https://developer.android.com/studio/intro?hl=zh-cn) +- [Apple Developer Documentation](https://developer.apple.com/documentation/) +- [React Native Debugger ](https://github.com/jhen0409/react-native-debugger) diff --git a/website/versioned_docs/version-2.0.0-beta.13/components/forms/button.md b/website/versioned_docs/version-2.0.0-beta.13/components/forms/button.md new file mode 100644 index 000000000000..fa6363572acb --- /dev/null +++ b/website/versioned_docs/version-2.0.0-beta.13/components/forms/button.md @@ -0,0 +1,111 @@ +--- +title: Button +sidebar_label: Button +id: version-2.0.0-beta.13-button +original_id: button +--- + +##### 按钮 + +> 属性及支持度 + +| H5 | ReactNative| Quickapp| 属性名 | 类型 | 默认值 | 说明 | +| :-: | :-: | :-: | :- | :- | :- | :- | +| ✔ | ✔ | ✔ | type | String | default | 按钮的样式类型 | +| ✔ | ✔ | ✔ | size | String | default | 按钮的大小 px | +| ✔ | ✔ | ✔ | plain | Boolean | false | 按钮是否镂空,背景色透明 | +| ✔ | ✔ | ✔ | disabled | Boolean | false | 是否禁用 | +| ✔ | ✔ | ✔ | loading | Boolean | false | 名称前是否带 loading 图标 | +| ✔ | X (支持 hoverStyle 属性,但框架未支持 hoverClass) | X(支持 active 伪类状态变化) | hoverClass | String | button-hover | 指定按钮按下去的样式类。当 hover-class='none' 时,没有点击态效果 | +| ✔ | ✔ | X | hoverStartTime | Number | 20 | 按住后多久出现点击态,单位毫秒 | +| ✔ | ✔ | X | hoverStayTime | Number | 70 | 手指松开后点击态保留时间,单位毫秒 | +| X | X | X | onGetUserInfo | Handler | | 微信小程序open-type='getUserInfo'时,用户点击该按钮,会返回获取到的用户信息,从返回参数的 detail 中获取到的值同 wx.getUserInfo | + +>其他相关属性请看各小程序官方文档 + +[微信小程序 Button](https://developers.weixin.qq.com/miniprogram/dev/component/button.html)。 + +[百度小程序 Button](https://smartprogram.baidu.com/docs/develop/component/formlist/#button)。 + +[支付宝小程序 Button](https://docs.alipay.com/mini/component/button)。 + +[字节跳动小程序 Button](https://developer.toutiao.com/docs/comp/button.html)。 + + + +###### 示例: +```jsx +import Taro, { Component } from '@tarojs/taro' +import { View, Text, Button } from '@tarojs/components' + +export default class PageButton extends Component { + state = { + btn: [ + { + text: '页面主操作 Normal', + size: 'default', + type: 'primary' + }, + { + text: '页面主操作 Loading', + size: 'default', + type: 'primary', + loading: true, + }, + { + text: '页面主操作 Disabled', + size: 'default', + type: 'primary', + disabled: true, + }, + { + text: '页面次要操作 Normal', + size: 'default', + type: 'default' + }, + { + text: '页面次要操作 Disabled', + size: 'default', + type: 'default', + disabled: true, + }, + { + text: '警告类操作 Normal', + size: 'default', + type: 'warn' + }, + { + text: '警告类操作 Disabled', + size: 'default', + type: 'warn', + disabled: true, + } + ] + } + render () { + return ( + + {this.state.btn.map(item => { + return ( + + ) + })} + + + + + + + + + ) + } +} +``` diff --git a/website/versioned_docs/version-2.0.0-beta.13/debug-config.md b/website/versioned_docs/version-2.0.0-beta.13/debug-config.md new file mode 100644 index 000000000000..74a188f1c6d4 --- /dev/null +++ b/website/versioned_docs/version-2.0.0-beta.13/debug-config.md @@ -0,0 +1,101 @@ +--- +title: 单步调测配置 +id: version-2.0.0-beta.13-debug-config +original_id: debug-config +--- + +> 通过本身 `VSCode` 提供的跨平台代码单步调测能力,能够极大提升基于 `Taro` 开发框架的应用开发速度,因其他平台已有比较成熟的工具可以使用,着重降低 Windows 平台配置复杂度。 + +## 一、开发环境搭建 + +首先准备 `Taro` 在 Windows 下的基础开发环境,详情如下(已有开发环境可略过): + +#### 1. 安装 Node.js +建议安装 `10.15` 以上版本,官方下载地址:[Node.js](https://nodejs.org/dist/v12.14.0/node-v12.14.0-x64.msi " node.js") + +#### 2. 安装 VSCode + +安装完最新 `VSCode` 后,建议安装如下插件: +- `ESlint` — 代码规范 +- `TSlint` — 语法检查 + +#### 3. Taro 源码下载 +下载地址:[Taro](https://github.com/NervJS/taro.git "Taro"),默认为 2.x 分支,如有需要,请切换到开发分支 + +#### 4. 全局安装 Node-sass 、Lerna 和 Rollup +```shell +npm i -g node-sass --sass_binary site=https://npm.taobao.org/mirrors/node_sass/ +yarn global add lerna +yarn global add rollup +``` +> Node-sass 比较特殊,建议提前进行安装,规避可能出现的各种异常错误。 + +#### 5. 源码依赖安装 +1.使用 `VSCode` 打开 `Taro` 源码目录,在根目录下执行 `yarn` ,安装项目所需依赖库(首次安装所花时间较长,请耐心等待) + +2.待 `yarn` 执行完毕后,执行 `yarn bootstrap` 解析子包之间的依赖关系 + +## 二、单步调试配置 + +#### 1. 拷贝测试项目 +进入 `taro cli` 目录,将需要调试的测试项目拷贝至根目录,以测试项目命名 `test` 为例 + +#### 2. 在测试项目中添加 `js` 入口 +进入测试项目根目录,新增 `debug.js` 调试入口文件,文件内容如下: +```javascript +const Builder = require('../dist/build').default +const appPath = process.cwd() +const builder = new Builder(appPath) + +builder.build({ + type: 'weapp', + watch: 'watch' + }) +``` +> 调试入口文件名可自定义设置 + +#### 3. 增加 VSCode 调试参数配置 +打开 `taro cli` 所在 Windows 文件夹,进入目录下的 `.vscode` 子目录,在 `lanuch.json` 文件中新增调试入口参数,设置如下: +```shell +{ + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "name": "debug.js", + "request": "launch", + "sourceMaps": true, + "args": [ + "--runInBand", + "-r", + "ts-node/register" + ], + "cwd": "${workspaceFolder}/packages/taro-cli/debug", + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen", + "program": "${workspaceFolder}/packages/taro-cli/test/debug.js" + } + ] +} +``` +> 若 `.vscode` 目录或 `lanuch.json` 文件不存在,需手动创建;同时 `name` 、`cwd` 、`program` 三个参数根据测试项目的实际名称、目录进行调整 + +#### 2. 编译子包 +在 `node.js` 调试过程中只能调用 `js` 文件,调试过程所依赖的 `taro` 子模块,需要进入子模块根目录,执行编译命令,将 `ts` 代码编译打包成 `js` 代码之后,才能进行调试,主要编译如下关键子包: + +| 模块名称 | 功能描述 | 编译方式 | +| :------------ |:---------------:| -----:| +| taro-cli | Taro开发工具转换总入口 | yarn dev | +| taroize | Taro小程序编译器,主要负责小程序转Taro | yarn dev | +| taro-mini-runner | Taro编译时,webpack插件化管理打包任务 | yarn dev | +| taro-transformer-wx | Taro解析模块,解析AST目录树 | yarn dev | + +#### 3.链接未发布的库 +为了测试代码更改效果,或依赖未正式发布的包,可通过软链接的方式,将最新代码链接到测试目录下进行测试,同时保持子模块的 `watch` 状态,可以实时更新修改代码,此处以 `taro-mini-runner` 举例: + +1.首先进入 `taro-mini-runner` 根目录,执行 `yarn link` 命令 + +2.进入测试项目 `test` 的根目录,执行 `Debug and Run` , `yarn link taro-mini-runner` 命令进行软链接 + +#### 4.启动调试 +在编译后的 `js` 文件中打断点,在 `VSCode` 左侧按钮列表中,选择启动调试 `Debug and Run` 按钮,在出现的选择框列表中,选择需要启动的测试项目,启动调试,即可开始单步调试。 \ No newline at end of file diff --git a/website/versioned_docs/version-2.0.0-beta.2/config-detail.md b/website/versioned_docs/version-2.0.0-beta.2/config-detail.md new file mode 100644 index 000000000000..ed9993f1c4cb --- /dev/null +++ b/website/versioned_docs/version-2.0.0-beta.2/config-detail.md @@ -0,0 +1,853 @@ +--- +title: 编译配置详情 +id: version-2.0.0-beta.2-config-detail +original_id: config-detail +--- + +## designWidth + +`designWidth` 用来设置设计稿尺寸,关于这一部分的配置说明请见[设计稿及尺寸单位](./size.md)这一章节。 + +## sourceRoot + +`sourceRoot` 用来设置源码存放目录,通过 Taro 开发工具初始化后的项目源码目录都是 `src`,你可以通过修改这一配置来重新指定源码目录。 + +## outputRoot + +`outputRoot` 用来设置代码编译后的生产目录,通过 Taro 开发工具初始化后的生产目录都是 `dist`,你可以通过修改这一配置来重新指定生产目录。 + +## plugins + +`plugins` 用来设置编译过程插件,插件机制基于 实现,目前暴露了两个钩子 `beforeBuild` 和 `afterBuild` + +其中,`beforeBuild` 将在整体编译前触发,可以获取到编译的相关配置,同时也能进行修改 + +`afterBuild` 将在 webpack 编译完后执行,可以获取到编译后的结果 + +具体使用方式如下: + +首先定义一个插件 + +```js +class BuildPlugin { + apply (builder) { + builder.hooks.beforeBuild.tap('BuildPlugin', (config) => { + console.log(config) + }) + + builder.hooks.afterBuild.tap('BuildPlugin', (stats) => { + console.log(stats) + }) + } +} +``` + +接下来在 `plugins` 字段中进行配置 + +```js +{ + plugins: [ + new BuildPlugin() + ] +} +``` + +## babel + +用来配置 `babel`,默认配置如下,可以自行添加自己需要的额外的 `presets` 及 `plugins`。 + +```jsx +babel: { + sourceMap: true, + presets: [ + 'env' + ], + plugins: [ + 'transform-class-properties', + 'transform-decorators-legacy', + 'transform-object-rest-spread' + ] +} +``` + +## uglify + +用来配置 `UgligyJS` 工具,设置打包过程中的 JS 代码压缩。可以通过 `uglify.enable` 来设置是否开启压缩,若设置开启,则可以通过 `uglify.config` 来设置 `UgligyJS` 的配置项,具体配置方式如下: + +```jsx +uglify: { + enable: true, + config: { + // 配置项同 https://github.com/mishoo/UglifyJS2#minify-options + } +} +``` + +## csso + +用来配置 `csso` 工具,设置打包过程中的 CSS 代码压缩。可以通过 `csso.enable` 来设置是否开启压缩,若设置开启,则可以通过 `csso.config` 来设置 `csso` 的配置项,具体配置方式如下: + +```jsx +csso: { + enable: true, + config: { + // 配置项同 https://github.com/css/csso#minifysource-options + } +} +``` + +## sass + +用来配置 `sass` 工具,设置打包过程中的 SCSS 代码编译。 +具体配置可以参考[node-sass](https://www.npmjs.com/package/node-sass) +当需要全局注入scss文件时,可以添加三个额外参数:`resource` 、 `projectDirectory` (v1.2.25开始支持)、`data`(v1.3.0开始支持),具体配置方式如下: + +#### 单文件路径形式 + +当只有 `resource` 字段时,可以传入 scss 文件的绝对路径。 + +```js +sass: { + resource: path.resolve(__dirname, '..', 'src/styles/variable.scss') +} +``` + +#### 多文件路径形式 + +此外,当只有 `resource` 字段时,也可以传入一个路径数组。 + +```js +sass: { + resource: [ + path.resolve(__dirname, '..', 'src/styles/variable.scss'), + path.resolve(__dirname, '..', 'src/styles/mixins.scss') + ] +} +``` + +#### 指定项目根目录路径形式 + +你可以额外配置 `projectDirectory` 字段,这样你就可以在 `resource` 里写相对路径了。 + +```js +sass: { + resource: [ + 'src/styles/variable.scss', + 'src/styles/mixins.scss' + ], + projectDirectory: path.resolve(__dirname, '..') +} +``` + +#### 传入 scss 变量字符串 + +```js +sass: { + resource: [ + 'src/styles/variable.scss', + 'src/styles/mixins.scss' + ], + projectDirectory: path.resolve(__dirname, '..'), + data: '$nav-height: 48px;' +} +``` + +* resource: 如果要引入多个文件,支持数组形式传入 +* projectDirectory: 项目根目录的绝对地址(若为小程序云开发模板,则应该是client目录) +* data: 全局 scss 变量,若 data 与 resource 中设置了同样的变量,则 data 的优先级高于 resource + +## env + +用来设置一些环境变量如 `process.env.NODE_ENV`,例如我们想设置区分预览、打包来做些不同的操作,可以如下配置: + +在 `config/dev.js` 中: + +```jsx +env: { + NODE_ENV: '"development"' // JSON.stringify('development') +} +``` + +在 `config/prod.js` 中: + +```jsx +env: { + NODE_ENV: '"production"' // JSON.stringify('production') +} +``` + +这样就能在代码中通过 `process.env.NODE_ENV === 'development'` 来判断环境。 + +## defineConstants + +用来配置一些全局变量供代码中进行使用,例如: + +```js +defineConstants: { + A: '"a"' // JSON.stringify('a') +} +``` + +## alias + +> `1.2.0` 开始支持。 + +用来配置目录别名,从而方便书写代码引用路径。例如,使用相对路径书写文件引用如下: + +```js +import A from '../../componnets/A' +import Utils from '../../utils' +import packageJson from '../../package.json' +import projectConfig from '../../project.config.json' +``` + +为了避免书写多级相对路径,我们可以如下配置 `alias`: + +```js +alias: { + '@/components': path.resolve(__dirname, '..', 'src/components'), + '@/utils': path.resolve(__dirname, '..', 'src/utils'), + '@/package': path.resolve(__dirname, '..', 'package.json'), + '@/project': path.resolve(__dirname, '..', 'project.config.json'), +} +``` + +通过上述配置,可以将 `src/components` 和 `src/utils` 目录配置成别名,将根目录下的 `package.json` 和 `project.config.json` 文件配置成别名,则代码中的引用改写如下: + +```js +import A from '@/components/A' +import Utils from '@/utils' +import packageJson from '@/package' +import projectConfig from '@/project' +``` + +为了让编辑器(VS Code)不报错,并继续使用自动路径补全的功能,需要在项目根目录下的 `jsconfig.json` 或者 `tsconfig.json` 中配置 `paths` 让编辑器认得我们的别名,形式如下: + +```json +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/components/*": ["./src/components/*"], + "@/utils/*": ["./src/utils/*"], + "@/package": ["./package.json"], + "@/project": ["./project.config.json"], + } + } +} +``` + +*建议别名使用 `@/` 开头而非仅用 `@` 开头,因为有小概率会与某些 `scoped` 形式的 `npm` 包(行如:[@tarojs/taro](https://npm.im/@tarojs/taro), [@babel/core](https://npm.im/@babel/core))产生命名冲突。* + +## copy + +文件 copy 配置,包含两个配置项 `patterns` 和 `options`。 + +### copy.patterns + +用来指定需要拷贝的文件或者目录,**数组类型**,每一项都必须包含 `from` 、`to` 的配置,分别代表来源和需要拷贝到的目录,同时可以设置 `ignore` 配置来指定需要忽略的文件, `ignore` 是指定的 [glob](https://github.com/isaacs/node-glob) 类型字符串,或者 glob 字符串数组。 + +值得注意的是,目前 `from` 必须指定存在的文件或者目录,暂不支持 glob 格式, `from` 和 `to` 直接置顶项目根目录下的文件目录,建议 `from` 以 `src` 目录开头,`to` 以 `dist` 目录开头。 + +一般有如下的使用形式: + +```jsx +copy: { + patterns: [ + { from: 'src/asset/tt/', to: 'dist/asset/tt/', ignore: '*.js' }, // 指定需要 copy 的目录 + { from: 'src/asset/tt/sd.jpg', to: 'dist/asset/tt/sd.jpg' } // 指定需要 copy 的文件 + ] +}, +``` + +### copy.options + +拷贝配置,目前可以指定全局的 ignore: + +```jsx +copy: { + options: { + ignore: ['*.js', '*.css'] // 全局的 ignore + } +} +``` + +## mini + +专属于小程序的配置。 + +### mini.compile + +小程序编译过程的相关配置。 + +#### mini.compile.compressTemplate + +决定小程序打包时是否需要压缩 wxml + +#### mini.compile.exclude + +配置小程序编译过程中排除不需要经过 Taro 编译的文件,数组类型,写文件路径,文件路径必须以源码所在 `src` 目录开头: + +```jsx +mini: { + compile: { + exclude: ['src/components/ec-canvas/echarts.js'] + } +} +``` + +### mini.webpackChain + +自定义 Webpack 配置,接受函数形式的配置。 + +这个函数会收到两个参数,第一个参数是 webpackChain 对象,可参考 [webpack-chain](https://github.com/neutrinojs/webpack-chain) 的 api 进行修改;第二个参数是 `webpack` 实例。例如: + +```jsx +// 这是一个添加 raw-loader 的例子,用于在项目中直接引用 md 文件 +{ + webpackChain (chain, webpack) { + chain.merge({ + module: { + rule: { + myloader: { + test: /\.md$/, + use: [{ + loader: 'raw-loader', + options: {} + }] + } + } + } + }) + } +} +``` + +```jsx +// 这是一个添加插件的例子 +{ + webpackChain (chain, webpack) { + chain.merge({ + plugin: { + install: { + plugin: require('npm-install-webpack-plugin'), + args: [{ + // Use --save or --save-dev + dev: false, + // Install missing peerDependencies + peerDependencies: true, + // Reduce amount of console logging + quiet: false, + // npm command used inside company, yarn is not supported yet + npm: 'cnpm' + }] + } + } + }) + } +} +``` + +### mini.cssLoaderOption + +css-loader 的附加配置。配置项参考[官方文档](https://github.com/webpack-contrib/css-loader),例如: + +```jsx +{ + cssLoaderOption: { + localIdentName: '[hash:base64]' + } +} +``` + +### mini.styleLoaderOption + +style-loader 的附加配置。配置项参考[官方文档](https://github.com/webpack-contrib/style-loader),例如: + +```jsx +{ + styleLoaderOption: { + insertAt: 'top' + } +} +``` + +### mini.sassLoaderOption + +sass-loader 的附加配置。配置项参考[官方文档](https://github.com/webpack-contrib/sass-loader),例如: + +```jsx +{ + sassLoaderOption: { + implementation: require("dart-sass") + } +} +``` + +### mini.lessLoaderOption + +less-loader 的附加配置。配置项参考[官方文档](https://github.com/webpack-contrib/less-loader),例如: + +```jsx +{ + lessLoaderOption: { + strictMath: true, + noIeCompat: true + } +} +``` + +### mini.stylusLoaderOption + +stylus-loader 的附加配置。配置项参考[官方文档](https://github.com/shama/stylus-loader)。 + +### mini.mediaUrlLoaderOption + +针对 `mp4 | webm | ogg | mp3 | wav | flac | aac` 文件的 url-loader 配置。配置项参考[官方文档](https://github.com/webpack-contrib/url-loader),例如: + +```jsx +{ + mediaUrlLoaderOption: { + limit: 8192 + } +} +``` + +### mini.fontUrlLoaderOption + +针对 `woff | woff2 | eot | ttf | otf` 文件的 url-loader 配置。配置项参考[官方文档](https://github.com/webpack-contrib/url-loader)。 + +### mini.imageUrlLoaderOption + +针对 `png | jpg | jpeg | gif | bpm | svg` 文件的 url-loader 配置。配置项参考[官方文档](https://github.com/webpack-contrib/url-loader)。 + +### mini.miniCssExtractPluginOption + +`mini-css-extract-plugin` 的附加配置,在 `enableExtract` 为 `true` 的情况下生效。 +配置项参考[官方文档](https://github.com/webpack-contrib/mini-css-extract-plugin),例如: + +```jsx +{ + miniCssExtractPluginOption: { + filename: '[name].css', + chunkFilename: '[name].css' + } +} +``` + +### mini.postcss + +配置 `postcss` 相关插件: + +```jsx +postcss: { + // 可以进行 autoprefixer 的配置。配置项参考官方文档 https://github.com/postcss/autoprefixer + autoprefixer: { + enable: true, + config: { + // autoprefixer 配置项 + } + }, + pxtransform: { + enable: true, + config: { + // pxtransform 配置项,参考尺寸章节 + selectorBlackList: ['body'] + } + }, + // 小程序端样式引用本地资源内联 + url: { + enable: true, + config: { + limit: 10240 // 设定转换尺寸上限 + } + }, + // css modules 功能开关与相关配置 + cssModules: { + enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true + config: { + generateScopedName: '[name]__[local]___[hash:base64:5]' + } + } +} +``` + +## h5 + +专属于 H5 的配置。 + +### h5.devServer + +预览服务的配置,可以更改端口等参数。具体配置参考 [webpack-dev-server](https://webpack.js.org/configuration/dev-server)。 + +```js +devServer: { + port: 10086 +} +``` + +默认是 `http` 服务,如果想开启 `https` 服务需要做如下配置。 + +```js +devServer: { + https: true +} +``` + +### h5.output + +输出配置 + +```js +output: { + filename: 'js/[name].[hash:8].js', + chunkFilename: 'js/[name].[chunkhash:8].js' +} +``` + +### h5.publicPath + +设置输出解析文件的目录。 + +### h5.staticDirectory + +h5 编译后的静态文件目录。 + +### h5.chunkDirectory + +编译后非 entry 的 js 文件的存放目录,主要影响动态引入的 `pages` 的存放路径。 + +### h5.webpackChain + +自定义 Webpack 配置,接受函数形式的配置。 + +这个函数会收到两个参数,第一个参数是 webpackChain 对象,可参考 [webpack-chain](https://github.com/neutrinojs/webpack-chain) 的 api 进行修改;第二个参数是 `webpack` 实例。例如: + +```jsx +// 这是一个添加 ts-loader 的例子,但事实上 taro 是默认支持 ts 的,并不需要这样做。 +{ + webpackChain (chain, webpack) { + chain.merge({ + module: { + rule: { + myloader: { + test: /.tsx?/, + use: [{ + loader: 'ts-loader', + options: {} + }] + } + } + } + }) + } +} +``` + +```jsx +// 这是一个添加插件的例子 +{ + webpackChain (chain, webpack) { + chain.merge({ + plugin: { + install: { + plugin: require('npm-install-webpack-plugin'), + args: [{ + // Use --save or --save-dev + dev: false, + // Install missing peerDependencies + peerDependencies: true, + // Reduce amount of console logging + quiet: false, + // npm command used inside company, yarn is not supported yet + npm: 'cnpm' + }] + } + } + }) + } +} +``` + +### [DEPRECATED]h5.webpack + +自定义 Webpack 配置。这个配置项支持两种形式的配置: + +1. 如果该配置项以**对象**的形态呈现,Taro 将会使用 `webpack-merge` 将这个对象合并到默认的配置项中。 +例子: + +```jsx +webpack: { + resolve: { + alias: { + 'test': './test' + } + } +} +``` + +2. 如果该配置以**函数**的形态呈现,那这个函数将会接收到两个参数:默认配置(defaultConfig)和 Webpack 实例(webpack)。Taro 将会以该函数的返回值作为最终的 Webpack 配置。 + +例子: + +```jsx +webpack (defaultConfig, webpack) { + defaultConfig.plugins.push( + new webpack.EnvironmentPlugin(['NODE_ENV']) + ) + return defaultConfig +} +``` + +### h5.router + +路由相关的配置,支持路由模式、路由基准路径以及自定义路由的配置。 + +#### h5.router.mode + +路由模式配置。配置值为 `hash`(默认值)或 `browser`,分别对应 hash 路由模式和浏览器 history 路由模式。例子: + +```js +h5: { + /* 其他配置 */ + ... , + router: { + mode: 'hash' // 或者是 'browser' + } +} +``` + +针对上面的配置,调用 `Taro.navigateTo({ url: '/pages/index/index' })` 后,浏览器地址栏将被变为 `http://{{domain}}/#/pages/index/index`(hash 模式)或者 `http://{{domain}}/pages/index/index`(browser 模式)。 + +#### h5.router.basename + +路由基准路径的配置,配置值为 `string` 类型。例子: + +```js +h5: { + /* 其他配置 */ + ... , + router: { + basename: '/myapp' + } +} +``` + +针对上面的配置,调用 `Taro.navigateTo({ url: '/pages/index/index' })` 后,浏览器地址栏将被变为 `http://{{domain}}/#/myapp/pages/index/index`(hash 模式)或者 `http://{{domain}}/myapp/pages/index/index`(browser 模式)。 + +#### h5.router.customRoutes + +自定义路由的配置,配置值为 `{ [key: string]: string }` 类型。例子: + +```js +h5: { + /* 其他配置 */ + ... , + router: { + customRoutes: { + '/pages/index/index': '/index' + } + } +} +``` + +针对上面的配置,调用 `Taro.navigateTo({ url: '/pages/index/index' })` 后,浏览器地址栏将被变为 `http://{{domain}}/#/index`(hash 模式)或者 `http://{{domain}}/myapp/index`(browser 模式)。 + +### h5.entry + +Taro app 的入口,同 [webpack.entry](https://webpack.js.org/configuration/entry-context/#entry)。 + +```jsx +{ + entry: { + home: ['./home.js'], + about: ['./about.js'], + contact: ['./contact.js'] + } +} +``` + +### h5.enableSourceMap + +sourceMap 开关,影响 js、css 的 sourceMap 配置。 +dev 状态默认 **开**,prod 状态默认 **关**。 + +### h5.enableDll + +dll 开关,开启后将使用 `dllPlugin` 把内置的部分依赖库打包为单独的 dll 文件, +某种程度上可以减少首屏单个文件体积。 +dev 状态默认 **关**,prod 状态默认 **开**。 + +### h5.dllWebpackChain + +同 `h5.webpackChain`,不过作用于 dll。 + +### h5.dllEntry + +dll编译过程的 `entry` 配置项,决定了 dll 文件的内容,可参考 [webpack.entry](https://webpack.js.org/configuration/entry-context/#entry)。默认值: + +```js +h5: { + /* 其他配置 */ + ..., + dllEntry: { + lib: ['nervjs', '@tarojs/taro-h5', '@tarojs/router', '@tarojs/components'] + } +} +``` + +### h5.enableExtract + +extract 功能开关,开启后将使用 `mini-css-extract-plugin` 分离 css 文件, +可通过 `h5.miniCssExtractPluginOption` 对插件进行配置。 +dev 状态默认 **关**,prod 状态默认 **开**。 + +### h5.esnextModules + +配置需要额外的编译的源码模块,比如 [taro-ui](https://github.com/NervJS/taro-ui): + +```javascript +h5: { + // 经过这一配置之后,代码中引入的处于 `node_modules/taro-ui/` 路径下的源码文件均会经过taro的编译处理。 + esnextModules: ['taro-ui'], + ... +} +``` + +### h5.cssLoaderOption + +css-loader 的附加配置。配置项参考[官方文档](https://github.com/webpack-contrib/css-loader),例如: + +```jsx +{ + cssLoaderOption: { + localIdentName: '[hash:base64]' + } +} +``` + +### h5.styleLoaderOption + +style-loader 的附加配置。配置项参考[官方文档](https://github.com/webpack-contrib/style-loader),例如: + +```jsx +{ + styleLoaderOption: { + insertAt: 'top' + } +} +``` + +### h5.sassLoaderOption + +sass-loader 的附加配置。配置项参考[官方文档](https://github.com/webpack-contrib/sass-loader),例如: + +```jsx +{ + sassLoaderOption: { + implementation: require("dart-sass") + } +} +``` + +### h5.lessLoaderOption + +less-loader 的附加配置。配置项参考[官方文档](https://github.com/webpack-contrib/less-loader),例如: + +```jsx +{ + lessLoaderOption: { + strictMath: true, + noIeCompat: true + } +} +``` + +### h5.stylusLoaderOption + +stylus-loader 的附加配置。配置项参考[官方文档](https://github.com/shama/stylus-loader)。 + +### h5.mediaUrlLoaderOption + +针对 `mp4 | webm | ogg | mp3 | wav | flac | aac` 文件的 url-loader 配置。配置项参考[官方文档](https://github.com/webpack-contrib/url-loader),例如: + +```jsx +{ + mediaUrlLoaderOption: { + limit: 8192 + } +} +``` + +### h5.fontUrlLoaderOption + +针对 `woff | woff2 | eot | ttf | otf` 文件的 url-loader 配置。配置项参考[官方文档](https://github.com/webpack-contrib/url-loader)。 + +### h5.imageUrlLoaderOption + +针对 `png | jpg | jpeg | gif | bpm | svg` 文件的 url-loader 配置。配置项参考[官方文档](https://github.com/webpack-contrib/url-loader)。 + +### h5.miniCssExtractPluginOption + +`mini-css-extract-plugin` 的附加配置,在 `enableExtract` 为 `true` 的情况下生效。 +配置项参考[官方文档](https://github.com/webpack-contrib/mini-css-extract-plugin),例如: + +```jsx +{ + miniCssExtractPluginOption: { + filename: 'css/[name].css', + chunkFilename: 'css/[id].css' + } +} +``` + +### h5.postcss + +配置 H5 的 `postcss` 插件。 + +#### h5.postcss.autoprefixer + +可以进行 `autoprefixer` 的配置。配置项参考[官方文档](https://github.com/postcss/autoprefixer),例如: + +```jsx +postcss: { + autoprefixer: { + enable: true, + config: { + /* autoprefixer 配置项 */ + } + } +} +``` + +#### h5.postcss.pxtransform + +可以进行 `pxtransform` 的配置。配置项参考[官方文档](https://github.com/Pines-Cheng/postcss-pxtransform/),例如: + +```jsx +postcss: { + pxtransform: { + enable: true, + config: { + /* pxtransform 配置项 */ + } + } +} +``` + +#### h5.postcss.cssModules + +可以进行 H5 端 CSS Modules 配置,配置如下: + +```js +postcss: { + // css modules 功能开关与相关配置 + cssModules: { + enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true + config: { + namingPattern: 'module', + generateScopedName: '[name]__[local]___[hash:base64:5]' + } + } +} +``` diff --git a/website/versioned_docs/version-2.0.0-beta.2/config.md b/website/versioned_docs/version-2.0.0-beta.2/config.md new file mode 100644 index 000000000000..175459ba268f --- /dev/null +++ b/website/versioned_docs/version-2.0.0-beta.2/config.md @@ -0,0 +1,83 @@ +--- +title: 编译配置 +id: version-2.0.0-beta.2-config +original_id: config +--- + +编译配置存放于项目根目录下 `config` 目录中,包含三个文件 + +- `index.js` 是通用配置 +- `dev.js` 是项目预览时的配置 +- `prod.js` 是项目打包时的配置 + +## index.js —— 通用配置 + +```js +const config = { + // 项目名称 + projectName: 'kj', + // 项目创建日期 + date: '2018-6-8', + // 设计稿尺寸 + designWidth: 750, + // 项目源码目录 + sourceRoot: 'src', + // 项目产出目录 + outputRoot: 'dist', + // babel 编译配置 + babel: { + sourceMap: true, + presets: ['env'], + plugins: ['transform-class-properties', 'transform-decorators-legacy', 'transform-object-rest-spread'] + }, + // 编译插件配置 + plugins: [], + // 全局变量设置 + defineConstants: {}, + // 文件 copy 配置 + copy: { + patterns: [ + ], + options: { + } + }, + // 小程序端专用配置 + weapp: { + postcss: { + autoprefixer: { + enable: true + }, + // 小程序端样式引用本地资源内联配置 + url: { + enable: true, + config: { + limit: 10240 + } + } + }, + // 替换 JSX 中的属性名,参考: + // https://github.com/NervJS/taro/issues/2077 + jsxAttributeNameReplace: {} + }, + // H5 端专用配置 + h5: { + publicPath: '/', + staticDirectory: 'static', + postcss: { + autoprefixer: { + enable: true + } + }, + // 自定义 Webpack 配置 + webpackChain: {}, + devServer: {} + } +}; + +module.exports = function(merge) { + if (process.env.NODE_ENV === 'development') { + return merge({}, config, require('./dev')); + } + return merge({}, config, require('./prod')); +}; +``` diff --git a/website/versioned_docs/version-2.0.0-beta.3/README.md b/website/versioned_docs/version-2.0.0-beta.3/README.md new file mode 100644 index 000000000000..0d322f137dcb --- /dev/null +++ b/website/versioned_docs/version-2.0.0-beta.3/README.md @@ -0,0 +1,144 @@ +--- +title: Taro 介绍 +id: version-2.0.0-beta.3-README +original_id: README +--- + +> 这是 Taro 2.x 版本的文档,若要查看 1.x 版本的文档,请[点击这里选择版本](/taro/versions.html)。 + +## 简介 + +**Taro** 是一套遵循 [React](https://reactjs.org/) 语法规范的 **多端开发** 解决方案。 + +现如今市面上端的形态多种多样,Web、React-Native、微信小程序等各种端大行其道,当业务要求同时在不同的端都要求有所表现的时候,针对不同的端去编写多套代码的成本显然非常高,这时候只编写一套代码就能够适配到多端的能力就显得极为需要。 + +使用 **Taro**,我们可以只书写一套代码,再通过 **Taro** 的编译工具,将源代码分别编译出可以在不同端(微信/百度/支付宝/字节跳动/QQ小程序、快应用、H5、React-Native 等)运行的代码。 + +## 特性 + +#### React 语法风格 + +**Taro** 遵循 [React](https://reactjs.org/) 语法规范,它采用与 React 一致的组件化思想,组件生命周期与 React 保持一致,同时支持使用 [JSX 语法](jsx.html),让代码具有更丰富的表现力,使用 **Taro** 进行开发可以获得和 React 一致的开发体验。 + +代码示例 + +```jsx +import Taro, { Component } from '@tarojs/taro' +import { View, Button } from '@tarojs/components' + +export default class Index extends Component { + constructor () { + super(...arguments) + this.state = { + title: '首页', + list: [1, 2, 3] + } + } + + componentWillMount () {} + + componentDidMount () {} + + componentWillUpdate (nextProps, nextState) {} + + componentDidUpdate (prevProps, prevState) {} + + shouldComponentUpdate (nextProps, nextState) { + return true + } + + add = (e) => { + // dosth + } + + render () { + return ( + + {this.state.title} + + {this.state.list.map(item => { + return ( + {item} + ) + })} + + + + ) + } +} +``` + +> 由于微信小程序端的限制,有极少数 JSX 的优秀用法暂时不能得到很好地支持,同时,为了遵循 React 语法,Taro 在写法上也有一些自己的规范,具体可以参考:[Taro 开发最佳实践](best-practice.html) 。 + +#### 快速开发微信小程序 + +Taro 立足于微信小程序开发,众所周知小程序的开发体验并不是非常友好,比如小程序中无法使用 npm 来进行第三方库的管理,无法使用一些比较新的 ES 规范等等,针对小程序端的开发弊端,Taro 具有以下的优秀特性 + +✅ 支持使用 npm/yarn 安装管理第三方依赖 + +✅ 支持使用 ES7/ES8 甚至更新的 ES 规范,一切都可自行配置 + +✅ 支持使用 CSS 预编译器,例如 Sass 等 + +✅ 支持使用 Redux 进行状态管理 + +✅ 支持使用 MobX 进行状态管理 + +✅ 小程序 API 优化,异步 API Promise 化等等 + +#### 支持多端开发转化 + +Taro 方案的初心就是为了打造一个多端开发的解决方案。目前 Taro 代码可以支持转换到 **微信/百度/支付宝/字节跳动/QQ小程序** 、**快应用**、 **H5 端** 以及 **移动端(React Native)**。 + +
+ +## 社区共享 + +[Taro 交流社区——让每一次交流都被沉淀](https://taro-club.jd.com/) 如果您在此文档没有找到想要的答案,请移步[社区](https://taro-club.jd.com)提问,我们会在看到的第一时间给予答复。 + +[Taro 物料市场——让每一个轮子产生价值](https://taro-ext.jd.com/) 如果您想找一些现成的物料,例如:模版、组件、SDK、UI,可以移步[物料市场](https://taro-ext.jd.com/)查找,也欢迎您发布物料与其他开发者共享。 + +## Taro UI + +一款基于 `Taro` 框架开发的多端 UI 组件库。 + +[Taro UI](https://taro-ui.jd.com) 特性: + +- 基于 `Taro` 开发 UI 组件 +- 一套组件可以在 `微信小程序`,`支付宝小程序`,`百度小程序`,`H5` 多端适配运行(`ReactNative` 端暂不支持) +- 提供友好的 API,可灵活的使用组件 + +## 使用案例 + +Taro 已经投入了我们的生产环境中使用,业界也在广泛地使用 Taro 开发多端应用。 + +> 社区案例仅收纳了开发者主动提交的案例 + +![image](https://raw.githubusercontent.com/NervJS/taro-user-cases/master/user-cases.jpg) + +## 学习资源 + +### 官方文章精选 +- [使用 React Hooks 重构你的小程序](https://aotu.io/notes/2019/07/10/taro-hooks/) +- [Taro 1.3 震撼发布:全面支持 JSX 语法和 HOOKS](https://aotu.io/notes/2019/06/13/taro-1-3/) +- [小程序框架全面测评](https://aotu.io/notes/2019/03/12/mini-program-framework-full-review/) +- [Taro 在京东购物小程序上的实践](https://aotu.io/notes/2018/09/11/taro-in-jd/) +- [用 React 开发小程序的探索之路 (演讲内容整理)| 掘金开发者大会](https://juejin.im/post/5ba346a7f265da0ad13b78bd) +- [为何我们要用 React 来写小程序 - Taro 诞生记](https://aotu.io/notes/2018/06/25/the-birth-of-taro/) +- [多端统一开发框架 - Taro介绍](https://aotu.io/notes/2018/06/07/Taro/) + +### 分享交流 +- [第十三届 D2 前端技术论坛——使用 Taro 快速构建多端应用](https://www.yuque.com/d2forum/content/d213#6a1363f4) +- [WeGeek直播课:从0到1快速开发电商小程序](https://link.juejin.im/?target=https%3A%2F%2Fcloud.tencent.com%2Fedu%2Flearning%2Flive-1497) +- [掘金开发者大会——用React开发小程序的探索之路](https://www.itdks.com/Course/detail?id=16289) + +### 其他 +更多文章教程、开源项目等,请参考:[awesome-taro](https://github.com/NervJS/awesome-taro) + +掘金小册:[Taro 多端开发实现原理与实战](https://juejin.im/book/5b73a131f265da28065fb1cd?referrer=5ba228f16fb9a05d3251492d) + +## 开发交流 +扫码添加 `凹凸实验室-小助手` ,回复 `Taro` 即可进群。(Taro 开发交流15群 已满) + +![image](https://user-images.githubusercontent.com/9441951/63744620-7994e800-c8d2-11e9-9e66-ab43d1d75fe8.png) diff --git a/website/versioned_docs/version-2.0.0-beta.3/async-await.md b/website/versioned_docs/version-2.0.0-beta.3/async-await.md new file mode 100644 index 000000000000..42083d1ed159 --- /dev/null +++ b/website/versioned_docs/version-2.0.0-beta.3/async-await.md @@ -0,0 +1,43 @@ +--- +title: 异步编程 +id: version-2.0.0-beta.3-async-await +original_id: async-await +--- + +> Taro 2.x 版本中使用 `async-await` 不再需要 `@tarojs/async-await`。 + +Taro 支持使用 `async functions` 来让开发者获得不错的异步编程体验,开启 `async functions` 支持需要安装包 `babel-plugin-transform-runtime` 和 `babel-runtime`。 + +```bash +$ yarn add babel-plugin-transform-runtime --dev +$ yarn add babel-runtime +``` + +随后修改项目 [`babel` 配置](./config-detail.md#babel),增加插件 `babel-plugin-transform-runtime`。 + +```js +babel: { + sourceMap: true, + presets: [ + [ + 'env', + { + modules: false + } + ] + ], + plugins: [ + 'transform-decorators-legacy', + 'transform-class-properties', + 'transform-object-rest-spread', + ['transform-runtime', { + "helpers": false, + "polyfill": false, + "regenerator": true, + "moduleName": 'babel-runtime' + }] + ] +} +``` + +> 值得注意的事,使用 `async functions` 一定要记得按照[开发前注意](./before-dev-remind.md)中提示的内容进行操作,否则会出现报错 diff --git a/website/versioned_docs/version-2.0.0-beta.3/config-detail.md b/website/versioned_docs/version-2.0.0-beta.3/config-detail.md new file mode 100644 index 000000000000..24c0c12fe726 --- /dev/null +++ b/website/versioned_docs/version-2.0.0-beta.3/config-detail.md @@ -0,0 +1,856 @@ +--- +title: 编译配置详情 +id: version-2.0.0-beta.3-config-detail +original_id: config-detail +--- + +## designWidth + +`designWidth` 用来设置设计稿尺寸,关于这一部分的配置说明请见[设计稿及尺寸单位](./size.md)这一章节。 + +## sourceRoot + +`sourceRoot` 用来设置源码存放目录,通过 Taro 开发工具初始化后的项目源码目录都是 `src`,你可以通过修改这一配置来重新指定源码目录。 + +## outputRoot + +`outputRoot` 用来设置代码编译后的生产目录,通过 Taro 开发工具初始化后的生产目录都是 `dist`,你可以通过修改这一配置来重新指定生产目录。 + +## plugins + +`plugins` 用来设置编译过程插件,插件机制基于 实现,目前暴露了两个钩子 `beforeBuild` 和 `afterBuild` + +其中,`beforeBuild` 将在整体编译前触发,可以获取到编译的相关配置,同时也能进行修改 + +`afterBuild` 将在 webpack 编译完后执行,可以获取到编译后的结果 + +具体使用方式如下: + +首先定义一个插件 + +```js +class BuildPlugin { + apply (builder) { + builder.hooks.beforeBuild.tap('BuildPlugin', (config) => { + console.log(config) + }) + + builder.hooks.afterBuild.tap('BuildPlugin', (stats) => { + console.log(stats) + }) + } +} +``` + +接下来在 `plugins` 字段中进行配置 + +```js +{ + plugins: [ + new BuildPlugin() + ] +} +``` + +## babel + +用来配置 `babel`,默认配置如下,可以自行添加自己需要的额外的 `presets` 及 `plugins`。 + +```jsx +babel: { + sourceMap: true, + presets: [ + 'env' + ], + plugins: [ + 'transform-class-properties', + 'transform-decorators-legacy', + 'transform-object-rest-spread' + ] +} +``` + +## uglify + +用来配置 `UgligyJS` 工具,设置打包过程中的 JS 代码压缩。可以通过 `uglify.enable` 来设置是否开启压缩,若设置开启,则可以通过 `uglify.config` 来设置 `UgligyJS` 的配置项,具体配置方式如下: + +```jsx +uglify: { + enable: true, + config: { + // 配置项同 https://github.com/mishoo/UglifyJS2#minify-options + } +} +``` + +## csso + +用来配置 `csso` 工具,设置打包过程中的 CSS 代码压缩。可以通过 `csso.enable` 来设置是否开启压缩,若设置开启,则可以通过 `csso.config` 来设置 `csso` 的配置项,具体配置方式如下: + +```jsx +csso: { + enable: true, + config: { + // 配置项同 https://github.com/css/csso#minifysource-options + } +} +``` + +## sass + +用来配置 `sass` 工具,设置打包过程中的 SCSS 代码编译。 +具体配置可以参考[node-sass](https://www.npmjs.com/package/node-sass) +当需要全局注入scss文件时,可以添加三个额外参数:`resource` 、 `projectDirectory` (v1.2.25开始支持)、`data`(v1.3.0开始支持),具体配置方式如下: + +#### 单文件路径形式 + +当只有 `resource` 字段时,可以传入 scss 文件的绝对路径。 + +```js +sass: { + resource: path.resolve(__dirname, '..', 'src/styles/variable.scss') +} +``` + +#### 多文件路径形式 + +此外,当只有 `resource` 字段时,也可以传入一个路径数组。 + +```js +sass: { + resource: [ + path.resolve(__dirname, '..', 'src/styles/variable.scss'), + path.resolve(__dirname, '..', 'src/styles/mixins.scss') + ] +} +``` + +#### 指定项目根目录路径形式 + +你可以额外配置 `projectDirectory` 字段,这样你就可以在 `resource` 里写相对路径了。 + +```js +sass: { + resource: [ + 'src/styles/variable.scss', + 'src/styles/mixins.scss' + ], + projectDirectory: path.resolve(__dirname, '..') +} +``` + +#### 传入 scss 变量字符串 + +```js +sass: { + resource: [ + 'src/styles/variable.scss', + 'src/styles/mixins.scss' + ], + projectDirectory: path.resolve(__dirname, '..'), + data: '$nav-height: 48px;' +} +``` + +* resource: 如果要引入多个文件,支持数组形式传入 +* projectDirectory: 项目根目录的绝对地址(若为小程序云开发模板,则应该是client目录) +* data: 全局 scss 变量,若 data 与 resource 中设置了同样的变量,则 data 的优先级高于 resource + +## env + +用来设置一些环境变量如 `process.env.NODE_ENV`,例如我们想设置区分预览、打包来做些不同的操作,可以如下配置: + +在 `config/dev.js` 中: + +```jsx +env: { + NODE_ENV: '"development"' // JSON.stringify('development') +} +``` + +在 `config/prod.js` 中: + +```jsx +env: { + NODE_ENV: '"production"' // JSON.stringify('production') +} +``` + +这样就能在代码中通过 `process.env.NODE_ENV === 'development'` 来判断环境。 + +## defineConstants + +用来配置一些全局变量供代码中进行使用,例如: + +```js +defineConstants: { + A: '"a"' // JSON.stringify('a') +} +``` + +## alias + +> `1.2.0` 开始支持。 + +用来配置目录别名,从而方便书写代码引用路径。例如,使用相对路径书写文件引用如下: + +```js +import A from '../../componnets/A' +import Utils from '../../utils' +import packageJson from '../../package.json' +import projectConfig from '../../project.config.json' +``` + +为了避免书写多级相对路径,我们可以如下配置 `alias`: + +```js +alias: { + '@/components': path.resolve(__dirname, '..', 'src/components'), + '@/utils': path.resolve(__dirname, '..', 'src/utils'), + '@/package': path.resolve(__dirname, '..', 'package.json'), + '@/project': path.resolve(__dirname, '..', 'project.config.json'), +} +``` + +通过上述配置,可以将 `src/components` 和 `src/utils` 目录配置成别名,将根目录下的 `package.json` 和 `project.config.json` 文件配置成别名,则代码中的引用改写如下: + +```js +import A from '@/components/A' +import Utils from '@/utils' +import packageJson from '@/package' +import projectConfig from '@/project' +``` + +为了让编辑器(VS Code)不报错,并继续使用自动路径补全的功能,需要在项目根目录下的 `jsconfig.json` 或者 `tsconfig.json` 中配置 `paths` 让编辑器认得我们的别名,形式如下: + +```json +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/components/*": ["./src/components/*"], + "@/utils/*": ["./src/utils/*"], + "@/package": ["./package.json"], + "@/project": ["./project.config.json"], + } + } +} +``` + +*建议别名使用 `@/` 开头而非仅用 `@` 开头,因为有小概率会与某些 `scoped` 形式的 `npm` 包(行如:[@tarojs/taro](https://npm.im/@tarojs/taro), [@babel/core](https://npm.im/@babel/core))产生命名冲突。* + +## copy + +文件 copy 配置,包含两个配置项 `patterns` 和 `options`。 + +### copy.patterns + +用来指定需要拷贝的文件或者目录,**数组类型**,每一项都必须包含 `from` 、`to` 的配置,分别代表来源和需要拷贝到的目录,同时可以设置 `ignore` 配置来指定需要忽略的文件, `ignore` 是指定的 [glob](https://github.com/isaacs/node-glob) 类型字符串,或者 glob 字符串数组。 + +值得注意的是,目前 `from` 必须指定存在的文件或者目录,暂不支持 glob 格式, `from` 和 `to` 直接置顶项目根目录下的文件目录,建议 `from` 以 `src` 目录开头,`to` 以 `dist` 目录开头。 + +一般有如下的使用形式: + +```jsx +copy: { + patterns: [ + { from: 'src/asset/tt/', to: 'dist/asset/tt/', ignore: '*.js' }, // 指定需要 copy 的目录 + { from: 'src/asset/tt/sd.jpg', to: 'dist/asset/tt/sd.jpg' } // 指定需要 copy 的文件 + ] +}, +``` + +### copy.options + +拷贝配置,目前可以指定全局的 ignore: + +```jsx +copy: { + options: { + ignore: ['*.js', '*.css'] // 全局的 ignore + } +} +``` + +## mini + +专属于小程序的配置。 + +### mini.compile + +小程序编译过程的相关配置。 + +#### mini.compile.compressTemplate + +决定小程序打包时是否需要压缩 wxml + +#### mini.compile.exclude + +配置小程序编译过程中排除不需要经过 Taro 编译的文件,数组类型,写文件路径,文件路径必须以源码所在 `src` 目录开头: + +```jsx +mini: { + compile: { + exclude: ['src/components/ec-canvas/echarts.js'] + } +} +``` + +### mini.webpackChain + +自定义 Webpack 配置,接受函数形式的配置。 + +这个函数会收到两个参数,第一个参数是 webpackChain 对象,可参考 [webpack-chain](https://github.com/neutrinojs/webpack-chain) 的 api 进行修改;第二个参数是 `webpack` 实例。例如: + +```jsx +// 这是一个添加 raw-loader 的例子,用于在项目中直接引用 md 文件 +{ + webpackChain (chain, webpack) { + chain.merge({ + module: { + rule: { + myloader: { + test: /\.md$/, + use: [{ + loader: 'raw-loader', + options: {} + }] + } + } + } + }) + } +} +``` + +```jsx +// 这是一个添加插件的例子 +{ + webpackChain (chain, webpack) { + chain.merge({ + plugin: { + install: { + plugin: require('npm-install-webpack-plugin'), + args: [{ + // Use --save or --save-dev + dev: false, + // Install missing peerDependencies + peerDependencies: true, + // Reduce amount of console logging + quiet: false, + // npm command used inside company, yarn is not supported yet + npm: 'cnpm' + }] + } + } + }) + } +} +``` + +### mini.cssLoaderOption + +css-loader 的附加配置。配置项参考[官方文档](https://github.com/webpack-contrib/css-loader),例如: + +```jsx +{ + cssLoaderOption: { + localIdentName: '[hash:base64]' + } +} +``` + +### mini.styleLoaderOption + +style-loader 的附加配置。配置项参考[官方文档](https://github.com/webpack-contrib/style-loader),例如: + +```jsx +{ + styleLoaderOption: { + insertAt: 'top' + } +} +``` + +### mini.sassLoaderOption + +sass-loader 的附加配置。配置项参考[官方文档](https://github.com/webpack-contrib/sass-loader),例如: + +```jsx +{ + sassLoaderOption: { + implementation: require("dart-sass") + } +} +``` + +### mini.lessLoaderOption + +less-loader 的附加配置。配置项参考[官方文档](https://github.com/webpack-contrib/less-loader),例如: + +```jsx +{ + lessLoaderOption: { + strictMath: true, + noIeCompat: true + } +} +``` + +### mini.stylusLoaderOption + +stylus-loader 的附加配置。配置项参考[官方文档](https://github.com/shama/stylus-loader)。 + +### mini.mediaUrlLoaderOption + +针对 `mp4 | webm | ogg | mp3 | wav | flac | aac` 文件的 url-loader 配置。配置项参考[官方文档](https://github.com/webpack-contrib/url-loader),例如: + +```jsx +{ + mediaUrlLoaderOption: { + limit: 8192 + } +} +``` + +### mini.fontUrlLoaderOption + +针对 `woff | woff2 | eot | ttf | otf` 文件的 url-loader 配置。配置项参考[官方文档](https://github.com/webpack-contrib/url-loader)。 + +### mini.imageUrlLoaderOption + +针对 `png | jpg | jpeg | gif | bpm | svg` 文件的 url-loader 配置。配置项参考[官方文档](https://github.com/webpack-contrib/url-loader)。 + +### mini.miniCssExtractPluginOption + +`mini-css-extract-plugin` 的附加配置,在 `enableExtract` 为 `true` 的情况下生效。 +配置项参考[官方文档](https://github.com/webpack-contrib/mini-css-extract-plugin),例如: + +```jsx +{ + miniCssExtractPluginOption: { + filename: '[name].css', + chunkFilename: '[name].css' + } +} +``` + +### mini.postcss + +配置 `postcss` 相关插件: + +```jsx +postcss: { + // 可以进行 autoprefixer 的配置。配置项参考官方文档 https://github.com/postcss/autoprefixer + autoprefixer: { + enable: true, + config: { + // autoprefixer 配置项 + } + }, + pxtransform: { + enable: true, + config: { + // pxtransform 配置项,参考尺寸章节 + selectorBlackList: ['body'] + } + }, + // 小程序端样式引用本地资源内联 + url: { + enable: true, + config: { + limit: 10240 // 设定转换尺寸上限 + } + }, + // css modules 功能开关与相关配置 + cssModules: { + enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true + config: { + generateScopedName: '[name]__[local]___[hash:base64:5]' + } + } +} +``` + +## h5 + +专属于 H5 的配置。 + +### h5.devServer + +预览服务的配置,可以更改端口等参数。具体配置参考 [webpack-dev-server](https://webpack.js.org/configuration/dev-server)。 + +```js +devServer: { + port: 10086 +} +``` + +默认是 `http` 服务,如果想开启 `https` 服务需要做如下配置。 + +```js +devServer: { + https: true +} +``` + +### h5.output + +输出配置 + +```js +output: { + filename: 'js/[name].[hash:8].js', + chunkFilename: 'js/[name].[chunkhash:8].js' +} +``` + +### h5.publicPath + +设置输出解析文件的目录。 + +### h5.staticDirectory + +h5 编译后的静态文件目录。 + +### h5.chunkDirectory + +编译后非 entry 的 js 文件的存放目录,主要影响动态引入的 `pages` 的存放路径。 + +### h5.webpackChain + +自定义 Webpack 配置,接受函数形式的配置。 + +这个函数会收到两个参数,第一个参数是 webpackChain 对象,可参考 [webpack-chain](https://github.com/neutrinojs/webpack-chain) 的 api 进行修改;第二个参数是 `webpack` 实例。例如: + +```jsx +// 这是一个添加 ts-loader 的例子,但事实上 taro 是默认支持 ts 的,并不需要这样做。 +{ + webpackChain (chain, webpack) { + chain.merge({ + module: { + rule: { + myloader: { + test: /.tsx?/, + use: [{ + loader: 'ts-loader', + options: {} + }] + } + } + } + }) + } +} +``` + +```jsx +// 这是一个添加插件的例子 +{ + webpackChain (chain, webpack) { + chain.merge({ + plugin: { + install: { + plugin: require('npm-install-webpack-plugin'), + args: [{ + // Use --save or --save-dev + dev: false, + // Install missing peerDependencies + peerDependencies: true, + // Reduce amount of console logging + quiet: false, + // npm command used inside company, yarn is not supported yet + npm: 'cnpm' + }] + } + } + }) + } +} +``` + +### [DEPRECATED]h5.webpack + +自定义 Webpack 配置。这个配置项支持两种形式的配置: + +1. 如果该配置项以**对象**的形态呈现,Taro 将会使用 `webpack-merge` 将这个对象合并到默认的配置项中。 +例子: + +```jsx +webpack: { + resolve: { + alias: { + 'test': './test' + } + } +} +``` + +2. 如果该配置以**函数**的形态呈现,那这个函数将会接收到两个参数:默认配置(defaultConfig)和 Webpack 实例(webpack)。Taro 将会以该函数的返回值作为最终的 Webpack 配置。 + +例子: + +```jsx +webpack (defaultConfig, webpack) { + defaultConfig.plugins.push( + new webpack.EnvironmentPlugin(['NODE_ENV']) + ) + return defaultConfig +} +``` + +### h5.router + +路由相关的配置,支持路由模式、路由基准路径以及自定义路由的配置。 + +#### h5.router.mode + +路由模式配置。配置值为 `hash`(默认值)或 `browser`,分别对应 hash 路由模式和浏览器 history 路由模式。例子: + +```js +h5: { + /* 其他配置 */ + ... , + router: { + mode: 'hash' // 或者是 'browser' + } +} +``` + +针对上面的配置,调用 `Taro.navigateTo({ url: '/pages/index/index' })` 后,浏览器地址栏将被变为 `http://{{domain}}/#/pages/index/index`(hash 模式)或者 `http://{{domain}}/pages/index/index`(browser 模式)。 + +#### h5.router.basename + +路由基准路径的配置,配置值为 `string` 类型。例子: + +```js +h5: { + /* 其他配置 */ + ... , + router: { + basename: '/myapp' + } +} +``` + +针对上面的配置,调用 `Taro.navigateTo({ url: '/pages/index/index' })` 后,浏览器地址栏将被变为 `http://{{domain}}/#/myapp/pages/index/index`(hash 模式)或者 `http://{{domain}}/myapp/pages/index/index`(browser 模式)。 + +#### h5.router.customRoutes + +自定义路由的配置,配置值为 `{ [key: string]: string }` 类型。例子: + +```js +h5: { + /* 其他配置 */ + ... , + router: { + customRoutes: { + '/pages/index/index': '/index' + } + } +} +``` + +针对上面的配置,调用 `Taro.navigateTo({ url: '/pages/index/index' })` 后,浏览器地址栏将被变为 `http://{{domain}}/#/index`(hash 模式)或者 `http://{{domain}}/myapp/index`(browser 模式)。 + +### h5.entry + +Taro app 的入口,同 [webpack.entry](https://webpack.js.org/configuration/entry-context/#entry)。 + +```jsx +{ + entry: { + home: ['./home.js'], + about: ['./about.js'], + contact: ['./contact.js'] + } +} +``` + +### h5.enableSourceMap + +sourceMap 开关,影响 js、css 的 sourceMap 配置。 +dev 状态默认 **开**,prod 状态默认 **关**。 + +### h5.sourceMapType +sourceMap格式, 默认cheap-module-eval-source-map。[具体配置](https://webpack.js.org/configuration/devtool/#devtool) + +### h5.enableDll + +dll 开关,开启后将使用 `dllPlugin` 把内置的部分依赖库打包为单独的 dll 文件, +某种程度上可以减少首屏单个文件体积。 +dev 状态默认 **关**,prod 状态默认 **开**。 + +### h5.dllWebpackChain + +同 `h5.webpackChain`,不过作用于 dll。 + +### h5.dllEntry + +dll编译过程的 `entry` 配置项,决定了 dll 文件的内容,可参考 [webpack.entry](https://webpack.js.org/configuration/entry-context/#entry)。默认值: + +```js +h5: { + /* 其他配置 */ + ..., + dllEntry: { + lib: ['nervjs', '@tarojs/taro-h5', '@tarojs/router', '@tarojs/components'] + } +} +``` + +### h5.enableExtract + +extract 功能开关,开启后将使用 `mini-css-extract-plugin` 分离 css 文件, +可通过 `h5.miniCssExtractPluginOption` 对插件进行配置。 +dev 状态默认 **关**,prod 状态默认 **开**。 + +### h5.esnextModules + +配置需要额外的编译的源码模块,比如 [taro-ui](https://github.com/NervJS/taro-ui): + +```javascript +h5: { + // 经过这一配置之后,代码中引入的处于 `node_modules/taro-ui/` 路径下的源码文件均会经过taro的编译处理。 + esnextModules: ['taro-ui'], + ... +} +``` + +### h5.cssLoaderOption + +css-loader 的附加配置。配置项参考[官方文档](https://github.com/webpack-contrib/css-loader),例如: + +```jsx +{ + cssLoaderOption: { + localIdentName: '[hash:base64]' + } +} +``` + +### h5.styleLoaderOption + +style-loader 的附加配置。配置项参考[官方文档](https://github.com/webpack-contrib/style-loader),例如: + +```jsx +{ + styleLoaderOption: { + insertAt: 'top' + } +} +``` + +### h5.sassLoaderOption + +sass-loader 的附加配置。配置项参考[官方文档](https://github.com/webpack-contrib/sass-loader),例如: + +```jsx +{ + sassLoaderOption: { + implementation: require("dart-sass") + } +} +``` + +### h5.lessLoaderOption + +less-loader 的附加配置。配置项参考[官方文档](https://github.com/webpack-contrib/less-loader),例如: + +```jsx +{ + lessLoaderOption: { + strictMath: true, + noIeCompat: true + } +} +``` + +### h5.stylusLoaderOption + +stylus-loader 的附加配置。配置项参考[官方文档](https://github.com/shama/stylus-loader)。 + +### h5.mediaUrlLoaderOption + +针对 `mp4 | webm | ogg | mp3 | wav | flac | aac` 文件的 url-loader 配置。配置项参考[官方文档](https://github.com/webpack-contrib/url-loader),例如: + +```jsx +{ + mediaUrlLoaderOption: { + limit: 8192 + } +} +``` + +### h5.fontUrlLoaderOption + +针对 `woff | woff2 | eot | ttf | otf` 文件的 url-loader 配置。配置项参考[官方文档](https://github.com/webpack-contrib/url-loader)。 + +### h5.imageUrlLoaderOption + +针对 `png | jpg | jpeg | gif | bpm | svg` 文件的 url-loader 配置。配置项参考[官方文档](https://github.com/webpack-contrib/url-loader)。 + +### h5.miniCssExtractPluginOption + +`mini-css-extract-plugin` 的附加配置,在 `enableExtract` 为 `true` 的情况下生效。 +配置项参考[官方文档](https://github.com/webpack-contrib/mini-css-extract-plugin),例如: + +```jsx +{ + miniCssExtractPluginOption: { + filename: 'css/[name].css', + chunkFilename: 'css/[id].css' + } +} +``` + +### h5.postcss + +配置 H5 的 `postcss` 插件。 + +#### h5.postcss.autoprefixer + +可以进行 `autoprefixer` 的配置。配置项参考[官方文档](https://github.com/postcss/autoprefixer),例如: + +```jsx +postcss: { + autoprefixer: { + enable: true, + config: { + /* autoprefixer 配置项 */ + } + } +} +``` + +#### h5.postcss.pxtransform + +可以进行 `pxtransform` 的配置。配置项参考[官方文档](https://github.com/Pines-Cheng/postcss-pxtransform/),例如: + +```jsx +postcss: { + pxtransform: { + enable: true, + config: { + /* pxtransform 配置项 */ + } + } +} +``` + +#### h5.postcss.cssModules + +可以进行 H5 端 CSS Modules 配置,配置如下: + +```js +postcss: { + // css modules 功能开关与相关配置 + cssModules: { + enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true + config: { + namingPattern: 'module', + generateScopedName: '[name]__[local]___[hash:base64:5]' + } + } +} +``` diff --git a/website/versioned_docs/version-2.0.0-beta.4/README.md b/website/versioned_docs/version-2.0.0-beta.4/README.md new file mode 100644 index 000000000000..e89f7c58adc8 --- /dev/null +++ b/website/versioned_docs/version-2.0.0-beta.4/README.md @@ -0,0 +1,144 @@ +--- +title: Taro 介绍 +id: version-2.0.0-beta.4-README +original_id: README +--- + +> 这是 Taro 2.x 版本的文档,若要查看 1.x 版本的文档,请[点击这里选择版本](/taro/versions.html)。 + +## 简介 + +**Taro** 是一套遵循 [React](https://reactjs.org/) 语法规范的 **多端开发** 解决方案。 + +现如今市面上端的形态多种多样,Web、React-Native、微信小程序等各种端大行其道,当业务要求同时在不同的端都要求有所表现的时候,针对不同的端去编写多套代码的成本显然非常高,这时候只编写一套代码就能够适配到多端的能力就显得极为需要。 + +使用 **Taro**,我们可以只书写一套代码,再通过 **Taro** 的编译工具,将源代码分别编译出可以在不同端(微信/百度/支付宝/字节跳动/QQ小程序、快应用、H5、React-Native 等)运行的代码。 + +## 特性 + +#### React 语法风格 + +**Taro** 遵循 [React](https://reactjs.org/) 语法规范,它采用与 React 一致的组件化思想,组件生命周期与 React 保持一致,同时支持使用 [JSX 语法](jsx.html),让代码具有更丰富的表现力,使用 **Taro** 进行开发可以获得和 React 一致的开发体验。 + +代码示例 + +```jsx +import Taro, { Component } from '@tarojs/taro' +import { View, Button } from '@tarojs/components' + +export default class Index extends Component { + constructor () { + super(...arguments) + this.state = { + title: '首页', + list: [1, 2, 3] + } + } + + componentWillMount () {} + + componentDidMount () {} + + componentWillUpdate (nextProps, nextState) {} + + componentDidUpdate (prevProps, prevState) {} + + shouldComponentUpdate (nextProps, nextState) { + return true + } + + add = (e) => { + // dosth + } + + render () { + return ( + + {this.state.title} + + {this.state.list.map(item => { + return ( + {item} + ) + })} + + + + ) + } +} +``` + +> 由于微信小程序端的限制,有极少数 JSX 的优秀用法暂时不能得到很好地支持,同时,为了遵循 React 语法,Taro 在写法上也有一些自己的规范,具体可以参考:[Taro 开发最佳实践](best-practice.html) 。 + +#### 快速开发微信小程序 + +Taro 立足于微信小程序开发,众所周知小程序的开发体验并不是非常友好,比如小程序中无法使用 npm 来进行第三方库的管理,无法使用一些比较新的 ES 规范等等,针对小程序端的开发弊端,Taro 具有以下的优秀特性 + +✅ 支持使用 npm/yarn 安装管理第三方依赖 + +✅ 支持使用 ES7/ES8 甚至更新的 ES 规范,一切都可自行配置 + +✅ 支持使用 CSS 预编译器,例如 Sass 等 + +✅ 支持使用 Redux 进行状态管理 + +✅ 支持使用 MobX 进行状态管理 + +✅ 小程序 API 优化,异步 API Promise 化等等 + +#### 支持多端开发转化 + +Taro 方案的初心就是为了打造一个多端开发的解决方案。目前 Taro 代码可以支持转换到 **微信/百度/支付宝/字节跳动/QQ小程序** 、**快应用**、 **H5 端** 以及 **移动端(React Native)**。 + +
+ +## 社区共享 + +[Taro 交流社区——让每一次交流都被沉淀](https://taro-club.jd.com/) 如果您在此文档没有找到想要的答案,请移步[社区](https://taro-club.jd.com)提问,我们会在看到的第一时间给予答复。 + +[Taro 物料市场——让每一个轮子产生价值](https://taro-ext.jd.com/) 如果您想找一些现成的物料,例如:模版、组件、SDK、UI,可以移步[物料市场](https://taro-ext.jd.com/)查找,也欢迎您发布物料与其他开发者共享。 + +## Taro UI + +一款基于 `Taro` 框架开发的多端 UI 组件库。 + +[Taro UI](https://taro-ui.jd.com) 特性: + +- 基于 `Taro` 开发 UI 组件 +- 一套组件可以在 `微信小程序`,`支付宝小程序`,`百度小程序`,`H5` 多端适配运行(`ReactNative` 端暂不支持) +- 提供友好的 API,可灵活的使用组件 + +## 使用案例 + +Taro 已经投入了我们的生产环境中使用,业界也在广泛地使用 Taro 开发多端应用。 + +> 社区案例仅收纳了开发者主动提交的案例 + +![image](https://raw.githubusercontent.com/NervJS/taro-user-cases/master/user-cases.jpg) + +## 学习资源 + +### 官方文章精选 +- [使用 React Hooks 重构你的小程序](https://aotu.io/notes/2019/07/10/taro-hooks/) +- [Taro 1.3 震撼发布:全面支持 JSX 语法和 HOOKS](https://aotu.io/notes/2019/06/13/taro-1-3/) +- [小程序框架全面测评](https://aotu.io/notes/2019/03/12/mini-program-framework-full-review/) +- [Taro 在京东购物小程序上的实践](https://aotu.io/notes/2018/09/11/taro-in-jd/) +- [用 React 开发小程序的探索之路 (演讲内容整理)| 掘金开发者大会](https://juejin.im/post/5ba346a7f265da0ad13b78bd) +- [为何我们要用 React 来写小程序 - Taro 诞生记](https://aotu.io/notes/2018/06/25/the-birth-of-taro/) +- [多端统一开发框架 - Taro介绍](https://aotu.io/notes/2018/06/07/Taro/) + +### 分享交流 +- [第十三届 D2 前端技术论坛——使用 Taro 快速构建多端应用](https://www.yuque.com/d2forum/content/d213#6a1363f4) +- [WeGeek直播课:从0到1快速开发电商小程序](https://link.juejin.im/?target=https%3A%2F%2Fcloud.tencent.com%2Fedu%2Flearning%2Flive-1497) +- [掘金开发者大会——用React开发小程序的探索之路](https://www.itdks.com/Course/detail?id=16289) + +### 其他 +更多文章教程、开源项目等,请参考:[awesome-taro](https://github.com/NervJS/awesome-taro) + +掘金小册:[Taro 多端开发实现原理与实战](https://juejin.im/book/5b73a131f265da28065fb1cd?referrer=5ba228f16fb9a05d3251492d) + +## 开发交流 +扫码添加 `凹凸实验室-小助手` ,回复 `Taro` 即可进群。(Taro 开发交流14群 已满) + +![image](https://user-images.githubusercontent.com/9441951/63744620-7994e800-c8d2-11e9-9e66-ab43d1d75fe8.png) diff --git a/website/versioned_docs/version-2.0.0-beta.4/async-await.md b/website/versioned_docs/version-2.0.0-beta.4/async-await.md new file mode 100644 index 000000000000..9c2250d842e6 --- /dev/null +++ b/website/versioned_docs/version-2.0.0-beta.4/async-await.md @@ -0,0 +1,43 @@ +--- +title: 异步编程 +id: version-2.0.0-beta.4-async-await +original_id: async-await +--- + +> Taro 2.x 版本中使用 `async-await` 不再需要 `@tarojs/async-await`。 + +Taro 支持使用 `async functions` 来让开发者获得不错的异步编程体验,开启 `async functions` 支持需要安装包 `babel-plugin-transform-runtime` 和 `babel-runtime`。 + +```bash +$ yarn add babel-plugin-transform-runtime --dev +$ yarn add babel-runtime +``` + +随后修改项目 [`babel` 配置](./config-detail.md#babel),增加插件 `babel-plugin-transform-runtime`。 + +```js +babel: { + sourceMap: true, + presets: [ + [ + 'env', + { + modules: false + } + ] + ], + plugins: [ + 'transform-decorators-legacy', + 'transform-class-properties', + 'transform-object-rest-spread', + ['transform-runtime', { + "helpers": false, + "polyfill": false, + "regenerator": true, + "moduleName": 'babel-runtime' + }] + ] +} +``` + +> 值得注意的事,使用 `async functions` 一定要记得按照[开发前注意](./before-dev-remind.md)中提示的内容进行操作,否则会出现报错 diff --git a/website/versioned_docs/version-2.0.0-beta.4/react-native.md b/website/versioned_docs/version-2.0.0-beta.4/react-native.md new file mode 100644 index 000000000000..8fb20cf5c942 --- /dev/null +++ b/website/versioned_docs/version-2.0.0-beta.4/react-native.md @@ -0,0 +1,776 @@ +--- +title: React Native 端开发流程 +id: version-2.0.0-beta.4-react-native +original_id: react-native +--- + +> 本篇主要讲解 Taro React Native 端 环境安装-开发-调试-打包-发布 原理及流程,React Native 开发前注意事项请看 [开发前注意](./before-dev-remind.html) +> +> 适配 RN 端可参考项目:[首个 Taro 多端统一实例 - 网易严选(小程序 + H5 + React Native) - By 趣店 FED](https://github.com/js-newbee/taro-yanxuan) + +## 简介 + +Taro 移动端的开发基于 Facebook 的开源项目 [React Native](https://github.com/facebook/react-native),目前是项目依赖中固定 React Native 版本为 `0.55.4`。 + +整个 RN 端的开发流程如下: + +![image](http://assets.processon.com/chart_image/5c988481e4b01e76978bd6ab.png) + +首先在 Taro 项目里执行:`taro build --type rn --watch`,这个命令会将 Taro 代码编译为 React Native 代码(默认输出在 rn_temp 目录下),并启动 Metro Server(可以看成是 webpack run devserver --port 8081)打包 rn_temp 下的 js。 + +然后进入 `taro-native-shell` 目录(建议和 Taro 项目平级),通过 `react-native run-android|ios`启动,或者通过对应的 Android Studio / Xcode 启动应用,启动后应用可以看成是一个浏览器,会从 8081 端口加载 js 并渲染。 + +## 搭建 iOS 开发环境 + +必须安装的依赖有:Node、Watchman 和 React Native 命令行工具以及 Xcode。 + +虽然你可以使用任何编辑器来开发应用(编写 js 代码),但你仍然必须安装 Xcode 来获得编译 iOS 应用所需的工具和环境。 + +### Node, Watchman +我们推荐使用 [Homebrew](http://brew.sh/) 来安装 Node 和 Watchman。在命令行中执行下列命令安装: + +```sh +brew install node +brew install watchman +``` + +如果你已经安装了 Node,请检查其版本是否在 v8.3 以上。安装完 Node 后建议设置 npm 镜像以加速后面的过程(或使用科学上网工具)。 + +> 注意:不要使用 cnpm!cnpm 安装的模块路径比较奇怪,packager 不能正常识别! + +设置 npm 镜像: +``` +npm config set registry https://registry.npm.taobao.org --global +npm config set disturl https://npm.taobao.org/dist --global +``` + +或者使用 [nrm](https://github.com/Pana/nrm): + +```sh +$ nrm ls + +* npm ----- https://registry.npmjs.org/ + cnpm ---- http://r.cnpmjs.org/ + taobao -- https://registry.npm.taobao.org/ + nj ------ https://registry.nodejitsu.com/ + skimdb -- https://skimdb.npmjs.com/registry + +``` + +```sh +$ nrm use cnpm //switch registry to cnpm + + Registry has been set to: http://r.cnpmjs.org/ +``` + +[Watchman](https://facebook.github.io/watchman) 则是由 Facebook 提供的监视文件系统变更的工具。安装此工具可以提高开发时的性能(packager 可以快速捕捉文件的变化从而实现实时刷新)。 + +### Yarn、React Native 的命令行工具(react-native-cli) +Yarn 是 Facebook 提供的替代 npm 的工具,可以加速 node 模块的下载。React Native 的命令行工具用于执行创建、初始化、更新项目、运行打包服务(packager)等任务。 + +```sh +npm install -g yarn react-native-cli +``` + +安装完 yarn 后同理也要设置镜像源: + +```sh +yarn config set registry https://registry.npm.taobao.org --global +yarn config set disturl https://npm.taobao.org/dist --global +``` + +安装完 yarn 之后就可以用 yarn 代替 npm 了,例如用 yarn 代替 npm install 命令,用 yarn add 某第三方库名代替 npm install 某第三方库名。 + +### Xcode +React Native 目前需要 [Xcode](https://developer.apple.com/xcode/downloads/) 9.4 或更高版本。你可以通过 App Store 或是到 [Apple 开发者官网](https://developer.apple.com/xcode/downloads/) 上下载。这一步骤会同时安装 Xcode IDE、Xcode 的命令行工具和 iOS 模拟器。 + +Xcode 的命令行工具 + +启动 Xcode,并在 `Xcode | Preferences | Locations` 菜单中检查一下是否装有某个版本的 `Command Line Tools`。Xcode 的命令行工具中包含一些必须的工具,比如 `git` 等。 + +![image](https://reactnative.cn/docs/assets/GettingStartedXcodeCommandLineTools.png) + + +## 搭建 Android 开发环境 + +### 安装依赖 +必须安装的依赖有:Node、Watchman 和 React Native 命令行工具以及 JDK 和 Android Studio。 + +虽然你可以使用任何编辑器来开发应用(编写 js 代码),但你仍然必须安装 Android Studio 来获得编译 Android 应用所需的工具和环境。 + +### Java Development Kit +React Native 需要 Java Development Kit [JDK] 1.8(暂不支持 1.9 及更高版本)。你可以在命令行中输入 + +> javac -version来查看你当前安装的 JDK 版本。如果版本不合要求,则可以到 官网上下载。 + +### Android 开发环境 +如果你之前没有接触过 Android 的开发环境,那么请做好心理准备,这一过程相当繁琐。请 `万分仔细`地阅读下面的说明,严格对照文档进行配置操作。 + +> 注:请注意!!!国内用户必须必须必须有稳定的翻墙工具,否则在下载、安装、配置过程中会不断遭遇链接超时或断开,无法进行开发工作。某些翻墙工具可能只提供浏览器的代理功能,或只针对特定网站代理等等,请自行研究配置或更换其他软件。总之如果报错中出现有网址,那么 99% 就是无法正常翻墙。 + +> 如果是 socks5 代理 ,如下这样设置其实并没有什么卵用 + +``` +#systemProp.socks.proxyHost=127.0.0.1 +#systemProp.socks.proxyPort=8016 + +#systemProp.https.proxyHost=127.0.0.1 +#systemProp.https.proxyPort=8016 + +#systemProp.https.proxyHost=socks5://127.0.0.1 +#systemProp.https.proxyPort=8016 +``` + +> 正确设置方法应该是这样: +org.gradle.jvmargs=-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=8016 + +> 修改 $HOME/.gradle/gradle.properties 文件,加入上面那句,这样就可以全局开启 gradle 代理 + + +#### 1. 安装 Android Studio + +[首先下载和安装 Android Studio](https://developer.android.com/studio/index.html),国内用户可能无法打开官方链接,请自行使用搜索引擎搜索可用的下载链接。安装界面中选择"Custom"选项,确保选中了以下几项: + +- Android SDK +- Android SDK Platform +- Performance (Intel ® HAXM) ([AMD 处理器看这里](https://android-developers.googleblog.com/2018/07/android-emulator-amd-processor-hyper-v.html)) +- Android Virtual Device + +然后点击"Next"来安装选中的组件。 + +> 如果选择框是灰的,你也可以先跳过,稍后再来安装这些组件。 + +安装完成后,看到欢迎界面时,就可以进行下面的操作了。 + +#### 2. 安装 Android SDK +Android Studio 默认会安装最新版本的 Android SDK。目前编译 React Native 应用需要的是 `Android 6.0 (Marshmallow)` 版本的 SDK(注意 SDK 版本不等于终端系统版本,RN 目前支持 android 4.1 以上设备)。你可以在 Android Studio 的 SDK Manager 中选择安装各版本的 SDK。 + +你可以在 Android Studio 的欢迎界面中找到 SDK Manager。点击 "Configure",然后就能看到 "SDK Manager"。 + +![image](https://reactnative.cn/docs/assets/GettingStartedAndroidStudioWelcomeMacOS.png) + +> SDK Manager 还可以在 Android Studio 的 "Preferences" 菜单中找到。具体路径是 `Appearance & Behavior → System Settings → Android SDK`。 + +在 SDK Manager 中选择 "SDK Platforms"选项卡,然后在右下角勾选 "Show Package Details"。展开 `Android 6.0 (Marshmallow)` 选项,确保勾选了下面这些组件(重申你必须使用稳定的翻墙工具,否则可能都看不到这个界面): + +- `Android SDK Platform 28` +- `Intel x86 Atom_64 System Image`(官方模拟器镜像文件,使用非官方模拟器不需要安装此组件) + +然后点击"SDK Tools"选项卡,同样勾中右下角的"Show Package Details"。展开"Android SDK Build-Tools"选项,确保选中了 React Native 所必须的 `23.0.1` 版本。你可以同时安装多个其他版本,然后还要勾选最底部的 `Android Support Repository`。 + +![image](https://reactnative.cn/docs/assets/GettingStartedAndroidSDKManagerSDKToolsMacOS.png) + +最后点击"Apply"来下载和安装这些组件。 + +![image](https://reactnative.cn/docs/assets/GettingStartedAndroidSDKManagerInstallsMacOS.png) + +#### 3. 配置 ANDROID_HOME 环境变量 +React Native 需要通过环境变量来了解你的 Android SDK 装在什么路径,从而正常进行编译。 + +具体的做法是把下面的命令加入到 `~/.bash_profile` 文件中: + +> ~表示用户目录,即/Users/你的用户名/,而小数点开头的文件在 Finder 中是隐藏的,并且这个文件有可能并不存在。可在终端下使用vi ~/.bash_profile命令创建或编辑。如不熟悉 vi 操作,请点击 [这里](http://www.eepw.com.cn/article/48018.htm) 学习。 + +```sh +# 如果你不是通过Android Studio安装的sdk,则其路径可能不同,请自行确定清楚。 +export ANDROID_HOME=$HOME/Library/Android/sdk +export PATH=$PATH:$ANDROID_HOME/tools +export PATH=$PATH:$ANDROID_HOME/platform-tools +``` + +> 如果你的命令行不是 bash,而是例如 zsh 等其他,请使用对应的配置文件。 + +使用 `source $HOME/.bash_profile` 命令来使环境变量设置立即生效(否则重启后才生效)。可以使用 `echo $ANDROID_HOME` 检查此变量是否已正确设置。 + +> 请确保你正常指定了 Android SDK 路径。你可以在 Android Studio 的 "Preferences" 菜单中查看 SDK 的真实路径,具体是`Appearance & Behavior → System Settings → Android SDK`。 + + +### 准备 Android 设备 +你需要准备一台 Android 设备来运行 React Native Android 应用。这里所指的设备既可以是真机,也可以是模拟器。Android 官方提供了名为 Android Virtual Device(简称 AVD)的模拟器。此外还有很多第三方提供的模拟器如 [Genymotion](https://www.genymotion.com/download)、BlueStack 等。一般来说官方模拟器免费、功能完整,但性能较差。第三方模拟器性能较好,但可能需要付费,或带有广告。 + +#### 使用 Android 真机 +你也可以使用 Android 真机来代替模拟器进行开发,只需用 usb 数据线连接到电脑,然后遵照 [在设备上运行](https://reactnative.cn/docs/0.55/running-on-device) 这篇文档的说明操作即可。 + +#### 使用 Android 模拟器 +你可以在 Android Studi 打开 "AVD Manager" 来查看可用的虚拟设备,它的图标看起来像下面这样: + +![image](https://reactnative.cn/docs/assets/GettingStartedAndroidStudioAVD.png) + +如果你刚刚才安装 Android Studio,那么可能需要先 [创建一个虚拟设备](https://developer.android.com/studio/run/managing-avds.html)。点击"Create Virtual Device...",然后选择所需的设备类型并点击"Next"。 + +![image](https://reactnative.cn/docs/assets/GettingStartedCreateAVDMacOS.png) + +选择 "x86 Images" 选项卡,这里可以看到你之前已安装过的镜像文件。必须先安装镜像文件才能创建对应的虚拟设备。 + +![image](https://reactnative.cn/docs/assets/GettingStartedCreateAVDx86MacOS.png) + +> 如果你还没有安装 HAXM(Intel 虚拟硬件加速驱动),则先按 [这篇文档](https://software.intel.com/en-us/android/articles/installation-instructions-for-intel-hardware-accelerated-execution-manager-mac-os-x) 说明来进行安装。 + +![image](https://reactnative.cn/docs/assets/GettingStartedAVDManagerMacOS.png) + +然后点击 "Next" 和 "Finish" 来完成虚拟设备的创建。 + +## 开发 + +### 编译 + +RN 编译预览模式: + +```shell +# yarn +$ yarn dev:rn +# npm script +$ npm run dev:rn +# 仅限全局安装 +$ taro build --type rn --watch +# npx 用户也可以使用 +$ npx taro build --type rn --watch +``` + +Taro 将会开始编译文件: + +```sh +➜ taro-demo git:(master) ✗ taro build --type rn --watch +👽 Taro v1.2.20 + +开始编译项目 taro-demo +编译 JS /Users/chengshuai/Taro/taro-demo/src/app.js +编译 SCSS /Users/chengshuai/Taro/taro-demo/src/app.scss +拷贝 HTML /Users/chengshuai/Taro/taro-demo/src/index.html +生成 生成文件 /Users/chengshuai/Taro/taro-demo/rn_temp/app_styles.js +编译 JS /Users/chengshuai/Taro/taro-demo/src/pages/index/index.js +编译 SCSS /Users/chengshuai/Taro/taro-demo/src/pages/index/index.scss +生成 index.js /Users/chengshuai/Taro/taro-demo/rn_temp/index.js +生成 app.json /Users/chengshuai/Taro/taro-demo/rn_temp/app.json +生成 package.json /Users/chengshuai/Taro/taro-demo/rn_temp/package.json +编译 编译完成,花费2504 ms +生成 生成文件 /Users/chengshuai/Taro/taro-demo/rn_temp/pages/index/index_styles.js + +初始化完毕,监听文件修改中... + +``` + +编译后的代码及应用文件在根目录的 `rn_temp` 目录下,常见的工程目录结构如下: + +```shell +rn_temp +├── app.js +├── app.json +├── app_styles.js +├── index.html +├── index.js +├── package-lock.json +├── package.json +├── pages +│   └── index +│   ├── component.js +│   ├── index.js +│   └── index_styles.js +├── bundle +│   ├── assets +│   ├── index.bundle +│   └── index.bundle.meta +└── yarn.lock +``` +其中关键文件及目录如下: + +- app.json React Native 应用的配置,从 `config.rn.appJson` 中获取 +- bundle:实时编译的 jsbundle 临时文件 + +如果编译没有报错,会自动打开一个终端,并在 8081 端口启动 [Metro](https://github.com/facebook/metro) Bundler 负责打包 jsbundle: + +![image](https://user-images.githubusercontent.com/9441951/59322399-85780180-8d08-11e9-9ea7-b3e4b23c077c.png) + +> 注意:少数电脑上,可能不会 `自动打开一个终端`,这时你可以在项目根目录下运行:`react-native start` 手动启动。 + +这时,在浏览器输入 http://127.0.0.1:8081,可以看到如下页面: +![image](https://user-images.githubusercontent.com/9441951/55865494-13245d00-5bb1-11e9-9a97-8a785a83b584.png) + +输入 http://127.0.0.1:8081/rn_temp/index.bundle?platform=ios&dev=true 会触发对应终端平台的 js bundle 构建。 + +![image](https://user-images.githubusercontent.com/9441951/55865039-37336e80-5bb0-11e9-8aca-c121be4542f6.png) + +构建完成后,浏览器会显示构建后的 js 代码。 + +> Note:进入下一步之前请确保 Metro Bundler Server 正常启动,即浏览器能正常访问访问 jsbundle。 + + +### 启动应用 +如果上一步的编译和 Metro Bundler Server 启动没问题,接下来就可以启动应用了。 + +开发者可以自行[整合 React Native (0.55.4) 到原生应用](https://reactnative.cn/docs/0.55/integration-with-existing-apps/),同时为了方便大家开发和整合,Taro 将 React Native 工程中原生的部分剥离出来,单独放在一个工程里面 [NervJS/taro-native-shell](https://github.com/NervJS/taro-native-shell),你可以把它看成是 React Native iOS/Android 空应用的壳子。 + +首先将应用代码 clone 下来: + +``` +git clone git@github.com:NervJS/taro-native-shell.git +``` +然后 `cd taro-native-shell`,使用 yarn 或者 npm install 安装依赖。 + +> 注意 `taro-native-shell` 工程和 Taro 工程最好独立存放,不要嵌套,否则会报:`multi react-native ` 错误 + +工程目录如下: + +```sh +➜ taro-native-shell git:(master) ✗ tree -L 1 +. +├── LICENSE +├── README.md +├── android // Android 工程目录 +├── ios // iOS 工程目录 +├── node_modules +├── package.json +└── yarn.lock +``` + + +### iOS +#### 使用 React Native 命令启动 + +```sh +$ react-native run-ios +``` + +iOS 模拟器会自行启动,并访问 8081 端口获取 js bundle,这时 Metro Bundler 终端会打印以下内容: + +```sh + BUNDLE [ios, dev] ./index.js ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ 100.0% (1/1), done. +``` + +#### 使用 Xcode 启动 +iOS 的启动比较简单,使用 Xcode 打开 ios 目录,然后点击 Run 按钮就行。 + +![image](https://developer.apple.com/library/archive/documentation/ToolsLanguages/Conceptual/Xcode_Overview/Art/XC_O_SchemeMenuWithCallouts_2x.png) + +这里需要注意的是 jsBundle 的 moduleName,默认的 moduleName 为 "taroDemo",需要和 `rn_temp/app.json` 里面的 name 字段保持一致。该配置在 `AppDelegate.m` 文件中。 + +```objc +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + NSURL *jsCodeLocation; + + jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"rn_temp/index" fallbackResource:nil]; + + RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation + moduleName:@"taroDemo" + initialProperties:nil + launchOptions:launchOptions]; + rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; + + self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; + UIViewController *rootViewController = [UIViewController new]; + rootViewController.view = rootView; + self.window.rootViewController = rootViewController; + [self.window makeKeyAndVisible]; + return YES; +} + +@end +``` + +app.json 字段的配置默认取自于 package.json 的 name 字段,除非你在 rn -> appJson 里面有配置。 + +更多资料,可以查看 Xcode 文档:[Building Your App](https://developer.apple.com/library/archive/documentation/ToolsLanguages/Conceptual/Xcode_Overview/BuildingYourApp.html) + +### Android +在 taro-native-shell/android 目录下,你就可以看到 React Native 的工程代码。 + +#### 使用 React Native 命令启动 + +```sh +$ react-native run-android +``` + +Android 模拟器会自行启动,并访问 8081 端口获取 js bundle,这时 Metro Bundler 终端会打印一下内容: + +```sh + BUNDLE [android, dev] ./index.js ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ 100.0% (1/1), done. +``` + + +#### 在真实设备上运行 + +按照以下步骤设置您的设备: + +1. 使用一根 USB 电缆将您的设备连接到您的开发机器。如果您是在 Windows 上开发,可能需要为您的设备 [安装相应的 USB 驱动程序](https://developer.android.com/studio/run/oem-usb.html?hl=zh-cn)。 +2. 按照以下步骤操作,在 Developer options 中启用 USB debugging。 +首先,您必须启用开发者选项: + + 1. 打开 Settings 应用。 + 2. (仅在 Android 8.0 或更高版本上)选择 System。 + 3. 滚动到底部,然后选择 About phone。 + 4. 滚动到底部,点按 Build number 7 次。 + 5. 返回上一屏幕,在底部附近可找到 Developer options。 +打开 Developer options,然后向下滚动以找到并启用 USB debugging。 + +按照以下步骤操作,在您的设备上运行应用: + +1. 在 Android Studio 中,点击 Project 窗口中的 app 模块,然后选择 Run > Run(或点击工具栏中的 Run )。 + +![image](https://sdtimes.com/wp-content/uploads/2016/04/0408.sdt-androidstudio.png) + +2. 在 Select Deployment Target 窗口中,选择您的设备,然后点击 OK。 + +![image](https://developer.android.com/training/basics/firstapp/images/run-device_2x.png?hl=zh-cn) + +Android Studio 会在您连接的设备上安装并启动应用。 + +### 在模拟器上运行 +按照以下步骤操作,在模拟器上运行应用: + +1. 在 Android Studio 中,点击 Project 窗口中的 app 模块,然后选择 Run > Run(或点击工具栏中的 Run )。 +2. 在 Select Deployment Target 窗口中,点击 Create New Virtual Device。 + +![image](https://developer.android.com/training/basics/firstapp/images/run-avd_2x.png?hl=zh-cn) + +3. 在 Select Hardware 屏幕中,选择电话设备(如 Pixel),然后点击 Next。 +4. 在 System Image 屏幕中,选择具有最高 API 级别的版本。如果您未安装该版本,将显示一个 Download 链接,因此,请点击该链接并完成下载。 +5. 点击 Next。 +6. 在 Android Virtual Device (AVD) 屏幕上,保留所有设置不变,然后点击 Finish。 +7. 返回到 Select Deployment Target 对话框中,选择您刚刚创建的设备,然后点击 OK。 + +Android Studio 会在模拟器上安装并启动应用。 + +#### Module Name + +同样,Android 这边默认的 jsBundle moduleName 也是 “taroDemo”,位于 `MainActivity.java` 的文件里面: + +```java +package com.tarodemo; + +import com.facebook.react.ReactActivity; + +public class MainActivity extends ReactActivity { + + /** + * Returns the name of the main component registered from JavaScript. + * This is used to schedule rendering of the component. + */ + @Override + protected String getMainComponentName() { + return "taroDemo"; + } +} + +``` + +你可以根据实际情况自行修改。 + +## 调试 + +更多资料可以查看 [React Native 调试](https://reactnative.cn/docs/debugging.html)。 + +### 开发者菜单 + +React Native 在 iOS 模拟器上支持一些快捷键操作,具体会在下文中描述。要使用快捷键请务必确保模拟器的 Hardware 菜单中,Keyboard 选项下的"Connect Hardware Keyboard"处于开启状态,否则按键是没有响应的。 + +你可以通过摇晃设备或是选择 iOS 模拟器的 "Hardware" 菜单中的 "Shake Gesture" 选项来打开开发菜单。另外,如果是在 iOS 模拟器中运行,还可以按下 `Command⌘ + D` 快捷键,Android 模拟器对应的则是 `Command⌘ + M`(windows 上可能是 F1 或者 F2),或是直接在命令行中运行 `adb shell input keyevent 82` 来发送菜单键命令。 + +![image](https://reactnative.cn/docs/assets/DeveloperMenu.png) + +> 在发布(production)版本中开发者菜单将无法使用。 + +### 刷新 JavaScript +传统的原生应用开发中,每一次修改都需要重新编译,但在 RN 中你只需要刷新一下 JavaScript 代码,就能立刻看到变化。具体的操作就是在开发菜单中点击 "Reload" 选项。也可以在 iOS 模拟器中按下 `Command⌘ + R `,Android 模拟器上对应的则是 `按两下R`。 + +#### 自动刷新 +选择开发菜单中的 "Enable Live Reload" 可以开启自动刷新,这样可以节省你开发中的时间。 + +更神奇的是,你还可以保持应用的当前运行状态,修改后的 JavaScript 文件会自动注入进来(就好比行驶中的汽车不用停下就能更换新的轮胎)。要实现这一特性只需开启开发菜单中的 [Hot Reloading](https://facebook.github.io/react-native/blog/2016/03/24/introducing-hot-reloading.html) 选项。 + +> 某些情况下 hot reload 并不能顺利实施。如果碰到任何界面刷新上的问题,请尝试手动完全刷新。 + +但有些时候你必须要重新编译应用才能使修改生效: + +- 增加了新的资源(比如给 iOS 的Images.xcassets或是 Andorid 的res/drawable文件夹添加了图片) +- 更改了任何的原生代码(objective-c/swift/java) + +### 应用内的错误与警告提示(红屏和黄屏) +红屏或黄屏提示都只会在开发版本中显示,正式的离线包中是不会显示的。 + +### 红屏错误 +应用内的报错会以全屏红色显示在应用中(调试模式下),我们称为红屏(red box)报错。你可以使用console.error()来手动触发红屏错误。 + +### 黄屏警告 +应用内的警告会以全屏黄色显示在应用中(调试模式下),我们称为黄屏(yellow box)报错。点击警告可以查看详情或是忽略掉。和红屏报警类似,你可以使用 `console.warn()` 来手动触发黄屏警告。在默认情况下,开发模式中启用了黄屏警告。可以通过以下代码关闭: + +```js +console.disableYellowBox = true; +console.warn('YellowBox is disabled.'); +``` + +你也可以通过代码屏蔽指定的警告,像下面这样调用 ignoreWarnings 方法,参数为一个数组: + +``` +import {YellowBox} from 'react-native'; +YellowBox.ignoreWarnings(['Warning: ...']); +``` + +在 CI/Xcode 中,黄屏警告还可以通过设置 `IS_TESTING` 环境变量来控制启用与否。 + +> 红屏错误和黄屏警告在发布版(release/production)中都是自动禁用的。 + +### Chrome 开发者工具 +在开发者菜单中选择 "Debug JS Remotely" 选项,即可以开始在 Chrome 中调试 JavaScript 代码。点击这个选项的同时会自动打开调试页面 http://localhost:8081/debugger-ui.(如果地址栏打开的是 ip 地址,则请自行改为 localhost) + +在 Chrome 的菜单中选择 `Tools → Developer Tools` 可以打开开发者工具,也可以通过键盘快捷键来打开(Mac 上是 `Command⌘ + Option⌥ + I`,Windows 上是 `Ctrl + Shift + I或是 F12`)。打开有 [异常时暂停(Pause On Caught Exceptions)](http://stackoverflow.com/questions/2233339/javascript-is-there-a-way-to-get-chrome-to-break-on-all-errors/17324511#17324511) 选项,能够获得更好的开发体验。 + +> 注意:Chrome 中并不能直接看到 App 的用户界面,而只能提供 console 的输出,以及在 sources 项中断点调试 js 脚本。一些老的教程和文章会提到 React 的 Chrome 插件,这一插件目前并不支持 React Native,而且调试本身并不需要这个插件。不过你可以安装独立(非插件)版本的 React Developer Tools 来辅助查看界面布局,下文会讲述具体安装方法。 + +> 注意:使用 Chrome 调试目前无法观测到 React Native 中的网络请求,你可以使用功能更强大的第三方的 [react-native-debugger](https://github.com/jhen0409/react-native-debugger)来进行观测。 + +### 使用自定义的 JavaScript 调试器来调试 +如果想用其他的 JavaScript 调试器来代替 Chrome,可以设置一个名为 `REACT_DEBUGGER` 的环境变量,其值为启动自定义调试器的命令。调试的流程依然是从开发者菜单中的 "Debug JS Remotely" 选项开始。 + +被指定的调试器需要知道项目所在的目录(可以一次传递多个目录参数,以空格隔开)。例如,如果你设定了 `REACT_DEBUGGER="node /某个路径/launchDebugger.js --port 2345 --type ReactNative"`,那么启动调试器的命令就应该是 `node /某个路径/launchDebugger.js --port 2345 --type ReactNative /某个路径/你的RN项目目录`。 + +> 以这种方式执行的调试器最好是一个短进程(short-lived processes),同时最好也不要有超过 200k 的文字输出。 + +### 使用 Chrome 开发者工具来在设备上调试 +> If you're using Create React Native App, this is configured for you already. + +对于 iOS 真机来说,需要打开 RCTWebSocketExecutor.m 文件,然后将其中的 "localhost" 改为你的电脑的 IP 地址,最后启用开发者菜单中的 "Debug JS Remotely" 选项。 + +对于 Android 5.0+设备(包括模拟器)来说,将设备通过 USB 连接到电脑上后,可以使用adb命令行工具来设定从设备到电脑的端口转发: + +```sh +adb reverse tcp:8081 tcp:8081 +``` + +如果设备 Android 版本在 5.0 以下,则可以在开发者菜单中选择"Dev Settings - Debug server host for device",然后在其中填入电脑的”IP 地址:端口“。 + +如果在 Chrome 调试时遇到一些问题,那有可能是某些 Chrome 的插件引起的。试着禁用所有的插件,然后逐个启用,以确定是否某个插件影响到了调试。 + +### 使用 React Developer Tools 调试 +You can use [the standalone version of React Developer Tools](https://github.com/facebook/react-devtools/tree/master/packages/react-devtools) to debug the React component hierarchy. To use it, install the react-devtools package globally: + +```sh +npm install -g react-devtools +``` + +> 译注:react-devtools 依赖于 electron,而 electron 需要到国外服务器下载二进制包,所以国内用户这一步很可能会卡住。此时请在环境变量中添加 electron 专用的国内镜像源:ELECTRON_MIRROR="https://npm.taobao.org/mirrors/electron/",然后再尝试安装 react-devtools。 + +安装完成后在命令行中执行 `react-devtools` 即可启动此工具: + +```sh +react-devtools +``` + +![image](https://reactnative.cn/docs/assets/ReactDevTools.png) + +It should connect to your simulator within a few seconds. + +> Note: if you prefer to avoid global installations, you can add react-devtools as a project dependency. Add the react-devtools package to your project using npm install --save-dev react-devtools, then add "react-devtools": "react-devtools" to the scripts section in your package.json, and then run npm run react-devtools from your project folder to open the DevTools. + +#### Integration with React Native Inspector +Open the in-app developer menu and choose "Show Inspector". It will bring up an overlay that lets you tap on any UI element and see information about it: + +![image](https://reactnative.cn/docs/assets/Inspector.gif) + +However, when `react-devtools` is running, Inspector will enter a special collapsed mode, and instead use the DevTools as primary UI. In this mode, clicking on something in the simulator will bring up the relevant components in the DevTools: + +![image](https://reactnative.cn/docs/assets/ReactDevToolsInspector.gif) + +You can choose "Hide Inspector" in the same menu to exit this mode. + +#### Inspecting Component Instances + +When debugging JavaScript in Chrome, you can inspect the props and state of the React components in the browser console. + +First, follow the instructions for debugging in Chrome to open the Chrome console. + +Make sure that the dropdown in the top left corner of the Chrome console says `debuggerWorker.js`. This step is essential. + +Then select a React component in React DevTools. There is a search box at the top that helps you find one by name. As soon as you select it, it will be available as `$r` in the Chrome console, letting you inspect its props, state, and instance properties. + +![image](https://reactnative.cn/docs/assets/ReactDevToolsDollarR.gif) + +### 使用 React Native Debugger 调试 + +[React Native Debugger ](https://github.com/jhen0409/react-native-debugger),一个基于 React Native 官方调试方式、包含 React Inspector / Redux DevTools 独立应用: + +- 基于官方的 [Remote Debugger](https://facebook.github.io/react-native/docs/debugging.html#chrome-developer-tools) 且提供了更为丰富的功能 +- 包含 [`react-devtools-core`](https://github.com/facebook/react-devtools/tree/master/packages/react-devtools-core) 的 [React Inspector](https://github.com/jhen0409/react-native-debugger/blob/master/docs/react-devtools-integration.md) +- 包含 Redux DevTools,且与 [`redux-devtools-extension`](https://github.com/zalmoxisus/redux-devtools-extension) 保持 [API](https://github.com/jhen0409/react-native-debugger/blob/master/docs/redux-devtools-integration.md) 一致 + +![image](https://user-images.githubusercontent.com/3001525/29451479-6621bf1a-83c8-11e7-8ebb-b4e98b1af91c.png) + +#### 安装 + +不同平台及版本的安装包,请点击[这里](https://github.com/jhen0409/react-native-debugger/releases)。 + +**macOS** 平台可以使用 [Homebrew Cask](https://caskroom.github.io/) 安装: + +```sh +$ brew update && brew cask install react-native-debugger +``` + +#### 启动 + +在启动 React Native Debugger 之前,请先确认以下内容: + +- 所有的 React Native 的 debugger 客户端已关闭,特别是 `http://localhost:/debugger-ui` +- React Native Debugger 会尝试连接 debugger 代理, React Native 默认使用 `8081` 端口, 你可以新建一个 debugger 窗口 (macOS: `Command + T`,Linux/Windows: `Ctrl + T`) 开定义端口 +- 保证 [developer menu](https://facebook.github.io/react-native/docs/debugging.html#accessing-the-in-app-developer-menu) 的 `Debug JS Remotely` 处于开启状态 + +你可以启动应用之后再修改端口,也可以直接通过命令行启动应用时指定端口: + +```sh +$ open "rndebugger://set-debugger-loc?host=localhost&port=8081" +``` + +> 如果启动之后调试窗口空白,请确认调试端口正确。 + +#### 使用 Redux DevTools Extension API + +Use the same API as [`redux-devtools-extension`](https://github.com/zalmoxisus/redux-devtools-extension#1-with-redux) is very simple: + +```jsx +const store = createStore( + reducer, /* preloadedState, */ + window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__() +) +``` + +See [`Redux DevTools Integration`](https://github.com/jhen0409/react-native-debugger/blob/master/docs/redux-devtools-integration.md) section for more information. + +#### 更多资料 + +- [快速开始](https://github.com/jhen0409/react-native-debugger/blob/master/docs/getting-started.md) +- [Debugger 整合](https://github.com/jhen0409/react-native-debugger/blob/master/docs/debugger-integration.md) +- [React DevTools 整合](https://github.com/jhen0409/react-native-debugger/blob/master/docs/react-devtools-integration.md) +- [Redux DevTools 整合](https://github.com/jhen0409/react-native-debugger/blob/master/docs/redux-devtools-integration.md) +- [Shortcut references](https://github.com/jhen0409/react-native-debugger/blob/master/docs/shortcut-references.md) +- [Network inspect of Chrome Developer Tools](https://github.com/jhen0409/react-native-debugger/blob/master/docs/network-inspect-of-chrome-devtools.md) +- [Enable open in editor in console](https://github.com/jhen0409/react-native-debugger/blob/master/docs/enable-open-in-editor-in-console.md) +- [Troubleshooting](https://github.com/jhen0409/react-native-debugger/blob/master/docs/troubleshooting.md) +- [Contributing](https://github.com/jhen0409/react-native-debugger/blob/master/docs/contributing.md) + +## 使用原生模块 +有一些平台性的差异是 Taro 无法抹平的,比如支付、登录等,这时候就需要自己写跨端代码,RN 端这边可能还需要修改原生代码。 + +例如登录的功能: + +![image](https://user-images.githubusercontent.com/9441951/56015544-ff513600-5d2b-11e9-92a6-ad01d21b2b8f.png) + +React Native 参考文档:[原生模块](https://reactnative.cn/docs/0.55/native-modules-ios/) + +## 集成到现有原生 app +Taro 编译后的项目实际上就是一个 native React Native 项目,所以集成到现有原生 app 的流程和 React Native 也是一样的。 + +如果你正准备从头开始制作一个新的应用,那么 React Native 会是个非常好的选择。但如果你只想给现有的原生应用中添加一两个视图或是业务流程,React Native 也同样不在话下。只需简单几步,你就可以给原有应用加上新的基于 React Native 的特性、画面和视图等。 + +React Native 参考文档:[集成到现有原生应用](https://reactnative.cn/docs/0.55/integration-with-existing-apps/) + +## 构建独立 app + +接下来的步骤将会帮助你为 iOS 和 Android 创建 Expo 应用程序的独立二进制文件,并将其提交到 Apple App Store 和 Google Play Store。 + +构建 iOS 独立应用程序需要 Apple Developer 帐户,但构建 Android 独立应用程序不需要 Google Play Developer 帐户。如果您想要提交到任一应用商店,您将需要该商店的开发者帐户。 + +在打包发布步骤之前,我们先对开发者的源代码进行预处理,将 Taro 代码转成 React Native 代码: + +``` bash +taro build --type rn +``` + +然后 `.rn_temp` 目录(如果你没有修改)下会生成转换后的 React Native 代码。 + +### 配置 app.json + +在 config 目录配置,如: + +```json +rn: { + appJson: { + "name": "Your App Name", + } +} +``` + +Taro 会读取 appJson 字段的内容且自动覆盖到 .rn_temp/app.json。 + +### 构建 app +首先使用 React Native 的 bundle 命令将 rn_temp 目录下的 RN 代码及资源打包成 jsbundle,命令如下: + +```sh +node ../node_modules/react-native/local-cli/cli.js bundle --entry-file ./rn_temp/index.js --bundle-output ./bundle/index.bundle --assets-dest ./${BUNDLE_DIR_NAME} --dev false +``` + +其中参数可以自行调整,`--bundle-output` 可以制定任意目录,然后将 bundle 目录下的文件 copy 到 `taro-native-shell`目录即可。 + +当然,也可以通过指定 `--bundle-output` 直接打包到 `taro-native-shell`目录。 + +接下来,按照 React Native 的文档按照不同的端分别打包对应的应用即可。 + +#### iOS + +参考文档:[在设备上运行](https://reactnative.cn/docs/0.55/running-on-device/) + +#### Android +参考文档:[打包APK](https://reactnative.cn/docs/0.55/signed-apk-android/) + +## 发布 +打包好的应用发布到 App Store 或各大应用商店可以查看官方文档。 + +- [Overview of publishing an app](https://help.apple.com/app-store-connect/#/dev34e9bbb5a) +- [Publish your app | Android Developers](https://developer.android.com/studio/publish) + +## 更新 React Native 版本 +Taro RN 版本暂时固定在 0.55.4 ,用户如有需求,可以自行升级到更高版本。步骤如下: + +1. 更新 Taro 项目中 `package.json` React Native 版本,并重新安装依赖 +2. 更新 `taro-native-shell` 项目中 `package.json` React Native 版本,并重新安装依赖 +3. 分别重新安装 `taro-native-shell` 项目中 ios/android 依赖,如 iOS:`cd ios && pod install` + +> 如果对 react 版本有要求,可以同步更新。 + +## 常见错误 + +### No bundle url present + +导致这个报错的原因很多,最常见的是电脑开了代理。具体可以参考 [#12754](https://github.com/facebook/react-native/issues/12754) + +### UnableToResolveError: Unable to resolve module `AccessibilityInfo` + +原因很多,我这边是重启电脑就好了😂。 具体可以查看 [#14209](https://github.com/facebook/react-native/issues/14209) + +### Metro Bundler error: Expected path […] to be relative to one of the project roots + +不支持 `npm link`,可以使用 [nicojs/node-install-local](https://github.com/nicojs/node-install-local) 替代。 + +### Image component does not resolve images with filenames that include '@' symbol + +![image](https://user-images.githubusercontent.com/22125059/44312799-373dee80-a3d4-11e8-8367-9cf44e851739.PNG) + +React Native 不支持路径中带 @ 符号,具体可以查看 [#14980](https://github.com/facebook/react-native/issues/14980)。 + +### The development server returned response error code 500 + +![image](https://user-images.githubusercontent.com/25324938/41452372-42c1e766-708f-11e8-96ce-323eaa1eb03f.jpeg) +多半是依赖的问题,进入 `.rn_temp/` 目录,然后删除 npm 依赖,在重新安装就可以了。 +也可以试一下以下命令: + +```shell +watchman watch-del-all +rm -rf node_modules && npm install +rm -fr $TMPDIR/react-* +``` + +具体可以参考 [#1282](https://github.com/expo/expo/issues/1282) + +### app 加载阻塞: "Building JavaScript bundle... 100%" + +![image](https://user-images.githubusercontent.com/9441951/47762170-7bb00980-dcf6-11e8-95ab-41152076c3de.png) + +可能的原因很多,可以参考这个 issue:[react-community/create-react-native-app#392](https://github.com/react-community/create-react-native-app/issues/392) + +## 参考 + +- [React Native 中文网](https://reactnative.cn/) +- [Android 开发文档](https://developer.android.com/guide?hl=zh-cn) +- [Android Studio 用户指南](https://developer.android.com/studio/intro?hl=zh-cn) +- [Apple Developer Documentation](https://developer.apple.com/documentation/) +- [React Native Debugger ](https://github.com/jhen0409/react-native-debugger) diff --git a/website/versioned_docs/version-2.0.0-beta.4/size.md b/website/versioned_docs/version-2.0.0-beta.4/size.md new file mode 100644 index 000000000000..317af0c39ebf --- /dev/null +++ b/website/versioned_docs/version-2.0.0-beta.4/size.md @@ -0,0 +1,172 @@ +--- +title: 设计稿及尺寸单位 +id: version-2.0.0-beta.4-size +original_id: size +--- + +在 Taro 中尺寸单位建议使用 `px`、 `百分比 %`,Taro 默认会对所有单位进行转换。在 Taro 中书写尺寸按照 1:1 的关系来进行书写,即从设计稿上量的长度 `100px`,那么尺寸书写就是 `100px`,当转成微信小程序的时候,尺寸将默认转换为 `100rpx`,当转成 H5 时将默认转换为以 `rem` 为单位的值。 + +如果你希望部分 `px` 单位不被转换成 `rpx` 或者 `rem` ,最简单的做法就是在 px 单位中增加一个大写字母,例如 `Px` 或者 `PX` 这样,则会被转换插件忽略。 + +结合过往的开发经验,Taro 默认以 `750px` 作为换算尺寸标准,如果设计稿不是以 `750px` 为标准,则需要在项目配置 `config/index.js` 中进行设置,例如设计稿尺寸是 `640px`,则需要修改项目配置 `config/index.js` 中的 `designWidth` 配置为 `640`: + +```jsx +const config = { + projectName: 'myProject', + date: '2018-4-18', + designWidth: 640, + .... +} +``` + +目前 Taro 支持 `750`、 `640` 、 `828` 三种尺寸设计稿,他们的换算规则如下: + +```jsx +const deviceRatio = { + '640': 2.34 / 2, + '750': 1, + '828': 1.81 / 2 +} +``` + +建议使用 Taro 时,设计稿以 iPhone 6 `750px` 作为设计尺寸标准。 + +如果你的设计稿是 `375` ,不在以上三种之中,那么你需要把 `designWidth` 配置为 `375`,同时在 `deviceRatio` 中添加换算规则如下: +```js +{ + designWidth: 375, + deviceRatio: { + '375': 1 / 2, + '640': 2.34 / 2, + '750': 1, + '828': 1.81 / 2 + } +} +``` + +## API + +在编译时,Taro 会帮你对样式做尺寸转换操作,但是如果是在 JS 中书写了行内样式,那么编译时就无法做替换了,针对这种情况,Taro 提供了 API `Taro.pxTransform` 来做运行时的尺寸转换。 + +```jsx +Taro.pxTransform(10) // 小程序:rpx,H5:rem +``` + +## 配置 + +默认配置会对所有的 `px` 单位进行转换,有大写字母的 `Px` 或 `PX` 则会被忽略。 + +参数默认值如下: + +```js +{ + onePxTransform: true, + unitPrecision: 5, + propList: ['*'], + selectorBlackList: [], + replace: true, + mediaQuery: false, + minPixelValue: 0 +} +``` + +Type: `Object | Null` + +### `onePxTransform` (Boolean) + +设置 1px 是否需要被转换 + +### `unitPrecision` (Number) + +REM 单位允许的小数位。 + +### `propList` (Array) + +允许转换的属性。 + +- Values need to be exact matches. +- Use wildcard `*` to enable all properties. Example: `['*']` +- Use `*` at the start or end of a word. (`['*position*']` will match `background-position-y`) +- Use `!` to not match a property. Example: `['*', '!letter-spacing']` +- Combine the "not" prefix with the other prefixes. Example: `['*', '!font*']` + +### `selectorBlackList` + +黑名单里的选择器将会被忽略。 + +- If value is string, it checks to see if selector contains the string. + - `['body']` will match `.body-class` +- If value is regexp, it checks to see if the selector matches the regexp. + - `[/^body$/]` will match `body` but not `.body` + +### `replace` (Boolean) + +直接替换而不是追加一条进行覆盖。 + +### `mediaQuery` (Boolean) + +允许媒体查询里的 px 单位转换 + +### `minPixelValue` (Number) + +设置一个可被转换的最小 px 值 + +配置规则对应到 `config/index.js` ,例如: + +```js +{ + h5: { + publicPath: '/', + staticDirectory: 'static', + module: { + postcss: { + autoprefixer: { + enable: true + }, + pxtransform: { + enable: true, + config: { + selectorBlackList: ['body'] + } + } + } + } + }, + weapp: { + // ... + module: { + postcss: { + pxtransform: { + enable: true, + config: { + selectorBlackList: ['body'] + } + } + } + } + } +} +``` + +## 忽略 + +### 属性 + +当前忽略单个属性的最简单的方法,就是 px 单位使用大写字母。 + +```css + /* `px` is converted to `rem` */ +.convert { + font-size: 16px; // converted to 1rem +} + + /* `Px` or `PX` is ignored by `postcss-pxtorem` but still accepted by browsers */ +.ignore { + border: 1Px solid; // ignored + border-width: 2PX; // ignored +} +``` + +### 文件 + +对于头部包含注释 `/*postcss-pxtransform disable*/` 的文件,插件不予处理。 diff --git a/website/versioned_docs/version-2.0.0-beta.4/taroize.md b/website/versioned_docs/version-2.0.0-beta.4/taroize.md new file mode 100644 index 000000000000..2bc6737f62f6 --- /dev/null +++ b/website/versioned_docs/version-2.0.0-beta.4/taroize.md @@ -0,0 +1,253 @@ +--- +title: 微信小程序转 Taro +id: version-2.0.0-beta.4-taroize +original_id: taroize +--- + +> 自 `v1.2.0` 开始支持此功能 + +Taro 可以将你的原生微信小程序应用转换为 Taro 代码,进而你可以通过 `taro build` 的命令将 Taro 代码转换为对应平台的代码,或者对转换后的 Taro 代码用 React 的方式进行二次开发。 + +微信原生小程序转 Taro 的操作非常简单,首先必须安装使用 `npm i -g @tarojs/cli` 安装 Taro 命令行工具,其次在命令行中定位到小程序项目的根目录,根目录中运行: + +```bash +$ taro convert +``` + +即可完成转换。转换后的代码保存在根目录下的 `taroConvert` 文件夹下。你需要定位到 `taroConvert` 目录执行 `npm install` 命令之后就可以使用 `taro build` 命令编译到对应平台的代码。 + +## 二次开发 + +假设已有一个转换后文件如下: + +```javascript +import { View } from '@tarojs/components' +import Taro from '@tarojs/taro' +import withWeapp from '@tarojs/with-weapp' +import './index.scss' + +var app = Taro.getApp() + +@withWeapp('Page') +class _C extends Taro.Component { + state = {} + + componentWillMount(e) { + var orderId = e.id + this.data.orderId = orderId + } + + componentDidShow() { + var that = this + Taro.request({ + url: 'https://api.it120.cc/' + app.globalData.subDomain + '/order/detail', + data: { + token: Taro.getStorageSync('token'), + id: that.data.orderId + }, + success: res => { + Taro.hideLoading() + if (res.data.code != 0) { + Taro.showModal({ + title: '错误', + content: res.data.msg, + showCancel: false + }) + return + } + that.setData({ + orderDetail: res.data.data, + logisticsTraces: res.data.data.logisticsTraces.reverse() + }) + } + }) + } + + config = { + navigationBarTitleText: '物流详情' + } + + render() { + const { + orderDetail: orderDetail, + logisticsTraces: logisticsTraces + } = this.state + return ( + + + + 物流单号 + {orderDetail.logistics.trackingNumber} + + + 物流公司 + {orderDetail.logistics.shipperName} + + + + + + {logisticsTraces.map((item, index) => { + return ( + + + + ) + })} + + + + ) + } +} + +export default _C +``` + +它看起来就像普通的 Taro 组件,最重要的区别就在于 `@withWeapp()` 这个装饰器,你可以将它理解为转换代码的运行时,`@withWeapp()` 会增加一些原来 Taro 没有方法和属性,例如: + +### `this.setData` + +转换后的 `this.setData` 的 API 相当于小程序的 `this.setData` 的 polyfill,他和 `this.setState` 最大的区别就在于,`this.setData` 之后 `data` 的数据是同步更新,而渲染是异步更新,而 `setState` 两者都是异步的。 + +### `this.data` 和 `this.properties` + +`this.data` 和 `this.properties` 相当于 Taro 的 `this.state` 和 `this.props` 的 alias,当它们的数据更新时,对应的 `state` 和 `props` 也会同步更新。 + +### 生命周期 + +Taro 会将原始文件的生命周期钩子函数转换为 Taro 的生命周期,完整对应关系如下: + +| Page.onLoad | componentWillMount | +| --: | --: | +| onShow | componentDidShow | +| onHide | componentDidHide | +| onReady | componentDidMount | +| onUnload | componentWillUnmount | +| onError | componentDidCatchError | +| App.onLaunch | componentWillMount | +| Component.created | componentWillMount | +| attached | componentDidMount | +| ready | componentDidMount | +| detached | componentWillUnmount | +| moved | 保留 | + +## 常见问题 + +### 在小程序 IDE 显示 `_createData` 错误 + +这个错误通常是由于原始代码的初始 `data` 中没有对应的数据,后来通过 `this.setData` 补充数据造成的。在 Taro 中推荐不管是 `state(data)` 还是 `properties(props)` 都要设置一个默认值。你可以在类构造器或修改原始代码提供一个默认值解决这个问题,这也应该是编写代码的最佳实践。 + +### 转换 `wxParse` 报错不存在文件 + +这是由于 `wxParse` 的源码使用了一个[不存在的 `template`](https://github.com/icindy/wxParse/issues/255) 声明造成的。你可以修改 `wxParse` 的源码文件 `wxParse.wxml` 134 行到 207 行: + +```html + +