From a55eda8891519f55a8b6d5de898b9385a17dcb26 Mon Sep 17 00:00:00 2001 From: neverland Date: Sat, 12 May 2018 14:04:32 +0800 Subject: [PATCH] [Improvement] Rebuild test system (#1051) --- .babelrc | 5 + build/bin/build-components.js | 5 +- docs/demos/views/coupon.vue | 1 + docs/demos/views/image-preview.vue | 2 +- docs/demos/views/panel.vue | 4 + docs/demos/views/password-input.vue | 2 +- docs/demos/views/steps.vue | 2 +- docs/demos/views/waterfall.vue | 2 +- docs/markdown/en-US/password-input.md | 2 +- docs/markdown/en-US/steps.md | 2 +- docs/markdown/zh-CN/password-input.md | 2 +- docs/markdown/zh-CN/steps.md | 2 +- package.json | 75 +- .../test/__snapshots__/index.spec.js.snap | 67 + packages/actionsheet/test/index.spec.js | 26 + .../test/__snapshots__/index.spec.js.snap | 165 ++ packages/address-edit/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 56 + packages/address-list/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 209 ++ packages/area/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 26 + packages/badge/test/index.spec.js | 27 + .../test/__snapshots__/index.spec.js.snap | 55 + packages/button/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 49 + packages/card/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 51 + packages/cell-swipe/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 110 + packages/cell/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 123 + packages/checkbox/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 28 + packages/circle/test/index.spec.js | 4 + .../col/test/__snapshots__/index.spec.js.snap | 27 + packages/col/test/index.spec.js | 3 + .../test/__snapshots__/index.spec.js.snap | 114 + packages/collapse/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 100 + packages/contact-card/test/index.spec.js | 3 + .../test/__snapshots__/index.spec.js.snap | 130 ++ packages/coupon-cell/test/index.spec.js | 34 + packages/coupon-list/index.vue | 1 + .../test/__snapshots__/index.spec.js.snap | 349 +++ packages/datetime-picker/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 61 + packages/dialog/test/index.spec.js | 3 + .../test/__snapshots__/index.spec.js.snap | 143 ++ packages/field/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 42 + packages/goods-action/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 388 ++++ packages/icon/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 22 + packages/list/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 14 + packages/loading/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 30 + packages/nav-bar/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 46 + packages/notice-bar/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 56 + packages/number-keyboard/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 71 + packages/pagination/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 45 + packages/panel/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 49 + packages/password-input/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 112 + packages/picker/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 54 + packages/popup/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 21 + packages/progress/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 18 + packages/pull-refresh/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 48 + packages/radio/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 81 + packages/search/test/index.spec.js | 4 + .../sku/test/__snapshots__/index.spec.js.snap | 3 + packages/sku/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 26 + packages/slider/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 27 + packages/stepper/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 131 ++ packages/steps/test/index.spec.js | 4 + packages/submit-bar/index.vue | 10 +- .../test/__snapshots__/index.spec.js.snap | 78 + packages/submit-bar/test/index.spec.js | 26 + packages/swipe/index.vue | 8 +- .../test/__snapshots__/index.spec.js.snap | 58 + packages/swipe/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 60 + packages/switch-cell/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 34 + packages/switch/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 75 + packages/tabbar/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 196 ++ packages/tabs/test/index.spec.js | 3 + .../tag/test/__snapshots__/index.spec.js.snap | 12 + packages/tag/test/index.spec.js | 4 + .../test/__snapshots__/index.spec.js.snap | 24 + packages/toast/test/index.spec.js | 3 + .../test/__snapshots__/index.spec.js.snap | 64 + packages/tree-select/test/index.spec.js | 27 + .../test/__snapshots__/index.spec.js.snap | 26 + packages/uploader/test/index.spec.js | 4 + packages/utils/test/index.spec.js | 55 + test/components/badge.vue | 6 - test/components/checkbox.vue | 22 - test/components/collapse.vue | 21 - test/components/field.vue | 16 - test/components/goods-action.vue | 16 - test/components/more-tabs.vue | 20 - test/components/notice-bar.vue | 16 - test/components/number-keyboard.vue | 13 - test/components/radio.vue | 16 - test/components/row.vue | 13 - test/components/steps.vue | 18 - test/components/tabbar.vue | 32 - test/components/tabs.vue | 38 - test/components/waterfall/waterfall-hide.vue | 45 - test/components/waterfall/waterfall.vue | 47 - test/demo-test.js | 34 + test/get-webpack-conf.js | 72 - test/index.js | 20 - test/karma.conf.js | 27 - test/selector.js | 21 - test/specs/actionsheet.spec.js | 147 -- test/specs/address-edit.spec.js | 423 ---- test/specs/address-list.spec.js | 80 - test/specs/area.spec.js | 153 -- test/specs/badge.spec.js | 29 - test/specs/button.spec.js | 150 -- test/specs/card.spec.js | 19 - test/specs/cell-swipe.spec.js | 144 -- test/specs/cell.spec.js | 94 - test/specs/checkbox.spec.js | 214 -- test/specs/circle.spec.js | 65 - test/specs/collapse.spec.js | 47 - test/specs/contact.spec.js | 267 --- test/specs/coupon.spec.js | 324 --- test/specs/datetime-picker.spec.js | 165 -- test/specs/deep-assign.spec.js | 96 - test/specs/dialog.spec.js | 87 - test/specs/field.spec.js | 199 -- test/specs/goods-action.spec.js | 47 - test/specs/icon.spec.js | 21 - test/specs/image-preview.spec.js | 62 - test/specs/layout.spec.js | 41 - test/specs/list.spec.js | 68 - test/specs/loading.spec.js | 73 - test/specs/nav-bar.spec.js | 43 - test/specs/notice-bar.spec.js | 61 - test/specs/number-keyboard.spec.js | 169 -- test/specs/pagination.spec.js | 134 -- test/specs/password-input.spec.js | 56 - test/specs/picker.spec.js | 283 --- test/specs/popup.spec.js | 182 -- test/specs/progress.spec.js | 82 - test/specs/pull-refresh.spec.js | 139 -- test/specs/radio.spec.js | 115 - test/specs/search.spec.js | 104 - test/specs/sku.spec.js | 402 ---- test/specs/slider.spec.js | 90 - test/specs/stepper.spec.js | 152 -- test/specs/steps.spec.js | 41 - test/specs/submit-bar.spec.js | 100 - test/specs/switch-cell.spec.js | 95 - test/specs/switch.spec.js | 87 - test/specs/tabbar.spec.js | 23 - test/specs/tabs.spec.js | 166 -- test/specs/tag.spec.js | 21 - test/specs/toast.spec.js | 141 -- test/specs/tree-select.spec.js | 68 - test/specs/uploader.spec.js | 137 -- test/specs/utils.spec.js | 57 - test/specs/waterfall.spec.js | 91 - test/utils.js | 84 - yarn.lock | 2027 ++++++----------- 185 files changed, 4989 insertions(+), 7950 deletions(-) create mode 100644 packages/actionsheet/test/__snapshots__/index.spec.js.snap create mode 100644 packages/actionsheet/test/index.spec.js create mode 100644 packages/address-edit/test/__snapshots__/index.spec.js.snap create mode 100644 packages/address-edit/test/index.spec.js create mode 100644 packages/address-list/test/__snapshots__/index.spec.js.snap create mode 100644 packages/address-list/test/index.spec.js create mode 100644 packages/area/test/__snapshots__/index.spec.js.snap create mode 100644 packages/area/test/index.spec.js create mode 100644 packages/badge/test/__snapshots__/index.spec.js.snap create mode 100644 packages/badge/test/index.spec.js create mode 100644 packages/button/test/__snapshots__/index.spec.js.snap create mode 100644 packages/button/test/index.spec.js create mode 100644 packages/card/test/__snapshots__/index.spec.js.snap create mode 100644 packages/card/test/index.spec.js create mode 100644 packages/cell-swipe/test/__snapshots__/index.spec.js.snap create mode 100644 packages/cell-swipe/test/index.spec.js create mode 100644 packages/cell/test/__snapshots__/index.spec.js.snap create mode 100644 packages/cell/test/index.spec.js create mode 100644 packages/checkbox/test/__snapshots__/index.spec.js.snap create mode 100644 packages/checkbox/test/index.spec.js create mode 100644 packages/circle/test/__snapshots__/index.spec.js.snap create mode 100644 packages/circle/test/index.spec.js create mode 100644 packages/col/test/__snapshots__/index.spec.js.snap create mode 100644 packages/col/test/index.spec.js create mode 100644 packages/collapse/test/__snapshots__/index.spec.js.snap create mode 100644 packages/collapse/test/index.spec.js create mode 100644 packages/contact-card/test/__snapshots__/index.spec.js.snap create mode 100644 packages/contact-card/test/index.spec.js create mode 100644 packages/coupon-cell/test/__snapshots__/index.spec.js.snap create mode 100644 packages/coupon-cell/test/index.spec.js create mode 100644 packages/datetime-picker/test/__snapshots__/index.spec.js.snap create mode 100644 packages/datetime-picker/test/index.spec.js create mode 100644 packages/dialog/test/__snapshots__/index.spec.js.snap create mode 100644 packages/dialog/test/index.spec.js create mode 100644 packages/field/test/__snapshots__/index.spec.js.snap create mode 100644 packages/field/test/index.spec.js create mode 100644 packages/goods-action/test/__snapshots__/index.spec.js.snap create mode 100644 packages/goods-action/test/index.spec.js create mode 100644 packages/icon/test/__snapshots__/index.spec.js.snap create mode 100644 packages/icon/test/index.spec.js create mode 100644 packages/list/test/__snapshots__/index.spec.js.snap create mode 100644 packages/list/test/index.spec.js create mode 100644 packages/loading/test/__snapshots__/index.spec.js.snap create mode 100644 packages/loading/test/index.spec.js create mode 100644 packages/nav-bar/test/__snapshots__/index.spec.js.snap create mode 100644 packages/nav-bar/test/index.spec.js create mode 100644 packages/notice-bar/test/__snapshots__/index.spec.js.snap create mode 100644 packages/notice-bar/test/index.spec.js create mode 100644 packages/number-keyboard/test/__snapshots__/index.spec.js.snap create mode 100644 packages/number-keyboard/test/index.spec.js create mode 100644 packages/pagination/test/__snapshots__/index.spec.js.snap create mode 100644 packages/pagination/test/index.spec.js create mode 100644 packages/panel/test/__snapshots__/index.spec.js.snap create mode 100644 packages/panel/test/index.spec.js create mode 100644 packages/password-input/test/__snapshots__/index.spec.js.snap create mode 100644 packages/password-input/test/index.spec.js create mode 100644 packages/picker/test/__snapshots__/index.spec.js.snap create mode 100644 packages/picker/test/index.spec.js create mode 100644 packages/popup/test/__snapshots__/index.spec.js.snap create mode 100644 packages/popup/test/index.spec.js create mode 100644 packages/progress/test/__snapshots__/index.spec.js.snap create mode 100644 packages/progress/test/index.spec.js create mode 100644 packages/pull-refresh/test/__snapshots__/index.spec.js.snap create mode 100644 packages/pull-refresh/test/index.spec.js create mode 100644 packages/radio/test/__snapshots__/index.spec.js.snap create mode 100644 packages/radio/test/index.spec.js create mode 100644 packages/search/test/__snapshots__/index.spec.js.snap create mode 100644 packages/search/test/index.spec.js create mode 100644 packages/sku/test/__snapshots__/index.spec.js.snap create mode 100644 packages/sku/test/index.spec.js create mode 100644 packages/slider/test/__snapshots__/index.spec.js.snap create mode 100644 packages/slider/test/index.spec.js create mode 100644 packages/stepper/test/__snapshots__/index.spec.js.snap create mode 100644 packages/stepper/test/index.spec.js create mode 100644 packages/steps/test/__snapshots__/index.spec.js.snap create mode 100644 packages/steps/test/index.spec.js create mode 100644 packages/submit-bar/test/__snapshots__/index.spec.js.snap create mode 100644 packages/submit-bar/test/index.spec.js create mode 100644 packages/swipe/test/__snapshots__/index.spec.js.snap create mode 100644 packages/swipe/test/index.spec.js create mode 100644 packages/switch-cell/test/__snapshots__/index.spec.js.snap create mode 100644 packages/switch-cell/test/index.spec.js create mode 100644 packages/switch/test/__snapshots__/index.spec.js.snap create mode 100644 packages/switch/test/index.spec.js create mode 100644 packages/tabbar/test/__snapshots__/index.spec.js.snap create mode 100644 packages/tabbar/test/index.spec.js create mode 100644 packages/tabs/test/__snapshots__/index.spec.js.snap create mode 100644 packages/tabs/test/index.spec.js create mode 100644 packages/tag/test/__snapshots__/index.spec.js.snap create mode 100644 packages/tag/test/index.spec.js create mode 100644 packages/toast/test/__snapshots__/index.spec.js.snap create mode 100644 packages/toast/test/index.spec.js create mode 100644 packages/tree-select/test/__snapshots__/index.spec.js.snap create mode 100644 packages/tree-select/test/index.spec.js create mode 100644 packages/uploader/test/__snapshots__/index.spec.js.snap create mode 100644 packages/uploader/test/index.spec.js create mode 100644 packages/utils/test/index.spec.js delete mode 100644 test/components/badge.vue delete mode 100644 test/components/checkbox.vue delete mode 100644 test/components/collapse.vue delete mode 100644 test/components/field.vue delete mode 100644 test/components/goods-action.vue delete mode 100644 test/components/more-tabs.vue delete mode 100644 test/components/notice-bar.vue delete mode 100644 test/components/number-keyboard.vue delete mode 100644 test/components/radio.vue delete mode 100644 test/components/row.vue delete mode 100644 test/components/steps.vue delete mode 100644 test/components/tabbar.vue delete mode 100644 test/components/tabs.vue delete mode 100644 test/components/waterfall/waterfall-hide.vue delete mode 100644 test/components/waterfall/waterfall.vue create mode 100644 test/demo-test.js delete mode 100644 test/get-webpack-conf.js delete mode 100644 test/index.js delete mode 100644 test/karma.conf.js delete mode 100644 test/selector.js delete mode 100644 test/specs/actionsheet.spec.js delete mode 100644 test/specs/address-edit.spec.js delete mode 100644 test/specs/address-list.spec.js delete mode 100644 test/specs/area.spec.js delete mode 100644 test/specs/badge.spec.js delete mode 100644 test/specs/button.spec.js delete mode 100644 test/specs/card.spec.js delete mode 100644 test/specs/cell-swipe.spec.js delete mode 100644 test/specs/cell.spec.js delete mode 100644 test/specs/checkbox.spec.js delete mode 100644 test/specs/circle.spec.js delete mode 100644 test/specs/collapse.spec.js delete mode 100644 test/specs/contact.spec.js delete mode 100644 test/specs/coupon.spec.js delete mode 100644 test/specs/datetime-picker.spec.js delete mode 100644 test/specs/deep-assign.spec.js delete mode 100644 test/specs/dialog.spec.js delete mode 100644 test/specs/field.spec.js delete mode 100644 test/specs/goods-action.spec.js delete mode 100644 test/specs/icon.spec.js delete mode 100644 test/specs/image-preview.spec.js delete mode 100644 test/specs/layout.spec.js delete mode 100644 test/specs/list.spec.js delete mode 100644 test/specs/loading.spec.js delete mode 100644 test/specs/nav-bar.spec.js delete mode 100644 test/specs/notice-bar.spec.js delete mode 100644 test/specs/number-keyboard.spec.js delete mode 100644 test/specs/pagination.spec.js delete mode 100644 test/specs/password-input.spec.js delete mode 100644 test/specs/picker.spec.js delete mode 100644 test/specs/popup.spec.js delete mode 100644 test/specs/progress.spec.js delete mode 100644 test/specs/pull-refresh.spec.js delete mode 100644 test/specs/radio.spec.js delete mode 100644 test/specs/search.spec.js delete mode 100644 test/specs/sku.spec.js delete mode 100644 test/specs/slider.spec.js delete mode 100644 test/specs/stepper.spec.js delete mode 100644 test/specs/steps.spec.js delete mode 100644 test/specs/submit-bar.spec.js delete mode 100644 test/specs/switch-cell.spec.js delete mode 100644 test/specs/switch.spec.js delete mode 100644 test/specs/tabbar.spec.js delete mode 100644 test/specs/tabs.spec.js delete mode 100644 test/specs/tag.spec.js delete mode 100644 test/specs/toast.spec.js delete mode 100644 test/specs/tree-select.spec.js delete mode 100644 test/specs/uploader.spec.js delete mode 100644 test/specs/utils.spec.js delete mode 100644 test/specs/waterfall.spec.js delete mode 100644 test/utils.js diff --git a/.babelrc b/.babelrc index 1bf0786eb..7e23f6877 100644 --- a/.babelrc +++ b/.babelrc @@ -4,6 +4,11 @@ "env": { "commonjs": { "presets": [["env", { "modules": "commonjs", "loose": true }]] + }, + "test": { + "presets": [ + ["env", { "targets": { "node": 8 }}] + ] } } } diff --git a/build/bin/build-components.js b/build/bin/build-components.js index 19bdebad8..d79b28c6b 100644 --- a/build/bin/build-components.js +++ b/build/bin/build-components.js @@ -13,6 +13,7 @@ const compilerOption = { extends: path.join(__dirname, '../../.babelrc') } }; +const whiteList = ['vant-css', 'test']; // clear dir fs.emptyDirSync(esDir); @@ -29,8 +30,8 @@ function compile(dir, jsOnly = false) { files.forEach(file => { const absolutePath = path.join(dir, file); - // 移除 vant-css - if (file.indexOf('vant-css') !== -1) { + // 移除不需要的文件 + if (whiteList.indexOf(file) !== -1) { fs.removeSync(absolutePath); // 遍历文件夹 } else if (isDir(absolutePath)) { diff --git a/docs/demos/views/coupon.vue b/docs/demos/views/coupon.vue index d88d3a3da..842a3522c 100644 --- a/docs/demos/views/coupon.vue +++ b/docs/demos/views/coupon.vue @@ -95,6 +95,7 @@ export default { disabledDiscountCoupon() { return { ...this.discountCoupon, + discount: 10, id: 4, available: 0, reason: this.$t('coupon.reason') diff --git a/docs/demos/views/image-preview.vue b/docs/demos/views/image-preview.vue index 7e8d8256f..49ba0ebb3 100644 --- a/docs/demos/views/image-preview.vue +++ b/docs/demos/views/image-preview.vue @@ -15,7 +15,7 @@ + diff --git a/test/components/waterfall/waterfall.vue b/test/components/waterfall/waterfall.vue deleted file mode 100644 index 068d9fa18..000000000 --- a/test/components/waterfall/waterfall.vue +++ /dev/null @@ -1,47 +0,0 @@ - - - diff --git a/test/demo-test.js b/test/demo-test.js new file mode 100644 index 000000000..026ce116f --- /dev/null +++ b/test/demo-test.js @@ -0,0 +1,34 @@ +import { renderToString } from '@vue/server-test-utils'; +import '../docs/demos/common'; +import { Locale } from '../packages'; +import { camelize } from '../packages/utils'; +import Vue from 'vue'; + +const empty = { + template: '
', + inheritAttrs: false +}; +Vue.component('demo-block', empty); +Vue.component('demo-section', empty); + +export default function(component) { + const name = typeof component === 'string' ? component : component.name.replace('van-', ''); + + test(`renders ${name} correctly`, () => { + const demo = require(`../docs/demos/views/${name}.vue`).default; + const { i18n } = demo; + demo.name = 'demo-' + name; + + if (i18n) { + const formattedI18n = {}; + const camelizedName = camelize(demo.name); + Object.keys(i18n).forEach(key => { + formattedI18n[key] = { [camelizedName]: i18n[key] }; + }); + Locale.add(formattedI18n); + } + + const wrapper = renderToString(demo); + expect(wrapper).toMatchSnapshot(); + }); +} diff --git a/test/get-webpack-conf.js b/test/get-webpack-conf.js deleted file mode 100644 index 7738138de..000000000 --- a/test/get-webpack-conf.js +++ /dev/null @@ -1,72 +0,0 @@ -const path = require('path'); -const webpack = require('webpack'); -const ProgressBarPlugin = require('progress-bar-webpack-plugin'); -const { VueLoaderPlugin } = require('vue-loader'); -const webpackDevConfig = require('../build/webpack.dev'); - -function getWebpackConfig(testFileName) { - return { - mode: 'development', - output: { - path: path.resolve(process.cwd(), 'dist'), - publicPath: '/dist/', - filename: '[name].js', - chunkFilename: '[id].js', - libraryTarget: 'umd' - }, - resolve: webpackDevConfig.resolve, - plugins: [ - new VueLoaderPlugin(), - new ProgressBarPlugin(), - new webpack.DefinePlugin({ - 'process.env': { - TEST_FILE: `"${testFileName}"` - } - }) - ], - module: { - rules: [ - { - test: /\.js$/, - exclude: /node_modules|test|mock|swipe|locale|waterfall/, - use: [ - { - loader: 'istanbul-instrumenter-loader', - options: { esModules: true } - }, - 'babel-loader' - ] - }, - { - test: /\.js$/, - exclude: /node_modules/, - use: [ - 'babel-loader' - ] - }, - { - test: /\.(css|postcss)$/, - use: ['style-loader', 'css-loader', { - loader: 'postcss-loader', - options: { sourceMap: true } - }] - }, - { - test: /\.vue$/, - use: [ - { - loader: 'vue-loader', - options: { - compilerOptions: { - preserveWhitespace: false - } - } - } - ] - } - ] - } - }; -} - -module.exports = getWebpackConfig; diff --git a/test/index.js b/test/index.js deleted file mode 100644 index 56fde85ed..000000000 --- a/test/index.js +++ /dev/null @@ -1,20 +0,0 @@ -import Vue from 'vue'; -import Vant from 'packages'; -require('packages/vant-css/src/index.css'); - -Vue.use(Vant); - -// hack for test touch event -window.ontouchstart = {}; - -// 读取配置文件,判断运行单个测试文件还是所有测试文件 -const testsReq = require.context('./specs', true, /\.spec$/); -if (process.env.TEST_FILE) { - testsReq.keys().forEach((file) => { - if (file.indexOf(process.env.TEST_FILE) !== -1) { - testsReq(file); - } - }); -} else { - testsReq.keys().forEach(testsReq); -} diff --git a/test/karma.conf.js b/test/karma.conf.js deleted file mode 100644 index aab423525..000000000 --- a/test/karma.conf.js +++ /dev/null @@ -1,27 +0,0 @@ -const getWebpackConfig = require('./get-webpack-conf'); - -module.exports = function(config) { - config.set({ - browsers: ['ChromeHeadless'], - frameworks: ['mocha', 'sinon-chai'], - reporters: ['spec', 'coverage'], - files: ['./index.js'], - preprocessors: { - './index.js': ['webpack'] - }, - webpack: getWebpackConfig(getTestFileName()), - coverageReporter: { - dir: './coverage', - reporters: [ - { type: 'lcov', subdir: '.' }, - { type: 'text-summary' } - ] - }, - singleRun: false - }); -}; - -function getTestFileName() { - const flagIndex = process.argv.indexOf('--file'); - return flagIndex !== -1 ? process.argv[flagIndex + 1] : ''; -} diff --git a/test/selector.js b/test/selector.js deleted file mode 100644 index 64b5d6de3..000000000 --- a/test/selector.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * 运行单个测试文件 - */ - -const fs = require('fs'); -const inquirer = require('inquirer'); -const path = require('path'); -const shell = require('shelljs'); -const files = fs.readdirSync(path.resolve(__dirname, './specs')); - -inquirer.prompt([{ - type: 'list', - name: 'select', - message: '请选择要运行的测试文件:', - choices: files -}]).then(result => { - const file = result.select.replace('.spec.js', ''); - shell.exec('karma start test/karma.conf.js --color alway --file ' + file); -}).catch(error => { - console.log(error); -}); diff --git a/test/specs/actionsheet.spec.js b/test/specs/actionsheet.spec.js deleted file mode 100644 index 2e5b23a44..000000000 --- a/test/specs/actionsheet.spec.js +++ /dev/null @@ -1,147 +0,0 @@ -import ActionSheet from 'packages/actionsheet'; -import { mount } from 'avoriaz'; -import { DOMChecker } from '../utils'; - -describe('ActionSheet', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a actionsheet', () => { - wrapper = mount(ActionSheet, { - propsData: {} - }); - - expect(wrapper.hasClass('van-actionsheet')).to.be.true; - expect(wrapper.instance().actions.length).to.equal(0); - expect(wrapper.instance().overlay).to.be.true; - expect(wrapper.instance().closeOnClickOverlay).to.be.true; - }); - - it('create displayed actionsheet', () => { - wrapper = mount(ActionSheet, { - propsData: { - value: true - } - }); - - DOMChecker(wrapper, { - noStyle: { - '.van-actionsheet': { - display: 'none' - } - } - }); - }); - - it('create title type actionsheet', () => { - wrapper = mount(ActionSheet, { - propsData: { - title: 'test' - } - }); - - expect(wrapper.hasClass('van-actionsheet--withtitle')).to.be.true; - expect(wrapper.contains('.van-actionsheet__header')).to.be.true; - expect(wrapper.contains('.van-actionsheet__content')).to.be.true; - }); - - it('create actions actionsheet', () => { - wrapper = mount(ActionSheet, { - propsData: { - actions: [ - { - name: '有赞E卡', - subname: '(剩余260.50元)' - }, - { - name: '信用卡支付', - loading: true - } - ] - } - }); - - const actionItems = wrapper.find('.van-actionsheet__item'); - - expect(actionItems.length).to.equal(2); - expect(actionItems[0].contains('.van-actionsheet__name')).to.be.true; - expect(actionItems[0].contains('.van-actionsheet__subname')).to.be.true; - expect(actionItems[1].contains('.van-actionsheet__loading')).to.be.true; - }); - - it('handle actionsheet item click with callback', () => { - let called = false; - wrapper = mount(ActionSheet, { - propsData: { - actions: [ - { - name: '有赞E卡', - callback: () => { - called = true; - } - }, - { - name: '微信' - } - ] - } - }); - - const actionItem = wrapper.find('.van-actionsheet__item')[0]; - actionItem.trigger('click'); - expect(called).to.be.true; - - const secondActionItem = wrapper.find('.van-actionsheet__item')[1]; - secondActionItem.trigger('click'); - }); - - it('create actionsheet with cancel button', () => { - wrapper = mount(ActionSheet, { - propsData: { - cancelText: 'cancel' - } - }); - - const cancelButton = wrapper.find('.van-actionsheet__cancel')[0]; - expect(wrapper.contains('.van-actionsheet__cancel')).to.be.true; - expect(cancelButton.text()).to.equal('cancel'); - - const eventStub = sinon.stub(wrapper.vm, '$emit'); - cancelButton.trigger('click'); - - expect(eventStub.calledWith('cancel')); - }); - - it('toggle actionsheet value from v-model', (done) => { - wrapper = mount(ActionSheet, { - propsData: { - value: false - } - }); - - const eventStub = sinon.stub(wrapper.vm, '$emit'); - DOMChecker(wrapper, { - style: { - '.van-actionsheet': { - display: 'none' - } - } - }); - - wrapper.vm.value = true; - wrapper.update(); - wrapper.vm.$nextTick(() => { - DOMChecker(wrapper, { - noStyle: { - '.van-actionsheet': { - display: 'none' - } - } - }); - expect(eventStub.calledWith('input')); - done(); - }); - }); -}); diff --git a/test/specs/address-edit.spec.js b/test/specs/address-edit.spec.js deleted file mode 100644 index 6851becab..000000000 --- a/test/specs/address-edit.spec.js +++ /dev/null @@ -1,423 +0,0 @@ -import { mount } from 'avoriaz'; -import AddressEdit from 'packages/address-edit'; -import AddressDetail from 'packages/address-edit/Detail'; -import areaList from '../../docs/demos/mock/area'; - -describe('AddressEdit', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a AddressEdit', () => { - wrapper = mount(AddressEdit); - expect(wrapper.hasClass('van-address-edit')).to.be.true; - expect(wrapper.find('.van-field__control')[0].element.value).to.equal(''); - expect(wrapper.find('.van-field__control')[1].element.value).to.equal(''); - expect(wrapper.find('.van-field__control')[2].element.value).to.equal(''); - expect( - wrapper.find('.van-address-edit__area .van-cell__value span')[0].text() - ).to.equal('选择省份'); - expect( - wrapper.find('.van-address-edit__area .van-cell__value span')[1].text() - ).to.equal('选择城市'); - expect( - wrapper.find('.van-address-edit__area .van-cell__value span')[2].text() - ).to.equal('选择地区'); - }); - - it('create a AddressEdit with props', () => { - const addressInfo = { - name: '测试', - tel: '123123213', - province: '浙江省', - city: '杭州市', - county: '西湖区', - address_detail: '详细地址', - postal_code: '10000', - is_default: true - }; - - wrapper = mount(AddressEdit, { - propsData: { - areaList, - addressInfo: addressInfo, - showPostal: true, - showSetDefault: true, - showSearchResult: true, - searchResult: [] - } - }); - - expect(wrapper.find('.van-field__control')[0].element.value).to.equal( - addressInfo.name - ); - expect(wrapper.find('.van-field__control')[1].element.value).to.equal( - addressInfo.tel - ); - expect(wrapper.find('.van-field__control')[2].element.value).to.equal( - addressInfo.address_detail - ); - expect(wrapper.find('.van-field__control')[3].element.value).to.equal( - addressInfo.postal_code - ); - expect( - wrapper.find('.van-address-edit__area .van-cell__value span')[0].text() - ).to.equal(addressInfo.province); - expect( - wrapper.find('.van-address-edit__area .van-cell__value span')[1].text() - ).to.equal(addressInfo.city); - expect( - wrapper.find('.van-address-edit__area .van-cell__value span')[2].text() - ).to.equal(addressInfo.county); - expect(wrapper.find('.van-switch-cell').length).to.equal(1); - }); - - it('save AddressInfo', () => { - const addressInfo = { - name: '', - tel: '123123213', - province: '浙江省', - city: '杭州市', - county: '西湖区', - address_detail: '详细地址', - postal_code: '10000', - is_default: true - }; - - wrapper = mount(AddressEdit, { - propsData: { - areaList, - addressInfo: addressInfo, - showPostal: true, - showSetDefault: true, - showSearchResult: true, - searchResult: [] - } - }); - - const saveButton = wrapper.find('.van-button')[0]; - - // name empty - wrapper.vm.data.name = ''; - saveButton.trigger('click'); - expect(wrapper.vm.errorInfo['name']).to.be.true; - wrapper.find('.van-field__control')[0].trigger('focus'); - expect(wrapper.vm.errorInfo['name']).to.be.false; - - // name too long - wrapper.vm.data.name = '111111111111111111111111111'; - saveButton.trigger('click'); - expect(wrapper.vm.errorInfo['name']).to.be.true; - wrapper.find('.van-field__control')[0].trigger('focus'); - expect(wrapper.vm.errorInfo['name']).to.be.false; - - // tel empty - wrapper.vm.data.name = '123'; - wrapper.vm.data.tel = ''; - saveButton.trigger('click'); - expect(wrapper.vm.errorInfo['tel']).to.be.true; - wrapper.find('.van-field__control')[1].trigger('focus'); - expect(wrapper.vm.errorInfo['tel']).to.be.false; - - // area_code empty - wrapper.vm.data.tel = '13000000000'; - wrapper.vm.data.area_code = ''; - saveButton.trigger('click'); - expect(wrapper.vm.errorInfo['area_code']).to.be.true; - - // area_code invalid - wrapper.vm.data.tel = '13000000000'; - wrapper.vm.data.area_code = '-1'; - saveButton.trigger('click'); - expect(wrapper.vm.errorInfo['area_code']).to.be.true; - - // address_detail empty - wrapper.vm.data.area_code = '100000'; - wrapper.vm.data.address_detail = ''; - saveButton.trigger('click'); - expect(wrapper.vm.errorInfo['address_detail']).to.be.true; - wrapper.find('.van-field__control')[2].trigger('focus'); - expect(wrapper.vm.errorInfo['address_detail']).to.be.false; - - // address_detail too long - let longAddress = '1'; - for (let i = 0; i < 300; i++) { - longAddress += '1'; - } - wrapper.vm.data.address_detail = longAddress; - saveButton.trigger('click'); - expect(wrapper.vm.errorInfo['address_detail']).to.be.true; - wrapper.find('.van-field__control')[2].trigger('focus'); - expect(wrapper.vm.errorInfo['address_detail']).to.be.false; - - // postal_code invalid - wrapper.vm.data.address_detail = '123'; - wrapper.vm.data.postal_code = '123'; - saveButton.trigger('click'); - expect(wrapper.vm.errorInfo['postal_code']).to.be.true; - wrapper.find('.van-field__control')[3].trigger('focus'); - expect(wrapper.vm.errorInfo['postal_code']).to.be.false; - - // valid result - wrapper.vm.data.postal_code = '123456'; - saveButton.trigger('click'); - - // not show postal_code - wrapper.vm.data.postal_code = '156'; - wrapper.vm.showPostal = false; - saveButton.trigger('click'); - expect(wrapper.vm.errorInfo['postal_code']).to.be.false; - }); - - it('show search result', done => { - wrapper = mount(AddressEdit, { - propsData: { - addressInfo: {}, - showSearchResult: true, - searchResult: [ - { - name: '黄龙万科中心', - address: '杭州市西湖区' - }, - { - name: '黄龙万科中心H座' - }, - { - address: '杭州市西湖区' - } - ] - } - }); - - wrapper.find('.van-field__control')[2].trigger('focus'); - wrapper.vm.$nextTick(() => { - const items = wrapper.find('.van-icon-location'); - expect(items.length).to.equal(3); - - items[0].element.parentNode.click(); - wrapper.vm.$nextTick(() => { - expect(wrapper.find('.van-field__control')[2].element.value).to.equal( - '杭州市西湖区 黄龙万科中心' - ); - - items[1].element.parentNode.click(); - wrapper.vm.$nextTick(() => { - expect(wrapper.find('.van-field__control')[2].element.value).to.equal( - '黄龙万科中心H座' - ); - items[2].element.parentNode.click(); - - wrapper.vm.$nextTick(() => { - expect( - wrapper.find('.van-field__control')[2].element.value - ).to.equal('杭州市西湖区'); - - wrapper.find('.van-field__control')[2].trigger('blur'); - setTimeout(() => { - done(); - }, 300); - }); - }); - }); - }); - }); - - it('select area', () => { - wrapper = mount(AddressEdit, { - propsData: { - areaList, - addressInfo: {} - } - }); - - wrapper.vm.onAreaConfirm([]); - wrapper.vm.onAreaConfirm([{ code: -1 }]); - wrapper.vm.onAreaConfirm([{ code: 1 }, { code: -1 }]); - wrapper.vm.onAreaConfirm([{ code: 1 }, { code: 1 }, { code: -1 }]); - expect(wrapper.vm.data['area_code']).to.equal(''); - - wrapper.vm.onAreaConfirm([ - { name: '浙江省' }, - { name: '杭州市' }, - { name: '西湖区', code: '123456' } - ]); - expect(wrapper.vm.data['province']).to.equal('浙江省'); - expect(wrapper.vm.data['city']).to.equal('杭州市'); - expect(wrapper.vm.data['county']).to.equal('西湖区'); - expect(wrapper.vm.data['area_code']).to.equal('123456'); - }); - - it('delete address', done => { - wrapper = mount(AddressEdit, { - attachToDocument: true, - propsData: { - areaList, - isDeleting: true, - addressInfo: { - id: '123' - } - } - }); - - const deleteButton = wrapper.find('.van-button')[1]; - deleteButton.trigger('click'); - wrapper.vm.onDelete(); - - setTimeout(() => { - wrapper.vm.isDeleting = false; - wrapper.vm.$nextTick(() => { - deleteButton.trigger('click'); - setTimeout(() => { - expect(document.querySelectorAll('.van-dialog').length).to.equal(1); - - wrapper.vm.$on('delete', () => { - done(); - }); - document.querySelector('.van-dialog__confirm').click(); - }, 300); - }); - }, 300); - }); - - it('on change detail', done => { - wrapper = mount(AddressEdit); - - wrapper.vm.$on('change-detail', val => { - expect(val).to.equal('123'); - done(); - }); - - const field = wrapper.find('.van-field__control')[2]; - field.element.value = '123'; - field.trigger('input'); - }); - - it('clear address detail in ios', done => { - wrapper = mount(AddressEdit, { - propsData: { - addressInfo: { - address_detail: '123' - } - } - }); - - wrapper.vm.isAndroid = false; - wrapper.find('.van-field__control')[2].trigger('focus'); - - wrapper.vm.$nextTick(() => { - wrapper.find('.van-field__icon')[0].trigger('touchstart'); - wrapper.vm.$nextTick(() => { - expect(wrapper.vm.data.address_detail).to.equal(''); - done(); - }); - }); - }); - - it('finish edit address detail in android', done => { - wrapper = mount(AddressDetail, { - propsData: { - value: '123' - } - }); - - wrapper.vm.$on('input', val => { - wrapper.vm.value = val; - }); - - wrapper.setData({ - isAndroid: true - }); - wrapper.find('.van-field__control')[0].trigger('focus'); - - wrapper.vm.$nextTick(() => { - wrapper.find('.van-field__icon')[0].trigger('touchstart'); - wrapper.vm.$nextTick(() => { - expect(wrapper.vm.value).to.equal('123'); - done(); - }); - }); - }); - - it('watch address info', done => { - const addressInfo = { - name: '123' - }; - - wrapper = mount(AddressEdit, { - propsData: { - addressInfo: {} - } - }); - - wrapper.setProps({ addressInfo }); - wrapper.vm.$nextTick(() => { - expect(wrapper.vm.data.name).to.equal('123'); - done(); - }); - }); - - it('set/get area code', done => { - wrapper = mount(AddressEdit, { - propsData: { - areaList, - addressInfo: { - area_code: '' - } - } - }); - - expect(wrapper.vm.getArea()).to.eql([ - { code: '-1', name: '选择省份' }, - { code: '-1', name: '选择城市' }, - { code: '-1', name: '选择地区' } - ]); - - wrapper.vm.setAreaCode('110101'); - setTimeout(() => { - expect(wrapper.vm.data.area_code).to.eql('110101'); - expect(wrapper.vm.getArea()).to.eql([ - { code: '110000', name: '北京市' }, - { code: '110100', name: '北京市' }, - { code: '110101', name: '东城区' } - ]); - - wrapper.vm.$refs = []; - wrapper.vm.setAreaCode('110102'); - expect(wrapper.vm.getArea()).to.eql([]); - done(); - }, 50); - }); - - it('watch area code', done => { - wrapper = mount(AddressEdit, { - propsData: { - areaList: {}, - addressInfo: { - area_code: '330304' - } - } - }); - - expect(wrapper.vm.data.city).to.equal(''); - wrapper.vm.areaList = areaList; - - setTimeout(() => { - expect(wrapper.vm.data.city).to.equal('温州市'); - - wrapper.vm.addressInfo = { area_code: '' }; - wrapper.vm.areaList = {}; - - setTimeout(() => { - expect(wrapper.vm.data.city).to.equal(''); - wrapper.vm.areaList = areaList; - wrapper.vm.addressInfo = { area_code: '330304' }; - - setTimeout(() => { - expect(wrapper.vm.data.city).to.equal('温州市'); - done(); - }, 50); - }); - }, 50); - }); -}); diff --git a/test/specs/address-list.spec.js b/test/specs/address-list.spec.js deleted file mode 100644 index 8d8edd976..000000000 --- a/test/specs/address-list.spec.js +++ /dev/null @@ -1,80 +0,0 @@ -import { mount } from 'avoriaz'; -import AddressList from 'packages/address-list'; - -const list = [ - { - id: '1', - name: '张三', - tel: '13000000000', - address: '浙江省杭州市西湖区文三路 138 号东方通信大厦 7 楼 501 室' - }, - { - id: '2', - name: '李四', - tel: '1310000000', - address: '浙江省杭州市拱墅区莫干山路 50 号' - }, - { - id: '3', - name: '王五', - tel: '1320000000', - address: '浙江省杭州市滨江区江南大道 15 号' - } -]; - -describe('AddressList', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a AddressList', () => { - wrapper = mount(AddressList); - expect(wrapper.hasClass('van-address-list')).to.be.true; - }); - - it('create a AddressList with three items', () => { - wrapper = mount(AddressList, { - propsData: { - value: '1', - list - } - }); - expect(wrapper.find('.van-address-list__group .van-cell').length).to.equal(3); - expect(wrapper.find('.van-icon-checked').length).to.equal(1); - }); - - it('listen to add & edit event', (done) => { - wrapper = mount(AddressList, { - propsData: { - list - } - }); - - const add = sinon.spy(); - wrapper.vm.$on('add', add); - wrapper.find('.van-address-list__add')[0].trigger('click'); - expect(add.calledOnce).to.be.true; - - wrapper.vm.$on('edit', (item, index) => { - expect(index).to.equal(0); - done(); - }); - wrapper.find('.van-address-list__edit')[0].trigger('click'); - }); - - it('listen to select event', (done) => { - wrapper = mount(AddressList, { - propsData: { - value: '1', - list - } - }); - - wrapper.vm.$on('select', (item, index) => { - expect(item.id).to.equal('3'); - done(); - }); - wrapper.find('.van-radio')[2].trigger('click'); - }); -}); diff --git a/test/specs/area.spec.js b/test/specs/area.spec.js deleted file mode 100644 index 7f309d6ac..000000000 --- a/test/specs/area.spec.js +++ /dev/null @@ -1,153 +0,0 @@ -import Area from 'packages/area'; -import { mount } from 'avoriaz'; -import areaList from '../../docs/demos/mock/area'; - -describe('Area', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create an area', () => { - wrapper = mount(Area, { - propsData: { - areaList: areaList - } - }); - - expect(wrapper.hasClass('van-area')).to.be.true; - }); - - it('create an area with default value', done => { - wrapper = mount(Area, { - propsData: { - areaList: areaList, - value: '110101' - } - }); - - const confirmBtn = wrapper.find('.van-picker__confirm')[0]; - const eventStub = sinon.stub(wrapper.vm, '$emit'); - - confirmBtn.trigger('click'); - wrapper.vm.$nextTick(() => { - expect(eventStub.calledOnce).to.be.true; - expect(eventStub.calledWith('confirm')); - expect(wrapper.vm.$refs.picker.getColumnValue(2).code).to.equal('110101'); - done(); - }); - }); - - it('create an area and set value', done => { - wrapper = mount(Area, { - propsData: { - areaList: areaList, - value: '110101' - } - }); - - setTimeout(() => { - expect(wrapper.vm.$refs.picker.getColumnValue(2).code).to.equal('110101'); - wrapper.setProps({ - value: '110102' - }); - - setTimeout(() => { - expect(wrapper.vm.$refs.picker.getColumnValue(2).code).to.equal('110102'); - done(); - }, 50); - }, 50); - }); - - it('create an area with invalid areaList', () => { - wrapper = mount(Area, { - propsData: { - areaList: null - } - }); - - expect(wrapper.vm.columns.length).to.equal(0); - }); - - it('create an area with columnsNum equal 2', () => { - wrapper = mount(Area, { - propsData: { - areaList: areaList, - columnsNum: 2 - } - }); - - expect(wrapper.vm.columns.length).to.equal(2); - }); - - it('create an area with columnsNum equal 1', () => { - wrapper = mount(Area, { - propsData: { - areaList: areaList, - columnsNum: 1 - } - }); - - expect(wrapper.vm.columns.length).to.equal(1); - }); - - it('create an area and click cancel', done => { - wrapper = mount(Area, { - propsData: { - areaList: areaList - } - }); - - const cancelBtn = wrapper.find('.van-picker__cancel')[0]; - const eventStub = sinon.stub(wrapper.vm, '$emit'); - - cancelBtn.trigger('click'); - wrapper.vm.$nextTick(() => { - expect(eventStub.calledOnce).to.be.true; - expect(eventStub.calledWith('cancel')); - done(); - }); - }); - - it('onChange method', () => { - wrapper = mount(Area, { - propsData: { - areaList: areaList - } - }); - - let list = []; - const setColumnValues = (index, arr) => { - list = [...list, ...arr]; - }; - const code = { code: '110101' }; - - wrapper.vm.onChange({ setColumnValues }, [code], 0); - wrapper.vm.onChange({ setColumnValues }, [code, code], 1); - - expect(list.length).to.equal(33); - }); - - it('getValues method', done => { - wrapper = mount(Area, { - propsData: { - value: '110101', - areaList: areaList - } - }); - - setTimeout(() => { - expect(wrapper.vm.getValues()).to.eql([ - { code: '110000', name: '北京市' }, - { code: '110100', name: '北京市' }, - { code: '110101', name: '东城区' } - ]); - - setTimeout(() => { - wrapper.vm.$refs = []; - expect(wrapper.vm.getValues()).to.eql([]); - done(); - }, 50); - }, 50); - }); -}); diff --git a/test/specs/badge.spec.js b/test/specs/badge.spec.js deleted file mode 100644 index 66128b479..000000000 --- a/test/specs/badge.spec.js +++ /dev/null @@ -1,29 +0,0 @@ -import { mount } from 'avoriaz'; -import BadgeTestComponent from '../components/badge'; - -describe('BadgeGroup', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a badge-group', () => { - wrapper = mount(BadgeTestComponent); - - expect(wrapper.hasClass('van-badge-group')).to.be.true; - - expect(wrapper.vNode.child.activeKey).to.equal(0); - expect(wrapper.vNode.child.badges.length).to.equal(2); - }); - - it('emit a click event when click badge', () => { - wrapper = mount(BadgeTestComponent); - - const badge = wrapper.find('.van-badge')[0]; - const eventStub = sinon.stub(badge.vNode.child, '$emit'); - badge.trigger('click'); - - expect(eventStub.calledWith('click')).to.be.true; - }); -}); - diff --git a/test/specs/button.spec.js b/test/specs/button.spec.js deleted file mode 100644 index a280f7471..000000000 --- a/test/specs/button.spec.js +++ /dev/null @@ -1,150 +0,0 @@ -import Button from 'packages/button'; -import VanLoading from 'packages/loading'; -import { mount } from 'avoriaz'; - -describe('Button', () => { - let wrapper; - - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a simple button', () => { - wrapper = mount(Button); - - expect(wrapper.hasClass('van-button')).to.be.true; - expect(wrapper.hasClass('van-button--default')).to.be.true; - expect(wrapper.hasClass('van-button--normal')).to.be.true; - - const eventStub = sinon.stub(wrapper.vm, '$emit'); - wrapper.trigger('click'); - - expect(eventStub.calledOnce).to.be.true; - expect(eventStub.calledWith('click')).to.be.true; - }); - - it('create a primary button', () => { - wrapper = mount(Button, { - propsData: { - type: 'primary' - } - }); - - expect(wrapper.hasClass('van-button')).to.be.true; - expect(wrapper.hasClass('van-button--primary')).to.be.true; - }); - - it('create a danger button', () => { - wrapper = mount(Button, { - propsData: { - type: 'danger' - } - }); - - expect(wrapper.hasClass('van-button')).to.be.true; - expect(wrapper.hasClass('van-button--danger')).to.be.true; - }); - - it('create a large button', () => { - wrapper = mount(Button, { - propsData: { - size: 'large' - } - }); - - expect(wrapper.hasClass('van-button')).to.be.true; - expect(wrapper.hasClass('van-button--large')).to.be.true; - }); - - it('create a small button', () => { - wrapper = mount(Button, { - propsData: { - size: 'small' - } - }); - - expect(wrapper.hasClass('van-button')).to.be.true; - expect(wrapper.hasClass('van-button--small')).to.be.true; - }); - - it('create a mini button', () => { - wrapper = mount(Button, { - propsData: { - size: 'mini' - } - }); - - expect(wrapper.hasClass('van-button')).to.be.true; - expect(wrapper.hasClass('van-button--mini')).to.be.true; - }); - - it('create a block button', () => { - wrapper = mount(Button, { - propsData: { - block: true - } - }); - - expect(wrapper.hasClass('van-button')).to.be.true; - expect(wrapper.hasClass('van-button--block')).to.be.true; - }); - - it('create a bottom action button', () => { - wrapper = mount(Button, { - propsData: { - bottomAction: true - } - }); - - expect(wrapper.hasClass('van-button')).to.be.true; - expect(wrapper.hasClass('van-button--bottom-action')).to.be.true; - }); - - it('create a disabled button', () => { - wrapper = mount(Button, { - propsData: { - disabled: true - } - }); - - expect(wrapper.hasClass('van-button')).to.be.true; - expect(wrapper.hasClass('van-button--disabled')).to.be.true; - - const eventStub = sinon.stub(wrapper.vm, '$emit'); - wrapper.trigger('click'); - - expect(eventStub.called).to.be.false; - }); - - it('create a loading button', () => { - wrapper = mount(Button, { - propsData: { - loading: true - } - }); - const loading = wrapper.find(VanLoading)[0]; - - expect(wrapper.hasClass('van-button')).to.be.true; - expect(loading.isVueComponent).to.be.true; - - const eventStub = sinon.stub(wrapper.vm, '$emit'); - wrapper.trigger('click'); - - expect(eventStub.called).to.be.false; - }); - - it('create a primary loading button', () => { - wrapper = mount(Button, { - propsData: { - type: 'primary', - loading: true - } - }); - - expect(wrapper.hasClass('van-button')).to.be.true; - expect(wrapper.hasClass('van-button--primary')).to.be.true; - - const loading = wrapper.find(VanLoading)[0]; - expect(loading.isVueComponent).to.be.true; - }); -}); diff --git a/test/specs/card.spec.js b/test/specs/card.spec.js deleted file mode 100644 index 45f51d1ca..000000000 --- a/test/specs/card.spec.js +++ /dev/null @@ -1,19 +0,0 @@ -import Card from 'packages/card'; -import { mount } from 'avoriaz'; - -describe('Card', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create', () => { - wrapper = mount(Card, { - propsData: { - thumb: 'thumb' - } - }); - - expect(wrapper.hasClass('van-card')).to.be.true; - }); -}); diff --git a/test/specs/cell-swipe.spec.js b/test/specs/cell-swipe.spec.js deleted file mode 100644 index d8dd20ab9..000000000 --- a/test/specs/cell-swipe.spec.js +++ /dev/null @@ -1,144 +0,0 @@ -import CellSwipe from 'packages/cell-swipe'; -import { mount } from 'avoriaz'; -import { triggerTouch, dragHelper } from '../utils'; - -const defaultProps = { - propsData: { - leftWidth: 100, - rightWidth: 100 - } -}; - -describe('CellSwipe', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('render left or right part when has width', () => { - wrapper = mount(CellSwipe, defaultProps); - expect(wrapper.find('.van-cell-swipe__left').length).to.equal(1); - expect(wrapper.find('.van-cell-swipe__right').length).to.equal(1); - }); - - it('not render left or right part when width is 0', () => { - wrapper = mount(CellSwipe); - expect(wrapper.find('.van-cell-swipe__left').length).to.equal(0); - expect(wrapper.find('.van-cell-swipe__right').length).to.equal(0); - }); - - it('drag and show left part', done => { - wrapper = mount(CellSwipe, defaultProps); - - triggerTouch(wrapper, 'touchstart', 0, 0); - expect(wrapper.vm.startX).to.equal(0); - expect(wrapper.vm.startY).to.equal(0); - - triggerTouch(wrapper, 'touchmove', 50, 0); - expect(wrapper.vm.offset).to.equal(50); - - triggerTouch(wrapper, 'touchend', 50, 0); - expect(wrapper.vm.offset).to.equal(100); - wrapper.vm.$nextTick(() => { - expect(wrapper.vm.opened).to.be.true; - done(); - }); - }); - - it('drag and show right part', done => { - wrapper = mount(CellSwipe, defaultProps); - - triggerTouch(wrapper, 'touchstart', 0, 0); - triggerTouch(wrapper, 'touchmove', -50, 0); - triggerTouch(wrapper, 'touchend', -50, 0); - expect(wrapper.vm.offset).to.equal(-100); - wrapper.vm.$nextTick(() => { - expect(wrapper.vm.opened).to.be.true; - wrapper.trigger('click'); - expect(wrapper.vm.offset).to.equal(0); - done(); - }); - }); - - it('drag and show left part', () => { - wrapper = mount(CellSwipe, defaultProps); - dragHelper(wrapper, 50); - expect(wrapper.vm.offset).to.equal(100); - }); - - it('drag and show right part', () => { - wrapper = mount(CellSwipe, defaultProps); - - dragHelper(wrapper, -50); - expect(wrapper.vm.offset).to.equal(-100); - }); - - it('drag distance out of ranges', done => { - wrapper = mount(CellSwipe, defaultProps); - - triggerTouch(wrapper, 'touchstart', 0, 0); - triggerTouch(wrapper, 'touchmove', 1000, 0); - - setTimeout(() => { - expect(wrapper.vm.offset).to.equal(0); - done(); - }); - }); - - it('drag and hide left part', (done) => { - wrapper = mount(CellSwipe, defaultProps); - - dragHelper(wrapper, 50); - expect(wrapper.vm.offset).to.equal(100); - wrapper.vm.$nextTick(() => { - expect(wrapper.vm.opened).to.be.true; - - dragHelper(wrapper, -50); - wrapper.vm.$nextTick(() => { - expect(wrapper.vm.offset).to.equal(0); - expect(wrapper.vm.opened).to.be.false; - done(); - }); - }); - }); - - it('drag vertical', () => { - wrapper = mount(CellSwipe, defaultProps); - - dragHelper(wrapper, 0, 100); - expect(wrapper.vm.offset).to.equal(0); - }); - - it('on close prop', () => { - let clickPosition; - let instance; - const onClose = (position, ins) => { - clickPosition = position; - instance = ins; - }; - - wrapper = mount(CellSwipe, { - propsData: { - ...defaultProps.propsData, - onClose - } - }); - - wrapper.trigger('click'); - wrapper.vm.onClick(); - expect(clickPosition).to.equal(undefined); - - wrapper.vm.offset = 100; - wrapper.trigger('click'); - expect(clickPosition).to.equal('cell'); - - wrapper.find('.van-cell-swipe__left')[0].trigger('click'); - expect(clickPosition).to.equal('left'); - - wrapper.find('.van-cell-swipe__right')[0].trigger('click'); - expect(clickPosition).to.equal('right'); - - instance.close(); - expect(wrapper.vm.offset).to.equal(0); - }); -}); diff --git a/test/specs/cell.spec.js b/test/specs/cell.spec.js deleted file mode 100644 index 58958141a..000000000 --- a/test/specs/cell.spec.js +++ /dev/null @@ -1,94 +0,0 @@ -import CellGroup from 'packages/cell-group'; -import Cell from 'packages/cell'; -import { mount } from 'avoriaz'; - -describe('CellGroup', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a cell-group', () => { - wrapper = mount(CellGroup, { - propsData: {} - }); - - expect(wrapper.hasClass('van-cell-group')).to.be.true; - }); -}); - -describe('Cell', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create', () => { - wrapper = mount(Cell); - - expect(wrapper.hasClass('van-cell')).to.be.true; - }); - - it('create a required cell', () => { - wrapper = mount(Cell, { - propsData: { - required: true - } - }); - - expect(wrapper.hasClass('van-cell')).to.be.true; - expect(wrapper.hasClass('van-cell--required')).to.be.true; - }); - - it('emit a click event', () => { - wrapper = mount(Cell); - - const eventStub = sinon.stub(wrapper.vm, '$emit'); - wrapper.trigger('click'); - - expect(eventStub.calledOnce).to.be.true; - expect(eventStub.calledWith('click')).to.be.true; - }); - - it('cell with url', () => { - wrapper = mount(Cell, { - propsData: { - url: '#test', - replace: false - } - }); - - wrapper.trigger('click'); - - expect(window.location.hash).to.equal('#test'); - window.location.hash = ''; - - const length = window.history.length; - wrapper.vm.replace = true; - wrapper.trigger('click'); - expect(window.location.hash).to.equal('#test'); - expect(window.history.length).to.equal(length); - window.location.hash = ''; - }); - - it('cell with to', done => { - wrapper = mount(Cell, { - propsData: { - to: '/test', - replace: false - } - }); - wrapper.vm.$router = { - push(path) { - wrapper.vm.replace = true; - wrapper.trigger('click'); - }, - replace(path) { - expect(path).to.equal('/test'); - done(); - } - }; - - wrapper.trigger('click'); - }); -}); diff --git a/test/specs/checkbox.spec.js b/test/specs/checkbox.spec.js deleted file mode 100644 index 462db91af..000000000 --- a/test/specs/checkbox.spec.js +++ /dev/null @@ -1,214 +0,0 @@ -import { mount } from 'avoriaz'; -import Checkbox from 'packages/checkbox'; -import CheckboxTestComponent from '../components/checkbox'; - -describe('CheckboxGroup', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a checkbox-group', () => { - wrapper = mount(CheckboxTestComponent); - - expect(wrapper.hasClass('van-checkbox-group')).to.be.true; - - expect(wrapper.vNode.child.value.length).to.equal(2); - expect(wrapper.vNode.child.disabled).to.be.false; - }); - - it('emit a change event', (done) => { - wrapper = mount(CheckboxTestComponent); - - expect(wrapper.vNode.child.value.length).to.equal(2); - const eventStub = sinon.stub(wrapper.vNode.child, '$emit'); - - wrapper.setData({ - 'result': ['a'] - }); - wrapper.update(); - wrapper.vm.$nextTick(() => { - expect(wrapper.vNode.child.value.length).to.equal(1); - expect(eventStub.calledOnce).to.be.true; - expect(eventStub.calledWith('change')); - done(); - }); - }); - - it('click on checked checkbox', (done) => { - wrapper = mount(CheckboxTestComponent); - - const eventStub = sinon.stub(wrapper.vNode.child, '$emit'); - - const firstCheckboxLabel = wrapper.find('.van-checkbox')[0].find('.van-checkbox__label')[0]; - firstCheckboxLabel.trigger('click'); - - wrapper.update(); - wrapper.vm.$nextTick(() => { - expect(eventStub.calledOnce).to.be.true; - expect(eventStub.calledWith('input')); - done(); - }); - }); - - it('click on unchecked checkbox', (done) => { - wrapper = mount(CheckboxTestComponent); - - const eventStub = sinon.stub(wrapper.vNode.child, '$emit'); - - const lastCheckboxLabel = wrapper.find('.van-checkbox')[3].find('.van-checkbox__label')[0]; - lastCheckboxLabel.trigger('click'); - - wrapper.update(); - wrapper.vm.$nextTick(() => { - expect(eventStub.calledOnce).to.be.true; - expect(eventStub.calledWith('input')); - done(); - }); - }); - - it('click on unchecked item and checked options num beyond max', (done) => { - wrapper = mount(CheckboxTestComponent); - - wrapper.setData({ - 'max': 2 - }); - - const lastCheckboxLabel = wrapper.find('.van-checkbox')[3].find('.van-checkbox__label')[0]; - lastCheckboxLabel.trigger('click'); - - wrapper.update(); - wrapper.vm.$nextTick(() => { - expect(wrapper.vm.result.indexOf('d')).to.equal(-1); - done(); - }); - }); - - it('click on disabled item', (done) => { - wrapper = mount(CheckboxTestComponent); - - const eventStub = sinon.stub(wrapper.vNode.child, '$emit'); - - const disabledLabel = wrapper.find('.van-checkbox')[2].find('.van-checkbox__label')[0]; - disabledLabel.trigger('click'); - - wrapper.update(); - wrapper.vm.$nextTick(() => { - expect(eventStub.calledOnce).to.be.false; - expect(wrapper.vm.result.indexOf('c')).to.equal(-1); - done(); - }); - }); -}); - -describe('Checkbox', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a checkbox', () => { - wrapper = mount(Checkbox, { - propsData: { - value: true, - disabled: false - } - }); - - expect(wrapper.hasClass('van-checkbox')).to.be.true; - expect(wrapper.vm.currentValue).to.be.true; - expect(wrapper.vm.isDisabled).to.be.false; - expect(wrapper.vm.isChecked).to.be.true; - }); - - it('create a checkbox with name', () => { - wrapper = mount(Checkbox, { - propsData: { - name: 'a', - disabled: false - } - }); - - expect(wrapper.hasClass('van-checkbox')).to.be.true; - expect(!!wrapper.vm.isChecked).to.be.false; - }); - - it('create a not boolean value checkbox', (done) => { - wrapper = mount(Checkbox, { - propsData: { - value: 'test', - name: 'test' - } - }); - - expect(wrapper.hasClass('van-checkbox')).to.be.true; - expect(wrapper.vm.currentValue).to.equal('test'); - expect(wrapper.vm.isDisabled).to.be.false; - expect(wrapper.vm.isChecked).to.be.true; - - wrapper.vm.value = null; - wrapper.update(); - wrapper.vm.$nextTick(() => { - expect(wrapper.vm.currentValue).to.equal(null); - done(); - }); - }); - - it('click on a checkbox', (done) => { - wrapper = mount(Checkbox, { - propsData: { - value: false, - disabled: false - } - }); - - expect(wrapper.hasClass('van-checkbox')).to.be.true; - const eventStub = sinon.stub(wrapper.vm, '$emit'); - - const checkboxLabel = wrapper.find('.van-checkbox__icon')[0]; - checkboxLabel.trigger('click'); - - wrapper.update(); - wrapper.vm.$nextTick(() => { - expect(eventStub.calledOnce).to.be.true; - expect(eventStub.calledWith('input')); - done(); - }); - }); - - it('click on a disabled checkbox', () => { - wrapper = mount(Checkbox, { - propsData: { - value: false, - disabled: true - } - }); - - expect(wrapper.hasClass('van-checkbox')).to.be.true; - expect(wrapper.find('.van-checkbox--disabled').length).to.equal(1); - expect(wrapper.vm.currentValue).to.be.false; - expect(wrapper.vm.isDisabled).to.be.true; - - const checkboxLabel = wrapper.find('.van-checkbox__icon')[0]; - checkboxLabel.trigger('click'); - - expect(wrapper.vm.currentValue).to.be.false; - }); - - it('click on a disabled checkbox label', () => { - wrapper = mount(Checkbox, { - propsData: { - value: false, - labelDisabled: true - } - }); - - expect(wrapper.hasClass('van-checkbox')).to.be.true; - expect(wrapper.vm.currentValue).to.be.false; - - const checkboxLabel = wrapper.find('.van-checkbox__icon')[0]; - checkboxLabel.trigger('click'); - - expect(wrapper.vm.currentValue).to.be.false; - }); -}); diff --git a/test/specs/circle.spec.js b/test/specs/circle.spec.js deleted file mode 100644 index 7fff94e7c..000000000 --- a/test/specs/circle.spec.js +++ /dev/null @@ -1,65 +0,0 @@ -import { mount } from 'avoriaz'; -import Circle from 'packages/circle'; - -describe('Circle', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a circle', () => { - wrapper = mount(Circle, { - propsData: { - text: 'test' - } - }); - - expect(wrapper.hasClass('van-circle')).to.be.true; - expect(wrapper.find('.van-circle__text')[0].text()).to.equal('test'); - }); - - it('circle rate', done => { - let currentRate = 0; - wrapper = mount(Circle, { - propsData: { - rate: 0, - value: 0, - clockwise: false - } - }); - wrapper.vm.$on('input', rate => { - currentRate = rate; - }); - wrapper.vm.rate = 50; - - setTimeout(() => { - expect(currentRate).to.equal(50); - done(); - }, 100); - }); - - it('circle animation', done => { - let currentRate = 0; - wrapper = mount(Circle, { - propsData: { - rate: 0, - value: 0, - speed: 500, - clockwise: false - } - }); - wrapper.vm.$on('input', rate => { - currentRate = rate; - }); - wrapper.vm.rate = 50; - - setTimeout(() => { - expect(currentRate === 50).to.be.false; - setTimeout(() => { - expect(currentRate === 50).to.be.true; - done(); - }, 200); - }, 50); - }); -}); - diff --git a/test/specs/collapse.spec.js b/test/specs/collapse.spec.js deleted file mode 100644 index d1a702ad7..000000000 --- a/test/specs/collapse.spec.js +++ /dev/null @@ -1,47 +0,0 @@ -import { mount } from 'avoriaz'; -import Collapse from '../components/collapse'; - -describe('Circle', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('basic mode', () => { - wrapper = mount(Collapse); - - const firstTitle = wrapper.find('.van-collapse-item__title')[0]; - firstTitle.trigger('click'); - expect(wrapper.vm.active).to.eql(['first']); - - const secondTitle = wrapper.find('.van-collapse-item__title')[1]; - secondTitle.trigger('click'); - expect(wrapper.vm.active).to.eql(['first', 1]); - - firstTitle.trigger('click'); - expect(wrapper.vm.active).to.eql([1]); - }); - - it('accordion', () => { - wrapper = mount(Collapse, { - propsData: { - accordion: true - } - }); - - const firstTitle = wrapper.find('.van-collapse-item__title')[0]; - firstTitle.trigger('click'); - expect(wrapper.vm.active).to.eql('first'); - - const secondTitle = wrapper.find('.van-collapse-item__title')[1]; - secondTitle.trigger('click'); - expect(wrapper.vm.active).to.eql(1); - - firstTitle.trigger('click'); - expect(wrapper.vm.active).to.eql('first'); - - firstTitle.trigger('click'); - expect(wrapper.vm.active).to.eql(''); - }); -}); - diff --git a/test/specs/contact.spec.js b/test/specs/contact.spec.js deleted file mode 100644 index 1cd74d096..000000000 --- a/test/specs/contact.spec.js +++ /dev/null @@ -1,267 +0,0 @@ -import ContactCard from 'packages/contact-card'; -import ContactList from 'packages/contact-list'; -import ContactEdit from 'packages/contact-edit'; -import { mount } from 'avoriaz'; - -describe('ContactCard', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a ContactCard', () => { - wrapper = mount(ContactCard); - expect(wrapper.hasClass('van-contact-card')).to.be.true; - }); - - it('create a add ContactCard', done => { - wrapper = mount(ContactCard, { - propsData: { - type: 'add' - } - }); - - expect(wrapper.hasClass('van-contact-card')).to.be.true; - expect(wrapper.find('.van-contact-card__text')[0].text()).to.equal('添加订单联系人信息'); - - wrapper.vm.addText = '测试文案'; - wrapper.vm.$nextTick(() => { - expect(wrapper.find('.van-contact-card__text')[0].text()).to.equal('测试文案'); - done(); - }); - }); - - it('create a edit ContactCard', () => { - wrapper = mount(ContactCard, { - propsData: { - type: 'edit', - tel: '13000000000', - name: '测试姓名' - } - }); - - expect(wrapper.hasClass('van-contact-card')).to.be.true; - expect(wrapper.find('.van-contact-card__text div')[0].text()).to.equal('联系人:测试姓名'); - expect(wrapper.find('.van-contact-card__text div')[1].text()).to.equal('联系电话:13000000000'); - - const spy = sinon.spy(); - wrapper.vm.$on('click', spy); - wrapper.trigger('click'); - expect(spy.calledOnce).to.be.true; - - wrapper.vm.editable = false; - const spy2 = sinon.spy(); - wrapper.vm.$on('click', spy2); - wrapper.trigger('click'); - expect(spy2.calledOnce).to.be.false; - }); -}); - -describe('ContactList', () => { - const list = [ - { - id: '1', - name: '张三', - tel: '13000000000' - }, - { - id: '2', - name: '李四', - tel: '1310000000' - }, - { - id: '3', - name: '王五', - tel: '1320000000' - } - ]; - - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a ContactList', () => { - wrapper = mount(ContactList); - expect(wrapper.hasClass('van-contact-list')).to.be.true; - }); - - it('create a ContactList with three items', () => { - wrapper = mount(ContactList, { - propsData: { - value: '1', - list - } - }); - expect(wrapper.find('.van-cell').length).to.equal(4); - expect(wrapper.find('.van-icon-checked').length).to.equal(1); - }); - - it('listen to add & edit event', (done) => { - wrapper = mount(ContactList, { - propsData: { - list - } - }); - - const add = sinon.spy(); - wrapper.vm.$on('add', add); - wrapper.find('.van-contact-list__add')[0].trigger('click'); - expect(add.calledOnce).to.be.true; - - wrapper.vm.$on('edit', (item, index) => { - expect(index).to.equal(0); - done(); - }); - wrapper.find('.van-contact-list__edit')[0].trigger('click'); - }); - - it('listen to select event', (done) => { - wrapper = mount(ContactList, { - propsData: { - value: '1', - list - } - }); - - wrapper.vm.$on('select', (item, index) => { - expect(item.id).to.equal('3'); - done(); - }); - wrapper.find('.van-radio')[2].trigger('click'); - }); -}); - -describe('ContactEdit', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a ContactEdit', () => { - wrapper = mount(ContactEdit); - expect(wrapper.hasClass('van-contact-edit')).to.be.true; - expect(wrapper.find('.van-field__control')[0].element.value).to.equal(''); - expect(wrapper.find('.van-field__control')[1].element.value).to.equal(''); - }); - - it('create a ContactEdit with props', () => { - const contactInfo = { - name: '测试', - tel: '123123213' - }; - - wrapper = mount(ContactEdit, { - propsData: { - contactInfo - } - }); - - expect(wrapper.find('.van-field__control')[0].element.value).to.equal(contactInfo.name); - expect(wrapper.find('.van-field__control')[1].element.value).to.equal(contactInfo.tel); - }); - - it('save contactInfo', () => { - const contactInfo = { - name: '', - tel: '123123213' - }; - - wrapper = mount(ContactEdit, { - propsData: { - contactInfo - } - }); - - const saveSpy = sinon.spy(); - wrapper.vm.$on('save', saveSpy); - - const saveButton = wrapper.find('.van-button')[0]; - - // name empty - wrapper.vm.data.name = ''; - saveButton.trigger('click'); - expect(wrapper.vm.errorInfo['name']).to.be.true; - wrapper.find('.van-field__control')[0].trigger('focus'); - expect(wrapper.vm.errorInfo['name']).to.be.false; - - // name too long - wrapper.vm.data.name = '111111111111111111111111111'; - saveButton.trigger('click'); - expect(wrapper.vm.errorInfo['name']).to.be.true; - wrapper.find('.van-field__control')[0].trigger('focus'); - expect(wrapper.vm.errorInfo['name']).to.be.false; - - // tel empty - wrapper.vm.data.name = '123'; - wrapper.vm.data.tel = ''; - saveButton.trigger('click'); - expect(wrapper.vm.errorInfo['tel']).to.be.true; - wrapper.find('.van-field__control')[1].trigger('focus'); - expect(wrapper.vm.errorInfo['tel']).to.be.false; - - // tel invalid - wrapper.vm.data.tel = 'abc'; - saveButton.trigger('click'); - expect(wrapper.vm.errorInfo['tel']).to.be.true; - wrapper.find('.van-field__control')[1].trigger('focus'); - expect(wrapper.vm.errorInfo['tel']).to.be.false; - - // saving - wrapper.vm.data.tel = '13000000000'; - saveButton.trigger('click'); - wrapper.vm.isSaving = true; - saveButton.trigger('click'); - expect(saveSpy.calledOnce).to.be.true; - }); - - it('delete', done => { - wrapper = mount(ContactEdit, { - attachToDocument: true, - propsData: { - isDeleting: true, - isEdit: true, - contactInfo: { - id: '123' - } - } - }); - - const deleteButton = wrapper.find('.van-button')[1]; - deleteButton.trigger('click'); - wrapper.vm.onDelete(); - - setTimeout(() => { - wrapper.vm.isDeleting = false; - wrapper.vm.$nextTick(() => { - deleteButton.trigger('click'); - setTimeout(() => { - expect(document.querySelectorAll('.van-dialog').length).to.equal(1); - - wrapper.vm.$on('delete', () => { - done(); - }); - document.querySelector('.van-dialog__confirm').click(); - }, 300); - }); - }, 300); - }); - - it('watch contactInfo', done => { - const contactInfo = { - name: '123' - }; - - wrapper = mount(ContactEdit, { - propsData: { - contactInfo: {} - } - }); - - wrapper.setProps({ contactInfo }); - wrapper.vm.$nextTick(() => { - expect(wrapper.vm.data.name).to.equal('123'); - done(); - }); - }); -}); diff --git a/test/specs/coupon.spec.js b/test/specs/coupon.spec.js deleted file mode 100644 index c837c7c6d..000000000 --- a/test/specs/coupon.spec.js +++ /dev/null @@ -1,324 +0,0 @@ -import CouponCell from 'packages/coupon-cell'; -import CouponList from 'packages/coupon-list'; -import { mount } from 'avoriaz'; -import { DOMChecker } from '../utils'; - -const coupon = { - id: 1, - available: 1, - discount: 0, - denominations: 150, - origin_condition: 0, - reason: '', - value: 150, - condition: '下单立减 1.50 元', - name: '新手专用优惠券', - start_at: 1489104000, - end_at: 1514592000 -}; - -const discountCoupon = { - ...coupon, - id: 2, - discount: 88, - denominations: 0, - origin_condition: 50, - value: 12, - condition: '下单即享 8.8 折' -}; - -const emptyCoupon = { - id: 3, - denominations: 0, - discount: 0 -}; - -const disabledCoupon = { - ...coupon, - id: 4, - available: 0, - reason: '未满足使用门槛' -}; - -const disabledDiscountCoupon = { - ...discountCoupon, - id: 5, - available: 0, - reason: '未满足使用门槛' -}; - -describe('CouponCell', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('no coupon', () => { - wrapper = mount(CouponCell, {}); - - DOMChecker(wrapper, { - text: { - '.van-cell__value': '使用优惠' - } - }); - }); - - it('has two coupon', () => { - wrapper = mount(CouponCell, { - propsData: { - coupons: [coupon, discountCoupon] - } - }); - - DOMChecker(wrapper, { - text: { - '.van-cell__value': '您有 2 个可用优惠' - } - }); - }); - - it('select first coupon', () => { - wrapper = mount(CouponCell, { - propsData: { - chosenCoupon: 0, - coupons: [coupon, discountCoupon] - } - }); - - DOMChecker(wrapper, { - text: { - '.van-cell__value span': '省¥1.50' - }, - count: { - '.van-cell__right-icon': 1 - } - }); - }); - - it('not editable', () => { - wrapper = mount(CouponCell, { - propsData: { - chosenCoupon: 0, - coupons: [coupon, discountCoupon], - editable: false - } - }); - - DOMChecker(wrapper, { - text: { - '.van-cell__value span': '省¥1.50' - }, - count: { - '.van-cell__right-icon': 0 - } - }); - }); -}); - -describe('CouponList', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('no coupon', () => { - wrapper = mount(CouponList, { - propsData: { - chosenCoupon: -1 - } - }); - - DOMChecker(wrapper, { - count: { - '.van-coupon-item': 0, - '.van-coupon-item--disabled': 0, - '.van-coupon-list__list h3': 0 - } - }); - }); - - it('has two coupon', () => { - wrapper = mount(CouponList, { - propsData: { - chosenCoupon: -1, - coupons: [coupon, discountCoupon], - disabledCoupons: [disabledCoupon, disabledDiscountCoupon] - } - }); - DOMChecker(wrapper, { - count: { - '.van-coupon-item': 4, - '.van-coupon-item--disabled': 2, - '.van-coupon-list__list h3': 1 - } - }); - }); - - it('switch to first coupon', (done) => { - wrapper = mount(CouponList, { - attachToDocument: true, - propsData: { - chosenCoupon: -1, - coupons: [coupon, discountCoupon], - disabledCoupons: [disabledCoupon, disabledDiscountCoupon] - } - }); - - wrapper.vm.$on('change', (index) => { - wrapper.vm.chosenCoupon = index; - }); - - setTimeout(() => { - wrapper.find('.van-coupon-item')[0].trigger('click'); - - setTimeout(() => { - expect(wrapper.vm.chosenCoupon).to.equal(0); - done(); - }, 300); - }, 300); - }); - - it('cancel select coupon', (done) => { - wrapper = mount(CouponList, { - attachToDocument: true, - propsData: { - chosenCoupon: 0, - displayedCouponIndex: 0, - coupons: [coupon, discountCoupon], - disabledCoupons: [disabledCoupon, disabledDiscountCoupon] - } - }); - - wrapper.vm.$on('change', (index) => { - wrapper.vm.chosenCoupon = index; - wrapper.vm.displayedCouponIndex = index; - }); - - setTimeout(() => { - wrapper.find('.van-coupon-list__close')[0].trigger('click'); - setTimeout(() => { - expect(wrapper.vm.chosenCoupon).to.equal(-1); - done(); - }, 500); - }, 500); - }); - - it('denominations format', () => { - wrapper = mount(CouponList, { - attachToDocument: true, - propsData: { - coupons: [coupon, { - ...coupon, - id: 10, - denominations: 10 - }, { - ...coupon, - id: 11, - denominations: 100 - }, { - ...coupon, - id: 12, - denominations: 135 - }, { - ...coupon, - id: 13, - denominations: 0 - }] - } - }); - - expect(wrapper.find('.van-coupon-item__gradient h2')[0].text()).to.equal('¥ 1.5'); - expect(wrapper.find('.van-coupon-item__gradient h2')[1].text()).to.equal('¥ 0.1'); - expect(wrapper.find('.van-coupon-item__gradient h2')[2].text()).to.equal('¥ 1'); - expect(wrapper.find('.van-coupon-item__gradient h2')[3].text()).to.equal('¥ 1.35'); - expect(wrapper.find('.van-coupon-item__gradient h2')[4].text()).to.equal(''); - }); - - it('discount format', () => { - wrapper = mount(CouponList, { - attachToDocument: true, - propsData: { - coupons: [discountCoupon, { - ...discountCoupon, - id: 10, - discount: 10 - }, { - ...discountCoupon, - id: 11, - discount: 0 - }] - } - }); - - expect(wrapper.find('.van-coupon-item__gradient h2')[0].text()).to.equal('8.8折'); - expect(wrapper.find('.van-coupon-item__gradient h2')[1].text()).to.equal('1折'); - expect(wrapper.find('.van-coupon-item__gradient h2')[2].text()).to.equal(''); - }); - - it('add coupon', (done) => { - wrapper = mount(CouponList, { - attachToDocument: true, - propsData: { - chosenCoupon: 0, - coupons: [coupon, discountCoupon, emptyCoupon], - disabledCoupons: [disabledCoupon, disabledDiscountCoupon] - } - }); - - const code = '123123'; - - wrapper.vm.$on('exchange', (code) => { - expect(code).to.equal(code); - wrapper.vm.coupons.push({ - ...coupon, - id: 15 - }); - }); - - setTimeout(() => { - DOMChecker(wrapper, { - count: { - '.van-button--disabled': 1 - } - }); - - wrapper.find('.van-field__control')[0].element.value = code; - wrapper.find('.van-field__control')[0].trigger('input'); - - setTimeout(() => { - wrapper.find('.van-coupon-list__exchange')[0].trigger('click'); - DOMChecker(wrapper, { - count: { - '.van-button--disabled': 0 - } - }); - - setTimeout(() => { - expect(wrapper.find('.van-coupon-list')[0].hasStyle('display', 'none')).to.equal(false); - DOMChecker(wrapper, { - count: { - '.van-button--disabled': 1, - '.van-coupon-item': 6, - '.van-coupon-item--disabled': 2 - } - }); - done(); - }, 300); - }, 300); - }, 300); - }); - - it('displayedCouponIndex out of range', (done) => { - wrapper = mount(CouponList, { - propsData: { - displayedCouponIndex: -100, - coupons: [coupon, discountCoupon, emptyCoupon] - } - }); - - wrapper.vm.$nextTick(() => { - expect(wrapper.vm.chosenCoupon).to.equal(-1); - done(); - }); - }); -}); diff --git a/test/specs/datetime-picker.spec.js b/test/specs/datetime-picker.spec.js deleted file mode 100644 index 08bcabb11..000000000 --- a/test/specs/datetime-picker.spec.js +++ /dev/null @@ -1,165 +0,0 @@ -import DatetimePicker from 'packages/datetime-picker'; -import { mount } from 'avoriaz'; -import { dragHelper } from '../utils'; - -const testTime = '10:00'; -const testDate = new Date('2017/03/10 10:00'); -const minDate = new Date('2000/01/01 00:00'); -const maxDate = new Date('3000/01/01 00:00'); - -describe('DatetimePicker', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a time picker', () => { - wrapper = mount(DatetimePicker, { - attachToDocument: true, - propsData: { - type: 'time', - value: testTime - } - }); - expect(wrapper.vm.innerValue).to.equal(testTime); - }); - - it('create a date picker', () => { - wrapper = mount(DatetimePicker, { - attachToDocument: true, - propsData: { - type: 'date', - value: testDate - } - }); - expect(wrapper.vm.innerValue.getTime()).to.equal(testDate.getTime()); - }); - - it('create a year-month', () => { - wrapper = mount(DatetimePicker, { - attachToDocument: true, - propsData: { - type: 'year-month', - value: testDate - } - }); - expect(wrapper.vm.innerValue.getTime()).to.equal(testDate.getTime()); - }); - - it('create a datetime picker', () => { - wrapper = mount(DatetimePicker, { - attachToDocument: true, - propsData: { - type: 'datetime', - value: testDate - } - }); - expect(wrapper.vm.innerValue.getTime()).to.equal(testDate.getTime()); - }); - - it('drag time picker', (done) => { - wrapper = mount(DatetimePicker, { - attachToDocument: true, - propsData: { - type: 'time', - value: '12:00' - } - }); - - const [hour, minute] = wrapper.find('.van-picker-column ul'); - dragHelper(hour, 0, -50); - dragHelper(minute, 0, -50); - - setTimeout(() => { - expect(wrapper.vm.innerValue).to.equal('1:01'); - done(); - }, 50); - }); - - it('drag date picker', (done) => { - wrapper = mount(DatetimePicker, { - attachToDocument: true, - propsData: { - type: 'date', - value: testDate, - minDate, - maxDate - } - }); - - setTimeout(() => { - const [year, month, day] = wrapper.find('.van-picker-column ul'); - dragHelper(year, 0, -50); - dragHelper(month, 0, -50); - dragHelper(day, 0, -50); - setTimeout(() => { - const newYear = wrapper.vm.innerValue.getFullYear(); - const newMonth = wrapper.vm.innerValue.getMonth() + 1; - const newDay = wrapper.vm.innerValue.getDate(); - expect(newYear).to.equal(2018); - expect(newMonth).to.equal(4); - expect(newDay).to.equal(11); - done(); - }, 10); - }, 10); - }); - - it('drag year-month picker', (done) => { - wrapper = mount(DatetimePicker, { - attachToDocument: true, - propsData: { - type: 'year-month', - value: testDate, - minDate, - maxDate - } - }); - - setTimeout(() => { - const [year, month] = wrapper.find('.van-picker-column ul'); - dragHelper(year, 0, -50); - dragHelper(month, 0, -50); - setTimeout(() => { - const newYear = wrapper.vm.innerValue.getFullYear(); - const newMonth = wrapper.vm.innerValue.getMonth() + 1; - expect(newYear).to.equal(2018); - expect(newMonth).to.equal(4); - done(); - }, 10); - }, 10); - }); - - it('drag datetime picker', (done) => { - wrapper = mount(DatetimePicker, { - attachToDocument: true, - propsData: { - type: 'datetime', - value: testDate, - minDate, - maxDate - } - }); - - setTimeout(() => { - const [year, month, day, hour, minute] = wrapper.find('.van-picker-column ul'); - dragHelper(year, 0, -50); - dragHelper(month, 0, -50); - dragHelper(day, 0, -50); - dragHelper(hour, 0, -50); - dragHelper(minute, 0, -50); - setTimeout(() => { - const newYear = wrapper.vm.innerValue.getFullYear(); - const newMonth = wrapper.vm.innerValue.getMonth() + 1; - const newDay = wrapper.vm.innerValue.getDate(); - const newHour = wrapper.vm.innerValue.getHours(); - const newMinute = wrapper.vm.innerValue.getMinutes(); - expect(newYear).to.equal(2018); - expect(newMonth).to.equal(4); - expect(newDay).to.equal(11); - expect(newHour).to.equal(11); - expect(newMinute).to.equal(1); - done(); - }, 10); - }, 10); - }); -}); diff --git a/test/specs/deep-assign.spec.js b/test/specs/deep-assign.spec.js deleted file mode 100644 index 3eff8102b..000000000 --- a/test/specs/deep-assign.spec.js +++ /dev/null @@ -1,96 +0,0 @@ -import deepAssign from 'packages/utils/deep-assign'; - -describe('DeepAssign', () => { - it('basic assign', () => { - const a = { foo: 0 }; - const b = { foo: 0, bar: 1 }; - const output = { foo: 0, bar: 1 }; - expect(deepAssign(a, b)).to.eql(output); - expect(deepAssign(a, null)).to.eql(a); - expect(deepAssign(a, undefined)).to.eql(a); - }); - - it('same object', () => { - const a = { foo: 0 }; - expect(deepAssign(a, a)).to.eql(a); - }); - - it('only assign own keys', () => { - const Test = function() {}; - Test.prototype.a = 'many'; - const test = new Test(); - test.bar = 1; - expect(deepAssign({ foo: 1 }, test, { foo: 1, bar: 1 })).to.eql({ - foo: 1, - bar: 1 - }); - }); - - it('do not assign undefined values', () => { - expect(deepAssign({}, { foo: undefined })).to.eql({}); - }); - - it('do not assign null values', () => { - expect(deepAssign({}, { foo: null })).to.eql({}); - }); - - it('assign proprety, if proprety is null in the prototype chain', () => { - const Unicorn = function() {}; - Unicorn.prototype.rainbows = null; - const unicorn = new Unicorn(); - expect(deepAssign(unicorn, { rainbows: 'many' }).rainbows).to.eql('many'); - }); - - it('assign proprety, if proprety is undefined in the prototype chain', () => { - const Unicorn = function() {}; - Unicorn.prototype.rainbows = undefined; - const unicorn = new Unicorn(); - expect(deepAssign(unicorn, { rainbows: 'many' }).rainbows).to.eql('many'); - }); - - it('do not merge with a target proprety in the prototype chain', () => { - const amountOfRainbows = { amount: 'many' }; - const Unicorn = function() {}; - Unicorn.prototype.rainbows = amountOfRainbows; - const unicorn = deepAssign(new Unicorn(), { rainbows: 'none' }); - expect(unicorn.rainbows).to.eql('none'); - expect(unicorn.rainbows.amount).to.eql(undefined); - expect(Unicorn.prototype.rainbows).to.eql(amountOfRainbows); - }); - - it('deep assign', () => { - const a = { - foo: { - foo: { - foo: true - }, - bar: { - bar: false - } - } - }; - const b = { - foo: { - foo: { - foo: false, - bar: true - }, - bar: null - }, - bar: true - }; - const output = { - foo: { - foo: { - foo: false, - bar: true - }, - bar: { - bar: false - } - }, - bar: true - }; - expect(deepAssign(a, b)).to.eql(output); - }); -}); diff --git a/test/specs/dialog.spec.js b/test/specs/dialog.spec.js deleted file mode 100644 index 36de317f1..000000000 --- a/test/specs/dialog.spec.js +++ /dev/null @@ -1,87 +0,0 @@ -import Vue from 'vue'; -import Dialog from 'packages/dialog'; - -describe('Dialog', () => { - afterEach(() => { - Dialog.close(); - }); - - it('create a alert dialog', (done) => { - Dialog.close(); - Dialog.alert({ - title: 'title', - message: 'message' - }).then((action) => { - expect(action).to.equal('confirm'); - done(); - }); - - setTimeout(() => { - expect(document.querySelector('.van-dialog')).to.exist; - expect(document.querySelector('.van-dialog__cancel').style.display).to.equal('none'); - document.querySelector('.van-dialog__confirm').click(); - }, 300); - }); - - it('create a confirm dialog', (done) => { - Dialog.confirm({ - title: 'title', - message: 'message' - }).catch((action) => { - expect(action).to.equal('cancel'); - done(); - }); - - expect(document.querySelector('.van-dialog')).to.exist; - - setTimeout(() => { - document.querySelector('.van-dialog__cancel').click(); - }, 300); - }); - - it('create a confirm dialog with callback', (done) => { - Dialog.confirm({ - callback: (action) => { - expect(action).to.equal('cancel'); - done(); - } - }); - - setTimeout(() => { - document.querySelector('.van-dialog__cancel').click(); - }, 300); - }); - - it('set default options', () => { - Dialog.setDefaultOptions({ - title: 'default title' - }); - expect(Dialog.currentOptions.title).to.equal('default title'); - Dialog.resetDefaultOptions(); - expect(Dialog.currentOptions.title).to.equal(''); - }); - - it('register component', () => { - Vue.use(Dialog); - expect(!!Vue.component('van-dialog')).to.be.true; - }); - - it('before close', (done) => { - Dialog.confirm({ - beforeClose(action, dialogDone) { - setTimeout(() => { - dialogDone(); - setTimeout(() => { - expect(document.querySelector('.van-dialog').style.display).to.equal('none'); - done(); - }, 300); - }); - } - }); - - setTimeout(() => { - document.querySelector('.van-dialog__confirm').click(); - expect(document.querySelector('.van-dialog').style.display).to.equal(''); - }, 300); - }); -}); diff --git a/test/specs/field.spec.js b/test/specs/field.spec.js deleted file mode 100644 index f83cc2ca2..000000000 --- a/test/specs/field.spec.js +++ /dev/null @@ -1,199 +0,0 @@ -import Field from 'packages/field'; -import FieldWithIcon from '../components/field'; -import { mount } from 'avoriaz'; - -describe('Field', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a text field', () => { - wrapper = mount(Field, { - propsData: { - type: 'text', - autosize: false - } - }); - - expect(wrapper.hasClass('van-field')).to.be.true; - }); - - it('create a text field with initialize value', (done) => { - wrapper = mount(Field, { - propsData: { - value: 'test' - } - }); - - const eventStub = sinon.stub(wrapper.vm, '$emit'); - - wrapper.vm.value = 'test2'; - wrapper.vm.$nextTick(() => { - expect(eventStub.calledWith('input')); - expect(wrapper.find('.van-field__control')[0].element.value).to.equal('test2'); - done(); - }); - }); - - it('focus on input', (done) => { - wrapper = mount(Field, { - propsData: { - value: '' - } - }); - - const eventStub = sinon.stub(wrapper.vm, '$emit'); - const input = wrapper.find('.van-field__control')[0]; - input.trigger('focus'); - - wrapper.update(); - wrapper.vm.$nextTick(() => { - expect(eventStub.calledWith('focus')); - done(); - }); - }); - - it('create a textarea field', (done) => { - wrapper = mount(Field, { - propsData: { - type: 'textarea', - autosize: true - } - }); - - setTimeout(() => { - expect(wrapper.hasClass('van-field')).to.be.true; - done(); - }, 50); - }); - - it('create a autosize textarea field', (done) => { - wrapper = mount(Field, { - attachToDocument: true, - propsData: { - type: 'textarea', - autosize: {} - } - }); - - wrapper.vm.$on('input', val => { - wrapper.vm.value = val; - }); - - const textarea = wrapper.find('.van-field__control')[0]; - const textareaElement = textarea.element; - const textAreaDiff = (parseInt(textareaElement.style.paddingBottom, 10) + - parseInt(textareaElement.style.paddingTop, 10)) || 0; - - const longText = 'testtesttesttesttesttesttest'; - textareaElement.value = longText; - textarea.trigger('input'); - - setTimeout(() => { - expect(wrapper.find('.van-field__control')[0].element.value).to.equal(longText); - expect(textareaElement.style.height).to.equal((textareaElement.scrollHeight - textAreaDiff) + 'px'); - done(); - }, 50); - }); - - it('autosize object', (done) => { - wrapper = mount(Field, { - propsData: { - type: 'textarea', - autosize: { - maxHeight: 100, - minHeight: 50 - } - } - }); - - wrapper.vm.$on('input', val => { - wrapper.vm.value = val; - }); - - const textarea = wrapper.find('.van-field__control')[0]; - const textareaElement = textarea.element; - - const longText = 'testtesttesttesttesttesttest'; - textareaElement.value = longText; - textarea.trigger('input'); - - wrapper.update(); - setTimeout(() => { - expect(wrapper.find('.van-field__control')[0].element.value).to.equal(longText); - expect(textareaElement.style.height).to.equal(('50px')); - done(); - }, 50); - }); - - it('show icon when has value and icon props', () => { - wrapper = mount(Field, { - propsData: { - icon: 'name', - value: '123' - } - }); - - wrapper.find('.van-field__icon')[0].trigger('touchstart'); - expect(wrapper.find('.van-field__icon').length).to.equal(1); - }); - - it('keypress event', () => { - wrapper = mount(Field, { - propsData: { - value: '', - type: 'number' - } - }); - - const spy1 = sinon.spy(); - wrapper.vm.onKeypress({ keyCode: 0, preventDefault: spy1 }); - expect(spy1.calledOnce).to.be.true; - - const spy2 = sinon.spy(); - wrapper.vm.onKeypress({ keyCode: 50, preventDefault: spy2 }); - expect(spy2.calledOnce).to.be.false; - - const spy3 = sinon.spy(); - wrapper.vm.value = '0.1'; - wrapper.vm.onKeypress({ keyCode: 46, preventDefault: spy3 }); - expect(spy3.calledOnce).to.be.true; - - wrapper.vm.type = 'text'; - const spy4 = sinon.spy(); - wrapper.vm.onKeypress({ keyCode: 0, preventDefault: spy4 }); - expect(spy4.calledOnce).to.be.false; - }); - - it('create a field with icon slot', () => { - const fn = sinon.spy(); - - wrapper = mount(FieldWithIcon, { - propsData: { - onIconClick: fn - } - }); - - wrapper.find('.van-field__icon')[0].trigger('touchstart'); - expect(fn.calledOnce).to.be.true; - }); - - it('blur event', (done) => { - const blur = sinon.spy(); - const focus = sinon.spy(); - const clickIcon = sinon.spy(); - - wrapper = mount(FieldWithIcon, {}); - wrapper.vm.$on('blur', blur); - wrapper.vm.$on('focus', focus); - - wrapper.find('.van-field__icon')[0].trigger('click'); - wrapper.find('.van-field__control')[0].trigger('focus'); - wrapper.find('.van-field__control')[0].trigger('blur'); - - expect(blur.calledOnce).to.be.true; - expect(clickIcon.calledOnce).to.be.false; - done(); - }); -}); diff --git a/test/specs/goods-action.spec.js b/test/specs/goods-action.spec.js deleted file mode 100644 index 1c3b1d304..000000000 --- a/test/specs/goods-action.spec.js +++ /dev/null @@ -1,47 +0,0 @@ -import GoodsAction from '../components/goods-action'; -import GoodsActionBigBtn from 'packages/goods-action-big-btn'; -import GoodsActionMiniBtn from 'packages/goods-action-mini-btn'; -import { mount } from 'avoriaz'; -import { DOMChecker } from '../utils'; - -describe('GoodsAction', () => { - let wrapper; - - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a GoodsAction', () => { - wrapper = mount(GoodsAction, {}); - - DOMChecker(wrapper, { - count: { - '.van-goods-action-mini-btn': 2, - '.van-goods-action-big-btn': 2, - '.van-icon-chat': 1 - } - }); - }); - - it('click GoodsActionBigBtn', () => { - wrapper = mount(GoodsActionBigBtn, {}); - - const submitSpyFunc = sinon.spy(); - wrapper.vm.$on('click', submitSpyFunc); - wrapper.trigger('click'); - expect(submitSpyFunc.calledOnce).to.be.true; - }); - - it('click GoodsActionMiniBtn', () => { - wrapper = mount(GoodsActionMiniBtn, { - propsData: { - icon: 'card' - } - }); - - const submitSpyFunc = sinon.spy(); - wrapper.vm.$on('click', submitSpyFunc); - wrapper.trigger('click'); - expect(submitSpyFunc.calledOnce).to.be.true; - }); -}); diff --git a/test/specs/icon.spec.js b/test/specs/icon.spec.js deleted file mode 100644 index a93ab14c1..000000000 --- a/test/specs/icon.spec.js +++ /dev/null @@ -1,21 +0,0 @@ -import Icon from 'packages/icon'; -import { mount } from 'avoriaz'; - -describe('Icon', () => { - let wrapper; - - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a icon', () => { - wrapper = mount(Icon, { - propsData: { - name: 'arrow' - } - }); - - expect(wrapper.hasClass('van-icon')).to.be.true; - expect(wrapper.hasClass('van-icon-arrow')).to.be.true; - }); -}); diff --git a/test/specs/image-preview.spec.js b/test/specs/image-preview.spec.js deleted file mode 100644 index 7af0a18da..000000000 --- a/test/specs/image-preview.spec.js +++ /dev/null @@ -1,62 +0,0 @@ -import Vue from 'vue'; -import { mount } from 'avoriaz'; -import { triggerTouch } from '../utils'; -import ImagePreview from 'packages/image-preview'; -import ImagePreviewVue from 'packages/image-preview/image-preview'; - -const images = [ - 'https://img.yzcdn.cn/upload_files/2017/03/15/FkubrzN7AgGwLlTeb1E89-T_ZjBg.png', - 'https://img.yzcdn.cn/upload_files/2017/03/14/FmTPs0SeyQaAOSK1rRe1sL8RcwSY.jpeg', - 'https://img.yzcdn.cn/upload_files/2017/03/15/FvexrWlG_WxtCE9Omo5l27n_mAG_.jpeg' -]; - -describe('ImagePreview', () => { - let wrapper; - - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('call ImagePreview Function', (done) => { - ImagePreview(images); - Vue.nextTick(() => { - expect(document.querySelectorAll('.van-image-preview img').length).to.equal(3); - ImagePreview(images.slice(0, 2)); - - Vue.nextTick(() => { - expect(document.querySelectorAll('.van-image-preview img').length).to.equal(2); - done(); - }); - }); - }); - - it('create a ImagePreview Component', (done) => { - wrapper = mount(ImagePreviewVue); - wrapper.vm.images = images; - wrapper.vm.value = true; - wrapper.vm.$on('input', val => { - wrapper.vm.value = val; - }); - - expect(wrapper.hasClass('van-image-preview')).to.be.true; - - wrapper.vm.$nextTick(() => { - expect(wrapper.find('img').length).to.equal(3); - triggerTouch(wrapper, 'touchstart', 0, 0); - triggerTouch(wrapper, 'touchmove', 100, 100); - triggerTouch(wrapper, 'touchend', 0, 0); - expect(wrapper.vm.value).to.be.true; - - // triggerTouch(wrapper, 'touchstart', 0, 0); - // triggerTouch(wrapper, 'touchmove', 0, 0); - // triggerTouch(wrapper, 'touchend', 0, 0); - // expect(wrapper.vm.value).to.be.false; - done(); - }); - }); - - it('register component', () => { - Vue.use(ImagePreview); - expect(!!Vue.component('van-image-preview')).to.be.true; - }); -}); diff --git a/test/specs/layout.spec.js b/test/specs/layout.spec.js deleted file mode 100644 index ea9f1b9ba..000000000 --- a/test/specs/layout.spec.js +++ /dev/null @@ -1,41 +0,0 @@ -import { mount } from 'avoriaz'; -import Col from 'packages/col'; -import Row from 'packages/row'; -import RowTestComponent from '../components/row'; - -describe('Layout', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a simple row', () => { - wrapper = mount(Row); - - expect(wrapper.hasClass('van-row')).to.be.true; - expect(wrapper.vm.style).to.be.empty; - }); - - it('create a simple column', () => { - wrapper = mount(Col, { - propsData: { - span: 8, - offset: 8 - } - }); - expect(wrapper.hasClass('van-col')).to.be.true; - expect(wrapper.hasClass('van-col-8')).to.be.true; - expect(wrapper.hasClass('van-col-offset-8')).to.be.true; - expect(wrapper.vm.gutter).to.equal(0); - }); - - it('create a gutter row', () => { - wrapper = mount(RowTestComponent); - const row = wrapper.find(Row)[0]; - const column = wrapper.find(Col)[0]; - expect(row.hasStyle('margin-left', '-5px')).to.be.true; - expect(row.hasStyle('margin-right', '-5px')).to.be.true; - expect(column.hasStyle('padding-left', '5px')).to.be.true; - expect(column.hasStyle('padding-right', '5px')).to.be.true; - }); -}); diff --git a/test/specs/list.spec.js b/test/specs/list.spec.js deleted file mode 100644 index 548c96a9c..000000000 --- a/test/specs/list.spec.js +++ /dev/null @@ -1,68 +0,0 @@ -import List from 'packages/list'; -import { mount } from 'avoriaz'; - -describe('List', () => { - let wrapper; - - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('load event', done => { - wrapper = mount(List); - - const spy = sinon.spy(); - wrapper.vm.$on('load', spy); - wrapper.vm.$on('input', val => { - wrapper.vm.loading = val; - }); - - expect(spy.calledOnce).to.be.false; - wrapper.vm.$nextTick(() => { - expect(spy.calledOnce).to.be.true; - done(); - }); - }); - - it('finished', done => { - wrapper = mount(List, { - propsData: { - finished: true - } - }); - - const spy = sinon.spy(); - wrapper.vm.$on('load', spy); - - wrapper.vm.$nextTick(() => { - expect(spy.calledOnce).to.be.false; - - wrapper.vm.finished = false; - - setTimeout(() => { - expect(spy.calledOnce).to.be.true; - done(); - }, 50); - }); - }); - - it('immediate check false', done => { - wrapper = mount(List, { - propsData: { - immediateCheck: false - } - }); - - const spy = sinon.spy(); - wrapper.vm.$on('load', spy); - wrapper.vm.$on('input', val => { - wrapper.vm.loading = val; - }); - - expect(spy.calledOnce).to.be.false; - wrapper.vm.$nextTick(() => { - expect(spy.calledOnce).to.be.false; - done(); - }); - }); -}); diff --git a/test/specs/loading.spec.js b/test/specs/loading.spec.js deleted file mode 100644 index 4f6a22b71..000000000 --- a/test/specs/loading.spec.js +++ /dev/null @@ -1,73 +0,0 @@ -import Loading from 'packages/loading'; -import { mount } from 'avoriaz'; - -describe('Loading', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create default', () => { - wrapper = mount(Loading); - - expect(wrapper.hasClass('van-loading')).to.be.true; - }); - - it('create gradient-circle black', () => { - wrapper = mount(Loading, { - propsData: { - type: 'gradient-circle', - color: 'black' - } - }); - const spinner = wrapper.find('.van-loading__spinner')[0]; - - expect(spinner.hasClass('van-loading__spinner--gradient-circle')).to.be.true; - }); - - it('create gradient-circle white', () => { - wrapper = mount(Loading, { - propsData: { - type: 'gradient-circle', - color: 'white' - } - }); - const spinner = wrapper.find('.van-loading__spinner')[0]; - - expect(spinner.hasClass('van-loading__spinner--gradient-circle')).to.be.true; - }); - - it('create circle black', () => { - wrapper = mount(Loading, { - propsData: { - type: 'circle', - color: 'black' - } - }); - const spinner = wrapper.find('.van-loading__spinner')[0]; - - expect(spinner.hasClass('van-loading__spinner--circle')).to.be.true; - }); - - it('create circle white', () => { - wrapper = mount(Loading, { - propsData: { - type: 'circle', - color: 'white' - } - }); - const spinner = wrapper.find('.van-loading__spinner')[0]; - - expect(spinner.hasClass('van-loading__spinner--circle')).to.be.true; - }); - - it('loading size', () => { - wrapper = mount(Loading, { - propsData: { - size: '100px' - } - }); - expect(wrapper.vm.$el.style.width).to.equal('100px'); - expect(wrapper.vm.$el.style.height).to.equal('100px'); - }); -}); diff --git a/test/specs/nav-bar.spec.js b/test/specs/nav-bar.spec.js deleted file mode 100644 index 858ef9ffc..000000000 --- a/test/specs/nav-bar.spec.js +++ /dev/null @@ -1,43 +0,0 @@ -import NavBar from 'packages/nav-bar'; -import { mount } from 'avoriaz'; -import { DOMChecker } from '../utils'; - -describe('NavBar', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a NavBar', () => { - wrapper = mount(NavBar, { - propsData: { - title: '标题', - leftText: '返回', - rightText: '按钮', - leftArrow: true - } - }); - - DOMChecker(wrapper, { - text: { - '.van-nav-bar__title': '标题', - '.van-nav-bar__left .van-nav-bar__text': '返回', - '.van-nav-bar__right .van-nav-bar__text': '按钮' - }, - count: { - '.van-nav-bar__arrow': 1 - } - }); - expect(wrapper.hasClass('van-nav-bar')).to.be.true; - }); - - it('NavBar fixed', () => { - wrapper = mount(NavBar, { - propsData: { - fixed: true - } - }); - - expect(wrapper.hasClass('van-nav-bar')).to.be.true; - }); -}); diff --git a/test/specs/notice-bar.spec.js b/test/specs/notice-bar.spec.js deleted file mode 100644 index 87c796e44..000000000 --- a/test/specs/notice-bar.spec.js +++ /dev/null @@ -1,61 +0,0 @@ -import NoticeBar from '../components/notice-bar'; -import { mount } from 'avoriaz'; - -describe('NoticeBar', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a notice-bar', () => { - wrapper = mount(NoticeBar, { - propsData: {}, - attachToDocument: true - }); - - expect(wrapper.find('.van-notice-bar').length).to.equal(1); - }); - - it('mode closeable', () => { - wrapper = mount(NoticeBar, { - propsData: { - mode: 'closeable' - }, - attachToDocument: true - }); - - const icon = wrapper.find('.van-icon-close'); - expect(icon.length).to.equal(1); - - icon[0].trigger('click'); - expect(wrapper.hasStyle('display', 'none')); - }); - - it('mode link', () => { - wrapper = mount(NoticeBar, { - propsData: { - mode: 'link' - }, - attachToDocument: true - }); - - expect(wrapper.find('.van-icon-arrow').length).to.equal(1); - }); - - it('notice-bar transitionend', (done) => { - wrapper = mount(NoticeBar, { - propsData: { - text: '足协杯战线连续第2年上演广州德比战', - speed: 1000, - delay: 0 - }, - attachToDocument: true - }); - - const content = wrapper.find('.van-notice-bar__content')[0]; - setTimeout(() => { - expect(content.hasStyle('transition-delay', '0s')).to.be.true; - done(); - }, 500); - }); -}); diff --git a/test/specs/number-keyboard.spec.js b/test/specs/number-keyboard.spec.js deleted file mode 100644 index 2d456c261..000000000 --- a/test/specs/number-keyboard.spec.js +++ /dev/null @@ -1,169 +0,0 @@ -import NumberKeyboard from 'packages/number-keyboard'; -import NumberKeyboardKeepAlive from '../components/number-keyboard'; -import { mount } from 'avoriaz'; -import { triggerTouch } from '../utils'; - -function mockKeyDown(wrapper, keyIndex) { - const key = wrapper.element.querySelectorAll('.van-key')[keyIndex]; - const touchStart = document.createEvent('CustomEvent'); - touchStart.initCustomEvent('touchstart', true, true, {}); - key.dispatchEvent(touchStart); -} - -function mockKeyUp(wrapper, keyIndex) { - const key = wrapper.element.querySelectorAll('.van-key')[keyIndex]; - const touchEnd = document.createEvent('CustomEvent'); - touchEnd.initCustomEvent('touchend', true, true, {}); - key.dispatchEvent(touchEnd); -} - -describe('NumberKeyboard', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a NumberKeyboard', () => { - wrapper = mount(NumberKeyboard, {}); - expect(wrapper.hasClass('van-number-keyboard')).to.be.true; - }); - - it('click a keyboard key', (done) => { - wrapper = mount(NumberKeyboard, { - propsData: { - theme: 'custom', - closeButtonText: 'close' - } - }); - - // just for coverage - wrapper.vm.handler(true); - - wrapper.vm.$on('input', value => { - mockKeyUp(wrapper, 0); - expect(value).to.equal(1); - done(); - }); - - mockKeyDown(wrapper, 12); // close - mockKeyDown(wrapper, 10); // empty - mockKeyDown(wrapper, 0); // 1 - }); - - it('click delete key', (done) => { - wrapper = mount(NumberKeyboard, {}); - - const deleteSpy = sinon.spy(); - wrapper.vm.$on('delete', deleteSpy); - - mockKeyDown(wrapper, 11); - wrapper.vm.$nextTick(() => { - expect(deleteSpy.calledOnce).to.be.true; - done(); - }); - }); - - it('blur keyboard', (done) => { - wrapper = mount(NumberKeyboard, { - attachToDocument: true - }); - - const blur = sinon.spy(); - wrapper.vm.$on('blur', blur); - - triggerTouch(document.body, 'touchstart'); - wrapper.vm.$nextTick(() => { - expect(blur.calledOnce).to.be.true; - done(); - }); - }); - - it('listen to show event when has transtion', (done) => { - wrapper = mount(NumberKeyboard, { - attachToDocument: true - }); - - const show = sinon.spy(); - wrapper.vm.$on('show', show); - wrapper.vm.show = true; - wrapper.trigger('animationend'); - - setTimeout(() => { - expect(show.calledOnce).to.be.true; - done(); - }, 100); - }); - - it('listen to show event when no transtion', (done) => { - wrapper = mount(NumberKeyboard, { - attachToDocument: true, - propsData: { - transition: false - } - }); - - const show = sinon.spy(); - wrapper.vm.$on('show', show); - wrapper.vm.show = true; - - wrapper.vm.$nextTick(() => { - expect(show.calledOnce).to.be.true; - done(); - }); - }); - - it('listen to hide event when has transtion', (done) => { - wrapper = mount(NumberKeyboard, { - attachToDocument: true, - propsData: { - show: true - } - }); - - const hide = sinon.spy(); - wrapper.vm.$on('hide', hide); - wrapper.vm.show = false; - wrapper.trigger('animationend'); - - setTimeout(() => { - expect(hide.calledOnce).to.be.true; - done(); - }, 100); - }); - - it('listen to hide event when no transtion', (done) => { - wrapper = mount(NumberKeyboard, { - attachToDocument: true, - propsData: { - show: true, - transition: false - } - }); - - const hide = sinon.spy(); - wrapper.vm.$on('hide', hide); - wrapper.vm.show = false; - - wrapper.vm.$nextTick(() => { - expect(hide.calledOnce).to.be.true; - done(); - }); - }); - - it('keey-alive live cycle', (done) => { - wrapper = mount(NumberKeyboardKeepAlive, { - attachToDocument: true, - propsData: { - showKeyboard: true - } - }); - - expect(wrapper.find('.van-number-keyboard').length).to.equal(1); - - wrapper.vm.showKeyboard = false; - wrapper.vm.$nextTick(() => { - expect(wrapper.find('.van-number-keyboard').length).to.equal(0); - done(); - }); - }); -}); diff --git a/test/specs/pagination.spec.js b/test/specs/pagination.spec.js deleted file mode 100644 index 431cfb30d..000000000 --- a/test/specs/pagination.spec.js +++ /dev/null @@ -1,134 +0,0 @@ -import Vue from 'vue'; -import { mount } from 'avoriaz'; -import Pagination from 'packages/pagination'; - -describe('Pagination', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a multi Pagination', done => { - wrapper = mount(Pagination, { - propsData: { - mode: 'multi', - totalItems: 120, - itemsPerPage: 10, - showPageSize: 5, - value: 2 - } - }); - expect(wrapper.hasClass('van-pagination')).to.be.true; - expect(wrapper.find('.van-pagination__item').length).to.equal(7); - expect( - wrapper.find('.van-pagination__item')[0].hasClass('van-pagination__prev') - ).to.be.true; - expect(wrapper.vm.value).to.equal(2); - - const eventStub = sinon.stub(wrapper.vm, '$emit'); - wrapper.find('.van-pagination__next')[0].trigger('click'); - Vue.nextTick(() => { - expect(eventStub.calledWith('input')); - expect(eventStub.calledWith('change')); - expect(wrapper.vm.value).to.equal(2); - - wrapper.vm.value = 12; - wrapper.update(); - Vue.nextTick(() => { - expect( - wrapper - .find('.van-pagination__next')[0] - .hasClass('van-pagination__item--disabled') - ).to.be.true; - done(); - }); - }); - }); - - it('create a multi forceEllipses Pagination', done => { - wrapper = mount(Pagination, { - propsData: { - mode: 'multi', - totalItems: 120, - itemsPerPage: 10, - showPageSize: 5, - forceEllipses: true, - value: 1 - } - }); - - const ellipsesLink = wrapper.find('.van-pagination__page')[5]; - expect(ellipsesLink.text().trim()).to.equal('...'); - - wrapper.vm.value = 7; - wrapper.update(); - Vue.nextTick(() => { - const ellipsesLink = wrapper.find('.van-pagination__page')[0]; - expect(ellipsesLink.text().trim()).to.equal('...'); - - wrapper.vm.value = 12; - Vue.nextTick(() => { - const pages = wrapper.find('.van-pagination__page'); - const ellipsesLink = pages[pages.length - 1]; - expect(ellipsesLink.text().trim()).to.equal('12'); - done(); - }); - }); - }); - - it('create a simple Pagination', () => { - wrapper = mount(Pagination, { - propsData: { - mode: 'simple', - totalItems: 120, - itemsPerPage: 10, - value: 1 - } - }); - expect(wrapper.hasClass('van-pagination')).to.be.true; - expect(wrapper.find('.van-pagination__item').length).to.equal(2); - expect( - wrapper.find('.van-pagination__item')[0].hasClass('van-pagination__prev') - ).to.be.true; - }); - - it('create a empty Pagination', done => { - wrapper = mount(Pagination, { - propsData: { - mode: 'multi', - totalItems: 120, - itemsPerPage: 10, - showPageSize: 5, - nextText: '下一页', - previousText: '上一页', - value: 2 - } - }); - - expect(wrapper.find('.van-pagination__prev')[0].text().trim()).to.equal('上一页'); - expect(wrapper.find('.van-pagination__next')[0].text().trim()).to.equal('下一页'); - - wrapper.vm.value = { currentPage: 18 }; - wrapper.update(); - Vue.nextTick(() => { - expect(wrapper.find('.van-pagination__page').length).to.equal(0); - done(); - }); - }); - - it('create a multi forceEllipses Pagination && max show page size', () => { - wrapper = mount(Pagination, { - propsData: { - mode: 'multi', - totalItems: 120, - itemsPerPage: 10, - showPageSize: 12, - forceEllipses: true, - value: 1 - } - }); - - const ellipsesLink = wrapper.find('.van-pagination__page')[11]; - expect(ellipsesLink.text().trim()).to.equal('12'); - }); -}); diff --git a/test/specs/password-input.spec.js b/test/specs/password-input.spec.js deleted file mode 100644 index e5ce480d5..000000000 --- a/test/specs/password-input.spec.js +++ /dev/null @@ -1,56 +0,0 @@ -import PasswordInput from 'packages/password-input'; -import { mount } from 'avoriaz'; - -describe('PasswordInput', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a PasswordInput', () => { - wrapper = mount(PasswordInput, {}); - expect(wrapper.find('.van-password-input').length).to.equal(1); - }); - - it('create a PasswordInput with value && info', (done) => { - wrapper = mount(PasswordInput, { - propsData: { - value: '000', - info: '测试info' - } - }); - - expect(wrapper.find('.van-password-input i')[2].hasStyle('visibility', 'visible')).to.be.true; - expect(wrapper.find('.van-password-input i')[3].hasStyle('visibility', 'visible')).to.be.false; - expect(wrapper.find('.van-password-input__info')[0].text()).to.equal('测试info'); - - wrapper.vm.value = '0000'; - wrapper.vm.errorInfo = '测试errorInfo'; - wrapper.vm.$nextTick(() => { - expect(wrapper.find('.van-password-input i')[3].hasStyle('visibility', 'visible')).to.be.true; - expect(wrapper.find('.van-password-input__info').length).to.equal(0); - expect(wrapper.find('.van-password-input__error-info')[0].text()).to.equal('测试errorInfo'); - done(); - }); - }); - - it('listen to focus event', () => { - wrapper = mount(PasswordInput, {}); - - const focus = sinon.spy(); - wrapper.vm.$on('focus', focus); - wrapper.find('.van-password-input__security')[0].trigger('touchstart'); - - expect(focus.calledOnce).to.be.true; - }); - - it('change password length', () => { - wrapper = mount(PasswordInput, { - propsData: { - length: 2 - } - }); - - expect(wrapper.find('.van-password-input i').length).to.equal(2); - }); -}); diff --git a/test/specs/picker.spec.js b/test/specs/picker.spec.js deleted file mode 100644 index 15173ce94..000000000 --- a/test/specs/picker.spec.js +++ /dev/null @@ -1,283 +0,0 @@ -import Picker from 'packages/picker'; -import PickerColumn from 'packages/picker/PickerColumn'; -import { mount } from 'avoriaz'; -import { dragHelper } from '../utils'; - -const simpleColumn = ['1990', '1991', '1992', '1993', '1994', '1995']; -const columns = [ - { - values: ['vip', 'normal'], - className: 'column1' - }, - { - values: simpleColumn, - className: 'column2' - } -]; - -const disabledOption = [{ - disabled: true, - text: '123' -}]; - -describe('Picker', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create picker', () => { - wrapper = mount(Picker, { - propsData: { - columns: columns - } - }); - - expect(wrapper.hasClass('van-picker')).to.be.true; - - expect(wrapper.vm.getColumnValues(0).length).to.equal(2); - expect(wrapper.vm.getValues().length).to.equal(2); - }); - - it('set picker values', () => { - wrapper = mount(Picker, { - propsData: { - columns: columns - } - }); - - expect(wrapper.vm.getColumnValues(0).length).to.equal(2); - expect(wrapper.vm.getColumnValues(1).length).to.equal(6); - - expect(wrapper.vm.getColumnValue(0)).to.equal('vip'); - expect(wrapper.vm.getColumnValue(1)).to.equal('1990'); - - wrapper.vm.setColumnValue(0, 'normal'); - expect(wrapper.vm.getColumnValue(0)).to.equal('normal'); - - wrapper.vm.setColumnIndex(0, 0); - expect(wrapper.vm.getColumnValue(0)).to.equal('vip'); - - wrapper.vm.setColumnValue(1, '1991'); - expect(wrapper.vm.getColumnValue(1)).to.equal('1991'); - - wrapper.vm.setColumnValues(0, ['vip', 'normal', 'other']); - expect(wrapper.vm.getColumnValues(0).length).to.equal(3); - expect(wrapper.vm.getValues().length).to.equal(2); - - wrapper.vm.setValues(['vip', '1992']); - expect(wrapper.vm.getColumnIndex(0)).to.equal(0); - expect(wrapper.vm.getColumnIndex(1)).to.equal(2); - expect(wrapper.vm.getColumnIndex(2)).to.equal(undefined); - expect(wrapper.vm.getIndexes(2)).to.eql([0, 2]); - - wrapper.vm.setIndexes([1, 4]); - expect(wrapper.vm.getColumnValue(0)).to.equal('normal'); - expect(wrapper.vm.getColumnValue(1)).to.equal('1994'); - expect(wrapper.vm.getColumnValue(2)).to.equal(undefined); - }); - - it('create a simple column picker', () => { - wrapper = mount(Picker, { - propsData: { - columns: undefined - } - }); - - expect(wrapper.hasClass('van-picker')).to.be.true; - expect(wrapper.vm.currentColumns.length).to.equal(0); - }); - - it('create a invalid columns picker', () => { - wrapper = mount(Picker, { - propsData: { - columns: simpleColumn - } - }); - - expect(wrapper.vm.isSimpleColumn).to.be.true; - }); - - it('set invalid index columns', () => { - wrapper = mount(Picker, { - propsData: { - columns: columns - } - }); - - expect(wrapper.vm.getColumnValues(3)).to.equal(undefined); - wrapper.vm.setColumnValues(3, [1, 2]); - expect(wrapper.vm.getColumnValues(3)).to.equal(undefined); - - expect(wrapper.vm.getColumnValue(3)).to.equal(undefined); - wrapper.vm.setColumnValue(3, 3); - expect(wrapper.vm.getColumnValue(3)).to.equal(undefined); - }); - - it('create a empty picker and emit a cencel event', (done) => { - wrapper = mount(Picker, { - propsData: { - showToolbar: true - } - }); - - expect(wrapper.hasClass('van-picker')).to.be.true; - expect(wrapper.contains('.van-picker__toolbar')).to.be.true; - expect(wrapper.vm.currentColumns.length).to.equal(0); - - const eventStub = sinon.stub(wrapper.vm, '$emit'); - const cancelBtn = wrapper.find('.van-picker__cancel')[0]; - cancelBtn.trigger('click'); - - wrapper.vm.$nextTick(() => { - expect(eventStub.calledOnce).to.be.true; - expect(eventStub.calledWith('cancel')); - done(); - }); - }); - - it('create a empty picker and emit a confirm event', (done) => { - wrapper = mount(Picker, { - propsData: { - showToolbar: true - } - }); - - expect(wrapper.hasClass('van-picker')).to.be.true; - expect(wrapper.contains('.van-picker__toolbar')).to.be.true; - - const eventStub = sinon.stub(wrapper.vm, '$emit'); - const cancelBtn = wrapper.find('.van-picker__confirm')[0]; - cancelBtn.trigger('click'); - - wrapper.vm.$nextTick(() => { - expect(eventStub.calledOnce).to.be.true; - expect(eventStub.calledWith('confirm')); - done(); - }); - }); - - it('simple column emit a confirm event', (done) => { - wrapper = mount(Picker, { - propsData: { - columns: simpleColumn, - showToolbar: true - } - }); - - const eventStub = sinon.stub(wrapper.vm, '$emit'); - const cancelBtn = wrapper.find('.van-picker__confirm')[0]; - cancelBtn.trigger('click'); - - wrapper.vm.$nextTick(() => { - expect(eventStub.calledOnce).to.be.true; - expect(eventStub.calledWith('confirm')); - done(); - }); - }); -}); - -describe('PickerColumn', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a picker-column', () => { - wrapper = mount(PickerColumn); - - expect(wrapper.hasClass('van-picker-column')).to.be.true; - expect(wrapper.vm.options.length).to.equal(0); - }); - - it('change picker-column value', (done) => { - wrapper = mount(PickerColumn, { - propsData: { - options: [1, 2, 3, 4, 5], - value: 1 - } - }); - - expect(wrapper.vm.options.length).to.equal(5); - - wrapper.vm.setValue(3); - wrapper.vm.$nextTick(() => { - expect(wrapper.vm.currentValue).to.equal(3); - done(); - }); - }); - - it('change picker-column values', (done) => { - wrapper = mount(PickerColumn); - - expect(wrapper.vm.options.length).to.equal(0); - - wrapper.vm.options = [1, 2]; - wrapper.vm.$nextTick(() => { - expect(wrapper.vm.options.length).to.equal(2); - done(); - }); - }); - - it('change defaultIndex', (done) => { - wrapper = mount(PickerColumn, { - propsData: { - options: simpleColumn, - defaultIndex: 0 - } - }); - - expect(wrapper.vm.currentIndex).to.equal(0); - wrapper.vm.defaultIndex = 2; - wrapper.vm.$nextTick(() => { - expect(wrapper.vm.currentIndex).to.equal(2); - done(); - }); - }); - - it('select disabled options', () => { - wrapper = mount(PickerColumn, { - propsData: { - options: [ - { text: '1', disabled: true }, - { text: '2' }, - { text: '3', disabled: true }, - { text: '4', disabled: true } - ], - valueKey: 'text' - } - }); - expect(wrapper.vm.currentIndex).to.equal(1); - - wrapper.vm.setIndex(3); - expect(wrapper.vm.currentIndex).to.equal(1); - }); - - it('disabled options', () => { - wrapper = mount(PickerColumn, { - propsData: { - options: disabledOption - } - }); - - expect(wrapper.find('.van-picker-column__item--disabled').length).to.equal(1); - expect(wrapper.vm.currentIndex).to.equal(undefined); - }); - - it('drag options', () => { - wrapper = mount(PickerColumn, { - propsData: { - options: columns[1].values, - itemHeight: 50 - } - }); - expect(wrapper.vm.currentIndex).to.equal(0); - - const column = wrapper.find('.van-picker-column')[0]; - dragHelper(column, 0, 0); - expect(wrapper.vm.currentIndex).to.equal(0); - - dragHelper(column, 0, -100); - expect(wrapper.vm.currentIndex).to.equal(2); - }); -}); diff --git a/test/specs/popup.spec.js b/test/specs/popup.spec.js deleted file mode 100644 index 1a9f2c522..000000000 --- a/test/specs/popup.spec.js +++ /dev/null @@ -1,182 +0,0 @@ -import Popup from 'packages/popup'; -import { mount } from 'avoriaz'; -import { triggerTouch } from '../utils'; - -describe('Popup', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a popup', () => { - wrapper = mount(Popup, { - propsData: { - position: 'bottom' - } - }); - - expect(wrapper.hasClass('van-popup')).to.be.true; - expect(wrapper.instance().currentTransition).to.equal('popup-slide-bottom'); - }); - - it('create a show popup', (done) => { - wrapper = mount(Popup, { - propsData: { - value: false, - zIndex: 100, - overlay: false, - lockScroll: false - } - }); - - const eventStub = sinon.stub(wrapper.vm, '$emit'); - expect(wrapper.element.style.display).to.equal('none'); - - wrapper.vm.value = true; - wrapper.vm.$nextTick(() => { - expect(wrapper.element.style.display).to.equal(''); - expect(eventStub.calledWith('input')); - done(); - }); - }); - - it('toggle popup show', () => { - wrapper = mount(Popup, { - propsData: { - value: true - } - }); - - expect(wrapper.element.style.display).to.equal(''); - }); - - it('create a popup-fade transition popup', () => { - wrapper = mount(Popup, { - propsData: { - transition: 'popup-fade' - } - }); - - expect(wrapper.hasClass('van-popup')).to.be.true; - expect(wrapper.instance().currentTransition).to.equal('popup-fade'); - }); - - it('popup modal', (done) => { - wrapper = mount(Popup, { - propsData: { - value: true - } - }); - - wrapper.vm.$on('input', val => { - wrapper.vm.value = val; - }); - - expect(wrapper.hasClass('van-popup')).to.be.true; - - setTimeout(() => { - const modal = document.querySelector('.van-modal'); - triggerTouch(modal, 'touchstart', 0, 0); - triggerTouch(modal, 'touchmove', 0, 10); - triggerTouch(modal, 'touchmove', 0, 30); - triggerTouch(modal, 'touchmove', 0, -30); - expect(modal).to.exist; - - modal.click(); - setTimeout(() => { - expect(wrapper.vm.value).to.be.false; - done(); - }, 300); - }, 300); - }); - - it('popup prevent scroll', (done) => { - wrapper = mount(Popup, { - propsData: { - value: true - } - }); - - expect(wrapper.hasClass('van-popup')).to.be.true; - - setTimeout(() => { - expect(wrapper.element.style.display).to.equal(''); - wrapper.vm.value = false; - triggerTouch(document, 'touchstart', 0, 0); - triggerTouch(document, 'touchmove', 0, 10); - triggerTouch(document, 'touchmove', 0, 30); - triggerTouch(document, 'touchmove', 0, -30); - - setTimeout(() => { - expect(wrapper.element.style.display).to.equal('none'); - done(); - }, 500); - }, 300); - }); - - it('treat empty string as true for boolean props', () => { - wrapper = mount(Popup, { - propsData: { - overlay: '', - lockScroll: '', - closeOnClickOverlay: '' - } - }); - - expect(wrapper.vm.lockScroll).to.be.true; - }); - - it('get container prop', done => { - const testNode = document.createElement('div'); - const testNode2 = document.createElement('div'); - document.body.appendChild(testNode); - document.body.appendChild(testNode2); - - wrapper = mount(Popup, { - propsData: { - getContainer: () => testNode - } - }); - - expect(wrapper.vm.$el.parentNode === testNode).to.be.true; - wrapper.vm.getContainer = () => testNode2; - - setTimeout(() => { - expect(wrapper.vm.$el.parentNode === testNode2).to.be.true; - wrapper.vm.getContainer = null; - done(); - }, 100); - }); - - it('watch overlay change', done => { - const testNode = document.createElement('div'); - document.body.appendChild(testNode); - - wrapper = mount(Popup, { - propsData: { - overlay: false, - getContainer: () => testNode - } - }); - - expect(testNode.querySelectorAll('.van-modal').length).to.equal(0); - wrapper.vm.overlay = true; - setTimeout(() => { - expect(testNode.querySelectorAll('.van-modal').length).to.equal(1); - done(); - }, 100); - }); - - it('popup lock scroll', done => { - wrapper = mount(Popup, { - propsData: { - value: true - } - }); - - setTimeout(() => { - expect(document.body.classList.contains('van-overflow-hidden')).to.be.true; - done(); - }, 50); - }); -}); diff --git a/test/specs/progress.spec.js b/test/specs/progress.spec.js deleted file mode 100644 index d70226746..000000000 --- a/test/specs/progress.spec.js +++ /dev/null @@ -1,82 +0,0 @@ -import Progress from 'packages/progress'; -import { mount } from 'avoriaz'; - -describe('Progress', () => { - let wrapper; - let bar; - let pivot; - const initProgressBar = function(propsData) { - wrapper = mount(Progress, { - propsData: propsData - }); - bar = wrapper.find('.van-progress__portion')[0]; - pivot = wrapper.find('.van-progress__pivot')[0]; - }; - - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create active 3% progress bar', () => { - initProgressBar({ percentage: 3 }); - - expect(wrapper.hasClass('van-progress')).to.be.true; - expect(bar.is('span')).to.be.true; - expect(bar.hasStyle('width', '3%')); - - expect(pivot.is('span')).to.be.true; - expect(pivot.hasStyle('left', '0%')); - expect(pivot.hasStyle('marginLeft', '0')); - expect(pivot.text()).to.equal('3%'); - }); - - it('create active 35% progress bar', () => { - initProgressBar({ percentage: 35 }); - - expect(wrapper.hasClass('van-progress')).to.be.true; - expect(bar.is('span')).to.be.true; - expect(bar.hasStyle('width', '35%')); - - expect(pivot.is('span')).to.be.true; - expect(pivot.hasStyle('left', '35%')); - expect(pivot.hasStyle('marginLeft', '-14px')); - expect(pivot.text()).to.equal('35%'); - }); - - it('create active 98% progress bar', () => { - initProgressBar({ percentage: 98 }); - - expect(wrapper.hasClass('van-progress')).to.be.true; - expect(bar.is('span')).to.be.true; - expect(bar.hasStyle('width', '98%')); - - expect(pivot.is('span')).to.be.true; - expect(pivot.hasStyle('left', '100%')); - expect(pivot.hasStyle('marginLeft', '-28px')); - expect(pivot.text()).to.equal('98%'); - }); - - it('create inactive 35% progress bar', () => { - initProgressBar({ percentage: 35, inactive: true }); - - expect(pivot.hasStyle('backgroundColor', '#cacaca')); - }); - - it('create progress bar with custom text', () => { - initProgressBar({ percentage: 35, pivotText: 'pivotText' }); - - expect(pivot.text()).to.equal('pivotText'); - }); - - it('create progress bar with custom color', () => { - initProgressBar({ percentage: 35, color: 'red' }); - - expect(pivot.hasStyle('backgroundColor', 'red')); - }); - - it('create progress bar with text color', () => { - initProgressBar({ percentage: 35, textColor: 'red' }); - - expect(pivot.hasStyle('color', 'red')); - }); -}); diff --git a/test/specs/pull-refresh.spec.js b/test/specs/pull-refresh.spec.js deleted file mode 100644 index 5f528763b..000000000 --- a/test/specs/pull-refresh.spec.js +++ /dev/null @@ -1,139 +0,0 @@ -import PullRefresh from 'packages/pull-refresh'; -import { mount } from 'avoriaz'; -import { triggerTouch } from '../utils'; - -describe('PullRefresh', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a PullRefresh', () => { - wrapper = mount(PullRefresh, { - propsData: { - value: false - } - }); - - expect(wrapper.hasClass('van-pull-refresh')).to.be.true; - }); - - it('change head content when pulling down', (done) => { - wrapper = mount(PullRefresh, { - propsData: { - value: false - } - }); - - const track = wrapper.find('.van-pull-refresh__track')[0]; - triggerTouch(track, 'touchstart', 0, 0); - triggerTouch(track, 'touchmove', 0, 10); - - wrapper.vm.$nextTick(() => { - expect(wrapper.find('.van-pull-refresh__text')[0].text()).to.equal('下拉即可刷新...'); - - triggerTouch(track, 'touchmove', 0, 30); - triggerTouch(track, 'touchmove', 0, 60); - triggerTouch(track, 'touchmove', 0, 100); - - wrapper.vm.$nextTick(() => { - expect(wrapper.find('.van-pull-refresh__text')[0].text()).to.equal('释放即可刷新...'); - - triggerTouch(track, 'touchend', 0, 100); - - wrapper.vm.$nextTick(() => { - expect(wrapper.find('.van-pull-refresh__loading span')[1].text()).to.equal('加载中...'); - done(); - }); - }); - }); - }); - - it('change loading status when pulling down', (done) => { - wrapper = mount(PullRefresh, { - propsData: { - value: false - } - }); - - const refreshSpy = sinon.spy(); - wrapper.vm.$on('refresh', refreshSpy); - - wrapper.vm.$on('input', value => { - wrapper.vm.value = value; - - setTimeout(() => { - wrapper.vm.value = false; - expect(refreshSpy.calledOnce).to.be.true; - setTimeout(() => { - expect(wrapper.vm.status).to.equal('normal'); - done(); - }, 0); - }, 30); - }); - - const track = wrapper.find('.van-pull-refresh__track')[0]; - triggerTouch(track, 'touchstart', 0, 0); - triggerTouch(track, 'touchmove', 0, 100); - triggerTouch(track, 'touchend', 0, 100); - - expect(wrapper.vm.value).to.be.true; - expect(wrapper.vm.status).to.equal('loading'); - - // ignore touch event when loading - triggerTouch(track, 'touchstart', 0, 0); - triggerTouch(track, 'touchmove', 0, 100); - triggerTouch(track, 'touchend', 0, 100); - }); - - it('pull a short distance', () => { - wrapper = mount(PullRefresh, { - propsData: { - value: false - } - }); - - const track = wrapper.find('.van-pull-refresh__track')[0]; - triggerTouch(track, 'touchstart', 0, 0); - triggerTouch(track, 'touchmove', 0, 10); - triggerTouch(track, 'touchend', 0, 10); - - expect(wrapper.vm.value).to.be.false; - expect(wrapper.vm.status).to.equal('normal'); - }); - - it('not in page top', () => { - wrapper = mount(PullRefresh, { - propsData: { - value: false - } - }); - - window.scrollTop = 100; - - const track = wrapper.find('.van-pull-refresh__track')[0]; - // ignore touch event when not at page top - triggerTouch(track, 'touchstart', 0, 0); - triggerTouch(track, 'touchmove', 0, 100); - triggerTouch(track, 'touchend', 0, 100); - expect(wrapper.vm.ceiling).to.be.false; - - window.scrollTop = 0; - triggerTouch(track, 'touchmove', 0, 100); - expect(wrapper.vm.ceiling).to.be.true; - }); - - it('horizontal direction', () => { - wrapper = mount(PullRefresh, { - propsData: { - value: false - } - }); - - const track = wrapper.find('.van-pull-refresh__track')[0]; - triggerTouch(track, 'touchstart', 0, 0); - triggerTouch(track, 'touchmove', 10, 0); - triggerTouch(track, 'touchend', 10, 0); - expect(wrapper.vm.direction).to.equal('horizontal'); - }); -}); diff --git a/test/specs/radio.spec.js b/test/specs/radio.spec.js deleted file mode 100644 index 8319901cb..000000000 --- a/test/specs/radio.spec.js +++ /dev/null @@ -1,115 +0,0 @@ -import { mount } from 'avoriaz'; -import Radio from 'packages/radio'; -import RadioTestComponent from '../components/radio'; - -describe('RadioGroup', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a radio-group', () => { - wrapper = mount(RadioTestComponent); - - expect(wrapper.hasClass('van-radio-group')).to.be.true; - - expect(wrapper.vNode.child.value).to.equal('1'); - expect(wrapper.vNode.child.disabled).to.be.false; - }); - - it('emit a change event', (done) => { - wrapper = mount(RadioTestComponent); - - expect(wrapper.vNode.child.value).to.equal('1'); - const eventStub = sinon.stub(wrapper.vNode.child, '$emit'); - - wrapper.setData({ - 'radio': '2' - }); - wrapper.update(); - wrapper.vm.$nextTick(() => { - expect(wrapper.vNode.child.value).to.equal('2'); - expect(eventStub.calledOnce).to.be.true; - expect(eventStub.calledWith('change')); - done(); - }); - }); - - it('click on unchecked radio', (done) => { - wrapper = mount(RadioTestComponent); - - const eventStub = sinon.stub(wrapper.vNode.child, '$emit'); - - const uncheckedRadioLabel = wrapper.find('.van-radio')[1].find('.van-radio__label')[0]; - uncheckedRadioLabel.trigger('click'); - - wrapper.update(); - wrapper.vm.$nextTick(() => { - expect(eventStub.calledOnce).to.be.true; - expect(eventStub.calledWith('input')); - done(); - }); - }); -}); - -describe('Radio', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a radio', () => { - wrapper = mount(Radio, { - propsData: { - value: '1', - name: '1', - disabled: false - } - }); - - expect(wrapper.hasClass('van-radio')).to.be.true; - expect(wrapper.hasClass('van-radio--disabled')).to.be.false; - expect(wrapper.instance().currentValue).to.equal('1'); - expect(wrapper.instance().isDisabled).to.be.false; - }); - - it('click on a radio', (done) => { - wrapper = mount(Radio, { - propsData: { - value: '1', - name: '1', - disabled: false - } - }); - - expect(wrapper.hasClass('van-radio')).to.be.true; - const eventStub = sinon.stub(wrapper.vm, '$emit'); - - wrapper.trigger('click'); - wrapper.update(); - wrapper.vm.$nextTick(() => { - expect(eventStub.calledOnce).to.be.true; - expect(eventStub.calledWith('click')); - done(); - }); - }); - - it('click on a disabled radio', () => { - wrapper = mount(Radio, { - propsData: { - value: '1', - name: '2', - disabled: true - } - }); - - expect(wrapper.hasClass('van-radio')).to.be.true; - expect(wrapper.hasClass('van-radio--disabled')).to.be.true; - expect(wrapper.instance().currentValue).to.equal('1'); - expect(wrapper.instance().isDisabled).to.be.true; - - wrapper.trigger('click'); - - expect(wrapper.instance().currentValue).to.equal('1'); - }); -}); diff --git a/test/specs/search.spec.js b/test/specs/search.spec.js deleted file mode 100644 index c8df4075a..000000000 --- a/test/specs/search.spec.js +++ /dev/null @@ -1,104 +0,0 @@ -import Search from 'packages/search'; -import { mount } from 'avoriaz'; - -describe('Search', () => { - let wrapper; - - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a search', () => { - wrapper = mount(Search); - - expect(wrapper.hasClass('van-search')).to.be.true; - }); - - it('create a search with searchText', (done) => { - wrapper = mount(Search, { - propsData: { - value: 'search text' - } - }); - - wrapper.vm.$nextTick(() => { - const input = wrapper.find('input')[0]; - expect(input.element.value === 'search text').to.be.true; - done(); - }); - }); - - it('emit input event', () => { - wrapper = mount(Search); - - const input = wrapper.find('input')[0]; - const eventStub = sinon.stub(wrapper.vm, '$emit'); - input.trigger('input', { target: { value: 'search' }}); - - expect(eventStub.calledOnce).to.be.true; - expect(eventStub.calledWith('input')).to.be.true; - }); - - it('handle clean click and refocus', (done) => { - wrapper = mount(Search); - - let value = 'test'; - wrapper.setProps({ value }); - - const focusSpy = sinon.spy(); - wrapper.vm.$on('focus', focusSpy); - - const inputSpy = sinon.spy(); - wrapper.vm.$on('input', val => { - value = val; - inputSpy(); - }); - - const input = wrapper.find('input')[0]; - input.trigger('focus'); - - const cleanBtn = wrapper.find('.van-field__icon')[0]; - cleanBtn.trigger('touchstart'); - - wrapper.vm.$nextTick(() => { - expect(inputSpy.calledOnce).to.be.true; - expect(value).to.equal(''); - done(); - }); - }); - - it('handle cancel click', (done) => { - wrapper = mount(Search); - - wrapper.setProps({ value: 'test', showAction: true }); - expect(wrapper.vm.value).to.be.equal('test'); - - const eventStub = sinon.stub(wrapper.vm, '$emit'); - - const cancelBtn = wrapper.find('.van-search__cancel')[0]; - cancelBtn.trigger('click'); - - wrapper.vm.$nextTick(() => { - expect(eventStub.calledTwice).to.be.true; - expect(eventStub.calledWith('input')); - expect(eventStub.calledWith('change')); - done(); - }); - }); - - it('emit a search event', () => { - wrapper = mount(Search); - - const searchSpy = sinon.spy(); - wrapper.vm.$on('search', searchSpy); - - const input = wrapper.find('input')[0]; - input.trigger('keypress.enter'); - expect(searchSpy.calledOnce).to.be.true; - - const keypressSpy = sinon.spy(); - wrapper.vm.$on('keypress', keypressSpy); - input.trigger('keypress.a'); - expect(keypressSpy.calledOnce).to.be.true; - }); -}); diff --git a/test/specs/sku.spec.js b/test/specs/sku.spec.js deleted file mode 100644 index d8d171db5..000000000 --- a/test/specs/sku.spec.js +++ /dev/null @@ -1,402 +0,0 @@ -import Sku from 'packages/sku'; -import Uploader from 'packages/uploader'; -import Toast from 'packages/toast'; -import { mount } from 'avoriaz'; -import { DOMChecker } from '../utils'; -import skuMockData from '../../docs/demos/mock/sku'; - -const data = skuMockData['zh-CN']; -const { skuHelper } = Sku; -const goods = data.goods_info; -const initialSku = { - s1: '30349', - s2: '1193' -}; -const repeat = (str, count) => { - let result = ''; - for (let i = 0; i < count; i++) { - result += str; - } - return result; -}; - -const File = function() { - this.name = 'test'; - this.size = 10000; -}; - -const mockFile = new File([], '/Users'); - -describe('Sku', (done) => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('default', (done) => { - wrapper = mount(Sku, { - attachToDocument: true, - propsData: { - value: true, - sku: data.sku, - goodsId: data.goods_id, - goods: goods, - resetStepperOnHide: true, - resetSelectedSkuOnHide: true - } - }); - - DOMChecker(wrapper, { - text: { - '.van-sku__goods-name': goods.title, - '.van-sku__price-num': '1.00' - }, - value: { - '.van-stepper__input': '1' - }, - src: { - '.van-sku-header__img-wrap img': 'https://img.yzcdn.cn/upload_files/2017/02/21/FjKTOxjVgnUuPmHJRdunvYky9OHP.jpg!100x100.jpg' - } - }); - - // 测试默认选中 - const selectedSku = skuHelper.getSelectedSkuValues(data.sku.tree, wrapper.vm.selectedSku); - expect(selectedSku[0].id).to.equal('30349'); - - // 测试sku图片 - const firstSku = wrapper.find('.van-sku-row__item')[0]; - firstSku.trigger('click'); - wrapper.vm.$nextTick(() => { - DOMChecker(wrapper, { - src: { - '.van-sku-header__img-wrap img': 'https://img.yzcdn.cn/upload_files/2017/03/16/Fs_OMbSFPa183sBwvG_94llUYiLa.jpeg?imageView2/2/w/100/h/100/q/75/format/jpg' - } - }); - - // 关闭sku弹层 - const closeCallback = sinon.spy(); - const closeIcon = wrapper.find('.van-sku__close-icon')[0]; - wrapper.vm.$on('sku-close', closeCallback); - closeIcon.trigger('click'); - wrapper.vm.$nextTick(() => { - expect(closeCallback.calledOnce).to.be.true; - done(); - }); - }); - }); - - it('should trigger an event or toast error when click buy and addCart', (done) => { - wrapper = mount(Sku, { - attachToDocument: true, - propsData: { - value: true, - sku: data.sku, - goodsId: data.goods_id, - goods: goods - } - }); - - const buyCallback = sinon.spy(); - const addCartCallback = sinon.spy(); - const buyBtn = wrapper.find('.van-button--bottom-action')[1]; - const addCartBtn = wrapper.find('.van-button--bottom-action')[0]; - wrapper.vm.$on('buy-clicked', buyCallback); - wrapper.vm.$on('add-cart', addCartCallback); - - // 未选择完整规格时,弹出toast提示 - buyBtn.trigger('click'); - wrapper.vm.$nextTick(() => { - const toastText = document.querySelector('.van-toast div'); - expect(toastText.textContent).to.equal('请选择完整的规格'); - expect(buyCallback.calledOnce).to.be.false; - - // 选择完整规格时,未填留言时,弹出toast提示。 - wrapper.find('.van-sku-row')[1].find('.van-sku-row__item')[0].trigger('click'); - buyBtn.trigger('click'); - wrapper.vm.$nextTick(() => { - expect(toastText.textContent).to.equal('请填写留言1'); - expect(buyCallback.calledOnce).to.be.false; - - // 触发buy-clicked事件 - const requiredMessage = wrapper.find('.van-cell--required .van-field__control')[0]; - requiredMessage.element.value = 'test'; - requiredMessage.trigger('input'); - wrapper.vm.$nextTick(() => { - buyBtn.trigger('click'); - addCartBtn.trigger('click'); - expect(buyCallback.calledOnce).to.be.true; - expect(addCartCallback.calledOnce).to.be.true; - done(); - }); - }); - }); - }); - - it('should modify current num or toast error when change step value', (done) => { - wrapper = mount(Sku, { - attachToDocument: true, - propsData: { - value: true, - sku: data.sku, - goodsId: data.goods_id, - goods: goods, - quota: data.quota, - quotaUsed: data.quota_used - } - }); - - // 点击减号 - const minusBtn = wrapper.find('.van-stepper__minus')[0]; - minusBtn.trigger('click'); - wrapper.vm.$nextTick(() => { - const toastText = document.querySelector('.van-toast div'); - expect(toastText.textContent).to.equal('至少选择一件'); - - // 手动修改购买数量 - const stepperInput = wrapper.find('.van-stepper__input')[0]; - stepperInput.element.value = 20; - stepperInput.trigger('input'); - wrapper.vm.$nextTick(() => { - expect(+stepperInput.element.value).to.equal(data.quota - data.quota_used); - - // 达到购买上限时,点击加号 - const plusBtn = wrapper.find('.van-stepper__plus')[0]; - plusBtn.trigger('click'); - wrapper.vm.$nextTick(() => { - expect(toastText.textContent).to.equal(`限购${data.quota}件`); - done(); - }); - }); - }); - }); - - it('should toast custom error when change step value', (done) => { - wrapper = mount(Sku, { - attachToDocument: true, - propsData: { - value: true, - sku: data.sku, - goodsId: data.goods_id, - goods: goods, - quota: data.quota, - quotaUsed: data.quota_used, - customStepperConfig: { - quotaText: '单次限购100件', - handleOverLimit: (data) => { - const { action, limitType, quota } = data; - - if (action === 'minus') { - Toast('至少选择一件商品'); - } else if (action === 'plus') { - if (limitType === 0) { - Toast(`限购${quota}件`); - } else { - Toast('库存不够了~~'); - } - } - } - } - } - }); - - // 点击减号 - const minusBtn = wrapper.find('.van-stepper__minus')[0]; - minusBtn.trigger('click'); - wrapper.vm.$nextTick(() => { - const toastText = document.querySelector('.van-toast div'); - expect(toastText.textContent).to.equal('至少选择一件商品'); - - // 手动修改购买数量 - const stepperInput = wrapper.find('.van-stepper__input')[0]; - stepperInput.element.value = 20; - stepperInput.trigger('input'); - wrapper.vm.$nextTick(() => { - expect(+stepperInput.element.value).to.equal(data.quota - data.quota_used); - - // 达到购买上限时,点击加号 - const plusBtn = wrapper.find('.van-stepper__plus')[0]; - plusBtn.trigger('click'); - wrapper.vm.$nextTick(() => { - expect(toastText.textContent).to.equal(`限购${data.quota}件`); - done(); - }); - }); - }); - }); - - it('should not render sku group when none_sku is true', (done) => { - const newSku = { - ...data.sku, - none_sku: true - }; - - wrapper = mount(Sku, { - attachToDocument: true, - propsData: { - value: false, - sku: newSku, - goodsId: data.goods_id, - goods: goods - } - }); - - wrapper.vm.value = true; - wrapper.vm.$nextTick(() => { - expect(wrapper.find('.van-sku-group-container').length).to.equal(0); - done(); - }); - }); - - it('should toast error when sku messages fail to pass validation', (done) => { - wrapper = mount(Sku, { - attachToDocument: true, - propsData: { - initialSku, - value: true, - sku: data.sku, - goodsId: data.goods_id, - goods: goods, - messageConfig: { - uploadImg: () => { - return new Promise((resolve) => { - setTimeout(() => resolve('https://img.yzcdn.cn/upload_files/2017/02/21/FjKTOxjVgnUuPmHJRdunvYky9OHP.jpg!100x100.jpg'), 1000); - }); - }, - uploadMaxSize: 3 - } - } - }); - - const buyBtn = wrapper.find('.van-button--bottom-action')[0]; - const skuMessages = wrapper.find('.van-sku-messages')[0]; - const inputs = skuMessages.find('input'); - const textarea = skuMessages.find('textarea')[0]; - const uploader = wrapper.find(Uploader)[0]; - // 修改留言内容 - inputs[0].element.value = 123; - // 测试身份证号 - inputs[1].element.value = 234; - inputs[0].trigger('input'); - inputs[1].trigger('input'); - // 测试图片 - uploader.vm.onChange({ target: { files: [mockFile] }}); - - wrapper.vm.$nextTick(() => { - // 点击购买 - buyBtn.trigger('click'); - - wrapper.vm.$nextTick(() => { - const toastText = document.querySelector('.van-toast div'); - expect(toastText.textContent).to.equal('请填写正确的身份证号码'); - - inputs[1].element.value = 330101198801012211; - // 测试textarea字数限制 - textarea.element.value = repeat('*', 201); - inputs[1].trigger('input'); - textarea.trigger('input'); - - wrapper.vm.$nextTick(() => { - buyBtn.trigger('click'); - - wrapper.vm.$nextTick(() => { - expect(toastText.textContent).to.equal('留言4 写的太多了,不要超过200字'); - - textarea.element.value = ''; - // 测试数字留言 - inputs[3].element.value = 'abc'; - textarea.trigger('input'); - inputs[3].trigger('input'); - - wrapper.vm.$nextTick(() => { - buyBtn.trigger('click'); - - wrapper.vm.$nextTick(() => { - expect(toastText.textContent).to.equal('请填写正确的数字格式留言'); - - inputs[3].element.value = 0; - inputs[4].element.value = 345; - inputs[3].trigger('input'); - inputs[4].trigger('input'); - - wrapper.vm.$nextTick(() => { - buyBtn.trigger('click'); - - wrapper.vm.$nextTick(() => { - expect(toastText.textContent).to.equal('请填写正确的邮箱'); - done(); - }); - }); - }); - }); - }); - }); - }); - }); - }); - - it('should toast error when there is no stock', (done) => { - /* eslint-disable */ - const newData = Object.assign({}, data); - newData.sku.stock_num = 0; - newData.sku.messages = []; - newData.sku.list.forEach((item) => { - item.stock_num = 0; - }); - /* eslint-enable */ - - wrapper = mount(Sku, { - attachToDocument: true, - propsData: { - initialSku, - value: true, - sku: newData.sku, - goodsId: newData.goods_id, - goods: goods - } - }); - - const buyBtn = wrapper.find('.van-button--bottom-action')[0]; - - wrapper.vm.$nextTick(() => { - buyBtn.trigger('click'); - wrapper.vm.$nextTick(() => { - const plusBtn = wrapper.find('.van-stepper__plus')[0]; - plusBtn.trigger('click'); - wrapper.vm.$nextTick(() => { - done(); - }); - }); - }); - }); - - it('should reset values when sku change', (done) => { - wrapper = mount(Sku, { - attachToDocument: true, - propsData: { - value: true, - sku: data.sku, - goodsId: data.goods_id, - goods: goods, - resetStepperOnHide: true, - resetSelectedSkuOnHide: true - } - }); - - const newSku = { - ...data.sku, - tree: [], - list: [], - messages: [], - none_sku: true - }; - - wrapper.vm.sku = newSku; - const skuMessages = wrapper.find(Sku.SkuMessages)[0]; - - wrapper.vm.$nextTick(() => { - expect(wrapper.vm.selectedSku).to.be.empty; - expect(skuMessages.vm.messageValues).to.be.empty; - done(); - }); - }); -}); diff --git a/test/specs/slider.spec.js b/test/specs/slider.spec.js deleted file mode 100644 index 62e3fe0fb..000000000 --- a/test/specs/slider.spec.js +++ /dev/null @@ -1,90 +0,0 @@ -import Slider from 'packages/slider'; -import { mount } from 'avoriaz'; -import { triggerTouch } from '../utils'; - -describe('Slider', () => { - let wrapper; - - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a simple slider', () => { - wrapper = mount(Slider, { - propsData: { - value: 50, - disabled: true - } - }); - - expect(wrapper.hasClass('van-slider')).to.be.true; - expect(wrapper.find('.van-slider__bar').length).to.equal(1); - expect(wrapper.vm.value).to.equal(50); - expect(wrapper.hasClass('van-slider--disabled')).to.equal(true); - - wrapper.setProps({ - value: 100 - }); - wrapper.update(); - - expect(wrapper.vm.value).to.equal(100); - }); - - it('test click bar', () => { - wrapper = mount(Slider, { - propsData: { - disabled: true, - value: 50 - } - }); - - const eventStub = sinon.stub(wrapper.vm, '$emit'); - const $bar = wrapper.find('.van-slider')[0]; - $bar.trigger('click'); - const button = wrapper.find('.van-slider__button')[0]; - triggerTouch(button, 'touchstart', 0, 0); - expect(wrapper.vm.startX).to.equal(undefined); - - triggerTouch(button, 'touchmove', 50, 0); - expect(wrapper.vm.offsetX).to.equal(undefined); - - triggerTouch(button, 'touchend', 50, 0); - expect(wrapper.vm.offsetX).to.equal(undefined); - - expect(eventStub.called).to.equal(false); - - wrapper.setData({ - disabled: false - }); - wrapper.update(); - $bar.trigger('click'); - - expect(wrapper.vm.disabled).to.equal(false); - expect(eventStub.called).to.equal(true); - }); - - it('drag button', () => { - wrapper = mount(Slider, { - propsData: { - value: 50 - } - }); - - const button = wrapper.find('.van-slider__button')[0]; - triggerTouch(button, 'touchstart', 0, 0); - expect(wrapper.vm.startX).to.equal(0); - - triggerTouch(button, 'touchmove', 50, 0); - expect(wrapper.vm.offsetX).to.equal(50); - - triggerTouch(button, 'touchend', 50, 0); - expect(wrapper.vm.offsetX).to.equal(50); - - wrapper.setData({ - disabled: true - }); - - triggerTouch(button, 'touchstart', 0, 0); - expect(wrapper.vm.startX).to.equal(0); - }); -}); diff --git a/test/specs/stepper.spec.js b/test/specs/stepper.spec.js deleted file mode 100644 index 2c67b50f8..000000000 --- a/test/specs/stepper.spec.js +++ /dev/null @@ -1,152 +0,0 @@ -import Stepper from 'packages/stepper'; -import { mount } from 'avoriaz'; - -describe('Stepper', () => { - let wrapper; - - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a stepper', () => { - wrapper = mount(Stepper, { - propsData: { - defaultValue: 1 - } - }); - - expect(wrapper.hasClass('van-stepper')).to.be.true; - expect(wrapper.data().currentValue).to.equal(1); - - const plusButton = wrapper.find('.van-stepper__plus')[0]; - plusButton.trigger('click'); - - expect(wrapper.data().currentValue).to.equal(2); - - const minusButton = wrapper.find('.van-stepper__minus')[0]; - minusButton.trigger('click'); - expect(wrapper.data().currentValue).to.equal(1); - }); - - it('create a disabled stepper', (done) => { - wrapper = mount(Stepper, { - propsData: { - disabled: true - } - }); - - expect(wrapper.hasClass('van-stepper')).to.be.true; - const minusButton = wrapper.find('.van-stepper__minus')[0]; - expect(minusButton.hasClass('van-stepper__minus--disabled')).to.be.true; - - const eventStub = sinon.stub(wrapper.vm, '$emit'); - minusButton.trigger('click'); - - wrapper.update(); - wrapper.vm.$nextTick(() => { - expect(eventStub.calledWith('overlimit')); - done(); - }); - - const plusButton = wrapper.find('.van-stepper__plus')[0]; - expect(plusButton.hasClass('van-stepper__plus--disabled')).to.be.true; - - plusButton.trigger('click'); - - wrapper.update(); - wrapper.vm.$nextTick(() => { - expect(eventStub.calledWith('overlimit')); - done(); - }); - }); - - it('only disable stepper input', () => { - wrapper = mount(Stepper, { - propsData: { - disableInput: true - } - }); - - const input = wrapper.find('.van-stepper__input')[0]; - expect(input.hasAttribute('disabled', 'disabled')).to.be.true; - }); - - it('update stepper value use v-model', (done) => { - wrapper = mount(Stepper, { - propsData: { - value: 1 - } - }); - - expect(wrapper.hasClass('van-stepper')).to.be.true; - - wrapper.vm.value = 2; - wrapper.update(); - wrapper.vm.$nextTick(() => { - expect(wrapper.vm.currentValue).to.equal(2); - done(); - }); - }); - - it('correct value when value is not correct', (done) => { - wrapper = mount(Stepper, { - propsData: { - value: 50, - max: 30 - } - }); - - expect(wrapper.hasClass('van-stepper')).to.be.true; - expect(wrapper.vm.currentValue).to.equal(30); - const eventStub = sinon.stub(wrapper.vm, '$emit'); - - wrapper.vm.value = 30; - wrapper.update(); - wrapper.vm.$nextTick(() => { - expect(wrapper.vm.currentValue).to.equal(30); - expect(eventStub.calledWith('input')); - - // value设置非数字时,则使用设置的最小值(默认1) - wrapper.vm.value = 'abc'; - wrapper.update(); - wrapper.vm.$nextTick(() => { - expect(wrapper.vm.currentValue).to.equal(1); - done(); - }); - }); - }); - - it('handle when input change', (done) => { - wrapper = mount(Stepper, { - propsData: { - value: 1 - } - }); - - const input = wrapper.find('.van-stepper__input')[0]; - input.element.value = 2; - input.trigger('input'); - - wrapper.update(); - wrapper.vm.$nextTick(() => { - expect(wrapper.data().currentValue).to.equal(2); - done(); - }); - }); - - it('should not fire any event on props changed', (done) => { - wrapper = mount(Stepper, { - propsData: { - value: 1 - } - }); - const eventStub = sinon.stub(wrapper.vm, '$emit'); - - wrapper.vm.value = 2; - wrapper.update(); - wrapper.vm.$nextTick(() => { - expect(eventStub.called).to.be.false; - done(); - }); - }); -}); diff --git a/test/specs/steps.spec.js b/test/specs/steps.spec.js deleted file mode 100644 index 9416e8a21..000000000 --- a/test/specs/steps.spec.js +++ /dev/null @@ -1,41 +0,0 @@ -import Steps from 'packages/steps'; -import { mount } from 'avoriaz'; -import StepsTestComponent from '../components/steps'; - -describe('Steps', () => { - let wrapper; - - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a steps', () => { - wrapper = mount(Steps); - - expect(wrapper.hasClass('van-steps')).to.be.true; - expect(wrapper.data().steps.length).to.equal(0); - }); - - it('create a steps with step', () => { - wrapper = mount(StepsTestComponent); - - const finishStep = wrapper.find('.van-step')[0]; - expect(finishStep.hasClass('van-step--finish')).to.be.true; - expect(finishStep.hasClass('van-step--horizontal')).to.be.true; - - const proccessStep = wrapper.find('.van-step')[1]; - expect(proccessStep.hasClass('van-step--process')).to.be.true; - }); - - it('create a vertical step', () => { - wrapper = mount(Steps, { - propsData: { - direction: 'vertical' - } - }); - - expect(wrapper.hasClass('van-steps')).to.be.true; - expect(wrapper.hasClass('van-steps--vertical')).to.be.true; - expect(wrapper.data().steps.length).to.equal(0); - }); -}); diff --git a/test/specs/submit-bar.spec.js b/test/specs/submit-bar.spec.js deleted file mode 100644 index 15c514992..000000000 --- a/test/specs/submit-bar.spec.js +++ /dev/null @@ -1,100 +0,0 @@ -import SubmitBar from 'packages/submit-bar'; -import { mount } from 'avoriaz'; -import { DOMChecker } from '../utils'; - -describe('SubmitBar', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('default', () => { - const props = { - price: 3050, - buttonText: '提交订单', - tip: '您的收货地址不支持同城送, 我们已为您推荐快递' - }; - - wrapper = mount(SubmitBar, { - propsData: props - }); - - DOMChecker(wrapper, { - text: { - '.van-button__text': props.buttonText, - '.van-submit-bar__price-integer': '¥30.', - '.van-submit-bar__price-decimal': '50', - '.van-submit-bar__tip': props.tip - } - }); - }); - - it('no tip', () => { - wrapper = mount(SubmitBar, { - propsData: { - price: 3005, - buttonText: '提交订单', - buttonType: 'default' - } - }); - - DOMChecker(wrapper, { - text: { - '.van-button__text': '提交订单', - '.van-submit-bar__price-integer': '¥30.', - '.van-submit-bar__price-decimal': '05', - '.van-submit-bar__tip': '' - } - }); - }); - - it('handle submit', () => { - wrapper = mount(SubmitBar, { - propsData: { - price: 3005, - buttonText: '提交订单' - } - }); - - const submitSpyFunc = sinon.spy(); - wrapper.vm.$on('submit', submitSpyFunc); - wrapper.find('.van-button')[0].trigger('click'); - setTimeout(() => { - expect(submitSpyFunc.calledOnce).to.be.true; - }, 300); - }); - - it('can not submit when disabled', (done) => { - wrapper = mount(SubmitBar, { - propsData: { - disabled: true, - buttonText: '提交订单' - } - }); - - const submitSpyFunc = sinon.spy(); - wrapper.vm.$on('submit', submitSpyFunc); - wrapper.find('.van-button')[0].trigger('click'); - setTimeout(() => { - expect(submitSpyFunc.calledOnce).to.be.false; - done(); - }, 300); - }); - - it('can not submit when loading', (done) => { - wrapper = mount(SubmitBar, { - propsData: { - loading: true, - buttonText: '提交订单' - } - }); - - const submitSpyFunc = sinon.spy(); - wrapper.vm.$on('submit', submitSpyFunc); - wrapper.find('.van-button')[0].trigger('click'); - setTimeout(() => { - expect(submitSpyFunc.calledOnce).to.be.false; - done(); - }, 300); - }); -}); diff --git a/test/specs/switch-cell.spec.js b/test/specs/switch-cell.spec.js deleted file mode 100644 index ba7426272..000000000 --- a/test/specs/switch-cell.spec.js +++ /dev/null @@ -1,95 +0,0 @@ -import SwitchCell from 'packages/switch-cell'; -import { mount } from 'avoriaz'; -import { DOMChecker } from '../utils'; - -describe('SwitchCell', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('default', () => { - wrapper = mount(SwitchCell, { - attachToDocument: true - }); - - DOMChecker(wrapper, { - count: { - '.van-switch--on': 0, - '.van-switch--disabled': 0 - } - }); - }); - - it('set title', () => { - wrapper = mount(SwitchCell, { - attachToDocument: true, - propsData: { - title: '测试标题' - } - }); - - DOMChecker(wrapper, { - text: { - '.van-cell__title span': '测试标题' - }, - count: { - '.van-switch--on': 0, - '.van-switch--disabled': 0 - } - }); - }); - - it('checked', () => { - wrapper = mount(SwitchCell, { - attachToDocument: true, - propsData: { - value: true - } - }); - - DOMChecker(wrapper, { - count: { - '.van-switch--on': 1, - '.van-switch--disabled': 0 - } - }); - }); - - it('disabled', () => { - wrapper = mount(SwitchCell, { - attachToDocument: true, - propsData: { - disabled: true - } - }); - - DOMChecker(wrapper, { - count: { - '.van-switch--on': 0, - '.van-switch--disabled': 1 - } - }); - }); - - it('listen to change event', (done) => { - wrapper = mount(SwitchCell, { - attachToDocument: true, - propsData: { - value: false - } - }); - - wrapper.vm.$on('input', (value) => { - wrapper.vm.value = value; - }); - - wrapper.vm.$on('change', (value) => { - expect(value).to.be.true; - done(); - }); - - const switchEl = wrapper.find('.van-switch')[0]; - switchEl.trigger('click'); - }); -}); diff --git a/test/specs/switch.spec.js b/test/specs/switch.spec.js deleted file mode 100644 index e8bf85af4..000000000 --- a/test/specs/switch.spec.js +++ /dev/null @@ -1,87 +0,0 @@ -import Switch from 'packages/switch'; -import VanLoading from 'packages/loading'; -import { mount } from 'avoriaz'; - -describe('Switch', () => { - let wrapper; - - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create on switch', () => { - wrapper = mount(Switch, { - propsData: { - value: true - } - }); - - expect(wrapper.hasClass('van-switch')).to.be.true; - expect(wrapper.hasClass('van-switch--on')).to.be.true; - }); - - it('create loading switch', () => { - wrapper = mount(Switch, { - propsData: { - loading: true - } - }); - const loading = wrapper.find(VanLoading)[0]; - - expect(wrapper.hasClass('van-switch')).to.be.true; - expect(loading.isVueComponent).to.be.true; - }); - - it('loading switch should be unclickable', () => { - wrapper = mount(Switch, { - propsData: { - loading: true, - value: true - } - }); - - expect(wrapper.hasClass('van-switch--on')).to.be.true; - wrapper.trigger('click'); - expect(wrapper.hasClass('van-switch--on')).to.be.true; - }); - - it('create disabled switch', () => { - wrapper = mount(Switch, { - propsData: { - disabled: true - } - }); - - expect(wrapper.hasClass('van-switch')).to.be.true; - expect(wrapper.hasClass('van-switch--disabled')).to.be.true; - }); - - it('disabled switch should be unclickable', () => { - wrapper = mount(Switch, { - propsData: { - disabled: true, - value: false - } - }); - - expect(wrapper.hasClass('van-switch--on')).to.be.false; - wrapper.trigger('click'); - expect(wrapper.hasClass('van-switch--on')).to.be.false; - }); - - it('click should toggle the switch', () => { - wrapper = mount(Switch, { - propsData: { - value: false - } - }); - - wrapper.vm.$on('input', val => { - wrapper.vm.value = val; - }); - - expect(wrapper.hasClass('van-switch--on')).to.be.false; - wrapper.trigger('click'); - expect(wrapper.hasClass('van-switch--on')).to.be.true; - }); -}); diff --git a/test/specs/tabbar.spec.js b/test/specs/tabbar.spec.js deleted file mode 100644 index 86add5d3f..000000000 --- a/test/specs/tabbar.spec.js +++ /dev/null @@ -1,23 +0,0 @@ -import TabbarExample from '../components/tabbar'; -import { mount } from 'avoriaz'; - -describe('Progress', () => { - let wrapper; - - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('Tabbar with four items', (done) => { - wrapper = mount(TabbarExample); - - wrapper.vm.$nextTick(() => { - expect(wrapper.find('.van-tabbar-item').length).to.equal(4); - - wrapper.find('.van-tabbar-item')[3].element.click(); - expect(wrapper.vm.active).to.equal(3); - expect(wrapper.vm.changeRecord).to.equal(3); - done(); - }); - }); -}); diff --git a/test/specs/tabs.spec.js b/test/specs/tabs.spec.js deleted file mode 100644 index 98c320e21..000000000 --- a/test/specs/tabs.spec.js +++ /dev/null @@ -1,166 +0,0 @@ -import Tabs from 'packages/tabs'; -import { mount } from 'avoriaz'; -import TabsTestComponent from '../components/tabs'; -import MoreTabsTestComponent from '../components/more-tabs'; -import { triggerTouch } from '../utils'; - -describe('Tabs', () => { - let wrapper; - - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create a empty card tabs', () => { - wrapper = mount(Tabs, { - propsData: { - type: 'card' - } - }); - - expect(wrapper.hasClass('van-tabs')).to.be.true; - expect(wrapper.hasClass('van-tabs--card')).to.be.true; - }); - - it('create a tabs with four tab', (done) => { - wrapper = mount(TabsTestComponent); - - expect(wrapper.hasClass('van-tabs')).to.be.true; - expect(wrapper.hasClass('van-tabs--line')).to.be.true; - - const tabsContainer = wrapper.find('.van-tabs')[0]; - expect(tabsContainer.vNode.child.curActive).to.equal(0); - - wrapper.vm.active = 1; - wrapper.update(); - wrapper.vm.$nextTick(() => { - expect(tabsContainer.vNode.child.curActive).to.equal(1); - done(); - }); - }); - - it('listen click event', (done) => { - wrapper = mount(TabsTestComponent, { - attachToDocument: true - }); - - const clickSpy = sinon.spy(); - wrapper.vm.$on('click', clickSpy); - - wrapper.vm.$nextTick(() => { - const nTab = wrapper.find('.van-tab')[0]; - nTab.trigger('click'); - expect(clickSpy.calledOnce).to.be.true; - done(); - }); - }); - - it('listen click disable event', (done) => { - wrapper = mount(TabsTestComponent, { - attachToDocument: true - }); - - const clickDisabledSpy = sinon.spy(); - wrapper.vm.$on('disabled', clickDisabledSpy); - - wrapper.vm.$nextTick(() => { - const nTab = wrapper.find('.van-tab')[2]; - nTab.trigger('click'); - expect(clickDisabledSpy.calledOnce).to.be.true; - done(); - }); - }); - - it('check animation duration', () => { - wrapper = mount(TabsTestComponent); - - expect(wrapper.style.transitionDuration != '').to.be.true; - }); - - it('create a tabs greater then 4', (done) => { - wrapper = mount(MoreTabsTestComponent, { - attachToDocument: true - }); - - wrapper.vm.$nextTick(() => { - const nTab = wrapper.find('.van-tab')[4]; - nTab.trigger('click'); - done(); - }); - }); - - it('create a tabs greater then 4 then click last tab', (done) => { - wrapper = mount(MoreTabsTestComponent, { - attachToDocument: true, - propsData: { - active: 7 - } - }); - - wrapper.vm.$nextTick(() => { - const nTab = wrapper.find('.van-tab')[6]; - nTab.trigger('click'); - done(); - }); - }); - - it('watch tab props changes', (done) => { - wrapper = mount(TabsTestComponent); - wrapper.vm.firstTabTitle = '测试标题'; - wrapper.vm.firstTabDisabled = true; - - wrapper.vm.$nextTick(() => { - expect(wrapper.find('.van-tab')[0].text().replace(/\n|\s/g, '')).to.equal('测试标题'); - done(); - }); - }); - - it('create a sticky tabs', (done) => { - wrapper = mount(TabsTestComponent, { - attachToDocument: true, - propsData: { - sticky: true - } - }); - - wrapper.vm.sticky = false; - - setTimeout(() => { - expect(wrapper.vm.$children[0].position).to.equal('content-top'); - done(); - }, 30); - }); - - it('create a swipeable tabs', (done) => { - wrapper = mount(TabsTestComponent, { - attachToDocument: true, - propsData: { - swipeable: true - } - }); - - const tabsContainer = wrapper.find('.van-tabs')[0]; - const tabContent = wrapper.find('.van-tabs__content')[0]; - - expect(tabsContainer.vNode.child.curActive).to.equal(0); - - wrapper.vm.$nextTick(() => { - triggerTouch(tabContent, 'touchstart', 0, 0); - triggerTouch(tabContent, 'touchmove', -100, 0); - triggerTouch(tabContent, 'touchend', 0, 0); - - setTimeout(() => { - expect(tabsContainer.vNode.child.curActive).to.equal(1); - - triggerTouch(tabContent, 'touchstart', 0, 0); - triggerTouch(tabContent, 'touchmove', 100, 0); - triggerTouch(tabContent, 'touchend', 0, 0); - - setTimeout(() => { - expect(tabsContainer.vNode.child.curActive).to.equal(0); - done(); - }, 500); - }, 500); - }) - }); -}); diff --git a/test/specs/tag.spec.js b/test/specs/tag.spec.js deleted file mode 100644 index 8dc6ca4e0..000000000 --- a/test/specs/tag.spec.js +++ /dev/null @@ -1,21 +0,0 @@ -import Tag from 'packages/tag'; -import { mount } from 'avoriaz'; - -describe('Tag', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create without typeProps', () => { - wrapper = mount(Tag); - }); - - it('create with right typeProps', () => { - wrapper = mount(Tag, { - propsData: { - type: 'primary' - } - }); - }); -}); diff --git a/test/specs/toast.spec.js b/test/specs/toast.spec.js deleted file mode 100644 index d03b5ba38..000000000 --- a/test/specs/toast.spec.js +++ /dev/null @@ -1,141 +0,0 @@ -import Vue from 'vue'; -import Toast from 'packages/toast'; - -describe('Toast', () => { - afterEach(() => { - Toast.clear(true); - }); - - it('create a empty toast', () => { - Toast(); - expect(document.querySelector('.van-toast')).to.exist; - }); - - it('create a toast', () => { - const toast = Toast('toast'); - - expect(document.querySelector('.van-toast')).to.exist; - expect(toast.message).to.equal('toast'); - expect(toast.type).to.equal('text'); - expect(toast.displayStyle).to.equal('text'); - expect(typeof toast.timer).to.equal('number'); - }); - - it('create a loading toast', () => { - const toast = Toast.loading(); - - expect(document.querySelector('.van-toast')).to.exist; - expect(toast.type).to.equal('loading'); - }); - - it('create a options loading toast', () => { - const toast = Toast.loading({ - message: 'toast' - }); - - expect(document.querySelector('.van-toast')).to.exist; - expect(toast.message).to.equal('toast'); - expect(toast.type).to.equal('loading'); - }); - - it('create a success toast', () => { - const toast = Toast.success('success'); - - expect(document.querySelector('.van-toast')).to.exist; - expect(toast.displayStyle).to.equal('default'); - expect(toast.type).to.equal('success'); - }); - - it('create a options success toast', () => { - const toast = Toast.success({ - message: 'toast' - }); - - expect(document.querySelector('.van-toast')).to.exist; - expect(toast.message).to.equal('toast'); - expect(toast.type).to.equal('success'); - }); - - it('create a fail toast', () => { - const toast = Toast.fail('fail'); - - expect(document.querySelector('.van-toast')).to.exist; - expect(toast.displayStyle).to.equal('default'); - expect(toast.type).to.equal('fail'); - }); - - it('create a options fail toast', () => { - const toast = Toast.fail({ - message: 'toast' - }); - - expect(document.querySelector('.van-toast')).to.exist; - expect(toast.message).to.equal('toast'); - expect(toast.type).to.equal('fail'); - }); - - it('create a forbidClick toast', (done) => { - Toast({ - message: 'test', - forbidClick: true - }); - - expect(document.querySelector('.van-toast')).to.exist; - setTimeout(() => { - expect(document.querySelector('.van-modal')).to.exist; - done(); - }, 50); - }); - - it('toast disappeared after duration', (done) => { - const toast = Toast({ - message: 'toast', - duration: 10 - }); - - setTimeout(() => { - expect(toast.$el.style.display === 'none').to.be.true; - Toast.clear(); - done(); - }, 500); - }); - - it('toast duration 0', () => { - Toast.allowMultiple(); - const toast = Toast({ - message: 'toast', - duration: 0 - }); - expect(toast.timer).to.equal(undefined); - Toast.allowMultiple(false); - }); - - it('multiple toast', () => { - Toast.allowMultiple(); - Toast.clear(true); - const toast1 = Toast.success('1'); - const toast2 = Toast.success('2'); - Toast.clear(); - expect(toast1.value).to.be.false; - expect(toast2.value).to.be.true; - Toast.clear(); - Toast.clear(); - expect(toast2.value).to.be.false; - Toast.allowMultiple(false); - }); - - it('set default options', () => { - Toast.setDefaultOptions({ duration: 1000 }); - const toast1 = Toast(1); - expect(toast1.duration).to.equal(1000); - - Toast.resetDefaultOptions(); - const toast2 = Toast(1); - expect(toast2.duration).to.equal(3000); - }); - - it('register component', () => { - Vue.use(Toast); - expect(!!Vue.component('van-toast')).to.be.true; - }); -}); diff --git a/test/specs/tree-select.spec.js b/test/specs/tree-select.spec.js deleted file mode 100644 index 8ee3bebf6..000000000 --- a/test/specs/tree-select.spec.js +++ /dev/null @@ -1,68 +0,0 @@ -import TreeSelect from 'packages/tree-select'; -import { mount } from 'avoriaz'; - -describe('TreeSelect', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create an empty tree-select', () => { - wrapper = mount(TreeSelect); - expect(wrapper.hasStyle('height', '0px')).to.be.true; - }); - - it('create a tree-select correctly', () => { - wrapper = mount(TreeSelect, { - propsData: { - items: [{ - text: 'A', - children: [{ - text: 'Cc', - id: 123 - }] - }], - maxHeight: 200 - } - }); - expect(wrapper.hasClass('van-tree-select')).to.be.true; - expect(wrapper.hasStyle('height', '44px')).to.be.true; - expect(wrapper.vm.maxHeight).to.equal(200); - }); - - it('interact with this component', () => { - wrapper = mount(TreeSelect, { - propsData: { - items: [{ - text: 'A', - children: [{ - text: 'Cc', - id: 123 - }, { - text: 'Bb', - id: 234 - }] - }, { - text: 'B', - children: [{ - text: 'Nmi', - id: 345 - }] - }], - maxHeight: 220 - } - }); - wrapper.vm.$on('navclick', index => { - wrapper.vm.mainActiveIndex = index; - }); - wrapper.vm.$on('itemclick', item => { - wrapper.vm.activeId = item.id; - }); - const secondNav = wrapper.find('.van-tree-select__nitem')[1]; - secondNav.trigger('click'); - expect(wrapper.vm.mainActiveIndex).to.equal(1); - const target = wrapper.find('.van-tree-select__item')[0]; - target.trigger('click'); - expect(wrapper.vm.activeId).to.equal(345); - }); -}); diff --git a/test/specs/uploader.spec.js b/test/specs/uploader.spec.js deleted file mode 100644 index 6d3648a49..000000000 --- a/test/specs/uploader.spec.js +++ /dev/null @@ -1,137 +0,0 @@ -import Uploader from 'packages/uploader'; -import { mount } from 'avoriaz'; - -window.File = function() { - this.name = 'test'; - this.size = 10000; -}; - -window.FileReader = function() { - this.readAsDataURL = this.readAsText = function() { - this.onload && this.onload({ - target: { - result: 'test' - } - }); - }; -}; - -const mockFile = new File([], '/Users'); - -describe('Uploader', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('disabled', () => { - const afterRead = sinon.spy(); - wrapper = mount(Uploader, { - propsData: { - disabled: true, - afterRead - } - }); - - expect(wrapper.contains('input')).to.equal(true); - wrapper.vm.onChange({ target: { files: [] }}); - expect(afterRead.calledOnce).to.be.false; - }); - - it('before read', () => { - const afterRead = sinon.spy(); - wrapper = mount(Uploader, { - propsData: { - beforeRead: () => false, - afterRead - } - }); - - wrapper.vm.onChange({ target: { files: [mockFile] }}); - expect(afterRead.calledOnce).to.be.false; - }); - - it('read text', done => { - wrapper = mount(Uploader, { - propsData: { - resultType: 'text', - afterRead: (file) => { - expect(file.content).to.equal('test'); - done(); - } - } - }); - - wrapper.vm.onChange({ target: { files: [mockFile] }}); - }); - - it('read dataUrl', done => { - wrapper = mount(Uploader, { - propsData: { - afterRead: (file) => { - expect(file.content).to.equal('test'); - done(); - } - } - }); - - wrapper.vm.onChange({ target: { files: [mockFile] }}); - }); - - it('unknown resultType', () => { - const afterRead = sinon.spy(); - wrapper = mount(Uploader, { - propsData: { - resultType: 'xxxx', - afterRead - } - }); - wrapper.vm.onChange({ target: { files: [mockFile] }}); - expect(afterRead.calledOnce).to.be.false; - }); - - it('read multiple files', done => { - wrapper = mount(Uploader, { - propsData: { - afterRead: (file) => { - expect(file.length).to.equal(2); - done(); - } - } - }); - - wrapper.vm.onChange({ target: { files: [mockFile, mockFile] }}); - }); - - it('size overlimit', done => { - const spy = sinon.spy(); - wrapper = mount(Uploader, { - propsData: { - maxSize: 1 - } - }); - wrapper.vm.$on('oversize', spy); - wrapper.vm.onChange({ target: { files: [mockFile] }}); - - setTimeout(() => { - expect(spy.calledOnce).to.be.true; - done(); - }, 50); - }); - - it('multi file size overlimit', done => { - const spy = sinon.spy(); - wrapper = mount(Uploader, { - propsData: { - maxSize: 1 - } - }); - wrapper.vm.$on('oversize', spy); - wrapper.vm.onChange({ target: { files: [mockFile, mockFile] }}); - - setTimeout(() => { - expect(spy.calledOnce).to.be.true; - done(); - }, 50); - }); -}); diff --git a/test/specs/utils.spec.js b/test/specs/utils.spec.js deleted file mode 100644 index a029e2fa0..000000000 --- a/test/specs/utils.spec.js +++ /dev/null @@ -1,57 +0,0 @@ -import deepClone from 'packages/utils/deep-clone'; -import { isAndroid, isDef, camelize, get } from 'packages/utils'; -import { raf, cancel } from 'packages/utils/raf'; - -describe('Utils', () => { - it('deepClone', () => { - const a = { foo: 0 }; - const b = { foo: 0, bar: 1 }; - const fn = () => {}; - const arr = [a, b]; - expect(deepClone(a)).to.eql(a); - expect(deepClone(b)).to.eql(b); - expect(deepClone(fn)).to.eql(fn); - expect(deepClone(arr)).to.eql(arr); - expect(deepClone(undefined)).to.eql(undefined); - expect(deepClone(1)).to.eql(1); - }); - - it('isDef', () => { - expect(isDef(null)).to.be.false; - expect(isDef(undefined)).to.be.false; - expect(isDef(1)).to.be.true; - expect(isDef('1')).to.be.true; - expect(isDef({})).to.be.true; - expect(isDef(() => {})).to.be.true; - }); - - it('camelize', () => { - expect(camelize('ab')).to.equal('ab'); - expect(camelize('a-b')).to.equal('aB'); - expect(camelize('a-b-c-d')).to.equal('aBCD'); - expect(camelize('a-b-')).to.equal('aB-'); - expect(camelize('-a-b')).to.equal('AB'); - expect(camelize('-')).to.equal('-'); - }); - - it('get', () => { - expect(get({ a: 1 }, 'a')).to.equal(1); - expect(get({ a: { b: 2 }}, 'a.b')).to.equal(2); - expect(get({ a: { b: 2 }}, 'a.b.c')).to.equal(''); - }); - - it('isAndroid', () => { - expect(isAndroid()).to.be.false; - }); - - it('raf', (done) => { - const spy = sinon.spy(); - raf(spy); - - setTimeout(() => { - expect(spy.called).to.be.true; - cancel(1); - done(); - }, 50); - }); -}); diff --git a/test/specs/waterfall.spec.js b/test/specs/waterfall.spec.js deleted file mode 100644 index 5c0295936..000000000 --- a/test/specs/waterfall.spec.js +++ /dev/null @@ -1,91 +0,0 @@ -import Waterfall from '../components/waterfall/waterfall'; -import HiddenWaterfall from '../components/waterfall/waterfall-hide'; -import { mount } from 'avoriaz'; - -describe('Waterfall', () => { - let wrapper; - afterEach(() => { - wrapper && wrapper.destroy(); - }); - - it('create', (done) => { - const waterfallLowerSpy = sinon.spy(); - wrapper = mount(Waterfall, { - attachToDocument: true, - propsData: { - disabled: false, - list: [], - onWaterfallLower: waterfallLowerSpy - } - }); - - setTimeout(() => { - expect(waterfallLowerSpy.called).to.be.true; - done(); - }, 500); - }); - - it('test waterfall lower function', (done) => { - const waterfallLowerSpy = sinon.spy(function() { - wrapper.vm.list = wrapper.vm.list.concat([{ id: 1 }, { id: 2 }, { id: 3 }]); - wrapper.vm.disabled = true; - }); - wrapper = mount(Waterfall, { - attachToDocument: true, - propsData: { - disabled: false, - list: [{ id: 10 }], - onWaterfallLower: waterfallLowerSpy - } - }); - - setTimeout(() => { - const item = wrapper.find('.waterfall-item'); - expect(waterfallLowerSpy.calledOnce).to.be.true; - expect(item.length).to.equal(4); - expect(item[item.length - 1].text()).to.equal('3'); - done(); - }, 500); - }); - - it('test waterfall upper function', (done) => { - const waterfallUpperSpy = sinon.spy(function() { - wrapper.vm.list.unshift({ id: 1 }, { id: 2 }, { id: 3 }); - wrapper.vm.disabled = true; - }); - wrapper = mount(Waterfall, { - attachToDocument: true, - propsData: { - disabled: false, - list: [{ id: 10 }], - onWaterfallUpper: waterfallUpperSpy - } - }); - - setTimeout(() => { - const item = wrapper.find('.waterfall-item'); - expect(waterfallUpperSpy.calledOnce).to.be.true; - expect(item.length).to.equal(4); - expect(item[0].text()).to.equal('1'); - done(); - }, 500); - }); - - it('test waterfall function after hide', (done) => { - const waterfallLowerSpy = sinon.spy(); - wrapper = mount(HiddenWaterfall, { - attachToDocument: true, - propsData: { - show: false, - disabled: false, - list: [{ id: 10 }], - onWaterfallLower: waterfallLowerSpy - } - }); - - setTimeout(() => { - expect(waterfallLowerSpy.called).to.be.false; - done(); - }, 500); - }); -}); diff --git a/test/utils.js b/test/utils.js deleted file mode 100644 index c4e85b7ed..000000000 --- a/test/utils.js +++ /dev/null @@ -1,84 +0,0 @@ -/** - * 按照一定的规则进行匹配 - */ -export function DOMChecker(wrapper, rules) { - const { text, count, src, style, noStyle, value } = rules; - - if (text) { - Object.keys(text).forEach(key => { - expect(wrapper.find(key)[0].text().trim()).to.equal(text[key]); - }); - } - - if (count) { - Object.keys(count).forEach(key => { - expect(wrapper.find(key).length).to.equal(count[key]); - }); - } - - if (src) { - Object.keys(src).forEach(key => { - expect(wrapper.find(key)[0].element.src).to.equal(src[key]); - }); - } - - if (value) { - Object.keys(value).forEach(key => { - expect(wrapper.find(key)[0].element.value).to.equal(value[key]); - }); - } - - if (style) { - Object.keys(style).forEach(key => { - Object.keys(style[key]).forEach(prop => { - expect(wrapper.find(key)[0].hasStyle(prop, style[key][prop])).to.equal( - true - ); - }); - }); - } - - if (noStyle) { - Object.keys(noStyle).forEach(key => { - Object.keys(noStyle[key]).forEach(prop => { - expect( - wrapper.find(key)[0].hasStyle(prop, noStyle[key][prop]) - ).to.equal(false); - }); - }); - } -} - -// 触发一个 touch 事件 -export function triggerTouch(wrapper, eventName, x, y) { - const el = wrapper.element ? wrapper.element : wrapper; - const touch = { - identifier: Date.now(), - target: el, - pageX: x, - pageY: y, - clientX: x, - clientY: y, - radiusX: 2.5, - radiusY: 2.5, - rotationAngle: 10, - force: 0.5 - }; - - const event = document.createEvent('CustomEvent'); - event.initCustomEvent(eventName, true, true, {}); - event.touches = [touch]; - event.targetTouches = [touch]; - event.changedTouches = [touch]; - - el.dispatchEvent(event); -} - -export function dragHelper(el, x = 0, y = 0) { - triggerTouch(el, 'touchstart', 0, 0); - triggerTouch(el, 'touchmove', x / 4, y / 4); - triggerTouch(el, 'touchmove', x / 3, y / 3); - triggerTouch(el, 'touchmove', x / 2, y / 2); - triggerTouch(el, 'touchmove', x, y); - triggerTouch(el, 'touchend', x, y); -} diff --git a/yarn.lock b/yarn.lock index b0d2b9775..c4db35273 100644 --- a/yarn.lock +++ b/yarn.lock @@ -27,6 +27,14 @@ version "0.7.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" +"@types/strip-bom@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" + +"@types/strip-json-comments@0.0.30": + version "0.0.30" + resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" + "@vue/component-compiler-utils@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-1.2.1.tgz#3d543baa75cfe5dab96e29415b78366450156ef6" @@ -41,6 +49,24 @@ source-map "^0.5.6" vue-template-es2015-compiler "^1.6.0" +"@vue/server-test-utils@^1.0.0-beta.15": + version "1.0.0-beta.15" + resolved "https://registry.yarnpkg.com/@vue/server-test-utils/-/server-test-utils-1.0.0-beta.15.tgz#6df3c882df1a0da4a49dd309bac6849cfd4280f8" + dependencies: + "@vue/test-utils" "1.0.0-beta.14" + +"@vue/test-utils@1.0.0-beta.14": + version "1.0.0-beta.14" + resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-1.0.0-beta.14.tgz#bbb65868cc3f3235d44c29e4faa82fb5f393203a" + dependencies: + lodash "^4.17.4" + +"@vue/test-utils@^1.0.0-beta.15": + version "1.0.0-beta.15" + resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-1.0.0-beta.15.tgz#9f8d85b9f2312217c81d72eba97e176fba23da09" + dependencies: + lodash "^4.17.4" + "@webassemblyjs/ast@1.3.1": version "1.3.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.3.1.tgz#3081b4b3ff0af733aa5ba573af998f33711293f8" @@ -160,10 +186,6 @@ abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" -abbrev@1.0.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" - accepts@~1.3.4, accepts@~1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" @@ -197,21 +219,6 @@ acorn@^5.0.0, acorn@^5.3.0, acorn@^5.5.0: version "5.5.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9" -addressparser@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/addressparser/-/addressparser-1.0.1.tgz#47afbe1a2a9262191db6838e4fd1d39b40821746" - -after@0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" - -agent-base@2: - version "2.1.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.1.1.tgz#d6de10d5af6132d5bd692427d46fc538539094c7" - dependencies: - extend "~3.0.0" - semver "~5.0.1" - ajv-keywords@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" @@ -220,7 +227,7 @@ ajv-keywords@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.1.0.tgz#ac2b27939c543e95d2c06e7f7f5c27be4aa543be" -ajv@^5.0.0, ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0: +ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" dependencies: @@ -254,16 +261,6 @@ amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" -amqplib@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/amqplib/-/amqplib-0.5.2.tgz#d2d7313c7ffaa4d10bcf1e6252de4591b6cc7b63" - dependencies: - bitsyntax "~0.0.4" - bluebird "^3.4.6" - buffer-more-ints "0.0.2" - readable-stream "1.x >=1.1.9" - safe-buffer "^5.0.1" - ansi-escapes@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" @@ -324,6 +321,12 @@ app-root-path@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46" +append-transform@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" + dependencies: + default-require-extensions "^1.0.0" + aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -390,10 +393,6 @@ array-includes@^3.0.3: define-properties "^1.1.2" es-abstract "^1.7.0" -array-slice@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" - array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -412,10 +411,6 @@ array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" -arraybuffer.slice@~0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" - arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -436,20 +431,12 @@ 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" -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" - assert@^1.1.1: version "1.4.1" resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" dependencies: util "0.10.3" -assertion-error@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" - assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" @@ -462,10 +449,14 @@ ast-types@0.10.1: version "0.10.1" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.10.1.tgz#f52fca9715579a14f841d67d7f8d25432ab6a3dd" -ast-types@0.11.3, ast-types@0.x.x: +ast-types@0.11.3: version "0.11.3" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.3.tgz#c20757fe72ee71278ea0ff3d87e5c2ca30d9edf8" +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + async-each@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" @@ -474,21 +465,15 @@ 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.x, async@^1.4.0, async@^1.5.0, async@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - -async@2.6.0, async@^2.0.0, async@^2.6.0: +async@2.6.0, async@^2.1.4, async@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" dependencies: lodash "^4.14.0" -async@~2.1.2: - version "2.1.5" - resolved "https://registry.yarnpkg.com/async/-/async-2.1.5.tgz#e587c68580994ac67fc56ff86d3ac56bdbe810bc" - dependencies: - lodash "^4.14.0" +async@^1.4.0, async@^1.5.0, async@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" asynckit@^0.4.0: version "0.4.0" @@ -498,6 +483,10 @@ atob@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.0.tgz#ab2b150e51d7b122b9efc8d7340c06b6c41076bc" +atob@~1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/atob/-/atob-1.1.3.tgz#95f13629b12c3a51a5d215abdce2aa9f32f80773" + autoprefixer@^6.3.1: version "6.7.7" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" @@ -509,7 +498,7 @@ autoprefixer@^6.3.1: postcss "^5.2.16" postcss-value-parser "^3.2.3" -autoprefixer@^8.4.1: +autoprefixer@^8.3.0: version "8.4.1" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-8.4.1.tgz#c6b30001ea4b3daa6b611e50071f62dd24beb564" dependencies: @@ -520,30 +509,14 @@ autoprefixer@^8.4.1: postcss "^6.0.22" postcss-value-parser "^3.2.3" -avoriaz@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/avoriaz/-/avoriaz-2.0.0.tgz#df0b4cd95afa6da03bed886595e36b9c1d17e201" - dependencies: - vue-add-globals "^1.0.1" - -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" - aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" -aws4@^1.2.1, aws4@^1.6.0: +aws4@^1.6.0: version "1.7.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289" -axios@^0.15.3: - version "0.15.3" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.15.3.tgz#2c9d638b2e191a08ea1d6cc988eadd6ba5bdc053" - dependencies: - follow-redirects "1.0.0" - babel-cli@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.26.0.tgz#502ab54874d7db88ad00b887a06383ce03d002f1" @@ -573,6 +546,30 @@ babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: esutils "^2.0.2" js-tokens "^3.0.2" +babel-core@^6.0.0: + version "6.26.2" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.2.tgz#b67a120521dcd6baf1a2ecceeceb595e223da06c" + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.1" + debug "^2.6.9" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.8" + slash "^1.0.0" + source-map "^0.5.7" + babel-core@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" @@ -752,6 +749,13 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" +babel-jest@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.4.3.tgz#4b7a0b6041691bbd422ab49b3b73654a49a6627a" + dependencies: + babel-plugin-istanbul "^4.1.5" + babel-preset-jest "^22.4.3" + babel-loader@^7.1.4: version "7.1.4" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.4.tgz#e3463938bd4e6d55d1c174c5485d406a188ed015" @@ -772,6 +776,19 @@ babel-plugin-check-es2015-constants@^6.22.0: dependencies: babel-runtime "^6.22.0" +babel-plugin-istanbul@^4.1.5: + version "4.1.6" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" + dependencies: + babel-plugin-syntax-object-rest-spread "^6.13.0" + find-up "^2.1.0" + istanbul-lib-instrument "^1.10.1" + test-exclude "^4.2.1" + +babel-plugin-jest-hoist@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.3.tgz#7d8bcccadc2667f96a0dcc6afe1891875ee6c14a" + 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" @@ -808,7 +825,7 @@ 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" -babel-plugin-syntax-object-rest-spread@^6.8.0: +babel-plugin-syntax-object-rest-spread@^6.13.0, babel-plugin-syntax-object-rest-spread@^6.8.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" @@ -952,6 +969,15 @@ babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-e babel-template "^6.26.0" babel-types "^6.26.0" +babel-plugin-transform-es2015-modules-commonjs@^6.26.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" + 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-modules-systemjs@^6.23.0, babel-plugin-transform-es2015-modules-systemjs@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" @@ -1147,6 +1173,13 @@ babel-preset-es2015@^6.9.0: babel-plugin-transform-es2015-unicode-regex "^6.24.1" babel-plugin-transform-regenerator "^6.24.1" +babel-preset-jest@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.4.3.tgz#e92eef9813b7026ab4ca675799f37419b5a44156" + dependencies: + babel-plugin-jest-hoist "^22.4.3" + babel-plugin-syntax-object-rest-spread "^6.13.0" + babel-preset-stage-1@^6.5.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz#7692cd7dcd6849907e6ae4a0a85589cfb9e2bfb0" @@ -1240,10 +1273,6 @@ babylon@~6.8.1: dependencies: babel-runtime "^6.0.0" -backo2@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" - balanced-match@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.1.0.tgz#b504bd05869b39259dd0c5efc35d843176dccc4a" @@ -1256,18 +1285,10 @@ balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" -base64-arraybuffer@0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" - base64-js@^1.0.2: version "1.3.0" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" -base64id@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" - base64url@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/base64url/-/base64url-2.0.0.tgz#eac16e03ea1438eff9423d69baa36262ed1f70bb" @@ -1294,12 +1315,6 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -better-assert@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" - dependencies: - callsite "1.0.0" - big.js@^3.1.3: version "3.2.0" resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" @@ -1312,23 +1327,7 @@ binaryextensions@2: version "2.1.1" resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.1.1.tgz#3209a51ca4a4ad541a3b8d3d6a6d5b83a2485935" -bitsyntax@~0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/bitsyntax/-/bitsyntax-0.0.4.tgz#eb10cc6f82b8c490e3e85698f07e83d46e0cba82" - dependencies: - buffer-more-ints "0.0.2" - -bl@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398" - dependencies: - readable-stream "~2.0.5" - -blob@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" - -bluebird@^3.1.1, bluebird@^3.3.0, bluebird@^3.4.6, bluebird@^3.5.1: +bluebird@^3.0.5, bluebird@^3.1.1, bluebird@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" @@ -1336,7 +1335,7 @@ 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.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" -body-parser@1.18.2, body-parser@^1.16.1: +body-parser@1.18.2: version "1.18.2" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" dependencies: @@ -1366,12 +1365,6 @@ boolbase@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" -boom@2.x.x: - version "2.10.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - dependencies: - hoek "2.x.x" - boom@4.x.x: version "4.3.1" resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" @@ -1391,12 +1384,6 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^0.1.2: - version "0.1.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-0.1.5.tgz#c085711085291d8b75fdd74eab0f8597280711e6" - dependencies: - expand-range "^0.1.0" - braces@^1.8.2: version "1.8.5" resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" @@ -1434,10 +1421,6 @@ browser-resolve@^1.11.2: dependencies: resolve "1.1.7" -browser-stdout@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" - browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" @@ -1511,6 +1494,12 @@ browserslist@^3.2.6: caniuse-lite "^1.0.30000830" electron-to-chromium "^1.3.42" +bser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" + dependencies: + node-int64 "^0.4.0" + buffer-from@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531" @@ -1519,10 +1508,6 @@ buffer-indexof@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" -buffer-more-ints@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/buffer-more-ints/-/buffer-more-ints-0.0.2.tgz#26b3885d10fa13db7fc01aae3aab870199e0124c" - buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" @@ -1535,18 +1520,6 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -buildmail@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/buildmail/-/buildmail-4.0.1.tgz#877f7738b78729871c9a105e3b837d2be11a7a72" - dependencies: - addressparser "1.0.1" - libbase64 "0.1.0" - libmime "3.0.0" - libqp "1.1.0" - nodemailer-fetch "1.6.0" - nodemailer-shared "1.1.0" - punycode "1.4.1" - builtin-modules@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" @@ -1613,10 +1586,6 @@ caller-path@^0.1.0: dependencies: callsites "^0.2.0" -callsite@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" - callsites@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" @@ -1676,10 +1645,6 @@ caniuse-lite@^1.0.30000832: version "1.0.30000836" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000836.tgz#c08f405b884d36dc44fa4c9a85c2c06cdab1dbb5" -caseless@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" - caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -1691,17 +1656,6 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" -chai@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.1.2.tgz#0f64584ba642f0f2ace2806279f4f06ca23ad73c" - dependencies: - assertion-error "^1.0.1" - check-error "^1.0.1" - deep-eql "^3.0.0" - get-func-name "^2.0.0" - pathval "^1.0.0" - type-detect "^4.0.0" - chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -1740,10 +1694,6 @@ chardet@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" -check-error@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" - cheerio@0.22.0: version "0.22.0" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" @@ -1765,7 +1715,7 @@ cheerio@0.22.0: lodash.reject "^4.4.0" lodash.some "^4.4.0" -chokidar@^1.4.1, chokidar@^1.6.1: +chokidar@^1.6.1: version "1.7.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" dependencies: @@ -1821,10 +1771,6 @@ circular-json@^0.3.1: version "0.3.3" resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" -circular-json@^0.5.1: - version "0.5.3" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.5.3.tgz#eb1b783333bb125784647d1a76377caf1499efb1" - clap@^1.0.9: version "1.2.3" resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" @@ -1913,6 +1859,10 @@ clone-stats@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" +clone@2.x: + version "2.1.1" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb" + clone@^1.0.0, clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" @@ -1933,10 +1883,6 @@ co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" -co@~3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/co/-/co-3.0.6.tgz#1445f226c5eb956138e68c9ac30167ea7d2e6bda" - coa@~1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" @@ -1947,9 +1893,9 @@ 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" -codecov@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/codecov/-/codecov-3.0.1.tgz#cc4c5cd1955c6be47f6dda2f8c55bcc43c732dca" +codecov@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/codecov/-/codecov-3.0.2.tgz#aea43843a5cd2fb6b7e488b2eff25d367ab70b12" dependencies: argv "0.0.2" request "^2.81.0" @@ -1998,7 +1944,7 @@ colors@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" -colors@^1.1.0, colors@^1.1.2: +colors@^1.1.2: version "1.2.1" resolved "https://registry.yarnpkg.com/colors/-/colors-1.2.1.tgz#f4a3d302976aaf042356ba1ade3b1a2c62d9d794" @@ -2006,13 +1952,7 @@ colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" -combine-lists@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/combine-lists/-/combine-lists-1.0.1.tgz#458c07e09e0d900fc28b70a3fec2dacd1d2cb7f6" - dependencies: - lodash "^4.5.0" - -combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5: +combined-stream@1.0.6, combined-stream@~1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" dependencies: @@ -2040,18 +1980,14 @@ commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" -component-bind@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" +compare-versions@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.1.0.tgz#43310256a5c555aaed4193c04d8f154cf9c6efd5" -component-emitter@1.2.1, component-emitter@^1.2.1: +component-emitter@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" -component-inherit@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" - compressible@~2.0.13: version "2.0.13" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.13.tgz#0d1020ab924b2fdb4d6279875c7d6daba6baa7a9" @@ -2083,19 +2019,25 @@ concat-stream@^1.5.0, concat-stream@^1.6.0: readable-stream "^2.2.2" typedarray "^0.0.6" +condense-newlines@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/condense-newlines/-/condense-newlines-0.2.1.tgz#3de985553139475d32502c83b02f60684d24c55f" + dependencies: + extend-shallow "^2.0.1" + is-whitespace "^0.3.0" + kind-of "^3.0.2" + +config-chain@~1.1.5: + version "1.1.11" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.11.tgz#aba09747dfbe4c3e70e766a6e41586e1859fc6f2" + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + connect-history-api-fallback@^1.3.0: version "1.5.0" resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" -connect@^3.6.0: - version "3.6.6" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.6.tgz#09eff6c55af7236e137135a72574858b6786f524" - dependencies: - debug "2.6.9" - finalhandler "1.1.0" - parseurl "~1.3.2" - utils-merge "1.0.1" - console-browserify@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" @@ -2124,7 +2066,7 @@ content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" -convert-source-map@^1.5.0, convert-source-map@^1.5.1: +convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" @@ -2151,7 +2093,7 @@ copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" -core-js@^2.2.0, core-js@^2.4.0, core-js@^2.4.1, core-js@^2.5.0: +core-js@^2.4.0, core-js@^2.4.1, core-js@^2.5.0: version "2.5.5" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.5.tgz#b14dde936c640c0579a6b50cabcc132dd6127e3b" @@ -2208,9 +2150,9 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" -cross-env@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.1.4.tgz#f61c14291f7cc653bb86457002ea80a04699d022" +cross-env@^5.1.5: + version "5.1.5" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.1.5.tgz#31daf7f3a52ef337c8ddda585f08175cce5d1fa5" dependencies: cross-spawn "^5.1.0" is-windows "^1.0.0" @@ -2233,12 +2175,6 @@ cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - dependencies: - boom "2.x.x" - cryptiles@3.x.x: version "3.1.2" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" @@ -2318,6 +2254,15 @@ css-what@2.1: version "2.1.0" resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" +css@^2.1.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/css/-/css-2.2.1.tgz#73a4c81de85db664d4ee674f7d47085e3b2d55dc" + dependencies: + inherits "^2.0.1" + source-map "^0.1.38" + source-map-resolve "^0.3.0" + urix "^0.1.0" + cssesc@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" @@ -2382,10 +2327,6 @@ currently-unhandled@^0.4.1: dependencies: array-find-index "^1.0.1" -custom-event@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" - cyclist@~0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" @@ -2400,10 +2341,6 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -data-uri-to-buffer@1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835" - data-urls@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.0.0.tgz#24802de4e81c298ea8a9388bb0d8e461c774684f" @@ -2416,21 +2353,10 @@ date-fns@^1.27.2: version "1.29.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" -date-format@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/date-format/-/date-format-1.2.0.tgz#615e828e233dd1ab9bb9ae0950e0ceccfa6ecad8" - date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" -dateformat@^1.0.6: - version "1.0.12" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" - dependencies: - get-stdin "^4.0.1" - meow "^3.3.0" - dateformat@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" @@ -2439,24 +2365,18 @@ de-indent@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" -debug@2, debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9, debug@~2.6.4, debug@~2.6.6: +debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: ms "2.0.0" -debug@3.1.0, debug@^3.0.1, debug@^3.1.0, debug@~3.1.0: +debug@^3.0.1, debug@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: ms "2.0.0" -debug@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" - dependencies: - ms "0.7.1" - decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -2475,12 +2395,6 @@ dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" -deep-eql@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" - dependencies: - type-detect "^4.0.0" - deep-equal@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" @@ -2497,6 +2411,12 @@ deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" +default-require-extensions@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" + dependencies: + strip-bom "^2.0.0" + define-properties@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" @@ -2527,14 +2447,6 @@ defined@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" -degenerator@~1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-1.0.4.tgz#fcf490a37ece266464d9cc431ab98c5819ced095" - dependencies: - ast-types "0.x.x" - escodegen "1.x.x" - esprima "3.x.x" - del@^2.0.2: version "2.2.2" resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" @@ -2608,6 +2520,10 @@ detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" +detect-newline@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + detect-node@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127" @@ -2679,11 +2595,7 @@ detective-typescript@^2.0.0: typescript "^2.6.1" typescript-eslint-parser "^9.0.0" -di@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" - -diff@3.5.0, diff@^3.1.0, diff@^3.2.0, diff@^3.3.1, diff@^3.5.0: +diff@^3.2.0, diff@^3.3.1, diff@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" @@ -2731,15 +2643,6 @@ dom-converter@~0.1: dependencies: utila "~0.3" -dom-serialize@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" - dependencies: - custom-event "~1.0.0" - ent "~2.2.0" - extend "^3.0.0" - void-elements "^2.0.0" - dom-serializer@0, dom-serializer@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" @@ -2803,10 +2706,6 @@ dot-prop@^4.1.1: dependencies: is-obj "^1.0.0" -double-ended-queue@^2.1.0-0: - version "2.1.0-0" - resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" - duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" @@ -2830,6 +2729,16 @@ editions@^1.3.3: version "1.3.4" resolved "https://registry.yarnpkg.com/editions/-/editions-1.3.4.tgz#3662cb592347c3168eb8e498a0ff73271d67f50b" +editorconfig@^0.13.2: + version "0.13.3" + resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.13.3.tgz#e5219e587951d60958fd94ea9a9a008cdeff1b34" + dependencies: + bluebird "^3.0.5" + commander "^2.9.0" + lru-cache "^3.2.0" + semver "^5.1.0" + sigmund "^1.0.1" + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -2866,7 +2775,7 @@ emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" -encodeurl@~1.0.1, encodeurl@~1.0.2: +encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -2876,45 +2785,6 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -engine.io-client@~3.1.0: - version "3.1.6" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.1.6.tgz#5bdeb130f8b94a50ac5cbeb72583e7a4a063ddfd" - dependencies: - component-emitter "1.2.1" - component-inherit "0.0.3" - debug "~3.1.0" - engine.io-parser "~2.1.1" - has-cors "1.1.0" - indexof "0.0.1" - parseqs "0.0.5" - parseuri "0.0.5" - ws "~3.3.1" - xmlhttprequest-ssl "~1.5.4" - yeast "0.1.2" - -engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.2.tgz#4c0f4cff79aaeecbbdcfdea66a823c6085409196" - dependencies: - after "0.8.2" - arraybuffer.slice "~0.0.7" - base64-arraybuffer "0.1.5" - blob "0.0.4" - has-binary2 "~1.0.2" - -engine.io@~3.1.0: - version "3.1.5" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.1.5.tgz#0e7ef9d690eb0b35597f1d4ad02a26ca2dba3845" - dependencies: - accepts "~1.3.4" - base64id "1.0.0" - cookie "0.3.1" - debug "~3.1.0" - engine.io-parser "~2.1.0" - ws "~3.3.1" - optionalDependencies: - uws "~9.14.0" - enhanced-resolve@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" @@ -2932,10 +2802,6 @@ enhanced-resolve@^4.0.0: memory-fs "^0.4.0" tapable "^1.0.0" -ent@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" - entities@^1.1.1, entities@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" @@ -2985,22 +2851,11 @@ escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@^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" -escodegen@1.8.x: - version "1.8.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" - dependencies: - esprima "^2.7.1" - estraverse "^1.9.1" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.2.0" - -escodegen@1.x.x, escodegen@^1.8.0, escodegen@^1.9.0: +escodegen@^1.8.0, escodegen@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2" dependencies: @@ -3078,11 +2933,11 @@ espree@^3.5.2, espree@^3.5.4: acorn "^5.5.0" acorn-jsx "^3.0.0" -esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1: +esprima@^2.6.0: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" -esprima@3.x.x, esprima@^3.1.3: +esprima@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" @@ -3102,10 +2957,6 @@ esrecurse@^4.1.0: dependencies: estraverse "^4.1.0" -estraverse@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" - estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" @@ -3139,6 +2990,12 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" +exec-sh@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.1.tgz#163b98a6e89e6b65b47c2a28d215bc1f63989c38" + dependencies: + merge "^1.1.3" + execa@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" @@ -3167,13 +3024,9 @@ exit-hook@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" -expand-braces@^0.1.1: +exit@^0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/expand-braces/-/expand-braces-0.1.2.tgz#488b1d1d2451cb3d3a6b192cfc030f44c5855fea" - dependencies: - array-slice "^0.2.3" - array-unique "^0.2.1" - braces "^0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" expand-brackets@^0.1.4: version "0.1.5" @@ -3193,13 +3046,6 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expand-range@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-0.1.1.tgz#4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044" - dependencies: - is-number "^0.1.1" - repeat-string "^0.2.2" - expand-range@^1.8.1: version "1.8.2" resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" @@ -3271,7 +3117,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@3, extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: +extend@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" @@ -3302,6 +3148,12 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" +extract-from-css@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/extract-from-css/-/extract-from-css-0.4.4.tgz#1ea7df2e7c7c6eb9922fa08e8adaea486f6f8f92" + dependencies: + css "^2.1.0" + extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -3355,6 +3207,12 @@ faye-websocket@~0.11.0: dependencies: websocket-driver ">=0.5.1" +fb-watchman@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + dependencies: + bser "^2.0.0" + figures@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" @@ -3379,14 +3237,17 @@ file-exists@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/file-exists/-/file-exists-2.0.0.tgz#a24150665150e62d55bc5449281d88d2b0810dca" -file-uri-to-path@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" +fileset@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + dependencies: + glob "^7.0.3" + minimatch "^3.0.3" + filing-cabinet@^1.13.0: version "1.14.0" resolved "https://registry.yarnpkg.com/filing-cabinet/-/filing-cabinet-1.14.0.tgz#629d9db0a8410c463ce222364b5a708f2cbd71b3" @@ -3423,18 +3284,6 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" -finalhandler@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" - dependencies: - debug "2.6.9" - encodeurl "~1.0.1" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.2" - statuses "~1.3.1" - unpipe "~1.0.0" - finalhandler@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" @@ -3447,6 +3296,13 @@ finalhandler@1.1.1: statuses "~1.4.0" unpipe "~1.0.0" +find-babel-config@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.1.0.tgz#acc01043a6749fec34429be6b64f542ebb5d6355" + dependencies: + json5 "^0.5.1" + path-exists "^3.0.0" + find-cache-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" @@ -3508,12 +3364,6 @@ flush-write-stream@^1.0.0: inherits "^2.0.1" readable-stream "^2.0.4" -follow-redirects@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.0.0.tgz#8e34298cbd2e176f254effec75a1c78cc849fd37" - dependencies: - debug "^2.2.0" - follow-redirects@^1.0.0: version "1.4.1" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.4.1.tgz#d8120f4518190f55aac65bb6fc7b85fcd666d6aa" @@ -3538,22 +3388,6 @@ forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" -form-data@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.0.0.tgz#6f0aebadcc5da16c13e1ecc11137d85f9b883b25" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.11" - -form-data@~2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" - form-data@~2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" @@ -3562,12 +3396,6 @@ form-data@~2.3.1: combined-stream "1.0.6" mime-types "^2.1.12" -formatio@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/formatio/-/formatio-1.2.0.tgz#f3b2167d9068c4698a8d51f4f760a39a54d818eb" - dependencies: - samsam "1.x" - forwarded@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" @@ -3589,12 +3417,6 @@ from2@^2.1.0, from2@^2.1.1: inherits "^2.0.1" readable-stream "^2.0.0" -fs-access@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a" - dependencies: - null-check "^1.0.0" - fs-extra@^4.0.2: version "4.0.3" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" @@ -3641,12 +3463,12 @@ fsevents@^1.0.0, fsevents@^1.1.2: nan "^2.9.2" node-pre-gyp "^0.9.0" -ftp@~0.3.10: - version "0.3.10" - resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" +fsevents@^1.1.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.2.tgz#4f598f0f69b273188ef4a62ca4e9e08ace314bbf" dependencies: - readable-stream "1.1.x" - xregexp "2.0.0" + nan "^2.9.2" + node-pre-gyp "^0.9.0" function-bind@^1.0.2, function-bind@^1.1.1: version "1.1.1" @@ -3669,16 +3491,6 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -generate-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" - -generate-object-property@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - dependencies: - is-property "^1.0.0" - get-amd-module-type@^2.0.4: version "2.0.5" resolved "https://registry.yarnpkg.com/get-amd-module-type/-/get-amd-module-type-2.0.5.tgz#e671ec5a96ad5fbf53a3a22a289e9238c772ddb0" @@ -3690,10 +3502,6 @@ get-caller-file@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" -get-func-name@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" - get-own-enumerable-property-symbols@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-2.0.1.tgz#5c4ad87f2834c4b9b4e84549dc1e0650fb38c24b" @@ -3706,17 +3514,6 @@ get-stream@3.0.0, get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" -get-uri@2: - version "2.0.1" - resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.1.tgz#dbdcacacd8c608a38316869368117697a1631c59" - dependencies: - data-uri-to-buffer "1" - debug "2" - extend "3" - file-uri-to-path "1" - ftp "~0.3.10" - readable-stream "2" - 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" @@ -3783,7 +3580,7 @@ glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" -glob@7.1.2, glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: @@ -3794,16 +3591,6 @@ glob@7.1.2, glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^5.0.15: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - global-modules@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" @@ -3924,15 +3711,15 @@ grouped-queue@^0.3.3: dependencies: lodash "^4.17.2" -growl@1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f" +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" handle-thing@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" -handlebars@^4.0.1: +handlebars@^4.0.3: version "4.0.11" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" dependencies: @@ -3946,15 +3733,6 @@ har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" -har-validator@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" - dependencies: - chalk "^1.1.1" - commander "^2.9.0" - is-my-json-valid "^2.12.4" - pinkie-promise "^2.0.0" - har-validator@~5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" @@ -3968,28 +3746,14 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" -has-binary2@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.2.tgz#e83dba49f0b9be4d026d27365350d9f03f54be98" - dependencies: - isarray "2.0.1" - has-color@~0.1.0: version "0.1.7" resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" -has-cors@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" - has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -4063,15 +3827,6 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.0" -hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" - dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" - hawk@~6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" @@ -4081,7 +3836,7 @@ hawk@~6.0.2: hoek "4.x.x" sntp "2.x.x" -he@1.1.1, he@1.1.x, he@^1.1.0: +he@1.1.x, he@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" @@ -4089,13 +3844,6 @@ highlight.js@^9.12.0: version "9.12.0" resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e" -hipchat-notifier@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/hipchat-notifier/-/hipchat-notifier-1.1.0.tgz#b6d249755437c191082367799d3ba9a0f23b231e" - dependencies: - lodash "^4.0.0" - request "^2.0.0" - hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -4104,10 +3852,6 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - hoek@4.x.x: version "4.2.1" resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" @@ -4226,14 +3970,6 @@ http-parser-js@>=0.4.0: version "0.4.11" resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.11.tgz#5b720849c650903c27e521633d94696ee95f3529" -http-proxy-agent@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-1.0.0.tgz#cc1ce38e453bf984a0f7702d2dd59c73d081284a" - dependencies: - agent-base "2" - debug "2" - extend "3" - http-proxy-middleware@~0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz#0987e6bb5a5606e5a69168d8f967a87f15dd8aab" @@ -4243,7 +3979,7 @@ http-proxy-middleware@~0.18.0: lodash "^4.17.5" micromatch "^3.1.9" -http-proxy@^1.13.0, http-proxy@^1.16.2: +http-proxy@^1.16.2: version "1.17.0" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a" dependencies: @@ -4251,14 +3987,6 @@ http-proxy@^1.13.0, http-proxy@^1.16.2: follow-redirects "^1.0.0" requires-port "^1.0.0" -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" - dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -4267,29 +3995,10 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -httpntlm@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/httpntlm/-/httpntlm-1.6.1.tgz#ad01527143a2e8773cfae6a96f58656bb52a34b2" - dependencies: - httpreq ">=0.4.22" - underscore "~1.7.0" - -httpreq@>=0.4.22: - version "0.4.24" - resolved "https://registry.yarnpkg.com/httpreq/-/httpreq-0.4.24.tgz#4335ffd82cd969668a39465c929ac61d6393627f" - https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" -https-proxy-agent@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6" - dependencies: - agent-base "2" - debug "2" - extend "3" - husky@^0.14.3: version "0.14.3" resolved "https://registry.yarnpkg.com/husky/-/husky-0.14.3.tgz#c69ed74e2d2779769a17ba8399b54ce0b63c12c3" @@ -4298,10 +4007,6 @@ husky@^0.14.3: normalize-path "^1.0.0" strip-indent "^2.0.0" -iconv-lite@0.4.15: - version "0.4.15" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" - iconv-lite@0.4.19: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" @@ -4373,14 +4078,6 @@ indexof@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" -inflection@~1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.10.0.tgz#5bffcb1197ad3e81050f8e17e21668087ee9eb2f" - -inflection@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.3.8.tgz#cbd160da9f75b14c3cc63578d4f396784bf3014e" - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -4464,11 +4161,7 @@ invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" -ip@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.0.1.tgz#c7e356cdea225ae71b36d70f2e71a92ba4e42590" - -ip@^1.1.0, ip@^1.1.2, ip@^1.1.4, ip@^1.1.5: +ip@^1.1.0, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" @@ -4624,24 +4317,6 @@ is-glob@^4.0.0: dependencies: is-extglob "^2.1.1" -is-my-ip-valid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" - -is-my-json-valid@^2.12.4: - version "2.17.2" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz#6b2103a288e94ef3de5cf15d29dd85fc4b78d65c" - dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - is-my-ip-valid "^1.0.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" - -is-number@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz#69a7af116963d47206ec9bd9b48a14216f1e3806" - is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" @@ -4716,10 +4391,6 @@ is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" -is-property@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" - is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" @@ -4774,6 +4445,10 @@ is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" +is-whitespace@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/is-whitespace/-/is-whitespace-0.3.0.tgz#1639ecb1be036aec69a54cbb401cfbed7114ab7f" + is-windows@^1.0.0, is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -4790,11 +4465,7 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" -isarray@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" - -isbinaryfile@^3.0.0, isbinaryfile@^3.0.2: +isbinaryfile@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621" @@ -4816,20 +4487,34 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -istanbul-instrumenter-loader@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-3.0.1.tgz#9957bd59252b373fae5c52b7b5188e6fde2a0949" +istanbul-api@^1.1.14: + version "1.3.1" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.1.tgz#4c3b05d18c0016d1022e079b98dc82c40f488954" dependencies: - convert-source-map "^1.5.0" - istanbul-lib-instrument "^1.7.3" - loader-utils "^1.1.0" - schema-utils "^0.3.0" + async "^2.1.4" + compare-versions "^3.1.0" + fileset "^2.0.2" + istanbul-lib-coverage "^1.2.0" + istanbul-lib-hook "^1.2.0" + istanbul-lib-instrument "^1.10.1" + istanbul-lib-report "^1.1.4" + istanbul-lib-source-maps "^1.2.4" + istanbul-reports "^1.3.0" + js-yaml "^3.7.0" + mkdirp "^0.5.1" + once "^1.4.0" -istanbul-lib-coverage@^1.2.0: +istanbul-lib-coverage@^1.1.1, istanbul-lib-coverage@^1.1.2, istanbul-lib-coverage@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz#f7d8f2e42b97e37fe796114cb0f9d68b5e3a4341" -istanbul-lib-instrument@^1.7.3: +istanbul-lib-hook@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.0.tgz#ae556fd5a41a6e8efa0b1002b1e416dfeaf9816c" + dependencies: + append-transform "^0.4.0" + +istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.8.0: version "1.10.1" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz#724b4b6caceba8692d3f1f9d0727e279c401af7b" dependencies: @@ -4841,24 +4526,40 @@ istanbul-lib-instrument@^1.7.3: istanbul-lib-coverage "^1.2.0" semver "^5.3.0" -istanbul@^0.4.0: - version "0.4.5" - resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" +istanbul-lib-report@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz#e886cdf505c4ebbd8e099e4396a90d0a28e2acb5" dependencies: - abbrev "1.0.x" - async "1.x" - escodegen "1.8.x" - esprima "2.7.x" - glob "^5.0.15" - handlebars "^4.0.1" - js-yaml "3.x" - mkdirp "0.5.x" - nopt "3.x" - once "1.x" - resolve "1.1.x" - supports-color "^3.1.0" - which "^1.1.1" - wordwrap "^1.0.0" + istanbul-lib-coverage "^1.2.0" + mkdirp "^0.5.1" + path-parse "^1.0.5" + supports-color "^3.1.2" + +istanbul-lib-source-maps@^1.2.1: + version "1.2.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz#20fb54b14e14b3fb6edb6aca3571fd2143db44e6" + dependencies: + debug "^3.1.0" + istanbul-lib-coverage "^1.1.2" + mkdirp "^0.5.1" + rimraf "^2.6.1" + source-map "^0.5.3" + +istanbul-lib-source-maps@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.4.tgz#cc7ccad61629f4efff8e2f78adb8c522c9976ec7" + dependencies: + debug "^3.1.0" + istanbul-lib-coverage "^1.2.0" + mkdirp "^0.5.1" + rimraf "^2.6.1" + source-map "^0.5.3" + +istanbul-reports@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.3.0.tgz#2f322e81e1d9520767597dca3c20a0cce89a3554" + dependencies: + handlebars "^4.0.3" istextorbinary@^2.2.1: version "2.2.1" @@ -4875,6 +4576,51 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" +jest-changed-files@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.4.3.tgz#8882181e022c38bd46a2e4d18d44d19d90a90fb2" + dependencies: + throat "^4.0.0" + +jest-cli@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.4.3.tgz#bf16c4a5fb7edc3fa5b9bb7819e34139e88a72c7" + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.1.11" + import-local "^1.0.0" + is-ci "^1.0.10" + istanbul-api "^1.1.14" + istanbul-lib-coverage "^1.1.1" + istanbul-lib-instrument "^1.8.0" + istanbul-lib-source-maps "^1.2.1" + jest-changed-files "^22.4.3" + jest-config "^22.4.3" + jest-environment-jsdom "^22.4.3" + jest-get-type "^22.4.3" + jest-haste-map "^22.4.3" + jest-message-util "^22.4.3" + jest-regex-util "^22.4.3" + jest-resolve-dependencies "^22.4.3" + jest-runner "^22.4.3" + jest-runtime "^22.4.3" + jest-snapshot "^22.4.3" + jest-util "^22.4.3" + jest-validate "^22.4.3" + jest-worker "^22.4.3" + micromatch "^2.3.11" + node-notifier "^5.2.1" + realpath-native "^1.0.0" + rimraf "^2.5.4" + slash "^1.0.0" + string-length "^2.0.0" + strip-ansi "^4.0.0" + which "^1.2.12" + yargs "^10.0.3" + jest-config@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.4.3.tgz#0e9d57db267839ea31309119b41dc2fa31b76403" @@ -4900,6 +4646,12 @@ jest-diff@^22.4.3: jest-get-type "^22.4.3" pretty-format "^22.4.3" +jest-docblock@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.4.3.tgz#50886f132b42b280c903c592373bb6e93bb68b19" + dependencies: + detect-newline "^2.1.0" + jest-environment-jsdom@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz#d67daa4155e33516aecdd35afd82d4abf0fa8a1e" @@ -4919,6 +4671,18 @@ jest-get-type@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" +jest-haste-map@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.4.3.tgz#25842fa2ba350200767ac27f658d58b9d5c2e20b" + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.11" + jest-docblock "^22.4.3" + jest-serializer "^22.4.3" + jest-worker "^22.4.3" + micromatch "^2.3.11" + sane "^2.0.0" + jest-jasmine2@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.4.3.tgz#4daf64cd14c793da9db34a7c7b8dcfe52a745965" @@ -4935,6 +4699,12 @@ jest-jasmine2@^22.4.3: jest-util "^22.4.3" source-map-support "^0.5.0" +jest-leak-detector@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.4.3.tgz#2b7b263103afae8c52b6b91241a2de40117e5b35" + dependencies: + pretty-format "^22.4.3" + jest-matcher-utils@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz#4632fe428ebc73ebc194d3c7b65d37b161f710ff" @@ -4961,6 +4731,12 @@ jest-regex-util@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.4.3.tgz#a826eb191cdf22502198c5401a1fc04de9cef5af" +jest-resolve-dependencies@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-22.4.3.tgz#e2256a5a846732dc3969cb72f3c9ad7725a8195e" + dependencies: + jest-regex-util "^22.4.3" + jest-resolve@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.4.3.tgz#0ce9d438c8438229aa9b916968ec6b05c1abb4ea" @@ -4968,6 +4744,57 @@ jest-resolve@^22.4.3: browser-resolve "^1.11.2" chalk "^2.0.1" +jest-runner@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.4.3.tgz#298ddd6a22b992c64401b4667702b325e50610c3" + dependencies: + exit "^0.1.2" + jest-config "^22.4.3" + jest-docblock "^22.4.3" + jest-haste-map "^22.4.3" + jest-jasmine2 "^22.4.3" + jest-leak-detector "^22.4.3" + jest-message-util "^22.4.3" + jest-runtime "^22.4.3" + jest-util "^22.4.3" + jest-worker "^22.4.3" + throat "^4.0.0" + +jest-runtime@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.4.3.tgz#b69926c34b851b920f666c93e86ba2912087e3d0" + dependencies: + babel-core "^6.0.0" + babel-jest "^22.4.3" + babel-plugin-istanbul "^4.1.5" + chalk "^2.0.1" + convert-source-map "^1.4.0" + exit "^0.1.2" + graceful-fs "^4.1.11" + jest-config "^22.4.3" + jest-haste-map "^22.4.3" + jest-regex-util "^22.4.3" + jest-resolve "^22.4.3" + jest-util "^22.4.3" + jest-validate "^22.4.3" + json-stable-stringify "^1.0.1" + micromatch "^2.3.11" + realpath-native "^1.0.0" + slash "^1.0.0" + strip-bom "3.0.0" + write-file-atomic "^2.1.0" + yargs "^10.0.3" + +jest-serializer-vue@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/jest-serializer-vue/-/jest-serializer-vue-1.0.0.tgz#82514e9b3d94a17fe618df3ede84046090f94815" + dependencies: + pretty "2.0.0" + +jest-serializer@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-22.4.3.tgz#a679b81a7f111e4766235f4f0c46d230ee0f7436" + jest-snapshot@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.4.3.tgz#b5c9b42846ffb9faccb76b841315ba67887362d2" @@ -5001,15 +4828,37 @@ jest-validate@^22.4.0, jest-validate@^22.4.3: leven "^2.1.0" pretty-format "^22.4.3" +jest-worker@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.4.3.tgz#5c421417cba1c0abf64bf56bd5fb7968d79dd40b" + dependencies: + merge-stream "^1.0.1" + +jest@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest/-/jest-22.4.3.tgz#2261f4b117dc46d9a4a1a673d2150958dee92f16" + dependencies: + import-local "^1.0.0" + jest-cli "^22.4.3" + js-base64@^2.1.9: version "2.4.3" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.3.tgz#2e545ec2b0f2957f41356510205214e98fad6582" +js-beautify@^1.6.12, js-beautify@^1.6.14: + version "1.7.5" + resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.7.5.tgz#69d9651ef60dbb649f65527b53674950138a7919" + dependencies: + config-chain "~1.1.5" + editorconfig "^0.13.2" + mkdirp "~0.5.0" + nopt "~3.0.1" + js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-yaml@3.x, js-yaml@^3.4.3, js-yaml@^3.9.0, js-yaml@^3.9.1: +js-yaml@^3.4.3, js-yaml@^3.7.0, js-yaml@^3.9.0, js-yaml@^3.9.1: version "3.11.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" dependencies: @@ -5126,7 +4975,13 @@ json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" -json-stringify-safe@5.0.x, json-stringify-safe@~5.0.1: +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + +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" @@ -5144,9 +4999,9 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" -jsonpointer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" jsprim@^1.2.2: version "1.4.1" @@ -5157,84 +5012,12 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -karma-chrome-launcher@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz#cf1b9d07136cc18fe239327d24654c3dbc368acf" - dependencies: - fs-access "^1.0.0" - which "^1.2.1" - -karma-coverage@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/karma-coverage/-/karma-coverage-1.1.2.tgz#cc09dceb589a83101aca5fe70c287645ef387689" - dependencies: - dateformat "^1.0.6" - istanbul "^0.4.0" - lodash "^4.17.0" - minimatch "^3.0.0" - source-map "^0.5.1" - -karma-mocha@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/karma-mocha/-/karma-mocha-1.3.0.tgz#eeaac7ffc0e201eb63c467440d2b69c7cf3778bf" - dependencies: - minimist "1.2.0" - -karma-sinon-chai@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/karma-sinon-chai/-/karma-sinon-chai-1.3.4.tgz#56c82674a5618ee9a4063cfbd57fc01da37f1495" - dependencies: - lolex "^1.6.0" - karma-spec-reporter@^0.0.32: version "0.0.32" resolved "https://registry.yarnpkg.com/karma-spec-reporter/-/karma-spec-reporter-0.0.32.tgz#2e9c7207ea726771260259f82becb543209e440a" dependencies: colors "^1.1.2" -karma-webpack@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-3.0.0.tgz#bf009c5b73c667c11c015717e9e520f581317c44" - dependencies: - async "^2.0.0" - babel-runtime "^6.0.0" - loader-utils "^1.0.0" - lodash "^4.0.0" - source-map "^0.5.6" - webpack-dev-middleware "^2.0.6" - -karma@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/karma/-/karma-2.0.2.tgz#4d2db9402850a66551fa784b0164fb0824ed8c4b" - dependencies: - bluebird "^3.3.0" - body-parser "^1.16.1" - chokidar "^1.4.1" - colors "^1.1.0" - combine-lists "^1.0.0" - connect "^3.6.0" - core-js "^2.2.0" - di "^0.0.1" - dom-serialize "^2.2.0" - expand-braces "^0.1.1" - glob "^7.1.1" - graceful-fs "^4.1.2" - http-proxy "^1.13.0" - isbinaryfile "^3.0.0" - lodash "^4.17.4" - log4js "^2.3.9" - mime "^1.3.4" - minimatch "^3.0.2" - optimist "^0.6.1" - qjobs "^1.1.4" - range-parser "^1.2.0" - rimraf "^2.6.0" - safe-buffer "^5.0.1" - socket.io "2.0.4" - source-map "^0.6.1" - tmp "0.0.33" - useragent "2.2.1" - keyv@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373" @@ -5294,29 +5077,13 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -libbase64@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/libbase64/-/libbase64-0.1.0.tgz#62351a839563ac5ff5bd26f12f60e9830bb751e6" - -libmime@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/libmime/-/libmime-3.0.0.tgz#51a1a9e7448ecbd32cda54421675bb21bc093da6" - dependencies: - iconv-lite "0.4.15" - libbase64 "0.1.0" - libqp "1.1.0" - -libqp@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/libqp/-/libqp-1.1.0.tgz#f5e6e06ad74b794fb5b5b66988bf728ef1dedbe8" - linkify-it@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.0.3.tgz#d94a4648f9b1c179d64fa97291268bdb6ce9434f" dependencies: uc.micro "^1.0.1" -lint-staged@^7.1.0: +lint-staged@^7.0.4: version "7.1.0" resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-7.1.0.tgz#1514a5b71b8d9492ca0c3d2a44769cbcbc8bcc79" dependencies: @@ -5424,7 +5191,7 @@ loader-utils@^0.2.16: json5 "^0.5.0" object-assign "^4.0.1" -loader-utils@^1.0.0, loader-utils@^1.0.2, loader-utils@^1.1.0: +loader-utils@^1.0.2, loader-utils@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" dependencies: @@ -5439,6 +5206,10 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" +lodash._reinterpolate@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + lodash.assignin@^4.0.9: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" @@ -5499,6 +5270,19 @@ lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" +lodash.template@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0" + dependencies: + lodash._reinterpolate "~3.0.0" + lodash.templatesettings "^4.0.0" + +lodash.templatesettings@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316" + dependencies: + lodash._reinterpolate "~3.0.0" + lodash.unescape@4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" @@ -5507,14 +5291,14 @@ lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0, lodash@^4.5.0: - version "4.17.5" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" - -lodash@^4.17.0, lodash@^4.17.10: +lodash@4.x, lodash@^4.17.10: version "4.17.10" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" +lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0: + version "4.17.5" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" + log-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" @@ -5534,33 +5318,6 @@ log-update@^1.0.2: ansi-escapes "^1.0.0" cli-cursor "^1.0.2" -log4js@^2.3.9: - version "2.5.3" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-2.5.3.tgz#38bb7bde5e9c1c181bd75e8bc128c5cd0409caf1" - dependencies: - circular-json "^0.5.1" - date-format "^1.2.0" - debug "^3.1.0" - semver "^5.3.0" - streamroller "^0.7.0" - optionalDependencies: - amqplib "^0.5.2" - axios "^0.15.3" - hipchat-notifier "^1.1.0" - loggly "^1.1.0" - mailgun-js "^0.7.0" - nodemailer "^2.5.0" - redis "^2.7.1" - slack-node "~0.2.0" - -loggly@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/loggly/-/loggly-1.1.1.tgz#0a0fc1d3fa3a5ec44fdc7b897beba2a4695cebee" - dependencies: - json-stringify-safe "5.0.x" - request "2.75.x" - timespan "2.3.x" - loglevel@^1.4.1: version "1.6.1" resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa" @@ -5569,10 +5326,6 @@ loglevelnext@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/loglevelnext/-/loglevelnext-1.0.4.tgz#0d991d9998180991dac8bd81e73a596a8720a645" -lolex@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/lolex/-/lolex-1.6.0.tgz#3a9a0283452a47d7439e72731b9e07d7386e49f6" - long@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" @@ -5606,9 +5359,11 @@ lowercase-keys@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" -lru-cache@2.2.x: - version "2.2.4" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d" +lru-cache@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-3.2.0.tgz#71789b3b7f5399bec8565dda38aa30d2a097efee" + dependencies: + pseudomap "^1.0.1" lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.2: version "4.1.2" @@ -5617,41 +5372,22 @@ lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.2: pseudomap "^1.0.2" yallist "^2.1.2" -lru-cache@~2.6.5: - version "2.6.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.6.5.tgz#e56d6354148ede8d7707b58d143220fd08df0fd5" - macaddress@^0.2.8: version "0.2.8" resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" -mailcomposer@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/mailcomposer/-/mailcomposer-4.0.1.tgz#0e1c44b2a07cf740ee17dc149ba009f19cadfeb4" - dependencies: - buildmail "4.0.1" - libmime "3.0.0" - -mailgun-js@^0.7.0: - version "0.7.15" - resolved "https://registry.yarnpkg.com/mailgun-js/-/mailgun-js-0.7.15.tgz#ee366a20dac64c3c15c03d6c1b3e0ed795252abb" - dependencies: - async "~2.1.2" - debug "~2.2.0" - form-data "~2.1.1" - inflection "~1.10.0" - is-stream "^1.1.0" - path-proxy "~1.0.0" - proxy-agent "~2.0.0" - q "~1.4.0" - tsscmp "~1.0.0" - make-dir@^1.0.0, make-dir@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.2.0.tgz#6d6a49eead4aae296c53bbf3a1a008bd6c89469b" dependencies: pify "^3.0.0" +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + 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" @@ -5761,10 +5497,20 @@ merge-source-map@^1.1.0: dependencies: source-map "^0.6.1" +merge-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" + dependencies: + readable-stream "^2.0.1" + merge2@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.2.tgz#03212e3da8d86c4d8523cebd6318193414f94e34" +merge@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" + methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -5816,7 +5562,7 @@ miller-rabin@^4.0.0: version "1.33.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" -mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.7: +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18: version "2.1.18" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" dependencies: @@ -5826,10 +5572,6 @@ mime@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" -mime@^1.3.4: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - mime@^2.0.3, mime@^2.1.0: version "2.3.1" resolved "https://registry.yarnpkg.com/mime/-/mime-2.3.1.tgz#b1621c54d63b97c47d3cfe7f7215f7d64517c369" @@ -5850,7 +5592,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" -"minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -5864,14 +5606,14 @@ minimist@1.1.x: version "1.1.3" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8" -minimist@1.2.0, minimist@^1.1.3, minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - minimist@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.1.0.tgz#99df657a52574c21c9057497df742790b2b4c0de" +minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" @@ -5911,28 +5653,12 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: +mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.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" dependencies: minimist "0.0.8" -mocha@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.1.1.tgz#b774c75609dac05eb48f4d9ba1d827b97fde8a7b" - dependencies: - browser-stdout "1.3.1" - commander "2.11.0" - debug "3.1.0" - diff "3.5.0" - escape-string-regexp "1.0.5" - glob "7.1.2" - growl "1.10.3" - he "1.1.1" - minimatch "3.0.4" - mkdirp "0.5.1" - supports-color "4.4.0" - module-definition@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/module-definition/-/module-definition-2.2.4.tgz#c0a3771de58cf6bcf12aed2476706c596ad4b2cb" @@ -5962,10 +5688,6 @@ move-concurrently@^1.0.1: rimraf "^2.5.4" run-queue "^1.0.3" -ms@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -6015,10 +5737,6 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" -native-promise-only@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/native-promise-only/-/native-promise-only-0.8.1.tgz#20a318c30cb45f71fe7adfbf7b21c99c1472ef11" - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -6039,10 +5757,6 @@ neo-async@^2.5.0: version "2.5.1" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.1.tgz#acb909e327b1e87ec9ef15f41b8a269512ad41ee" -netmask@~1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35" - nice-try@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4" @@ -6053,6 +5767,13 @@ no-case@^2.2.0: dependencies: lower-case "^1.1.1" +node-cache@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/node-cache/-/node-cache-4.2.0.tgz#48ac796a874e762582692004a376d26dfa875811" + dependencies: + clone "2.x" + lodash "4.x" + node-dir@0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.8.tgz#55fb8deb699070707fb67f91a460f0448294c77d" @@ -6061,6 +5782,10 @@ node-forge@0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.1.tgz#9da611ea08982f4b94206b3beb4cc9665f20c300" +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + node-libs-browser@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" @@ -6089,6 +5814,15 @@ node-libs-browser@^2.0.0: util "^0.10.3" vm-browserify "0.0.4" +node-notifier@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea" + dependencies: + growly "^1.3.0" + semver "^5.4.1" + shellwords "^0.1.1" + which "^1.3.0" + node-pre-gyp@^0.9.0: version "0.9.1" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.9.1.tgz#f11c07516dd92f87199dbc7e1838eab7cd56c9e0" @@ -6116,63 +5850,10 @@ node-source-walk@^3.0.0, node-source-walk@^3.2.0, node-source-walk@^3.3.0: dependencies: babylon "^6.17.0" -node-uuid@~1.4.7: - version "1.4.8" - resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" - node-watch@^0.5.5: version "0.5.8" resolved "https://registry.yarnpkg.com/node-watch/-/node-watch-0.5.8.tgz#208d10f93afe2f24b3701c254f54c7552f90c905" -nodemailer-direct-transport@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/nodemailer-direct-transport/-/nodemailer-direct-transport-3.3.2.tgz#e96fafb90358560947e569017d97e60738a50a86" - dependencies: - nodemailer-shared "1.1.0" - smtp-connection "2.12.0" - -nodemailer-fetch@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz#79c4908a1c0f5f375b73fe888da9828f6dc963a4" - -nodemailer-shared@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz#cf5994e2fd268d00f5cf0fa767a08169edb07ec0" - dependencies: - nodemailer-fetch "1.6.0" - -nodemailer-smtp-pool@2.8.2: - version "2.8.2" - resolved "https://registry.yarnpkg.com/nodemailer-smtp-pool/-/nodemailer-smtp-pool-2.8.2.tgz#2eb94d6cf85780b1b4725ce853b9cbd5e8da8c72" - dependencies: - nodemailer-shared "1.1.0" - nodemailer-wellknown "0.1.10" - smtp-connection "2.12.0" - -nodemailer-smtp-transport@2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/nodemailer-smtp-transport/-/nodemailer-smtp-transport-2.7.2.tgz#03d71c76314f14ac7dbc7bf033a6a6d16d67fb77" - dependencies: - nodemailer-shared "1.1.0" - nodemailer-wellknown "0.1.10" - smtp-connection "2.12.0" - -nodemailer-wellknown@0.1.10: - version "0.1.10" - resolved "https://registry.yarnpkg.com/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz#586db8101db30cb4438eb546737a41aad0cf13d5" - -nodemailer@^2.5.0: - version "2.7.2" - resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-2.7.2.tgz#f242e649aeeae39b6c7ed740ef7b061c404d30f9" - dependencies: - libmime "3.0.0" - mailcomposer "4.0.1" - nodemailer-direct-transport "3.3.2" - nodemailer-shared "1.1.0" - nodemailer-smtp-pool "2.8.2" - nodemailer-smtp-transport "2.7.2" - socks "1.1.9" - nomnom@^1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.8.1.tgz#2151f722472ba79e50a76fc125bb8c8f2e4dc2a7" @@ -6180,12 +5861,6 @@ nomnom@^1.8.1: chalk "~0.4.0" underscore "~1.6.0" -nopt@3.x: - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - dependencies: - abbrev "1" - nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" @@ -6193,6 +5868,12 @@ nopt@^4.0.1: abbrev "1" osenv "^0.1.4" +nopt@~3.0.1: + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + dependencies: + abbrev "1" + normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: version "2.4.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" @@ -6283,10 +5964,6 @@ nth-check@~1.0.1: dependencies: boolbase "~1.0.0" -null-check@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd" - num2fraction@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" @@ -6299,7 +5976,7 @@ nwmatcher@^1.4.3: version "1.4.4" resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.4.tgz#2285631f34a95f0d0395cd900c96ed39b58f346e" -oauth-sign@~0.8.1, oauth-sign@~0.8.2: +oauth-sign@~0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" @@ -6307,10 +5984,6 @@ object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" -object-component@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" - object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" @@ -6372,7 +6045,7 @@ on-headers@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" -once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: +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" dependencies: @@ -6524,30 +6197,6 @@ p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" -pac-proxy-agent@1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-1.1.0.tgz#34a385dfdf61d2f0ecace08858c745d3e791fd4d" - dependencies: - agent-base "2" - debug "2" - extend "3" - get-uri "2" - http-proxy-agent "1" - https-proxy-agent "1" - pac-resolver "~2.0.0" - raw-body "2" - socks-proxy-agent "2" - -pac-resolver@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-2.0.0.tgz#99b88d2f193fbdeefc1c9a529c1f3260ab5277cd" - dependencies: - co "~3.0.6" - degenerator "~1.0.2" - ip "1.0.1" - netmask "~1.0.4" - thunkify "~2.1.1" - pako@~1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" @@ -6606,18 +6255,6 @@ parse5@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" -parseqs@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" - dependencies: - better-assert "~1.0.0" - -parseuri@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" - dependencies: - better-assert "~1.0.0" - parseurl@~1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" @@ -6660,22 +6297,10 @@ path-parse@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" -path-proxy@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/path-proxy/-/path-proxy-1.0.0.tgz#18e8a36859fc9d2f1a53b48dee138543c020de5e" - dependencies: - inflection "~1.3.0" - path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" -path-to-regexp@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" - dependencies: - isarray "0.0.1" - path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" @@ -6690,10 +6315,6 @@ path-type@^3.0.0: dependencies: pify "^3.0.0" -pathval@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" - pbkdf2@^3.0.3: version "3.0.16" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.16.tgz#7404208ec6b01b62d85bf83853a8064f8d9c2a5c" @@ -7287,6 +6908,14 @@ pretty-format@^22.4.3: ansi-regex "^3.0.0" ansi-styles "^3.2.0" +pretty@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pretty/-/pretty-2.0.0.tgz#adbc7960b7bbfe289a557dc5f737619a220d06a5" + dependencies: + condense-newlines "^0.2.1" + extend-shallow "^2.0.1" + js-beautify "^1.6.12" + private@^0.1.6, private@^0.1.7, private@^0.1.8, private@~0.1.5: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -7295,10 +6924,6 @@ process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" - process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" @@ -7323,6 +6948,10 @@ promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + proxy-addr@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341" @@ -7330,24 +6959,11 @@ proxy-addr@~2.0.3: forwarded "~0.1.2" ipaddr.js "1.6.0" -proxy-agent@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-2.0.0.tgz#57eb5347aa805d74ec681cb25649dba39c933499" - dependencies: - agent-base "2" - debug "2" - extend "3" - http-proxy-agent "1" - https-proxy-agent "1" - lru-cache "~2.6.5" - pac-proxy-agent "1" - socks-proxy-agent "2" - prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" -pseudomap@^1.0.2: +pseudomap@^1.0.1, pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -7380,7 +6996,7 @@ punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" -punycode@1.4.1, punycode@^1.2.4, punycode@^1.4.1: +punycode@^1.2.4, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" @@ -7392,22 +7008,10 @@ q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" -q@~1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" - -qjobs@^1.1.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" - qs@6.5.1, qs@~6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" -qs@~6.2.0: - version "6.2.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.3.tgz#1cfcb25c10a9b2b483053ff39f5dfc9233908cfe" - query-string@^4.1.0: version "4.3.4" resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" @@ -7459,11 +7063,11 @@ randomfill@^1.0.3: randombytes "^2.0.5" safe-buffer "^5.1.0" -range-parser@^1.0.3, range-parser@^1.2.0, range-parser@~1.2.0: +range-parser@^1.0.3, range-parser@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" -raw-body@2, raw-body@2.3.2: +raw-body@2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" dependencies: @@ -7524,7 +7128,7 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -"readable-stream@1 || 2", readable-stream@2, readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3, readable-stream@^2.3.5: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" dependencies: @@ -7545,26 +7149,6 @@ readable-stream@1.0: isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@1.1.x, "readable-stream@1.x >=1.1.9": - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" - util-deprecate "~1.0.1" - readdirp@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" @@ -7574,6 +7158,12 @@ readdirp@^2.0.0: readable-stream "^2.0.2" set-immediate-shim "^1.0.1" +realpath-native@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.0.tgz#7885721a83b43bd5327609f0ddecb2482305fdf0" + dependencies: + util.promisify "^1.0.0" + recast@^0.12.5: version "0.12.9" resolved "https://registry.yarnpkg.com/recast/-/recast-0.12.9.tgz#e8e52bdb9691af462ccbd7c15d5a5113647a15f1" @@ -7606,22 +7196,6 @@ redent@^1.0.0: indent-string "^2.1.0" strip-indent "^1.0.1" -redis-commands@^1.2.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.3.5.tgz#4495889414f1e886261180b1442e7295602d83a2" - -redis-parser@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-2.6.0.tgz#52ed09dacac108f1a631c07e9b69941e7a19504b" - -redis@^2.7.1: - version "2.8.0" - resolved "https://registry.yarnpkg.com/redis/-/redis-2.8.0.tgz#202288e3f58c49f6079d97af7a10e1303ae14b02" - dependencies: - double-ended-queue "^2.1.0-0" - redis-commands "^1.2.0" - redis-parser "^2.6.0" - reduce-css-calc@^1.2.6: version "1.3.0" resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" @@ -7728,10 +7302,6 @@ repeat-element@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" -repeat-string@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-0.2.2.tgz#c7a8d3236068362059a7e4651fc6884e8b1fb4ae" - repeat-string@^1.5.2, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" @@ -7764,33 +7334,7 @@ request-promise-native@^1.0.5: stealthy-require "^1.1.0" tough-cookie ">=2.3.3" -request@2.75.x: - version "2.75.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - bl "~1.1.2" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.0.0" - har-validator "~2.0.6" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - node-uuid "~1.4.7" - oauth-sign "~0.8.1" - qs "~6.2.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" - -request@^2.0.0, request@^2.74.0, request@^2.81.0, request@^2.83.0: +request@^2.81.0, request@^2.83.0: version "2.85.0" resolved "https://registry.yarnpkg.com/request/-/request-2.85.0.tgz#5a03615a47c61420b3eb99b7dba204f83603e1fa" dependencies: @@ -7817,15 +7361,6 @@ request@^2.0.0, request@^2.74.0, request@^2.81.0, request@^2.83.0: tunnel-agent "^0.6.0" uuid "^3.1.0" -requestretry@^1.2.2: - version "1.13.0" - resolved "https://registry.yarnpkg.com/requestretry/-/requestretry-1.13.0.tgz#213ec1006eeb750e8b8ce54176283d15a8d55d94" - dependencies: - extend "^3.0.0" - lodash "^4.15.0" - request "^2.74.0" - when "^3.7.7" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -7890,15 +7425,15 @@ resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" -resolve-url@^0.2.1: +resolve-url@^0.2.1, resolve-url@~0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" -resolve@1.1.7, resolve@1.1.x: +resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.5.0: +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.2.0, resolve@^1.5.0: version "1.7.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3" dependencies: @@ -7938,7 +7473,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1, rimraf@^2.6.2: +rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: @@ -7997,9 +7532,19 @@ safer-buffer@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" -samsam@1.x, samsam@^1.1.3: - version "1.3.0" - resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.3.0.tgz#8d1d9350e25622da30de3e44ba692b5221ab7c50" +sane@^2.0.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.0.tgz#6359cd676f5efd9988b264d8ce3b827dd6b27bec" + dependencies: + anymatch "^2.0.0" + exec-sh "^0.2.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.1.1" sass-lookup@^1.1.0: version "1.1.0" @@ -8012,12 +7557,6 @@ sax@^1.2.4, sax@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" -schema-utils@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf" - dependencies: - ajv "^5.0.0" - schema-utils@^0.4.0, schema-utils@^0.4.3, schema-utils@^0.4.4, schema-utils@^0.4.5: version "0.4.5" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.5.tgz#21836f0608aac17b78f9e3e24daff14a5ca13a3e" @@ -8043,7 +7582,7 @@ semver-compare@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0: +"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" @@ -8051,10 +7590,6 @@ semver@5.4.1: version "5.4.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" -semver@~5.0.1: - version "5.0.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a" - send@0.16.2: version "0.16.2" resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" @@ -8073,7 +7608,7 @@ send@0.16.2: range-parser "~1.2.0" statuses "~1.4.0" -serialize-javascript@^1.4.0: +serialize-javascript@^1.3.0, serialize-javascript@^1.4.0: version "1.5.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.5.0.tgz#1aa336162c88a890ddad5384baebc93a655161fe" @@ -8161,7 +7696,7 @@ shelljs@^0.8.0: interpret "^1.0.0" rechoir "^0.6.2" -shelljs@^0.8.2: +shelljs@^0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.2.tgz#345b7df7763f4c2340d584abb532c5f752ca9e35" dependencies: @@ -8169,33 +7704,18 @@ shelljs@^0.8.2: interpret "^1.0.0" rechoir "^0.6.2" +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + +sigmund@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" + 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-chai@^2.12.0: - version "2.14.0" - resolved "https://registry.yarnpkg.com/sinon-chai/-/sinon-chai-2.14.0.tgz#da7dd4cc83cd6a260b67cca0f7a9fdae26a1205d" - -sinon@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-2.4.1.tgz#021fd64b54cb77d9d2fb0d43cdedfae7629c3a36" - dependencies: - diff "^3.1.0" - formatio "1.2.0" - lolex "^1.6.0" - native-promise-only "^0.8.1" - path-to-regexp "^1.7.0" - samsam "^1.1.3" - text-encoding "0.6.4" - type-detect "^4.0.0" - -slack-node@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/slack-node/-/slack-node-0.2.0.tgz#de4b8dddaa8b793f61dbd2938104fdabf37dfa30" - dependencies: - requestretry "^1.2.2" - slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" @@ -8214,17 +7734,6 @@ slide@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" -smart-buffer@^1.0.13, smart-buffer@^1.0.4: - version "1.1.15" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-1.1.15.tgz#7f114b5b65fab3e2a35aa775bb12f0d1c649bf16" - -smtp-connection@2.12.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/smtp-connection/-/smtp-connection-2.12.0.tgz#d76ef9127cb23c2259edb1e8349c2e8d5e2d74c1" - dependencies: - httpntlm "1.6.1" - nodemailer-shared "1.1.0" - snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -8252,59 +7761,12 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" - dependencies: - hoek "2.x.x" - sntp@2.x.x: version "2.1.0" resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" dependencies: hoek "4.x.x" -socket.io-adapter@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b" - -socket.io-client@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.0.4.tgz#0918a552406dc5e540b380dcd97afc4a64332f8e" - dependencies: - backo2 "1.0.2" - base64-arraybuffer "0.1.5" - component-bind "1.0.0" - component-emitter "1.2.1" - debug "~2.6.4" - engine.io-client "~3.1.0" - has-cors "1.1.0" - indexof "0.0.1" - object-component "0.0.3" - parseqs "0.0.5" - parseuri "0.0.5" - socket.io-parser "~3.1.1" - to-array "0.1.4" - -socket.io-parser@~3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.1.3.tgz#ed2da5ee79f10955036e3da413bfd7f1e4d86c8e" - dependencies: - component-emitter "1.2.1" - debug "~3.1.0" - has-binary2 "~1.0.2" - isarray "2.0.1" - -socket.io@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.0.4.tgz#c1a4590ceff87ecf13c72652f046f716b29e6014" - dependencies: - debug "~2.6.6" - engine.io "~3.1.0" - socket.io-adapter "~1.1.0" - socket.io-client "2.0.4" - socket.io-parser "~3.1.1" - sockjs-client@1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12" @@ -8323,28 +7785,6 @@ sockjs@0.3.19: faye-websocket "^0.10.0" uuid "^3.0.1" -socks-proxy-agent@2: - version "2.1.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-2.1.1.tgz#86ebb07193258637870e13b7bd99f26c663df3d3" - dependencies: - agent-base "2" - extend "3" - socks "~1.1.5" - -socks@1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/socks/-/socks-1.1.9.tgz#628d7e4d04912435445ac0b6e459376cb3e6d691" - dependencies: - ip "^1.1.2" - smart-buffer "^1.0.4" - -socks@~1.1.5: - version "1.1.10" - resolved "https://registry.yarnpkg.com/socks/-/socks-1.1.10.tgz#5b8b7fc7c8f341c53ed056e929b7bf4de8ba7b5a" - dependencies: - ip "^1.1.4" - smart-buffer "^1.0.13" - sort-keys@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" @@ -8361,6 +7801,15 @@ source-list-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" +source-map-resolve@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.3.1.tgz#610f6122a445b8dd51535a2a71b783dfc1248761" + dependencies: + atob "~1.1.0" + resolve-url "~0.2.1" + source-map-url "~0.3.0" + urix "~0.1.0" + source-map-resolve@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a" @@ -8387,10 +7836,24 @@ 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.5.x, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: +source-map-url@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.3.0.tgz#7ecaf13b57bcd09da8a40c5d269db33799d4aaf9" + +source-map@0.5.6: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + +source-map@0.5.x, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" +source-map@^0.1.38: + version "0.1.43" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" + dependencies: + amdefine ">=0.0.4" + source-map@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" @@ -8401,12 +7864,6 @@ 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" -source-map@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" - dependencies: - amdefine ">=0.0.4" - spdx-correct@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" @@ -8501,10 +7958,6 @@ static-extend@^0.1.1: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" -statuses@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" - statuses@~1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" @@ -8547,15 +8000,6 @@ stream-to-observable@^0.2.0: dependencies: any-observable "^0.2.0" -streamroller@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-0.7.0.tgz#a1d1b7cf83d39afb0d63049a5acbf93493bdf64b" - dependencies: - date-format "^1.2.0" - debug "^3.1.0" - mkdirp "^0.5.1" - readable-stream "^2.3.0" - strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" @@ -8564,6 +8008,13 @@ string-argv@^0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" +string-length@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" + dependencies: + astral-regex "^1.0.0" + strip-ansi "^4.0.0" + string-template@~0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" @@ -8601,7 +8052,7 @@ stringify-object@^3.2.1, stringify-object@^3.2.2: is-obj "^1.0.1" is-regexp "^1.0.0" -stringstream@~0.0.4, stringstream@~0.0.5: +stringstream@~0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" @@ -8628,16 +8079,16 @@ strip-bom-stream@^2.0.0: first-chunk-stream "^2.0.0" strip-bom "^2.0.0" +strip-bom@3.0.0, strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" dependencies: is-utf8 "^0.2.0" -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -8652,7 +8103,7 @@ strip-indent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" -strip-json-comments@~2.0.1: +strip-json-comments@^2.0.0, 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" @@ -8677,17 +8128,11 @@ sugarss@^1.0.0: dependencies: postcss "^6.0.14" -supports-color@4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" - dependencies: - has-flag "^2.0.0" - supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" -supports-color@^3.1.0, supports-color@^3.2.3: +supports-color@^3.1.2, supports-color@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" dependencies: @@ -8765,9 +8210,15 @@ temp@^0.8.1: os-tmpdir "^1.0.0" rimraf "~2.2.6" -text-encoding@0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/text-encoding/-/text-encoding-0.6.4.tgz#e399a982257a276dae428bb92845cb71bdc26d19" +test-exclude@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.1.tgz#dfa222f03480bca69207ca728b37d74b45f724fa" + dependencies: + arrify "^1.0.1" + micromatch "^3.1.8" + object-assign "^4.1.0" + read-pkg-up "^1.0.1" + require-main-filename "^1.0.1" text-table@^0.2.0, text-table@~0.2.0: version "0.2.0" @@ -8777,6 +8228,10 @@ textextensions@2: version "2.2.0" resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-2.2.0.tgz#38ac676151285b658654581987a0ce1a4490d286" +throat@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" + through2@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" @@ -8788,10 +8243,6 @@ through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" -thunkify@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/thunkify/-/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d" - thunky@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.2.tgz#a862e018e3fb1ea2ec3fce5d55605cf57f247371" @@ -8806,19 +8257,15 @@ timers-browserify@^2.0.4: dependencies: setimmediate "^1.0.4" -timespan@2.3.x: - version "2.3.0" - resolved "https://registry.yarnpkg.com/timespan/-/timespan-2.3.0.tgz#4902ce040bd13d845c8f59b27e9d59bad6f39929" - -tmp@0.0.33, tmp@0.0.x, tmp@^0.0.33: +tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" dependencies: os-tmpdir "~1.0.2" -to-array@0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" to-arraybuffer@^1.0.0: version "1.0.1" @@ -8854,7 +8301,7 @@ toposort@^1.0.0: version "1.0.6" resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.6.tgz#c31748e55d210effc00fdcdc7d6e68d7d7bb9cec" -tough-cookie@>=2.3.3, tough-cookie@^2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3: +tough-cookie@>=2.3.3, tough-cookie@^2.3.3, tough-cookie@~2.3.3: version "2.3.4" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" dependencies: @@ -8878,9 +8325,14 @@ trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" -tsscmp@~1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.5.tgz#7dc4a33af71581ab4337da91d85ca5427ebd9a97" +tsconfig@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7" + dependencies: + "@types/strip-bom" "^3.0.0" + "@types/strip-json-comments" "0.0.30" + strip-bom "^3.0.0" + strip-json-comments "^2.0.0" tty-browserify@0.0.0: version "0.0.0" @@ -8892,10 +8344,6 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" -tunnel-agent@~0.4.1: - version "0.4.3" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" - tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" @@ -8906,10 +8354,6 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-detect@^4.0.0: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - type-is@~1.6.15, type-is@~1.6.16: version "1.6.16" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" @@ -8976,18 +8420,10 @@ uglifyjs-webpack-plugin@^1.2.4: webpack-sources "^1.1.0" worker-farm "^1.5.2" -ultron@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" - underscore@~1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" -underscore@~1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" - union-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" @@ -9062,14 +8498,10 @@ uri-js@^3.0.2: dependencies: punycode "^2.1.0" -urix@^0.1.0: +urix@^0.1.0, urix@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" -url-join@^2.0.2: - version "2.0.5" - resolved "https://registry.yarnpkg.com/url-join/-/url-join-2.0.5.tgz#5af22f18c052a000a48d7b82c5e9c2e2feeda728" - url-join@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.0.tgz#4d3340e807d3773bda9991f8305acdcc2a665d2a" @@ -9133,18 +8565,11 @@ user-home@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" -useragent@2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.2.1.tgz#cf593ef4f2d175875e8bb658ea92e18a4fd06d8e" - dependencies: - lru-cache "2.2.x" - tmp "0.0.x" - util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" -util.promisify@1.0.0: +util.promisify@1.0.0, util.promisify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" dependencies: @@ -9173,10 +8598,6 @@ uuid@^3.0.1, uuid@^3.1.0: version "3.2.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" -uws@~9.14.0: - version "9.14.0" - resolved "https://registry.yarnpkg.com/uws/-/uws-9.14.0.tgz#fac8386befc33a7a3705cbd58dc47b430ca4dd95" - v8-compile-cache@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-1.1.2.tgz#8d32e4f16974654657e676e0e467a348e89b0dc4" @@ -9258,14 +8679,6 @@ vm-browserify@0.0.4: dependencies: indexof "0.0.1" -void-elements@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" - -vue-add-globals@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vue-add-globals/-/vue-add-globals-1.0.1.tgz#151f241426e70cbc790a1f31bb0f4435d7575efc" - vue-eslint-parser@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz#c268c96c6d94cfe3d938a5f7593959b0ca3360d1" @@ -9281,11 +8694,26 @@ vue-hot-reload-api@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.0.tgz#97976142405d13d8efae154749e88c4e358cf926" +vue-jest@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/vue-jest/-/vue-jest-2.5.0.tgz#9dcf902720fa47ba98e60eb771a02c13e6b4eb56" + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.26.0" + chalk "^2.1.0" + extract-from-css "^0.4.4" + find-babel-config "^1.1.0" + js-beautify "^1.6.14" + node-cache "^4.1.1" + object-assign "^4.1.1" + source-map "^0.5.6" + tsconfig "^7.0.0" + vue-template-es2015-compiler "^1.5.3" + vue-lazyload@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/vue-lazyload/-/vue-lazyload-1.2.3.tgz#901f9ec15c7e6ca78781a2bae4a343686bdedb2c" -vue-loader@^15.0.9: +vue-loader@^15.0.0: version "15.0.9" resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.0.9.tgz#2f3f59ffd395b03e413bbe14db1369c2f57917c8" dependencies: @@ -9299,6 +8727,19 @@ vue-router@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.0.1.tgz#d9b05ad9c7420ba0f626d6500d693e60092cc1e9" +vue-server-renderer@^2.5.16: + version "2.5.16" + resolved "https://registry.yarnpkg.com/vue-server-renderer/-/vue-server-renderer-2.5.16.tgz#279ef8e37e502a0de3a9ae30758cc04a472eaac0" + dependencies: + chalk "^1.1.3" + hash-sum "^1.0.2" + he "^1.1.0" + lodash.template "^4.4.0" + lodash.uniq "^4.5.0" + resolve "^1.2.0" + serialize-javascript "^1.3.0" + source-map "0.5.6" + vue-sfc-compiler@^0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/vue-sfc-compiler/-/vue-sfc-compiler-0.0.8.tgz#fdf8189f5385b080b50aae7f9f806146b100d39e" @@ -9319,7 +8760,7 @@ vue-template-compiler@2.5.16: de-indent "^1.0.2" he "^1.1.0" -vue-template-es2015-compiler@^1.6.0: +vue-template-es2015-compiler@^1.5.3, vue-template-es2015-compiler@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz#dc42697133302ce3017524356a6c61b7b69b4a18" @@ -9333,6 +8774,19 @@ w3c-hr-time@^1.0.1: dependencies: browser-process-hrtime "^0.1.2" +walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + dependencies: + makeerror "1.0.x" + +watch@~0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" + dependencies: + exec-sh "^0.2.0" + minimist "^1.2.0" + watchpack@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.5.0.tgz#231e783af830a22f8966f65c4c4bacc814072eed" @@ -9367,7 +8821,7 @@ webpack-addons@^1.1.5: dependencies: jscodeshift "^0.4.0" -webpack-cli@^2.1.3: +webpack-cli@^2.0.15: version "2.1.3" resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-2.1.3.tgz#65d166851abaa56067ef3f716b02a97ba6bbe84d" dependencies: @@ -9410,18 +8864,6 @@ webpack-dev-middleware@3.1.3: url-join "^4.0.0" webpack-log "^1.0.1" -webpack-dev-middleware@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-2.0.6.tgz#a51692801e8310844ef3e3790e1eacfe52326fd4" - dependencies: - loud-rejection "^1.6.0" - memory-fs "~0.4.1" - mime "^2.1.0" - path-is-absolute "^1.0.0" - range-parser "^1.0.3" - url-join "^2.0.2" - webpack-log "^1.0.1" - webpack-dev-server@3.1.4: version "3.1.4" resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.1.4.tgz#9a08d13c4addd1e3b6d8ace116e86715094ad5b4" @@ -9464,6 +8906,12 @@ webpack-log@^1.0.1, webpack-log@^1.1.2: loglevelnext "^1.0.1" uuid "^3.1.0" +webpack-merge@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.2.tgz#5d372dddd3e1e5f8874f5bf5a8e929db09feb216" + dependencies: + lodash "^4.17.5" + webpack-sources@^1.0.1, webpack-sources@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54" @@ -9471,7 +8919,7 @@ webpack-sources@^1.0.1, webpack-sources@^1.1.0: source-list-map "^2.0.0" source-map "~0.6.1" -webpack@^4.8.1: +webpack@^4.6.0: version "4.8.1" resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.8.1.tgz#59e38f99f2751c931dd09a035aba7bec4b5f916e" dependencies: @@ -9527,10 +8975,6 @@ whatwg-url@^6.4.0: tr46 "^1.0.0" webidl-conversions "^4.0.1" -when@^3.7.7: - version "3.7.8" - resolved "https://registry.yarnpkg.com/when/-/when-3.7.8.tgz#c7130b6a7ea04693e842cdc9e7a1f2aa39a39f82" - whet.extend@~0.9.9: version "0.9.9" resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" @@ -9539,7 +8983,7 @@ which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" -which@^1.1.1, which@^1.2.1, which@^1.2.10, which@^1.2.14, which@^1.2.9: +which@^1.2.10, which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" dependencies: @@ -9559,14 +9003,14 @@ wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" -wordwrap@^1.0.0, wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" +wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + worker-farm@^1.5.2: version "1.6.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" @@ -9592,6 +9036,14 @@ write-file-atomic@^1.2.0: imurmurhash "^0.1.4" slide "^1.1.5" +write-file-atomic@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + write@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" @@ -9605,26 +9057,10 @@ ws@^4.0.0: async-limiter "~1.0.0" safe-buffer "~5.1.0" -ws@~3.3.1: - version "3.3.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" - dependencies: - async-limiter "~1.0.0" - safe-buffer "~5.1.0" - ultron "~1.1.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" -xmlhttprequest-ssl@~1.5.4: - version "1.5.5" - resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" - -xregexp@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" - xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" @@ -9645,6 +9081,12 @@ yallist@^3.0.0, yallist@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" +yargs-parser@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" + dependencies: + camelcase "^4.1.0" + yargs-parser@^9.0.2: version "9.0.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" @@ -9668,6 +9110,23 @@ yargs@11.0.0: y18n "^3.2.1" yargs-parser "^9.0.2" +yargs@^10.0.3: + version "10.1.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5" + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^2.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" + yargs-parser "^8.1.0" + yargs@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" @@ -9700,10 +9159,6 @@ yargs@~3.10.0: decamelize "^1.0.0" window-size "0.1.0" -yeast@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" - yeoman-environment@^2.0.0, yeoman-environment@^2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/yeoman-environment/-/yeoman-environment-2.0.6.tgz#ae1b21d826b363f3d637f88a7fc9ea7414cb5377"